@smartbit4all/ng-client 3.1.93 → 3.1.95

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 (41) hide show
  1. package/esm2020/lib/smart-form/api/api/api.mjs +1 -1
  2. package/esm2020/lib/smart-form/api/api/default.service.mjs +1 -1
  3. package/esm2020/lib/smart-form/api/api.module.mjs +1 -1
  4. package/esm2020/lib/smart-form/api/configuration.mjs +1 -1
  5. package/esm2020/lib/smart-form/api/encoder.mjs +1 -1
  6. package/esm2020/lib/smart-form/api/index.mjs +1 -1
  7. package/esm2020/lib/smart-form/api/model/models.mjs +2 -1
  8. package/esm2020/lib/smart-form/api/model/propertyMapping.mjs +1 -1
  9. package/esm2020/lib/smart-form/api/model/selectionDefinition.mjs +1 -1
  10. package/esm2020/lib/smart-form/api/model/smartLayoutDefinition.mjs +1 -1
  11. package/esm2020/lib/smart-form/api/model/smartMatrixModel.mjs +1 -1
  12. package/esm2020/lib/smart-form/api/model/smartWidgetDefinition.mjs +1 -1
  13. package/esm2020/lib/smart-form/api/model/smartWidgetHint.mjs +19 -0
  14. package/esm2020/lib/smart-form/api/param.mjs +1 -1
  15. package/esm2020/lib/smart-form/api/variables.mjs +1 -1
  16. package/esm2020/lib/smart-form/services/smartform.layout-definition.service.mjs +11 -1
  17. package/esm2020/lib/smart-form/smartform.form-model.mjs +1 -1
  18. package/esm2020/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.mjs +5 -5
  19. package/esm2020/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +6 -6
  20. package/esm2020/lib/smart-tree/smarttree-generic.service.mjs +23 -37
  21. package/esm2020/lib/smart-tree/tree-api/api/tree.service.mjs +549 -3
  22. package/esm2020/lib/smart-tree/tree-api/configuration.mjs +2 -2
  23. package/esm2020/lib/view-context/api/model/viewContextChange.mjs +1 -1
  24. package/esm2020/lib/view-context/smart-view-context.service.mjs +2 -1
  25. package/fesm2015/smartbit4all-ng-client.mjs +702 -139
  26. package/fesm2015/smartbit4all-ng-client.mjs.map +1 -1
  27. package/fesm2020/smartbit4all-ng-client.mjs +702 -139
  28. package/fesm2020/smartbit4all-ng-client.mjs.map +1 -1
  29. package/lib/smart-form/api/model/models.d.ts +1 -0
  30. package/lib/smart-form/api/model/smartWidgetDefinition.d.ts +2 -0
  31. package/lib/smart-form/api/model/smartWidgetHint.d.ts +22 -0
  32. package/lib/smart-form/smartform.form-model.d.ts +20 -38
  33. package/lib/smart-form/widgets/components/smart-month-picker/smart-month-picker.component.d.ts +5 -2
  34. package/lib/smart-form/widgets/smartformwidget/smartformwidget.component.d.ts +6 -3
  35. package/lib/smart-tree/tree-api/api/tree.service.d.ts +161 -2
  36. package/lib/view-context/api/model/viewContextChange.d.ts +4 -0
  37. package/lib/view-context/smart-view-context.service.d.ts +1 -1
  38. package/package.json +1 -1
  39. package/smartbit4all-ng-client-3.1.95.tgz +0 -0
  40. package/src/lib/smart-form/api/README.md +226 -226
  41. package/smartbit4all-ng-client-3.1.93.tgz +0 -0
@@ -49,8 +49,8 @@ export class SmarttreeGenericService extends SmarttreeService {
49
49
  }
50
50
  async downloadTree() {
51
51
  let uuid = this.viewContext.getUuidOfPage(this.pageName);
52
- const rootNodes = await this.service.getRootNodes(uuid, this.treeId).toPromise();
53
- const uiActions = await this.service.getMainActions(uuid, this.treeId).toPromise();
52
+ const rootNodes = await this.viewContext.handlePerformActionResponse(await this.service.getRootNodes2(uuid, this.treeId).toPromise());
53
+ const uiActions = await this.viewContext.handlePerformActionResponse(await this.service.getMainActions2(uuid, this.treeId).toPromise());
54
54
  if (uiActions) {
55
55
  this.constructUiActionModels(uiActions);
56
56
  }
@@ -61,9 +61,7 @@ export class SmarttreeGenericService extends SmarttreeService {
61
61
  }
62
62
  async downloadChildren(parentNode) {
63
63
  let uuid = this.viewContext.getUuidOfPage(this.pageName);
64
- const children = await this.service
65
- .getChildrenNodes(uuid, this.treeId, parentNode.identifier)
66
- .toPromise();
64
+ const children = await this.viewContext.handlePerformActionResponse(await this.service.getChildrenNodes2(uuid, this.treeId, parentNode.identifier).toPromise());
67
65
  if (!children) {
68
66
  throw new Error(`Node with identifier ${parentNode.identifier} does not have children.`);
69
67
  }
@@ -72,15 +70,11 @@ export class SmarttreeGenericService extends SmarttreeService {
72
70
  async onTreeNodeOpen(treeNode) {
73
71
  let viewUuid = this.viewContext.getUuidOfPage(this.pageName);
74
72
  if (treeNode?.expanded) {
75
- let tempTreeNode = await this.service
76
- .collapseNode(viewUuid, this.treeId, treeNode.identifier)
77
- .toPromise();
73
+ let tempTreeNode = await this.viewContext.handlePerformActionResponse(await this.service.collapseNode2(viewUuid, this.treeId, treeNode.identifier).toPromise());
78
74
  treeNode = tempTreeNode;
79
75
  }
80
76
  else if (!treeNode?.expanded) {
81
- let tempTreeNode = await this.service
82
- .expandNode(viewUuid, this.treeId, treeNode?.identifier)
83
- .toPromise();
77
+ let tempTreeNode = await this.viewContext.handlePerformActionResponse(await this.service.expandNode2(viewUuid, this.treeId, treeNode?.identifier).toPromise());
84
78
  treeNode = tempTreeNode;
85
79
  }
86
80
  let node = this.deepSearchTreeNode(treeNode?.identifier, this.treeFromBackend);
@@ -93,25 +87,21 @@ export class SmarttreeGenericService extends SmarttreeService {
93
87
  }
94
88
  async selectFolder(folderUri, treeNode) {
95
89
  let viewUuid = this.viewContext.getUuidOfPage(this.pageName);
96
- await this.service
97
- .selectNode(viewUuid, this.treeId, treeNode.identifier)
98
- .toPromise()
99
- .then((updatedTreeNode) => {
100
- if (this.selectedNode) {
101
- this.selectedNode.selected = false;
102
- }
103
- this.selectedNode = updatedTreeNode;
104
- let node = this.deepSearchTreeNode(updatedTreeNode?.identifier, this.treeFromBackend);
105
- if (!node) {
106
- throw Error('Tree node does not exist');
107
- }
108
- node.expanded = updatedTreeNode?.expanded;
109
- node.childrenNodes = updatedTreeNode?.childrenNodes;
110
- node.selected = updatedTreeNode?.selected;
111
- treeNode = updatedTreeNode;
112
- this.syncTree();
113
- this.viewContext.getAndSyncViewContext(this.viewContext.getUuidOfPage(this.viewContextName));
114
- });
90
+ let updatedTreeNode = await this.viewContext.handlePerformActionResponse(await this.service.selectNode2(viewUuid, this.treeId, treeNode.identifier).toPromise());
91
+ if (this.selectedNode) {
92
+ this.selectedNode.selected = false;
93
+ }
94
+ this.selectedNode = updatedTreeNode;
95
+ let node = this.deepSearchTreeNode(updatedTreeNode?.identifier, this.treeFromBackend);
96
+ if (!node) {
97
+ throw Error('Tree node does not exist');
98
+ }
99
+ node.expanded = updatedTreeNode?.expanded;
100
+ node.childrenNodes = updatedTreeNode?.childrenNodes;
101
+ node.selected = updatedTreeNode?.selected;
102
+ treeNode = updatedTreeNode;
103
+ this.syncTree();
104
+ this.viewContext.getAndSyncViewContext(this.viewContext.getUuidOfPage(this.viewContextName));
115
105
  }
116
106
  async updateTreeOnTheFly() {
117
107
  await this.initialize();
@@ -261,15 +251,11 @@ export class SmarttreeGenericService extends SmarttreeService {
261
251
  let nodeId = uiActionRequest.params['nodeUuid'];
262
252
  delete uiActionRequest.params['nodeUuid'];
263
253
  let viewUuid = this.viewContext.getUuidOfPage(this.pageName);
264
- this.treeFromBackend = await this.service
265
- .performAction(viewUuid, this.treeId, nodeId, uiActionRequest)
266
- .toPromise();
254
+ this.treeFromBackend = await this.viewContext.handlePerformActionResponse(await this.service.performAction2(viewUuid, this.treeId, nodeId, uiActionRequest).toPromise());
267
255
  }
268
256
  async performMainUiActionRequest(uiActionRequest) {
269
257
  let viewUuid = this.viewContext.getUuidOfPage(this.pageName);
270
- this.treeFromBackend = await this.service
271
- .performMainAction(viewUuid, this.treeId, uiActionRequest)
272
- .toPromise();
258
+ this.treeFromBackend = await this.viewContext.handlePerformActionResponse(await this.service.performMainAction2(viewUuid, this.treeId, uiActionRequest).toPromise());
273
259
  }
274
260
  handleSpecificDemandsAsynchronously(uiAction, uiActionRequest) {
275
261
  throw new Error('Method not implemented.');
@@ -289,4 +275,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
289
275
  type: Inject,
290
276
  args: ['treeId']
291
277
  }] }]; } });
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0cmVlLWdlbmVyaWMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRyZWUvc21hcnR0cmVlLWdlbmVyaWMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsdUJBQXVCLEVBSXZCLHlCQUF5QixFQUd6QixlQUFlLEdBR2hCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQVcvQixNQUFNLE9BQU8sdUJBQ1gsU0FBUSxnQkFBaUM7SUFtQnpDLFlBQ0UsTUFBZ0IsRUFDYyxRQUFnQixFQUNsQixNQUFjO1FBRTFDLEtBQUssRUFBRSxDQUFDO1FBSHNCLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQW5CNUMseUJBQXlCO1FBQ3pCLFdBQU0sR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN0Qyx3QkFBbUIsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVuRCx3QkFBbUIsR0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUlqRSxvQkFBZSxHQUFXLGlCQUFpQixDQUFDO1FBZTFDLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixlQUFlLEVBQUUsSUFB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QyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU87YUFDdEMsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTyxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUM7YUFDOUQsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUNELEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxlQUFnQztRQUMvRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFN0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPO2FBQ3RDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTyxFQUFFLGVBQWUsQ0FBQzthQUMxRCxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsbUNBQW1DLENBQ2pDLFFBQWtCLEVBQ2xCLGVBQWdDO1FBRWhDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDOztvSEE5VVUsdUJBQXVCLDBDQXNCeEIsVUFBVSxhQUNWLFFBQVE7d0hBdkJQLHVCQUF1QixjQUZ0QixNQUFNOzJGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQXVCSSxNQUFNOzJCQUFDLFVBQVU7OzBCQUNqQixNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRWaWV3Q29udGV4dFNlcnZpY2UsXHJcbiAgVWlBY3Rpb24sXHJcbiAgVWlBY3Rpb25BZGRpdGlvbmFsUGFyYW1zLFxyXG4gIFVpQWN0aW9uRGVzY3JpcHRvcixcclxuICBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLFxyXG4gIFVpQWN0aW9uTW9kZWwsXHJcbiAgVWlBY3Rpb25SZXF1ZXN0LFxyXG4gIFVpQWN0aW9uU2VydmljZSxcclxuICBVaUFjdGlvblNwZWNpZmljRGVtYW5kUmVzcG9uc2UsXHJcbiAgVXNlVWlBY3Rpb24sXHJcbn0gZnJvbSAnLi4vdmlldy1jb250ZXh0L3Byb2plY3RzJztcclxuaW1wb3J0IHsgVHJlZVNlcnZpY2UgfSBmcm9tICcuL3RyZWUtYXBpL2FwaS90cmVlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTbWFydFRyZWVOb2RlLCBTbWFydFRyZWVOb2RlQnV0dG9uVHlwZSB9IGZyb20gJy4vc21hcnR0cmVlLm1vZGVsJztcclxuaW1wb3J0IHsgU21hcnR0cmVlU2VydmljZSB9IGZyb20gJy4vc21hcnR0cmVlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0dHJlZUNvbmZpZ3VyYXRpb24ge1xyXG4gIHRyZWVpZDogc3RyaW5nO1xyXG4gIHZpZXdDb250ZXh0TmFtZTogc3RyaW5nO1xyXG4gIHBhZ2VOYW1lOiBzdHJpbmc7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydHRyZWVHZW5lcmljU2VydmljZVxyXG4gIGV4dGVuZHMgU21hcnR0cmVlU2VydmljZTxTbWFydFRyZWVOb2RlW10+XHJcbiAgaW1wbGVtZW50cyBVc2VVaUFjdGlvblxyXG57XHJcbiAgLy8gVXNlVWlBY3Rpb24gcHJvcGVydGllc1xyXG4gIHN1Ym1pdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgcmVTdWJzY3JpYmVUb0NoYW5nZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHVpQWN0aW9uRGVzY3JpcHRvcnM6IE1hcDxzdHJpbmcsIFVpQWN0aW9uRGVzY3JpcHRvcj4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIHNlbGVjdGVkTm9kZT86IFNtYXJ0VHJlZU5vZGU7XHJcblxyXG4gIHZpZXdDb250ZXh0TmFtZTogc3RyaW5nID0gJ3ZpZXdDb250ZXh0VXVpZCc7XHJcblxyXG4gIHByb3RlY3RlZCB2aWV3Q29udGV4dCE6IFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlO1xyXG4gIHByaXZhdGUgc2VydmljZSE6IFRyZWVTZXJ2aWNlO1xyXG5cclxuICBwcml2YXRlIHVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UhOiBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlO1xyXG4gIHByaXZhdGUgdWlBY3Rpb25TZXJ2aWNlITogVWlBY3Rpb25TZXJ2aWNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGluamVjdDogSW5qZWN0b3IsXHJcbiAgICBASW5qZWN0KCdwYWdlTmFtZScpIHByb3RlY3RlZCBwYWdlTmFtZTogc3RyaW5nLFxyXG4gICAgQEluamVjdCgndHJlZUlkJykgcHJvdGVjdGVkIHRyZWVJZDogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICAgIHRoaXMuY29uZmlndXJlVHJlZSh7XHJcbiAgICAgIHBhZ2VOYW1lOiB0aGlzLnBhZ2VOYW1lLFxyXG4gICAgICB0cmVlaWQ6IHRoaXMudHJlZUlkLFxyXG4gICAgICB2aWV3Q29udGV4dE5hbWU6IHRoaXMudmlld0NvbnRleHROYW1lLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy52aWV3Q29udGV4dCA9IGluamVjdC5nZXQoU21hcnRWaWV3Q29udGV4dFNlcnZpY2UpO1xyXG4gICAgdGhpcy5zZXJ2aWNlID0gaW5qZWN0LmdldChUcmVlU2VydmljZSk7XHJcblxyXG4gICAgdGhpcy51aUFjdGlvblNlcnZpY2UgPSBpbmplY3QuZ2V0KFVpQWN0aW9uU2VydmljZSk7XHJcbiAgICB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgPSBpbmplY3QuZ2V0KFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UpO1xyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0VWlBY3Rpb25Nb2RlbHModWlBY3Rpb25zOiBVaUFjdGlvbltdKTogdm9pZCB7XHJcbiAgICB0aGlzLnVpQWN0aW9uTW9kZWxzID0gdWlBY3Rpb25zLm1hcCgodWlBY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgc2VydmljZVRvVXNlOiB0aGlzLFxyXG4gICAgICAgIHVpQWN0aW9uLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjb25maWd1cmVUcmVlKGNvbmZpZ3VyYXRpb246IFNtYXJ0dHJlZUNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcclxuICAgIHRoaXMudHJlZUlkID0gY29uZmlndXJhdGlvbi50cmVlaWQ7XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0TmFtZSA9IGNvbmZpZ3VyYXRpb24udmlld0NvbnRleHROYW1lO1xyXG4gICAgdGhpcy5wYWdlTmFtZSA9IGNvbmZpZ3VyYXRpb24ucGFnZU5hbWU7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy52aWV3Q29udGV4dE5hbWUhKSkge1xyXG4gICAgICBhd2FpdCB0aGlzLmRvd25sb2FkVHJlZSgpLnRoZW4oKHJvb3ROb2RlczogU21hcnRUcmVlTm9kZVtdKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmVlRnJvbUJhY2tlbmQgPSByb290Tm9kZXM7XHJcbiAgICAgICAgdGhpcy5zeW5jVHJlZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgb3ZlcnJpZGUgYXN5bmMgZG93bmxvYWRUcmVlKCk6IFByb21pc2U8U21hcnRUcmVlTm9kZVtdPiB7XHJcbiAgICBsZXQgdXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lISk7XHJcbiAgICBjb25zdCByb290Tm9kZXMgPSBhd2FpdCB0aGlzLnNlcnZpY2UuZ2V0Um9vdE5vZGVzKHV1aWQsIHRoaXMudHJlZUlkISkudG9Qcm9taXNlKCk7XHJcbiAgICBjb25zdCB1aUFjdGlvbnMgPSBhd2FpdCB0aGlzLnNlcnZpY2UuZ2V0TWFpbkFjdGlvbnModXVpZCwgdGhpcy50cmVlSWQhKS50b1Byb21pc2UoKTtcclxuXHJcbiAgICBpZiAodWlBY3Rpb25zKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0VWlBY3Rpb25Nb2RlbHModWlBY3Rpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXJvb3ROb2Rlcykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3ROb2RlcyBhcmUgdW5kZWZpbmVkIScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvb3ROb2RlcztcclxuICB9XHJcbiAgb3ZlcnJpZGUgYXN5bmMgZG93bmxvYWRDaGlsZHJlbihwYXJlbnROb2RlOiBTbWFydFRyZWVOb2RlKTogUHJvbWlzZTxTbWFydFRyZWVOb2RlW10+IHtcclxuICAgIGxldCB1dWlkID0gdGhpcy52aWV3Q29udGV4dC5nZXRVdWlkT2ZQYWdlKHRoaXMucGFnZU5hbWUhKTtcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gYXdhaXQgdGhpcy5zZXJ2aWNlXHJcbiAgICAgIC5nZXRDaGlsZHJlbk5vZGVzKHV1aWQsIHRoaXMudHJlZUlkISwgcGFyZW50Tm9kZS5pZGVudGlmaWVyISlcclxuICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gICAgaWYgKCFjaGlsZHJlbikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vZGUgd2l0aCBpZGVudGlmaWVyICR7cGFyZW50Tm9kZS5pZGVudGlmaWVyfSBkb2VzIG5vdCBoYXZlIGNoaWxkcmVuLmApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjaGlsZHJlbjtcclxuICB9XHJcbiAgb3ZlcnJpZGUgYXN5bmMgb25UcmVlTm9kZU9wZW4odHJlZU5vZGU6IFNtYXJ0VHJlZU5vZGUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCB2aWV3VXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lISk7XHJcblxyXG4gICAgaWYgKHRyZWVOb2RlPy5leHBhbmRlZCkge1xyXG4gICAgICBsZXQgdGVtcFRyZWVOb2RlID0gYXdhaXQgdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgLmNvbGxhcHNlTm9kZSh2aWV3VXVpZCwgdGhpcy50cmVlSWQhLCB0cmVlTm9kZS5pZGVudGlmaWVyISlcclxuICAgICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICAgIHRyZWVOb2RlID0gdGVtcFRyZWVOb2RlITtcclxuICAgIH0gZWxzZSBpZiAoIXRyZWVOb2RlPy5leHBhbmRlZCkge1xyXG4gICAgICBsZXQgdGVtcFRyZWVOb2RlID0gYXdhaXQgdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgLmV4cGFuZE5vZGUodmlld1V1aWQsIHRoaXMudHJlZUlkISwgdHJlZU5vZGU/LmlkZW50aWZpZXIhKVxyXG4gICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgICAgdHJlZU5vZGUgPSB0ZW1wVHJlZU5vZGUhO1xyXG4gICAgfVxyXG4gICAgbGV0IG5vZGUgPSB0aGlzLmRlZXBTZWFyY2hUcmVlTm9kZSh0cmVlTm9kZT8uaWRlbnRpZmllciEsIHRoaXMudHJlZUZyb21CYWNrZW5kISk7XHJcblxyXG4gICAgbm9kZSEuZXhwYW5kZWQgPSB0cmVlTm9kZT8uZXhwYW5kZWQ7XHJcbiAgICBub2RlIS5jaGlsZHJlbk5vZGVzID0gdHJlZU5vZGU/LmNoaWxkcmVuTm9kZXM7XHJcbiAgICB0aGlzLnN5bmNUcmVlKCk7XHJcbiAgfVxyXG4gIG92ZXJyaWRlIG9uVHJlZU5vZGVDbGljayh0cmVlTm9kZTogU21hcnRUcmVlTm9kZSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RGb2xkZXIodHJlZU5vZGUuaWRlbnRpZmllciEsIHRyZWVOb2RlKTtcclxuICB9XHJcbiAgYXN5bmMgc2VsZWN0Rm9sZGVyKGZvbGRlclVyaTogc3RyaW5nLCB0cmVlTm9kZT86IFNtYXJ0VHJlZU5vZGUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCB2aWV3VXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lISk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5zZXJ2aWNlXHJcbiAgICAgIC5zZWxlY3ROb2RlKHZpZXdVdWlkLCB0aGlzLnRyZWVJZCEsIHRyZWVOb2RlIS5pZGVudGlmaWVyISlcclxuICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgIC50aGVuKCh1cGRhdGVkVHJlZU5vZGU6IFNtYXJ0VHJlZU5vZGUgfCB1bmRlZmluZWQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE5vZGUpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gdXBkYXRlZFRyZWVOb2RlO1xyXG4gICAgICAgIGxldCBub2RlID0gdGhpcy5kZWVwU2VhcmNoVHJlZU5vZGUodXBkYXRlZFRyZWVOb2RlPy5pZGVudGlmaWVyISwgdGhpcy50cmVlRnJvbUJhY2tlbmQhKTtcclxuICAgICAgICBpZiAoIW5vZGUpIHtcclxuICAgICAgICAgIHRocm93IEVycm9yKCdUcmVlIG5vZGUgZG9lcyBub3QgZXhpc3QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbm9kZS5leHBhbmRlZCA9IHVwZGF0ZWRUcmVlTm9kZT8uZXhwYW5kZWQhO1xyXG4gICAgICAgIG5vZGUuY2hpbGRyZW5Ob2RlcyA9IHVwZGF0ZWRUcmVlTm9kZT8uY2hpbGRyZW5Ob2RlcyE7XHJcbiAgICAgICAgbm9kZS5zZWxlY3RlZCA9IHVwZGF0ZWRUcmVlTm9kZT8uc2VsZWN0ZWQhO1xyXG4gICAgICAgIHRyZWVOb2RlID0gdXBkYXRlZFRyZWVOb2RlO1xyXG4gICAgICAgIHRoaXMuc3luY1RyZWUoKTtcclxuICAgICAgICB0aGlzLnZpZXdDb250ZXh0LmdldEFuZFN5bmNWaWV3Q29udGV4dChcclxuICAgICAgICAgIHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnZpZXdDb250ZXh0TmFtZSEpXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVUcmVlT25UaGVGbHkoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemUoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIGFzeW5jIHN5bmNUcmVlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5jYWNoZUFjdGlvbkRlc2NpcHRvcnModGhpcy5nZXRBbGxOb2Rlcyh0aGlzLnRyZWVGcm9tQmFja2VuZCEpKTtcclxuXHJcbiAgICBpZiAoIXRoaXMudHJlZUZyb21CYWNrZW5kKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbm8gdHJlZUZyb21CYWNrZW5kIGF2YWlsYWJsZSEnKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zbWFydFRyZWVNb2RlbCkge1xyXG4gICAgICB0aGlzLnNtYXJ0VHJlZU1vZGVsID0ge1xyXG4gICAgICAgIHJvb3ROb2RlczogW10sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNtYXJ0VHJlZU5vZGVzOiBTbWFydFRyZWVOb2RlW10gPSB0aGlzLmNyZWF0ZUJ1dHRvbnNGb3JUcmVlTm9kZXModGhpcy50cmVlRnJvbUJhY2tlbmQpO1xyXG4gICAgdGhpcy5zbWFydFRyZWVNb2RlbCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLnNtYXJ0VHJlZU1vZGVsID0ge1xyXG4gICAgICByb290Tm9kZXM6IFtdLFxyXG4gICAgfTtcclxuICAgIHRoaXMuc21hcnRUcmVlTW9kZWxDaGFuZ2VkLm5leHQodGhpcy5zbWFydFRyZWVNb2RlbCk7XHJcblxyXG4gICAgdGhpcy5zbWFydFRyZWVNb2RlbC5yb290Tm9kZXMgPSBzbWFydFRyZWVOb2RlcztcclxuXHJcbiAgICB0aGlzLmZpbmRTZWxlY3RlZCh0aGlzLnNtYXJ0VHJlZU1vZGVsLnJvb3ROb2Rlcyk7XHJcblxyXG4gICAgdGhpcy5zbWFydFRyZWVNb2RlbENoYW5nZWQubmV4dCh0aGlzLnNtYXJ0VHJlZU1vZGVsKTtcclxuICB9XHJcblxyXG4gIGRlZXBTZWFyY2hUcmVlTm9kZShpZGVudGlmaWVyOiBzdHJpbmcsIG5vZGVzOiBTbWFydFRyZWVOb2RlW10pOiBTbWFydFRyZWVOb2RlIHwgdW5kZWZpbmVkIHtcclxuICAgIGxldCB0cmVlTm9kZTogU21hcnRUcmVlTm9kZSB8IHVuZGVmaW5lZDtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBub2Rlcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2luZGV4XTtcclxuXHJcbiAgICAgIGlmIChub2RlLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcclxuICAgICAgICB0cmVlTm9kZSA9IG5vZGU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW5Ob2RlcyAmJiBub2RlLmNoaWxkcmVuTm9kZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgdHJlZU5vZGUgPSB0aGlzLmRlZXBTZWFyY2hUcmVlTm9kZShpZGVudGlmaWVyLCBub2RlLmNoaWxkcmVuTm9kZXMpO1xyXG4gICAgICAgIGlmICh0cmVlTm9kZSkge1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJlZU5vZGU7XHJcbiAgfVxyXG5cclxuICBmaW5kU2VsZWN0ZWQobm9kZXM6IFNtYXJ0VHJlZU5vZGVbXSk6IHZvaWQge1xyXG4gICAgcmV0dXJuIG5vZGVzLmZvckVhY2goKG5vZGU6IFNtYXJ0VHJlZU5vZGUpID0+IHtcclxuICAgICAgaWYgKG5vZGUuc2VsZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IG5vZGU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGRyZW5Ob2RlcyAmJiBub2RlLmNoaWxkcmVuTm9kZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZFNlbGVjdGVkKG5vZGUuY2hpbGRyZW5Ob2Rlcyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlQnV0dG9uc0ZvclRyZWVOb2Rlcyhub2RlczogU21hcnRUcmVlTm9kZVtdKTogU21hcnRUcmVlTm9kZVtdIHtcclxuICAgIG5vZGVzLm1hcCgobm9kZTogU21hcnRUcmVlTm9kZSkgPT4ge1xyXG4gICAgICBub2RlLmJ1dHRvbiA9IG5vZGUuYWN0aW9ucz8ubGVuZ3RoXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIHR5cGU6IFNtYXJ0VHJlZU5vZGVCdXR0b25UeXBlLk1FTlUsXHJcbiAgICAgICAgICAgIGljb246ICdtb3JlX3ZlcnQnLFxyXG4gICAgICAgICAgICBtZW51SXRlbUJ1dHRvbnM6IG5vZGUuYWN0aW9ucy5tYXAoKGFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogU21hcnRUcmVlTm9kZUJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWxCeUFjdGlvbihhY3Rpb24pLFxyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMuZG9BY3Rpb24uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIGFyZ3M6IFthY3Rpb24sIG5vZGUuaWRlbnRpZmllcl0sXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgIG5vZGUuaWNvbiA9ICdGb2xkZXJzJztcclxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW5Ob2Rlcykge1xyXG4gICAgICAgIG5vZGUuY2hpbGRyZW5Ob2RlcyA9IHRoaXMuY3JlYXRlQnV0dG9uc0ZvclRyZWVOb2Rlcyhub2RlLmNoaWxkcmVuTm9kZXMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBub2RlcztcclxuICB9XHJcblxyXG4gIGFzeW5jIGRvQWN0aW9uKGFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgdWlBY3Rpb246IFVpQWN0aW9uID0gYXJnc1swXTtcclxuICAgIGxldCBub2RlVXVpZDogc3RyaW5nID0gYXJnc1sxXTtcclxuXHJcbiAgICBpZiAodWlBY3Rpb24ucGFyYW1zKSB7XHJcbiAgICAgIHVpQWN0aW9uLnBhcmFtc1snbm9kZVV1aWQnXSA9IG5vZGVVdWlkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdWlBY3Rpb24ucGFyYW1zID0ge1xyXG4gICAgICAgIG5vZGVVdWlkOiBub2RlVXVpZCxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdWlBY3Rpb25Nb2RlbDogVWlBY3Rpb25Nb2RlbCA9IHtcclxuICAgICAgc2VydmljZVRvVXNlOiB0aGlzLFxyXG4gICAgICB1aUFjdGlvbixcclxuICAgIH07XHJcbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZS51aUFjdGlvbk1vZGVsID0gdWlBY3Rpb25Nb2RlbDtcclxuICAgIHRoaXMudWlBY3Rpb25TZXJ2aWNlLmV4ZWN1dGUodWlBY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldEFsbE5vZGVzKG5vZGVzOiBTbWFydFRyZWVOb2RlW10pOiBTbWFydFRyZWVOb2RlW10ge1xyXG4gICAgcmV0dXJuIG5vZGVzLmZsYXRNYXAoKG4pID0+IFtuLCAuLi50aGlzLmdldEFsbE5vZGVzKG4uY2hpbGRyZW5Ob2RlcyldKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhc3luYyBjYWNoZUFjdGlvbkRlc2NpcHRvcnMobm9kZXM6IFNtYXJ0VHJlZU5vZGVbXSkge1xyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIG5vZGVzLm1hcChhc3luYyAobm9kZTogU21hcnRUcmVlTm9kZSkgPT4ge1xyXG4gICAgICAgIGxldCBuZXdVaUFjdGlvbnMgPSBub2RlLmFjdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICh1aUFjdGlvbjogVWlBY3Rpb24pID0+ICF0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuZ2V0KHVpQWN0aW9uLmNvZGUhKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFuZXdVaUFjdGlvbnMpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgbmV3VWlBY3Rpb25zIS5tYXAoYXN5bmMgKHVpQWN0aW9uOiBVaUFjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5nZXQodWlBY3Rpb24uY29kZSEpKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGRlc2NyaXB0b3IgPSBhd2FpdCB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UuZ2V0QWN0aW9uRGVzY3JpcHRvcih1aUFjdGlvbik7XHJcbiAgICAgICAgICAgICAgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLnNldCh1aUFjdGlvbi5jb2RlISwgZGVzY3JpcHRvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG4gIGdldExhYmVsQnlBY3Rpb24oYWN0aW9uOiBVaUFjdGlvbik6IHN0cmluZyB7XHJcbiAgICBsZXQgZGVzYyA9IHRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5nZXQoYWN0aW9uLmNvZGUhKTtcclxuICAgIHJldHVybiBkZXNjIS50aXRsZTtcclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gVXNlVWlBY3Rpb25cclxuICBnZXRBZGRpdGlvbmFsUGFyYW1zKHVpQWN0aW9uOiBVaUFjdGlvbik6IFVpQWN0aW9uQWRkaXRpb25hbFBhcmFtcyB7XHJcbiAgICBpZiAodWlBY3Rpb24ucGFyYW1zICYmIHVpQWN0aW9uLnBhcmFtc1snbm9kZVV1aWQnXSkge1xyXG4gICAgICBsZXQgbm9kZVV1aWQgPSB1aUFjdGlvbi5wYXJhbXMhWydub2RlVXVpZCddO1xyXG5cclxuICAgICAgbGV0IG5vZGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICAgIGlmICh1aUFjdGlvbi5jb2RlID09PSAnUkVOQU1FJykge1xyXG4gICAgICAgIG5vZGVOYW1lID0gdGhpcy5kZWVwU2VhcmNoVHJlZU5vZGUobm9kZVV1aWQsIHRoaXMudHJlZUZyb21CYWNrZW5kISk/LmNhcHRpb247XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZm9yVGV4dEFyZWE6ICcnLFxyXG4gICAgICAgIGZvclRleHRGaWVsZDogbm9kZU5hbWUgPyBub2RlTmFtZSA6ICcnLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGZvclRleHRBcmVhOiAnJyxcclxuICAgICAgZm9yVGV4dEZpZWxkOiAnJyxcclxuICAgIH07XHJcbiAgfVxyXG4gIGdldE1vZGVsKCkge1xyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcGVyZm9ybVVpQWN0aW9uUmVxdWVzdCh1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAodWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snbm9kZVV1aWQnXSkge1xyXG4gICAgICBhd2FpdCB0aGlzLnBlcmZvcm1Ob2RlVWlBY3Rpb25SZXF1ZXN0KHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhd2FpdCB0aGlzLnBlcmZvcm1NYWluVWlBY3Rpb25SZXF1ZXN0KHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5nZXRBbmRTeW5jVmlld0NvbnRleHQoKTtcclxuXHJcbiAgICB0aGlzLnN5bmNUcmVlKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwZXJmb3JtTm9kZVVpQWN0aW9uUmVxdWVzdCh1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBsZXQgbm9kZUlkID0gdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snbm9kZVV1aWQnXTtcclxuICAgIGRlbGV0ZSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydub2RlVXVpZCddO1xyXG5cclxuICAgIGxldCB2aWV3VXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lKTtcclxuXHJcbiAgICB0aGlzLnRyZWVGcm9tQmFja2VuZCA9IGF3YWl0IHRoaXMuc2VydmljZVxyXG4gICAgICAucGVyZm9ybUFjdGlvbih2aWV3VXVpZCwgdGhpcy50cmVlSWQhLCBub2RlSWQsIHVpQWN0aW9uUmVxdWVzdClcclxuICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuICBhc3luYyBwZXJmb3JtTWFpblVpQWN0aW9uUmVxdWVzdCh1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBsZXQgdmlld1V1aWQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFV1aWRPZlBhZ2UodGhpcy5wYWdlTmFtZSk7XHJcblxyXG4gICAgdGhpcy50cmVlRnJvbUJhY2tlbmQgPSBhd2FpdCB0aGlzLnNlcnZpY2VcclxuICAgICAgLnBlcmZvcm1NYWluQWN0aW9uKHZpZXdVdWlkLCB0aGlzLnRyZWVJZCEsIHVpQWN0aW9uUmVxdWVzdClcclxuICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU3BlY2lmaWNEZW1hbmRzQXN5bmNocm9ub3VzbHkoXHJcbiAgICB1aUFjdGlvbjogVWlBY3Rpb24sXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdFxyXG4gICk6IFByb21pc2U8VWlBY3Rpb25TcGVjaWZpY0RlbWFuZFJlc3BvbnNlPiB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XHJcbiAgfVxyXG4gIC8vICNlbmRyZWdpb25cclxufVxyXG4iXX0=
278
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnR0cmVlLWdlbmVyaWMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LXRyZWUvc21hcnR0cmVlLWdlbmVyaWMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsdUJBQXVCLEVBSXZCLHlCQUF5QixFQUd6QixlQUFlLEdBR2hCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQVcvQixNQUFNLE9BQU8sdUJBQ1gsU0FBUSxnQkFBaUM7SUFtQnpDLFlBQ0UsTUFBZ0IsRUFDYyxRQUFnQixFQUNsQixNQUFjO1FBRTFDLEtBQUssRUFBRSxDQUFDO1FBSHNCLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQW5CNUMseUJBQXlCO1FBQ3pCLFdBQU0sR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN0Qyx3QkFBbUIsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVuRCx3QkFBbUIsR0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUlqRSxvQkFBZSxHQUFXLGlCQUFpQixDQUFDO1FBZTFDLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixlQUFlLEVBQUUsSUFB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QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBdUJJLE1BQU07MkJBQUMsVUFBVTs7MEJBQ2pCLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBTbWFydFZpZXdDb250ZXh0U2VydmljZSxcclxuICBVaUFjdGlvbixcclxuICBVaUFjdGlvbkFkZGl0aW9uYWxQYXJhbXMsXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yLFxyXG4gIFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UsXHJcbiAgVWlBY3Rpb25Nb2RlbCxcclxuICBVaUFjdGlvblJlcXVlc3QsXHJcbiAgVWlBY3Rpb25TZXJ2aWNlLFxyXG4gIFVpQWN0aW9uU3BlY2lmaWNEZW1hbmRSZXNwb25zZSxcclxuICBVc2VVaUFjdGlvbixcclxufSBmcm9tICcuLi92aWV3LWNvbnRleHQvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBUcmVlU2VydmljZSB9IGZyb20gJy4vdHJlZS1hcGkvYXBpL3RyZWUuc2VydmljZSc7XHJcbmltcG9ydCB7IFNtYXJ0VHJlZU5vZGUsIFNtYXJ0VHJlZU5vZGVCdXR0b25UeXBlIH0gZnJvbSAnLi9zbWFydHRyZWUubW9kZWwnO1xyXG5pbXBvcnQgeyBTbWFydHRyZWVTZXJ2aWNlIH0gZnJvbSAnLi9zbWFydHRyZWUuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU21hcnR0cmVlQ29uZmlndXJhdGlvbiB7XHJcbiAgdHJlZWlkOiBzdHJpbmc7XHJcbiAgdmlld0NvbnRleHROYW1lOiBzdHJpbmc7XHJcbiAgcGFnZU5hbWU6IHN0cmluZztcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlXHJcbiAgZXh0ZW5kcyBTbWFydHRyZWVTZXJ2aWNlPFNtYXJ0VHJlZU5vZGVbXT5cclxuICBpbXBsZW1lbnRzIFVzZVVpQWN0aW9uXHJcbntcclxuICAvLyBVc2VVaUFjdGlvbiBwcm9wZXJ0aWVzXHJcbiAgc3VibWl0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICByZVN1YnNjcmliZVRvQ2hhbmdlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgdWlBY3Rpb25EZXNjcmlwdG9yczogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgc2VsZWN0ZWROb2RlPzogU21hcnRUcmVlTm9kZTtcclxuXHJcbiAgdmlld0NvbnRleHROYW1lOiBzdHJpbmcgPSAndmlld0NvbnRleHRVdWlkJztcclxuXHJcbiAgcHJvdGVjdGVkIHZpZXdDb250ZXh0ITogU21hcnRWaWV3Q29udGV4dFNlcnZpY2U7XHJcbiAgcHJpdmF0ZSBzZXJ2aWNlITogVHJlZVNlcnZpY2U7XHJcblxyXG4gIHByaXZhdGUgdWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSE6IFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U7XHJcbiAgcHJpdmF0ZSB1aUFjdGlvblNlcnZpY2UhOiBVaUFjdGlvblNlcnZpY2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgaW5qZWN0OiBJbmplY3RvcixcclxuICAgIEBJbmplY3QoJ3BhZ2VOYW1lJykgcHJvdGVjdGVkIHBhZ2VOYW1lOiBzdHJpbmcsXHJcbiAgICBASW5qZWN0KCd0cmVlSWQnKSBwcm90ZWN0ZWQgdHJlZUlkOiBzdHJpbmdcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgdGhpcy5jb25maWd1cmVUcmVlKHtcclxuICAgICAgcGFnZU5hbWU6IHRoaXMucGFnZU5hbWUsXHJcbiAgICAgIHRyZWVpZDogdGhpcy50cmVlSWQsXHJcbiAgICAgIHZpZXdDb250ZXh0TmFtZTogdGhpcy52aWV3Q29udGV4dE5hbWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gaW5qZWN0LmdldChTbWFydFZpZXdDb250ZXh0U2VydmljZSk7XHJcbiAgICB0aGlzLnNlcnZpY2UgPSBpbmplY3QuZ2V0KFRyZWVTZXJ2aWNlKTtcclxuXHJcbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZSA9IGluamVjdC5nZXQoVWlBY3Rpb25TZXJ2aWNlKTtcclxuICAgIHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSA9IGluamVjdC5nZXQoVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSk7XHJcblxyXG4gICAgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RVaUFjdGlvbk1vZGVscyh1aUFjdGlvbnM6IFVpQWN0aW9uW10pOiB2b2lkIHtcclxuICAgIHRoaXMudWlBY3Rpb25Nb2RlbHMgPSB1aUFjdGlvbnMubWFwKCh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBzZXJ2aWNlVG9Vc2U6IHRoaXMsXHJcbiAgICAgICAgdWlBY3Rpb24sXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyZVRyZWUoY29uZmlndXJhdGlvbjogU21hcnR0cmVlQ29uZmlndXJhdGlvbik6IHZvaWQge1xyXG4gICAgdGhpcy50cmVlSWQgPSBjb25maWd1cmF0aW9uLnRyZWVpZDtcclxuICAgIHRoaXMudmlld0NvbnRleHROYW1lID0gY29uZmlndXJhdGlvbi52aWV3Q29udGV4dE5hbWU7XHJcbiAgICB0aGlzLnBhZ2VOYW1lID0gY29uZmlndXJhdGlvbi5wYWdlTmFtZTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnZpZXdDb250ZXh0TmFtZSEpKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuZG93bmxvYWRUcmVlKCkudGhlbigocm9vdE5vZGVzOiBTbWFydFRyZWVOb2RlW10pID0+IHtcclxuICAgICAgICB0aGlzLnRyZWVGcm9tQmFja2VuZCA9IHJvb3ROb2RlcztcclxuICAgICAgICB0aGlzLnN5bmNUcmVlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBvdmVycmlkZSBhc3luYyBkb3dubG9hZFRyZWUoKTogUHJvbWlzZTxTbWFydFRyZWVOb2RlW10+IHtcclxuICAgIGxldCB1dWlkID0gdGhpcy52aWV3Q29udGV4dC5nZXRVdWlkT2ZQYWdlKHRoaXMucGFnZU5hbWUhKTtcclxuICAgIGNvbnN0IHJvb3ROb2RlcyA9IGF3YWl0IHRoaXMudmlld0NvbnRleHQuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICBhd2FpdCB0aGlzLnNlcnZpY2UuZ2V0Um9vdE5vZGVzMih1dWlkLCB0aGlzLnRyZWVJZCEpLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG4gICAgY29uc3QgdWlBY3Rpb25zID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5nZXRNYWluQWN0aW9uczIodXVpZCwgdGhpcy50cmVlSWQhKS50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodWlBY3Rpb25zKSB7XHJcbiAgICAgIHRoaXMuY29uc3RydWN0VWlBY3Rpb25Nb2RlbHModWlBY3Rpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXJvb3ROb2Rlcykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3ROb2RlcyBhcmUgdW5kZWZpbmVkIScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvb3ROb2RlcztcclxuICB9XHJcbiAgb3ZlcnJpZGUgYXN5bmMgZG93bmxvYWRDaGlsZHJlbihwYXJlbnROb2RlOiBTbWFydFRyZWVOb2RlKTogUHJvbWlzZTxTbWFydFRyZWVOb2RlW10+IHtcclxuICAgIGxldCB1dWlkID0gdGhpcy52aWV3Q29udGV4dC5nZXRVdWlkT2ZQYWdlKHRoaXMucGFnZU5hbWUhKTtcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5nZXRDaGlsZHJlbk5vZGVzMih1dWlkLCB0aGlzLnRyZWVJZCEsIHBhcmVudE5vZGUuaWRlbnRpZmllciEpLnRvUHJvbWlzZSgpXHJcbiAgICApO1xyXG4gICAgaWYgKCFjaGlsZHJlbikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vZGUgd2l0aCBpZGVudGlmaWVyICR7cGFyZW50Tm9kZS5pZGVudGlmaWVyfSBkb2VzIG5vdCBoYXZlIGNoaWxkcmVuLmApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjaGlsZHJlbjtcclxuICB9XHJcbiAgb3ZlcnJpZGUgYXN5bmMgb25UcmVlTm9kZU9wZW4odHJlZU5vZGU6IFNtYXJ0VHJlZU5vZGUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCB2aWV3VXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lISk7XHJcblxyXG4gICAgaWYgKHRyZWVOb2RlPy5leHBhbmRlZCkge1xyXG4gICAgICBsZXQgdGVtcFRyZWVOb2RlID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmNvbGxhcHNlTm9kZTIodmlld1V1aWQsIHRoaXMudHJlZUlkISwgdHJlZU5vZGUuaWRlbnRpZmllciEpLnRvUHJvbWlzZSgpXHJcbiAgICAgICk7XHJcbiAgICAgIHRyZWVOb2RlID0gdGVtcFRyZWVOb2RlITtcclxuICAgIH0gZWxzZSBpZiAoIXRyZWVOb2RlPy5leHBhbmRlZCkge1xyXG4gICAgICBsZXQgdGVtcFRyZWVOb2RlID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmV4cGFuZE5vZGUyKHZpZXdVdWlkLCB0aGlzLnRyZWVJZCEsIHRyZWVOb2RlPy5pZGVudGlmaWVyISkudG9Qcm9taXNlKClcclxuICAgICAgKTtcclxuICAgICAgdHJlZU5vZGUgPSB0ZW1wVHJlZU5vZGUhO1xyXG4gICAgfVxyXG4gICAgbGV0IG5vZGUgPSB0aGlzLmRlZXBTZWFyY2hUcmVlTm9kZSh0cmVlTm9kZT8uaWRlbnRpZmllciEsIHRoaXMudHJlZUZyb21CYWNrZW5kISk7XHJcblxyXG4gICAgbm9kZSEuZXhwYW5kZWQgPSB0cmVlTm9kZT8uZXhwYW5kZWQ7XHJcbiAgICBub2RlIS5jaGlsZHJlbk5vZGVzID0gdHJlZU5vZGU/LmNoaWxkcmVuTm9kZXM7XHJcbiAgICB0aGlzLnN5bmNUcmVlKCk7XHJcbiAgfVxyXG4gIG92ZXJyaWRlIG9uVHJlZU5vZGVDbGljayh0cmVlTm9kZTogU21hcnRUcmVlTm9kZSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RGb2xkZXIodHJlZU5vZGUuaWRlbnRpZmllciEsIHRyZWVOb2RlKTtcclxuICB9XHJcbiAgYXN5bmMgc2VsZWN0Rm9sZGVyKGZvbGRlclVyaTogc3RyaW5nLCB0cmVlTm9kZT86IFNtYXJ0VHJlZU5vZGUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCB2aWV3VXVpZCA9IHRoaXMudmlld0NvbnRleHQuZ2V0VXVpZE9mUGFnZSh0aGlzLnBhZ2VOYW1lISk7XHJcblxyXG4gICAgbGV0IHVwZGF0ZWRUcmVlTm9kZSA9IGF3YWl0IHRoaXMudmlld0NvbnRleHQuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKFxyXG4gICAgICBhd2FpdCB0aGlzLnNlcnZpY2Uuc2VsZWN0Tm9kZTIodmlld1V1aWQsIHRoaXMudHJlZUlkISwgdHJlZU5vZGUhLmlkZW50aWZpZXIhKS50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkTm9kZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTm9kZS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZE5vZGUgPSB1cGRhdGVkVHJlZU5vZGU7XHJcbiAgICBsZXQgbm9kZSA9IHRoaXMuZGVlcFNlYXJjaFRyZWVOb2RlKHVwZGF0ZWRUcmVlTm9kZT8uaWRlbnRpZmllciEsIHRoaXMudHJlZUZyb21CYWNrZW5kISk7XHJcbiAgICBpZiAoIW5vZGUpIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ1RyZWUgbm9kZSBkb2VzIG5vdCBleGlzdCcpO1xyXG4gICAgfVxyXG4gICAgbm9kZS5leHBhbmRlZCA9IHVwZGF0ZWRUcmVlTm9kZT8uZXhwYW5kZWQhO1xyXG4gICAgbm9kZS5jaGlsZHJlbk5vZGVzID0gdXBkYXRlZFRyZWVOb2RlPy5jaGlsZHJlbk5vZGVzITtcclxuICAgIG5vZGUuc2VsZWN0ZWQgPSB1cGRhdGVkVHJlZU5vZGU/LnNlbGVjdGVkITtcclxuICAgIHRyZWVOb2RlID0gdXBkYXRlZFRyZWVOb2RlO1xyXG4gICAgdGhpcy5zeW5jVHJlZSgpO1xyXG4gICAgdGhpcy52aWV3Q29udGV4dC5nZXRBbmRTeW5jVmlld0NvbnRleHQodGhpcy52aWV3Q29udGV4dC5nZXRVdWlkT2ZQYWdlKHRoaXMudmlld0NvbnRleHROYW1lISkpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlVHJlZU9uVGhlRmx5KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplKCk7XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBhc3luYyBzeW5jVHJlZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuY2FjaGVBY3Rpb25EZXNjaXB0b3JzKHRoaXMuZ2V0QWxsTm9kZXModGhpcy50cmVlRnJvbUJhY2tlbmQhKSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLnRyZWVGcm9tQmFja2VuZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG5vIHRyZWVGcm9tQmFja2VuZCBhdmFpbGFibGUhJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuc21hcnRUcmVlTW9kZWwpIHtcclxuICAgICAgdGhpcy5zbWFydFRyZWVNb2RlbCA9IHtcclxuICAgICAgICByb290Tm9kZXM6IFtdLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBzbWFydFRyZWVOb2RlczogU21hcnRUcmVlTm9kZVtdID0gdGhpcy5jcmVhdGVCdXR0b25zRm9yVHJlZU5vZGVzKHRoaXMudHJlZUZyb21CYWNrZW5kKTtcclxuICAgIHRoaXMuc21hcnRUcmVlTW9kZWwgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgdGhpcy5zbWFydFRyZWVNb2RlbCA9IHtcclxuICAgICAgcm9vdE5vZGVzOiBbXSxcclxuICAgIH07XHJcbiAgICB0aGlzLnNtYXJ0VHJlZU1vZGVsQ2hhbmdlZC5uZXh0KHRoaXMuc21hcnRUcmVlTW9kZWwpO1xyXG5cclxuICAgIHRoaXMuc21hcnRUcmVlTW9kZWwucm9vdE5vZGVzID0gc21hcnRUcmVlTm9kZXM7XHJcblxyXG4gICAgdGhpcy5maW5kU2VsZWN0ZWQodGhpcy5zbWFydFRyZWVNb2RlbC5yb290Tm9kZXMpO1xyXG5cclxuICAgIHRoaXMuc21hcnRUcmVlTW9kZWxDaGFuZ2VkLm5leHQodGhpcy5zbWFydFRyZWVNb2RlbCk7XHJcbiAgfVxyXG5cclxuICBkZWVwU2VhcmNoVHJlZU5vZGUoaWRlbnRpZmllcjogc3RyaW5nLCBub2RlczogU21hcnRUcmVlTm9kZVtdKTogU21hcnRUcmVlTm9kZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBsZXQgdHJlZU5vZGU6IFNtYXJ0VHJlZU5vZGUgfCB1bmRlZmluZWQ7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbm9kZXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpbmRleF07XHJcblxyXG4gICAgICBpZiAobm9kZS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XHJcbiAgICAgICAgdHJlZU5vZGUgPSBub2RlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuTm9kZXMgJiYgbm9kZS5jaGlsZHJlbk5vZGVzLmxlbmd0aCkge1xyXG4gICAgICAgIHRyZWVOb2RlID0gdGhpcy5kZWVwU2VhcmNoVHJlZU5vZGUoaWRlbnRpZmllciwgbm9kZS5jaGlsZHJlbk5vZGVzKTtcclxuICAgICAgICBpZiAodHJlZU5vZGUpIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRyZWVOb2RlO1xyXG4gIH1cclxuXHJcbiAgZmluZFNlbGVjdGVkKG5vZGVzOiBTbWFydFRyZWVOb2RlW10pOiB2b2lkIHtcclxuICAgIHJldHVybiBub2Rlcy5mb3JFYWNoKChub2RlOiBTbWFydFRyZWVOb2RlKSA9PiB7XHJcbiAgICAgIGlmIChub2RlLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBub2RlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkcmVuTm9kZXMgJiYgbm9kZS5jaGlsZHJlbk5vZGVzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRTZWxlY3RlZChub2RlLmNoaWxkcmVuTm9kZXMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUJ1dHRvbnNGb3JUcmVlTm9kZXMobm9kZXM6IFNtYXJ0VHJlZU5vZGVbXSk6IFNtYXJ0VHJlZU5vZGVbXSB7XHJcbiAgICBub2Rlcy5tYXAoKG5vZGU6IFNtYXJ0VHJlZU5vZGUpID0+IHtcclxuICAgICAgbm9kZS5idXR0b24gPSBub2RlLmFjdGlvbnM/Lmxlbmd0aFxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICB0eXBlOiBTbWFydFRyZWVOb2RlQnV0dG9uVHlwZS5NRU5VLFxyXG4gICAgICAgICAgICBpY29uOiAnbW9yZV92ZXJ0JyxcclxuICAgICAgICAgICAgbWVudUl0ZW1CdXR0b25zOiBub2RlLmFjdGlvbnMubWFwKChhY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VHJlZU5vZGVCdXR0b25UeXBlLk5PUk1BTCxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsQnlBY3Rpb24oYWN0aW9uKSxcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrOiB0aGlzLmRvQWN0aW9uLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBhcmdzOiBbYWN0aW9uLCBub2RlLmlkZW50aWZpZXJdLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICBub2RlLmljb24gPSAnRm9sZGVycyc7XHJcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuTm9kZXMpIHtcclxuICAgICAgICBub2RlLmNoaWxkcmVuTm9kZXMgPSB0aGlzLmNyZWF0ZUJ1dHRvbnNGb3JUcmVlTm9kZXMobm9kZS5jaGlsZHJlbk5vZGVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbm9kZXM7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkb0FjdGlvbihhcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IHVpQWN0aW9uOiBVaUFjdGlvbiA9IGFyZ3NbMF07XHJcbiAgICBsZXQgbm9kZVV1aWQ6IHN0cmluZyA9IGFyZ3NbMV07XHJcblxyXG4gICAgaWYgKHVpQWN0aW9uLnBhcmFtcykge1xyXG4gICAgICB1aUFjdGlvbi5wYXJhbXNbJ25vZGVVdWlkJ10gPSBub2RlVXVpZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVpQWN0aW9uLnBhcmFtcyA9IHtcclxuICAgICAgICBub2RlVXVpZDogbm9kZVV1aWQsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHVpQWN0aW9uTW9kZWw6IFVpQWN0aW9uTW9kZWwgPSB7XHJcbiAgICAgIHNlcnZpY2VUb1VzZTogdGhpcyxcclxuICAgICAgdWlBY3Rpb24sXHJcbiAgICB9O1xyXG4gICAgdGhpcy51aUFjdGlvblNlcnZpY2UudWlBY3Rpb25Nb2RlbCA9IHVpQWN0aW9uTW9kZWw7XHJcbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZS5leGVjdXRlKHVpQWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRBbGxOb2Rlcyhub2RlczogU21hcnRUcmVlTm9kZVtdKTogU21hcnRUcmVlTm9kZVtdIHtcclxuICAgIHJldHVybiBub2Rlcy5mbGF0TWFwKChuKSA9PiBbbiwgLi4udGhpcy5nZXRBbGxOb2RlcyhuLmNoaWxkcmVuTm9kZXMpXSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYXN5bmMgY2FjaGVBY3Rpb25EZXNjaXB0b3JzKG5vZGVzOiBTbWFydFRyZWVOb2RlW10pIHtcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICBub2Rlcy5tYXAoYXN5bmMgKG5vZGU6IFNtYXJ0VHJlZU5vZGUpID0+IHtcclxuICAgICAgICBsZXQgbmV3VWlBY3Rpb25zID0gbm9kZS5hY3Rpb25zPy5maWx0ZXIoXHJcbiAgICAgICAgICAodWlBY3Rpb246IFVpQWN0aW9uKSA9PiAhdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLmdldCh1aUFjdGlvbi5jb2RlISlcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghbmV3VWlBY3Rpb25zKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgIG5ld1VpQWN0aW9ucyEubWFwKGFzeW5jICh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuZ2V0KHVpQWN0aW9uLmNvZGUhKSkge1xyXG4gICAgICAgICAgICAgIGxldCBkZXNjcmlwdG9yID0gYXdhaXQgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLmdldEFjdGlvbkRlc2NyaXB0b3IodWlBY3Rpb24pO1xyXG4gICAgICAgICAgICAgIHRoaXMudWlBY3Rpb25EZXNjcmlwdG9ycy5zZXQodWlBY3Rpb24uY29kZSEsIGRlc2NyaXB0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRMYWJlbEJ5QWN0aW9uKGFjdGlvbjogVWlBY3Rpb24pOiBzdHJpbmcge1xyXG4gICAgbGV0IGRlc2MgPSB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuZ2V0KGFjdGlvbi5jb2RlISk7XHJcbiAgICByZXR1cm4gZGVzYyEudGl0bGU7XHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIFVzZVVpQWN0aW9uXHJcbiAgZ2V0QWRkaXRpb25hbFBhcmFtcyh1aUFjdGlvbjogVWlBY3Rpb24pOiBVaUFjdGlvbkFkZGl0aW9uYWxQYXJhbXMge1xyXG4gICAgaWYgKHVpQWN0aW9uLnBhcmFtcyAmJiB1aUFjdGlvbi5wYXJhbXNbJ25vZGVVdWlkJ10pIHtcclxuICAgICAgbGV0IG5vZGVVdWlkID0gdWlBY3Rpb24ucGFyYW1zIVsnbm9kZVV1aWQnXTtcclxuXHJcbiAgICAgIGxldCBub2RlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgICBpZiAodWlBY3Rpb24uY29kZSA9PT0gJ1JFTkFNRScpIHtcclxuICAgICAgICBub2RlTmFtZSA9IHRoaXMuZGVlcFNlYXJjaFRyZWVOb2RlKG5vZGVVdWlkLCB0aGlzLnRyZWVGcm9tQmFja2VuZCEpPy5jYXB0aW9uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGZvclRleHRBcmVhOiAnJyxcclxuICAgICAgICBmb3JUZXh0RmllbGQ6IG5vZGVOYW1lID8gbm9kZU5hbWUgOiAnJyxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmb3JUZXh0QXJlYTogJycsXHJcbiAgICAgIGZvclRleHRGaWVsZDogJycsXHJcbiAgICB9O1xyXG4gIH1cclxuICBnZXRNb2RlbCgpIHtcclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHBlcmZvcm1VaUFjdGlvblJlcXVlc3QodWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ25vZGVVdWlkJ10pIHtcclxuICAgICAgYXdhaXQgdGhpcy5wZXJmb3JtTm9kZVVpQWN0aW9uUmVxdWVzdCh1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXdhaXQgdGhpcy5wZXJmb3JtTWFpblVpQWN0aW9uUmVxdWVzdCh1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQuZ2V0QW5kU3luY1ZpZXdDb250ZXh0KCk7XHJcblxyXG4gICAgdGhpcy5zeW5jVHJlZSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcGVyZm9ybU5vZGVVaUFjdGlvblJlcXVlc3QodWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgbGV0IG5vZGVJZCA9IHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ25vZGVVdWlkJ107XHJcbiAgICBkZWxldGUgdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snbm9kZVV1aWQnXTtcclxuXHJcbiAgICBsZXQgdmlld1V1aWQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFV1aWRPZlBhZ2UodGhpcy5wYWdlTmFtZSk7XHJcblxyXG4gICAgdGhpcy50cmVlRnJvbUJhY2tlbmQgPSBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZShcclxuICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLnBlcmZvcm1BY3Rpb24yKHZpZXdVdWlkLCB0aGlzLnRyZWVJZCEsIG5vZGVJZCwgdWlBY3Rpb25SZXF1ZXN0KS50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICB9XHJcbiAgYXN5bmMgcGVyZm9ybU1haW5VaUFjdGlvblJlcXVlc3QodWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3QpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgbGV0IHZpZXdVdWlkID0gdGhpcy52aWV3Q29udGV4dC5nZXRVdWlkT2ZQYWdlKHRoaXMucGFnZU5hbWUpO1xyXG5cclxuICAgIHRoaXMudHJlZUZyb21CYWNrZW5kID0gYXdhaXQgdGhpcy52aWV3Q29udGV4dC5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2UoXHJcbiAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5wZXJmb3JtTWFpbkFjdGlvbjIodmlld1V1aWQsIHRoaXMudHJlZUlkISwgdWlBY3Rpb25SZXF1ZXN0KS50b1Byb21pc2UoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNwZWNpZmljRGVtYW5kc0FzeW5jaHJvbm91c2x5KFxyXG4gICAgdWlBY3Rpb246IFVpQWN0aW9uLFxyXG4gICAgdWlBY3Rpb25SZXF1ZXN0OiBVaUFjdGlvblJlcXVlc3RcclxuICApOiBQcm9taXNlPFVpQWN0aW9uU3BlY2lmaWNEZW1hbmRSZXNwb25zZT4ge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xyXG4gIH1cclxuICAvLyAjZW5kcmVnaW9uXHJcbn1cclxuIl19