@smartbit4all/ng-client 4.5.31 → 4.5.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/esm2022/lib/smart-component-layout/api/api/api.mjs +1 -1
  2. package/esm2022/lib/smart-component-layout/api/api/default.service.mjs +1 -1
  3. package/esm2022/lib/smart-component-layout/api/api.module.mjs +1 -1
  4. package/esm2022/lib/smart-component-layout/api/configuration.mjs +1 -1
  5. package/esm2022/lib/smart-component-layout/api/encoder.mjs +1 -1
  6. package/esm2022/lib/smart-component-layout/api/index.mjs +1 -1
  7. package/esm2022/lib/smart-component-layout/api/model/componentType.mjs +1 -1
  8. package/esm2022/lib/smart-component-layout/api/model/layoutDefinitionDescriptor.mjs +1 -1
  9. package/esm2022/lib/smart-component-layout/api/model/layoutDirection.mjs +1 -1
  10. package/esm2022/lib/smart-component-layout/api/model/smartComponentLayoutDefinition.mjs +1 -1
  11. package/esm2022/lib/smart-component-layout/api/model/smartComponentWidgetDefinition.mjs +1 -1
  12. package/esm2022/lib/smart-component-layout/api/param.mjs +1 -1
  13. package/esm2022/lib/smart-component-layout/api/variables.mjs +1 -1
  14. package/esm2022/lib/smart-diagram/api/api/api.mjs +1 -1
  15. package/esm2022/lib/smart-diagram/api/api/diagramService.service.mjs +1 -1
  16. package/esm2022/lib/smart-diagram/api/api.module.mjs +1 -1
  17. package/esm2022/lib/smart-diagram/api/configuration.mjs +1 -1
  18. package/esm2022/lib/smart-diagram/api/encoder.mjs +1 -1
  19. package/esm2022/lib/smart-diagram/api/index.mjs +1 -1
  20. package/esm2022/lib/smart-diagram/api/model/diagramColor.mjs +1 -1
  21. package/esm2022/lib/smart-diagram/api/model/diagramDataContainer.mjs +1 -1
  22. package/esm2022/lib/smart-diagram/api/model/diagramDataItem.mjs +1 -1
  23. package/esm2022/lib/smart-diagram/api/model/diagramDataSet.mjs +1 -1
  24. package/esm2022/lib/smart-diagram/api/model/diagramDescriptor.mjs +1 -1
  25. package/esm2022/lib/smart-diagram/api/model/diagramModel.mjs +1 -1
  26. package/esm2022/lib/smart-diagram/api/model/diagramShape.mjs +1 -1
  27. package/esm2022/lib/smart-diagram/api/model/drawTime.mjs +1 -1
  28. package/esm2022/lib/smart-diagram/api/model/labelText.mjs +1 -1
  29. package/esm2022/lib/smart-diagram/api/model/models.mjs +1 -1
  30. package/esm2022/lib/smart-diagram/api/param.mjs +1 -1
  31. package/esm2022/lib/smart-diagram/api/variables.mjs +1 -1
  32. package/esm2022/lib/smart-form/api/api/api.mjs +1 -1
  33. package/esm2022/lib/smart-form/api/api/default.service.mjs +1 -1
  34. package/esm2022/lib/smart-form/api/api.module.mjs +1 -1
  35. package/esm2022/lib/smart-form/api/configuration.mjs +1 -1
  36. package/esm2022/lib/smart-form/api/encoder.mjs +1 -1
  37. package/esm2022/lib/smart-form/api/index.mjs +1 -1
  38. package/esm2022/lib/smart-form/api/model/dateFieldProperties.mjs +1 -1
  39. package/esm2022/lib/smart-form/api/model/fileUploaderProperties.mjs +1 -1
  40. package/esm2022/lib/smart-form/api/model/imageProperties.mjs +1 -1
  41. package/esm2022/lib/smart-form/api/model/models.mjs +1 -1
  42. package/esm2022/lib/smart-form/api/model/multiFileUploaderProperties.mjs +1 -1
  43. package/esm2022/lib/smart-form/api/model/propertyMapping.mjs +1 -1
  44. package/esm2022/lib/smart-form/api/model/recordingUploaderProperties.mjs +1 -1
  45. package/esm2022/lib/smart-form/api/model/selectionDefinition.mjs +1 -1
  46. package/esm2022/lib/smart-form/api/model/smartFormInputMode.mjs +1 -1
  47. package/esm2022/lib/smart-form/api/model/smartFormWidgetDirection.mjs +1 -1
  48. package/esm2022/lib/smart-form/api/model/smartFormWidgetType.mjs +1 -1
  49. package/esm2022/lib/smart-form/api/model/smartLayoutDefinition.mjs +1 -1
  50. package/esm2022/lib/smart-form/api/model/smartMatrixModel.mjs +1 -1
  51. package/esm2022/lib/smart-form/api/model/smartWidgetDefinition.mjs +1 -1
  52. package/esm2022/lib/smart-form/api/model/smartWidgetHint.mjs +1 -1
  53. package/esm2022/lib/smart-form/api/model/sortDefinition.mjs +1 -1
  54. package/esm2022/lib/smart-form/api/model/textBoxProperties.mjs +1 -1
  55. package/esm2022/lib/smart-form/api/model/textFieldProperties.mjs +1 -1
  56. package/esm2022/lib/smart-form/api/model/valueChangeMode.mjs +1 -1
  57. package/esm2022/lib/smart-form/api/param.mjs +1 -1
  58. package/esm2022/lib/smart-form/api/variables.mjs +1 -1
  59. package/esm2022/lib/smart-map/api/api/api.mjs +1 -1
  60. package/esm2022/lib/smart-map/api/api/geoMap.service.mjs +1 -1
  61. package/esm2022/lib/smart-map/api/api.module.mjs +1 -1
  62. package/esm2022/lib/smart-map/api/configuration.mjs +1 -1
  63. package/esm2022/lib/smart-map/api/encoder.mjs +1 -1
  64. package/esm2022/lib/smart-map/api/index.mjs +1 -1
  65. package/esm2022/lib/smart-map/api/model/gPSPosition.mjs +1 -1
  66. package/esm2022/lib/smart-map/api/model/gPSRoute.mjs +1 -1
  67. package/esm2022/lib/smart-map/api/model/geoMapChange.mjs +1 -1
  68. package/esm2022/lib/smart-map/api/model/geoMapDataLoadingMode.mjs +1 -1
  69. package/esm2022/lib/smart-map/api/model/geoMapDataSourceDescriptor.mjs +1 -1
  70. package/esm2022/lib/smart-map/api/model/geoMapDataSourceType.mjs +1 -1
  71. package/esm2022/lib/smart-map/api/model/geoMapEditingSession.mjs +1 -1
  72. package/esm2022/lib/smart-map/api/model/geoMapInteraction.mjs +1 -1
  73. package/esm2022/lib/smart-map/api/model/geoMapItem.mjs +1 -1
  74. package/esm2022/lib/smart-map/api/model/geoMapItemKind.mjs +1 -1
  75. package/esm2022/lib/smart-map/api/model/geoMapLayer.mjs +1 -1
  76. package/esm2022/lib/smart-map/api/model/geoMapLayerChange.mjs +1 -1
  77. package/esm2022/lib/smart-map/api/model/geoMapLayerDescriptor.mjs +1 -1
  78. package/esm2022/lib/smart-map/api/model/geoMapModel.mjs +1 -1
  79. package/esm2022/lib/smart-map/api/model/geoMapOperationMode.mjs +1 -1
  80. package/esm2022/lib/smart-map/api/model/geoMapSelectionMode.mjs +1 -1
  81. package/esm2022/lib/smart-map/api/model/geoMapServerModel.mjs +1 -1
  82. package/esm2022/lib/smart-map/api/model/geoMapTextType.mjs +1 -1
  83. package/esm2022/lib/smart-map/api/model/geoMapViewState.mjs +1 -1
  84. package/esm2022/lib/smart-map/api/model/geoMapViewport.mjs +1 -1
  85. package/esm2022/lib/smart-map/api/model/models.mjs +1 -1
  86. package/esm2022/lib/smart-map/api/param.mjs +1 -1
  87. package/esm2022/lib/smart-map/api/variables.mjs +1 -1
  88. package/esm2022/lib/smart-tree/smarttree.component.mjs +3 -3
  89. package/esm2022/lib/view-context/api/api/view.service.mjs +1 -1
  90. package/esm2022/lib/view-context/api/model/models.mjs +1 -1
  91. package/esm2022/lib/view-context/api/model/smartLinkData.mjs +1 -1
  92. package/esm2022/lib/view-context/api/model/uiAction.mjs +1 -1
  93. package/esm2022/lib/view-context/api/model/uiActionDefinition.mjs +1 -1
  94. package/esm2022/lib/view-context/api/model/uiActionDefinitionEntry.mjs +1 -1
  95. package/esm2022/lib/view-context/api/model/uiActionInputType.mjs +1 -1
  96. package/esm2022/lib/view-context/api/model/uiActionSchedule.mjs +1 -1
  97. package/esm2022/lib/view-context/api/model/uiActionUploadDescriptor.mjs +1 -1
  98. package/esm2022/lib/view-context/api/model/view.mjs +1 -1
  99. package/esm2022/lib/view-context/api/model/viewData.mjs +1 -1
  100. package/esm2022/lib/view-context/api/model/viewEventHandler.mjs +1 -1
  101. package/fesm2022/smartbit4all-ng-client.mjs +2 -2
  102. package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
  103. package/package.json +1 -1
  104. package/smartbit4all-ng-client-4.5.32.tgz +0 -0
  105. package/smartbit4all-ng-client-4.5.31.tgz +0 -0
@@ -6,4 +6,4 @@ export const COLLECTION_FORMATS = {
6
6
  'ssv': ' ',
7
7
  'pipes': '|'
8
8
  };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtbWFwL2FwaS92YXJpYWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQVMsVUFBVSxDQUFDLENBQUM7QUFDaEUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDOUIsS0FBSyxFQUFFLEdBQUc7SUFDVixLQUFLLEVBQUUsS0FBSztJQUNaLEtBQUssRUFBRSxHQUFHO0lBQ1YsT0FBTyxFQUFFLEdBQUc7Q0FDZixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCBjb25zdCBCQVNFX1BBVEggPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignYmFzZVBhdGgnKTtcclxuZXhwb3J0IGNvbnN0IENPTExFQ1RJT05fRk9STUFUUyA9IHtcclxuICAgICdjc3YnOiAnLCcsXHJcbiAgICAndHN2JzogJyAgICcsXHJcbiAgICAnc3N2JzogJyAnLFxyXG4gICAgJ3BpcGVzJzogJ3wnXHJcbn1cclxuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtbWFwL2FwaS92YXJpYWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQVMsVUFBVSxDQUFDLENBQUM7QUFDaEUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDOUIsS0FBSyxFQUFFLEdBQUc7SUFDVixLQUFLLEVBQUUsS0FBSztJQUNaLEtBQUssRUFBRSxHQUFHO0lBQ1YsT0FBTyxFQUFFLEdBQUc7Q0FDZixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNvbnN0IEJBU0VfUEFUSCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdiYXNlUGF0aCcpO1xuZXhwb3J0IGNvbnN0IENPTExFQ1RJT05fRk9STUFUUyA9IHtcbiAgICAnY3N2JzogJywnLFxuICAgICd0c3YnOiAnICAgJyxcbiAgICAnc3N2JzogJyAnLFxuICAgICdwaXBlcyc6ICd8J1xufVxuIl19
@@ -165,11 +165,11 @@ export class SmartTreeComponent {
165
165
  return `${cssClass}-${plusProperty}`;
166
166
  }
167
167
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartTreeComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
168
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartTreeComponent, selector: "smart-tree", inputs: { treeStyle: "treeStyle", treeService: "treeService" }, host: { properties: { "attr.data-testid": "this.testId" } }, viewQueries: [{ propertyName: "tree", first: true, predicate: ["tree"], descendants: true }, { propertyName: "trigger", predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<div class=\"smartTreeContainer\">\r\n <smart-ui-action-toolbar\r\n *ngIf=\"uiActionModels.length\"\r\n [uiActionModels]=\"uiActionModels\"\r\n ></smart-ui-action-toolbar>\r\n <mat-tree\r\n #tree\r\n *ngIf=\"treeData\"\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"sm-tree\"\r\n >\r\n <mat-nested-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodeToggle=\"{{ getIfExpanded(node) }}\"\r\n [ngClass]=\"getClassesForTreeNode(node)\"\r\n [ngStyle]=\"getNodeStyle(node)\"\r\n >\r\n <div\r\n [ngStyle]=\"getNodePadding(node)\"\r\n [ngClass]=\"getInnerClassesForTreeNode(node)\"\r\n class=\"mat-tree-node sm-tree-node\"\r\n (click)=\"onNodeClick($event, node)\"\r\n >\r\n <button mat-icon-button [attr.aria-label]=\"'Toggle ' + node.name\">\r\n <mat-icon\r\n class=\"mat-icon-rtl-mirror\"\r\n matTreeNodeToggle\r\n (click)=\"onOpenNode($event, node)\"\r\n >\r\n <div *ngIf=\"hasChild(node.level, node)\">\r\n {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </div>\r\n </mat-icon>\r\n </button>\r\n <smart-icon [icon]=\"node.icon\"> </smart-icon>\r\n <div class=\"sm-tree-row\" [ngClass]=\"node.classes\">\r\n <div class=\"sm-tree-row-caption\">\r\n {{ node.caption }}\r\n </div>\r\n <div class=\"sm-shortDescription-spacer\"></div>\r\n <div class=\"sm-tree-row-shortDescription\">\r\n {{ node.shortDescription }}\r\n </div>\r\n <div class=\"sm-shortDescription-button-spacer\"></div>\r\n <div *ngIf=\"node.button\" class=\"sm-tree-node-button\" [ngSwitch]=\"node.button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.ICON\"\r\n mat-icon-button\r\n >\r\n <smart-icon title=\"{{ node.button.icon }}\" [icon]=\"node.button.icon\"></smart-icon>\r\n </button>\r\n <div *ngSwitchCase=\"smartTreeNodeButtonType.MENU\">\r\n <button\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"customButtonClicked($event, node.button, true)\"\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon\r\n >{{ node.button.label }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button\r\n *ngFor=\"let button of node.button.menuItemButtons\"\r\n (click)=\"customButtonClicked($event, button, true)\"\r\n mat-menu-item\r\n [attr.data-testid]=\"button.code ?? null\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon\r\n >{{ button.label }}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.NORMAL\"\r\n mat-raised-button\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon>\r\n {{ node.button.icon }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n [class.sm-tree-invisible]=\"!treeControl.isExpanded(node)\"\r\n [ngClass]=\"getClassesForTreeNodeChildren(node)\"\r\n role=\"group\"\r\n >\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </div>\r\n </mat-nested-tree-node>\r\n </mat-tree>\r\n <div *ngIf=\"!treeData\">\r\n <h3>\r\n {{ errorMessage }}\r\n </h3>\r\n </div>\r\n</div>\r\n", styles: [".smartTreeContainer{display:flex;flex-direction:column;gap:.5rem}.sm-tree-invisible{display:none}.sm-tree ul,.sm-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.sm-tree div[role=group]>.mat-tree-node{padding-left:40px}.sm-tee-node{padding-left:40px}.sm-tree-node-name{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tree-node-name-row{padding-left:15px;padding-top:15px;display:flex;flex-direction:row;justify-content:space-between}.sm-tree-node-name-col{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tee-node-id{font-weight:lighter}.mat-tree-node:hover{cursor:pointer}::ng-deep .mat-icon-rtl-mirror{display:flex;flex-direction:row}.sm-tree-row{display:flex;flex-direction:row;flex:1;align-items:center}.sm-shortDescription-spacer{flex:1}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["matNestedTreeNode", "disabled", "tabIndex"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i4.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i4.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i4.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i4.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i6.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i7.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }] }); }
168
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartTreeComponent, selector: "smart-tree", inputs: { treeStyle: "treeStyle", treeService: "treeService" }, host: { properties: { "attr.data-testid": "this.testId" } }, viewQueries: [{ propertyName: "tree", first: true, predicate: ["tree"], descendants: true }, { propertyName: "trigger", predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<div class=\"smartTreeContainer\">\r\n <smart-ui-action-toolbar\r\n *ngIf=\"uiActionModels.length\"\r\n [uiActionModels]=\"uiActionModels\"\r\n ></smart-ui-action-toolbar>\r\n <mat-tree\r\n #tree\r\n *ngIf=\"treeData\"\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"sm-tree\"\r\n >\r\n <mat-nested-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodeToggle=\"{{ getIfExpanded(node) }}\"\r\n [ngClass]=\"getClassesForTreeNode(node)\"\r\n [ngStyle]=\"getNodeStyle(node)\"\r\n >\r\n <div\r\n [ngStyle]=\"getNodePadding(node)\"\r\n [ngClass]=\"getInnerClassesForTreeNode(node)\"\r\n class=\"mat-tree-node sm-tree-node\"\r\n (click)=\"onNodeClick($event, node)\"\r\n >\r\n <button mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Toggle ' + node.name\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\" (click)=\"onOpenNode($event, node)\">\r\n <div *ngIf=\"hasChild(node.level, node)\">\r\n {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </div>\r\n </mat-icon>\r\n </button>\r\n <smart-icon [icon]=\"node.icon\"> </smart-icon>\r\n <div class=\"sm-tree-row\" [ngClass]=\"node.classes\">\r\n <div class=\"sm-tree-row-caption\">\r\n {{ node.caption }}\r\n </div>\r\n <div class=\"sm-shortDescription-spacer\"></div>\r\n <div class=\"sm-tree-row-shortDescription\">\r\n {{ node.shortDescription }}\r\n </div>\r\n <div class=\"sm-shortDescription-button-spacer\"></div>\r\n <div *ngIf=\"node.button\" class=\"sm-tree-node-button\" [ngSwitch]=\"node.button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.ICON\"\r\n mat-icon-button\r\n >\r\n <smart-icon title=\"{{ node.button.icon }}\" [icon]=\"node.button.icon\"></smart-icon>\r\n </button>\r\n <div *ngSwitchCase=\"smartTreeNodeButtonType.MENU\">\r\n <button\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"customButtonClicked($event, node.button, true)\"\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon\r\n >{{ node.button.label }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button\r\n *ngFor=\"let button of node.button.menuItemButtons\"\r\n (click)=\"customButtonClicked($event, button, true)\"\r\n mat-menu-item\r\n [attr.data-testid]=\"button.code ?? null\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon\r\n >{{ button.label }}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.NORMAL\"\r\n mat-raised-button\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon>\r\n {{ node.button.icon }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n [class.sm-tree-invisible]=\"!treeControl.isExpanded(node)\"\r\n [ngClass]=\"getClassesForTreeNodeChildren(node)\"\r\n role=\"group\"\r\n >\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </div>\r\n </mat-nested-tree-node>\r\n </mat-tree>\r\n <div *ngIf=\"!treeData\">\r\n <h3>\r\n {{ errorMessage }}\r\n </h3>\r\n </div>\r\n</div>\r\n", styles: [".smartTreeContainer{display:flex;flex-direction:column;gap:.5rem}.sm-tree-invisible{display:none}.sm-tree ul,.sm-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.sm-tree div[role=group]>.mat-tree-node{padding-left:40px}.sm-tee-node{padding-left:40px}.sm-tree-node-name{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tree-node-name-row{padding-left:15px;padding-top:15px;display:flex;flex-direction:row;justify-content:space-between}.sm-tree-node-name-col{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tee-node-id{font-weight:lighter}.mat-tree-node:hover{cursor:pointer}::ng-deep .mat-icon-rtl-mirror{display:flex;flex-direction:row}.sm-tree-row{display:flex;flex-direction:row;flex:1;align-items:center}.sm-shortDescription-spacer{flex:1}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["matNestedTreeNode", "disabled", "tabIndex"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i4.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i4.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i4.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i4.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i6.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color", "imageResource"] }, { kind: "component", type: i7.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap", "toolbarPropertes"] }] }); }
169
169
  }
170
170
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartTreeComponent, decorators: [{
171
171
  type: Component,
172
- args: [{ selector: 'smart-tree', template: "<div class=\"smartTreeContainer\">\r\n <smart-ui-action-toolbar\r\n *ngIf=\"uiActionModels.length\"\r\n [uiActionModels]=\"uiActionModels\"\r\n ></smart-ui-action-toolbar>\r\n <mat-tree\r\n #tree\r\n *ngIf=\"treeData\"\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"sm-tree\"\r\n >\r\n <mat-nested-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodeToggle=\"{{ getIfExpanded(node) }}\"\r\n [ngClass]=\"getClassesForTreeNode(node)\"\r\n [ngStyle]=\"getNodeStyle(node)\"\r\n >\r\n <div\r\n [ngStyle]=\"getNodePadding(node)\"\r\n [ngClass]=\"getInnerClassesForTreeNode(node)\"\r\n class=\"mat-tree-node sm-tree-node\"\r\n (click)=\"onNodeClick($event, node)\"\r\n >\r\n <button mat-icon-button [attr.aria-label]=\"'Toggle ' + node.name\">\r\n <mat-icon\r\n class=\"mat-icon-rtl-mirror\"\r\n matTreeNodeToggle\r\n (click)=\"onOpenNode($event, node)\"\r\n >\r\n <div *ngIf=\"hasChild(node.level, node)\">\r\n {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </div>\r\n </mat-icon>\r\n </button>\r\n <smart-icon [icon]=\"node.icon\"> </smart-icon>\r\n <div class=\"sm-tree-row\" [ngClass]=\"node.classes\">\r\n <div class=\"sm-tree-row-caption\">\r\n {{ node.caption }}\r\n </div>\r\n <div class=\"sm-shortDescription-spacer\"></div>\r\n <div class=\"sm-tree-row-shortDescription\">\r\n {{ node.shortDescription }}\r\n </div>\r\n <div class=\"sm-shortDescription-button-spacer\"></div>\r\n <div *ngIf=\"node.button\" class=\"sm-tree-node-button\" [ngSwitch]=\"node.button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.ICON\"\r\n mat-icon-button\r\n >\r\n <smart-icon title=\"{{ node.button.icon }}\" [icon]=\"node.button.icon\"></smart-icon>\r\n </button>\r\n <div *ngSwitchCase=\"smartTreeNodeButtonType.MENU\">\r\n <button\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"customButtonClicked($event, node.button, true)\"\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon\r\n >{{ node.button.label }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button\r\n *ngFor=\"let button of node.button.menuItemButtons\"\r\n (click)=\"customButtonClicked($event, button, true)\"\r\n mat-menu-item\r\n [attr.data-testid]=\"button.code ?? null\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon\r\n >{{ button.label }}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.NORMAL\"\r\n mat-raised-button\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon>\r\n {{ node.button.icon }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n [class.sm-tree-invisible]=\"!treeControl.isExpanded(node)\"\r\n [ngClass]=\"getClassesForTreeNodeChildren(node)\"\r\n role=\"group\"\r\n >\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </div>\r\n </mat-nested-tree-node>\r\n </mat-tree>\r\n <div *ngIf=\"!treeData\">\r\n <h3>\r\n {{ errorMessage }}\r\n </h3>\r\n </div>\r\n</div>\r\n", styles: [".smartTreeContainer{display:flex;flex-direction:column;gap:.5rem}.sm-tree-invisible{display:none}.sm-tree ul,.sm-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.sm-tree div[role=group]>.mat-tree-node{padding-left:40px}.sm-tee-node{padding-left:40px}.sm-tree-node-name{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tree-node-name-row{padding-left:15px;padding-top:15px;display:flex;flex-direction:row;justify-content:space-between}.sm-tree-node-name-col{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tee-node-id{font-weight:lighter}.mat-tree-node:hover{cursor:pointer}::ng-deep .mat-icon-rtl-mirror{display:flex;flex-direction:row}.sm-tree-row{display:flex;flex-direction:row;flex:1;align-items:center}.sm-shortDescription-spacer{flex:1}\n"] }]
172
+ args: [{ selector: 'smart-tree', template: "<div class=\"smartTreeContainer\">\r\n <smart-ui-action-toolbar\r\n *ngIf=\"uiActionModels.length\"\r\n [uiActionModels]=\"uiActionModels\"\r\n ></smart-ui-action-toolbar>\r\n <mat-tree\r\n #tree\r\n *ngIf=\"treeData\"\r\n [dataSource]=\"dataSource\"\r\n [treeControl]=\"treeControl\"\r\n class=\"sm-tree\"\r\n >\r\n <mat-nested-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodeToggle=\"{{ getIfExpanded(node) }}\"\r\n [ngClass]=\"getClassesForTreeNode(node)\"\r\n [ngStyle]=\"getNodeStyle(node)\"\r\n >\r\n <div\r\n [ngStyle]=\"getNodePadding(node)\"\r\n [ngClass]=\"getInnerClassesForTreeNode(node)\"\r\n class=\"mat-tree-node sm-tree-node\"\r\n (click)=\"onNodeClick($event, node)\"\r\n >\r\n <button mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Toggle ' + node.name\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\" (click)=\"onOpenNode($event, node)\">\r\n <div *ngIf=\"hasChild(node.level, node)\">\r\n {{ treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </div>\r\n </mat-icon>\r\n </button>\r\n <smart-icon [icon]=\"node.icon\"> </smart-icon>\r\n <div class=\"sm-tree-row\" [ngClass]=\"node.classes\">\r\n <div class=\"sm-tree-row-caption\">\r\n {{ node.caption }}\r\n </div>\r\n <div class=\"sm-shortDescription-spacer\"></div>\r\n <div class=\"sm-tree-row-shortDescription\">\r\n {{ node.shortDescription }}\r\n </div>\r\n <div class=\"sm-shortDescription-button-spacer\"></div>\r\n <div *ngIf=\"node.button\" class=\"sm-tree-node-button\" [ngSwitch]=\"node.button.type\">\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.ICON\"\r\n mat-icon-button\r\n >\r\n <smart-icon title=\"{{ node.button.icon }}\" [icon]=\"node.button.icon\"></smart-icon>\r\n </button>\r\n <div *ngSwitchCase=\"smartTreeNodeButtonType.MENU\">\r\n <button\r\n mat-button\r\n [matMenuTriggerFor]=\"menu\"\r\n (click)=\"customButtonClicked($event, node.button, true)\"\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon\r\n >{{ node.button.label }}\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button\r\n *ngFor=\"let button of node.button.menuItemButtons\"\r\n (click)=\"customButtonClicked($event, button, true)\"\r\n mat-menu-item\r\n [attr.data-testid]=\"button.code ?? null\"\r\n >\r\n <smart-icon *ngIf=\"button.icon\" [icon]=\"button.icon\"></smart-icon\r\n >{{ button.label }}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n <button\r\n (click)=\"customButtonClicked($event, node.button)\"\r\n *ngSwitchCase=\"smartTreeNodeButtonType.NORMAL\"\r\n mat-raised-button\r\n >\r\n <smart-icon *ngIf=\"node.button.icon\" [icon]=\"node.button.icon\"></smart-icon>\r\n {{ node.button.icon }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n [class.sm-tree-invisible]=\"!treeControl.isExpanded(node)\"\r\n [ngClass]=\"getClassesForTreeNodeChildren(node)\"\r\n role=\"group\"\r\n >\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </div>\r\n </mat-nested-tree-node>\r\n </mat-tree>\r\n <div *ngIf=\"!treeData\">\r\n <h3>\r\n {{ errorMessage }}\r\n </h3>\r\n </div>\r\n</div>\r\n", styles: [".smartTreeContainer{display:flex;flex-direction:column;gap:.5rem}.sm-tree-invisible{display:none}.sm-tree ul,.sm-tree li{margin-top:0;margin-bottom:0;list-style-type:none}.sm-tree div[role=group]>.mat-tree-node{padding-left:40px}.sm-tee-node{padding-left:40px}.sm-tree-node-name{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tree-node-name-row{padding-left:15px;padding-top:15px;display:flex;flex-direction:row;justify-content:space-between}.sm-tree-node-name-col{padding-left:15px;padding-top:15px;display:flex;flex-direction:column}.sm-tee-node-id{font-weight:lighter}.mat-tree-node:hover{cursor:pointer}::ng-deep .mat-icon-rtl-mirror{display:flex;flex-direction:row}.sm-tree-row{display:flex;flex-direction:row;flex:1;align-items:center}.sm-shortDescription-spacer{flex:1}\n"] }]
173
173
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { trigger: [{
174
174
  type: ViewChildren,
175
175
  args: [MatMenuTrigger]
@@ -184,4 +184,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
184
184
  type: HostBinding,
185
185
  args: ['attr.data-testid']
186
186
  }] } });
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRyZWUvc21hcnR0cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRyZWUvc21hcnR0cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFFTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLEtBQUssRUFJTCxTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEVBSUwsdUJBQXVCLEdBQ3hCLE1BQU0sbUJBQW1CLENBQUM7QUFHM0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQVExQyxNQUFNLE9BQU8sa0JBQWtCO0lBYzdCLElBQ0ksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDO0lBQzFDLENBQUM7SUFPRCxZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXZCbEMsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBTWpELGdCQUFXLEdBQUcsSUFBSSxpQkFBaUIsQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRixlQUFVLEdBQUcsSUFBSSx1QkFBdUIsRUFBaUIsQ0FBQztRQVUxRCw0QkFBdUIsR0FBRyx1QkFBdUIsQ0FBQztRQUlsRCxtQkFBYyxHQUFvQixFQUFFLENBQUM7UUE4RHJDLGFBQVEsR0FBRyxDQUFDLENBQVMsRUFBRSxJQUFtQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBNURuQixDQUFDO0lBQzlDLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztRQUVsRCxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQTRCLEVBQUUsRUFBRTtZQUNoRixJQUFJLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQztZQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVUsQ0FBQztZQUNoRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNwRixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUM7WUFDeEQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFtQjtRQUMvQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQXNCO1FBQzFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNwRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNqRCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBVSxFQUFFLElBQW1CO1FBQ3pDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLElBQUksQ0FBQyxjQUFjO1lBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzlELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBRTNCLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVSxFQUFFLElBQW1CO1FBQ3hDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBSUQsWUFBWSxDQUFDLElBQW1CO1FBQzlCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRO2dCQUN2QixDQUFDLENBQUM7b0JBQ0UsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLGVBQWU7b0JBQ3ZELEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLO2lCQUN6QztnQkFDSCxDQUFDLENBQUM7b0JBQ0UsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQXFCLENBQUMsSUFBSSxDQUFDLEtBQU0sQ0FBQztvQkFDN0QsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBTTtpQkFDN0IsQ0FBQztZQUNOLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELGNBQWMsQ0FBQyxJQUFtQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUTtnQkFDdkIsQ0FBQyxDQUFDO29CQUNFLGNBQWMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQU0sR0FBRyxJQUFJO2lCQUN4QztnQkFDSCxDQUFDLENBQUM7b0JBQ0UsY0FBYyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBTSxHQUFHLElBQUk7aUJBQ3hDLENBQUM7WUFDTixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFVLEVBQUUsTUFBMkIsRUFBRSxLQUFlO1FBQzFFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssdUJBQXVCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakQsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksNEJBQTRCLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUNqQyxDQUFDLGNBQThCLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQzVELENBQUM7WUFDRixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBOEIsRUFBRSxFQUFFO2dCQUNuRCxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQW1CO1FBQ3ZDLElBQUksT0FBTyxHQUFhLEVBQUUsQ0FBQztRQUUzQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVELENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsMEJBQTBCLENBQUMsSUFBbUI7UUFDNUMsSUFBSSxPQUFPLEdBQWEsRUFBRSxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNsRSxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsNkJBQTZCLENBQUMsSUFBbUI7UUFDL0MsSUFBSSxPQUFPLEdBQWEsRUFBRSxDQUFDO1FBRTNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFdkQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGNBQWMsQ0FBQyxRQUFnQixFQUFFLFlBQWlCO1FBQ2hELE9BQU8sR0FBRyxRQUFRLElBQUksWUFBWSxFQUFFLENBQUM7SUFDdkMsQ0FBQzsrR0ExTFUsa0JBQWtCO21HQUFsQixrQkFBa0IsMFJBR2YsY0FBYyxnRENqQzlCLHM3SEFvR0E7OzRGRHRFYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsWUFBWTtzRkFPUSxPQUFPO3NCQUFwQyxZQUFZO3VCQUFDLGNBQWM7Z0JBRVQsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNO2dCQU1SLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFHRixNQUFNO3NCQURULFdBQVc7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmVzdGVkVHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IE1hdFRyZWVOZXN0ZWREYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRUcmVlTW9kZWwsXHJcbiAgU21hcnRUcmVlTm9kZSxcclxuICBTbWFydFRyZWVOb2RlQnV0dG9uLFxyXG4gIFNtYXJ0VHJlZU5vZGVCdXR0b25UeXBlLFxyXG59IGZyb20gJy4vc21hcnR0cmVlLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZVN0eWxlIH0gZnJvbSAnLi9zbWFydHRyZWUubm9kZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNtYXJ0dHJlZVNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0dHJlZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFVpQWN0aW9uTW9kZWwgfSBmcm9tICcuLi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NtYXJ0LXRyZWUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydHRyZWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NtYXJ0dHJlZS5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydFRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKE1hdE1lbnVUcmlnZ2VyKSB0cmlnZ2VyITogUXVlcnlMaXN0PE1hdE1lbnVUcmlnZ2VyPjtcclxuXHJcbiAgQFZpZXdDaGlsZCgndHJlZScpIHRyZWU6IGFueTtcclxuXHJcbiAgdHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8U21hcnRUcmVlTm9kZT4oKG5vZGUpID0+IG5vZGUuY2hpbGRyZW5Ob2Rlcyk7XHJcbiAgZGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlTmVzdGVkRGF0YVNvdXJjZTxTbWFydFRyZWVOb2RlPigpO1xyXG4gIHRlbXBBY3RpdmVOb2RlPzogU21hcnRUcmVlTm9kZTtcclxuICB0cmVlRGF0YT86IFNtYXJ0VHJlZU1vZGVsO1xyXG4gIEBJbnB1dCgpIHRyZWVTdHlsZT86IFRyZWVTdHlsZTtcclxuICBASW5wdXQoKSB0cmVlU2VydmljZSE6IFNtYXJ0dHJlZVNlcnZpY2U8YW55PjtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtdGVzdGlkJylcclxuICBnZXQgdGVzdElkKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZVNlcnZpY2U/LnRyZWVJZCA/PyBudWxsO1xyXG4gIH1cclxuICBzbWFydFRyZWVOb2RlQnV0dG9uVHlwZSA9IFNtYXJ0VHJlZU5vZGVCdXR0b25UeXBlO1xyXG5cclxuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XHJcblxyXG4gIHVpQWN0aW9uTW9kZWxzOiBVaUFjdGlvbk1vZGVsW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnRyZWVTZXJ2aWNlKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHJlZVNlcnZpY2UgaGFzIG5vdCBiZWVuIGdpdmVuIScpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLnRyZWVTZXJ2aWNlLmVycm9yTWVzc2FnZTtcclxuXHJcbiAgICB0aGlzLnRyZWVTZXJ2aWNlLnNtYXJ0VHJlZU1vZGVsQ2hhbmdlZC5zdWJzY3JpYmUoKG5ld1NtYXJ0VHJlZTogU21hcnRUcmVlTW9kZWwpID0+IHtcclxuICAgICAgdGhpcy50cmVlRGF0YSA9IG5ld1NtYXJ0VHJlZTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLnRyZWVEYXRhLnJvb3ROb2RlcyE7XHJcbiAgICAgIHRoaXMuZXhwYW5kVHJlZU5vZGVzKCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMudHJlZVNlcnZpY2UudWlBY3Rpb25Nb2RlbHNDaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMudHJlZVNlcnZpY2UudWlBY3Rpb25Nb2RlbHMpIHtcclxuICAgICAgICB0aGlzLnVpQWN0aW9uTW9kZWxzID0gdGhpcy50cmVlU2VydmljZS51aUFjdGlvbk1vZGVscztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGdldElmRXhwYW5kZWQobm9kZTogU21hcnRUcmVlTm9kZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKTtcclxuICB9XHJcblxyXG4gIGV4cGFuZFRyZWVOb2RlcygpIHtcclxuICAgIHRoaXMuZXhwYW5kVHJlZU5vZGVzRGVlcGx5KHRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcclxuICB9XHJcblxyXG4gIGV4cGFuZFRyZWVOb2Rlc0RlZXBseShub2RlczogU21hcnRUcmVlTm9kZVtdKSB7XHJcbiAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIGlmIChub2RlLmV4cGFuZGVkKSB7XHJcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmQobm9kZSk7XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW5Ob2RlcyAmJiBub2RlLmNoaWxkcmVuTm9kZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmV4cGFuZFRyZWVOb2Rlc0RlZXBseShub2RlLmNoaWxkcmVuTm9kZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlKG5vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uTm9kZUNsaWNrKGV2ZW50OiBhbnksIG5vZGU6IFNtYXJ0VHJlZU5vZGUpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGlmICh0aGlzLnRlbXBBY3RpdmVOb2RlKSB0aGlzLnRlbXBBY3RpdmVOb2RlLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICBub2RlLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgIHRoaXMudGVtcEFjdGl2ZU5vZGUgPSBub2RlO1xyXG5cclxuICAgIHRoaXMudHJlZVNlcnZpY2Uub25UcmVlTm9kZUNsaWNrKG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgb25PcGVuTm9kZShldmVudDogYW55LCBub2RlOiBTbWFydFRyZWVOb2RlKSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMudHJlZVNlcnZpY2Uub25UcmVlTm9kZU9wZW4obm9kZSk7XHJcbiAgfVxyXG5cclxuICBoYXNDaGlsZCA9IChfOiBudW1iZXIsIG5vZGU6IFNtYXJ0VHJlZU5vZGUpID0+IG5vZGUuaGFzQ2hpbGRyZW47XHJcblxyXG4gIGdldE5vZGVTdHlsZShub2RlOiBTbWFydFRyZWVOb2RlKSB7XHJcbiAgICBpZiAodGhpcy50cmVlU3R5bGUpIHtcclxuICAgICAgdmFyIHN0eWxlID0gbm9kZS5zZWxlY3RlZFxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0aGlzLnRyZWVTdHlsZS5hY3RpdmVTdHlsZT8uYmFja2dyb3VuZENvbG9yLFxyXG4gICAgICAgICAgICBjb2xvcjogdGhpcy50cmVlU3R5bGUuYWN0aXZlU3R5bGU/LmNvbG9yLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDoge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0aGlzLnRyZWVTdHlsZS5sZXZlbEJhY2tncm91bmRDb2xvciFbbm9kZS5sZXZlbCFdLFxyXG4gICAgICAgICAgICBjb2xvcjogdGhpcy50cmVlU3R5bGUuY29sb3IhLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgcmV0dXJuIHN0eWxlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuICBnZXROb2RlUGFkZGluZyhub2RlOiBTbWFydFRyZWVOb2RlKSB7XHJcbiAgICBpZiAodGhpcy50cmVlU3R5bGUpIHtcclxuICAgICAgdmFyIHN0eWxlID0gbm9kZS5zZWxlY3RlZFxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICAncGFkZGluZy1sZWZ0JzogMTUgKiBub2RlLmxldmVsISArICdweCcsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICdwYWRkaW5nLWxlZnQnOiAxNSAqIG5vZGUubGV2ZWwhICsgJ3B4JyxcclxuICAgICAgICAgIH07XHJcbiAgICAgIHJldHVybiBzdHlsZTtcclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIGN1c3RvbUJ1dHRvbkNsaWNrZWQoZXZlbnQ6IGFueSwgYnV0dG9uOiBTbWFydFRyZWVOb2RlQnV0dG9uLCBjbG9zZT86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGlmIChidXR0b24udHlwZSA9PT0gU21hcnRUcmVlTm9kZUJ1dHRvblR5cGUuTUVOVSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFidXR0b24uY2FsbGJhY2spIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCdXR0b24gd2l0aCBuYW1lICR7YnV0dG9uLmxhYmVsIHx8IGJ1dHRvbi5pY29ufSBkb2VzIG5vdCBoYXZlIGEgY2FsbGJhY2shYCk7XHJcbiAgICB9XHJcbiAgICBidXR0b24uY2FsbGJhY2soYnV0dG9uLmFyZ3MpO1xyXG4gICAgaWYgKGNsb3NlKSB7XHJcbiAgICAgIGxldCBvcGVuTWVudXMgPSB0aGlzLnRyaWdnZXIuZmlsdGVyKFxyXG4gICAgICAgIChtYXRNZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXIpID0+IG1hdE1lbnVUcmlnZ2VyLm1lbnVPcGVuXHJcbiAgICAgICk7XHJcbiAgICAgIG9wZW5NZW51cy5mb3JFYWNoKChtYXRNZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXIpID0+IHtcclxuICAgICAgICBtYXRNZW51VHJpZ2dlci5jbG9zZU1lbnUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDbGFzc2VzRm9yVHJlZU5vZGUobm9kZTogU21hcnRUcmVlTm9kZSk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGlmIChub2RlLmV4cGFuZGVkKSB7XHJcbiAgICAgIGNsYXNzZXMucHVzaCh0aGlzLmdldEN1c3RvbUNsYXNzKCdleHBhbmRlZCcsIG5vZGUubGV2ZWwpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNsYXNzZXMucHVzaCh0aGlzLmdldEN1c3RvbUNsYXNzKCdjb2xsYXBzZWQnLCBub2RlLmxldmVsKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5vZGUuc2VsZWN0ZWQpIHtcclxuICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0Q3VzdG9tQ2xhc3MoJ3NlbGVjdGVkJywgbm9kZS5sZXZlbCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0Q3VzdG9tQ2xhc3MoJ3Vuc2VsZWN0ZWQnLCBub2RlLmxldmVsKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5vZGUubGV2ZWwgIT09IDApIHtcclxuICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0Q3VzdG9tQ2xhc3MoJ2NoaWxkJywgbm9kZS5sZXZlbCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjbGFzc2VzO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW5uZXJDbGFzc2VzRm9yVHJlZU5vZGUobm9kZTogU21hcnRUcmVlTm9kZSk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGlmIChub2RlLmV4cGFuZGVkKSB7XHJcbiAgICAgIGNsYXNzZXMucHVzaCh0aGlzLmdldEN1c3RvbUNsYXNzKCdpbm5lci1leHBhbmRlZCcsIG5vZGUubGV2ZWwpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNsYXNzZXMucHVzaCh0aGlzLmdldEN1c3RvbUNsYXNzKCdpbm5lci1jb2xsYXBzZWQnLCBub2RlLmxldmVsKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5vZGUuc2VsZWN0ZWQpIHtcclxuICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0Q3VzdG9tQ2xhc3MoJ2lubmVyLXNlbGVjdGVkJywgbm9kZS5sZXZlbCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0Q3VzdG9tQ2xhc3MoJ2lubmVyLXVuc2VsZWN0ZWQnLCBub2RlLmxldmVsKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNsYXNzZXM7XHJcbiAgfVxyXG5cclxuICBnZXRDbGFzc2VzRm9yVHJlZU5vZGVDaGlsZHJlbihub2RlOiBTbWFydFRyZWVOb2RlKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IGNsYXNzZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0Q3VzdG9tQ2xhc3MoJ2dyb3VwJywgbm9kZS5sZXZlbCkpO1xyXG5cclxuICAgIHJldHVybiBjbGFzc2VzO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VzdG9tQ2xhc3MoY3NzQ2xhc3M6IHN0cmluZywgcGx1c1Byb3BlcnR5OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke2Nzc0NsYXNzfS0ke3BsdXNQcm9wZXJ0eX1gO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic21hcnRUcmVlQ29udGFpbmVyXCI+XHJcbiAgPHNtYXJ0LXVpLWFjdGlvbi10b29sYmFyXHJcbiAgICAqbmdJZj1cInVpQWN0aW9uTW9kZWxzLmxlbmd0aFwiXHJcbiAgICBbdWlBY3Rpb25Nb2RlbHNdPVwidWlBY3Rpb25Nb2RlbHNcIlxyXG4gID48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gIDxtYXQtdHJlZVxyXG4gICAgI3RyZWVcclxuICAgICpuZ0lmPVwidHJlZURhdGFcIlxyXG4gICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIlxyXG4gICAgY2xhc3M9XCJzbS10cmVlXCJcclxuICA+XHJcbiAgICA8bWF0LW5lc3RlZC10cmVlLW5vZGVcclxuICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGU7IHdoZW46IGhhc0NoaWxkXCJcclxuICAgICAgbWF0VHJlZU5vZGVUb2dnbGU9XCJ7eyBnZXRJZkV4cGFuZGVkKG5vZGUpIH19XCJcclxuICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2xhc3Nlc0ZvclRyZWVOb2RlKG5vZGUpXCJcclxuICAgICAgW25nU3R5bGVdPVwiZ2V0Tm9kZVN0eWxlKG5vZGUpXCJcclxuICAgID5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldE5vZGVQYWRkaW5nKG5vZGUpXCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXRJbm5lckNsYXNzZXNGb3JUcmVlTm9kZShub2RlKVwiXHJcbiAgICAgICAgY2xhc3M9XCJtYXQtdHJlZS1ub2RlIHNtLXRyZWUtbm9kZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKCRldmVudCwgbm9kZSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW2F0dHIuYXJpYS1sYWJlbF09XCInVG9nZ2xlICcgKyBub2RlLm5hbWVcIj5cclxuICAgICAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgICAgICBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIlxyXG4gICAgICAgICAgICBtYXRUcmVlTm9kZVRvZ2dsZVxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25PcGVuTm9kZSgkZXZlbnQsIG5vZGUpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImhhc0NoaWxkKG5vZGUubGV2ZWwsIG5vZGUpXCI+XHJcbiAgICAgICAgICAgICAge3sgdHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdleHBhbmRfbW9yZScgOiAnY2hldnJvbl9yaWdodCcgfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxzbWFydC1pY29uIFtpY29uXT1cIm5vZGUuaWNvblwiPiA8L3NtYXJ0LWljb24+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNtLXRyZWUtcm93XCIgW25nQ2xhc3NdPVwibm9kZS5jbGFzc2VzXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic20tdHJlZS1yb3ctY2FwdGlvblwiPlxyXG4gICAgICAgICAgICB7eyBub2RlLmNhcHRpb24gfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNtLXNob3J0RGVzY3JpcHRpb24tc3BhY2VyXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic20tdHJlZS1yb3ctc2hvcnREZXNjcmlwdGlvblwiPlxyXG4gICAgICAgICAgICB7eyBub2RlLnNob3J0RGVzY3JpcHRpb24gfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNtLXNob3J0RGVzY3JpcHRpb24tYnV0dG9uLXNwYWNlclwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIm5vZGUuYnV0dG9uXCIgY2xhc3M9XCJzbS10cmVlLW5vZGUtYnV0dG9uXCIgW25nU3dpdGNoXT1cIm5vZGUuYnV0dG9uLnR5cGVcIj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgbm9kZS5idXR0b24pXCJcclxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwic21hcnRUcmVlTm9kZUJ1dHRvblR5cGUuSUNPTlwiXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c21hcnQtaWNvbiB0aXRsZT1cInt7IG5vZGUuYnV0dG9uLmljb24gfX1cIiBbaWNvbl09XCJub2RlLmJ1dHRvbi5pY29uXCI+PC9zbWFydC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwic21hcnRUcmVlTm9kZUJ1dHRvblR5cGUuTUVOVVwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgbm9kZS5idXR0b24sIHRydWUpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cIm5vZGUuYnV0dG9uLmljb25cIiBbaWNvbl09XCJub2RlLmJ1dHRvbi5pY29uXCI+PC9zbWFydC1pY29uXHJcbiAgICAgICAgICAgICAgICA+e3sgbm9kZS5idXR0b24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBidXR0b24gb2Ygbm9kZS5idXR0b24ubWVudUl0ZW1CdXR0b25zXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBidXR0b24sIHRydWUpXCJcclxuICAgICAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCJidXR0b24uY29kZSA/PyBudWxsXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHNtYXJ0LWljb24gKm5nSWY9XCJidXR0b24uaWNvblwiIFtpY29uXT1cImJ1dHRvbi5pY29uXCI+PC9zbWFydC1pY29uXHJcbiAgICAgICAgICAgICAgICAgID57eyBidXR0b24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImN1c3RvbUJ1dHRvbkNsaWNrZWQoJGV2ZW50LCBub2RlLmJ1dHRvbilcIlxyXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJzbWFydFRyZWVOb2RlQnV0dG9uVHlwZS5OT1JNQUxcIlxyXG4gICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cIm5vZGUuYnV0dG9uLmljb25cIiBbaWNvbl09XCJub2RlLmJ1dHRvbi5pY29uXCI+PC9zbWFydC1pY29uPlxyXG4gICAgICAgICAgICAgIHt7IG5vZGUuYnV0dG9uLmljb24gfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBbY2xhc3Muc20tdHJlZS1pbnZpc2libGVdPVwiIXRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSlcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldENsYXNzZXNGb3JUcmVlTm9kZUNoaWxkcmVuKG5vZGUpXCJcclxuICAgICAgICByb2xlPVwiZ3JvdXBcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRUcmVlTm9kZU91dGxldD48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1uZXN0ZWQtdHJlZS1ub2RlPlxyXG4gIDwvbWF0LXRyZWU+XHJcbiAgPGRpdiAqbmdJZj1cIiF0cmVlRGF0YVwiPlxyXG4gICAgPGgzPlxyXG4gICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cclxuICAgIDwvaDM+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRyZWUvc21hcnR0cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRyZWUvc21hcnR0cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFFTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLEtBQUssRUFJTCxTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEVBSUwsdUJBQXVCLEdBQ3hCLE1BQU0sbUJBQW1CLENBQUM7QUFHM0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQVExQyxNQUFNLE9BQU8sa0JBQWtCO0lBYzdCLElBQ0ksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDO0lBQzFDLENBQUM7SUFPRCxZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXZCbEMsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBTWpELGdCQUFXLEdBQUcsSUFBSSxpQkFBaUIsQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRixlQUFVLEdBQUcsSUFBSSx1QkFBdUIsRUFBaUIsQ0FBQztRQVUxRCw0QkFB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LEdBQWEsRUFBRSxDQUFDO1FBRTNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFdkQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGNBQWMsQ0FBQyxRQUFnQixFQUFFLFlBQWlCO1FBQ2hELE9BQU8sR0FBRyxRQUFRLElBQUksWUFBWSxFQUFFLENBQUM7SUFDdkMsQ0FBQzsrR0ExTFUsa0JBQWtCO21HQUFsQixrQkFBa0IsMFJBR2YsY0FBYyxnRENqQzlCLDIzSEFnR0E7OzRGRGxFYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsWUFBWTtzRkFPUSxPQUFPO3NCQUFwQyxZQUFZO3VCQUFDLGNBQWM7Z0JBRVQsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNO2dCQU1SLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFHRixNQUFNO3NCQURULFdBQVc7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmVzdGVkVHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IE1hdFRyZWVOZXN0ZWREYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRUcmVlTW9kZWwsXHJcbiAgU21hcnRUcmVlTm9kZSxcclxuICBTbWFydFRyZWVOb2RlQnV0dG9uLFxyXG4gIFNtYXJ0VHJlZU5vZGVCdXR0b25UeXBlLFxyXG59IGZyb20gJy4vc21hcnR0cmVlLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZVN0eWxlIH0gZnJvbSAnLi9zbWFydHRyZWUubm9kZS5tb2RlbCc7XHJcbmltcG9ydCB7IFNtYXJ0dHJlZVNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0dHJlZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFVpQWN0aW9uTW9kZWwgfSBmcm9tICcuLi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NtYXJ0LXRyZWUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydHRyZWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NtYXJ0dHJlZS5jb21wb25lbnQuY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydFRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKE1hdE1lbnVUcmlnZ2VyKSB0cmlnZ2VyITogUXVlcnlMaXN0PE1hdE1lbnVUcmlnZ2VyPjtcclxuXHJcbiAgQFZpZXdDaGlsZCgndHJlZScpIHRyZWU6IGFueTtcclxuXHJcbiAgdHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8U21hcnRUcmVlTm9kZT4oKG5vZGUpID0+IG5vZGUuY2hpbGRyZW5Ob2Rlcyk7XHJcbiAgZGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlTmVzdGVkRGF0YVNvdXJjZTxTbWFydFRyZWVOb2RlPigpO1xyXG4gIHRlbXBBY3RpdmVOb2RlPzogU21hcnRUcmVlTm9kZTtcclxuICB0cmVlRGF0YT86IFNtYXJ0VHJlZU1vZGVsO1xyXG4gIEBJbnB1dCgpIHRyZWVTdHlsZT86IFRyZWVTdHlsZTtcclxuICBASW5wdXQoKSB0cmVlU2VydmljZSE6IFNtYXJ0dHJlZVNlcnZpY2U8YW55PjtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtdGVzdGlkJylcclxuICBnZXQgdGVzdElkKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZVNlcnZpY2U/LnRyZWVJZCA/PyBudWxsO1xyXG4gIH1cclxuICBzbWFydFRyZWVOb2RlQnV0dG9uVHlwZSA9IFNtYXJ0VHJlZU5vZGVCdXR0b25UeXBlO1xyXG5cclxuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XHJcblxyXG4gIHVpQWN0aW9uTW9kZWxzOiBVaUFjdGlvbk1vZGVsW10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnRyZWVTZXJ2aWNlKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHJlZVNlcnZpY2UgaGFzIG5vdCBiZWVuIGdpdmVuIScpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLnRyZWVTZXJ2aWNlLmVycm9yTWVzc2FnZTtcclxuXHJcbiAgICB0aGlzLnRyZWVTZXJ2aWNlLnNtYXJ0VHJlZU1vZGVsQ2hhbmdlZC5zdWJzY3JpYmUoKG5ld1NtYXJ0VHJlZTogU21hcnRUcmVlTW9kZWwpID0+IHtcclxuICAgICAgdGhpcy50cmVlRGF0YSA9IG5ld1NtYXJ0VHJlZTtcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLnRyZWVEYXRhLnJvb3ROb2RlcyE7XHJcbiAgICAgIHRoaXMuZXhwYW5kVHJlZU5vZGVzKCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMudHJlZVNlcnZpY2UudWlBY3Rpb25Nb2RlbHNDaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMudHJlZVNlcnZpY2UudWlBY3Rpb25Nb2RlbHMpIHtcclxuICAgICAgICB0aGlzLnVpQWN0aW9uTW9kZWxzID0gdGhpcy50cmVlU2VydmljZS51aUFjdGlvbk1vZGVscztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGdldElmRXhwYW5kZWQobm9kZTogU21hcnRUcmVlTm9kZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKTtcclxuICB9XHJcblxyXG4gIGV4cGFuZFRyZWVOb2RlcygpIHtcclxuICAgIHRoaXMuZXhwYW5kVHJlZU5vZGVzRGVlcGx5KHRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcclxuICB9XHJcblxyXG4gIGV4cGFuZFRyZWVOb2Rlc0RlZXBseShub2RlczogU21hcnRUcmVlTm9kZVtdKSB7XHJcbiAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIGlmIChub2RlLmV4cGFuZGVkKSB7XHJcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmQobm9kZSk7XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW5Ob2RlcyAmJiBub2RlLmNoaWxkcmVuTm9kZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmV4cGFuZFRyZWVOb2Rlc0RlZXBseShub2RlLmNoaWxkcmVuTm9kZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlKG5vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uTm9kZUNsaWNrKGV2ZW50OiBhbnksIG5vZGU6IFNtYXJ0VHJlZU5vZGUpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGlmICh0aGlzLnRlbXBBY3RpdmVOb2RlKSB0aGlzLnRlbXBBY3RpdmVOb2RlLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICBub2RlLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgIHRoaXMudGVtcEFjdGl2ZU5vZGUgPSBub2RlO1xyXG5cclxuICAgIHRoaXMudHJlZVNlcnZpY2Uub25UcmVlTm9kZUNsaWNrKG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgb25PcGVuTm9kZShldmVudDogYW55LCBub2RlOiBTbWFydFRyZWVOb2RlKSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMudHJlZVNlcnZpY2Uub25UcmVlTm9kZU9wZW4obm9kZSk7XHJcbiAgfVxyXG5cclxuICBoYXNDaGlsZCA9IChfOiBudW1iZXIsIG5vZGU6IFNtYXJ0VHJlZU5vZGUpID0+IG5vZGUuaGFzQ2hpbGRyZW47XHJcblxyXG4gIGdldE5vZGVTdHlsZShub2RlOiBTbWFydFRyZWVOb2RlKSB7XHJcbiAgICBpZiAodGhpcy50cmVlU3R5bGUpIHtcclxuICAgICAgdmFyIHN0eWxlID0gbm9kZS5zZWxlY3RlZFxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0aGlzLnRyZWVTdHlsZS5hY3RpdmVTdHlsZT8uYmFja2dyb3VuZENvbG9yLFxyXG4gICAgICAgICAgICBjb2xvcjogdGhpcy50cmVlU3R5bGUuYWN0aXZlU3R5bGU/LmNvbG9yLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDoge1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0aGlzLnRyZWVTdHlsZS5sZXZlbEJhY2tncm91bmRDb2xvciFbbm9kZS5sZXZlbCFdLFxyXG4gICAgICAgICAgICBjb2xvcjogdGhpcy50cmVlU3R5bGUuY29sb3IhLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgcmV0dXJuIHN0eWxlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuICBnZXROb2RlUGFkZGluZyhub2RlOiBTbWFydFRyZWVOb2RlKSB7XHJcbiAgICBpZiAodGhpcy50cmVlU3R5bGUpIHtcclxuICAgICAgdmFyIHN0eWxlID0gbm9kZS5zZWxlY3RlZFxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICAncGFkZGluZy1sZWZ0JzogMTUgKiBub2RlLmxldmVsISArICdweCcsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICdwYWRkaW5nLWxlZnQnOiAxNSAqIG5vZGUubGV2ZWwhICsgJ3B4JyxcclxuICAgICAgICAgIH07XHJcbiAgICAgIHJldHVybiBzdHlsZTtcclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIGN1c3RvbUJ1dHRvbkNsaWNrZWQoZXZlbnQ6IGFueSwgYnV0dG9uOiBTbWFydFRyZWVOb2RlQnV0dG9uLCBjbG9zZT86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGlmIChidXR0b24udHlwZSA9PT0gU21hcnRUcmVlTm9kZUJ1dHRvblR5cGUuTUVOVSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFidXR0b24uY2FsbGJhY2spIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCdXR0b24gd2l0aCBuYW1lICR7YnV0dG9uLmxhYmVsIHx8IGJ1dHRvbi5pY29ufSBkb2VzIG5vdCBoYXZlIGEgY2FsbGJhY2shYCk7XHJcbiAgICB9XHJcbiAgICBidXR0b24uY2FsbGJhY2soYnV0dG9uLmFyZ3MpO1xyXG4gICAgaWYgKGNsb3NlKSB7XHJcbiAgICAgIGxldCBvcGVuTWVudXMgPSB0aGlzLnRyaWdnZXIuZmlsdGVyKFxyXG4gICAgICAgIChtYXRNZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXIpID0+IG1hdE1lbnVUcmlnZ2VyLm1lbnVPcGVuXHJcbiAgICAgICk7XHJcbiAgICAgIG9wZW5NZW51cy5mb3JFYWNoKChtYXRNZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXIpID0+IHtcclxuICAgICAgICBtYXRNZW51VHJpZ2dlci5jbG9zZU1lbnUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDbGFzc2VzRm9yVHJlZU5vZGUobm9kZTogU21hcnRUcmVlTm9kZSk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGlmIChub2RlLmV4cGFuZGVkKSB7XHJcbiAgICAgIGNsYXNzZXMucHVzaCh0aGlzLmdldEN1c3RvbUNsYXNzKCdleHBhbmRlZCcsIG5vZGUubGV2ZWwpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNsYXNzZXMucHVzaCh0aGlzLmdldEN1c3RvbUNsYXNzKCdjb2xsYXBzZWQnLCBub2RlLmxldmVsKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5vZGUuc2VsZWN0ZWQpIHtcclxuICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0Q3VzdG9tQ2xhc3MoJ3NlbGVjdGVkJywgbm9kZS5sZXZlbCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0Q3VzdG9tQ2xhc3MoJ3Vuc2VsZWN0ZWQnLCBub2RlLmxldmVsKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5vZGUubGV2ZWwgIT09IDApIHtcclxuICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0Q3VzdG9tQ2xhc3MoJ2NoaWxkJywgbm9kZS5sZXZlbCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjbGFzc2VzO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW5uZXJDbGFzc2VzRm9yVHJlZU5vZGUobm9kZTogU21hcnRUcmVlTm9kZSk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGlmIChub2RlLmV4cGFuZGVkKSB7XHJcbiAgICAgIGNsYXNzZXMucHVzaCh0aGlzLmdldEN1c3RvbUNsYXNzKCdpbm5lci1leHBhbmRlZCcsIG5vZGUubGV2ZWwpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNsYXNzZXMucHVzaCh0aGlzLmdldEN1c3RvbUNsYXNzKCdpbm5lci1jb2xsYXBzZWQnLCBub2RlLmxldmVsKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5vZGUuc2VsZWN0ZWQpIHtcclxuICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0Q3VzdG9tQ2xhc3MoJ2lubmVyLXNlbGVjdGVkJywgbm9kZS5sZXZlbCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0Q3VzdG9tQ2xhc3MoJ2lubmVyLXVuc2VsZWN0ZWQnLCBub2RlLmxldmVsKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNsYXNzZXM7XHJcbiAgfVxyXG5cclxuICBnZXRDbGFzc2VzRm9yVHJlZU5vZGVDaGlsZHJlbihub2RlOiBTbWFydFRyZWVOb2RlKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IGNsYXNzZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgY2xhc3Nlcy5wdXNoKHRoaXMuZ2V0Q3VzdG9tQ2xhc3MoJ2dyb3VwJywgbm9kZS5sZXZlbCkpO1xyXG5cclxuICAgIHJldHVybiBjbGFzc2VzO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VzdG9tQ2xhc3MoY3NzQ2xhc3M6IHN0cmluZywgcGx1c1Byb3BlcnR5OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke2Nzc0NsYXNzfS0ke3BsdXNQcm9wZXJ0eX1gO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwic21hcnRUcmVlQ29udGFpbmVyXCI+XHJcbiAgPHNtYXJ0LXVpLWFjdGlvbi10b29sYmFyXHJcbiAgICAqbmdJZj1cInVpQWN0aW9uTW9kZWxzLmxlbmd0aFwiXHJcbiAgICBbdWlBY3Rpb25Nb2RlbHNdPVwidWlBY3Rpb25Nb2RlbHNcIlxyXG4gID48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gIDxtYXQtdHJlZVxyXG4gICAgI3RyZWVcclxuICAgICpuZ0lmPVwidHJlZURhdGFcIlxyXG4gICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIlxyXG4gICAgY2xhc3M9XCJzbS10cmVlXCJcclxuICA+XHJcbiAgICA8bWF0LW5lc3RlZC10cmVlLW5vZGVcclxuICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGU7IHdoZW46IGhhc0NoaWxkXCJcclxuICAgICAgbWF0VHJlZU5vZGVUb2dnbGU9XCJ7eyBnZXRJZkV4cGFuZGVkKG5vZGUpIH19XCJcclxuICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2xhc3Nlc0ZvclRyZWVOb2RlKG5vZGUpXCJcclxuICAgICAgW25nU3R5bGVdPVwiZ2V0Tm9kZVN0eWxlKG5vZGUpXCJcclxuICAgID5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldE5vZGVQYWRkaW5nKG5vZGUpXCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXRJbm5lckNsYXNzZXNGb3JUcmVlTm9kZShub2RlKVwiXHJcbiAgICAgICAgY2xhc3M9XCJtYXQtdHJlZS1ub2RlIHNtLXRyZWUtbm9kZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKCRldmVudCwgbm9kZSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VHJlZU5vZGVUb2dnbGUgW2F0dHIuYXJpYS1sYWJlbF09XCInVG9nZ2xlICcgKyBub2RlLm5hbWVcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIiAoY2xpY2spPVwib25PcGVuTm9kZSgkZXZlbnQsIG5vZGUpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJoYXNDaGlsZChub2RlLmxldmVsLCBub2RlKVwiPlxyXG4gICAgICAgICAgICAgIHt7IHRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyAnZXhwYW5kX21vcmUnIDogJ2NoZXZyb25fcmlnaHQnIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8c21hcnQtaWNvbiBbaWNvbl09XCJub2RlLmljb25cIj4gPC9zbWFydC1pY29uPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzbS10cmVlLXJvd1wiIFtuZ0NsYXNzXT1cIm5vZGUuY2xhc3Nlc1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNtLXRyZWUtcm93LWNhcHRpb25cIj5cclxuICAgICAgICAgICAge3sgbm9kZS5jYXB0aW9uIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbS1zaG9ydERlc2NyaXB0aW9uLXNwYWNlclwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNtLXRyZWUtcm93LXNob3J0RGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAge3sgbm9kZS5zaG9ydERlc2NyaXB0aW9uIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbS1zaG9ydERlc2NyaXB0aW9uLWJ1dHRvbi1zcGFjZXJcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJub2RlLmJ1dHRvblwiIGNsYXNzPVwic20tdHJlZS1ub2RlLWJ1dHRvblwiIFtuZ1N3aXRjaF09XCJub2RlLmJ1dHRvbi50eXBlXCI+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIG5vZGUuYnV0dG9uKVwiXHJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cInNtYXJ0VHJlZU5vZGVCdXR0b25UeXBlLklDT05cIlxyXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNtYXJ0LWljb24gdGl0bGU9XCJ7eyBub2RlLmJ1dHRvbi5pY29uIH19XCIgW2ljb25dPVwibm9kZS5idXR0b24uaWNvblwiPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cInNtYXJ0VHJlZU5vZGVCdXR0b25UeXBlLk1FTlVcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBtYXQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3VzdG9tQnV0dG9uQ2xpY2tlZCgkZXZlbnQsIG5vZGUuYnV0dG9uLCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNtYXJ0LWljb24gKm5nSWY9XCJub2RlLmJ1dHRvbi5pY29uXCIgW2ljb25dPVwibm9kZS5idXR0b24uaWNvblwiPjwvc21hcnQtaWNvblxyXG4gICAgICAgICAgICAgICAgPnt7IG5vZGUuYnV0dG9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIG5vZGUuYnV0dG9uLm1lbnVJdGVtQnV0dG9uc1wiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgYnV0dG9uLCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cclxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiYnV0dG9uLmNvZGUgPz8gbnVsbFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxzbWFydC1pY29uICpuZ0lmPVwiYnV0dG9uLmljb25cIiBbaWNvbl09XCJidXR0b24uaWNvblwiPjwvc21hcnQtaWNvblxyXG4gICAgICAgICAgICAgICAgICA+e3sgYnV0dG9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjdXN0b21CdXR0b25DbGlja2VkKCRldmVudCwgbm9kZS5idXR0b24pXCJcclxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwic21hcnRUcmVlTm9kZUJ1dHRvblR5cGUuTk9STUFMXCJcclxuICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNtYXJ0LWljb24gKm5nSWY9XCJub2RlLmJ1dHRvbi5pY29uXCIgW2ljb25dPVwibm9kZS5idXR0b24uaWNvblwiPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgICAgICB7eyBub2RlLmJ1dHRvbi5pY29uIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgW2NsYXNzLnNtLXRyZWUtaW52aXNpYmxlXT1cIiF0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpXCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXRDbGFzc2VzRm9yVHJlZU5vZGVDaGlsZHJlbihub2RlKVwiXHJcbiAgICAgICAgcm9sZT1cImdyb3VwXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0VHJlZU5vZGVPdXRsZXQ+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtbmVzdGVkLXRyZWUtbm9kZT5cclxuICA8L21hdC10cmVlPlxyXG4gIDxkaXYgKm5nSWY9XCIhdHJlZURhdGFcIj5cclxuICAgIDxoMz5cclxuICAgICAge3sgZXJyb3JNZXNzYWdlIH19XHJcbiAgICA8L2gzPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19