@talrace/ngx-noder 0.0.8 → 0.0.9

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 (93) hide show
  1. package/esm2022/lib/apart-components/add-link-dialog/add-link-dialog.component.mjs +15 -9
  2. package/esm2022/lib/apart-components/editor-toolbar/components/base-toolbar.component.mjs +8 -2
  3. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font/font.component.mjs +2 -2
  4. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font-size/font-size.component.mjs +3 -3
  5. package/esm2022/lib/apart-components/editor-toolbar/shared/toolbar-styles.helper.mjs +1 -8
  6. package/esm2022/lib/editor/components/edges/edge.component.mjs +2 -2
  7. package/esm2022/lib/editor/components/edges/edges.mjs +21 -2
  8. package/esm2022/lib/editor/components/image/input-handler/image-input.handler.mjs +18 -1
  9. package/esm2022/lib/editor/components/shared/services/custom-content.service.mjs +22 -56
  10. package/esm2022/lib/editor/components/table/components/table-cell.component.mjs +6 -6
  11. package/esm2022/lib/editor/components/table/components/table.component.mjs +13 -4
  12. package/esm2022/lib/editor/components/table/models/cell-data.model.mjs +3 -4
  13. package/esm2022/lib/editor/components/table/selection/table-selection.mjs +15 -5
  14. package/esm2022/lib/editor/content/constants/editor.const.mjs +9 -1
  15. package/esm2022/lib/editor/content/display-data/display-data.mjs +839 -0
  16. package/esm2022/lib/editor/content/display-data/general-properties.model.mjs +1 -1
  17. package/esm2022/lib/editor/content/display-data/models/paragraph-info.model.mjs +8 -0
  18. package/esm2022/lib/editor/content/display-data/paragraph.mjs +5 -1
  19. package/esm2022/lib/editor/content/display-data/text-line-info.mjs +2 -1
  20. package/esm2022/lib/editor/content/display-data/toolbar-styles.interface.mjs +1 -1
  21. package/esm2022/lib/editor/content/helpers/content-style.helper.mjs +12 -30
  22. package/esm2022/lib/editor/content/helpers/display-token.helper.mjs +62 -0
  23. package/esm2022/lib/editor/display/layers/cursor.layer.mjs +9 -8
  24. package/esm2022/lib/editor/display/layers/pages.layer.mjs +5 -5
  25. package/esm2022/lib/editor/display/layers/print.text.layer.mjs +2 -2
  26. package/esm2022/lib/editor/display/layers/selection.layer.mjs +15 -9
  27. package/esm2022/lib/editor/display/layers/text.layer.mjs +25 -27
  28. package/esm2022/lib/editor/display/print/print.renderer.mjs +8 -8
  29. package/esm2022/lib/editor/display/renderer.mjs +10 -10
  30. package/esm2022/lib/editor/display/rendering.helper.mjs +2 -4
  31. package/esm2022/lib/editor/display/virtual.renderer.mjs +5 -5
  32. package/esm2022/lib/editor/execution/edit.session.mjs +199 -755
  33. package/esm2022/lib/editor/execution/editor.mjs +116 -75
  34. package/esm2022/lib/editor/execution/helpers/format-style.helper.mjs +1 -33
  35. package/esm2022/lib/editor/execution/helpers/image.helpet.mjs +12 -0
  36. package/esm2022/lib/editor/execution/helpers/paragraph.helper.mjs +11 -3
  37. package/esm2022/lib/editor/execution/regulator.service.mjs +28 -20
  38. package/esm2022/lib/editor/gadgets/numbering/numbering-paragraph-style.model.mjs +13 -0
  39. package/esm2022/lib/editor/gadgets/numbering/numbering.helper.mjs +77 -10
  40. package/esm2022/lib/editor/gadgets/search/search.mjs +6 -6
  41. package/esm2022/lib/editor/interaction/editor.service.mjs +27 -6
  42. package/esm2022/lib/editor/interaction/input.handler.mjs +8 -5
  43. package/esm2022/lib/editor/interaction/mouse.handler.mjs +2 -1
  44. package/esm2022/lib/editor/operations/helpers/format-operations.helper.mjs +32 -2
  45. package/esm2022/lib/editor/operations/helpers/link-operations.helper.mjs +47 -12
  46. package/esm2022/lib/editor/operations/operations-helper.helper.mjs +13 -14
  47. package/esm2022/lib/editor/operations/save-commands.helper.mjs +2 -2
  48. package/esm2022/lib/editor/positioning/content.helper.mjs +15 -15
  49. package/esm2022/lib/editor/positioning/line-width.helper.mjs +5 -5
  50. package/esm2022/lib/editor/positioning/position.helper.mjs +34 -32
  51. package/esm2022/lib/editor/positioning/selection.mjs +42 -32
  52. package/esm2022/lib/editor/revision.helper.mjs +4 -3
  53. package/fesm2022/talrace-ngx-noder.mjs +3765 -3548
  54. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  55. package/lib/apart-components/add-link-dialog/add-link-dialog.component.d.ts +0 -1
  56. package/lib/apart-components/editor-toolbar/shared/toolbar-styles.helper.d.ts +0 -2
  57. package/lib/editor/components/image/input-handler/image-input.handler.d.ts +3 -0
  58. package/lib/editor/components/shared/services/custom-content.service.d.ts +3 -5
  59. package/lib/editor/components/table/components/table-cell.component.d.ts +1 -1
  60. package/lib/editor/components/table/components/table.component.d.ts +1 -0
  61. package/lib/editor/components/table/models/cell-data.model.d.ts +1 -1
  62. package/lib/editor/components/table/selection/table-selection.d.ts +2 -0
  63. package/lib/editor/content/constants/editor.const.d.ts +2 -0
  64. package/lib/editor/content/display-data/display-data.d.ts +103 -0
  65. package/lib/editor/content/display-data/general-properties.model.d.ts +5 -0
  66. package/lib/editor/content/display-data/models/paragraph-info.model.d.ts +9 -0
  67. package/lib/editor/content/display-data/paragraph.d.ts +1 -0
  68. package/lib/editor/content/display-data/text-line-info.d.ts +1 -0
  69. package/lib/editor/content/display-data/toolbar-styles.interface.d.ts +1 -1
  70. package/lib/editor/content/helpers/content-style.helper.d.ts +1 -2
  71. package/lib/editor/content/helpers/display-token.helper.d.ts +6 -0
  72. package/lib/editor/display/layers/text.layer.d.ts +1 -2
  73. package/lib/editor/display/print/print.renderer.d.ts +0 -2
  74. package/lib/editor/execution/edit.session.d.ts +11 -59
  75. package/lib/editor/execution/editor.d.ts +9 -6
  76. package/lib/editor/execution/helpers/format-style.helper.d.ts +0 -2
  77. package/lib/editor/execution/helpers/image.helpet.d.ts +4 -0
  78. package/lib/editor/execution/regulator.service.d.ts +1 -1
  79. package/lib/editor/gadgets/numbering/numbering-paragraph-style.model.d.ts +6 -0
  80. package/lib/editor/gadgets/numbering/numbering.helper.d.ts +10 -3
  81. package/lib/editor/interaction/editor.service.d.ts +12 -3
  82. package/lib/editor/operations/helpers/link-operations.helper.d.ts +5 -3
  83. package/lib/editor/positioning/content.helper.d.ts +6 -5
  84. package/lib/editor/positioning/position.helper.d.ts +3 -3
  85. package/lib/editor/positioning/selection.d.ts +3 -0
  86. package/package.json +1 -1
  87. package/src/_ngx-noder.theme.scss +31 -2
  88. package/esm2022/lib/editor/content/display-data/document.mjs +0 -134
  89. package/esm2022/lib/editor/content/display-data/pages.wrap.mjs +0 -226
  90. package/esm2022/lib/editor/execution/helpers/delta.helper.mjs +0 -18
  91. package/lib/editor/content/display-data/document.d.ts +0 -56
  92. package/lib/editor/content/display-data/pages.wrap.d.ts +0 -42
  93. package/lib/editor/execution/helpers/delta.helper.d.ts +0 -6
@@ -1,37 +1,5 @@
1
1
  import { ContentStyleHelper } from '../../content/helpers/content-style.helper';
2
- import { FormatModel } from '../../../models/generated/format.model';
3
- import { TextStyleModel } from '../../../models/generated/text-style.model';
4
2
  export class FormatStyleHelper {
5
- static applyTextStyles(formats, startIndex, endIndex, cursorStyle) {
6
- let firstIndex = formats.findIndex(x => x.endIndex >= startIndex);
7
- if (formats[firstIndex].startIndex < startIndex) {
8
- const model = new FormatModel({
9
- startIndex: formats[firstIndex].startIndex,
10
- endIndex: startIndex - 1,
11
- textStyle: new TextStyleModel(formats[firstIndex].textStyle)
12
- });
13
- formats[firstIndex].startIndex = startIndex;
14
- formats.splice(firstIndex, 0, model);
15
- firstIndex++;
16
- }
17
- let lastIndex = firstIndex;
18
- while (formats[lastIndex].endIndex < endIndex) {
19
- lastIndex++;
20
- }
21
- if (formats[lastIndex].endIndex > endIndex) {
22
- const model = new FormatModel({
23
- startIndex: endIndex + 1,
24
- endIndex: formats[lastIndex].endIndex,
25
- textStyle: new TextStyleModel(formats[lastIndex].textStyle)
26
- });
27
- formats[lastIndex].endIndex = endIndex;
28
- formats.splice(lastIndex + 1, 0, model);
29
- }
30
- for (let i = firstIndex; i <= lastIndex; i++) {
31
- Object.assign(formats[i].textStyle, cursorStyle);
32
- }
33
- this.mergeFormats(formats, startIndex - 1, endIndex + 1);
34
- }
35
3
  static getFormatsAtRange(formats, startIndex, endIndex) {
36
4
  const firstIndex = formats.findIndex(x => x.endIndex >= startIndex);
37
5
  let lastIndex = firstIndex;
@@ -61,4 +29,4 @@ export class FormatStyleHelper {
61
29
  return firstIndex > 0 ? formats[firstIndex - 1] : null;
62
30
  }
63
31
  }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LXN0eWxlLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9leGVjdXRpb24vaGVscGVycy9mb3JtYXQtc3R5bGUuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFNUUsTUFBTSxPQUFPLGlCQUFpQjtJQUMxQixNQUFNLENBQUMsZUFBZSxDQUFDLE9BQXNCLEVBQUUsVUFBa0IsRUFBRSxRQUFnQixFQUFFLFdBQTJCO1FBQzVHLElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsR0FBRyxVQUFVLEVBQUU7WUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUM7Z0JBQzFCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVTtnQkFDMUMsUUFBUSxFQUFFLFVBQVUsR0FBRyxDQUFDO2dCQUN4QixTQUFTLEVBQUUsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQzthQUMvRCxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztZQUM1QyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckMsVUFBVSxFQUFFLENBQUM7U0FDaEI7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QUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUM5QyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN4QjtTQUNKO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxPQUFzQixFQUFFLEtBQWE7UUFDN0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUM7UUFDL0QsT0FBTyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDM0QsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGVudFN0eWxlSGVscGVyIH0gZnJvbSAnLi4vLi4vY29udGVudC9oZWxwZXJzL2NvbnRlbnQtc3R5bGUuaGVscGVyJztcbmltcG9ydCB7IEZvcm1hdE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9mb3JtYXQubW9kZWwnO1xuaW1wb3J0IHsgVGV4dFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RleHQtc3R5bGUubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgRm9ybWF0U3R5bGVIZWxwZXIge1xuICAgIHN0YXRpYyBhcHBseVRleHRTdHlsZXMoZm9ybWF0czogRm9ybWF0TW9kZWxbXSwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBjdXJzb3JTdHlsZTogVGV4dFN0eWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgbGV0IGZpcnN0SW5kZXggPSBmb3JtYXRzLmZpbmRJbmRleCh4ID0+IHguZW5kSW5kZXggPj0gc3RhcnRJbmRleCk7XG4gICAgICAgIGlmIChmb3JtYXRzW2ZpcnN0SW5kZXhdLnN0YXJ0SW5kZXggPCBzdGFydEluZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IG5ldyBGb3JtYXRNb2RlbCh7XG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleDogZm9ybWF0c1tmaXJzdEluZGV4XS5zdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIGVuZEluZGV4OiBzdGFydEluZGV4IC0gMSxcbiAgICAgICAgICAgICAgICB0ZXh0U3R5bGU6IG5ldyBUZXh0U3R5bGVNb2RlbChmb3JtYXRzW2ZpcnN0SW5kZXhdLnRleHRTdHlsZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9ybWF0c1tmaXJzdEluZGV4XS5zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICAgICAgICAgIGZvcm1hdHMuc3BsaWNlKGZpcnN0SW5kZXgsIDAsIG1vZGVsKTtcbiAgICAgICAgICAgIGZpcnN0SW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGFzdEluZGV4ID0gZmlyc3RJbmRleDtcbiAgICAgICAgd2hpbGUgKGZvcm1hdHNbbGFzdEluZGV4XS5lbmRJbmRleCA8IGVuZEluZGV4KSB7XG4gICAgICAgICAgICBsYXN0SW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0c1tsYXN0SW5kZXhdLmVuZEluZGV4ID4gZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gbmV3IEZvcm1hdE1vZGVsKHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4OiBlbmRJbmRleCArIDEsXG4gICAgICAgICAgICAgICAgZW5kSW5kZXg6IGZvcm1hdHNbbGFzdEluZGV4XS5lbmRJbmRleCxcbiAgICAgICAgICAgICAgICB0ZXh0U3R5bGU6IG5ldyBUZXh0U3R5bGVNb2RlbChmb3JtYXRzW2xhc3RJbmRleF0udGV4dFN0eWxlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3JtYXRzW2xhc3RJbmRleF0uZW5kSW5kZXggPSBlbmRJbmRleDtcbiAgICAgICAgICAgIGZvcm1hdHMuc3BsaWNlKGxhc3RJbmRleCArIDEsIDAsIG1vZGVsKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gZmlyc3RJbmRleDsgaSA8PSBsYXN0SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihmb3JtYXRzW2ldLnRleHRTdHlsZSwgY3Vyc29yU3R5bGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVyZ2VGb3JtYXRzKGZvcm1hdHMsIHN0YXJ0SW5kZXggLSAxLCBlbmRJbmRleCArIDEpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRGb3JtYXRzQXRSYW5nZShmb3JtYXRzOiBGb3JtYXRNb2RlbFtdLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIpOiBGb3JtYXRNb2RlbFtdIHtcbiAgICAgICAgY29uc3QgZmlyc3RJbmRleCA9IGZvcm1hdHMuZmluZEluZGV4KHggPT4geC5lbmRJbmRleCA+PSBzdGFydEluZGV4KTtcbiAgICAgICAgbGV0IGxhc3RJbmRleCA9IGZpcnN0SW5kZXg7XG4gICAgICAgIHdoaWxlIChsYXN0SW5kZXggPCBmb3JtYXRzLmxlbmd0aCAtIDEgJiYgZm9ybWF0c1tsYXN0SW5kZXhdPy5lbmRJbmRleCA8IGVuZEluZGV4KSB7XG4gICAgICAgICAgICBsYXN0SW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXRzLnNsaWNlKGZpcnN0SW5kZXgsIGxhc3RJbmRleCArIDEpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRGb3JtYXRBdEluZGV4KGZvcm1hdHM6IEZvcm1hdE1vZGVsW10sIGluZGV4OiBudW1iZXIpOiBGb3JtYXRNb2RlbCB7XG4gICAgICAgIHJldHVybiBmb3JtYXRzLmZpbmQoeCA9PiB4LmVuZEluZGV4ID49IGluZGV4KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbWVyZ2VGb3JtYXRzKGZvcm1hdHM6IEZvcm1hdE1vZGVsW10sIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBmaXJzdEluZGV4ID0gZm9ybWF0cy5maW5kSW5kZXgoeCA9PiB4LmVuZEluZGV4ID49IHN0YXJ0SW5kZXgpO1xuICAgICAgICBsZXQgbGFzdEluZGV4ID0gZmlyc3RJbmRleDtcbiAgICAgICAgd2hpbGUgKGxhc3RJbmRleCA8IGZvcm1hdHMubGVuZ3RoIC0gMSAmJiBmb3JtYXRzW2xhc3RJbmRleF0uZW5kSW5kZXggPCBlbmRJbmRleCkge1xuICAgICAgICAgICAgbGFzdEluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IGxhc3RJbmRleDsgaSA+IGZpcnN0SW5kZXg7IGktLSkge1xuICAgICAgICAgICAgaWYgKENvbnRlbnRTdHlsZUhlbHBlci5hcmVTYW1lVGV4dFN0eWxlcyhmb3JtYXRzW2ldLnRleHRTdHlsZSwgZm9ybWF0c1tpIC0gMV0udGV4dFN0eWxlKSkge1xuICAgICAgICAgICAgICAgIGZvcm1hdHNbaSAtIDFdLmVuZEluZGV4ID0gZm9ybWF0c1tpXS5lbmRJbmRleDtcbiAgICAgICAgICAgICAgICBmb3JtYXRzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRQcmV2Rm9ybWF0QXRJbmRleChmb3JtYXRzOiBGb3JtYXRNb2RlbFtdLCBpbmRleDogbnVtYmVyKTogRm9ybWF0TW9kZWwgfCBudWxsIHtcbiAgICAgICAgY29uc3QgZmlyc3RJbmRleCA9IGZvcm1hdHMuZmluZEluZGV4KHggPT4geC5lbmRJbmRleCA+PSBpbmRleCk7XG4gICAgICAgIHJldHVybiBmaXJzdEluZGV4ID4gMCA/IGZvcm1hdHNbZmlyc3RJbmRleCAtIDFdIDogbnVsbDtcbiAgICB9XG59XG4iXX0=
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LXN0eWxlLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9leGVjdXRpb24vaGVscGVycy9mb3JtYXQtc3R5bGUuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBR2hGLE1BQU0sT0FBTyxpQkFBaUI7SUFDMUIsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE9BQXNCLEVBQUUsVUFBa0IsRUFBRSxRQUFnQjtRQUNqRixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUMsQ0FBQztRQUNwRSxJQUFJLFNBQVMsR0FBRyxVQUFVLENBQUM7UUFDM0IsT0FBTyxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxRQUFRLEVBQUU7WUFDOUUsU0FBUyxFQUFFLENBQUM7U0FDZjtRQUVELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBc0IsRUFBRSxLQUFhO1FBQ3pELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBc0IsRUFBRSxVQUFrQixFQUFFLFFBQWdCO1FBQzVFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksU0FBUyxHQUFHLFVBQVUsQ0FBQztRQUMzQixPQUFPLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsRUFBRTtZQUM3RSxTQUFTLEVBQUUsQ0FBQztTQUNmO1FBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxJQUFJLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDdEYsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDeEI7U0FDSjtJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsT0FBc0IsRUFBRSxLQUFhO1FBQzdELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQy9ELE9BQU8sVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRlbnRTdHlsZUhlbHBlciB9IGZyb20gJy4uLy4uL2NvbnRlbnQvaGVscGVycy9jb250ZW50LXN0eWxlLmhlbHBlcic7XG5pbXBvcnQgeyBGb3JtYXRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvZm9ybWF0Lm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIEZvcm1hdFN0eWxlSGVscGVyIHtcbiAgICBzdGF0aWMgZ2V0Rm9ybWF0c0F0UmFuZ2UoZm9ybWF0czogRm9ybWF0TW9kZWxbXSwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogRm9ybWF0TW9kZWxbXSB7XG4gICAgICAgIGNvbnN0IGZpcnN0SW5kZXggPSBmb3JtYXRzLmZpbmRJbmRleCh4ID0+IHguZW5kSW5kZXggPj0gc3RhcnRJbmRleCk7XG4gICAgICAgIGxldCBsYXN0SW5kZXggPSBmaXJzdEluZGV4O1xuICAgICAgICB3aGlsZSAobGFzdEluZGV4IDwgZm9ybWF0cy5sZW5ndGggLSAxICYmIGZvcm1hdHNbbGFzdEluZGV4XT8uZW5kSW5kZXggPCBlbmRJbmRleCkge1xuICAgICAgICAgICAgbGFzdEluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybWF0cy5zbGljZShmaXJzdEluZGV4LCBsYXN0SW5kZXggKyAxKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0Rm9ybWF0QXRJbmRleChmb3JtYXRzOiBGb3JtYXRNb2RlbFtdLCBpbmRleDogbnVtYmVyKTogRm9ybWF0TW9kZWwge1xuICAgICAgICByZXR1cm4gZm9ybWF0cy5maW5kKHggPT4geC5lbmRJbmRleCA+PSBpbmRleCk7XG4gICAgfVxuXG4gICAgc3RhdGljIG1lcmdlRm9ybWF0cyhmb3JtYXRzOiBGb3JtYXRNb2RlbFtdLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZmlyc3RJbmRleCA9IGZvcm1hdHMuZmluZEluZGV4KHggPT4geC5lbmRJbmRleCA+PSBzdGFydEluZGV4KTtcbiAgICAgICAgbGV0IGxhc3RJbmRleCA9IGZpcnN0SW5kZXg7XG4gICAgICAgIHdoaWxlIChsYXN0SW5kZXggPCBmb3JtYXRzLmxlbmd0aCAtIDEgJiYgZm9ybWF0c1tsYXN0SW5kZXhdLmVuZEluZGV4IDwgZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIGxhc3RJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBsYXN0SW5kZXg7IGkgPiBmaXJzdEluZGV4OyBpLS0pIHtcbiAgICAgICAgICAgIGlmIChDb250ZW50U3R5bGVIZWxwZXIuYXJlU2FtZVRleHRTdHlsZXMoZm9ybWF0c1tpXS50ZXh0U3R5bGUsIGZvcm1hdHNbaSAtIDFdLnRleHRTdHlsZSkpIHtcbiAgICAgICAgICAgICAgICBmb3JtYXRzW2kgLSAxXS5lbmRJbmRleCA9IGZvcm1hdHNbaV0uZW5kSW5kZXg7XG4gICAgICAgICAgICAgICAgZm9ybWF0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UHJldkZvcm1hdEF0SW5kZXgoZm9ybWF0czogRm9ybWF0TW9kZWxbXSwgaW5kZXg6IG51bWJlcik6IEZvcm1hdE1vZGVsIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGZpcnN0SW5kZXggPSBmb3JtYXRzLmZpbmRJbmRleCh4ID0+IHguZW5kSW5kZXggPj0gaW5kZXgpO1xuICAgICAgICByZXR1cm4gZmlyc3RJbmRleCA+IDAgPyBmb3JtYXRzW2ZpcnN0SW5kZXggLSAxXSA6IG51bGw7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,12 @@
1
+ import { ImageDataModel } from '../../../models/generated/image-data.model';
2
+ export class ImageHelper {
3
+ static getImageWithAllowedSize(imageData, maxWidth) {
4
+ if (imageData.width <= maxWidth) {
5
+ return imageData;
6
+ }
7
+ const aspectRatio = imageData.width / imageData.height;
8
+ const height = maxWidth / aspectRatio;
9
+ return new ImageDataModel({ width: Math.round(maxWidth), height: Math.round(height), content: imageData.content });
10
+ }
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuaGVscGV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2V4ZWN1dGlvbi9oZWxwZXJzL2ltYWdlLmhlbHBldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFNUUsTUFBTSxPQUFPLFdBQVc7SUFDcEIsTUFBTSxDQUFDLHVCQUF1QixDQUFDLFNBQXlCLEVBQUUsUUFBZ0I7UUFDdEUsSUFBSSxTQUFTLENBQUMsS0FBSyxJQUFJLFFBQVEsRUFBRTtZQUM3QixPQUFPLFNBQVMsQ0FBQztTQUNwQjtRQUVELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUN2RCxNQUFNLE1BQU0sR0FBRyxRQUFRLEdBQUcsV0FBVyxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDdkgsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW1hZ2VEYXRhTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2ltYWdlLWRhdGEubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgSW1hZ2VIZWxwZXIge1xuICAgIHN0YXRpYyBnZXRJbWFnZVdpdGhBbGxvd2VkU2l6ZShpbWFnZURhdGE6IEltYWdlRGF0YU1vZGVsLCBtYXhXaWR0aDogbnVtYmVyKTogSW1hZ2VEYXRhTW9kZWwge1xuICAgICAgICBpZiAoaW1hZ2VEYXRhLndpZHRoIDw9IG1heFdpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4gaW1hZ2VEYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXNwZWN0UmF0aW8gPSBpbWFnZURhdGEud2lkdGggLyBpbWFnZURhdGEuaGVpZ2h0O1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBtYXhXaWR0aCAvIGFzcGVjdFJhdGlvO1xuICAgICAgICByZXR1cm4gbmV3IEltYWdlRGF0YU1vZGVsKHsgd2lkdGg6IE1hdGgucm91bmQobWF4V2lkdGgpLCBoZWlnaHQ6IE1hdGgucm91bmQoaGVpZ2h0KSwgY29udGVudDogaW1hZ2VEYXRhLmNvbnRlbnQgfSk7XG4gICAgfVxufVxuIl19
@@ -5,6 +5,7 @@ export class ParagraphHelper {
5
5
  let currentPage = prevParagraphInfo.lastPage;
6
6
  let previousLine = null;
7
7
  let currentPageVerticalData = PageHelper.getVerticalData(currentPage, pagesInfo.pagesVerticalData);
8
+ let previousTableInsertIndex = null;
8
9
  for (const textLineInfo of currentParagraph.textLinesInfo) {
9
10
  textLineInfo.screenLine = ++prevParagraphInfo.paragraphLastLine;
10
11
  textLineInfo.firstLinePageOffset = 0;
@@ -25,7 +26,11 @@ export class ParagraphHelper {
25
26
  const nextPageVerticalData = PageHelper.getVerticalData(currentPage + 1, pagesInfo.pagesVerticalData);
26
27
  const spaceBetweenPagesContent = pagesInfo.pagesSpace + currentPageVerticalData.marginBottom + nextPageVerticalData.marginTop;
27
28
  if (textLineInfo.hasTable) {
28
- const { splitsCount, leftHeight, tableHeight } = ParagraphHelper.processTableSplit(tables, currentParagraph.startInsertIndex, leftSpaceOnPage, spaceBetweenPagesContent, currentPageVerticalData.contentHeight);
29
+ const startInsertIndex = previousTableInsertIndex === null || currentParagraph.startInsertIndex > previousTableInsertIndex
30
+ ? currentParagraph.startInsertIndex
31
+ : previousTableInsertIndex + 1;
32
+ const { splitsCount, leftHeight, tableHeight, tableInsertIndex } = ParagraphHelper.processTableSplit(tables, startInsertIndex, leftSpaceOnPage, spaceBetweenPagesContent, currentPageVerticalData.contentHeight);
33
+ previousTableInsertIndex = tableInsertIndex;
29
34
  textLineInfo.height = tableHeight;
30
35
  textLineInfo.page = currentPage;
31
36
  currentPage += splitsCount;
@@ -163,7 +168,10 @@ export class ParagraphHelper {
163
168
  }
164
169
  static processTableSplit(tables, startInsertIndex, leftSpaceOnPage, spaceBetweenPagesContent, contentHeight) {
165
170
  const table = tables.find(x => x.instance.insertIndex >= startInsertIndex);
166
- return table.instance.processSplit(leftSpaceOnPage, spaceBetweenPagesContent, contentHeight);
171
+ return {
172
+ ...table.instance.processSplit(leftSpaceOnPage, spaceBetweenPagesContent, contentHeight),
173
+ tableInsertIndex: table.instance.insertIndex
174
+ };
167
175
  }
168
176
  }
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWdyYXBoLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9leGVjdXRpb24vaGVscGVycy9wYXJhZ3JhcGguaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNM0MsTUFBTSxPQUFPLGVBQWU7SUFDeEIsTUFBTSxDQUFDLDBCQUEwQixDQUM3QixnQkFBMkIsRUFDM0IsaUJBQTJGLEVBQzNGLFNBQTZFLEVBQzdFLE1BQTJDO1FBRTNDLElBQUksd0JBQXdCLEdBQUcsaUJBQWlCLENBQUMsZUFBZSxDQUFDO1FBQ2pFLElBQUksV0FBVyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztRQUM3QyxJQUFJLFlBQVksR0FBd0IsSUFBSSxDQUFDO1FBQzdDLElBQUksdUJBQXVCLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbkcsS0FBSyxNQUFNLFlBQVksSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUU7WUFDdkQsWUFBWSxDQUFDLFVBQVUsR0FBRyxFQUFFLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDO1lBQ2hFLFlBQVksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7WUFDckMsWUFBWSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFDL0IsWUFBWSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDN0IsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDO1lBQ3ZFLE1BQU0sZUFBZSxHQUFHLHVCQUF1QixDQUFDLGFBQWEsR0FBRyx3QkFBd0IsQ0FBQztZQUN6RixJQUNJLENBQUMsWUFBWSxDQUFDLFFBQVE7Z0JBQ3RCLENBQUMsaUJBQWlC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RUQsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FDNUIsTUFBMkMsRUFDM0MsZ0JBQXdCLEVBQ3hCLGVBQXVCLEVBQ3ZCLHdCQUFnQyxFQUNoQyxhQUFxQjtRQUVyQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksZ0JBQWdCLENBQUMsQ0FBQztRQUMzRSxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNqRyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTGluZUluZm9Nb2RlbCB9IGZyb20gJy4uLy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL2xpbmUtaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBOb2RlclRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy90YWJsZS9jb21wb25lbnRzL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYWdlSGVscGVyIH0gZnJvbSAnLi9wYWdlLmhlbHBlcic7XG5pbXBvcnQgeyBQYWdlVmVydGljYWxEYXRhTW9kZWwgfSBmcm9tICcuLi8uLi9jb250ZW50L3BhZ2UtdmVydGljYWwtZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBQYXJhZ3JhcGggfSBmcm9tICcuLi8uLi9jb250ZW50L2Rpc3BsYXktZGF0YS9wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgUGFyYWdyYXBoTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3BhcmFncmFwaC5tb2RlbCc7XG5pbXBvcnQgeyBUZXh0TGluZUluZm8gfSBmcm9tICcuLi8uLi9jb250ZW50L2Rpc3BsYXktZGF0YS90ZXh0LWxpbmUtaW5mbyc7XG5cbmV4cG9ydCBjbGFzcyBQYXJhZ3JhcGhIZWxwZXIge1xuICAgIHN0YXRpYyBwcm9jZXNzVGV4dExpbmVzUHJvcGVydGllcyhcbiAgICAgICAgY3VycmVudFBhcmFncmFwaDogUGFyYWdyYXBoLFxuICAgICAgICBwcmV2UGFyYWdyYXBoSW5mbzogeyBsYXN0UGFnZTogbnVtYmVyOyBwYXJhZ3JhcGhIZWlnaHQ6IG51bWJlcjsgcGFyYWdyYXBoTGFzdExpbmU6IG51bWJlciB9LFxuICAgICAgICBwYWdlc0luZm86IHsgcGFnZXNWZXJ0aWNhbERhdGE6IFBhZ2VWZXJ0aWNhbERhdGFNb2RlbFtdOyBwYWdlc1NwYWNlOiBudW1iZXIgfSxcbiAgICAgICAgdGFibGVzOiBDb21wb25lbnRSZWY8Tm9kZXJUYWJsZUNvbXBvbmVudD5bXVxuICAgICk6IHZvaWQge1xuICAgICAgICBsZXQgY3VycmVudFBhZ2VDb250ZW50SGVpZ2h0ID0gcHJldlBhcmFncmFwaEluZm8ucGFyYWdyYXBoSGVpZ2h0O1xuICAgICAgICBsZXQgY3VycmVudFBhZ2UgPSBwcmV2UGFyYWdyYXBoSW5mby5sYXN0UGFnZTtcbiAgICAgICAgbGV0IHByZXZpb3VzTGluZTogVGV4dExpbmVJbmZvIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGxldCBjdXJyZW50UGFnZVZlcnRpY2FsRGF0YSA9IFBhZ2VIZWxwZXIuZ2V0VmVydGljYWxEYXRhKGN1cnJlbnRQYWdlLCBwYWdlc0luZm8ucGFnZXNWZXJ0aWNhbERhdGEpO1xuICAgICAgICBmb3IgKGNvbnN0IHRleHRMaW5lSW5mbyBvZiBjdXJyZW50UGFyYWdyYXBoLnRleHRMaW5lc0luZm8pIHtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5zY3JlZW5MaW5lID0gKytwcmV2UGFyYWdyYXBoSW5mby5wYXJhZ3JhcGhMYXN0TGluZTtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5maXJzdExpbmVQYWdlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5lbmRQYWdlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5zcGxpdE9mZnNldCA9IDA7XG4gICAgICAgICAgICBjb25zdCB0ZXh0TGluZUhlaWdodCA9IHRleHRMaW5lSW5mby5oZWlnaHQgKyB0ZXh0TGluZUluZm8ub2Zmc2V0QmVmb3JlO1xuICAgICAgICAgICAgY29uc3QgbGVmdFNwYWNlT25QYWdlID0gY3VycmVudFBhZ2VWZXJ0aWNhbERhdGEuY29udGVudEhlaWdodCAtIGN1cnJlbnRQYWdlQ29udGVudEhlaWdodDtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdGV4dExpbmVJbmZvLmhhc1RhYmxlICYmXG4gICAgICAgICAgICAgICAgKHByZXZQYXJhZ3JhcGhJbmZvLnBhcmFncmFwaExhc3RMaW5lID09PSAwIHx8ICh0ZXh0TGluZUhlaWdodCA8PSBsZWZ0U3BhY2VPblBhZ2UgJiYgIXRleHRMaW5lSW5mby5pc0FmdGVyUGFnZUJyZWFrKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0xpbmU/Lmhhc1RhYmxlICYmIHByZXZpb3VzTGluZS5wYWdlICE9IGN1cnJlbnRQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRMaW5lSW5mby5zcGxpdE9mZnNldCA9IGN1cnJlbnRQYWdlQ29udGVudEhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUNvbnRlbnRIZWlnaHQgKz0gdGV4dExpbmVIZWlnaHQgKyB0ZXh0TGluZUluZm8ub2Zmc2V0QWZ0ZXI7XG4gICAgICAgICAgICAgICAgdGV4dExpbmVJbmZvLnBhZ2UgPSBjdXJyZW50UGFnZTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0xpbmUgPSB0ZXh0TGluZUluZm87XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5leHRQYWdlVmVydGljYWxEYXRhID0gUGFnZUhlbHBlci5nZXRWZXJ0aWNhbERhdGEoY3VycmVudFBhZ2UgKyAxLCBwYWdlc0luZm8ucGFnZXNWZXJ0aWNhbERhdGEpO1xuICAgICAgICAgICAgY29uc3Qgc3BhY2VCZXR3ZWVuUGFnZXNDb250ZW50ID0gcGFnZXNJbmZvLnBhZ2VzU3BhY2UgKyBjdXJyZW50UGFnZVZlcnRpY2FsRGF0YS5tYXJnaW5Cb3R0b20gKyBuZXh0UGFnZVZlcnRpY2FsRGF0YS5tYXJnaW5Ub3A7XG4gICAgICAgICAgICBpZiAodGV4dExpbmVJbmZvLmhhc1RhYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzcGxpdHNDb3VudCwgbGVmdEhlaWdodCwgdGFibGVIZWlnaHQgfSA9IFBhcmFncmFwaEhlbHBlci5wcm9jZXNzVGFibGVTcGxpdChcbiAgICAgICAgICAgICAgICAgICAgdGFibGVzLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFyYWdyYXBoLnN0YXJ0SW5zZXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGxlZnRTcGFjZU9uUGFnZSxcbiAgICAgICAgICAgICAgICAgICAgc3BhY2VCZXR3ZWVuUGFnZXNDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZVZlcnRpY2FsRGF0YS5jb250ZW50SGVpZ2h0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0ZXh0TGluZUluZm8uaGVpZ2h0ID0gdGFibGVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGV4dExpbmVJbmZvLnBhZ2UgPSBjdXJyZW50UGFnZTtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZSArPSBzcGxpdHNDb3VudDtcbiAgICAgICAgICAgICAgICBpZiAoc3BsaXRzQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRMaW5lSW5mby5oZWlnaHQgPT09IGxlZnRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRMaW5lSW5mby5wYWdlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWdlT2Zmc2V0ID0gc3BhY2VCZXR3ZWVuUGFnZXNDb250ZW50ICsgbGVmdFNwYWNlT25QYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTGluZS5lbmRQYWdlT2Zmc2V0ID0gcGFnZU9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhcmFncmFwaC5wYWdlUHJldmlvdXNDb250ZW50SGVpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TGluZUluZm8uZmlyc3RMaW5lUGFnZU9mZnNldCA9IHBhZ2VPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUNvbnRlbnRIZWlnaHQgPSBsZWZ0SGVpZ2h0ICsgdGV4dExpbmVJbmZvLm9mZnNldEJlZm9yZSArIHRleHRMaW5lSW5mby5vZmZzZXRBZnRlcjtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2VWZXJ0aWNhbERhdGEgPSBuZXh0UGFnZVZlcnRpY2FsRGF0YTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUNvbnRlbnRIZWlnaHQgKz0gdGV4dExpbmVJbmZvLmhlaWdodCArIHRleHRMaW5lSW5mby5vZmZzZXRCZWZvcmUgKyB0ZXh0TGluZUluZm8ub2Zmc2V0QWZ0ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcmV2UGFyYWdyYXBoSW5mby5wYXJhZ3JhcGhMYXN0TGluZSAhPT0gMCAmJiAodGV4dExpbmVIZWlnaHQgPiBsZWZ0U3BhY2VPblBhZ2UgfHwgdGV4dExpbmVJbmZvLmlzQWZ0ZXJQYWdlQnJlYWspKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFnZU9mZnNldCA9IHNwYWNlQmV0d2VlblBhZ2VzQ29udGVudCArIGxlZnRTcGFjZU9uUGFnZTtcbiAgICAgICAgICAgICAgICB0ZXh0TGluZUluZm8ucGFnZSA9ICsrY3VycmVudFBhZ2U7XG4gICAgICAgICAgICAgICAgY3VycmVudFBhZ2VWZXJ0aWNhbERhdGEgPSBuZXh0UGFnZVZlcnRpY2FsRGF0YTtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUNvbnRlbnRIZWlnaHQgPSB0ZXh0TGluZUhlaWdodCArIHRleHRMaW5lSW5mby5vZmZzZXRBZnRlcjtcbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNMaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTGluZS5lbmRQYWdlT2Zmc2V0ID0gcGFnZU9mZnNldDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFyYWdyYXBoLnBhZ2VQcmV2aW91c0NvbnRlbnRIZWlnaHQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0TGluZUluZm8uZmlyc3RMaW5lUGFnZU9mZnNldCA9IHBhZ2VPZmZzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmV2aW91c0xpbmUgPSB0ZXh0TGluZUluZm87XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgcHJvY2Vzc1RleHRMaW5lc1Byb3BlcnRpZXNGb3JTaW5nbGVQYWdlKFxuICAgICAgICBjdXJyZW50UGFyYWdyYXBoOiBQYXJhZ3JhcGgsXG4gICAgICAgIHByZXZQYXJhZ3JhcGhJbmZvOiB7IGxhc3RQYWdlOiBudW1iZXI7IHBhcmFncmFwaExhc3RMaW5lOiBudW1iZXIgfVxuICAgICk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IHRleHRMaW5lSW5mbyBvZiBjdXJyZW50UGFyYWdyYXBoLnRleHRMaW5lc0luZm8pIHtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5zY3JlZW5MaW5lID0gKytwcmV2UGFyYWdyYXBoSW5mby5wYXJhZ3JhcGhMYXN0TGluZTtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5maXJzdExpbmVQYWdlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5lbmRQYWdlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5wYWdlID0gcHJldlBhcmFncmFwaEluZm8ubGFzdFBhZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0VmlzaWJsZUxpbmVJbmZvKFxuICAgICAgICBwYXJhZ3JhcGhUZXh0TGluZXM6IFRleHRMaW5lSW5mb1tdLFxuICAgICAgICBvZmZzZXRUb3A6IG51bWJlcixcbiAgICAgICAgZGlyZWN0aW9uOiBudW1iZXJcbiAgICApOiB7XG4gICAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICAgIHNjcmVlbkluZGV4OiBudW1iZXI7XG4gICAgICAgIHZpc2libGVTY3JlZW5JbmRleDogbnVtYmVyO1xuICAgIH0gfCBudWxsIHtcbiAgICAgICAgaWYgKCFwYXJhZ3JhcGhUZXh0TGluZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxpbmVJbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChsaW5lSW5kZXggPCBwYXJhZ3JhcGhUZXh0TGluZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5lID0gcGFyYWdyYXBoVGV4dExpbmVzW2xpbmVJbmRleF07XG4gICAgICAgICAgICBpZiAob2Zmc2V0VG9wIDw9IGxpbmUuaGVpZ2h0ICsgbGluZS5lbmRQYWdlT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9mZnNldFRvcCAtPSBsaW5lLmhlaWdodCArIGxpbmUuZW5kUGFnZU9mZnNldDtcbiAgICAgICAgICAgIGxpbmVJbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmlzaWJsZUxpbmUgPSBwYXJhZ3JhcGhUZXh0TGluZXNbbGluZUluZGV4XSB8fCBwYXJhZ3JhcGhUZXh0TGluZXNbbGluZUluZGV4IC0gMV07XG4gICAgICAgIGNvbnN0IHNjcmVlbkluZGV4ID0gdmlzaWJsZUxpbmUuc2NyZWVuTGluZTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5kZXg6IGxpbmVJbmRleCxcbiAgICAgICAgICAgIHNjcmVlbkluZGV4OiBzY3JlZW5JbmRleCxcbiAgICAgICAgICAgIHZpc2libGVTY3JlZW5JbmRleDogb2Zmc2V0VG9wID4gMCA/IHNjcmVlbkluZGV4ICsgZGlyZWN0aW9uIDogc2NyZWVuSW5kZXhcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UGFyYWdyYXBoUGFnZXMocGFyYWdyYXBoVGV4dExpbmVzSW5mbzogVGV4dExpbmVJbmZvW10pOiBudW1iZXJbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdFBhZ2VzID0gW107XG4gICAgICAgIHBhcmFncmFwaFRleHRMaW5lc0luZm8uZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzdWx0UGFnZXMuaW5jbHVkZXMoeC5wYWdlKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFBhZ2VzLnB1c2goeC5wYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFBhZ2VzO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRQYXJhZ3JhcGhIZWlnaHQocGFyYWdyYXBoVGV4dExpbmVzSW5mbzogVGV4dExpbmVJbmZvW10pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gcGFyYWdyYXBoVGV4dExpbmVzSW5mby5yZWR1Y2UoXG4gICAgICAgICAgICAocHJldiwgbmV4dCkgPT4gcHJldiArIG5leHQuaGVpZ2h0ICsgbmV4dC5lbmRQYWdlT2Zmc2V0ICsgbmV4dC5vZmZzZXRCZWZvcmUgKyBuZXh0Lm9mZnNldEFmdGVyLFxuICAgICAgICAgICAgMFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRQYWdlTGluZXNIZWlnaHQocGFyYWdyYXBoVGV4dExpbmVzSW5mbzogVGV4dExpbmVJbmZvW10sIHBhZ2U6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBwYXJhZ3JhcGhUZXh0TGluZXNJbmZvXG4gICAgICAgICAgICAuZmlsdGVyKGxpbmUgPT4gbGluZS5wYWdlID09PSBwYWdlKVxuICAgICAgICAgICAgLnJlZHVjZSgocHJldiwgbmV4dCkgPT4gcHJldiArIG5leHQuaGVpZ2h0ICsgbmV4dC5vZmZzZXRBZnRlciArIG5leHQuc3BsaXRPZmZzZXQsIDApO1xuICAgIH1cblxuICAgIHN0YXRpYyBwcm9jZXNzT2Zmc2V0TGluZVdpdGhOdW1iZXJpbmdNYXJrZXIodGV4dExpbmVJbmZvOiBUZXh0TGluZUluZm8sIG1hcmtlckhlaWdodDogbnVtYmVyLCBvZmZzZXRCZWZvcmU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoIW1hcmtlckhlaWdodCB8fCB0ZXh0TGluZUluZm8uaGVpZ2h0ID49IG1hcmtlckhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGV4dExpbmVJbmZvLm9mZnNldEJlZm9yZSA9IG9mZnNldEJlZm9yZSArIG1hcmtlckhlaWdodCAtIHRleHRMaW5lSW5mby5oZWlnaHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGFwcGx5UGFyYWdyYXBoSW5kZW50c1RvTGluZXMobGluZXM6IExpbmVJbmZvTW9kZWxbXSwgcGFyYWdyYXBoSW5kZXg6IG51bWJlciwgcGFyYWdyYXBoczogUGFyYWdyYXBoTW9kZWxbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGggPSBwYXJhZ3JhcGhzW3BhcmFncmFwaEluZGV4XTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNQYXJhZ3JhcGggPSBwYXJhZ3JhcGhzW3BhcmFncmFwaEluZGV4IC0gMV07XG4gICAgICAgIGNvbnN0IG5leHRQYXJhZ3JhcGggPSBwYXJhZ3JhcGhzW3BhcmFncmFwaEluZGV4ICsgMV07XG4gICAgICAgIGNvbnN0IHsgc3BhY2VCZWZvcmUsIHNwYWNlQWZ0ZXIgfSA9IHRoaXMuZ2V0UGFyYWdyYXBoQ29sbGFwc2VkSW5kZW50cyhwYXJhZ3JhcGgsIHByZXZpb3VzUGFyYWdyYXBoLCBuZXh0UGFyYWdyYXBoKTtcbiAgICAgICAgaWYgKHBhcmFncmFwaD8ucGFyYWdyYXBoU3R5bGUuY29udGV4dHVhbFNwYWNpbmcpIHtcbiAgICAgICAgICAgIGlmIChwcmV2aW91c1BhcmFncmFwaD8ucGFyYWdyYXBoU3R5bGUuaGVhZGluZ1N0eWxlSWQgIT09IHBhcmFncmFwaC5wYXJhZ3JhcGhTdHlsZS5oZWFkaW5nU3R5bGVJZCkge1xuICAgICAgICAgICAgICAgIGxpbmVzWzBdLm9mZnNldEJlZm9yZSArPSBzcGFjZUJlZm9yZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5leHRQYXJhZ3JhcGg/LnBhcmFncmFwaFN0eWxlLmhlYWRpbmdTdHlsZUlkICE9PSBwYXJhZ3JhcGgucGFyYWdyYXBoU3R5bGUuaGVhZGluZ1N0eWxlSWQpIHtcbiAgICAgICAgICAgICAgICBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5vZmZzZXRBZnRlciArPSBzcGFjZUFmdGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsaW5lc1swXS5vZmZzZXRCZWZvcmUgKz0gc3BhY2VCZWZvcmU7XG4gICAgICAgIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm9mZnNldEFmdGVyICs9IHNwYWNlQWZ0ZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0UGFyYWdyYXBoQ29sbGFwc2VkSW5kZW50cyhcbiAgICAgICAgcGFyYWdyYXBoOiBQYXJhZ3JhcGhNb2RlbCxcbiAgICAgICAgcHJldmlvdXNQYXJhZ3JhcGg6IFBhcmFncmFwaE1vZGVsIHwgbnVsbCxcbiAgICAgICAgbmV4dFBhcmFncmFwaDogUGFyYWdyYXBoTW9kZWwgfCBudWxsXG4gICAgKTogeyBzcGFjZUJlZm9yZTogbnVtYmVyOyBzcGFjZUFmdGVyOiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IGF1dG9TcGFjaW5nT2Zmc2V0ID0gMTk7XG4gICAgICAgIGNvbnN0IGluZGVudHMgPSB7IHNwYWNlQmVmb3JlOiAwLCBzcGFjZUFmdGVyOiAwIH07XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaFN0eWxlID0gcGFyYWdyYXBoLnBhcmFncmFwaFN0eWxlO1xuICAgICAgICBpZiAoIXByZXZpb3VzUGFyYWdyYXBoIHx8IHBhcmFncmFwaFN0eWxlLnNwYWNlQmVmb3JlID4gcHJldmlvdXNQYXJhZ3JhcGgucGFyYWdyYXBoU3R5bGUuc3BhY2VBZnRlcikge1xuICAgICAgICAgICAgaW5kZW50cy5zcGFjZUJlZm9yZSA9IHBhcmFncmFwaFN0eWxlLnNwYWNlQmVmb3JlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFuZXh0UGFyYWdyYXBoIHx8IHBhcmFncmFwaFN0eWxlLnNwYWNlQWZ0ZXIgPj0gbmV4dFBhcmFncmFwaC5wYXJhZ3JhcGhTdHlsZS5zcGFjZUJlZm9yZSkge1xuICAgICAgICAgICAgaW5kZW50cy5zcGFjZUFmdGVyID0gcGFyYWdyYXBoU3R5bGUuc3BhY2VBZnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJhZ3JhcGg/LnBhcmFncmFwaFN0eWxlLmJlZm9yZUF1dG9zcGFjaW5nKSB7XG4gICAgICAgICAgICBpZiAoIXByZXZpb3VzUGFyYWdyYXBoKSB7XG4gICAgICAgICAgICAgICAgaW5kZW50cy5zcGFjZUJlZm9yZSA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFncmFwaFN0eWxlLnNwYWNlQmVmb3JlID4gcHJldmlvdXNQYXJhZ3JhcGgucGFyYWdyYXBoU3R5bGUuc3BhY2VBZnRlcikge1xuICAgICAgICAgICAgICAgIGluZGVudHMuc3BhY2VCZWZvcmUgPSBhdXRvU3BhY2luZ09mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJhZ3JhcGg/LnBhcmFncmFwaFN0eWxlLmFmdGVyQXV0b3NwYWNpbmcpIHtcbiAgICAgICAgICAgIGlmICghbmV4dFBhcmFncmFwaCkge1xuICAgICAgICAgICAgICAgIGluZGVudHMuc3BhY2VBZnRlciA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFncmFwaFN0eWxlLnNwYWNlQWZ0ZXIgPj0gbmV4dFBhcmFncmFwaC5wYXJhZ3JhcGhTdHlsZS5zcGFjZUJlZm9yZSkge1xuICAgICAgICAgICAgICAgIGluZGVudHMuc3BhY2VBZnRlciA9IGF1dG9TcGFjaW5nT2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZGVudHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcHJvY2Vzc1RhYmxlU3BsaXQoXG4gICAgICAgIHRhYmxlczogQ29tcG9uZW50UmVmPE5vZGVyVGFibGVDb21wb25lbnQ+W10sXG4gICAgICAgIHN0YXJ0SW5zZXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgbGVmdFNwYWNlT25QYWdlOiBudW1iZXIsXG4gICAgICAgIHNwYWNlQmV0d2VlblBhZ2VzQ29udGVudDogbnVtYmVyLFxuICAgICAgICBjb250ZW50SGVpZ2h0OiBudW1iZXJcbiAgICApOiB7IHNwbGl0c0NvdW50OiBudW1iZXI7IHRhYmxlSGVpZ2h0OiBudW1iZXI7IGxlZnRIZWlnaHQ6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0YWJsZXMuZmluZCh4ID0+IHguaW5zdGFuY2UuaW5zZXJ0SW5kZXggPj0gc3RhcnRJbnNlcnRJbmRleCk7XG4gICAgICAgIHJldHVybiB0YWJsZS5pbnN0YW5jZS5wcm9jZXNzU3BsaXQobGVmdFNwYWNlT25QYWdlLCBzcGFjZUJldHdlZW5QYWdlc0NvbnRlbnQsIGNvbnRlbnRIZWlnaHQpO1xuICAgIH1cbn1cbiJdfQ==
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWdyYXBoLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9leGVjdXRpb24vaGVscGVycy9wYXJhZ3JhcGguaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNM0MsTUFBTSxPQUFPLGVBQWU7SUFDeEIsTUFBTSxDQUFDLDBCQUEwQixDQUM3QixnQkFBMkIsRUFDM0IsaUJBQTJGLEVBQzNGLFNBQTZFLEVBQzdFLE1BQTJDO1FBRTNDLElBQUksd0JBQXdCLEdBQUcsaUJBQWlCLENBQUMsZUFBZSxDQUFDO1FBQ2pFLElBQUksV0FBVyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztRQUM3QyxJQUFJLFlBQVksR0FBd0IsSUFBSSxDQUFDO1FBQzdDLElBQUksdUJBQXVCLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbkcsSUFBSSx3QkFBd0IsR0FBa0IsSUFBSSxDQUFDO1FBQ25ELEtBQUssTUFBTSxZQUFZLElBQUksZ0JBQWdCLENBQUMsYUFBYSxFQUFFO1lBQ3ZELFlBQVksQ0FBQyxVQUFVLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQztZQUNoRSxZQUFZLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLFlBQVksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQztZQUN2RSxNQUFNLGVBQWUsR0FBRyx1QkFBdUIsQ0FBQyxhQUFhLEdBQUcsd0JBQXdCLENBQUM7WUFDekYsSUFDSSxDQUFD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QUFJLFNBQVMsRUFBRSxjQUFjLENBQUMsZ0JBQWdCLEVBQUU7WUFDNUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDaEIsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7YUFDMUI7aUJBQU0sSUFBSSxjQUFjLENBQUMsVUFBVSxJQUFJLGFBQWEsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFO2dCQUM5RSxPQUFPLENBQUMsVUFBVSxHQUFHLGlCQUFpQixDQUFDO2FBQzFDO1NBQ0o7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRU8sTUFBTSxDQUFDLGlCQUFpQixDQUM1QixNQUEyQyxFQUMzQyxnQkFBd0IsRUFDeEIsZUFBdUIsRUFDdkIsd0JBQWdDLEVBQ2hDLGFBQXFCO1FBRXJCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzNFLE9BQU87WUFDSCxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxhQUFhLENBQUM7WUFDeEYsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXO1NBQy9DLENBQUM7SUFDTixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTGluZUluZm9Nb2RlbCB9IGZyb20gJy4uLy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL2xpbmUtaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBOb2RlclRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy90YWJsZS9jb21wb25lbnRzL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYWdlSGVscGVyIH0gZnJvbSAnLi9wYWdlLmhlbHBlcic7XG5pbXBvcnQgeyBQYWdlVmVydGljYWxEYXRhTW9kZWwgfSBmcm9tICcuLi8uLi9jb250ZW50L3BhZ2UtdmVydGljYWwtZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBQYXJhZ3JhcGggfSBmcm9tICcuLi8uLi9jb250ZW50L2Rpc3BsYXktZGF0YS9wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgUGFyYWdyYXBoTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3BhcmFncmFwaC5tb2RlbCc7XG5pbXBvcnQgeyBUZXh0TGluZUluZm8gfSBmcm9tICcuLi8uLi9jb250ZW50L2Rpc3BsYXktZGF0YS90ZXh0LWxpbmUtaW5mbyc7XG5cbmV4cG9ydCBjbGFzcyBQYXJhZ3JhcGhIZWxwZXIge1xuICAgIHN0YXRpYyBwcm9jZXNzVGV4dExpbmVzUHJvcGVydGllcyhcbiAgICAgICAgY3VycmVudFBhcmFncmFwaDogUGFyYWdyYXBoLFxuICAgICAgICBwcmV2UGFyYWdyYXBoSW5mbzogeyBsYXN0UGFnZTogbnVtYmVyOyBwYXJhZ3JhcGhIZWlnaHQ6IG51bWJlcjsgcGFyYWdyYXBoTGFzdExpbmU6IG51bWJlciB9LFxuICAgICAgICBwYWdlc0luZm86IHsgcGFnZXNWZXJ0aWNhbERhdGE6IFBhZ2VWZXJ0aWNhbERhdGFNb2RlbFtdOyBwYWdlc1NwYWNlOiBudW1iZXIgfSxcbiAgICAgICAgdGFibGVzOiBDb21wb25lbnRSZWY8Tm9kZXJUYWJsZUNvbXBvbmVudD5bXVxuICAgICk6IHZvaWQge1xuICAgICAgICBsZXQgY3VycmVudFBhZ2VDb250ZW50SGVpZ2h0ID0gcHJldlBhcmFncmFwaEluZm8ucGFyYWdyYXBoSGVpZ2h0O1xuICAgICAgICBsZXQgY3VycmVudFBhZ2UgPSBwcmV2UGFyYWdyYXBoSW5mby5sYXN0UGFnZTtcbiAgICAgICAgbGV0IHByZXZpb3VzTGluZTogVGV4dExpbmVJbmZvIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGxldCBjdXJyZW50UGFnZVZlcnRpY2FsRGF0YSA9IFBhZ2VIZWxwZXIuZ2V0VmVydGljYWxEYXRhKGN1cnJlbnRQYWdlLCBwYWdlc0luZm8ucGFnZXNWZXJ0aWNhbERhdGEpO1xuICAgICAgICBsZXQgcHJldmlvdXNUYWJsZUluc2VydEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCB0ZXh0TGluZUluZm8gb2YgY3VycmVudFBhcmFncmFwaC50ZXh0TGluZXNJbmZvKSB7XG4gICAgICAgICAgICB0ZXh0TGluZUluZm8uc2NyZWVuTGluZSA9ICsrcHJldlBhcmFncmFwaEluZm8ucGFyYWdyYXBoTGFzdExpbmU7XG4gICAgICAgICAgICB0ZXh0TGluZUluZm8uZmlyc3RMaW5lUGFnZU9mZnNldCA9IDA7XG4gICAgICAgICAgICB0ZXh0TGluZUluZm8uZW5kUGFnZU9mZnNldCA9IDA7XG4gICAgICAgICAgICB0ZXh0TGluZUluZm8uc3BsaXRPZmZzZXQgPSAwO1xuICAgICAgICAgICAgY29uc3QgdGV4dExpbmVIZWlnaHQgPSB0ZXh0TGluZUluZm8uaGVpZ2h0ICsgdGV4dExpbmVJbmZvLm9mZnNldEJlZm9yZTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRTcGFjZU9uUGFnZSA9IGN1cnJlbnRQYWdlVmVydGljYWxEYXRhLmNvbnRlbnRIZWlnaHQgLSBjdXJyZW50UGFnZUNvbnRlbnRIZWlnaHQ7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXRleHRMaW5lSW5mby5oYXNUYWJsZSAmJlxuICAgICAgICAgICAgICAgIChwcmV2UGFyYWdyYXBoSW5mby5wYXJhZ3JhcGhMYXN0TGluZSA9PT0gMCB8fCAodGV4dExpbmVIZWlnaHQgPD0gbGVmdFNwYWNlT25QYWdlICYmICF0ZXh0TGluZUluZm8uaXNBZnRlclBhZ2VCcmVhaykpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNMaW5lPy5oYXNUYWJsZSAmJiBwcmV2aW91c0xpbmUucGFnZSAhPSBjdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0TGluZUluZm8uc3BsaXRPZmZzZXQgPSBjdXJyZW50UGFnZUNvbnRlbnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY3VycmVudFBhZ2VDb250ZW50SGVpZ2h0ICs9IHRleHRMaW5lSGVpZ2h0ICsgdGV4dExpbmVJbmZvLm9mZnNldEFmdGVyO1xuICAgICAgICAgICAgICAgIHRleHRMaW5lSW5mby5wYWdlID0gY3VycmVudFBhZ2U7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNMaW5lID0gdGV4dExpbmVJbmZvO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXh0UGFnZVZlcnRpY2FsRGF0YSA9IFBhZ2VIZWxwZXIuZ2V0VmVydGljYWxEYXRhKGN1cnJlbnRQYWdlICsgMSwgcGFnZXNJbmZvLnBhZ2VzVmVydGljYWxEYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IHNwYWNlQmV0d2VlblBhZ2VzQ29udGVudCA9IHBhZ2VzSW5mby5wYWdlc1NwYWNlICsgY3VycmVudFBhZ2VWZXJ0aWNhbERhdGEubWFyZ2luQm90dG9tICsgbmV4dFBhZ2VWZXJ0aWNhbERhdGEubWFyZ2luVG9wO1xuICAgICAgICAgICAgaWYgKHRleHRMaW5lSW5mby5oYXNUYWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5zZXJ0SW5kZXggPVxuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1RhYmxlSW5zZXJ0SW5kZXggPT09IG51bGwgfHwgY3VycmVudFBhcmFncmFwaC5zdGFydEluc2VydEluZGV4ID4gcHJldmlvdXNUYWJsZUluc2VydEluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICA/IGN1cnJlbnRQYXJhZ3JhcGguc3RhcnRJbnNlcnRJbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBwcmV2aW91c1RhYmxlSW5zZXJ0SW5kZXggKyAxO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3BsaXRzQ291bnQsIGxlZnRIZWlnaHQsIHRhYmxlSGVpZ2h0LCB0YWJsZUluc2VydEluZGV4IH0gPSBQYXJhZ3JhcGhIZWxwZXIucHJvY2Vzc1RhYmxlU3BsaXQoXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlcyxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRJbnNlcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgbGVmdFNwYWNlT25QYWdlLFxuICAgICAgICAgICAgICAgICAgICBzcGFjZUJldHdlZW5QYWdlc0NvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlVmVydGljYWxEYXRhLmNvbnRlbnRIZWlnaHRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzVGFibGVJbnNlcnRJbmRleCA9IHRhYmxlSW5zZXJ0SW5kZXg7XG4gICAgICAgICAgICAgICAgdGV4dExpbmVJbmZvLmhlaWdodCA9IHRhYmxlSGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRleHRMaW5lSW5mby5wYWdlID0gY3VycmVudFBhZ2U7XG4gICAgICAgICAgICAgICAgY3VycmVudFBhZ2UgKz0gc3BsaXRzQ291bnQ7XG4gICAgICAgICAgICAgICAgaWYgKHNwbGl0c0NvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0TGluZUluZm8uaGVpZ2h0ID09PSBsZWZ0SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TGluZUluZm8ucGFnZSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFnZU9mZnNldCA9IHNwYWNlQmV0d2VlblBhZ2VzQ29udGVudCArIGxlZnRTcGFjZU9uUGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0xpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xpbmUuZW5kUGFnZU9mZnNldCA9IHBhZ2VPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJhZ3JhcGgucGFnZVByZXZpb3VzQ29udGVudEhlaWdodCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dExpbmVJbmZvLmZpcnN0TGluZVBhZ2VPZmZzZXQgPSBwYWdlT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2VDb250ZW50SGVpZ2h0ID0gbGVmdEhlaWdodCArIHRleHRMaW5lSW5mby5vZmZzZXRCZWZvcmUgKyB0ZXh0TGluZUluZm8ub2Zmc2V0QWZ0ZXI7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlVmVydGljYWxEYXRhID0gbmV4dFBhZ2VWZXJ0aWNhbERhdGE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2VDb250ZW50SGVpZ2h0ICs9IHRleHRMaW5lSW5mby5oZWlnaHQgKyB0ZXh0TGluZUluZm8ub2Zmc2V0QmVmb3JlICsgdGV4dExpbmVJbmZvLm9mZnNldEFmdGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldlBhcmFncmFwaEluZm8ucGFyYWdyYXBoTGFzdExpbmUgIT09IDAgJiYgKHRleHRMaW5lSGVpZ2h0ID4gbGVmdFNwYWNlT25QYWdlIHx8IHRleHRMaW5lSW5mby5pc0FmdGVyUGFnZUJyZWFrKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VPZmZzZXQgPSBzcGFjZUJldHdlZW5QYWdlc0NvbnRlbnQgKyBsZWZ0U3BhY2VPblBhZ2U7XG4gICAgICAgICAgICAgICAgdGV4dExpbmVJbmZvLnBhZ2UgPSArK2N1cnJlbnRQYWdlO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlVmVydGljYWxEYXRhID0gbmV4dFBhZ2VWZXJ0aWNhbERhdGE7XG4gICAgICAgICAgICAgICAgY3VycmVudFBhZ2VDb250ZW50SGVpZ2h0ID0gdGV4dExpbmVIZWlnaHQgKyB0ZXh0TGluZUluZm8ub2Zmc2V0QWZ0ZXI7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzTGluZSkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0xpbmUuZW5kUGFnZU9mZnNldCA9IHBhZ2VPZmZzZXQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhcmFncmFwaC5wYWdlUHJldmlvdXNDb250ZW50SGVpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGV4dExpbmVJbmZvLmZpcnN0TGluZVBhZ2VPZmZzZXQgPSBwYWdlT2Zmc2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJldmlvdXNMaW5lID0gdGV4dExpbmVJbmZvO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHByb2Nlc3NUZXh0TGluZXNQcm9wZXJ0aWVzRm9yU2luZ2xlUGFnZShcbiAgICAgICAgY3VycmVudFBhcmFncmFwaDogUGFyYWdyYXBoLFxuICAgICAgICBwcmV2UGFyYWdyYXBoSW5mbzogeyBsYXN0UGFnZTogbnVtYmVyOyBwYXJhZ3JhcGhMYXN0TGluZTogbnVtYmVyIH1cbiAgICApOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCB0ZXh0TGluZUluZm8gb2YgY3VycmVudFBhcmFncmFwaC50ZXh0TGluZXNJbmZvKSB7XG4gICAgICAgICAgICB0ZXh0TGluZUluZm8uc2NyZWVuTGluZSA9ICsrcHJldlBhcmFncmFwaEluZm8ucGFyYWdyYXBoTGFzdExpbmU7XG4gICAgICAgICAgICB0ZXh0TGluZUluZm8uZmlyc3RMaW5lUGFnZU9mZnNldCA9IDA7XG4gICAgICAgICAgICB0ZXh0TGluZUluZm8uZW5kUGFnZU9mZnNldCA9IDA7XG4gICAgICAgICAgICB0ZXh0TGluZUluZm8ucGFnZSA9IHByZXZQYXJhZ3JhcGhJbmZvLmxhc3RQYWdlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFZpc2libGVMaW5lSW5mbyhcbiAgICAgICAgcGFyYWdyYXBoVGV4dExpbmVzOiBUZXh0TGluZUluZm9bXSxcbiAgICAgICAgb2Zmc2V0VG9wOiBudW1iZXIsXG4gICAgICAgIGRpcmVjdGlvbjogbnVtYmVyXG4gICAgKToge1xuICAgICAgICBpbmRleDogbnVtYmVyO1xuICAgICAgICBzY3JlZW5JbmRleDogbnVtYmVyO1xuICAgICAgICB2aXNpYmxlU2NyZWVuSW5kZXg6IG51bWJlcjtcbiAgICB9IHwgbnVsbCB7XG4gICAgICAgIGlmICghcGFyYWdyYXBoVGV4dExpbmVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsaW5lSW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAobGluZUluZGV4IDwgcGFyYWdyYXBoVGV4dExpbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbGluZSA9IHBhcmFncmFwaFRleHRMaW5lc1tsaW5lSW5kZXhdO1xuICAgICAgICAgICAgaWYgKG9mZnNldFRvcCA8PSBsaW5lLmhlaWdodCArIGxpbmUuZW5kUGFnZU9mZnNldCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvZmZzZXRUb3AgLT0gbGluZS5oZWlnaHQgKyBsaW5lLmVuZFBhZ2VPZmZzZXQ7XG4gICAgICAgICAgICBsaW5lSW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZpc2libGVMaW5lID0gcGFyYWdyYXBoVGV4dExpbmVzW2xpbmVJbmRleF0gfHwgcGFyYWdyYXBoVGV4dExpbmVzW2xpbmVJbmRleCAtIDFdO1xuICAgICAgICBjb25zdCBzY3JlZW5JbmRleCA9IHZpc2libGVMaW5lLnNjcmVlbkxpbmU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZGV4OiBsaW5lSW5kZXgsXG4gICAgICAgICAgICBzY3JlZW5JbmRleDogc2NyZWVuSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU2NyZWVuSW5kZXg6IG9mZnNldFRvcCA+IDAgPyBzY3JlZW5JbmRleCArIGRpcmVjdGlvbiA6IHNjcmVlbkluZGV4XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFBhcmFncmFwaFBhZ2VzKHBhcmFncmFwaFRleHRMaW5lc0luZm86IFRleHRMaW5lSW5mb1tdKTogbnVtYmVyW10ge1xuICAgICAgICBjb25zdCByZXN1bHRQYWdlcyA9IFtdO1xuICAgICAgICBwYXJhZ3JhcGhUZXh0TGluZXNJbmZvLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdFBhZ2VzLmluY2x1ZGVzKHgucGFnZSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRQYWdlcy5wdXNoKHgucGFnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHRQYWdlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UGFyYWdyYXBoSGVpZ2h0KHBhcmFncmFwaFRleHRMaW5lc0luZm86IFRleHRMaW5lSW5mb1tdKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHBhcmFncmFwaFRleHRMaW5lc0luZm8ucmVkdWNlKFxuICAgICAgICAgICAgKHByZXYsIG5leHQpID0+IHByZXYgKyBuZXh0LmhlaWdodCArIG5leHQuZW5kUGFnZU9mZnNldCArIG5leHQub2Zmc2V0QmVmb3JlICsgbmV4dC5vZmZzZXRBZnRlcixcbiAgICAgICAgICAgIDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UGFnZUxpbmVzSGVpZ2h0KHBhcmFncmFwaFRleHRMaW5lc0luZm86IFRleHRMaW5lSW5mb1tdLCBwYWdlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gcGFyYWdyYXBoVGV4dExpbmVzSW5mb1xuICAgICAgICAgICAgLmZpbHRlcihsaW5lID0+IGxpbmUucGFnZSA9PT0gcGFnZSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKHByZXYsIG5leHQpID0+IHByZXYgKyBuZXh0LmhlaWdodCArIG5leHQub2Zmc2V0QWZ0ZXIgKyBuZXh0LnNwbGl0T2Zmc2V0LCAwKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcHJvY2Vzc09mZnNldExpbmVXaXRoTnVtYmVyaW5nTWFya2VyKHRleHRMaW5lSW5mbzogVGV4dExpbmVJbmZvLCBtYXJrZXJIZWlnaHQ6IG51bWJlciwgb2Zmc2V0QmVmb3JlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFtYXJrZXJIZWlnaHQgfHwgdGV4dExpbmVJbmZvLmhlaWdodCA+PSBtYXJrZXJIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRleHRMaW5lSW5mby5vZmZzZXRCZWZvcmUgPSBvZmZzZXRCZWZvcmUgKyBtYXJrZXJIZWlnaHQgLSB0ZXh0TGluZUluZm8uaGVpZ2h0O1xuICAgIH1cblxuICAgIHN0YXRpYyBhcHBseVBhcmFncmFwaEluZGVudHNUb0xpbmVzKGxpbmVzOiBMaW5lSW5mb01vZGVsW10sIHBhcmFncmFwaEluZGV4OiBudW1iZXIsIHBhcmFncmFwaHM6IFBhcmFncmFwaE1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoID0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF07XG4gICAgICAgIGNvbnN0IHByZXZpb3VzUGFyYWdyYXBoID0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleCAtIDFdO1xuICAgICAgICBjb25zdCBuZXh0UGFyYWdyYXBoID0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleCArIDFdO1xuICAgICAgICBjb25zdCB7IHNwYWNlQmVmb3JlLCBzcGFjZUFmdGVyIH0gPSB0aGlzLmdldFBhcmFncmFwaENvbGxhcHNlZEluZGVudHMocGFyYWdyYXBoLCBwcmV2aW91c1BhcmFncmFwaCwgbmV4dFBhcmFncmFwaCk7XG4gICAgICAgIGlmIChwYXJhZ3JhcGg/LnBhcmFncmFwaFN0eWxlLmNvbnRleHR1YWxTcGFjaW5nKSB7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNQYXJhZ3JhcGg/LnBhcmFncmFwaFN0eWxlLmhlYWRpbmdTdHlsZUlkICE9PSBwYXJhZ3JhcGgucGFyYWdyYXBoU3R5bGUuaGVhZGluZ1N0eWxlSWQpIHtcbiAgICAgICAgICAgICAgICBsaW5lc1swXS5vZmZzZXRCZWZvcmUgKz0gc3BhY2VCZWZvcmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXh0UGFyYWdyYXBoPy5wYXJhZ3JhcGhTdHlsZS5oZWFkaW5nU3R5bGVJZCAhPT0gcGFyYWdyYXBoLnBhcmFncmFwaFN0eWxlLmhlYWRpbmdTdHlsZUlkKSB7XG4gICAgICAgICAgICAgICAgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ub2Zmc2V0QWZ0ZXIgKz0gc3BhY2VBZnRlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGluZXNbMF0ub2Zmc2V0QmVmb3JlICs9IHNwYWNlQmVmb3JlO1xuICAgICAgICBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5vZmZzZXRBZnRlciArPSBzcGFjZUFmdGVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldFBhcmFncmFwaENvbGxhcHNlZEluZGVudHMoXG4gICAgICAgIHBhcmFncmFwaDogUGFyYWdyYXBoTW9kZWwsXG4gICAgICAgIHByZXZpb3VzUGFyYWdyYXBoOiBQYXJhZ3JhcGhNb2RlbCB8IG51bGwsXG4gICAgICAgIG5leHRQYXJhZ3JhcGg6IFBhcmFncmFwaE1vZGVsIHwgbnVsbFxuICAgICk6IHsgc3BhY2VCZWZvcmU6IG51bWJlcjsgc3BhY2VBZnRlcjogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCBhdXRvU3BhY2luZ09mZnNldCA9IDE5O1xuICAgICAgICBjb25zdCBpbmRlbnRzID0geyBzcGFjZUJlZm9yZTogMCwgc3BhY2VBZnRlcjogMCB9O1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhTdHlsZSA9IHBhcmFncmFwaC5wYXJhZ3JhcGhTdHlsZTtcbiAgICAgICAgaWYgKCFwcmV2aW91c1BhcmFncmFwaCB8fCBwYXJhZ3JhcGhTdHlsZS5zcGFjZUJlZm9yZSA+IHByZXZpb3VzUGFyYWdyYXBoLnBhcmFncmFwaFN0eWxlLnNwYWNlQWZ0ZXIpIHtcbiAgICAgICAgICAgIGluZGVudHMuc3BhY2VCZWZvcmUgPSBwYXJhZ3JhcGhTdHlsZS5zcGFjZUJlZm9yZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbmV4dFBhcmFncmFwaCB8fCBwYXJhZ3JhcGhTdHlsZS5zcGFjZUFmdGVyID49IG5leHRQYXJhZ3JhcGgucGFyYWdyYXBoU3R5bGUuc3BhY2VCZWZvcmUpIHtcbiAgICAgICAgICAgIGluZGVudHMuc3BhY2VBZnRlciA9IHBhcmFncmFwaFN0eWxlLnNwYWNlQWZ0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYWdyYXBoPy5wYXJhZ3JhcGhTdHlsZS5iZWZvcmVBdXRvc3BhY2luZykge1xuICAgICAgICAgICAgaWYgKCFwcmV2aW91c1BhcmFncmFwaCkge1xuICAgICAgICAgICAgICAgIGluZGVudHMuc3BhY2VCZWZvcmUgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhZ3JhcGhTdHlsZS5zcGFjZUJlZm9yZSA+IHByZXZpb3VzUGFyYWdyYXBoLnBhcmFncmFwaFN0eWxlLnNwYWNlQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICBpbmRlbnRzLnNwYWNlQmVmb3JlID0gYXV0b1NwYWNpbmdPZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYWdyYXBoPy5wYXJhZ3JhcGhTdHlsZS5hZnRlckF1dG9zcGFjaW5nKSB7XG4gICAgICAgICAgICBpZiAoIW5leHRQYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgICAgICBpbmRlbnRzLnNwYWNlQWZ0ZXIgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhZ3JhcGhTdHlsZS5zcGFjZUFmdGVyID49IG5leHRQYXJhZ3JhcGgucGFyYWdyYXBoU3R5bGUuc3BhY2VCZWZvcmUpIHtcbiAgICAgICAgICAgICAgICBpbmRlbnRzLnNwYWNlQWZ0ZXIgPSBhdXRvU3BhY2luZ09mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbmRlbnRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHByb2Nlc3NUYWJsZVNwbGl0KFxuICAgICAgICB0YWJsZXM6IENvbXBvbmVudFJlZjxOb2RlclRhYmxlQ29tcG9uZW50PltdLFxuICAgICAgICBzdGFydEluc2VydEluZGV4OiBudW1iZXIsXG4gICAgICAgIGxlZnRTcGFjZU9uUGFnZTogbnVtYmVyLFxuICAgICAgICBzcGFjZUJldHdlZW5QYWdlc0NvbnRlbnQ6IG51bWJlcixcbiAgICAgICAgY29udGVudEhlaWdodDogbnVtYmVyXG4gICAgKTogeyBzcGxpdHNDb3VudDogbnVtYmVyOyB0YWJsZUhlaWdodDogbnVtYmVyOyBsZWZ0SGVpZ2h0OiBudW1iZXI7IHRhYmxlSW5zZXJ0SW5kZXg6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0YWJsZXMuZmluZCh4ID0+IHguaW5zdGFuY2UuaW5zZXJ0SW5kZXggPj0gc3RhcnRJbnNlcnRJbmRleCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi50YWJsZS5pbnN0YW5jZS5wcm9jZXNzU3BsaXQobGVmdFNwYWNlT25QYWdlLCBzcGFjZUJldHdlZW5QYWdlc0NvbnRlbnQsIGNvbnRlbnRIZWlnaHQpLFxuICAgICAgICAgICAgdGFibGVJbnNlcnRJbmRleDogdGFibGUuaW5zdGFuY2UuaW5zZXJ0SW5kZXhcbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=
@@ -1,8 +1,9 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { CellSessionSourceModel } from './targeting/cell-session-source.model';
3
- import { DEFAULT_EDGE_MAX_HEIGHT_MULTIPLIER } from '../content/constants/editor.const';
4
- import { Document } from '../content/display-data/document';
3
+ import { DEFAULT_EDGE_MAX_HEIGHT_MULTIPLIER, DEFAULT_TOOLBAR_STYLES } from '../content/constants/editor.const';
4
+ import { DisplayData } from '../content/display-data/display-data';
5
5
  import { DocumentInfo } from '../content/constants/document-info.const';
6
+ import { Edges } from '../components/edges/edges';
6
7
  import { EdgeSessionSourceModel } from './targeting/edge-session-source.model';
7
8
  import { EditSession } from './edit.session';
8
9
  import { GeneralPropertiesModel } from '../content/display-data/general-properties.model';
@@ -29,6 +30,13 @@ export class RegulatorService {
29
30
  }
30
31
  addMainSession(model, pageWidth, scalingRatio, container) {
31
32
  const sessionId = ++this.sessionIdIncrement;
33
+ const properties = new GeneralPropertiesModel({
34
+ numberings: model.numberings,
35
+ defaultTabWidth: ScalingHelper.scale(model.defaultTabWidth, scalingRatio),
36
+ maxEdgeHeight: model.pageHeight * DEFAULT_EDGE_MAX_HEIGHT_MULTIPLIER,
37
+ scalingRatio,
38
+ numberingInfo: {}
39
+ });
32
40
  const pageMargin = new MarginModel({
33
41
  left: ScalingHelper.scale(model.marginLeft, scalingRatio),
34
42
  right: ScalingHelper.scale(model.marginRight, scalingRatio),
@@ -37,40 +45,40 @@ export class RegulatorService {
37
45
  header: model.marginHeader > 0 ? model.marginHeader : 0,
38
46
  footer: model.marginFooter > 0 ? model.marginFooter : 0
39
47
  });
40
- const document = new Document(model, pageMargin, DocumentInfo.pagesSpace, pageWidth, model.pageHeight);
41
- const properties = new GeneralPropertiesModel({
42
- numberings: model.numberings,
43
- defaultTabWidth: ScalingHelper.scale(model.defaultTabWidth, scalingRatio),
44
- maxEdgeHeight: model.pageHeight * DEFAULT_EDGE_MAX_HEIGHT_MULTIPLIER,
45
- scalingRatio
46
- });
48
+ const edges = new Edges(this.componentService, model.headers, model.footers, pageMargin, pageWidth, sessionId, properties);
49
+ properties.numberingInfo = {};
50
+ const customComponents = { images: [], tables: [], tabs: [], customElements: [], edges: edges };
51
+ const displayData = new DisplayData(model, properties, sessionId, pageMargin, DocumentInfo.pagesSpace, pageWidth, model.pageHeight, customComponents, this.customContentService, this.editorService);
47
52
  const scrollBar = new ScrollBar(container.nativeElement.parentElement);
48
- const mainSession = new EditSession(document, sessionId, this.customContentService, model, this.selection, properties, this.componentService, scrollBar);
53
+ const mainSession = new EditSession(displayData, sessionId, this.customContentService, model, this.selection, properties, this.editorService, customComponents, 'main', scrollBar);
54
+ displayData.updateNextLineIndexes(0, displayData.paragraphs.length - 1);
49
55
  const virtualRenderer = new VirtualRenderer(container.nativeElement, this.editorService, mainSession, scrollBar);
50
- mainSession.contentWidth = document.pageWidth - (document.pageMargin.left + document.pageMargin.right);
51
- this.editorService.styles = mainSession.stylesMap;
56
+ this.editorService.styles = DEFAULT_TOOLBAR_STYLES();
52
57
  this.mainSession = new SessionModel(mainSession, virtualRenderer, sessionId, null, new MainSessionSourceModel());
53
58
  this.sessions.push(this.mainSession);
54
59
  this.currentSession = this.mainSession;
55
60
  }
56
61
  addCellSession(table, margins, component, properties) {
57
62
  const sessionId = ++this.sessionIdIncrement;
58
- const document = new Document(component.cell, margins, 0, component.width, 0);
59
- const session = new EditSession(document, sessionId, this.customContentService, component.cell, this.selection, properties, this.componentService);
63
+ const customComponents = { images: [], tables: [], tabs: [], customElements: [], edges: null };
64
+ const displayData = new DisplayData(component.cell, properties, sessionId, margins, 0, component.width, 0, customComponents, this.customContentService, this.editorService);
65
+ const session = new EditSession(displayData, sessionId, this.customContentService, component.cell, this.selection, properties, this.editorService, customComponents, 'cell');
66
+ displayData.contentWidth = displayData.contentWidth === 0 ? 1 : displayData.contentWidth;
67
+ displayData.updateNextLineIndexes(0, displayData.paragraphs.length - 1);
60
68
  const renderer = new Renderer(component.container.nativeElement, this.editorService, session);
61
- const contentWidth = component.width - (document.pageMargin.left + document.pageMargin.right);
62
- session.contentWidth = contentWidth === 0 ? 1 : contentWidth;
63
69
  const source = new CellSessionSourceModel(table, component);
64
70
  const newSession = new SessionModel(session, renderer, sessionId, component.parentSessionId, source);
71
+ newSession.renderer.updateText();
65
72
  this.sessions.push(newSession);
66
73
  return newSession;
67
74
  }
68
75
  addEdgeSession(component) {
69
76
  const sessionId = ++this.sessionIdIncrement;
70
- const document = new Document(component.model, component.margins, 0, component.width, 0);
71
- const session = new EditSession(document, sessionId, this.customContentService, component.model, this.selection, component.generalProperties, this.componentService);
77
+ const customComponents = { images: [], tables: [], tabs: [], customElements: [], edges: null };
78
+ const displayData = new DisplayData(component.model, component.generalProperties, sessionId, component.margins, 0, component.width, 0, customComponents, this.customContentService, this.editorService);
79
+ const session = new EditSession(displayData, sessionId, this.customContentService, component.model, this.selection, component.generalProperties, this.editorService, customComponents, 'edge');
80
+ displayData.updateNextLineIndexes(0, displayData.paragraphs.length - 1);
72
81
  const renderer = new Renderer(component.container.nativeElement, this.editorService, session);
73
- session.contentWidth = component.width - (document.pageMargin.left + document.pageMargin.right);
74
82
  const source = new EdgeSessionSourceModel(component.model.pageType, component.type);
75
83
  const newSession = new SessionModel(session, renderer, sessionId, component.parentSessionId, source);
76
84
  this.sessions.push(newSession);
@@ -195,4 +203,4 @@ export class RegulatorService {
195
203
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RegulatorService, decorators: [{
196
204
  type: Injectable
197
205
  }], ctorParameters: () => [{ type: i1.CustomContentService }, { type: i2.EditorService }, { type: i3.ComponentService }] });
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVndWxhdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvZXhlY3V0aW9uL3JlZ3VsYXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHL0UsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDMUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSXRELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUd6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7OztBQUc5RCxNQUFNLE9BQU8sZ0JBQWdC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QU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7WUFDbEQsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBNEIsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzlHLENBQUM7K0dBeE9RLGdCQUFnQjttSEFBaEIsZ0JBQWdCOzs0RkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDZWxsU2Vzc2lvblNvdXJjZU1vZGVsIH0gZnJvbSAnLi90YXJnZXRpbmcvY2VsbC1zZXNzaW9uLXNvdXJjZS5tb2RlbCc7XG5pbXBvcnQgeyBDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9zaGFyZWQvc2VydmljZXMvY29tcG9uZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnRzL3NoYXJlZC9zZXJ2aWNlcy9jdXN0b20tY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7IERFRkFVTFRfRURHRV9NQVhfSEVJR0hUX01VTFRJUExJRVIgfSBmcm9tICcuLi9jb250ZW50L2NvbnN0YW50cy9lZGl0b3IuY29uc3QnO1xuaW1wb3J0IHsgRG9jdW1lbnQgfSBmcm9tICcuLi9jb250ZW50L2Rpc3BsYXktZGF0YS9kb2N1bWVudCc7XG5pbXBvcnQgeyBEb2N1bWVudEluZm8gfSBmcm9tICcuLi9jb250ZW50L2NvbnN0YW50cy9kb2N1bWVudC1pbmZvLmNvbnN0JztcbmltcG9ydCB7IERvY3hNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvZG9jeC5tb2RlbCc7XG5pbXBvcnQgeyBFZGdlU2Vzc2lvblNvdXJjZU1vZGVsIH0gZnJvbSAnLi90YXJnZXRpbmcvZWRnZS1zZXNzaW9uLXNvdXJjZS5tb2RlbCc7XG5pbXBvcnQgeyBFZGdlVHlwZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRnZXMvZWRnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuL2VkaXQuc2Vzc2lvbic7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2VuZXJhbFByb3BlcnRpZXNNb2RlbCB9IGZyb20gJy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL2dlbmVyYWwtcHJvcGVydGllcy5tb2RlbCc7XG5pbXBvcnQgeyBNYWluU2Vzc2lvblNvdXJjZU1vZGVsIH0gZnJvbSAnLi90YXJnZXRpbmcvbWFpbi1zZXNzaW9uLXNvdXJjZS5tb2RlbCc7XG5pbXBvcnQgeyBNYXJnaW5Nb2RlbCB9IGZyb20gJy4uL2NvbnRlbnQvbWFyZ2luLm1vZGVsJztcbmltcG9ydCB7IE5vZGVyRWRnZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRnZXMvZWRnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm9kZXJUYWJsZUNlbGxDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3RhYmxlL2NvbXBvbmVudHMvdGFibGUtY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFnZVR5cGUgfSBmcm9tICcuLi9jb21wb25lbnRzL2VkZ2VzL3BhZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IFJlbmRlcmVyIH0gZnJvbSAnLi4vZGlzcGxheS9yZW5kZXJlcic7XG5pbXBvcnQgeyBTY2FsaW5nSGVscGVyIH0gZnJvbSAnLi4vY29udGVudC9oZWxwZXJzL3NjYWxpbmcuaGVscGVyJztcbmltcG9ydCB7IFNjcm9sbEJhciB9IGZyb20gJy4uL2dhZGdldHMvc2Nyb2xsYmFyJztcbmltcG9ydCB7IFNlbGVjdGlvbiB9IGZyb20gJy4uL3Bvc2l0aW9uaW5nL3NlbGVjdGlvbic7XG5pbXBvcnQgeyBTZXNzaW9uTW9kZWwgfSBmcm9tICcuL3RhcmdldGluZy9zZXNzaW9uLm1vZGVsJztcbmltcG9ydCB7IFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7IFRhcmdldE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YXJnZXQubW9kZWwnO1xuaW1wb3J0IHsgVGFyZ2V0VHlwZSB9IGZyb20gJy4uL29wZXJhdGlvbnMvZW51bXMvdGFyZ2V0LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBWaXJ0dWFsUmVuZGVyZXIgfSBmcm9tICcuLi9kaXNwbGF5L3ZpcnR1YWwucmVuZGVyZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVndWxhdG9yU2VydmljZSB7XG4gICAgbWFpblNlc3Npb246IFNlc3Npb25Nb2RlbDtcblxuICAgIHNlc3Npb25zOiBTZXNzaW9uTW9kZWxbXSA9IFtdO1xuXG4gICAgY3VycmVudFNlc3Npb246IFNlc3Npb25Nb2RlbDtcblxuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uO1xuXG4gICAgc2Vzc2lvbklkSW5jcmVtZW50ID0gMDtcblxuICAgIGVkZ2VFZGl0aW5nUGFnZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjdXN0b21Db250ZW50U2VydmljZTogQ3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWRpdG9yU2VydmljZTogRWRpdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb21wb25lbnRTZXJ2aWNlOiBDb21wb25lbnRTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgYWRkTWFpblNlc3Npb24obW9kZWw6IERvY3hNb2RlbCwgcGFnZVdpZHRoOiBudW1iZXIsIHNjYWxpbmdSYXRpbzogbnVtYmVyLCBjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlc3Npb25JZCA9ICsrdGhpcy5zZXNzaW9uSWRJbmNyZW1lbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2VNYXJnaW4gPSBuZXcgTWFyZ2luTW9kZWwoe1xuICAgICAgICAgICAgbGVmdDogU2NhbGluZ0hlbHBlci5zY2FsZShtb2RlbC5tYXJnaW5MZWZ0LCBzY2FsaW5nUmF0aW8pLFxuICAgICAgICAgICAgcmlnaHQ6IFNjYWxpbmdIZWxwZXIuc2NhbGUobW9kZWwubWFyZ2luUmlnaHQsIHNjYWxpbmdSYXRpbyksXG4gICAgICAgICAgICB0b3A6IG1vZGVsLm1hcmdpblRvcCA+IDAgPyBtb2RlbC5tYXJnaW5Ub3AgOiAwLFxuICAgICAgICAgICAgYm90dG9tOiBtb2RlbC5tYXJnaW5Cb3R0b20gPiAwID8gbW9kZWwubWFyZ2luQm90dG9tIDogMCxcbiAgICAgICAgICAgIGhlYWRlcjogbW9kZWwubWFyZ2luSGVhZGVyID4gMCA/IG1vZGVsLm1hcmdpbkhlYWRlciA6IDAsXG4gICAgICAgICAgICBmb290ZXI6IG1vZGVsLm1hcmdpbkZvb3RlciA+IDAgPyBtb2RlbC5tYXJnaW5Gb290ZXIgOiAwXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkb2N1bWVudCA9IG5ldyBEb2N1bWVudChtb2RlbCwgcGFnZU1hcmdpbiwgRG9jdW1lbnRJbmZvLnBhZ2VzU3BhY2UsIHBhZ2VXaWR0aCwgbW9kZWwucGFnZUhlaWdodCk7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBuZXcgR2VuZXJhbFByb3BlcnRpZXNNb2RlbCh7XG4gICAgICAgICAgICBudW1iZXJpbmdzOiBtb2RlbC5udW1iZXJpbmdzLFxuICAgICAgICAgICAgZGVmYXVsdFRhYldpZHRoOiBTY2FsaW5nSGVscGVyLnNjYWxlKG1vZGVsLmRlZmF1bHRUYWJXaWR0aCwgc2NhbGluZ1JhdGlvKSxcbiAgICAgICAgICAgIG1heEVkZ2VIZWlnaHQ6IG1vZGVsLnBhZ2VIZWlnaHQgKiBERUZBVUxUX0VER0VfTUFYX0hFSUdIVF9NVUxUSVBMSUVSLFxuICAgICAgICAgICAgc2NhbGluZ1JhdGlvXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzY3JvbGxCYXIgPSBuZXcgU2Nyb2xsQmFyKGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBtYWluU2Vzc2lvbiA9IG5ldyBFZGl0U2Vzc2lvbihcbiAgICAgICAgICAgIGRvY3VtZW50LFxuICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgdGhpcy5jdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLFxuICAgICAgICAgICAgc2Nyb2xsQmFyXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHZpcnR1YWxSZW5kZXJlciA9IG5ldyBWaXJ0dWFsUmVuZGVyZXIoY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIHRoaXMuZWRpdG9yU2VydmljZSwgbWFpblNlc3Npb24sIHNjcm9sbEJhcik7XG4gICAgICAgIG1haW5TZXNzaW9uLmNvbnRlbnRXaWR0aCA9IGRvY3VtZW50LnBhZ2VXaWR0aCAtIChkb2N1bWVudC5wYWdlTWFyZ2luLmxlZnQgKyBkb2N1bWVudC5wYWdlTWFyZ2luLnJpZ2h0KTtcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnN0eWxlcyA9IG1haW5TZXNzaW9uLnN0eWxlc01hcDtcbiAgICAgICAgdGhpcy5tYWluU2Vzc2lvbiA9IG5ldyBTZXNzaW9uTW9kZWwobWFpblNlc3Npb24sIHZpcnR1YWxSZW5kZXJlciwgc2Vzc2lvbklkLCBudWxsLCBuZXcgTWFpblNlc3Npb25Tb3VyY2VNb2RlbCgpKTtcbiAgICAgICAgdGhpcy5zZXNzaW9ucy5wdXNoKHRoaXMubWFpblNlc3Npb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uID0gdGhpcy5tYWluU2Vzc2lvbjtcbiAgICB9XG5cbiAgICBhZGRDZWxsU2Vzc2lvbihcbiAgICAgICAgdGFibGU6IFRhYmxlTW9kZWwsXG4gICAgICAgIG1hcmdpbnM6IE1hcmdpbk1vZGVsLFxuICAgICAgICBjb21wb25lbnQ6IE5vZGVyVGFibGVDZWxsQ29tcG9uZW50LFxuICAgICAgICBwcm9wZXJ0aWVzOiBHZW5lcmFsUHJvcGVydGllc01vZGVsXG4gICAgKTogU2Vzc2lvbk1vZGVsIHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gKyt0aGlzLnNlc3Npb25JZEluY3JlbWVudDtcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBuZXcgRG9jdW1lbnQoY29tcG9uZW50LmNlbGwsIG1hcmdpbnMsIDAsIGNvbXBvbmVudC53aWR0aCwgMCk7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgRWRpdFNlc3Npb24oXG4gICAgICAgICAgICBkb2N1bWVudCxcbiAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICBjb21wb25lbnQuY2VsbCxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLFxuICAgICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50U2VydmljZVxuICAgICAgICApO1xuICAgICAgICBjb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcihjb21wb25lbnQuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIHRoaXMuZWRpdG9yU2VydmljZSwgc2Vzc2lvbik7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IGNvbXBvbmVudC53aWR0aCAtIChkb2N1bWVudC5wYWdlTWFyZ2luLmxlZnQgKyBkb2N1bWVudC5wYWdlTWFyZ2luLnJpZ2h0KTtcbiAgICAgICAgc2Vzc2lvbi5jb250ZW50V2lkdGggPSBjb250ZW50V2lkdGggPT09IDAgPyAxIDogY29udGVudFdpZHRoO1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBuZXcgQ2VsbFNlc3Npb25Tb3VyY2VNb2RlbCh0YWJsZSwgY29tcG9uZW50KTtcbiAgICAgICAgY29uc3QgbmV3U2Vzc2lvbiA9IG5ldyBTZXNzaW9uTW9kZWwoc2Vzc2lvbiwgcmVuZGVyZXIsIHNlc3Npb25JZCwgY29tcG9uZW50LnBhcmVudFNlc3Npb25JZCwgc291cmNlKTtcbiAgICAgICAgdGhpcy5zZXNzaW9ucy5wdXNoKG5ld1Nlc3Npb24pO1xuICAgICAgICByZXR1cm4gbmV3U2Vzc2lvbjtcbiAgICB9XG5cbiAgICBhZGRFZGdlU2Vzc2lvbihjb21wb25lbnQ6IE5vZGVyRWRnZUNvbXBvbmVudCk6IFNlc3Npb25Nb2RlbCB7XG4gICAgICAgIGNvbnN0IHNlc3Npb25JZCA9ICsrdGhpcy5zZXNzaW9uSWRJbmNyZW1lbnQ7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50ID0gbmV3IERvY3VtZW50KGNvbXBvbmVudC5tb2RlbCwgY29tcG9uZW50Lm1hcmdpbnMsIDAsIGNvbXBvbmVudC53aWR0aCwgMCk7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgRWRpdFNlc3Npb24oXG4gICAgICAgICAgICBkb2N1bWVudCxcbiAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICBjb21wb25lbnQubW9kZWwsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbixcbiAgICAgICAgICAgIGNvbXBvbmVudC5nZW5lcmFsUHJvcGVydGllcyxcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50U2VydmljZVxuICAgICAgICApO1xuICAgICAgICBjb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcihjb21wb25lbnQuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIHRoaXMuZWRpdG9yU2VydmljZSwgc2Vzc2lvbik7XG4gICAgICAgIHNlc3Npb24uY29udGVudFdpZHRoID0gY29tcG9uZW50LndpZHRoIC0gKGRvY3VtZW50LnBhZ2VNYXJnaW4ubGVmdCArIGRvY3VtZW50LnBhZ2VNYXJnaW4ucmlnaHQpO1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBuZXcgRWRnZVNlc3Npb25Tb3VyY2VNb2RlbChjb21wb25lbnQubW9kZWwucGFnZVR5cGUgYXMgUGFnZVR5cGUsIGNvbXBvbmVudC50eXBlKTtcbiAgICAgICAgY29uc3QgbmV3U2Vzc2lvbiA9IG5ldyBTZXNzaW9uTW9kZWwoc2Vzc2lvbiwgcmVuZGVyZXIsIHNlc3Npb25JZCwgY29tcG9uZW50LnBhcmVudFNlc3Npb25JZCwgc291cmNlKTtcbiAgICAgICAgdGhpcy5zZXNzaW9ucy5wdXNoKG5ld1Nlc3Npb24pO1xuICAgICAgICByZXR1cm4gbmV3U2Vzc2lvbjtcbiAgICB9XG5cbiAgICByZW1vdmVTZXNzaW9uKHNlc3Npb25JZDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZXNzaW9ucy5maW5kSW5kZXgoeCA9PiB4LnNlc3Npb25JZCA9PT0gc2Vzc2lvbklkKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uc1tpbmRleF0uc2Vzc2lvbi5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbnNbaW5kZXhdLnJlbmRlcmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZXNzaW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHNldE1haW5TZXNzaW9uQXNDdXJyZW50KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tYWluU2Vzc2lvbi5zZXNzaW9uSWQgPT09IHRoaXMuY3VycmVudFNlc3Npb24uc2Vzc2lvbklkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2dnbGVFZGdlRWRpdE1vZGUoKTtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50U2Vzc2lvbih0aGlzLm1haW5TZXNzaW9uKTtcbiAgICB9XG5cbiAgICBzZXRDdXN0b21TZXNzaW9uQXNDdXJyZW50KHNlc3Npb25JZDogbnVtYmVyLCBlZGdlRWRpdGluZ1BhZ2U6IG51bWJlciB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmIChzZXNzaW9uSWQgPT09IHRoaXMuY3VycmVudFNlc3Npb24uc2Vzc2lvbklkKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLnNvdXJjZS5lZGdlRWRpdFBhZ2UgPSBlZGdlRWRpdGluZ1BhZ2U7XG4gICAgICAgICAgICAodGhpcy5tYWluU2Vzc2lvbi5yZW5kZXJlciBhcyBWaXJ0dWFsUmVuZGVyZXIpLnJlbmRlcmVyLnRleHRMYXllci5lZGdlRWRpdGluZ1BhZ2VVcGRhdGVkKGVkZ2VFZGl0aW5nUGFnZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2dnbGVFZGdlRWRpdE1vZGUoZWRnZUVkaXRpbmdQYWdlKTtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50U2Vzc2lvbkJ5SWQoc2Vzc2lvbklkKTtcbiAgICB9XG5cbiAgICBzZXRUYXJnZXRlZFNlc3Npb25Bc0N1cnJlbnQodGFyZ2V0czogVGFyZ2V0TW9kZWxbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXRlZFNlc3Npb24gPSB0aGlzLmdldFRhcmdldGVkU2Vzc2lvbih0YXJnZXRzKTtcbiAgICAgICAgaWYgKHRhcmdldGVkU2Vzc2lvbi5zZXNzaW9uSWQgPT09IHRoaXMuY3VycmVudFNlc3Npb24uc2Vzc2lvbklkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnMuZmluZCh4ID0+IHguc2Vzc2lvbklkID09PSB0YXJnZXRlZFNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgY29uc3QgZWRnZUVkaXRQYWdlID0gdGFyZ2V0cy5sZW5ndGggPyB0YXJnZXRzW3RhcmdldHMubGVuZ3RoIC0gMV0uZWRnZUVkaXRQYWdlIDogbnVsbDtcbiAgICAgICAgdGhpcy50b2dnbGVFZGdlRWRpdE1vZGUoZWRnZUVkaXRQYWdlKTtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50U2Vzc2lvbihzZXNzaW9uKTtcbiAgICB9XG5cbiAgICBzZXRDdXJyZW50U2Vzc2lvbkJ5SWQoc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlc3Npb25zLmZpbmRJbmRleCh4ID0+IHguc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgICAgICB0aGlzLnNldEN1cnJlbnRTZXNzaW9uKHRoaXMuc2Vzc2lvbnNbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBzZXRDdXJyZW50U2Vzc2lvbihzZXNzaW9uOiBTZXNzaW9uTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U2Vzc2lvbi5yZW5kZXJlci5oaWRlQ3Vyc29yKCk7XG4gICAgICAgIHRoaXMuY3VycmVudFNlc3Npb24ucmVuZGVyZXIudXBkYXRlU2VsZWN0aW9uKHRoaXMuc2VsZWN0aW9uLnJhbmdlKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U2Vzc2lvbiA9IHNlc3Npb247XG4gICAgICAgIHRoaXMuY3VycmVudFNlc3Npb24ucmVuZGVyZXIuc2hvd0N1cnNvcigpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLnNvdXJjZS5lZGdlRWRpdFBhZ2UgPSB0aGlzLmVkZ2VFZGl0aW5nUGFnZTtcbiAgICB9XG5cbiAgICBnZXRTZXNzaW9uKHNlc3Npb25JZDogbnVtYmVyKTogRWRpdFNlc3Npb24ge1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9ucy5maW5kKHggPT4geC5zZXNzaW9uSWQgPT09IHNlc3Npb25JZCk7XG4gICAgICAgIHJldHVybiBzZXNzaW9uLnNlc3Npb247XG4gICAgfVxuXG4gICAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbjogU2VsZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIGNsZWFyQWxsU2Vzc2lvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbnMuZm9yRWFjaChzZXNzaW9uID0+IHtcbiAgICAgICAgICAgIHNlc3Npb24uc2Vzc2lvbi5kZXN0cm95KCk7XG4gICAgICAgICAgICBzZXNzaW9uLnJlbmRlcmVyLmRlc3Ryb3koKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbnMgPSBbXTtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50U2Vzc2lvblRhcmdldHMoKTogVGFyZ2V0TW9kZWxbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRhcmdldHModGhpcy5jdXJyZW50U2Vzc2lvbik7XG4gICAgfVxuXG4gICAgZ2V0VGFyZ2V0cyhzZXNzaW9uOiBTZXNzaW9uTW9kZWwpOiBUYXJnZXRNb2RlbFtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBUYXJnZXRNb2RlbFtdID0gW107XG4gICAgICAgIGxldCBwYXJlbnRTZXNzaW9uID0gdGhpcy5zZXNzaW9ucy5maW5kKHggPT4geC5zZXNzaW9uSWQgPT09IHNlc3Npb24ucGFyZW50U2Vzc2lvbklkKTtcbiAgICAgICAgd2hpbGUgKHBhcmVudFNlc3Npb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHNlc3Npb24uc291cmNlLmdldFRhcmdldCgpO1xuICAgICAgICAgICAgcmVzdWx0LnNwbGljZSgwLCAwLCB0YXJnZXQpO1xuICAgICAgICAgICAgc2Vzc2lvbiA9IHBhcmVudFNlc3Npb247XG4gICAgICAgICAgICBwYXJlbnRTZXNzaW9uID0gdGhpcy5zZXNzaW9ucy5maW5kKHggPT4geC5zZXNzaW9uSWQgPT09IHBhcmVudFNlc3Npb24ucGFyZW50U2Vzc2lvbklkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldEVkZ2VUYXJnZXQoc2Vzc2lvbklkOiBudW1iZXIpOiBUYXJnZXRNb2RlbCB8IG51bGwge1xuICAgICAgICBsZXQgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnMuZmluZCh4ID0+IHguc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgICAgICBsZXQgcGFyZW50U2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnMuZmluZCh4ID0+IHguc2Vzc2lvbklkID09PSBzZXNzaW9uLnBhcmVudFNlc3Npb25JZCk7XG4gICAgICAgIHdoaWxlIChwYXJlbnRTZXNzaW9uKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBzZXNzaW9uLnNvdXJjZS5nZXRUYXJnZXQoKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXQudHlwZSA9PT0gVGFyZ2V0VHlwZS5FZGdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2Vzc2lvbiA9IHBhcmVudFNlc3Npb247XG4gICAgICAgICAgICBwYXJlbnRTZXNzaW9uID0gdGhpcy5zZXNzaW9ucy5maW5kKHggPT4geC5zZXNzaW9uSWQgPT09IHBhcmVudFNlc3Npb24ucGFyZW50U2Vzc2lvbklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldFRhcmdldGVkU2Vzc2lvbih0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogRWRpdFNlc3Npb24ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5tYWluU2Vzc2lvbi5zZXNzaW9uO1xuICAgICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldC50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBUYXJnZXRUeXBlLkRvY3VtZW50OlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFRhcmdldFR5cGUuVGFibGVDZWxsOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gcmVzdWx0LmN1c3RvbUNvbXBvbmVudHMudGFibGVzLmZpbmQoeCA9PiB4Lmluc3RhbmNlLmNvbnRlbnQuaW5zZXJ0SW5kZXggPT09IHRhcmdldC50YWJsZUNlbGwuaW5zZXJ0SW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0YWJsZS5pbnN0YW5jZS5nZXRDZWxsU2Vzc2lvbih0YXJnZXQudGFibGVDZWxsLnJvdywgdGFyZ2V0LnRhYmxlQ2VsbC5jb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBUYXJnZXRUeXBlLkVkZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWRnZSA9IHJlc3VsdC5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmdldENvbXBvbmVudEJ5UGFnZVR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZWRnZURhdGEucGFnZVR5cGUgYXMgUGFnZVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZWRnZURhdGEudHlwZSBhcyBFZGdlVHlwZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBlZGdlLmluc3RhbmNlLmVkZ2VTZXNzaW9uLnNlc3Npb247XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRvZ2dsZUVkZ2VFZGl0TW9kZShlZGdlRWRpdGluZ1BhZ2U6IG51bWJlciB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRnZUVkaXRpbmdQYWdlID0gZWRnZUVkaXRpbmdQYWdlO1xuICAgICAgICBpZiAoIXRoaXMubWFpblNlc3Npb24uc2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1haW5TZXNzaW9uLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy50b2dnbGVFZGl0TW9kZSghIXRoaXMuZWRnZUVkaXRpbmdQYWdlKTtcbiAgICAgICAgKHRoaXMubWFpblNlc3Npb24ucmVuZGVyZXIgYXMgVmlydHVhbFJlbmRlcmVyKS5yZW5kZXJlci50ZXh0TGF5ZXIuZWRnZUVkaXRpbmdQYWdlVXBkYXRlZChlZGdlRWRpdGluZ1BhZ2UpO1xuICAgIH1cbn1cbiJdfQ==
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVndWxhdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvZXhlY3V0aW9uL3JlZ3VsYXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHL0UsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDL0csT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBRTFGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUl0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2xFLE9BQU8sRUFB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QUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFO1lBQ2xELE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQTRCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM5RyxDQUFDOytHQXRSUSxnQkFBZ0I7bUhBQWhCLGdCQUFnQjs7NEZBQWhCLGdCQUFnQjtrQkFENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ2VsbFNlc3Npb25Tb3VyY2VNb2RlbCB9IGZyb20gJy4vdGFyZ2V0aW5nL2NlbGwtc2Vzc2lvbi1zb3VyY2UubW9kZWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL3NlcnZpY2VzL2NvbXBvbmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbUNvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9zaGFyZWQvc2VydmljZXMvY3VzdG9tLWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBERUZBVUxUX0VER0VfTUFYX0hFSUdIVF9NVUxUSVBMSUVSLCBERUZBVUxUX1RPT0xCQVJfU1RZTEVTIH0gZnJvbSAnLi4vY29udGVudC9jb25zdGFudHMvZWRpdG9yLmNvbnN0JztcbmltcG9ydCB7IERpc3BsYXlEYXRhIH0gZnJvbSAnLi4vY29udGVudC9kaXNwbGF5LWRhdGEvZGlzcGxheS1kYXRhJztcbmltcG9ydCB7IERvY3VtZW50SW5mbyB9IGZyb20gJy4uL2NvbnRlbnQvY29uc3RhbnRzL2RvY3VtZW50LWluZm8uY29uc3QnO1xuaW1wb3J0IHsgRG9jeE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9kb2N4Lm1vZGVsJztcbmltcG9ydCB7IEVkZ2VzIH0gZnJvbSAnLi4vY29tcG9uZW50cy9lZGdlcy9lZGdlcyc7XG5pbXBvcnQgeyBFZGdlU2Vzc2lvblNvdXJjZU1vZGVsIH0gZnJvbSAnLi90YXJnZXRpbmcvZWRnZS1zZXNzaW9uLXNvdXJjZS5tb2RlbCc7XG5pbXBvcnQgeyBFZGdlVHlwZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRnZXMvZWRnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgRWRpdG9yU2VydmljZSB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2VkaXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IEVkaXRTZXNzaW9uIH0gZnJvbSAnLi9lZGl0LnNlc3Npb24nO1xuaW1wb3J0IHsgR2VuZXJhbFByb3BlcnRpZXNNb2RlbCB9IGZyb20gJy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL2dlbmVyYWwtcHJvcGVydGllcy5tb2RlbCc7XG5pbXBvcnQgeyBJQ3VzdG9tQ29tcG9uZW50cyB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL2N1c3RvbS1jb21wb25lbnRzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYWluU2Vzc2lvblNvdXJjZU1vZGVsIH0gZnJvbSAnLi90YXJnZXRpbmcvbWFpbi1zZXNzaW9uLXNvdXJjZS5tb2RlbCc7XG5pbXBvcnQgeyBNYXJnaW5Nb2RlbCB9IGZyb20gJy4uL2NvbnRlbnQvbWFyZ2luLm1vZGVsJztcbmltcG9ydCB7IE5vZGVyRWRnZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRnZXMvZWRnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm9kZXJUYWJsZUNlbGxDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL3RhYmxlL2NvbXBvbmVudHMvdGFibGUtY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFnZVR5cGUgfSBmcm9tICcuLi9jb21wb25lbnRzL2VkZ2VzL3BhZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IFJlbmRlcmVyIH0gZnJvbSAnLi4vZGlzcGxheS9yZW5kZXJlcic7XG5pbXBvcnQgeyBTY2FsaW5nSGVscGVyIH0gZnJvbSAnLi4vY29udGVudC9oZWxwZXJzL3NjYWxpbmcuaGVscGVyJztcbmltcG9ydCB7IFNjcm9sbEJhciB9IGZyb20gJy4uL2dhZGdldHMvc2Nyb2xsYmFyJztcbmltcG9ydCB7IFNlbGVjdGlvbiB9IGZyb20gJy4uL3Bvc2l0aW9uaW5nL3NlbGVjdGlvbic7XG5pbXBvcnQgeyBTZXNzaW9uTW9kZWwgfSBmcm9tICcuL3RhcmdldGluZy9zZXNzaW9uLm1vZGVsJztcbmltcG9ydCB7IFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7IFRhcmdldE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YXJnZXQubW9kZWwnO1xuaW1wb3J0IHsgVGFyZ2V0VHlwZSB9IGZyb20gJy4uL29wZXJhdGlvbnMvZW51bXMvdGFyZ2V0LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBWaXJ0dWFsUmVuZGVyZXIgfSBmcm9tICcuLi9kaXNwbGF5L3ZpcnR1YWwucmVuZGVyZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVndWxhdG9yU2VydmljZSB7XG4gICAgbWFpblNlc3Npb246IFNlc3Npb25Nb2RlbDtcblxuICAgIHNlc3Npb25zOiBTZXNzaW9uTW9kZWxbXSA9IFtdO1xuXG4gICAgY3VycmVudFNlc3Npb246IFNlc3Npb25Nb2RlbDtcblxuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uO1xuXG4gICAgc2Vzc2lvbklkSW5jcmVtZW50ID0gMDtcblxuICAgIGVkZ2VFZGl0aW5nUGFnZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjdXN0b21Db250ZW50U2VydmljZTogQ3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWRpdG9yU2VydmljZTogRWRpdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb21wb25lbnRTZXJ2aWNlOiBDb21wb25lbnRTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgYWRkTWFpblNlc3Npb24obW9kZWw6IERvY3hNb2RlbCwgcGFnZVdpZHRoOiBudW1iZXIsIHNjYWxpbmdSYXRpbzogbnVtYmVyLCBjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlc3Npb25JZCA9ICsrdGhpcy5zZXNzaW9uSWRJbmNyZW1lbnQ7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBuZXcgR2VuZXJhbFByb3BlcnRpZXNNb2RlbCh7XG4gICAgICAgICAgICBudW1iZXJpbmdzOiBtb2RlbC5udW1iZXJpbmdzLFxuICAgICAgICAgICAgZGVmYXVsdFRhYldpZHRoOiBTY2FsaW5nSGVscGVyLnNjYWxlKG1vZGVsLmRlZmF1bHRUYWJXaWR0aCwgc2NhbGluZ1JhdGlvKSxcbiAgICAgICAgICAgIG1heEVkZ2VIZWlnaHQ6IG1vZGVsLnBhZ2VIZWlnaHQgKiBERUZBVUxUX0VER0VfTUFYX0hFSUdIVF9NVUxUSVBMSUVSLFxuICAgICAgICAgICAgc2NhbGluZ1JhdGlvLFxuICAgICAgICAgICAgbnVtYmVyaW5nSW5mbzoge31cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhZ2VNYXJnaW4gPSBuZXcgTWFyZ2luTW9kZWwoe1xuICAgICAgICAgICAgbGVmdDogU2NhbGluZ0hlbHBlci5zY2FsZShtb2RlbC5tYXJnaW5MZWZ0LCBzY2FsaW5nUmF0aW8pLFxuICAgICAgICAgICAgcmlnaHQ6IFNjYWxpbmdIZWxwZXIuc2NhbGUobW9kZWwubWFyZ2luUmlnaHQsIHNjYWxpbmdSYXRpbyksXG4gICAgICAgICAgICB0b3A6IG1vZGVsLm1hcmdpblRvcCA+IDAgPyBtb2RlbC5tYXJnaW5Ub3AgOiAwLFxuICAgICAgICAgICAgYm90dG9tOiBtb2RlbC5tYXJnaW5Cb3R0b20gPiAwID8gbW9kZWwubWFyZ2luQm90dG9tIDogMCxcbiAgICAgICAgICAgIGhlYWRlcjogbW9kZWwubWFyZ2luSGVhZGVyID4gMCA/IG1vZGVsLm1hcmdpbkhlYWRlciA6IDAsXG4gICAgICAgICAgICBmb290ZXI6IG1vZGVsLm1hcmdpbkZvb3RlciA+IDAgPyBtb2RlbC5tYXJnaW5Gb290ZXIgOiAwXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlZGdlcyA9IG5ldyBFZGdlcyh0aGlzLmNvbXBvbmVudFNlcnZpY2UsIG1vZGVsLmhlYWRlcnMsIG1vZGVsLmZvb3RlcnMsIHBhZ2VNYXJnaW4sIHBhZ2VXaWR0aCwgc2Vzc2lvbklkLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgcHJvcGVydGllcy5udW1iZXJpbmdJbmZvID0ge307XG4gICAgICAgIGNvbnN0IGN1c3RvbUNvbXBvbmVudHMgPSB7IGltYWdlczogW10sIHRhYmxlczogW10sIHRhYnM6IFtdLCBjdXN0b21FbGVtZW50czogW10sIGVkZ2VzOiBlZGdlcyB9IGFzIElDdXN0b21Db21wb25lbnRzO1xuICAgICAgICBjb25zdCBkaXNwbGF5RGF0YSA9IG5ldyBEaXNwbGF5RGF0YShcbiAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgIHBhZ2VNYXJnaW4sXG4gICAgICAgICAgICBEb2N1bWVudEluZm8ucGFnZXNTcGFjZSxcbiAgICAgICAgICAgIHBhZ2VXaWR0aCxcbiAgICAgICAgICAgIG1vZGVsLnBhZ2VIZWlnaHQsXG4gICAgICAgICAgICBjdXN0b21Db21wb25lbnRzLFxuICAgICAgICAgICAgdGhpcy5jdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzY3JvbGxCYXIgPSBuZXcgU2Nyb2xsQmFyKGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBtYWluU2Vzc2lvbiA9IG5ldyBFZGl0U2Vzc2lvbihcbiAgICAgICAgICAgIGRpc3BsYXlEYXRhLFxuICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgdGhpcy5jdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLFxuICAgICAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLFxuICAgICAgICAgICAgY3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgICAgICdtYWluJyxcbiAgICAgICAgICAgIHNjcm9sbEJhclxuICAgICAgICApO1xuICAgICAgICBkaXNwbGF5RGF0YS51cGRhdGVOZXh0TGluZUluZGV4ZXMoMCwgZGlzcGxheURhdGEucGFyYWdyYXBocy5sZW5ndGggLSAxKTtcbiAgICAgICAgY29uc3QgdmlydHVhbFJlbmRlcmVyID0gbmV3IFZpcnR1YWxSZW5kZXJlcihjb250YWluZXIubmF0aXZlRWxlbWVudCwgdGhpcy5lZGl0b3JTZXJ2aWNlLCBtYWluU2Vzc2lvbiwgc2Nyb2xsQmFyKTtcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnN0eWxlcyA9IERFRkFVTFRfVE9PTEJBUl9TVFlMRVMoKTtcbiAgICAgICAgdGhpcy5tYWluU2Vzc2lvbiA9IG5ldyBTZXNzaW9uTW9kZWwobWFpblNlc3Npb24sIHZpcnR1YWxSZW5kZXJlciwgc2Vzc2lvbklkLCBudWxsLCBuZXcgTWFpblNlc3Npb25Tb3VyY2VNb2RlbCgpKTtcbiAgICAgICAgdGhpcy5zZXNzaW9ucy5wdXNoKHRoaXMubWFpblNlc3Npb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uID0gdGhpcy5tYWluU2Vzc2lvbjtcbiAgICB9XG5cbiAgICBhZGRDZWxsU2Vzc2lvbihcbiAgICAgICAgdGFibGU6IFRhYmxlTW9kZWwsXG4gICAgICAgIG1hcmdpbnM6IE1hcmdpbk1vZGVsLFxuICAgICAgICBjb21wb25lbnQ6IE5vZGVyVGFibGVDZWxsQ29tcG9uZW50LFxuICAgICAgICBwcm9wZXJ0aWVzOiBHZW5lcmFsUHJvcGVydGllc01vZGVsXG4gICAgKTogU2Vzc2lvbk1vZGVsIHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gKyt0aGlzLnNlc3Npb25JZEluY3JlbWVudDtcbiAgICAgICAgY29uc3QgY3VzdG9tQ29tcG9uZW50cyA9IHsgaW1hZ2VzOiBbXSwgdGFibGVzOiBbXSwgdGFiczogW10sIGN1c3RvbUVsZW1lbnRzOiBbXSwgZWRnZXM6IG51bGwgfSBhcyBJQ3VzdG9tQ29tcG9uZW50cztcbiAgICAgICAgY29uc3QgZGlzcGxheURhdGEgPSBuZXcgRGlzcGxheURhdGEoXG4gICAgICAgICAgICBjb21wb25lbnQuY2VsbCxcbiAgICAgICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICBtYXJnaW5zLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGNvbXBvbmVudC53aWR0aCxcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBjdXN0b21Db21wb25lbnRzLFxuICAgICAgICAgICAgdGhpcy5jdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gbmV3IEVkaXRTZXNzaW9uKFxuICAgICAgICAgICAgZGlzcGxheURhdGEsXG4gICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICB0aGlzLmN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICAgICAgY29tcG9uZW50LmNlbGwsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbixcbiAgICAgICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UsXG4gICAgICAgICAgICBjdXN0b21Db21wb25lbnRzLFxuICAgICAgICAgICAgJ2NlbGwnXG4gICAgICAgICk7XG4gICAgICAgIGRpc3BsYXlEYXRhLmNvbnRlbnRXaWR0aCA9IGRpc3BsYXlEYXRhLmNvbnRlbnRXaWR0aCA9PT0gMCA/IDEgOiBkaXNwbGF5RGF0YS5jb250ZW50V2lkdGg7XG4gICAgICAgIGRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcygwLCBkaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLmxlbmd0aCAtIDEpO1xuICAgICAgICBjb25zdCByZW5kZXJlciA9IG5ldyBSZW5kZXJlcihjb21wb25lbnQuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIHRoaXMuZWRpdG9yU2VydmljZSwgc2Vzc2lvbik7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IG5ldyBDZWxsU2Vzc2lvblNvdXJjZU1vZGVsKHRhYmxlLCBjb21wb25lbnQpO1xuICAgICAgICBjb25zdCBuZXdTZXNzaW9uID0gbmV3IFNlc3Npb25Nb2RlbChzZXNzaW9uLCByZW5kZXJlciwgc2Vzc2lvbklkLCBjb21wb25lbnQucGFyZW50U2Vzc2lvbklkLCBzb3VyY2UpO1xuICAgICAgICBuZXdTZXNzaW9uLnJlbmRlcmVyLnVwZGF0ZVRleHQoKTtcbiAgICAgICAgdGhpcy5zZXNzaW9ucy5wdXNoKG5ld1Nlc3Npb24pO1xuICAgICAgICByZXR1cm4gbmV3U2Vzc2lvbjtcbiAgICB9XG5cbiAgICBhZGRFZGdlU2Vzc2lvbihjb21wb25lbnQ6IE5vZGVyRWRnZUNvbXBvbmVudCk6IFNlc3Npb25Nb2RlbCB7XG4gICAgICAgIGNvbnN0IHNlc3Npb25JZCA9ICsrdGhpcy5zZXNzaW9uSWRJbmNyZW1lbnQ7XG4gICAgICAgIGNvbnN0IGN1c3RvbUNvbXBvbmVudHMgPSB7IGltYWdlczogW10sIHRhYmxlczogW10sIHRhYnM6IFtdLCBjdXN0b21FbGVtZW50czogW10sIGVkZ2VzOiBudWxsIH0gYXMgSUN1c3RvbUNvbXBvbmVudHM7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlEYXRhID0gbmV3IERpc3BsYXlEYXRhKFxuICAgICAgICAgICAgY29tcG9uZW50Lm1vZGVsLFxuICAgICAgICAgICAgY29tcG9uZW50LmdlbmVyYWxQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgY29tcG9uZW50Lm1hcmdpbnMsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgY29tcG9uZW50LndpZHRoLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGN1c3RvbUNvbXBvbmVudHMsXG4gICAgICAgICAgICB0aGlzLmN1c3RvbUNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgRWRpdFNlc3Npb24oXG4gICAgICAgICAgICBkaXNwbGF5RGF0YSxcbiAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tQ29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICBjb21wb25lbnQubW9kZWwsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbixcbiAgICAgICAgICAgIGNvbXBvbmVudC5nZW5lcmFsUHJvcGVydGllcyxcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZSxcbiAgICAgICAgICAgIGN1c3RvbUNvbXBvbmVudHMsXG4gICAgICAgICAgICAnZWRnZSdcbiAgICAgICAgKTtcbiAgICAgICAgZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKDAsIGRpc3BsYXlEYXRhLnBhcmFncmFwaHMubGVuZ3RoIC0gMSk7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IFJlbmRlcmVyKGNvbXBvbmVudC5jb250YWluZXIubmF0aXZlRWxlbWVudCwgdGhpcy5lZGl0b3JTZXJ2aWNlLCBzZXNzaW9uKTtcbiAgICAgICAgY29uc3Qgc291cmNlID0gbmV3IEVkZ2VTZXNzaW9uU291cmNlTW9kZWwoY29tcG9uZW50Lm1vZGVsLnBhZ2VUeXBlIGFzIFBhZ2VUeXBlLCBjb21wb25lbnQudHlwZSk7XG4gICAgICAgIGNvbnN0IG5ld1Nlc3Npb24gPSBuZXcgU2Vzc2lvbk1vZGVsKHNlc3Npb24sIHJlbmRlcmVyLCBzZXNzaW9uSWQsIGNvbXBvbmVudC5wYXJlbnRTZXNzaW9uSWQsIHNvdXJjZSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbnMucHVzaChuZXdTZXNzaW9uKTtcbiAgICAgICAgcmV0dXJuIG5ld1Nlc3Npb247XG4gICAgfVxuXG4gICAgcmVtb3ZlU2Vzc2lvbihzZXNzaW9uSWQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2Vzc2lvbnMuZmluZEluZGV4KHggPT4geC5zZXNzaW9uSWQgPT09IHNlc3Npb25JZCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbnNbaW5kZXhdLnNlc3Npb24uZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlc3Npb25zW2luZGV4XS5yZW5kZXJlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBzZXRNYWluU2Vzc2lvbkFzQ3VycmVudCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubWFpblNlc3Npb24uc2Vzc2lvbklkID09PSB0aGlzLmN1cnJlbnRTZXNzaW9uLnNlc3Npb25JZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9nZ2xlRWRnZUVkaXRNb2RlKCk7XG4gICAgICAgIHRoaXMuc2V0Q3VycmVudFNlc3Npb24odGhpcy5tYWluU2Vzc2lvbik7XG4gICAgfVxuXG4gICAgc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChzZXNzaW9uSWQ6IG51bWJlciwgZWRnZUVkaXRpbmdQYWdlOiBudW1iZXIgfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAoc2Vzc2lvbklkID09PSB0aGlzLmN1cnJlbnRTZXNzaW9uLnNlc3Npb25JZCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2Vzc2lvbi5zb3VyY2UuZWRnZUVkaXRQYWdlID0gZWRnZUVkaXRpbmdQYWdlO1xuICAgICAgICAgICAgKHRoaXMubWFpblNlc3Npb24ucmVuZGVyZXIgYXMgVmlydHVhbFJlbmRlcmVyKS5yZW5kZXJlci50ZXh0TGF5ZXIuZWRnZUVkaXRpbmdQYWdlVXBkYXRlZChlZGdlRWRpdGluZ1BhZ2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9nZ2xlRWRnZUVkaXRNb2RlKGVkZ2VFZGl0aW5nUGFnZSk7XG4gICAgICAgIHRoaXMuc2V0Q3VycmVudFNlc3Npb25CeUlkKHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgc2V0VGFyZ2V0ZWRTZXNzaW9uQXNDdXJyZW50KHRhcmdldHM6IFRhcmdldE1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ZWRTZXNzaW9uID0gdGhpcy5nZXRUYXJnZXRlZFNlc3Npb24odGFyZ2V0cyk7XG4gICAgICAgIGlmICh0YXJnZXRlZFNlc3Npb24uc2Vzc2lvbklkID09PSB0aGlzLmN1cnJlbnRTZXNzaW9uLnNlc3Npb25JZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb25zLmZpbmQoeCA9PiB4LnNlc3Npb25JZCA9PT0gdGFyZ2V0ZWRTZXNzaW9uLnNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IGVkZ2VFZGl0UGFnZSA9IHRhcmdldHMubGVuZ3RoID8gdGFyZ2V0c1t0YXJnZXRzLmxlbmd0aCAtIDFdLmVkZ2VFZGl0UGFnZSA6IG51bGw7XG4gICAgICAgIHRoaXMudG9nZ2xlRWRnZUVkaXRNb2RlKGVkZ2VFZGl0UGFnZSk7XG4gICAgICAgIHRoaXMuc2V0Q3VycmVudFNlc3Npb24oc2Vzc2lvbik7XG4gICAgfVxuXG4gICAgc2V0Q3VycmVudFNlc3Npb25CeUlkKHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZXNzaW9ucy5maW5kSW5kZXgoeCA9PiB4LnNlc3Npb25JZCA9PT0gc2Vzc2lvbklkKTtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50U2Vzc2lvbih0aGlzLnNlc3Npb25zW2luZGV4XSk7XG4gICAgfVxuXG4gICAgc2V0Q3VycmVudFNlc3Npb24oc2Vzc2lvbjogU2Vzc2lvbk1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuY3VycmVudFNlc3Npb24ucmVuZGVyZXIuaGlkZUN1cnNvcigpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLnJlbmRlcmVyLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGlvbi5yYW5nZSk7XG4gICAgICAgIHRoaXMuY3VycmVudFNlc3Npb24gPSBzZXNzaW9uO1xuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLnJlbmRlcmVyLnNob3dDdXJzb3IoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U2Vzc2lvbi5zb3VyY2UuZWRnZUVkaXRQYWdlID0gdGhpcy5lZGdlRWRpdGluZ1BhZ2U7XG4gICAgfVxuXG4gICAgZ2V0U2Vzc2lvbihzZXNzaW9uSWQ6IG51bWJlcik6IEVkaXRTZXNzaW9uIHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnMuZmluZCh4ID0+IHguc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgICAgICByZXR1cm4gc2Vzc2lvbi5zZXNzaW9uO1xuICAgIH1cblxuICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICBjbGVhckFsbFNlc3Npb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlc3Npb25zLmZvckVhY2goc2Vzc2lvbiA9PiB7XG4gICAgICAgICAgICBzZXNzaW9uLnNlc3Npb24uZGVzdHJveSgpO1xuICAgICAgICAgICAgc2Vzc2lvbi5yZW5kZXJlci5kZXN0cm95KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlc3Npb25zID0gW107XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudFNlc3Npb25UYXJnZXRzKCk6IFRhcmdldE1vZGVsW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUYXJnZXRzKHRoaXMuY3VycmVudFNlc3Npb24pO1xuICAgIH1cblxuICAgIGdldFRhcmdldHMoc2Vzc2lvbjogU2Vzc2lvbk1vZGVsKTogVGFyZ2V0TW9kZWxbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogVGFyZ2V0TW9kZWxbXSA9IFtdO1xuICAgICAgICBsZXQgcGFyZW50U2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnMuZmluZCh4ID0+IHguc2Vzc2lvbklkID09PSBzZXNzaW9uLnBhcmVudFNlc3Npb25JZCk7XG4gICAgICAgIHdoaWxlIChwYXJlbnRTZXNzaW9uKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBzZXNzaW9uLnNvdXJjZS5nZXRUYXJnZXQoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zcGxpY2UoMCwgMCwgdGFyZ2V0KTtcbiAgICAgICAgICAgIHNlc3Npb24gPSBwYXJlbnRTZXNzaW9uO1xuICAgICAgICAgICAgcGFyZW50U2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnMuZmluZCh4ID0+IHguc2Vzc2lvbklkID09PSBwYXJlbnRTZXNzaW9uLnBhcmVudFNlc3Npb25JZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBnZXRFZGdlVGFyZ2V0KHNlc3Npb25JZDogbnVtYmVyKTogVGFyZ2V0TW9kZWwgfCBudWxsIHtcbiAgICAgICAgbGV0IHNlc3Npb24gPSB0aGlzLnNlc3Npb25zLmZpbmQoeCA9PiB4LnNlc3Npb25JZCA9PT0gc2Vzc2lvbklkKTtcbiAgICAgICAgbGV0IHBhcmVudFNlc3Npb24gPSB0aGlzLnNlc3Npb25zLmZpbmQoeCA9PiB4LnNlc3Npb25JZCA9PT0gc2Vzc2lvbi5wYXJlbnRTZXNzaW9uSWQpO1xuICAgICAgICB3aGlsZSAocGFyZW50U2Vzc2lvbikge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gc2Vzc2lvbi5zb3VyY2UuZ2V0VGFyZ2V0KCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0LnR5cGUgPT09IFRhcmdldFR5cGUuRWRnZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlc3Npb24gPSBwYXJlbnRTZXNzaW9uO1xuICAgICAgICAgICAgcGFyZW50U2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnMuZmluZCh4ID0+IHguc2Vzc2lvbklkID09PSBwYXJlbnRTZXNzaW9uLnBhcmVudFNlc3Npb25JZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRUYXJnZXRlZFNlc3Npb24odGFyZ2V0czogVGFyZ2V0TW9kZWxbXSk6IEVkaXRTZXNzaW9uIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMubWFpblNlc3Npb24uc2Vzc2lvbjtcbiAgICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQudHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgVGFyZ2V0VHlwZS5Eb2N1bWVudDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBUYXJnZXRUeXBlLlRhYmxlQ2VsbDoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJsZSA9IHJlc3VsdC5jdXN0b21Db21wb25lbnRzLnRhYmxlcy5maW5kKHggPT4geC5pbnN0YW5jZS5jb250ZW50Lmluc2VydEluZGV4ID09PSB0YXJnZXQudGFibGVDZWxsLmluc2VydEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGFibGUuaW5zdGFuY2UuZ2V0Q2VsbFNlc3Npb24odGFyZ2V0LnRhYmxlQ2VsbC5yb3csIHRhcmdldC50YWJsZUNlbGwuY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgVGFyZ2V0VHlwZS5FZGdlOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2UgPSByZXN1bHQuY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5nZXRDb21wb25lbnRCeVBhZ2VUeXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmVkZ2VEYXRhLnBhZ2VUeXBlIGFzIFBhZ2VUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmVkZ2VEYXRhLnR5cGUgYXMgRWRnZVR5cGVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZWRnZS5pbnN0YW5jZS5lZGdlU2Vzc2lvbi5zZXNzaW9uO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0b2dnbGVFZGdlRWRpdE1vZGUoZWRnZUVkaXRpbmdQYWdlOiBudW1iZXIgfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkZ2VFZGl0aW5nUGFnZSA9IGVkZ2VFZGl0aW5nUGFnZTtcbiAgICAgICAgaWYgKCF0aGlzLm1haW5TZXNzaW9uLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tYWluU2Vzc2lvbi5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMudG9nZ2xlRWRpdE1vZGUoISF0aGlzLmVkZ2VFZGl0aW5nUGFnZSk7XG4gICAgICAgICh0aGlzLm1haW5TZXNzaW9uLnJlbmRlcmVyIGFzIFZpcnR1YWxSZW5kZXJlcikucmVuZGVyZXIudGV4dExheWVyLmVkZ2VFZGl0aW5nUGFnZVVwZGF0ZWQoZWRnZUVkaXRpbmdQYWdlKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,13 @@
1
+ import { ParagraphStyleModel } from '../../../models/generated/paragraph-style.model';
2
+ export class NumberingParagraphStyleModel extends ParagraphStyleModel {
3
+ constructor(fields) {
4
+ super();
5
+ this.numberingType = null;
6
+ this.numberingLevelsStyles = null;
7
+ if (!fields) {
8
+ return;
9
+ }
10
+ Object.assign(this, fields);
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyaW5nLXBhcmFncmFwaC1zdHlsZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9nYWRnZXRzL251bWJlcmluZy9udW1iZXJpbmctcGFyYWdyYXBoLXN0eWxlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRXRGLE1BQU0sT0FBTyw0QkFBNkIsU0FBUSxtQkFBbUI7SUFJakUsWUFBWSxNQUE4QztRQUN0RCxLQUFLLEVBQUUsQ0FBQztRQUpaLGtCQUFhLEdBQVEsSUFBSSxDQUFDO1FBQzFCLDBCQUFxQixHQUFXLElBQUksQ0FBQztRQUlqQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIE51bWJlcmluZ1BhcmFncmFwaFN0eWxlTW9kZWwgZXh0ZW5kcyBQYXJhZ3JhcGhTdHlsZU1vZGVsIHtcbiAgICBudW1iZXJpbmdUeXBlOiBhbnkgPSBudWxsO1xuICAgIG51bWJlcmluZ0xldmVsc1N0eWxlczogc3RyaW5nID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKGZpZWxkcz86IFBhcnRpYWw8TnVtYmVyaW5nUGFyYWdyYXBoU3R5bGVNb2RlbD4pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgZmllbGRzKTtcbiAgICB9XG59XG4iXX0=