tnx-shared 5.2.20 → 5.2.21

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 (71) hide show
  1. package/app-context/component-context.service.d.ts.map +1 -1
  2. package/classes/base/component-base.d.ts +1 -1
  3. package/classes/public-function.d.ts +3 -2
  4. package/classes/public-function.d.ts.map +1 -1
  5. package/components/chat/chat-box/chat-box.component.d.ts +1 -1
  6. package/components/dropdown/services/dropdown.service.d.ts.map +1 -1
  7. package/components/file-explorer/services/file-explorer-new.service.d.ts.map +1 -1
  8. package/components/file-explorer/services/file-explorer.service.d.ts.map +1 -1
  9. package/components/file-explorer/services/file-version.service.d.ts.map +1 -1
  10. package/components/file-explorer/services/folder.service.d.ts.map +1 -1
  11. package/components/file-explorer/services/ky-so-sim-signPDF.service.d.ts.map +1 -1
  12. package/components/file-explorer/services/my-drive.service.d.ts.map +1 -1
  13. package/components/tn-app-help/services/path-name.service.d.ts.map +1 -1
  14. package/congviec/congviec/services/congviec-dinhkem.service.d.ts.map +1 -1
  15. package/esm2020/app-context/component-context.service.mjs +4 -5
  16. package/esm2020/classes/base/component-base.mjs +2 -2
  17. package/esm2020/components/common-app-component/common-app-component.mjs +2 -2
  18. package/esm2020/components/crud/crud-form/crud-form.component.mjs +1 -1
  19. package/esm2020/components/dropdown/services/dropdown.service.mjs +5 -5
  20. package/esm2020/components/file-explorer/file-ky-so-sim/file-ky-so-sim.component.mjs +1 -1
  21. package/esm2020/components/file-explorer/file-manager/file-manager.component.mjs +2 -2
  22. package/esm2020/components/file-explorer/file-viewer/file-viewer.component.mjs +3 -3
  23. package/esm2020/components/file-explorer/services/file-explorer-new.service.mjs +39 -40
  24. package/esm2020/components/file-explorer/services/file-explorer.service.mjs +48 -51
  25. package/esm2020/components/file-explorer/services/file-version.service.mjs +5 -4
  26. package/esm2020/components/file-explorer/services/folder.service.mjs +3 -3
  27. package/esm2020/components/file-explorer/services/ky-so-sim-signPDF.service.mjs +3 -2
  28. package/esm2020/components/file-explorer/services/my-drive.service.mjs +34 -34
  29. package/esm2020/components/mask/mask.component.mjs +1 -1
  30. package/esm2020/components/number-picker-range/number-picker-range.component.mjs +1 -1
  31. package/esm2020/components/tn-app-help/services/path-name.service.mjs +4 -3
  32. package/esm2020/components/tn-tinymce/tn-tinymce.component.mjs +2 -2
  33. package/esm2020/components/user-picker/user-picker-box/user-picker-box.component.mjs +1 -1
  34. package/esm2020/components/workflow/workflow-history-new/workflow-history-new.component.mjs +1 -1
  35. package/esm2020/congviec/cauhinh-workflow/cauhinh-workflow.component.mjs +1 -1
  36. package/esm2020/congviec/congviec/services/congviec-dinhkem.service.mjs +5 -4
  37. package/esm2020/services/article.service.mjs +10 -13
  38. package/esm2020/services/base.service.mjs +36 -41
  39. package/esm2020/services/custom-router.service.mjs +4 -5
  40. package/esm2020/services/entity-picker.service.mjs +4 -3
  41. package/esm2020/services/file-object-v4.service.mjs +5 -7
  42. package/esm2020/services/high-performance.service.mjs +4 -3
  43. package/esm2020/services/master-data.service.mjs +23 -30
  44. package/esm2020/services/organization.service.mjs +18 -23
  45. package/esm2020/services/template-v4.service.mjs +3 -2
  46. package/esm2020/services/template.service.mjs +19 -27
  47. package/esm2020/services/templateinstance.service.mjs +22 -31
  48. package/esm2020/services/tn-client.service.mjs +3 -3
  49. package/esm2020/services/unique-number.service.mjs +4 -3
  50. package/esm2020/services/user-v5.service.mjs +31 -39
  51. package/esm2020/services/user.service.mjs +32 -40
  52. package/fesm2015/tnx-shared.mjs +334 -409
  53. package/fesm2015/tnx-shared.mjs.map +1 -1
  54. package/fesm2020/tnx-shared.mjs +334 -409
  55. package/fesm2020/tnx-shared.mjs.map +1 -1
  56. package/package.json +2 -2
  57. package/services/article.service.d.ts.map +1 -1
  58. package/services/base.service.d.ts.map +1 -1
  59. package/services/common.service.d.ts +2 -2
  60. package/services/custom-router.service.d.ts.map +1 -1
  61. package/services/entity-picker.service.d.ts.map +1 -1
  62. package/services/file-object-v4.service.d.ts.map +1 -1
  63. package/services/high-performance.service.d.ts.map +1 -1
  64. package/services/master-data.service.d.ts.map +1 -1
  65. package/services/organization.service.d.ts.map +1 -1
  66. package/services/template-v4.service.d.ts.map +1 -1
  67. package/services/template.service.d.ts.map +1 -1
  68. package/services/templateinstance.service.d.ts.map +1 -1
  69. package/services/unique-number.service.d.ts.map +1 -1
  70. package/services/user-v5.service.d.ts.map +1 -1
  71. package/services/user.service.d.ts.map +1 -1
@@ -25,7 +25,7 @@ export class CustomRouterService {
25
25
  getLatestFragment() {
26
26
  return new Promise((resolve) => {
27
27
  if (this._unsubscribeAll) {
28
- this._unsubscribeAll.next();
28
+ this._unsubscribeAll.next(1);
29
29
  this._unsubscribeAll.complete();
30
30
  }
31
31
  this._activatedRoute.fragment
@@ -38,7 +38,7 @@ export class CustomRouterService {
38
38
  });
39
39
  }
40
40
  destroy() {
41
- this._unsubscribeAll.next();
41
+ this._unsubscribeAll.next(1);
42
42
  this._unsubscribeAll.complete();
43
43
  }
44
44
  getFragmentObject() {
@@ -203,9 +203,8 @@ export class CustomRouterService {
203
203
  }
204
204
  tryParse(v) {
205
205
  let n = null;
206
- if (v === null || v === undefined) {
206
+ if (v === null || v === undefined)
207
207
  return null;
208
- }
209
208
  if (v.indexOf('-') > 0) {
210
209
  if (v.indexOf('T') > 0) {
211
210
  n = new Date(v);
@@ -287,4 +286,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
287
286
  providedIn: 'root'
288
287
  }]
289
288
  }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.Location }]; } });
290
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXJvdXRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvc2VydmljZXMvY3VzdG9tLXJvdXRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFLM0MsTUFBTSxPQUFPLG1CQUFtQjtJQVE1QixZQUNZLGVBQStCLEVBQy9CLE9BQWUsRUFDZixTQUFtQjtRQUZuQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFUL0Isb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQzdCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUV6QixtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFDcEMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBTTlCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXpCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTTthQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUNyQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsT0FB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QUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21Sb3V0ZXJTZXJ2aWNlIHtcclxuXHJcbiAgICBfdW5zdWJzY3JpYmVBbGwgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICBwcml2YXRlIGZyYWdtZW50cyA9IDxhbnk+e307XHJcbiAgICBwcml2YXRlIHBhcmFtcyA9IDxhbnk+e307XHJcblxyXG4gICAgZnJhZ21lbnRMb2FkZWQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICBwYXJhbXNMb2FkZWQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBfbG9jYXRpb246IExvY2F0aW9uXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmdldExhdGVzdEZyYWdtZW50KCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlLnBhcmFtc1xyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbXNMb2FkZWQubmV4dCh0aGlzLnBhcmFtcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExhdGVzdEZyYWdtZW50KCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl91bnN1YnNjcmliZUFsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwubmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5mcmFnbWVudFxyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZyYWdtZW50cykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRzID0gdGhpcy5jb252ZXJ0UGFyYW1zVG9Kc29uKGZyYWdtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmZyYWdtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcmFnbWVudExvYWRlZC5uZXh0KHRoaXMuZnJhZ21lbnRzKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwubmV4dCgpO1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RnJhZ21lbnRPYmplY3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhZ21lbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBhcmFtc09iamVjdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXM7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUGFyYW1zKHBhcmFtLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMucGFyYW1zW3BhcmFtXSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEZyYWdtZW50T2JqZWN0KGZyYWdtZW50OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmZyYWdtZW50cyA9IHRoaXMucGFyc2VGcmFnbWVudChmcmFnbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RnJhZ21lbnQoZnJhZ21lbnQpIHtcclxuICAgICAgICB0aGlzLmZyYWdtZW50cyA9IGZyYWdtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5DaGlsZFBhZ2UoY2hpbGRQYWdlUm91dGVyOiBzdHJpbmcsIG5hdkV4dHJhOiBOYXZpZ2F0aW9uRXh0cmFzID0ge30pIHtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW2NoaWxkUGFnZVJvdXRlcl0sIG5hdkV4dHJhKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuUGFnZShwYWdlUm91dGVyOiBzdHJpbmcsIG5hdkV4dHJhOiBOYXZpZ2F0aW9uRXh0cmFzID0ge30pIHtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW3BhZ2VSb3V0ZXJdLCBuYXZFeHRyYSk7XHJcbiAgICB9XHJcblxyXG4gICAgYmFja1RvUGFyZW50UGFnZSgpIHtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWycuLiddLCB7IHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5DcmVhdGVQYWdlKG5hdkV4dHJhOiBOYXZpZ2F0aW9uRXh0cmFzID0ge30pIHtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWycuL2NyZWF0ZSddLCBuYXZFeHRyYSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkVkaXRQYWdlKGlkOiBzdHJpbmcsIG5hdkV4dHJhOiBOYXZpZ2F0aW9uRXh0cmFzID0ge30pIHtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW2AuL2VkaXQvJHtpZH1gXSwgbmF2RXh0cmEpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlRnJhZ21lbnQoZnJhZ21lbnRTdHJpbmc6IHN0cmluZywgdXBkYXRlQ3VycmVudCA9IHRydWUpOiBhbnkge1xyXG4gICAgICAgIGlmICghZnJhZ21lbnRTdHJpbmcgfHwgZnJhZ21lbnRTdHJpbmcgPT09ICcnKSB7XHJcbiAgICAgICAgICAgIGlmICh1cGRhdGVDdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYWdtZW50cyA9IHRoaXMuY29udmVydFBhcmFtc1RvSnNvbihmcmFnbWVudFN0cmluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZyYWdtZW50U3RyaW5nLmluZGV4T2YoJyMnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGZyYWdtZW50U3RyaW5nID0gZnJhZ21lbnRTdHJpbmcuc3BsaXQoJyMnKVsxXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHVybFNlYXJjaFBhcmFtID0gZnJhZ21lbnRTdHJpbmcuc3BsaXQoJyYnKTtcclxuICAgICAgICBjb25zdCBvYmogPSB7fTtcclxuICAgICAgICBmb3IgKGNvbnN0IHBhcmFtU2VhcmNoIG9mIHVybFNlYXJjaFBhcmFtKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwYXJhbVNlYXJjaC5zcGxpdCgnPScpO1xyXG4gICAgICAgICAgICBvYmpbaXRlbVswXV0gPSBpdGVtWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHVwZGF0ZUN1cnJlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudHMgPSB0aGlzLmNvbnZlcnRQYXJhbXNUb0pzb24oZnJhZ21lbnRTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGcmFnbWVudChyb3V0ZXJVcmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHJvdXRlclVybC5pbmRleE9mKCcjJykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByb3V0ZXJVcmwuc3BsaXQoJyMnKVsxXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGcmFnbWVudFZhbHVlKGtleTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mcmFnbWVudHNba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBhcHBlbmRGcmFnbWVudChmcmFnbWVudDogc3RyaW5nLCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgZnJhZyA9IHRoaXMucGFyc2VGcmFnbWVudChmcmFnbWVudCk7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIGZyYWdba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBmcmFnW2tleV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0SnNvblRvUGFyYW1zKGZyYWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGFwcGVuZEZyYWdtZW50T2JqZWN0KGZyYWdtZW50OiBbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gJycpIHtcclxuICAgICAgICAgICAgZnJhZ21lbnRba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBmcmFnbWVudFtrZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZnJhZ21lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRnJhZ21lbnRPYmplY3QoZnJhZ21lbnQ6IFtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgICAgIGRlbGV0ZSBmcmFnbWVudFtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUZyYWdtZW50KGZyYWdtZW50OiBzdHJpbmcsIGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBmcmFnID0gdGhpcy5wYXJzZUZyYWdtZW50KGZyYWdtZW50KTtcclxuXHJcbiAgICAgICAgaWYgKGZyYWdba2V5XSkge1xyXG4gICAgICAgICAgICBkZWxldGUgZnJhZ1trZXldO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydEpzb25Ub1BhcmFtcyhmcmFnKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVGcmFnbWVudChrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5mcmFnbWVudHNba2V5XSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUZyYWdtZW50VGhlblVwZGF0ZVVybFdpdGhvdXRGaXJlRXZlbnQoZGF0YTogYW55KSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBpbiBkYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRnJhZ21lbnQoZGF0YVtpbmRleF0ua2V5LCBkYXRhW2luZGV4XS52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVdpdGhvdXRGaXJlRXZlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVGcmFnbWVudFN0cihzdHJGcmFnbWVudDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5jb252ZXJ0UGFyYW1zVG9Kc29uKHN0ckZyYWdtZW50KTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVGcmFnbWVudChrZXksIG9ialtrZXldKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXJsV2l0aG91dFBhcmFtQW5kRnJhZ21lbnQoKSB7XHJcbiAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMuX3JvdXRlci5wYXJzZVVybCh0aGlzLl9yb3V0ZXIudXJsKTtcclxuICAgICAgICB1cmxUcmVlLnF1ZXJ5UGFyYW1zID0ge307XHJcbiAgICAgICAgdXJsVHJlZS5mcmFnbWVudCA9ICcnO1xyXG4gICAgICAgIHJldHVybiAobmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikpLm9yaWdpbiArIHVybFRyZWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBmcmFnbWVudElzQ2hpbGRPZihmcmFnbWVudDogc3RyaW5nLCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGZyYWdPYmogPSB0aGlzLnBhcnNlRnJhZ21lbnQoZnJhZ21lbnQpO1xyXG4gICAgICAgIGlmIChmcmFnT2JqW2tleV0gPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVVcmwob3B0aW9ucz86IHsgZnJhZ21lbnQ/OiBzdHJpbmcsIHF1ZXJ5UHJhbXM/OiBhbnk7IH0pIHtcclxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgICAgICAgY29uc3QgZnJhZ21lbnRPYmogPSBvcHRpb25zLmZyYWdtZW50IHx8IHRoaXMuY29udmVydEpzb25Ub1BhcmFtcyh0aGlzLmZyYWdtZW50cyk7XHJcblxyXG4gICAgICAgIGlmICghZnJhZ21lbnRPYmopIHtcclxuICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFt0aGlzLl9yb3V0ZXIudXJsXSwgeyByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSwgcXVlcnlQYXJhbXM6IG9wdGlvbnMucXVlcnlQcmFtcyB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW3RoaXMuX3JvdXRlci51cmxdLCB7IHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlLCBmcmFnbWVudDogZnJhZ21lbnRPYmosIHF1ZXJ5UGFyYW1zOiBvcHRpb25zLnF1ZXJ5UHJhbXMgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVdpdGhvdXRGaXJlRXZlbnQob3B0aW9ucz86IHsgZnJhZ21lbnQ/OiBzdHJpbmcsIHF1ZXJ5UHJhbXM/OiBhbnksIHBhcmFtcz86IGFueSwgaXNOb3RSZXBsYWNlPzogYm9vbGVhbjsgfSkge1xyXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICAgICAgICBjb25zdCBmcmFnbWVudE9iaiA9IG9wdGlvbnMuZnJhZ21lbnQgfHwgdGhpcy5jb252ZXJ0SnNvblRvUGFyYW1zKHRoaXMuZnJhZ21lbnRzKTtcclxuXHJcbiAgICAgICAgbGV0IHVybFRyZWUgPSB0aGlzLl9yb3V0ZXIuY3JlYXRlVXJsVHJlZShbXSwge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogb3B0aW9ucy5xdWVyeVByYW1zLFxyXG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICAgICAgZnJhZ21lbnQ6IGZyYWdtZW50T2JqLFxyXG4gICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICghZnJhZ21lbnRPYmopIHtcclxuICAgICAgICAgICAgdXJsVHJlZSA9IHRoaXMuX3JvdXRlci5jcmVhdGVVcmxUcmVlKFtdLCA8TmF2aWdhdGlvbkV4dHJhcz57XHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogb3B0aW9ucy5xdWVyeVByYW1zLFxyXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2U6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHN0YXRlID0gdXJsVHJlZS50b1N0cmluZygpO1xyXG4gICAgICAgIHN0YXRlID0gc3RhdGUucmVwbGFjZShsb2NhdGlvbi5vcmlnaW4sICcnKTtcclxuICAgICAgICB0aGlzLl9sb2NhdGlvbi5yZXBsYWNlU3RhdGUoc3RhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnZlcnRKc29uVG9QYXJhbXMoanNvbikge1xyXG4gICAgICAgIGxldCBzID0gJycsIHY7XHJcbiAgICAgICAgZm9yIChjb25zdCBwIGluIGpzb24pIHtcclxuICAgICAgICAgICAgdiA9IGpzb25bcF07XHJcbiAgICAgICAgICAgIGlmICh2ICE9PSBudWxsICYmIHYgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBzICs9ICcmJyArIHAgKyAnPScgKyBlbmNvZGVVUkkoKHYgaW5zdGFuY2VvZiBPYmplY3QpID8gKHYgaW5zdGFuY2VvZiBEYXRlKSA/IHYudG9JU09TdHJpbmcoKSA6IEpTT04uc3RyaW5naWZ5KHYpIDogdik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeVBhcnNlKHYpIHtcclxuICAgICAgICBsZXQgbiA9IG51bGw7XHJcbiAgICAgICAgaWYgKHYgPT09IG51bGwgfHwgdiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgIGlmICh2LmluZGV4T2YoJy0nKSA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHYuaW5kZXhPZignVCcpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgbiA9IG5ldyBEYXRlKHYpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSB2LnNwbGl0KCctJyk7XHJcbiAgICAgICAgICAgICAgICBuID0gbmV3IERhdGUocGFydHNbMF0sIHBhcnNlSW50KHBhcnRzWzFdKSAtIDEsIHBhcnRzWzJdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEobiBpbnN0YW5jZW9mIERhdGUpIHx8ICFuLmdldFRpbWUgfHwgaXNOYU4obi5nZXRUaW1lKCkpKSB7XHJcbiAgICAgICAgICAgIG4gPSBwYXJzZUZsb2F0KHYpO1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4obikgfHwgbi50b1N0cmluZygpICE9PSB2KSB7XHJcbiAgICAgICAgICAgICAgICBuID0gcGFyc2VJbnQodik7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obikgfHwgbi50b1N0cmluZygpICE9PSB2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodi50b0xvd2VyQ2FzZSgpID09PSAnZmFsc2UnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IEpTT04ucGFyc2Uodik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShuIGluc3RhbmNlb2YgT2JqZWN0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydFBhcmFtc1RvSnNvbihzUGFyYW1zKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XHJcblxyXG4gICAgICAgIGlmIChzUGFyYW1zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHNQYXJhbXMuc3BsaXQoJyYnKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGt2ID0gcGFyYW1zW2ldLnNwbGl0KCc9Jyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoa3ZbMF0gIT09IG51bGwgJiYga3ZbMF0gIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2t2WzBdXSA9IHRoaXMudHJ5UGFyc2UoZGVjb2RlVVJJKGt2WzFdKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJGcmFnbWVudEFuZFBhcmFtcygpIHtcclxuICAgICAgICBpZiAobG9jYXRpb24uaHJlZi5pbmRleE9mKCcjJykgPiAtMSB8fCBsb2NhdGlvbi5ocmVmLmluZGV4T2YoJz8nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IGxvY2F0aW9uLmhyZWYuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdO1xyXG4gICAgICAgICAgICBzdGF0ZSA9IHN0YXRlLnJlcGxhY2UobG9jYXRpb24ub3JpZ2luLCAnJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvY2F0aW9uLnJlcGxhY2VTdGF0ZShzdGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhZ21lbnRzID0gPGFueT57fTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJBbGxGcmFnbWVudCgpIHtcclxuICAgICAgICBpZiAobG9jYXRpb24uaHJlZi5pbmRleE9mKCcjJykgPiAtMSkge1xyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBsb2NhdGlvbi5ocmVmLnNwbGl0KCcjJylbMF07XHJcbiAgICAgICAgICAgIHN0YXRlID0gc3RhdGUucmVwbGFjZShsb2NhdGlvbi5vcmlnaW4sICcnKTtcclxuICAgICAgICAgICAgdGhpcy5fbG9jYXRpb24ucmVwbGFjZVN0YXRlKHN0YXRlKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudHMgPSA8YW55Pnt9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGVja0hhdmVGcmFnbWVudChrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mcmFnbWVudHNba2V5XSAhPT0gbnVsbCAmJiB0aGlzLmZyYWdtZW50c1trZXldICE9PSB1bmRlZmluZWQgJiYgdGhpcy5mcmFnbWVudHNba2V5XSAhPT0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcmVsb2FkUGFnZSgpIHtcclxuICAgICAgICB0aGlzLmNsZWFyQWxsRnJhZ21lbnQoKTtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICB9XHJcbn1cclxuIl19
289
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXJvdXRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvc2VydmljZXMvY3VzdG9tLXJvdXRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFLM0MsTUFBTSxPQUFPLG1CQUFtQjtJQVE1QixZQUNZLGVBQStCLEVBQy9CLE9BQWUsRUFDZixTQUFtQjtRQUZuQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFUL0Isb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQzdCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUV6QixtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFDcEMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBTTlCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXpCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTTthQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUNyQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsT0FB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Q1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRXh0cmFzLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tUm91dGVyU2VydmljZSB7XHJcblxyXG4gICAgX3Vuc3Vic2NyaWJlQWxsID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gICAgcHJpdmF0ZSBmcmFnbWVudHMgPSA8YW55Pnt9O1xyXG4gICAgcHJpdmF0ZSBwYXJhbXMgPSA8YW55Pnt9O1xyXG5cclxuICAgIGZyYWdtZW50TG9hZGVkID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gICAgcGFyYW1zTG9hZGVkID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgX2xvY2F0aW9uOiBMb2NhdGlvblxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5nZXRMYXRlc3RGcmFnbWVudCgpO1xyXG5cclxuICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5wYXJhbXNcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zTG9hZGVkLm5leHQodGhpcy5wYXJhbXMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMYXRlc3RGcmFnbWVudCgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fdW5zdWJzY3JpYmVBbGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQoMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlLmZyYWdtZW50XHJcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZnJhZ21lbnRzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcmFnbWVudHMgPSB0aGlzLmNvbnZlcnRQYXJhbXNUb0pzb24oZnJhZ21lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuZnJhZ21lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyYWdtZW50TG9hZGVkLm5leHQodGhpcy5mcmFnbWVudHMpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KDEpO1xyXG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RnJhZ21lbnRPYmplY3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhZ21lbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBhcmFtc09iamVjdCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXM7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUGFyYW1zKHBhcmFtLCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMucGFyYW1zW3BhcmFtXSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEZyYWdtZW50T2JqZWN0KGZyYWdtZW50OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmZyYWdtZW50cyA9IHRoaXMucGFyc2VGcmFnbWVudChmcmFnbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RnJhZ21lbnQoZnJhZ21lbnQpIHtcclxuICAgICAgICB0aGlzLmZyYWdtZW50cyA9IGZyYWdtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5DaGlsZFBhZ2UoY2hpbGRQYWdlUm91dGVyOiBzdHJpbmcsIG5hdkV4dHJhOiBOYXZpZ2F0aW9uRXh0cmFzID0ge30pIHtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW2NoaWxkUGFnZVJvdXRlcl0sIG5hdkV4dHJhKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuUGFnZShwYWdlUm91dGVyOiBzdHJpbmcsIG5hdkV4dHJhOiBOYXZpZ2F0aW9uRXh0cmFzID0ge30pIHtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW3BhZ2VSb3V0ZXJdLCBuYXZFeHRyYSk7XHJcbiAgICB9XHJcblxyXG4gICAgYmFja1RvUGFyZW50UGFnZSgpIHtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWycuLiddLCB7IHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5DcmVhdGVQYWdlKG5hdkV4dHJhOiBOYXZpZ2F0aW9uRXh0cmFzID0ge30pIHtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoWycuL2NyZWF0ZSddLCBuYXZFeHRyYSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkVkaXRQYWdlKGlkOiBzdHJpbmcsIG5hdkV4dHJhOiBOYXZpZ2F0aW9uRXh0cmFzID0ge30pIHtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW2AuL2VkaXQvJHtpZH1gXSwgbmF2RXh0cmEpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlRnJhZ21lbnQoZnJhZ21lbnRTdHJpbmc6IHN0cmluZywgdXBkYXRlQ3VycmVudCA9IHRydWUpOiBhbnkge1xyXG4gICAgICAgIGlmICghZnJhZ21lbnRTdHJpbmcgfHwgZnJhZ21lbnRTdHJpbmcgPT09ICcnKSB7XHJcbiAgICAgICAgICAgIGlmICh1cGRhdGVDdXJyZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYWdtZW50cyA9IHRoaXMuY29udmVydFBhcmFtc1RvSnNvbihmcmFnbWVudFN0cmluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZyYWdtZW50U3RyaW5nLmluZGV4T2YoJyMnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGZyYWdtZW50U3RyaW5nID0gZnJhZ21lbnRTdHJpbmcuc3BsaXQoJyMnKVsxXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHVybFNlYXJjaFBhcmFtID0gZnJhZ21lbnRTdHJpbmcuc3BsaXQoJyYnKTtcclxuICAgICAgICBjb25zdCBvYmogPSB7fTtcclxuICAgICAgICBmb3IgKGNvbnN0IHBhcmFtU2VhcmNoIG9mIHVybFNlYXJjaFBhcmFtKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwYXJhbVNlYXJjaC5zcGxpdCgnPScpO1xyXG4gICAgICAgICAgICBvYmpbaXRlbVswXV0gPSBpdGVtWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHVwZGF0ZUN1cnJlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudHMgPSB0aGlzLmNvbnZlcnRQYXJhbXNUb0pzb24oZnJhZ21lbnRTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGcmFnbWVudChyb3V0ZXJVcmw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHJvdXRlclVybC5pbmRleE9mKCcjJykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByb3V0ZXJVcmwuc3BsaXQoJyMnKVsxXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGcmFnbWVudFZhbHVlKGtleTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mcmFnbWVudHNba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBhcHBlbmRGcmFnbWVudChmcmFnbWVudDogc3RyaW5nLCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgZnJhZyA9IHRoaXMucGFyc2VGcmFnbWVudChmcmFnbWVudCk7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIGZyYWdba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGVsZXRlIGZyYWdba2V5XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRKc29uVG9QYXJhbXMoZnJhZyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXBwZW5kRnJhZ21lbnRPYmplY3QoZnJhZ21lbnQ6IFtdLCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSAnJykge1xyXG4gICAgICAgICAgICBmcmFnbWVudFtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkZWxldGUgZnJhZ21lbnRba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZyYWdtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUZyYWdtZW50T2JqZWN0KGZyYWdtZW50OiBbXSwga2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBkZWxldGUgZnJhZ21lbnRba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVGcmFnbWVudChmcmFnbWVudDogc3RyaW5nLCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgZnJhZyA9IHRoaXMucGFyc2VGcmFnbWVudChmcmFnbWVudCk7XHJcblxyXG4gICAgICAgIGlmIChmcmFnW2tleV0pIHtcclxuICAgICAgICAgICAgZGVsZXRlIGZyYWdba2V5XTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRKc29uVG9QYXJhbXMoZnJhZyk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlRnJhZ21lbnQoa2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuZnJhZ21lbnRzW2tleV0gPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVGcmFnbWVudFRoZW5VcGRhdGVVcmxXaXRob3V0RmlyZUV2ZW50KGRhdGE6IGFueSkge1xyXG4gICAgICAgIGZvciAoY29uc3QgaW5kZXggaW4gZGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZyYWdtZW50KGRhdGFbaW5kZXhdLmtleSwgZGF0YVtpbmRleF0udmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVXaXRob3V0RmlyZUV2ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlRnJhZ21lbnRTdHIoc3RyRnJhZ21lbnQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IHRoaXMuY29udmVydFBhcmFtc1RvSnNvbihzdHJGcmFnbWVudCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRnJhZ21lbnQoa2V5LCBvYmpba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFVybFdpdGhvdXRQYXJhbUFuZEZyYWdtZW50KCkge1xyXG4gICAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLl9yb3V0ZXIucGFyc2VVcmwodGhpcy5fcm91dGVyLnVybCk7XHJcbiAgICAgICAgdXJsVHJlZS5xdWVyeVBhcmFtcyA9IHt9O1xyXG4gICAgICAgIHVybFRyZWUuZnJhZ21lbnQgPSAnJztcclxuICAgICAgICByZXR1cm4gKG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpKS5vcmlnaW4gKyB1cmxUcmVlLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnJhZ21lbnRJc0NoaWxkT2YoZnJhZ21lbnQ6IHN0cmluZywga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBmcmFnT2JqID0gdGhpcy5wYXJzZUZyYWdtZW50KGZyYWdtZW50KTtcclxuICAgICAgICBpZiAoZnJhZ09ialtrZXldID09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVVcmwob3B0aW9ucz86IHsgZnJhZ21lbnQ/OiBzdHJpbmcsIHF1ZXJ5UHJhbXM/OiBhbnk7IH0pIHtcclxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgICAgICAgY29uc3QgZnJhZ21lbnRPYmogPSBvcHRpb25zLmZyYWdtZW50IHx8IHRoaXMuY29udmVydEpzb25Ub1BhcmFtcyh0aGlzLmZyYWdtZW50cyk7XHJcblxyXG4gICAgICAgIGlmICghZnJhZ21lbnRPYmopIHtcclxuICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFt0aGlzLl9yb3V0ZXIudXJsXSwgeyByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSwgcXVlcnlQYXJhbXM6IG9wdGlvbnMucXVlcnlQcmFtcyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbdGhpcy5fcm91dGVyLnVybF0sIHsgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsIGZyYWdtZW50OiBmcmFnbWVudE9iaiwgcXVlcnlQYXJhbXM6IG9wdGlvbnMucXVlcnlQcmFtcyB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlV2l0aG91dEZpcmVFdmVudChvcHRpb25zPzogeyBmcmFnbWVudD86IHN0cmluZywgcXVlcnlQcmFtcz86IGFueSwgcGFyYW1zPzogYW55LCBpc05vdFJlcGxhY2U/OiBib29sZWFuOyB9KSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gICAgICAgIGNvbnN0IGZyYWdtZW50T2JqID0gb3B0aW9ucy5mcmFnbWVudCB8fCB0aGlzLmNvbnZlcnRKc29uVG9QYXJhbXModGhpcy5mcmFnbWVudHMpO1xyXG5cclxuICAgICAgICBsZXQgdXJsVHJlZSA9IHRoaXMuX3JvdXRlci5jcmVhdGVVcmxUcmVlKFtdLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBvcHRpb25zLnF1ZXJ5UHJhbXMsXHJcbiAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICBmcmFnbWVudDogZnJhZ21lbnRPYmosXHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSdcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFmcmFnbWVudE9iaikge1xyXG4gICAgICAgICAgICB1cmxUcmVlID0gdGhpcy5fcm91dGVyLmNyZWF0ZVVybFRyZWUoW10sIDxOYXZpZ2F0aW9uRXh0cmFzPntcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBvcHRpb25zLnF1ZXJ5UHJhbXMsXHJcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICAgICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RhdGUgPSB1cmxUcmVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgc3RhdGUgPSBzdGF0ZS5yZXBsYWNlKGxvY2F0aW9uLm9yaWdpbiwgJycpO1xyXG4gICAgICAgIHRoaXMuX2xvY2F0aW9uLnJlcGxhY2VTdGF0ZShzdGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydEpzb25Ub1BhcmFtcyhqc29uKSB7XHJcbiAgICAgICAgbGV0IHMgPSAnJywgdjtcclxuICAgICAgICBmb3IgKGNvbnN0IHAgaW4ganNvbikge1xyXG4gICAgICAgICAgICB2ID0ganNvbltwXTtcclxuICAgICAgICAgICAgaWYgKHYgIT09IG51bGwgJiYgdiAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHMgKz0gJyYnICsgcCArICc9JyArIGVuY29kZVVSSSgodiBpbnN0YW5jZW9mIE9iamVjdCkgPyAodiBpbnN0YW5jZW9mIERhdGUpID8gdi50b0lTT1N0cmluZygpIDogSlNPTi5zdHJpbmdpZnkodikgOiB2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcy5zdWJzdHJpbmcoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5UGFyc2Uodikge1xyXG4gICAgICAgIGxldCBuID0gbnVsbDtcclxuICAgICAgICBpZiAodiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgICBpZiAodi5pbmRleE9mKCctJykgPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh2LmluZGV4T2YoJ1QnKSA+IDApIHtcclxuICAgICAgICAgICAgICAgIG4gPSBuZXcgRGF0ZSh2KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gdi5zcGxpdCgnLScpO1xyXG4gICAgICAgICAgICAgICAgbiA9IG5ldyBEYXRlKHBhcnRzWzBdLCBwYXJzZUludChwYXJ0c1sxXSkgLSAxLCBwYXJ0c1syXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghKG4gaW5zdGFuY2VvZiBEYXRlKSB8fCAhbi5nZXRUaW1lIHx8IGlzTmFOKG4uZ2V0VGltZSgpKSkge1xyXG4gICAgICAgICAgICBuID0gcGFyc2VGbG9hdCh2KTtcclxuICAgICAgICAgICAgaWYgKGlzTmFOKG4pIHx8IG4udG9TdHJpbmcoKSAhPT0gdikge1xyXG4gICAgICAgICAgICAgICAgbiA9IHBhcnNlSW50KHYpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKG4pIHx8IG4udG9TdHJpbmcoKSAhPT0gdikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2LnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodi50b0xvd2VyQ2FzZSgpID09PSAnZmFsc2UnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gSlNPTi5wYXJzZSh2KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG4gaW5zdGFuY2VvZiBPYmplY3QpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICByZXR1cm4gbjtcclxuICAgIH1cclxuXHJcbiAgICBjb252ZXJ0UGFyYW1zVG9Kc29uKHNQYXJhbXMpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcclxuXHJcbiAgICAgICAgaWYgKHNQYXJhbXMpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gc1BhcmFtcy5zcGxpdCgnJicpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qga3YgPSBwYXJhbXNbaV0uc3BsaXQoJz0nKTtcclxuICAgICAgICAgICAgICAgIGlmIChrdlswXSAhPT0gbnVsbCAmJiBrdlswXSAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRba3ZbMF1dID0gdGhpcy50cnlQYXJzZShkZWNvZGVVUkkoa3ZbMV0pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckZyYWdtZW50QW5kUGFyYW1zKCkge1xyXG4gICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLmluZGV4T2YoJyMnKSA+IC0xIHx8IGxvY2F0aW9uLmhyZWYuaW5kZXhPZignPycpID4gLTEpIHtcclxuICAgICAgICAgICAgbGV0IHN0YXRlID0gbG9jYXRpb24uaHJlZi5zcGxpdCgnPycpWzBdLnNwbGl0KCcjJylbMF07XHJcbiAgICAgICAgICAgIHN0YXRlID0gc3RhdGUucmVwbGFjZShsb2NhdGlvbi5vcmlnaW4sICcnKTtcclxuICAgICAgICAgICAgdGhpcy5fbG9jYXRpb24ucmVwbGFjZVN0YXRlKHN0YXRlKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFnbWVudHMgPSA8YW55Pnt9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckFsbEZyYWdtZW50KCkge1xyXG4gICAgICAgIGlmIChsb2NhdGlvbi5ocmVmLmluZGV4T2YoJyMnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IGxvY2F0aW9uLmhyZWYuc3BsaXQoJyMnKVswXTtcclxuICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZS5yZXBsYWNlKGxvY2F0aW9uLm9yaWdpbiwgJycpO1xyXG4gICAgICAgICAgICB0aGlzLl9sb2NhdGlvbi5yZXBsYWNlU3RhdGUoc3RhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYWdtZW50cyA9IDxhbnk+e307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSGF2ZUZyYWdtZW50KGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZyYWdtZW50c1trZXldICE9PSBudWxsICYmIHRoaXMuZnJhZ21lbnRzW2tleV0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmZyYWdtZW50c1trZXldICE9PSAnJztcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWRQYWdlKCkge1xyXG4gICAgICAgIHRoaXMuY2xlYXJBbGxGcmFnbWVudCgpO1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgIH1cclxufVxyXG4iXX0=