@talrace/ngx-noder 0.0.8 → 0.0.10

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 (102) hide show
  1. package/esm2022/lib/apart-components/add-link-dialog/add-link-dialog.component.mjs +21 -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/editor-mobile-toolbar/editor-mobile-toolbar.component.mjs +2 -2
  6. package/esm2022/lib/apart-components/editor-toolbar/shared/toolbar-styles.helper.mjs +1 -8
  7. package/esm2022/lib/editor/components/edges/edge.component.mjs +2 -2
  8. package/esm2022/lib/editor/components/edges/edges.mjs +21 -2
  9. package/esm2022/lib/editor/components/image/input-handler/image-input.handler.mjs +18 -1
  10. package/esm2022/lib/editor/components/shared/services/custom-content.service.mjs +22 -56
  11. package/esm2022/lib/editor/components/table/components/table-cell.component.mjs +6 -6
  12. package/esm2022/lib/editor/components/table/components/table.component.mjs +13 -4
  13. package/esm2022/lib/editor/components/table/models/cell-data.model.mjs +3 -4
  14. package/esm2022/lib/editor/components/table/selection/table-selection.mjs +15 -5
  15. package/esm2022/lib/editor/content/constants/editor.const.mjs +9 -1
  16. package/esm2022/lib/editor/content/display-data/display-data.mjs +839 -0
  17. package/esm2022/lib/editor/content/display-data/general-properties.model.mjs +1 -1
  18. package/esm2022/lib/editor/content/display-data/models/paragraph-info.model.mjs +8 -0
  19. package/esm2022/lib/editor/content/display-data/paragraph.mjs +5 -1
  20. package/esm2022/lib/editor/content/display-data/text-line-info.mjs +2 -1
  21. package/esm2022/lib/editor/content/display-data/toolbar-styles.interface.mjs +1 -1
  22. package/esm2022/lib/editor/content/helpers/content-style.helper.mjs +12 -30
  23. package/esm2022/lib/editor/content/helpers/display-token.helper.mjs +62 -0
  24. package/esm2022/lib/editor/content/helpers/link.helper.mjs +6 -0
  25. package/esm2022/lib/editor/display/layers/cursor.layer.mjs +9 -8
  26. package/esm2022/lib/editor/display/layers/pages.layer.mjs +5 -5
  27. package/esm2022/lib/editor/display/layers/print.text.layer.mjs +2 -2
  28. package/esm2022/lib/editor/display/layers/selection.layer.mjs +15 -9
  29. package/esm2022/lib/editor/display/layers/text.layer.mjs +29 -32
  30. package/esm2022/lib/editor/display/print/print.renderer.mjs +8 -8
  31. package/esm2022/lib/editor/display/renderer.mjs +10 -10
  32. package/esm2022/lib/editor/display/rendering.helper.mjs +2 -4
  33. package/esm2022/lib/editor/display/virtual.renderer.mjs +5 -5
  34. package/esm2022/lib/editor/execution/edit.session.mjs +211 -754
  35. package/esm2022/lib/editor/execution/editor.mjs +119 -77
  36. package/esm2022/lib/editor/execution/helpers/format-style.helper.mjs +41 -32
  37. package/esm2022/lib/editor/execution/helpers/image.helpet.mjs +12 -0
  38. package/esm2022/lib/editor/execution/helpers/paragraph.helper.mjs +11 -3
  39. package/esm2022/lib/editor/execution/regulator.service.mjs +28 -20
  40. package/esm2022/lib/editor/gadgets/numbering/numbering-paragraph-style.model.mjs +13 -0
  41. package/esm2022/lib/editor/gadgets/numbering/numbering.helper.mjs +77 -10
  42. package/esm2022/lib/editor/gadgets/search/search.mjs +6 -6
  43. package/esm2022/lib/editor/interaction/editor.service.mjs +27 -6
  44. package/esm2022/lib/editor/interaction/input.handler.mjs +8 -5
  45. package/esm2022/lib/editor/interaction/mouse.handler.mjs +2 -1
  46. package/esm2022/lib/editor/operations/helpers/format-operations.helper.mjs +32 -2
  47. package/esm2022/lib/editor/operations/helpers/link-operations.helper.mjs +67 -14
  48. package/esm2022/lib/editor/operations/operations-helper.helper.mjs +27 -20
  49. package/esm2022/lib/editor/operations/save-commands.helper.mjs +2 -2
  50. package/esm2022/lib/editor/positioning/content.helper.mjs +15 -15
  51. package/esm2022/lib/editor/positioning/line-width.helper.mjs +5 -5
  52. package/esm2022/lib/editor/positioning/position.helper.mjs +34 -32
  53. package/esm2022/lib/editor/positioning/selection.mjs +42 -32
  54. package/esm2022/lib/editor/revision.helper.mjs +4 -3
  55. package/esm2022/lib/models/generated/link.model.mjs +1 -1
  56. package/esm2022/public-api.mjs +2 -1
  57. package/fesm2022/talrace-ngx-noder.mjs +3863 -3558
  58. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  59. package/lib/apart-components/add-link-dialog/add-link-dialog.component.d.ts +0 -1
  60. package/lib/apart-components/editor-toolbar/shared/toolbar-styles.helper.d.ts +0 -2
  61. package/lib/editor/components/image/input-handler/image-input.handler.d.ts +3 -0
  62. package/lib/editor/components/shared/services/custom-content.service.d.ts +3 -5
  63. package/lib/editor/components/table/components/table-cell.component.d.ts +1 -1
  64. package/lib/editor/components/table/components/table.component.d.ts +1 -0
  65. package/lib/editor/components/table/models/cell-data.model.d.ts +1 -1
  66. package/lib/editor/components/table/selection/table-selection.d.ts +2 -0
  67. package/lib/editor/content/constants/editor.const.d.ts +2 -0
  68. package/lib/editor/content/display-data/display-data.d.ts +103 -0
  69. package/lib/editor/content/display-data/general-properties.model.d.ts +5 -0
  70. package/lib/editor/content/display-data/models/paragraph-info.model.d.ts +9 -0
  71. package/lib/editor/content/display-data/paragraph.d.ts +1 -0
  72. package/lib/editor/content/display-data/text-line-info.d.ts +1 -0
  73. package/lib/editor/content/display-data/toolbar-styles.interface.d.ts +1 -1
  74. package/lib/editor/content/helpers/content-style.helper.d.ts +1 -2
  75. package/lib/editor/content/helpers/display-token.helper.d.ts +6 -0
  76. package/lib/editor/content/helpers/link.helper.d.ts +4 -0
  77. package/lib/editor/display/layers/text.layer.d.ts +2 -3
  78. package/lib/editor/display/print/print.renderer.d.ts +0 -2
  79. package/lib/editor/execution/edit.session.d.ts +12 -59
  80. package/lib/editor/execution/editor.d.ts +9 -6
  81. package/lib/editor/execution/helpers/format-style.helper.d.ts +2 -2
  82. package/lib/editor/execution/helpers/image.helpet.d.ts +4 -0
  83. package/lib/editor/execution/regulator.service.d.ts +1 -1
  84. package/lib/editor/gadgets/numbering/numbering-paragraph-style.model.d.ts +6 -0
  85. package/lib/editor/gadgets/numbering/numbering.helper.d.ts +10 -3
  86. package/lib/editor/interaction/editor.service.d.ts +12 -3
  87. package/lib/editor/operations/helpers/link-operations.helper.d.ts +6 -3
  88. package/lib/editor/positioning/content.helper.d.ts +6 -5
  89. package/lib/editor/positioning/position.helper.d.ts +3 -3
  90. package/lib/editor/positioning/selection.d.ts +3 -0
  91. package/lib/models/generated/link.model.d.ts +3 -1
  92. package/package.json +8 -8
  93. package/public-api.d.ts +1 -0
  94. package/src/_ngx-noder.theme.scss +31 -2
  95. package/src/styles.scss +0 -1
  96. package/esm2022/lib/editor/content/display-data/document.mjs +0 -134
  97. package/esm2022/lib/editor/content/display-data/pages.wrap.mjs +0 -226
  98. package/esm2022/lib/editor/execution/helpers/delta.helper.mjs +0 -18
  99. package/lib/editor/content/display-data/document.d.ts +0 -56
  100. package/lib/editor/content/display-data/pages.wrap.d.ts +0 -42
  101. package/lib/editor/execution/helpers/delta.helper.d.ts +0 -6
  102. package/src/scss/_fonts.scss +0 -3
@@ -121,7 +121,7 @@ export class SaveCommandsHelper {
121
121
  return new CommandModel({ commandType: CommandType.ResizeTableColumns, resizeTableColumns, targets });
122
122
  }
123
123
  static getApplyElementStyleCommand(applyElementStyle, targets) {
124
- return new CommandModel({ commandType: CommandType.ResizeTableColumns, applyElementStyle, targets });
124
+ return new CommandModel({ commandType: CommandType.ApplyElementStyle, applyElementStyle, targets });
125
125
  }
126
126
  }
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS1jb21tYW5kcy5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3Ivb3BlcmF0aW9ucy9zYXZlLWNvbW1hbmRzLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQU9sRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUU1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUV0RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFJM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDNUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFHdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBRXBH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LEtBQW1CLEVBQUUsT0FBc0I7UUFDdkUsT0FBTyxJQUFJLFlBQVksQ0FBQyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRU0sTUFBTSxDQUFDLDRCQUE0QixDQUFDLGtCQUEyQyxFQUFFLE9BQXNCO1FBQzFHLE9BQU8sSUFBSSxZQUFZLENBQUMsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUVNLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxpQkFBeUMsRUFBRSxPQUFzQjtRQUN2RyxPQUFPLElBQUksWUFBWSxDQUFDLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3pHLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkZE51bWJlcmluZ01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9hZGQtbnVtYmVyaW5nLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5RWxlbWVudFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LWVsZW1lbnQtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQXBwbHlJbWFnZVN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LWltYWdlLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5UGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvYXBwbHktcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5VGV4dFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LXRleHQtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQ29tbWFuZE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9jb21tYW5kLm1vZGVsJztcbmltcG9ydCB7IENvbW1hbmRUeXBlIH0gZnJvbSAnLi9lbnVtcy9jb21tYW5kLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBEZWxldGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvZGVsZXRlLm1vZGVsJztcbmltcG9ydCB7IEZvcm1hdE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9mb3JtYXQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0QnJlYWtNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWJyZWFrLm1vZGVsJztcbmltcG9ydCB7IEluc2VydEVsZW1lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWVsZW1lbnQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0SW1hZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWltYWdlLm1vZGVsJztcbmltcG9ydCB7IEluc2VydExpbmtNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWxpbmsubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0UGFyYWdyYXBoTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC1wYXJhZ3JhcGgubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0U3R5bGVkVGV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtc3R5bGVkLXRleHQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGFibGVDb2x1bW5zTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWJsZS1jb2x1bW5zLm1vZGVsJztcbmltcG9ydCB7IEluc2VydFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBJbnNlcnRUYWJsZVJvd3NNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LXRhYmxlLXJvd3MubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGFiTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWIubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtdGV4dC5tb2RlbCc7XG5pbXBvcnQgeyBOdW1iZXJpbmdMZXZlbE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9udW1iZXJpbmctbGV2ZWwubW9kZWwnO1xuaW1wb3J0IHsgUGFyYWdyYXBoTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3BhcmFncmFwaC5tb2RlbCc7XG5pbXBvcnQgeyBQYXJhZ3JhcGhTdHlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9wYXJhZ3JhcGgtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgUmVtb3ZlTnVtYmVyaW5nc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZW1vdmUtbnVtYmVyaW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBSZW1vdmVUYWJsZUNvbHVtbnNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVtb3ZlLXRhYmxlLWNvbHVtbnMubW9kZWwnO1xuaW1wb3J0IHsgUmVtb3ZlVGFibGVSb3dzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3JlbW92ZS10YWJsZS1yb3dzLm1vZGVsJztcbmltcG9ydCB7IFJlcGxhY2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVwbGFjZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXNpemVUYWJsZUNvbHVtbnNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzaXplLXRhYmxlLWNvbHVtbnMubW9kZWwnO1xuaW1wb3J0IHsgUmVzdG9yZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXN0b3JlLm1vZGVsJztcbmltcG9ydCB7IFJlc3RvcmVOdW1iZXJpbmdzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc3RvcmUtbnVtYmVyaW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlUGFyYWdyYXBoU3R5bGVzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc3RvcmUtcGFyYWdyYXBoLXN0eWxlcy5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlVGFibGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzdG9yZS10YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlVGV4dFN0eWxlc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXN0b3JlLXRleHQtc3R5bGVzLm1vZGVsJztcbmltcG9ydCB7IFRhcmdldE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YXJnZXQubW9kZWwnO1xuaW1wb3J0IHsgVGV4dFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RleHQtc3R5bGUubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgU2F2ZUNvbW1hbmRzSGVscGVyIHtcbiAgICBwdWJsaWMgc3RhdGljIGdldEFkZE51bWJlcmluZ0NvbW1hbmQoXG4gICAgICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgZW5kSW5kZXg6IG51bWJlcixcbiAgICAgICAgbGV2ZWxzOiBOdW1iZXJpbmdMZXZlbE1vZGVsW10sXG4gICAgICAgIHRhcmdldHM6IFRhcmdldE1vZGVsW11cbiAgICApOiBDb21tYW5kTW9kZWwge1xuICAgICAgICBjb25zdCBhZGROdW1iZXJpbmcgPSBuZXcgQWRkTnVtYmVyaW5nTW9kZWwoeyBzdGFydEluZGV4LCBlbmRJbmRleCwgbGV2ZWxzIH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmRNb2RlbCh7IGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5BZGROdW1iZXJpbmcsIGFkZE51bWJlcmluZywgdGFyZ2V0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFJlbW92ZU51bWJlcmluZ3NDb21tYW5kKHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlciwgdGFyZ2V0czogVGFyZ2V0TW9kZWxbXSk6IENvbW1hbmRNb2RlbCB7XG4gICAgICAgIGNvbnN0IHJlbW92ZU51bWJlcmluZ3MgPSBuZXcgUmVtb3ZlTnVtYmVyaW5nc01vZGVsKHsgc3RhcnRJbmRleCwgZW5kSW5kZXggfSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29tbWFuZE1vZGVsKHsgY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLlJlbW92ZU51bWJlcmluZ3MsIHJlbW92ZU51bWJlcmluZ3MsIHRhcmdldHMgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmVzdG9yZU51bWJlcmluZ3NDb21tYW5kKHJlc3RvcmVOdW1iZXJpbmdzOiBSZXN0b3JlTnVtYmVyaW5nc01vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuQWRkTnVtYmVyaW5nLCByZXN0b3JlTnVtYmVyaW5ncywgdGFyZ2V0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEFwcGx5SW1hZ2VTdHlsZUNvbW1hbmQoaGVpZ2h0OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGluc2VydEluZGV4OiBudW1iZXIsIHRhcmdldHM6IFRhcmdldE1vZGVsW10pOiBDb21tYW5kTW9kZWwge1xuICAgICAgICBjb25zdCBhcHBseUltYWdlU3R5bGUgPSBuZXcgQXBwbHlJbWFnZVN0eWxlTW9kZWwoeyBoZWlnaHQsIHdpZHRoLCBpbnNlcnRJbmRleCB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuQXBwbHlJbWFnZVN0eWxlLCBhcHBseUltYWdlU3R5bGUsIHRhcmdldHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRBcHBseVBhcmFncmFwaFN0eWxlQ29tbWFuZChcbiAgICAgICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICBlbmRJbmRleDogbnVtYmVyLFxuICAgICAgICBwYXJhZ3JhcGhTdHlsZTogUGFyYWdyYXBoU3R5bGVNb2RlbCxcbiAgICAgICAgdGFyZ2V0czogVGFyZ2V0TW9kZWxbXVxuICAgICk6IENvbW1hbmRNb2RlbCB7XG4gICAgICAgIGNvbnN0IGFwcGx5UGFyYWdyYXBoU3R5bGUgPSBuZXcgQXBwbHlQYXJhZ3JhcGhTdHlsZU1vZGVsKHsgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHBhcmFncmFwaFN0eWxlIH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmRNb2RlbCh7IGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5BcHBseVBhcmFncmFwaFN0eWxlLCBhcHBseVBhcmFncmFwaFN0eWxlLCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QXBwbHlUZXh0U3R5bGVDb21tYW5kKFxuICAgICAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIGVuZEluZGV4OiBudW1iZXIsXG4gICAgICAgIHRleHRTdHlsZTogVGV4dFN0eWxlTW9kZWwsXG4gICAgICAgIHRhcmdldHM6IFRhcmdldE1vZGVsW11cbiAgICApOiBDb21tYW5kTW9kZWwge1xuICAgICAgICBjb25zdCBhcHBseVRleHRTdHlsZSA9IG5ldyBBcHBseVRleHRTdHlsZU1vZGVsKHsgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHRTdHlsZSB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuQXBwbHlUZXh0U3R5bGUsIGFwcGx5VGV4dFN0eWxlLCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0RGVsZXRlQ29tbWFuZChzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIsIHRhcmdldHM6IFRhcmdldE1vZGVsW10pOiBDb21tYW5kTW9kZWwge1xuICAgICAgICBjb25zdCBkZWxldGVNb2RlbCA9IG5ldyBEZWxldGVNb2RlbCh7IHN0YXJ0SW5kZXgsIGVuZEluZGV4IH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmRNb2RlbCh7IGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5EZWxldGUsIGRlbGV0ZTogZGVsZXRlTW9kZWwsIHRhcmdldHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRJbnNlcnRUZXh0Q29tbWFuZCh0ZXh0OiBzdHJpbmcsIGluc2VydEluZGV4OiBudW1iZXIsIHRhcmdldHM6IFRhcmdldE1vZGVsW10pOiBDb21tYW5kTW9kZWwge1xuICAgICAgICBjb25zdCBpbnNlcnRUZXh0ID0gbmV3IEluc2VydFRleHRNb2RlbCh7IHRleHQsIGluc2VydEluZGV4IH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmRNb2RlbCh7IGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5JbnNlcnRUZXh0LCBpbnNlcnRUZXh0LCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SW5zZXJ0UGFyYWdyYXBoQ29tbWFuZChpbnNlcnRQYXJhZ3JhcGg6IEluc2VydFBhcmFncmFwaE1vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuSW5zZXJ0UGFyYWdyYXBoLCBpbnNlcnRQYXJhZ3JhcGgsIHRhcmdldHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRJbnNlcnRTdHlsZWRUZXh0Q29tbWFuZChcbiAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICBpbnNlcnRJbmRleDogbnVtYmVyLFxuICAgICAgICB0ZXh0U3R5bGU6IFRleHRTdHlsZU1vZGVsLFxuICAgICAgICB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdXG4gICAgKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0U3R5bGVkVGV4dCA9IG5ldyBJbnNlcnRTdHlsZWRUZXh0TW9kZWwoeyB0ZXh0LCBpbnNlcnRJbmRleCwgdGV4dFN0eWxlIH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmRNb2RlbCh7IGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5JbnNlcnRTdHlsZWRUZXh0LCBpbnNlcnRTdHlsZWRUZXh0LCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SW5zZXJ0QnJlYWtDb21tYW5kKGluc2VydEJyZWFrOiBJbnNlcnRCcmVha01vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuSW5zZXJ0QnJlYWssIGluc2VydEJyZWFrLCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SW5zZXJ0RWxlbWVudENvbW1hbmQoaW5zZXJ0RWxlbWVudDogSW5zZXJ0RWxlbWVudE1vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuSW5zZXJ0RWxlbWVudCwgaW5zZXJ0RWxlbWVudCwgdGFyZ2V0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEluc2VydEltYWdlQ29tbWFuZChpbnNlcnRJbWFnZTogSW5zZXJ0SW1hZ2VNb2RlbCwgdGFyZ2V0czogVGFyZ2V0TW9kZWxbXSk6IENvbW1hbmRNb2RlbCB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tbWFuZE1vZGVsKHsgY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLkluc2VydEltYWdlLCBpbnNlcnRJbWFnZSwgdGFyZ2V0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEluc2VydExpbmtPcGVyYXRpb24oaW5zZXJ0TGluazogSW5zZXJ0TGlua01vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuSW5zZXJ0TGluaywgaW5zZXJ0TGluaywgdGFyZ2V0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEluc2VydFRhYkNvbW1hbmQoaW5zZXJ0VGFiOiBJbnNlcnRUYWJNb2RlbCwgdGFyZ2V0czogVGFyZ2V0TW9kZWxbXSk6IENvbW1hbmRNb2RlbCB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tbWFuZE1vZGVsKHsgY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLkluc2VydFRhYiwgaW5zZXJ0VGFiLCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SW5zZXJ0VGFibGVDb21tYW5kKGluc2VydFRhYmxlOiBJbnNlcnRUYWJsZU1vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuSW5zZXJ0VGFibGUsIGluc2VydFRhYmxlLCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SW5zZXJ0VGFibGVDb2x1bW5zQ29tbWFuZChcbiAgICAgICAgY29sdW1uc0NvdW50OiBudW1iZXIsXG4gICAgICAgIGluaGVyaXRJbmRleDogbnVtYmVyLFxuICAgICAgICBpbnNlcnRJbmRleDogbnVtYmVyLFxuICAgICAgICB0YXJnZXRJbmRleDogbnVtYmVyLFxuICAgICAgICB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdXG4gICAgKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0VGFibGVDb2x1bW5zID0gbmV3IEluc2VydFRhYmxlQ29sdW1uc01vZGVsKHsgY29sdW1uc0NvdW50LCBpbmhlcml0SW5kZXgsIGluc2VydEluZGV4LCB0YXJnZXRJbmRleCB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuSW5zZXJ0VGFibGVDb2x1bW5zLCBpbnNlcnRUYWJsZUNvbHVtbnMsIHRhcmdldHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRJbnNlcnRUYWJsZVJvd3NDb21tYW5kKFxuICAgICAgICByb3dzQ291bnQ6IG51bWJlcixcbiAgICAgICAgaW5oZXJpdEluZGV4OiBudW1iZXIsXG4gICAgICAgIGluc2VydEluZGV4OiBudW1iZXIsXG4gICAgICAgIHRhcmdldEluZGV4OiBudW1iZXIsXG4gICAgICAgIHRhcmdldHM6IFRhcmdldE1vZGVsW11cbiAgICApOiBDb21tYW5kTW9kZWwge1xuICAgICAgICBjb25zdCBpbnNlcnRUYWJsZVJvd3MgPSBuZXcgSW5zZXJ0VGFibGVSb3dzTW9kZWwoeyByb3dzQ291bnQsIGluaGVyaXRJbmRleCwgaW5zZXJ0SW5kZXgsIHRhcmdldEluZGV4IH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmRNb2RlbCh7IGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5JbnNlcnRUYWJsZVJvd3MsIGluc2VydFRhYmxlUm93cywgdGFyZ2V0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFJlbW92ZVRhYmxlQ29sdW1uc0NvbW1hbmQoXG4gICAgICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgZW5kSW5kZXg6IG51bWJlcixcbiAgICAgICAgaW5zZXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgdGFyZ2V0czogVGFyZ2V0TW9kZWxbXVxuICAgICk6IENvbW1hbmRNb2RlbCB7XG4gICAgICAgIGNvbnN0IHJlbW92ZVRhYmxlQ29sdW1ucyA9IG5ldyBSZW1vdmVUYWJsZUNvbHVtbnNNb2RlbCh7IHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBpbnNlcnRJbmRleCB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuUmVtb3ZlVGFibGVDb2x1bW5zLCByZW1vdmVUYWJsZUNvbHVtbnMsIHRhcmdldHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRSZW1vdmVUYWJsZVJvd3NDb21tYW5kKFxuICAgICAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIGVuZEluZGV4OiBudW1iZXIsXG4gICAgICAgIGluc2VydEluZGV4OiBudW1iZXIsXG4gICAgICAgIHRhcmdldHM6IFRhcmdldE1vZGVsW11cbiAgICApOiBDb21tYW5kTW9kZWwge1xuICAgICAgICBjb25zdCByZW1vdmVUYWJsZVJvd3MgPSBuZXcgUmVtb3ZlVGFibGVSb3dzTW9kZWwoeyBzdGFydEluZGV4LCBlbmRJbmRleCwgaW5zZXJ0SW5kZXggfSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29tbWFuZE1vZGVsKHsgY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLlJlbW92ZVRhYmxlUm93cywgcmVtb3ZlVGFibGVSb3dzLCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmVzdG9yZVRleHRTdHlsZXNDb21tYW5kKGZvcm1hdHM6IEZvcm1hdE1vZGVsW10sIHRhcmdldHM6IFRhcmdldE1vZGVsW10pOiBDb21tYW5kTW9kZWwge1xuICAgICAgICBjb25zdCByZXN0b3JlVGV4dFN0eWxlcyA9IG5ldyBSZXN0b3JlVGV4dFN0eWxlc01vZGVsKHsgZm9ybWF0cyB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuUmVzdG9yZVRleHRTdHlsZXMsIHJlc3RvcmVUZXh0U3R5bGVzLCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmVzdG9yZVBhcmFncmFwaFN0eWxlc0NvbW1hbmQocGFyYWdyYXBoczogUGFyYWdyYXBoTW9kZWxbXSwgdGFyZ2V0czogVGFyZ2V0TW9kZWxbXSk6IENvbW1hbmRNb2RlbCB7XG4gICAgICAgIGNvbnN0IHJlc3RvcmVQYXJhZ3JhcGhTdHlsZXMgPSBuZXcgUmVzdG9yZVBhcmFncmFwaFN0eWxlc01vZGVsKHsgcGFyYWdyYXBocyB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuUmVzdG9yZVBhcmFncmFwaFN0eWxlcywgcmVzdG9yZVBhcmFncmFwaFN0eWxlcywgdGFyZ2V0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFJlc3RvcmVDb21tYW5kKHJlc3RvcmVNb2RlbDogUmVzdG9yZU1vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgY29uc3QgcmVzdG9yZSA9IG5ldyBSZXN0b3JlTW9kZWwoe1xuICAgICAgICAgICAgYnJlYWtzOiByZXN0b3JlTW9kZWwuYnJlYWtzLFxuICAgICAgICAgICAgZWxlbWVudHM6IHJlc3RvcmVNb2RlbC5lbGVtZW50cyxcbiAgICAgICAgICAgIGZvcm1hdHM6IHJlc3RvcmVNb2RlbC5mb3JtYXRzLFxuICAgICAgICAgICAgaW1hZ2VzOiByZXN0b3JlTW9kZWwuaW1hZ2VzLFxuICAgICAgICAgICAgc3RhcnRJbmRleDogcmVzdG9yZU1vZGVsLnN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBlbmRJbmRleDogcmVzdG9yZU1vZGVsLmVuZEluZGV4LFxuICAgICAgICAgICAgcGFyYWdyYXBoczogcmVzdG9yZU1vZGVsLnBhcmFncmFwaHMsXG4gICAgICAgICAgICB0YWJsZXM6IHJlc3RvcmVNb2RlbC50YWJsZXMsXG4gICAgICAgICAgICB0YWJzOiByZXN0b3JlTW9kZWwudGFicyxcbiAgICAgICAgICAgIHRleHQ6IHJlc3RvcmVNb2RlbC50ZXh0XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmRNb2RlbCh7IGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5SZXN0b3JlLCByZXN0b3JlLCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmVzdG9yZVRhYmxlQ29tbWFuZChyZXN0b3JlVGFibGU6IFJlc3RvcmVUYWJsZU1vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuUmVzdG9yZVRhYmxlLCByZXN0b3JlVGFibGUsIHRhcmdldHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRSZXBsYWNlQ29tbWFuZChtb2RlbDogUmVwbGFjZU1vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuUmVwbGFjZSwgcmVwbGFjZTogbW9kZWwsIHRhcmdldHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRSZXNpemVUYWJsZUNvbHVtbnNDb21tYW5kKHJlc2l6ZVRhYmxlQ29sdW1uczogUmVzaXplVGFibGVDb2x1bW5zTW9kZWwsIHRhcmdldHM6IFRhcmdldE1vZGVsW10pOiBDb21tYW5kTW9kZWwge1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmRNb2RlbCh7IGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5SZXNpemVUYWJsZUNvbHVtbnMsIHJlc2l6ZVRhYmxlQ29sdW1ucywgdGFyZ2V0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEFwcGx5RWxlbWVudFN0eWxlQ29tbWFuZChhcHBseUVsZW1lbnRTdHlsZTogQXBwbHlFbGVtZW50U3R5bGVNb2RlbCwgdGFyZ2V0czogVGFyZ2V0TW9kZWxbXSk6IENvbW1hbmRNb2RlbCB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tbWFuZE1vZGVsKHsgY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLlJlc2l6ZVRhYmxlQ29sdW1ucywgYXBwbHlFbGVtZW50U3R5bGUsIHRhcmdldHMgfSk7XG4gICAgfVxufVxuIl19
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS1jb21tYW5kcy5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3Ivb3BlcmF0aW9ucy9zYXZlLWNvbW1hbmRzLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQU9sRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUU1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUV0RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFJM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDNUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFHdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBRXBH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LEtBQW1CLEVBQUUsT0FBc0I7UUFDdkUsT0FBTyxJQUFJLFlBQVksQ0FBQyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRU0sTUFBTSxDQUFDLDRCQUE0QixDQUFDLGtCQUEyQyxFQUFFLE9BQXNCO1FBQzFHLE9BQU8sSUFBSSxZQUFZLENBQUMsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUVNLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxpQkFBeUMsRUFBRSxPQUFzQjtRQUN2RyxPQUFPLElBQUksWUFBWSxDQUFDLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkZE51bWJlcmluZ01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9hZGQtbnVtYmVyaW5nLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5RWxlbWVudFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LWVsZW1lbnQtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQXBwbHlJbWFnZVN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LWltYWdlLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5UGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvYXBwbHktcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5VGV4dFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LXRleHQtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQ29tbWFuZE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9jb21tYW5kLm1vZGVsJztcbmltcG9ydCB7IENvbW1hbmRUeXBlIH0gZnJvbSAnLi9lbnVtcy9jb21tYW5kLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBEZWxldGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvZGVsZXRlLm1vZGVsJztcbmltcG9ydCB7IEZvcm1hdE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9mb3JtYXQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0QnJlYWtNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWJyZWFrLm1vZGVsJztcbmltcG9ydCB7IEluc2VydEVsZW1lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWVsZW1lbnQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0SW1hZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWltYWdlLm1vZGVsJztcbmltcG9ydCB7IEluc2VydExpbmtNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWxpbmsubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0UGFyYWdyYXBoTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC1wYXJhZ3JhcGgubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0U3R5bGVkVGV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtc3R5bGVkLXRleHQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGFibGVDb2x1bW5zTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWJsZS1jb2x1bW5zLm1vZGVsJztcbmltcG9ydCB7IEluc2VydFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBJbnNlcnRUYWJsZVJvd3NNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LXRhYmxlLXJvd3MubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGFiTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWIubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtdGV4dC5tb2RlbCc7XG5pbXBvcnQgeyBOdW1iZXJpbmdMZXZlbE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9udW1iZXJpbmctbGV2ZWwubW9kZWwnO1xuaW1wb3J0IHsgUGFyYWdyYXBoTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3BhcmFncmFwaC5tb2RlbCc7XG5pbXBvcnQgeyBQYXJhZ3JhcGhTdHlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9wYXJhZ3JhcGgtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgUmVtb3ZlTnVtYmVyaW5nc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZW1vdmUtbnVtYmVyaW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBSZW1vdmVUYWJsZUNvbHVtbnNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVtb3ZlLXRhYmxlLWNvbHVtbnMubW9kZWwnO1xuaW1wb3J0IHsgUmVtb3ZlVGFibGVSb3dzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3JlbW92ZS10YWJsZS1yb3dzLm1vZGVsJztcbmltcG9ydCB7IFJlcGxhY2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVwbGFjZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXNpemVUYWJsZUNvbHVtbnNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzaXplLXRhYmxlLWNvbHVtbnMubW9kZWwnO1xuaW1wb3J0IHsgUmVzdG9yZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXN0b3JlLm1vZGVsJztcbmltcG9ydCB7IFJlc3RvcmVOdW1iZXJpbmdzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc3RvcmUtbnVtYmVyaW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlUGFyYWdyYXBoU3R5bGVzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc3RvcmUtcGFyYWdyYXBoLXN0eWxlcy5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlVGFibGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzdG9yZS10YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlVGV4dFN0eWxlc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXN0b3JlLXRleHQtc3R5bGVzLm1vZGVsJztcbmltcG9ydCB7IFRhcmdldE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YXJnZXQubW9kZWwnO1xuaW1wb3J0IHsgVGV4dFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RleHQtc3R5bGUubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgU2F2ZUNvbW1hbmRzSGVscGVyIHtcbiAgICBwdWJsaWMgc3RhdGljIGdldEFkZE51bWJlcmluZ0NvbW1hbmQoXG4gICAgICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgZW5kSW5kZXg6IG51bWJlcixcbiAgICAgICAgbGV2ZWxzOiBOdW1iZXJpbmdMZXZlbE1vZGVsW10sXG4gICAgICAgIHRhcmdldHM6IFRhcmdldE1vZGVsW11cbiAgICApOiBDb21tYW5kTW9kZWwge1xuICAgICAgICBjb25zdCBhZGROdW1iZXJpbmcgPSBuZXcgQWRkTnVtYmVyaW5nTW9kZWwoeyBzdGFydEluZGV4LCBlbmRJbmRleCwgbGV2ZWxzIH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmRNb2RlbCh7IGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5BZGROdW1iZXJpbmcsIGFkZE51bWJlcmluZywgdGFyZ2V0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFJlbW92ZU51bWJlcmluZ3NDb21tYW5kKHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlciwgdGFyZ2V0czogVGFyZ2V0TW9kZWxbXSk6IENvbW1hbmRNb2RlbCB7XG4gICAgICAgIGNvbnN0IHJlbW92ZU51bWJlcmluZ3MgPSBuZXcgUmVtb3ZlTnVtYmVyaW5nc01vZGVsKHsgc3RhcnRJbmRleCwgZW5kSW5kZXggfSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29tbWFuZE1vZGVsKHsgY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLlJlbW92ZU51bWJlcmluZ3MsIHJlbW92ZU51bWJlcmluZ3MsIHRhcmdldHMgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmVzdG9yZU51bWJlcmluZ3NDb21tYW5kKHJlc3RvcmVOdW1iZXJpbmdzOiBSZXN0b3JlTnVtYmVyaW5nc01vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuQWRkTnVtYmVyaW5nLCByZXN0b3JlTnVtYmVyaW5ncywgdGFyZ2V0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEFwcGx5SW1hZ2VTdHlsZUNvbW1hbmQoaGVpZ2h0OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGluc2VydEluZGV4OiBudW1iZXIsIHRhcmdldHM6IFRhcmdldE1vZGVsW10pOiBDb21tYW5kTW9kZWwge1xuICAgICAgICBjb25zdCBhcHBseUltYWdlU3R5bGUgPSBuZXcgQXBwbHlJbWFnZVN0eWxlTW9kZWwoeyBoZWlnaHQsIHdpZHRoLCBpbnNlcnRJbmRleCB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuQXBwbHlJbWFnZVN0eWxlLCBhcHBseUltYWdlU3R5bGUsIHRhcmdldHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRBcHBseVBhcmFncmFwaFN0eWxlQ29tbWFuZChcbiAgICAgICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICBlbmRJbmRleDogbnVtYmVyLFxuICAgICAgICBwYXJhZ3JhcGhTdHlsZTogUGFyYWdyYXBoU3R5bGVNb2RlbCxcbiAgICAgICAgdGFyZ2V0czogVGFyZ2V0TW9kZWxbXVxuICAgICk6IENvbW1hbmRNb2RlbCB7XG4gICAgICAgIGNvbnN0IGFwcGx5UGFyYWdyYXBoU3R5bGUgPSBuZXcgQXBwbHlQYXJhZ3JhcGhTdHlsZU1vZGVsKHsgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHBhcmFncmFwaFN0eWxlIH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmRNb2RlbCh7IGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5BcHBseVBhcmFncmFwaFN0eWxlLCBhcHBseVBhcmFncmFwaFN0eWxlLCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QXBwbHlUZXh0U3R5bGVDb21tYW5kKFxuICAgICAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIGVuZEluZGV4OiBudW1iZXIsXG4gICAgICAgIHRleHRTdHlsZTogVGV4dFN0eWxlTW9kZWwsXG4gICAgICAgIHRhcmdldHM6IFRhcmdldE1vZGVsW11cbiAgICApOiBDb21tYW5kTW9kZWwge1xuICAgICAgICBjb25zdCBhcHBseVRleHRTdHlsZSA9IG5ldyBBcHBseVRleHRTdHlsZU1vZGVsKHsgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHRTdHlsZSB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuQXBwbHlUZXh0U3R5bGUsIGFwcGx5VGV4dFN0eWxlLCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0RGVsZXRlQ29tbWFuZChzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIsIHRhcmdldHM6IFRhcmdldE1vZGVsW10pOiBDb21tYW5kTW9kZWwge1xuICAgICAgICBjb25zdCBkZWxldGVNb2RlbCA9IG5ldyBEZWxldGVNb2RlbCh7IHN0YXJ0SW5kZXgsIGVuZEluZGV4IH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmRNb2RlbCh7IGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5EZWxldGUsIGRlbGV0ZTogZGVsZXRlTW9kZWwsIHRhcmdldHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRJbnNlcnRUZXh0Q29tbWFuZCh0ZXh0OiBzdHJpbmcsIGluc2VydEluZGV4OiBudW1iZXIsIHRhcmdldHM6IFRhcmdldE1vZGVsW10pOiBDb21tYW5kTW9kZWwge1xuICAgICAgICBjb25zdCBpbnNlcnRUZXh0ID0gbmV3IEluc2VydFRleHRNb2RlbCh7IHRleHQsIGluc2VydEluZGV4IH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmRNb2RlbCh7IGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5JbnNlcnRUZXh0LCBpbnNlcnRUZXh0LCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SW5zZXJ0UGFyYWdyYXBoQ29tbWFuZChpbnNlcnRQYXJhZ3JhcGg6IEluc2VydFBhcmFncmFwaE1vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuSW5zZXJ0UGFyYWdyYXBoLCBpbnNlcnRQYXJhZ3JhcGgsIHRhcmdldHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRJbnNlcnRTdHlsZWRUZXh0Q29tbWFuZChcbiAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICBpbnNlcnRJbmRleDogbnVtYmVyLFxuICAgICAgICB0ZXh0U3R5bGU6IFRleHRTdHlsZU1vZGVsLFxuICAgICAgICB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdXG4gICAgKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0U3R5bGVkVGV4dCA9IG5ldyBJbnNlcnRTdHlsZWRUZXh0TW9kZWwoeyB0ZXh0LCBpbnNlcnRJbmRleCwgdGV4dFN0eWxlIH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmRNb2RlbCh7IGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5JbnNlcnRTdHlsZWRUZXh0LCBpbnNlcnRTdHlsZWRUZXh0LCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SW5zZXJ0QnJlYWtDb21tYW5kKGluc2VydEJyZWFrOiBJbnNlcnRCcmVha01vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuSW5zZXJ0QnJlYWssIGluc2VydEJyZWFrLCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SW5zZXJ0RWxlbWVudENvbW1hbmQoaW5zZXJ0RWxlbWVudDogSW5zZXJ0RWxlbWVudE1vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuSW5zZXJ0RWxlbWVudCwgaW5zZXJ0RWxlbWVudCwgdGFyZ2V0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEluc2VydEltYWdlQ29tbWFuZChpbnNlcnRJbWFnZTogSW5zZXJ0SW1hZ2VNb2RlbCwgdGFyZ2V0czogVGFyZ2V0TW9kZWxbXSk6IENvbW1hbmRNb2RlbCB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tbWFuZE1vZGVsKHsgY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLkluc2VydEltYWdlLCBpbnNlcnRJbWFnZSwgdGFyZ2V0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEluc2VydExpbmtPcGVyYXRpb24oaW5zZXJ0TGluazogSW5zZXJ0TGlua01vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuSW5zZXJ0TGluaywgaW5zZXJ0TGluaywgdGFyZ2V0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEluc2VydFRhYkNvbW1hbmQoaW5zZXJ0VGFiOiBJbnNlcnRUYWJNb2RlbCwgdGFyZ2V0czogVGFyZ2V0TW9kZWxbXSk6IENvbW1hbmRNb2RlbCB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tbWFuZE1vZGVsKHsgY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLkluc2VydFRhYiwgaW5zZXJ0VGFiLCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SW5zZXJ0VGFibGVDb21tYW5kKGluc2VydFRhYmxlOiBJbnNlcnRUYWJsZU1vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuSW5zZXJ0VGFibGUsIGluc2VydFRhYmxlLCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0SW5zZXJ0VGFibGVDb2x1bW5zQ29tbWFuZChcbiAgICAgICAgY29sdW1uc0NvdW50OiBudW1iZXIsXG4gICAgICAgIGluaGVyaXRJbmRleDogbnVtYmVyLFxuICAgICAgICBpbnNlcnRJbmRleDogbnVtYmVyLFxuICAgICAgICB0YXJnZXRJbmRleDogbnVtYmVyLFxuICAgICAgICB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdXG4gICAgKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0VGFibGVDb2x1bW5zID0gbmV3IEluc2VydFRhYmxlQ29sdW1uc01vZGVsKHsgY29sdW1uc0NvdW50LCBpbmhlcml0SW5kZXgsIGluc2VydEluZGV4LCB0YXJnZXRJbmRleCB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuSW5zZXJ0VGFibGVDb2x1bW5zLCBpbnNlcnRUYWJsZUNvbHVtbnMsIHRhcmdldHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRJbnNlcnRUYWJsZVJvd3NDb21tYW5kKFxuICAgICAgICByb3dzQ291bnQ6IG51bWJlcixcbiAgICAgICAgaW5oZXJpdEluZGV4OiBudW1iZXIsXG4gICAgICAgIGluc2VydEluZGV4OiBudW1iZXIsXG4gICAgICAgIHRhcmdldEluZGV4OiBudW1iZXIsXG4gICAgICAgIHRhcmdldHM6IFRhcmdldE1vZGVsW11cbiAgICApOiBDb21tYW5kTW9kZWwge1xuICAgICAgICBjb25zdCBpbnNlcnRUYWJsZVJvd3MgPSBuZXcgSW5zZXJ0VGFibGVSb3dzTW9kZWwoeyByb3dzQ291bnQsIGluaGVyaXRJbmRleCwgaW5zZXJ0SW5kZXgsIHRhcmdldEluZGV4IH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmRNb2RlbCh7IGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5JbnNlcnRUYWJsZVJvd3MsIGluc2VydFRhYmxlUm93cywgdGFyZ2V0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFJlbW92ZVRhYmxlQ29sdW1uc0NvbW1hbmQoXG4gICAgICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgZW5kSW5kZXg6IG51bWJlcixcbiAgICAgICAgaW5zZXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgdGFyZ2V0czogVGFyZ2V0TW9kZWxbXVxuICAgICk6IENvbW1hbmRNb2RlbCB7XG4gICAgICAgIGNvbnN0IHJlbW92ZVRhYmxlQ29sdW1ucyA9IG5ldyBSZW1vdmVUYWJsZUNvbHVtbnNNb2RlbCh7IHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBpbnNlcnRJbmRleCB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuUmVtb3ZlVGFibGVDb2x1bW5zLCByZW1vdmVUYWJsZUNvbHVtbnMsIHRhcmdldHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRSZW1vdmVUYWJsZVJvd3NDb21tYW5kKFxuICAgICAgICBzdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgIGVuZEluZGV4OiBudW1iZXIsXG4gICAgICAgIGluc2VydEluZGV4OiBudW1iZXIsXG4gICAgICAgIHRhcmdldHM6IFRhcmdldE1vZGVsW11cbiAgICApOiBDb21tYW5kTW9kZWwge1xuICAgICAgICBjb25zdCByZW1vdmVUYWJsZVJvd3MgPSBuZXcgUmVtb3ZlVGFibGVSb3dzTW9kZWwoeyBzdGFydEluZGV4LCBlbmRJbmRleCwgaW5zZXJ0SW5kZXggfSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29tbWFuZE1vZGVsKHsgY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLlJlbW92ZVRhYmxlUm93cywgcmVtb3ZlVGFibGVSb3dzLCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmVzdG9yZVRleHRTdHlsZXNDb21tYW5kKGZvcm1hdHM6IEZvcm1hdE1vZGVsW10sIHRhcmdldHM6IFRhcmdldE1vZGVsW10pOiBDb21tYW5kTW9kZWwge1xuICAgICAgICBjb25zdCByZXN0b3JlVGV4dFN0eWxlcyA9IG5ldyBSZXN0b3JlVGV4dFN0eWxlc01vZGVsKHsgZm9ybWF0cyB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuUmVzdG9yZVRleHRTdHlsZXMsIHJlc3RvcmVUZXh0U3R5bGVzLCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmVzdG9yZVBhcmFncmFwaFN0eWxlc0NvbW1hbmQocGFyYWdyYXBoczogUGFyYWdyYXBoTW9kZWxbXSwgdGFyZ2V0czogVGFyZ2V0TW9kZWxbXSk6IENvbW1hbmRNb2RlbCB7XG4gICAgICAgIGNvbnN0IHJlc3RvcmVQYXJhZ3JhcGhTdHlsZXMgPSBuZXcgUmVzdG9yZVBhcmFncmFwaFN0eWxlc01vZGVsKHsgcGFyYWdyYXBocyB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuUmVzdG9yZVBhcmFncmFwaFN0eWxlcywgcmVzdG9yZVBhcmFncmFwaFN0eWxlcywgdGFyZ2V0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFJlc3RvcmVDb21tYW5kKHJlc3RvcmVNb2RlbDogUmVzdG9yZU1vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgY29uc3QgcmVzdG9yZSA9IG5ldyBSZXN0b3JlTW9kZWwoe1xuICAgICAgICAgICAgYnJlYWtzOiByZXN0b3JlTW9kZWwuYnJlYWtzLFxuICAgICAgICAgICAgZWxlbWVudHM6IHJlc3RvcmVNb2RlbC5lbGVtZW50cyxcbiAgICAgICAgICAgIGZvcm1hdHM6IHJlc3RvcmVNb2RlbC5mb3JtYXRzLFxuICAgICAgICAgICAgaW1hZ2VzOiByZXN0b3JlTW9kZWwuaW1hZ2VzLFxuICAgICAgICAgICAgc3RhcnRJbmRleDogcmVzdG9yZU1vZGVsLnN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBlbmRJbmRleDogcmVzdG9yZU1vZGVsLmVuZEluZGV4LFxuICAgICAgICAgICAgcGFyYWdyYXBoczogcmVzdG9yZU1vZGVsLnBhcmFncmFwaHMsXG4gICAgICAgICAgICB0YWJsZXM6IHJlc3RvcmVNb2RlbC50YWJsZXMsXG4gICAgICAgICAgICB0YWJzOiByZXN0b3JlTW9kZWwudGFicyxcbiAgICAgICAgICAgIHRleHQ6IHJlc3RvcmVNb2RlbC50ZXh0XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmRNb2RlbCh7IGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5SZXN0b3JlLCByZXN0b3JlLCB0YXJnZXRzIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UmVzdG9yZVRhYmxlQ29tbWFuZChyZXN0b3JlVGFibGU6IFJlc3RvcmVUYWJsZU1vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuUmVzdG9yZVRhYmxlLCByZXN0b3JlVGFibGUsIHRhcmdldHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRSZXBsYWNlQ29tbWFuZChtb2RlbDogUmVwbGFjZU1vZGVsLCB0YXJnZXRzOiBUYXJnZXRNb2RlbFtdKTogQ29tbWFuZE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kTW9kZWwoeyBjb21tYW5kVHlwZTogQ29tbWFuZFR5cGUuUmVwbGFjZSwgcmVwbGFjZTogbW9kZWwsIHRhcmdldHMgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRSZXNpemVUYWJsZUNvbHVtbnNDb21tYW5kKHJlc2l6ZVRhYmxlQ29sdW1uczogUmVzaXplVGFibGVDb2x1bW5zTW9kZWwsIHRhcmdldHM6IFRhcmdldE1vZGVsW10pOiBDb21tYW5kTW9kZWwge1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmRNb2RlbCh7IGNvbW1hbmRUeXBlOiBDb21tYW5kVHlwZS5SZXNpemVUYWJsZUNvbHVtbnMsIHJlc2l6ZVRhYmxlQ29sdW1ucywgdGFyZ2V0cyB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEFwcGx5RWxlbWVudFN0eWxlQ29tbWFuZChhcHBseUVsZW1lbnRTdHlsZTogQXBwbHlFbGVtZW50U3R5bGVNb2RlbCwgdGFyZ2V0czogVGFyZ2V0TW9kZWxbXSk6IENvbW1hbmRNb2RlbCB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tbWFuZE1vZGVsKHsgY29tbWFuZFR5cGU6IENvbW1hbmRUeXBlLkFwcGx5RWxlbWVudFN0eWxlLCBhcHBseUVsZW1lbnRTdHlsZSwgdGFyZ2V0cyB9KTtcbiAgICB9XG59XG4iXX0=
@@ -1,29 +1,29 @@
1
1
  import { CursorParagraph } from './cursor-paragraph';
2
2
  export class ContentHelper {
3
- static documentIndexToParagraphIndex(wrapParagraphIndex, indexInDocument) {
4
- let paragraph = wrapParagraphIndex.findIndex(x => x > indexInDocument);
5
- paragraph = paragraph === -1 ? wrapParagraphIndex.length - 1 : paragraph - 1;
6
- const indexInParagraph = indexInDocument - wrapParagraphIndex[paragraph];
3
+ static documentIndexToParagraphIndex(paragraphs, indexInDocument) {
4
+ let paragraph = paragraphs.findIndex(x => x.startIndex > indexInDocument);
5
+ paragraph = paragraph === -1 ? paragraphs.length - 1 : paragraph - 1;
6
+ const indexInParagraph = indexInDocument - paragraphs[paragraph].startIndex;
7
7
  return new CursorParagraph(paragraph, indexInParagraph);
8
8
  }
9
- static documentIndexToParagraphWithOffset(wrapParagraphIndex, lines, indexInDocument) {
10
- const position = this.documentIndexToParagraphIndex(wrapParagraphIndex, indexInDocument);
11
- if (position.column < lines[position.row].length) {
9
+ static documentIndexToParagraphWithOffset(paragraphs, indexInDocument) {
10
+ const position = this.documentIndexToParagraphIndex(paragraphs, indexInDocument);
11
+ if (position.column < paragraphs[position.row].content.length) {
12
12
  return new CursorParagraph(position.row, position.column + 1);
13
13
  }
14
14
  return position;
15
15
  }
16
- static paragraphPositionToDocumentIndex(wrapParagraphIndex, paragraph) {
17
- return this.paragraphToDocumentIndex(wrapParagraphIndex, paragraph.row, paragraph.column);
16
+ static paragraphPositionToDocumentIndex(paragraphs, paragraph) {
17
+ return this.paragraphToDocumentIndex(paragraphs, paragraph.row, paragraph.column);
18
18
  }
19
- static getSelectedPartDocumentIndexes(wrapParagraphIndex, range) {
19
+ static getSelectedPartDocumentIndexes(paragraphs, range) {
20
20
  return {
21
- startIndex: this.paragraphPositionToDocumentIndex(wrapParagraphIndex, range.start),
22
- endIndex: this.paragraphPositionToDocumentIndex(wrapParagraphIndex, range.end) - 1
21
+ startIndex: this.paragraphPositionToDocumentIndex(paragraphs, range.start),
22
+ endIndex: this.paragraphPositionToDocumentIndex(paragraphs, range.end) - 1
23
23
  };
24
24
  }
25
- static paragraphToDocumentIndex(wrapParagraphIndex, paragraph, index) {
26
- return wrapParagraphIndex[paragraph] + index;
25
+ static paragraphToDocumentIndex(paragraphs, paragraph, index) {
26
+ return paragraphs[paragraph].startIndex + index;
27
27
  }
28
28
  static setIndexesElementsInInterval(elements, elementIndexes, startIndex, endIndex) {
29
29
  elements.forEach(x => {
@@ -33,4 +33,4 @@ export class ContentHelper {
33
33
  });
34
34
  }
35
35
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvcG9zaXRpb25pbmcvY29udGVudC5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSXJELE1BQU0sT0FBTyxhQUFhO0lBQ3RCLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxrQkFBNEIsRUFBRSxlQUF1QjtRQUN0RixJQUFJLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7UUFDdkUsU0FBUyxHQUFHLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUM3RSxNQUFNLGdCQUFnQixHQUFHLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RSxPQUFPLElBQUksZUFBZSxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxNQUFNLENBQUMsa0NBQWtDLENBQUMsa0JBQTRCLEVBQUUsS0FBZSxFQUFFLGVBQXVCO1FBQzVHLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN6RixJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDOUMsT0FBTyxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDakU7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRUQsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLGtCQUE0QixFQUFFLFNBQTBCO1FBQzVGLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxNQUFNLENBQUMsOEJBQThCLENBQUMsa0JBQTRCLEVBQUUsS0FBWTtRQUM1RSxPQUFPO1lBQ0gsVUFBVSxFQUFFLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ2xGLFFBQVEsRUFBRSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7U0FDckYsQ0FBQztJQUNOLENBQUM7SUFFRCxNQUFNLENBQUMsd0JBQXdCLENBQUMsa0JBQTRCLEVBQUUsU0FBaUIsRUFBRSxLQUFhO1FBQzFGLE9BQU8sa0JBQWtCLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ2pELENBQUM7SUFFRCxNQUFNLENBQUMsNEJBQTRCLENBQy9CLFFBQWEsRUFDYixjQUF3QixFQUN4QixVQUFrQixFQUNsQixRQUFnQjtRQUVoQixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxDQUFDLFdBQVcsSUFBSSxVQUFVLElBQUksQ0FBQyxDQUFDLFdBQVcsSUFBSSxRQUFRLEVBQUU7Z0JBQzFELGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQzthQUNuRDtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3Vyc29yUGFyYWdyYXBoIH0gZnJvbSAnLi9jdXJzb3ItcGFyYWdyYXBoJztcbmltcG9ydCB7IEluc2VydEluZGV4SW50ZXJmYWNlIH0gZnJvbSAnLi9pbnNlcnQtaW5kZXguaW50ZXJmYWNlJztcbmltcG9ydCB7IFJhbmdlIH0gZnJvbSAnLi9yYW5nZSc7XG5cbmV4cG9ydCBjbGFzcyBDb250ZW50SGVscGVyIHtcbiAgICBzdGF0aWMgZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgod3JhcFBhcmFncmFwaEluZGV4OiBudW1iZXJbXSwgaW5kZXhJbkRvY3VtZW50OiBudW1iZXIpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBsZXQgcGFyYWdyYXBoID0gd3JhcFBhcmFncmFwaEluZGV4LmZpbmRJbmRleCh4ID0+IHggPiBpbmRleEluRG9jdW1lbnQpO1xuICAgICAgICBwYXJhZ3JhcGggPSBwYXJhZ3JhcGggPT09IC0xID8gd3JhcFBhcmFncmFwaEluZGV4Lmxlbmd0aCAtIDEgOiBwYXJhZ3JhcGggLSAxO1xuICAgICAgICBjb25zdCBpbmRleEluUGFyYWdyYXBoID0gaW5kZXhJbkRvY3VtZW50IC0gd3JhcFBhcmFncmFwaEluZGV4W3BhcmFncmFwaF07XG4gICAgICAgIHJldHVybiBuZXcgQ3Vyc29yUGFyYWdyYXBoKHBhcmFncmFwaCwgaW5kZXhJblBhcmFncmFwaCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGRvY3VtZW50SW5kZXhUb1BhcmFncmFwaFdpdGhPZmZzZXQod3JhcFBhcmFncmFwaEluZGV4OiBudW1iZXJbXSwgbGluZXM6IHN0cmluZ1tdLCBpbmRleEluRG9jdW1lbnQ6IG51bWJlcik6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh3cmFwUGFyYWdyYXBoSW5kZXgsIGluZGV4SW5Eb2N1bWVudCk7XG4gICAgICAgIGlmIChwb3NpdGlvbi5jb2x1bW4gPCBsaW5lc1twb3NpdGlvbi5yb3ddLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDdXJzb3JQYXJhZ3JhcGgocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4gKyAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9zaXRpb247XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcmFncmFwaFBvc2l0aW9uVG9Eb2N1bWVudEluZGV4KHdyYXBQYXJhZ3JhcGhJbmRleDogbnVtYmVyW10sIHBhcmFncmFwaDogQ3Vyc29yUGFyYWdyYXBoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KHdyYXBQYXJhZ3JhcGhJbmRleCwgcGFyYWdyYXBoLnJvdywgcGFyYWdyYXBoLmNvbHVtbik7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFNlbGVjdGVkUGFydERvY3VtZW50SW5kZXhlcyh3cmFwUGFyYWdyYXBoSW5kZXg6IG51bWJlcltdLCByYW5nZTogUmFuZ2UpOiB7IHN0YXJ0SW5kZXg6IG51bWJlcjsgZW5kSW5kZXg6IG51bWJlciB9IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHRoaXMucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgod3JhcFBhcmFncmFwaEluZGV4LCByYW5nZS5zdGFydCksXG4gICAgICAgICAgICBlbmRJbmRleDogdGhpcy5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh3cmFwUGFyYWdyYXBoSW5kZXgsIHJhbmdlLmVuZCkgLSAxXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcmFncmFwaFRvRG9jdW1lbnRJbmRleCh3cmFwUGFyYWdyYXBoSW5kZXg6IG51bWJlcltdLCBwYXJhZ3JhcGg6IG51bWJlciwgaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB3cmFwUGFyYWdyYXBoSW5kZXhbcGFyYWdyYXBoXSArIGluZGV4O1xuICAgIH1cblxuICAgIHN0YXRpYyBzZXRJbmRleGVzRWxlbWVudHNJbkludGVydmFsPFQgZXh0ZW5kcyBJbnNlcnRJbmRleEludGVyZmFjZT4oXG4gICAgICAgIGVsZW1lbnRzOiBUW10sXG4gICAgICAgIGVsZW1lbnRJbmRleGVzOiBudW1iZXJbXSxcbiAgICAgICAgc3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICBlbmRJbmRleDogbnVtYmVyXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGVsZW1lbnRzLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICBpZiAoeC5pbnNlcnRJbmRleCA+PSBzdGFydEluZGV4ICYmIHguaW5zZXJ0SW5kZXggPD0gZW5kSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50SW5kZXhlcy5wdXNoKHguaW5zZXJ0SW5kZXggLSBzdGFydEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvcG9zaXRpb25pbmcvY29udGVudC5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBS3JELE1BQU0sT0FBTyxhQUFhO0lBQ3RCLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxVQUFnQyxFQUFFLGVBQXVCO1FBQzFGLElBQUksU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQyxDQUFDO1FBQzFFLFNBQVMsR0FBRyxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDNUUsT0FBTyxJQUFJLGVBQWUsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLFVBQWdDLEVBQUUsZUFBdUI7UUFDL0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNqRixJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQzNELE9BQU8sSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxVQUFnQyxFQUFFLFNBQTBCO1FBQ2hHLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsTUFBTSxDQUFDLDhCQUE4QixDQUFDLFVBQWdDLEVBQUUsS0FBWTtRQUNoRixPQUFPO1lBQ0gsVUFBVSxFQUFFLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUMxRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztTQUM3RSxDQUFDO0lBQ04sQ0FBQztJQUVELE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxVQUFnQyxFQUFFLFNBQWlCLEVBQUUsS0FBYTtRQUM5RixPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ3BELENBQUM7SUFFRCxNQUFNLENBQUMsNEJBQTRCLENBQy9CLFFBQWEsRUFDYixjQUF3QixFQUN4QixVQUFrQixFQUNsQixRQUFnQjtRQUVoQixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxDQUFDLFdBQVcsSUFBSSxVQUFVLElBQUksQ0FBQyxDQUFDLFdBQVcsSUFBSSxRQUFRLEVBQUU7Z0JBQzFELGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQzthQUNuRDtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3Vyc29yUGFyYWdyYXBoIH0gZnJvbSAnLi9jdXJzb3ItcGFyYWdyYXBoJztcbmltcG9ydCB7IEluc2VydEluZGV4SW50ZXJmYWNlIH0gZnJvbSAnLi9pbnNlcnQtaW5kZXguaW50ZXJmYWNlJztcbmltcG9ydCB7IFBhcmFncmFwaEluZm9Nb2RlbCB9IGZyb20gJy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL21vZGVscy9wYXJhZ3JhcGgtaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBSYW5nZSB9IGZyb20gJy4vcmFuZ2UnO1xuXG5leHBvcnQgY2xhc3MgQ29udGVudEhlbHBlciB7XG4gICAgc3RhdGljIGRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHBhcmFncmFwaHM6IFBhcmFncmFwaEluZm9Nb2RlbFtdLCBpbmRleEluRG9jdW1lbnQ6IG51bWJlcik6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGxldCBwYXJhZ3JhcGggPSBwYXJhZ3JhcGhzLmZpbmRJbmRleCh4ID0+IHguc3RhcnRJbmRleCA+IGluZGV4SW5Eb2N1bWVudCk7XG4gICAgICAgIHBhcmFncmFwaCA9IHBhcmFncmFwaCA9PT0gLTEgPyBwYXJhZ3JhcGhzLmxlbmd0aCAtIDEgOiBwYXJhZ3JhcGggLSAxO1xuICAgICAgICBjb25zdCBpbmRleEluUGFyYWdyYXBoID0gaW5kZXhJbkRvY3VtZW50IC0gcGFyYWdyYXBoc1twYXJhZ3JhcGhdLnN0YXJ0SW5kZXg7XG4gICAgICAgIHJldHVybiBuZXcgQ3Vyc29yUGFyYWdyYXBoKHBhcmFncmFwaCwgaW5kZXhJblBhcmFncmFwaCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGRvY3VtZW50SW5kZXhUb1BhcmFncmFwaFdpdGhPZmZzZXQocGFyYWdyYXBoczogUGFyYWdyYXBoSW5mb01vZGVsW10sIGluZGV4SW5Eb2N1bWVudDogbnVtYmVyKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHBhcmFncmFwaHMsIGluZGV4SW5Eb2N1bWVudCk7XG4gICAgICAgIGlmIChwb3NpdGlvbi5jb2x1bW4gPCBwYXJhZ3JhcGhzW3Bvc2l0aW9uLnJvd10uY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ3Vyc29yUGFyYWdyYXBoKHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleChwYXJhZ3JhcGhzOiBQYXJhZ3JhcGhJbmZvTW9kZWxbXSwgcGFyYWdyYXBoOiBDdXJzb3JQYXJhZ3JhcGgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgocGFyYWdyYXBocywgcGFyYWdyYXBoLnJvdywgcGFyYWdyYXBoLmNvbHVtbik7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFNlbGVjdGVkUGFydERvY3VtZW50SW5kZXhlcyhwYXJhZ3JhcGhzOiBQYXJhZ3JhcGhJbmZvTW9kZWxbXSwgcmFuZ2U6IFJhbmdlKTogeyBzdGFydEluZGV4OiBudW1iZXI7IGVuZEluZGV4OiBudW1iZXIgfSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydEluZGV4OiB0aGlzLnBhcmFncmFwaFBvc2l0aW9uVG9Eb2N1bWVudEluZGV4KHBhcmFncmFwaHMsIHJhbmdlLnN0YXJ0KSxcbiAgICAgICAgICAgIGVuZEluZGV4OiB0aGlzLnBhcmFncmFwaFBvc2l0aW9uVG9Eb2N1bWVudEluZGV4KHBhcmFncmFwaHMsIHJhbmdlLmVuZCkgLSAxXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChwYXJhZ3JhcGhzOiBQYXJhZ3JhcGhJbmZvTW9kZWxbXSwgcGFyYWdyYXBoOiBudW1iZXIsIGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gcGFyYWdyYXBoc1twYXJhZ3JhcGhdLnN0YXJ0SW5kZXggKyBpbmRleDtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2V0SW5kZXhlc0VsZW1lbnRzSW5JbnRlcnZhbDxUIGV4dGVuZHMgSW5zZXJ0SW5kZXhJbnRlcmZhY2U+KFxuICAgICAgICBlbGVtZW50czogVFtdLFxuICAgICAgICBlbGVtZW50SW5kZXhlczogbnVtYmVyW10sXG4gICAgICAgIHN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgZW5kSW5kZXg6IG51bWJlclxuICAgICk6IHZvaWQge1xuICAgICAgICBlbGVtZW50cy5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgaWYgKHguaW5zZXJ0SW5kZXggPj0gc3RhcnRJbmRleCAmJiB4Lmluc2VydEluZGV4IDw9IGVuZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudEluZGV4ZXMucHVzaCh4Lmluc2VydEluZGV4IC0gc3RhcnRJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,13 +1,13 @@
1
1
  import { CursorParagraph } from './cursor-paragraph';
2
2
  export class LineWidthHelper {
3
3
  static getParagraphLineDisplayTokens(session, paragraphIndex, lineIndex) {
4
- const docPos = session.document.positionToIndex(new CursorParagraph(paragraphIndex, 0), 0);
5
- const rowWrap = session.wrapData[paragraphIndex] || [];
4
+ const docPos = session.displayData.positionToIndex(new CursorParagraph(paragraphIndex, 0), 0);
5
+ const rowWrap = session.displayData.paragraphs[paragraphIndex]?.nextLineIndexes || [];
6
6
  const startWrapIndex = lineIndex > 0 ? rowWrap[lineIndex - 1] : 0;
7
7
  const endIndex = rowWrap[lineIndex];
8
- const docLine = session.document.getLine(session.document.lines, paragraphIndex);
8
+ const docLine = session.displayData.getParagraphContent(paragraphIndex);
9
9
  const offset = startWrapIndex ? docPos + startWrapIndex : docPos;
10
- return session.getDisplayTokens(session.model, docLine.substring(startWrapIndex, endIndex || undefined), offset);
10
+ return session.displayData.getLineTokens(session.model, docLine.substring(startWrapIndex, endIndex || undefined), offset);
11
11
  }
12
12
  }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS13aWR0aC5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvcG9zaXRpb25pbmcvbGluZS13aWR0aC5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSXJELE1BQU0sT0FBTyxlQUFlO0lBQ3hCLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxPQUFvQixFQUFFLGNBQXNCLEVBQUUsU0FBaUI7UUFDaEcsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxlQUFlLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZELE1BQU0sY0FBYyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDakYsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFakUsT0FBTyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxRQUFRLElBQUksU0FBUyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckgsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3Vyc29yUGFyYWdyYXBoIH0gZnJvbSAnLi9jdXJzb3ItcGFyYWdyYXBoJztcbmltcG9ydCB7IERpc3BsYXlUb2tlbiB9IGZyb20gJy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL2Rpc3BsYXktdG9rZW4ubW9kZWwnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuLi9leGVjdXRpb24vZWRpdC5zZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIExpbmVXaWR0aEhlbHBlciB7XG4gICAgc3RhdGljIGdldFBhcmFncmFwaExpbmVEaXNwbGF5VG9rZW5zKHNlc3Npb246IEVkaXRTZXNzaW9uLCBwYXJhZ3JhcGhJbmRleDogbnVtYmVyLCBsaW5lSW5kZXg6IG51bWJlcik6IERpc3BsYXlUb2tlbltdIHtcbiAgICAgICAgY29uc3QgZG9jUG9zID0gc2Vzc2lvbi5kb2N1bWVudC5wb3NpdGlvblRvSW5kZXgobmV3IEN1cnNvclBhcmFncmFwaChwYXJhZ3JhcGhJbmRleCwgMCksIDApO1xuICAgICAgICBjb25zdCByb3dXcmFwID0gc2Vzc2lvbi53cmFwRGF0YVtwYXJhZ3JhcGhJbmRleF0gfHwgW107XG4gICAgICAgIGNvbnN0IHN0YXJ0V3JhcEluZGV4ID0gbGluZUluZGV4ID4gMCA/IHJvd1dyYXBbbGluZUluZGV4IC0gMV0gOiAwO1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHJvd1dyYXBbbGluZUluZGV4XTtcbiAgICAgICAgY29uc3QgZG9jTGluZSA9IHNlc3Npb24uZG9jdW1lbnQuZ2V0TGluZShzZXNzaW9uLmRvY3VtZW50LmxpbmVzLCBwYXJhZ3JhcGhJbmRleCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHN0YXJ0V3JhcEluZGV4ID8gZG9jUG9zICsgc3RhcnRXcmFwSW5kZXggOiBkb2NQb3M7XG5cbiAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0RGlzcGxheVRva2VucyhzZXNzaW9uLm1vZGVsLCBkb2NMaW5lLnN1YnN0cmluZyhzdGFydFdyYXBJbmRleCwgZW5kSW5kZXggfHwgdW5kZWZpbmVkKSwgb2Zmc2V0KTtcbiAgICB9XG59XG4iXX0=
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS13aWR0aC5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvcG9zaXRpb25pbmcvbGluZS13aWR0aC5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSXJELE1BQU0sT0FBTyxlQUFlO0lBQ3hCLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxPQUFvQixFQUFFLGNBQXNCLEVBQUUsU0FBaUI7UUFDaEcsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxlQUFlLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxFQUFFLGVBQWUsSUFBSSxFQUFFLENBQUM7UUFDdEYsTUFBTSxjQUFjLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRWpFLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxRQUFRLElBQUksU0FBUyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUgsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3Vyc29yUGFyYWdyYXBoIH0gZnJvbSAnLi9jdXJzb3ItcGFyYWdyYXBoJztcbmltcG9ydCB7IERpc3BsYXlUb2tlbiB9IGZyb20gJy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL2Rpc3BsYXktdG9rZW4ubW9kZWwnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuLi9leGVjdXRpb24vZWRpdC5zZXNzaW9uJztcblxuZXhwb3J0IGNsYXNzIExpbmVXaWR0aEhlbHBlciB7XG4gICAgc3RhdGljIGdldFBhcmFncmFwaExpbmVEaXNwbGF5VG9rZW5zKHNlc3Npb246IEVkaXRTZXNzaW9uLCBwYXJhZ3JhcGhJbmRleDogbnVtYmVyLCBsaW5lSW5kZXg6IG51bWJlcik6IERpc3BsYXlUb2tlbltdIHtcbiAgICAgICAgY29uc3QgZG9jUG9zID0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5wb3NpdGlvblRvSW5kZXgobmV3IEN1cnNvclBhcmFncmFwaChwYXJhZ3JhcGhJbmRleCwgMCksIDApO1xuICAgICAgICBjb25zdCByb3dXcmFwID0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzW3BhcmFncmFwaEluZGV4XT8ubmV4dExpbmVJbmRleGVzIHx8IFtdO1xuICAgICAgICBjb25zdCBzdGFydFdyYXBJbmRleCA9IGxpbmVJbmRleCA+IDAgPyByb3dXcmFwW2xpbmVJbmRleCAtIDFdIDogMDtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSByb3dXcmFwW2xpbmVJbmRleF07XG4gICAgICAgIGNvbnN0IGRvY0xpbmUgPSBzZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaENvbnRlbnQocGFyYWdyYXBoSW5kZXgpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBzdGFydFdyYXBJbmRleCA/IGRvY1BvcyArIHN0YXJ0V3JhcEluZGV4IDogZG9jUG9zO1xuXG4gICAgICAgIHJldHVybiBzZXNzaW9uLmRpc3BsYXlEYXRhLmdldExpbmVUb2tlbnMoc2Vzc2lvbi5tb2RlbCwgZG9jTGluZS5zdWJzdHJpbmcoc3RhcnRXcmFwSW5kZXgsIGVuZEluZGV4IHx8IHVuZGVmaW5lZCksIG9mZnNldCk7XG4gICAgfVxufVxuIl19
@@ -16,10 +16,10 @@ export class PositionHelper {
16
16
  const { paragraphIndex, lineIndex } = this.findLineInParagraphs(paragraphs, row);
17
17
  let lineTopOffset = 0;
18
18
  for (let i = 0; i < lineIndex; i++) {
19
- const info = paragraphs[paragraphIndex].textLinesInfo[i];
19
+ const info = paragraphs[paragraphIndex].paragraphSettings.textLinesInfo[i];
20
20
  lineTopOffset += info.height + info.endPageOffset + info.offsetBefore + info.offsetAfter;
21
21
  }
22
- const paragraphLineInfo = paragraphs[paragraphIndex].textLinesInfo[lineIndex];
22
+ const paragraphLineInfo = paragraphs[paragraphIndex].paragraphSettings.textLinesInfo[lineIndex];
23
23
  lineTopOffset += paragraphLineInfo.offsetBefore;
24
24
  return {
25
25
  paragraphIndex,
@@ -30,37 +30,39 @@ export class PositionHelper {
30
30
  };
31
31
  }
32
32
  static documentToScreen(session, paragraph, indexInParagraph) {
33
- const paragraphLine = session.wrapParagraphLine[paragraph];
34
- if (!session.wrapData[paragraph].length || session.wrapData[paragraph][0] > indexInParagraph) {
33
+ const paragraphLine = session.displayData.paragraphs[paragraph].lineNumber;
34
+ if (!session.displayData.paragraphs[paragraph].nextLineIndexes.length ||
35
+ session.displayData.paragraphs[paragraph].nextLineIndexes[0] > indexInParagraph) {
35
36
  return new CursorParagraph(paragraphLine, indexInParagraph);
36
37
  }
37
38
  let line = 0;
38
- while (session.wrapData[paragraph][line] <= indexInParagraph && line < session.wrapData[paragraph].length) {
39
+ while (session.displayData.paragraphs[paragraph].nextLineIndexes[line] <= indexInParagraph &&
40
+ line < session.displayData.paragraphs[paragraph].nextLineIndexes.length) {
39
41
  line++;
40
42
  }
41
- const index = indexInParagraph - session.wrapData[paragraph][line - 1];
43
+ const index = indexInParagraph - session.displayData.paragraphs[paragraph].nextLineIndexes[line - 1];
42
44
  return new CursorParagraph(paragraphLine + line, index);
43
45
  }
44
46
  static screenToDocument(session, line, indexInLine) {
45
- let paragraph = session.wrapParagraphLine.findIndex(x => x > line);
47
+ let paragraph = session.displayData.paragraphs.findIndex(x => x.lineNumber > line);
46
48
  if (paragraph === -1) {
47
- paragraph = session.wrapParagraphLine.length - 1;
49
+ paragraph = session.displayData.paragraphs.length - 1;
48
50
  }
49
51
  else if (paragraph > 0) {
50
52
  paragraph = paragraph - 1;
51
53
  }
52
- let lineInParagraph = line - session.wrapParagraphLine[paragraph];
53
- if (!session.wrapData[paragraph].length || lineInParagraph === 0) {
54
+ let lineInParagraph = line - session.displayData.paragraphs[paragraph].lineNumber;
55
+ if (!session.displayData.paragraphs[paragraph].nextLineIndexes.length || lineInParagraph === 0) {
54
56
  return new CursorParagraph(paragraph, indexInLine);
55
57
  }
56
- const index = indexInLine + session.wrapData[paragraph][lineInParagraph - 1];
58
+ const index = indexInLine + session.displayData.paragraphs[paragraph].nextLineIndexes[lineInParagraph - 1];
57
59
  return new CursorParagraph(paragraph, index);
58
60
  }
59
61
  /**
60
62
  * Returns an object containing the `pageX` and `pageY` coordinates of the document position.
61
63
  **/
62
64
  static screenToPixel(session, row, column) {
63
- const paragraphs = session.pagesWrap.paragraphs;
65
+ const paragraphs = session.displayData.paragraphs;
64
66
  const paragraphInfo = this.getParagraphInfoByRow(paragraphs, row);
65
67
  const tokens = LineWidthHelper.getParagraphLineDisplayTokens(session, paragraphInfo.paragraphIndex, paragraphInfo.lineIndex);
66
68
  let size = {
@@ -80,7 +82,7 @@ export class PositionHelper {
80
82
  }
81
83
  const sizeNext = tokens[tokenIndex + 1];
82
84
  let sizeMax = { ...size };
83
- let lineWidthToPosition = session.pagesWrap.documentMargin.left;
85
+ let lineWidthToPosition = session.displayData.pageMargin.left;
84
86
  for (let currentColumn = 0; currentColumn < tokens.length; currentColumn++) {
85
87
  if (currentColumn < column) {
86
88
  lineWidthToPosition += tokens[currentColumn].width;
@@ -93,8 +95,8 @@ export class PositionHelper {
93
95
  sizeMax.ascent = paragraphInfo.lineHeight;
94
96
  }
95
97
  const paragraph = paragraphs[paragraphInfo.paragraphIndex];
96
- const paragraphTop = paragraph.distanceFromTop || 0;
97
- const linePaddingLeft = paragraph.textLinesInfo[paragraphInfo.lineIndex].paddingLeft;
98
+ const paragraphTop = paragraph.paragraphSettings.distanceFromTop || 0;
99
+ const linePaddingLeft = paragraph.paragraphSettings.textLinesInfo[paragraphInfo.lineIndex].paddingLeft;
98
100
  return {
99
101
  pageX: lineWidthToPosition + linePaddingLeft,
100
102
  pageY: paragraphTop + paragraphInfo.lineTopOffset - session.scrollTop,
@@ -110,21 +112,21 @@ export class PositionHelper {
110
112
  * Converts pixel position to screen position
111
113
  **/
112
114
  static pixelToScreen(session, x, y, scrollerPosition) {
113
- const wrap = session.pagesWrap;
115
+ const displayData = session.displayData;
114
116
  const scrollTop = session.scrollTop;
115
117
  let yPos = y + scrollTop - scrollerPosition.top;
116
- let paragraphIndex = wrap.paragraphs.findIndex(paragraph => paragraph.distanceFromTop > yPos);
118
+ let paragraphIndex = displayData.paragraphs.findIndex(paragraph => paragraph.paragraphSettings.distanceFromTop > yPos);
117
119
  if (paragraphIndex < 0) {
118
- paragraphIndex = wrap.paragraphs.length - 1;
120
+ paragraphIndex = displayData.paragraphs.length - 1;
119
121
  }
120
122
  else if (paragraphIndex > 0) {
121
123
  paragraphIndex--;
122
124
  }
123
- const paragraph = wrap.paragraphs[paragraphIndex];
124
- yPos -= paragraph.distanceFromTop;
125
+ const paragraphSettings = displayData.getParagraphSettings(paragraphIndex);
126
+ yPos -= paragraphSettings.distanceFromTop;
125
127
  let lineIndex = 0;
126
- while (yPos > 0 && lineIndex < paragraph.textLinesInfo.length - 1) {
127
- const line = paragraph.textLinesInfo[lineIndex];
128
+ while (yPos > 0 && lineIndex < paragraphSettings.textLinesInfo.length - 1) {
129
+ const line = paragraphSettings.textLinesInfo[lineIndex];
128
130
  const width = line.height + line.endPageOffset + line.offsetBefore + line.offsetAfter;
129
131
  if (yPos <= width) {
130
132
  break;
@@ -132,9 +134,9 @@ export class PositionHelper {
132
134
  lineIndex++;
133
135
  yPos -= width;
134
136
  }
135
- const line = paragraph.textLinesInfo[lineIndex].screenLine;
137
+ const line = paragraphSettings.textLinesInfo[lineIndex].screenLine;
136
138
  let index = 0;
137
- let xPos = x - scrollerPosition.left - wrap.documentMargin.left - paragraph.textLinesInfo[lineIndex].paddingLeft;
139
+ let xPos = x - scrollerPosition.left - displayData.pageMargin.left - paragraphSettings.textLinesInfo[lineIndex].paddingLeft;
138
140
  const tokens = LineWidthHelper.getParagraphLineDisplayTokens(session, paragraphIndex, lineIndex);
139
141
  if (tokens[0].displayValue === DisplayValue.emptyLine) {
140
142
  return new CursorParagraph(line, index);
@@ -152,25 +154,25 @@ export class PositionHelper {
152
154
  let index = 0;
153
155
  let paragraphIndex = 0;
154
156
  while (paragraphIndex < paragraphs.length) {
155
- if (index + paragraphs[paragraphIndex].textLinesInfo.length > documentLine) {
157
+ if (index + paragraphs[paragraphIndex].paragraphSettings.textLinesInfo.length > documentLine) {
156
158
  break;
157
159
  }
158
- index += paragraphs[paragraphIndex].textLinesInfo.length;
160
+ index += paragraphs[paragraphIndex].paragraphSettings.textLinesInfo.length;
159
161
  paragraphIndex++;
160
162
  }
161
163
  const lineIndex = documentLine - index;
162
164
  return { paragraphIndex, lineIndex };
163
165
  }
164
166
  static getApproximatePosition(session, documentLine, positionWidth) {
165
- const paragraphs = session.pagesWrap.paragraphs;
166
- const documentMargin = session.pagesWrap.documentMargin;
167
+ const paragraphs = session.displayData.paragraphs;
168
+ const documentMargin = session.displayData.pageMargin;
167
169
  const { paragraphIndex, lineIndex } = PositionHelper.findLineInParagraphs(paragraphs, documentLine);
168
170
  let column = 0;
169
171
  const tokens = LineWidthHelper.getParagraphLineDisplayTokens(session, paragraphIndex, lineIndex);
170
172
  if (tokens.length === 1 && tokens[0].displayValue === DisplayValue.emptyLine) {
171
173
  return column;
172
174
  }
173
- const textLineInfo = paragraphs[paragraphIndex].textLinesInfo[lineIndex];
175
+ const textLineInfo = paragraphs[paragraphIndex].paragraphSettings.textLinesInfo[lineIndex];
174
176
  let width = positionWidth - textLineInfo.paddingLeft - documentMargin.left;
175
177
  while (column < tokens.length && width >= tokens[column].width) {
176
178
  width -= tokens[column].width;
@@ -179,10 +181,10 @@ export class PositionHelper {
179
181
  return column;
180
182
  }
181
183
  static pixelToPage(posY, session) {
182
- const pagesCount = session.pagesWrap.paragraphs[session.pagesWrap.paragraphs.length - 1].lastPageNumber;
184
+ const pagesCount = session.displayData.getParagraphSettings(session.displayData.paragraphs.length - 1).lastPageNumber;
183
185
  let page = 1;
184
186
  while (page <= pagesCount) {
185
- const endPagePosition = (session.pagesWrap.pagesSpace + session.pagesWrap.pageHeight) * page;
187
+ const endPagePosition = (session.displayData.pagesSpace + session.displayData.pageHeight) * page;
186
188
  if (endPagePosition >= posY) {
187
189
  break;
188
190
  }
@@ -191,4 +193,4 @@ export class PositionHelper {
191
193
  return page;
192
194
  }
193
195
  }
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24uaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL3Bvc2l0aW9uaW5nL3Bvc2l0aW9uLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBR3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUl0RCxNQUFNLE9BQU8sY0FBYztJQUN2Qjs7T0FFRztJQUNILE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBb0IsRUFBRSxnQkFBaUM7UUFDMUUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckcsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQ7O1FBRUk7SUFDSixNQUFNLENBQUMscUJBQXFCLENBQUMsVUFBdUIsRUFBRSxHQUFXO1FBQzdELE1BQU0sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqRixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNoQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pE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QUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1FBQ3hHLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLE9BQU8sSUFBSSxJQUFJLFVBQVUsRUFBRTtZQUN2QixNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzdGLElBQUksZUFBZSxJQUFJLElBQUksRUFBRTtnQkFDekIsTUFBTTthQUNUO1lBQ0QsSUFBSSxFQUFFLENBQUM7U0FDVjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1cnNvclBhcmFncmFwaCB9IGZyb20gJy4vY3Vyc29yLXBhcmFncmFwaCc7XG5pbXBvcnQgeyBDdXJzb3JQb3NpdGlvbiB9IGZyb20gJy4vY3Vyc29yLXBvc2l0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEaXNwbGF5VmFsdWUgfSBmcm9tICcuLi9jb250ZW50L2NvbnN0YW50cy9kaXNwbGF5LXZhbHVlcy5jb25zdCc7XG5pbXBvcnQgeyBFZGl0U2Vzc2lvbiB9IGZyb20gJy4uL2V4ZWN1dGlvbi9lZGl0LnNlc3Npb24nO1xuaW1wb3J0IHsgSUZvbnRNZXRyaWNTaXplIH0gZnJvbSAnLi4vZ2FkZ2V0cy9mb250LW1ldHJpY3MvZm9udC1tZXRyaWMtc2l6ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGluZVdpZHRoSGVscGVyIH0gZnJvbSAnLi9saW5lLXdpZHRoLmhlbHBlcic7XG5pbXBvcnQgeyBQYXJhZ3JhcGggfSBmcm9tICcuLi9jb250ZW50L2Rpc3BsYXktZGF0YS9wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgUGFyYWdyYXBoSW5mbyB9IGZyb20gJy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL3BhcmFncmFwaC1pbmZvLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBQb3NpdGlvbkhlbHBlciB7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYHBhZ2VYYCBhbmQgYHBhZ2VZYCBjb29yZGluYXRlcyBvZiB0aGUgZG9jdW1lbnQgcG9zaXRpb24uXG4gICAgICovXG4gICAgc3RhdGljIGRvY3VtZW50VG9QaXhlbChzZXNzaW9uOiBFZGl0U2Vzc2lvbiwgZG9jdW1lbnRQb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoKTogQ3Vyc29yUG9zaXRpb24ge1xuICAgICAgICBjb25zdCBzY3JlZW5Qb3NpdGlvbiA9IHRoaXMuZG9jdW1lbnRUb1NjcmVlbihzZXNzaW9uLCBkb2N1bWVudFBvc2l0aW9uLnJvdywgZG9jdW1lbnRQb3NpdGlvbi5jb2x1bW4pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnNjcmVlblRvUGl4ZWwoc2Vzc2lvbiwgc2NyZWVuUG9zaXRpb24ucm93LCBzY3JlZW5Qb3NpdGlvbi5jb2x1bW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBwYXJhZ3JhcGggaW5mbyAocGFyYWdyYXBoIGluZGV4LCBwYXJhZ3JhcGggbGluZSBpbmRleCwgbGluZSB0b3Agb2Zmc2V0IGFuZCBvdGhlcnMpIGJ5IHJvdyBpbmRleFxuICAgICAqKi9cbiAgICBzdGF0aWMgZ2V0UGFyYWdyYXBoSW5mb0J5Um93KHBhcmFncmFwaHM6IFBhcmFncmFwaFtdLCByb3c6IG51bWJlcik6IFBhcmFncmFwaEluZm8ge1xuICAgICAgICBjb25zdCB7IHBhcmFncmFwaEluZGV4LCBsaW5lSW5kZXggfSA9IHRoaXMuZmluZExpbmVJblBhcmFncmFwaHMocGFyYWdyYXBocywgcm93KTtcbiAgICAgICAgbGV0IGxpbmVUb3BPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbmZvID0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0udGV4dExpbmVzSW5mb1tpXTtcbiAgICAgICAgICAgIGxpbmVUb3BPZmZzZXQgKz0gaW5mby5oZWlnaHQgKyBpbmZvLmVuZFBhZ2VPZmZzZXQgKyBpbmZvLm9mZnNldEJlZm9yZSArIGluZm8ub2Zmc2V0QWZ0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhZ3JhcGhMaW5lSW5mbyA9IHBhcmFncmFwaHNbcGFyYWdyYXBoSW5kZXhdLnRleHRMaW5lc0luZm9bbGluZUluZGV4XTtcbiAgICAgICAgbGluZVRvcE9mZnNldCArPSBwYXJhZ3JhcGhMaW5lSW5mby5vZmZzZXRCZWZvcmU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhcmFncmFwaEluZGV4LFxuICAgICAgICAgICAgbGluZUluZGV4LFxuICAgICAgICAgICAgbGluZVRvcE9mZnNldCxcbiAgICAgICAgICAgIGluZGVudEJlZm9yZTogcGFyYWdyYXBoTGluZUluZm8ub2Zmc2V0QmVmb3JlLFxuICAgICAgICAgICAgbGluZUhlaWdodDogcGFyYWdyYXBoTGluZUluZm8uaGVpZ2h0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIGRvY3VtZW50VG9TY3JlZW4oc2Vzc2lvbjogRWRpdFNlc3Npb24sIHBhcmFncmFwaDogbnVtYmVyLCBpbmRleEluUGFyYWdyYXBoOiBudW1iZXIpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhMaW5lID0gc2Vzc2lvbi53cmFwUGFyYWdyYXBoTGluZVtwYXJhZ3JhcGhdO1xuICAgICAgICBpZiAoIXNlc3Npb24ud3JhcERhdGFbcGFyYWdyYXBoXS5sZW5ndGggfHwgc2Vzc2lvbi53cmFwRGF0YVtwYXJhZ3JhcGhdWzBdID4gaW5kZXhJblBhcmFncmFwaCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDdXJzb3JQYXJhZ3JhcGgocGFyYWdyYXBoTGluZSwgaW5kZXhJblBhcmFncmFwaCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGluZSA9IDA7XG4gICAgICAgIHdoaWxlIChzZXNzaW9uLndyYXBEYXRhW3BhcmFncmFwaF1bbGluZV0gPD0gaW5kZXhJblBhcmFncmFwaCAmJiBsaW5lIDwgc2Vzc2lvbi53cmFwRGF0YVtwYXJhZ3JhcGhdLmxlbmd0aCkge1xuICAgICAgICAgICAgbGluZSsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gaW5kZXhJblBhcmFncmFwaCAtIHNlc3Npb24ud3JhcERhdGFbcGFyYWdyYXBoXVtsaW5lIC0gMV07XG4gICAgICAgIHJldHVybiBuZXcgQ3Vyc29yUGFyYWdyYXBoKHBhcmFncmFwaExpbmUgKyBsaW5lLCBpbmRleCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHNjcmVlblRvRG9jdW1lbnQoc2Vzc2lvbjogRWRpdFNlc3Npb24sIGxpbmU6IG51bWJlciwgaW5kZXhJbkxpbmU6IG51bWJlcik6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGxldCBwYXJhZ3JhcGggPSBzZXNzaW9uLndyYXBQYXJhZ3JhcGhMaW5lLmZpbmRJbmRleCh4ID0+IHggPiBsaW5lKTtcbiAgICAgICAgaWYgKHBhcmFncmFwaCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHBhcmFncmFwaCA9IHNlc3Npb24ud3JhcFBhcmFncmFwaExpbmUubGVuZ3RoIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhZ3JhcGggPiAwKSB7XG4gICAgICAgICAgICBwYXJhZ3JhcGggPSBwYXJhZ3JhcGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsaW5lSW5QYXJhZ3JhcGggPSBsaW5lIC0gc2Vzc2lvbi53cmFwUGFyYWdyYXBoTGluZVtwYXJhZ3JhcGhdO1xuICAgICAgICBpZiAoIXNlc3Npb24ud3JhcERhdGFbcGFyYWdyYXBoXS5sZW5ndGggfHwgbGluZUluUGFyYWdyYXBoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEN1cnNvclBhcmFncmFwaChwYXJhZ3JhcGgsIGluZGV4SW5MaW5lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IGluZGV4SW5MaW5lICsgc2Vzc2lvbi53cmFwRGF0YVtwYXJhZ3JhcGhdW2xpbmVJblBhcmFncmFwaCAtIDFdO1xuICAgICAgICByZXR1cm4gbmV3IEN1cnNvclBhcmFncmFwaChwYXJhZ3JhcGgsIGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBgcGFnZVhgIGFuZCBgcGFnZVlgIGNvb3JkaW5hdGVzIG9mIHRoZSBkb2N1bWVudCBwb3NpdGlvbi5cbiAgICAgKiovXG4gICAgc3RhdGljIHNjcmVlblRvUGl4ZWwoc2Vzc2lvbjogRWRpdFNlc3Npb24sIHJvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlcik6IEN1cnNvclBvc2l0aW9uIHtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBocyA9IHNlc3Npb24ucGFnZXNXcmFwLnBhcmFncmFwaHM7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaEluZm8gPSB0aGlzLmdldFBhcmFncmFwaEluZm9CeVJvdyhwYXJhZ3JhcGhzLCByb3cpO1xuICAgICAgICBjb25zdCB0b2tlbnMgPSBMaW5lV2lkdGhIZWxwZXIuZ2V0UGFyYWdyYXBoTGluZURpc3BsYXlUb2tlbnMoc2Vzc2lvbiwgcGFyYWdyYXBoSW5mby5wYXJhZ3JhcGhJbmRleCwgcGFyYWdyYXBoSW5mby5saW5lSW5kZXgpO1xuXG4gICAgICAgIGxldCBzaXplOiBJRm9udE1ldHJpY1NpemUgPSB7XG4gICAgICAgICAgICB3aWR0aDogOCxcbiAgICAgICAgICAgIGhlaWdodDogcGFyYWdyYXBoSW5mby5saW5lSGVpZ2h0LFxuICAgICAgICAgICAgYmFzZWxpbmU6IHBhcmFncmFwaEluZm8ubGluZUhlaWdodCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHBhcmFncmFwaEluZm8ubGluZUhlaWdodCxcbiAgICAgICAgICAgIGZvbnQ6IHBhcmFncmFwaEluZm8ubGluZUhlaWdodCxcbiAgICAgICAgICAgIGxpbmU6IHBhcmFncmFwaEluZm8ubGluZUhlaWdodCxcbiAgICAgICAgICAgIG11bHRpcGxpZXI6IHBhcmFncmFwaEluZm8ubGluZUhlaWdodCxcbiAgICAgICAgICAgIGFzY2VudDogMCxcbiAgICAgICAgICAgIGRlc2NlbnQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHRva2VuSW5kZXggPSBjb2x1bW4gPiAwID8gY29sdW1uIC0gMSA6IGNvbHVtbjtcbiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzaXplID0gdG9rZW5zW3Rva2VuSW5kZXhdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2l6ZU5leHQgPSB0b2tlbnNbdG9rZW5JbmRleCArIDFdO1xuICAgICAgICBsZXQgc2l6ZU1heCA9IHsgLi4uc2l6ZSB9O1xuICAgICAgICBsZXQgbGluZVdpZHRoVG9Qb3NpdGlvbiA9IHNlc3Npb24ucGFnZXNXcmFwLmRvY3VtZW50TWFyZ2luLmxlZnQ7XG4gICAgICAgIGZvciAobGV0IGN1cnJlbnRDb2x1bW4gPSAwOyBjdXJyZW50Q29sdW1uIDwgdG9rZW5zLmxlbmd0aDsgY3VycmVudENvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudENvbHVtbiA8IGNvbHVtbikge1xuICAgICAgICAgICAgICAgIGxpbmVXaWR0aFRvUG9zaXRpb24gKz0gdG9rZW5zW2N1cnJlbnRDb2x1bW5dLndpZHRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2l6ZU1heC5hc2NlbnQgPCB0b2tlbnNbY3VycmVudENvbHVtbl0uYXNjZW50KSB7XG4gICAgICAgICAgICAgICAgc2l6ZU1heCA9IHRva2Vuc1tjdXJyZW50Q29sdW1uXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b2tlbnNbdG9rZW5JbmRleF0/LmlzVGFibGUpIHtcbiAgICAgICAgICAgIHNpemVNYXguYXNjZW50ID0gcGFyYWdyYXBoSW5mby5saW5lSGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYWdyYXBoID0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmZvLnBhcmFncmFwaEluZGV4XTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoVG9wID0gcGFyYWdyYXBoLmRpc3RhbmNlRnJvbVRvcCB8fCAwO1xuICAgICAgICBjb25zdCBsaW5lUGFkZGluZ0xlZnQgPSBwYXJhZ3JhcGgudGV4dExpbmVzSW5mb1twYXJhZ3JhcGhJbmZvLmxpbmVJbmRleF0ucGFkZGluZ0xlZnQ7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhZ2VYOiBsaW5lV2lkdGhUb1Bvc2l0aW9uICsgbGluZVBhZGRpbmdMZWZ0LFxuICAgICAgICAgICAgcGFnZVk6IHBhcmFncmFwaFRvcCArIHBhcmFncmFwaEluZm8ubGluZVRvcE9mZnNldCAtIHNlc3Npb24uc2Nyb2xsVG9wLFxuICAgICAgICAgICAgbGluZUhlaWdodDogcGFyYWdyYXBoSW5mby5saW5lSGVpZ2h0LFxuICAgICAgICAgICAgc2l6ZUN1cnJlbnQ6IHNpemUsXG4gICAgICAgICAgICBzaXplTWF4LFxuICAgICAgICAgICAgc2l6ZU5leHQsXG4gICAgICAgICAgICBmaXJzdENoYXI6IGNvbHVtbiA9PT0gMCxcbiAgICAgICAgICAgIGxhc3RDaGFyOiBjb2x1bW4gPT09IHRva2Vucy5sZW5ndGggLSAxXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgcGl4ZWwgcG9zaXRpb24gdG8gc2NyZWVuIHBvc2l0aW9uXG4gICAgICoqL1xuICAgIHN0YXRpYyBwaXhlbFRvU2NyZWVuKHNlc3Npb246IEVkaXRTZXNzaW9uLCB4OiBudW1iZXIsIHk6IG51bWJlciwgc2Nyb2xsZXJQb3NpdGlvbjogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0pOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBjb25zdCB3cmFwID0gc2Vzc2lvbi5wYWdlc1dyYXA7XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHNlc3Npb24uc2Nyb2xsVG9wO1xuXG4gICAgICAgIGxldCB5UG9zID0geSArIHNjcm9sbFRvcCAtIHNjcm9sbGVyUG9zaXRpb24udG9wO1xuICAgICAgICBsZXQgcGFyYWdyYXBoSW5kZXggPSB3cmFwLnBhcmFncmFwaHMuZmluZEluZGV4KHBhcmFncmFwaCA9PiBwYXJhZ3JhcGguZGlzdGFuY2VGcm9tVG9wID4geVBvcyk7XG4gICAgICAgIGlmIChwYXJhZ3JhcGhJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHBhcmFncmFwaEluZGV4ID0gd3JhcC5wYXJhZ3JhcGhzLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYWdyYXBoSW5kZXggPiAwKSB7XG4gICAgICAgICAgICBwYXJhZ3JhcGhJbmRleC0tO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYWdyYXBoID0gd3JhcC5wYXJhZ3JhcGhzW3BhcmFncmFwaEluZGV4XTtcbiAgICAgICAgeVBvcyAtPSBwYXJhZ3JhcGguZGlzdGFuY2VGcm9tVG9wO1xuICAgICAgICBsZXQgbGluZUluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKHlQb3MgPiAwICYmIGxpbmVJbmRleCA8IHBhcmFncmFwaC50ZXh0TGluZXNJbmZvLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBwYXJhZ3JhcGgudGV4dExpbmVzSW5mb1tsaW5lSW5kZXhdO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBsaW5lLmhlaWdodCArIGxpbmUuZW5kUGFnZU9mZnNldCArIGxpbmUub2Zmc2V0QmVmb3JlICsgbGluZS5vZmZzZXRBZnRlcjtcbiAgICAgICAgICAgIGlmICh5UG9zIDw9IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5lSW5kZXgrKztcbiAgICAgICAgICAgIHlQb3MgLT0gd2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGluZSA9IHBhcmFncmFwaC50ZXh0TGluZXNJbmZvW2xpbmVJbmRleF0uc2NyZWVuTGluZTtcblxuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBsZXQgeFBvcyA9IHggLSBzY3JvbGxlclBvc2l0aW9uLmxlZnQgLSB3cmFwLmRvY3VtZW50TWFyZ2luLmxlZnQgLSBwYXJhZ3JhcGgudGV4dExpbmVzSW5mb1tsaW5lSW5kZXhdLnBhZGRpbmdMZWZ0O1xuICAgICAgICBjb25zdCB0b2tlbnMgPSBMaW5lV2lkdGhIZWxwZXIuZ2V0UGFyYWdyYXBoTGluZURpc3BsYXlUb2tlbnMoc2Vzc2lvbiwgcGFyYWdyYXBoSW5kZXgsIGxpbmVJbmRleCk7XG4gICAgICAgIGlmICh0b2tlbnNbMF0uZGlzcGxheVZhbHVlID09PSBEaXNwbGF5VmFsdWUuZW1wdHlMaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEN1cnNvclBhcmFncmFwaChsaW5lLCBpbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAodG9rZW5zLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICAgICAgICBpZiAoeFBvcyA8IHRva2Vuc1tpbmRleF0ud2lkdGggLyAyKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHhQb3MgLT0gdG9rZW5zW2luZGV4XS53aWR0aDtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDdXJzb3JQYXJhZ3JhcGgobGluZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIHN0YXRpYyBmaW5kTGluZUluUGFyYWdyYXBocyhwYXJhZ3JhcGhzOiBQYXJhZ3JhcGhbXSwgZG9jdW1lbnRMaW5lOiBudW1iZXIpOiB7IHBhcmFncmFwaEluZGV4OiBudW1iZXI7IGxpbmVJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBsZXQgcGFyYWdyYXBoSW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAocGFyYWdyYXBoSW5kZXggPCBwYXJhZ3JhcGhzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ICsgcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0udGV4dExpbmVzSW5mby5sZW5ndGggPiBkb2N1bWVudExpbmUpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5kZXggKz0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0udGV4dExpbmVzSW5mby5sZW5ndGg7XG4gICAgICAgICAgICBwYXJhZ3JhcGhJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpbmVJbmRleCA9IGRvY3VtZW50TGluZSAtIGluZGV4O1xuICAgICAgICByZXR1cm4geyBwYXJhZ3JhcGhJbmRleCwgbGluZUluZGV4IH07XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEFwcHJveGltYXRlUG9zaXRpb24oc2Vzc2lvbjogRWRpdFNlc3Npb24sIGRvY3VtZW50TGluZTogbnVtYmVyLCBwb3NpdGlvbldpZHRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzID0gc2Vzc2lvbi5wYWdlc1dyYXAucGFyYWdyYXBocztcbiAgICAgICAgY29uc3QgZG9jdW1lbnRNYXJnaW4gPSBzZXNzaW9uLnBhZ2VzV3JhcC5kb2N1bWVudE1hcmdpbjtcbiAgICAgICAgY29uc3QgeyBwYXJhZ3JhcGhJbmRleCwgbGluZUluZGV4IH0gPSBQb3NpdGlvbkhlbHBlci5maW5kTGluZUluUGFyYWdyYXBocyhwYXJhZ3JhcGhzLCBkb2N1bWVudExpbmUpO1xuICAgICAgICBsZXQgY29sdW1uID0gMDtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gTGluZVdpZHRoSGVscGVyLmdldFBhcmFncmFwaExpbmVEaXNwbGF5VG9rZW5zKHNlc3Npb24sIHBhcmFncmFwaEluZGV4LCBsaW5lSW5kZXgpO1xuICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMSAmJiB0b2tlbnNbMF0uZGlzcGxheVZhbHVlID09PSBEaXNwbGF5VmFsdWUuZW1wdHlMaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGV4dExpbmVJbmZvID0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0udGV4dExpbmVzSW5mb1tsaW5lSW5kZXhdO1xuICAgICAgICBsZXQgd2lkdGggPSBwb3NpdGlvbldpZHRoIC0gdGV4dExpbmVJbmZvLnBhZGRpbmdMZWZ0IC0gZG9jdW1lbnRNYXJnaW4ubGVmdDtcbiAgICAgICAgd2hpbGUgKGNvbHVtbiA8IHRva2Vucy5sZW5ndGggJiYgd2lkdGggPj0gdG9rZW5zW2NvbHVtbl0ud2lkdGgpIHtcbiAgICAgICAgICAgIHdpZHRoIC09IHRva2Vuc1tjb2x1bW5dLndpZHRoO1xuICAgICAgICAgICAgY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGl4ZWxUb1BhZ2UocG9zWTogbnVtYmVyLCBzZXNzaW9uOiBFZGl0U2Vzc2lvbik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHBhZ2VzQ291bnQgPSBzZXNzaW9uLnBhZ2VzV3JhcC5wYXJhZ3JhcGhzW3Nlc3Npb24ucGFnZXNXcmFwLnBhcmFncmFwaHMubGVuZ3RoIC0gMV0ubGFzdFBhZ2VOdW1iZXI7XG4gICAgICAgIGxldCBwYWdlID0gMTtcbiAgICAgICAgd2hpbGUgKHBhZ2UgPD0gcGFnZXNDb3VudCkge1xuICAgICAgICAgICAgY29uc3QgZW5kUGFnZVBvc2l0aW9uID0gKHNlc3Npb24ucGFnZXNXcmFwLnBhZ2VzU3BhY2UgKyBzZXNzaW9uLnBhZ2VzV3JhcC5wYWdlSGVpZ2h0KSAqIHBhZ2U7XG4gICAgICAgICAgICBpZiAoZW5kUGFnZVBvc2l0aW9uID49IHBvc1kpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhZ2UrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFnZTtcbiAgICB9XG59XG4iXX0=
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24uaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL3Bvc2l0aW9uaW5nL3Bvc2l0aW9uLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBR3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUl0RCxNQUFNLE9BQU8sY0FBYztJQUN2Qjs7T0FFRztJQUNILE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBb0IsRUFBRSxnQkFBaUM7UUFDMUUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFckcsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQ7O1FBRUk7SUFDSixNQUFNLENBQUMscUJBQXFCLENBQUMsVUFBZ0MsRUFBRSxHQUFXO1FBQ3RFLE1BQU0sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqRixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNoQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FB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O1FBQzNGLElBQUksS0FBSyxHQUFHLGFBQWEsR0FBRyxZQUFZLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFDM0UsT0FBTyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUM1RCxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUM5QixNQUFNLEVBQUUsQ0FBQztTQUNaO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBWSxFQUFFLE9BQW9CO1FBQ2pELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztRQUN0SCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFDYixPQUFPLElBQUksSUFBSSxVQUFVLEVBQUU7WUFDdkIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNqRyxJQUFJLGVBQWUsSUFBSSxJQUFJLEVBQUU7Z0JBQ3pCLE1BQU07YUFDVDtZQUNELElBQUksRUFBRSxDQUFDO1NBQ1Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJzb3JQYXJhZ3JhcGggfSBmcm9tICcuL2N1cnNvci1wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgQ3Vyc29yUG9zaXRpb24gfSBmcm9tICcuL2N1cnNvci1wb3NpdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRGlzcGxheVZhbHVlIH0gZnJvbSAnLi4vY29udGVudC9jb25zdGFudHMvZGlzcGxheS12YWx1ZXMuY29uc3QnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuLi9leGVjdXRpb24vZWRpdC5zZXNzaW9uJztcbmltcG9ydCB7IElGb250TWV0cmljU2l6ZSB9IGZyb20gJy4uL2dhZGdldHMvZm9udC1tZXRyaWNzL2ZvbnQtbWV0cmljLXNpemUuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpbmVXaWR0aEhlbHBlciB9IGZyb20gJy4vbGluZS13aWR0aC5oZWxwZXInO1xuaW1wb3J0IHsgUGFyYWdyYXBoSW5mbyB9IGZyb20gJy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL3BhcmFncmFwaC1pbmZvLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQYXJhZ3JhcGhJbmZvTW9kZWwgfSBmcm9tICcuLi9jb250ZW50L2Rpc3BsYXktZGF0YS9tb2RlbHMvcGFyYWdyYXBoLWluZm8ubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgUG9zaXRpb25IZWxwZXIge1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGBwYWdlWGAgYW5kIGBwYWdlWWAgY29vcmRpbmF0ZXMgb2YgdGhlIGRvY3VtZW50IHBvc2l0aW9uLlxuICAgICAqL1xuICAgIHN0YXRpYyBkb2N1bWVudFRvUGl4ZWwoc2Vzc2lvbjogRWRpdFNlc3Npb24sIGRvY3VtZW50UG9zaXRpb246IEN1cnNvclBhcmFncmFwaCk6IEN1cnNvclBvc2l0aW9uIHtcbiAgICAgICAgY29uc3Qgc2NyZWVuUG9zaXRpb24gPSB0aGlzLmRvY3VtZW50VG9TY3JlZW4oc2Vzc2lvbiwgZG9jdW1lbnRQb3NpdGlvbi5yb3csIGRvY3VtZW50UG9zaXRpb24uY29sdW1uKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW5Ub1BpeGVsKHNlc3Npb24sIHNjcmVlblBvc2l0aW9uLnJvdywgc2NyZWVuUG9zaXRpb24uY29sdW1uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgcGFyYWdyYXBoIGluZm8gKHBhcmFncmFwaCBpbmRleCwgcGFyYWdyYXBoIGxpbmUgaW5kZXgsIGxpbmUgdG9wIG9mZnNldCBhbmQgb3RoZXJzKSBieSByb3cgaW5kZXhcbiAgICAgKiovXG4gICAgc3RhdGljIGdldFBhcmFncmFwaEluZm9CeVJvdyhwYXJhZ3JhcGhzOiBQYXJhZ3JhcGhJbmZvTW9kZWxbXSwgcm93OiBudW1iZXIpOiBQYXJhZ3JhcGhJbmZvIHtcbiAgICAgICAgY29uc3QgeyBwYXJhZ3JhcGhJbmRleCwgbGluZUluZGV4IH0gPSB0aGlzLmZpbmRMaW5lSW5QYXJhZ3JhcGhzKHBhcmFncmFwaHMsIHJvdyk7XG4gICAgICAgIGxldCBsaW5lVG9wT2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lSW5kZXg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaW5mbyA9IHBhcmFncmFwaHNbcGFyYWdyYXBoSW5kZXhdLnBhcmFncmFwaFNldHRpbmdzLnRleHRMaW5lc0luZm9baV07XG4gICAgICAgICAgICBsaW5lVG9wT2Zmc2V0ICs9IGluZm8uaGVpZ2h0ICsgaW5mby5lbmRQYWdlT2Zmc2V0ICsgaW5mby5vZmZzZXRCZWZvcmUgKyBpbmZvLm9mZnNldEFmdGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYWdyYXBoTGluZUluZm8gPSBwYXJhZ3JhcGhzW3BhcmFncmFwaEluZGV4XS5wYXJhZ3JhcGhTZXR0aW5ncy50ZXh0TGluZXNJbmZvW2xpbmVJbmRleF07XG4gICAgICAgIGxpbmVUb3BPZmZzZXQgKz0gcGFyYWdyYXBoTGluZUluZm8ub2Zmc2V0QmVmb3JlO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYXJhZ3JhcGhJbmRleCxcbiAgICAgICAgICAgIGxpbmVJbmRleCxcbiAgICAgICAgICAgIGxpbmVUb3BPZmZzZXQsXG4gICAgICAgICAgICBpbmRlbnRCZWZvcmU6IHBhcmFncmFwaExpbmVJbmZvLm9mZnNldEJlZm9yZSxcbiAgICAgICAgICAgIGxpbmVIZWlnaHQ6IHBhcmFncmFwaExpbmVJbmZvLmhlaWdodFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBkb2N1bWVudFRvU2NyZWVuKHNlc3Npb246IEVkaXRTZXNzaW9uLCBwYXJhZ3JhcGg6IG51bWJlciwgaW5kZXhJblBhcmFncmFwaDogbnVtYmVyKTogQ3Vyc29yUGFyYWdyYXBoIHtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoTGluZSA9IHNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBoc1twYXJhZ3JhcGhdLmxpbmVOdW1iZXI7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFzZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHNbcGFyYWdyYXBoXS5uZXh0TGluZUluZGV4ZXMubGVuZ3RoIHx8XG4gICAgICAgICAgICBzZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHNbcGFyYWdyYXBoXS5uZXh0TGluZUluZGV4ZXNbMF0gPiBpbmRleEluUGFyYWdyYXBoXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDdXJzb3JQYXJhZ3JhcGgocGFyYWdyYXBoTGluZSwgaW5kZXhJblBhcmFncmFwaCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGluZSA9IDA7XG4gICAgICAgIHdoaWxlIChcbiAgICAgICAgICAgIHNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBoc1twYXJhZ3JhcGhdLm5leHRMaW5lSW5kZXhlc1tsaW5lXSA8PSBpbmRleEluUGFyYWdyYXBoICYmXG4gICAgICAgICAgICBsaW5lIDwgc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzW3BhcmFncmFwaF0ubmV4dExpbmVJbmRleGVzLmxlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGxpbmUrKztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IGluZGV4SW5QYXJhZ3JhcGggLSBzZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHNbcGFyYWdyYXBoXS5uZXh0TGluZUluZGV4ZXNbbGluZSAtIDFdO1xuICAgICAgICByZXR1cm4gbmV3IEN1cnNvclBhcmFncmFwaChwYXJhZ3JhcGhMaW5lICsgbGluZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIHN0YXRpYyBzY3JlZW5Ub0RvY3VtZW50KHNlc3Npb246IEVkaXRTZXNzaW9uLCBsaW5lOiBudW1iZXIsIGluZGV4SW5MaW5lOiBudW1iZXIpOiBDdXJzb3JQYXJhZ3JhcGgge1xuICAgICAgICBsZXQgcGFyYWdyYXBoID0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLmZpbmRJbmRleCh4ID0+IHgubGluZU51bWJlciA+IGxpbmUpO1xuICAgICAgICBpZiAocGFyYWdyYXBoID09PSAtMSkge1xuICAgICAgICAgICAgcGFyYWdyYXBoID0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYWdyYXBoID4gMCkge1xuICAgICAgICAgICAgcGFyYWdyYXBoID0gcGFyYWdyYXBoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGluZUluUGFyYWdyYXBoID0gbGluZSAtIHNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBoc1twYXJhZ3JhcGhdLmxpbmVOdW1iZXI7XG4gICAgICAgIGlmICghc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzW3BhcmFncmFwaF0ubmV4dExpbmVJbmRleGVzLmxlbmd0aCB8fCBsaW5lSW5QYXJhZ3JhcGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ3Vyc29yUGFyYWdyYXBoKHBhcmFncmFwaCwgaW5kZXhJbkxpbmUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gaW5kZXhJbkxpbmUgKyBzZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHNbcGFyYWdyYXBoXS5uZXh0TGluZUluZGV4ZXNbbGluZUluUGFyYWdyYXBoIC0gMV07XG4gICAgICAgIHJldHVybiBuZXcgQ3Vyc29yUGFyYWdyYXBoKHBhcmFncmFwaCwgaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGBwYWdlWGAgYW5kIGBwYWdlWWAgY29vcmRpbmF0ZXMgb2YgdGhlIGRvY3VtZW50IHBvc2l0aW9uLlxuICAgICAqKi9cbiAgICBzdGF0aWMgc2NyZWVuVG9QaXhlbChzZXNzaW9uOiBFZGl0U2Vzc2lvbiwgcm93OiBudW1iZXIsIGNvbHVtbjogbnVtYmVyKTogQ3Vyc29yUG9zaXRpb24ge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzID0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhJbmZvID0gdGhpcy5nZXRQYXJhZ3JhcGhJbmZvQnlSb3cocGFyYWdyYXBocywgcm93KTtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gTGluZVdpZHRoSGVscGVyLmdldFBhcmFncmFwaExpbmVEaXNwbGF5VG9rZW5zKHNlc3Npb24sIHBhcmFncmFwaEluZm8ucGFyYWdyYXBoSW5kZXgsIHBhcmFncmFwaEluZm8ubGluZUluZGV4KTtcblxuICAgICAgICBsZXQgc2l6ZTogSUZvbnRNZXRyaWNTaXplID0ge1xuICAgICAgICAgICAgd2lkdGg6IDgsXG4gICAgICAgICAgICBoZWlnaHQ6IHBhcmFncmFwaEluZm8ubGluZUhlaWdodCxcbiAgICAgICAgICAgIGJhc2VsaW5lOiBwYXJhZ3JhcGhJbmZvLmxpbmVIZWlnaHQsXG4gICAgICAgICAgICBjb250ZW50OiBwYXJhZ3JhcGhJbmZvLmxpbmVIZWlnaHQsXG4gICAgICAgICAgICBmb250OiBwYXJhZ3JhcGhJbmZvLmxpbmVIZWlnaHQsXG4gICAgICAgICAgICBsaW5lOiBwYXJhZ3JhcGhJbmZvLmxpbmVIZWlnaHQsXG4gICAgICAgICAgICBtdWx0aXBsaWVyOiBwYXJhZ3JhcGhJbmZvLmxpbmVIZWlnaHQsXG4gICAgICAgICAgICBhc2NlbnQ6IDAsXG4gICAgICAgICAgICBkZXNjZW50OiAwXG4gICAgICAgIH07XG4gICAgICAgIGxldCB0b2tlbkluZGV4ID0gY29sdW1uID4gMCA/IGNvbHVtbiAtIDEgOiBjb2x1bW47XG4gICAgICAgIGlmICh0b2tlbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2l6ZSA9IHRva2Vuc1t0b2tlbkluZGV4XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpemVOZXh0ID0gdG9rZW5zW3Rva2VuSW5kZXggKyAxXTtcbiAgICAgICAgbGV0IHNpemVNYXggPSB7IC4uLnNpemUgfTtcbiAgICAgICAgbGV0IGxpbmVXaWR0aFRvUG9zaXRpb24gPSBzZXNzaW9uLmRpc3BsYXlEYXRhLnBhZ2VNYXJnaW4ubGVmdDtcbiAgICAgICAgZm9yIChsZXQgY3VycmVudENvbHVtbiA9IDA7IGN1cnJlbnRDb2x1bW4gPCB0b2tlbnMubGVuZ3RoOyBjdXJyZW50Q29sdW1uKyspIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50Q29sdW1uIDwgY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgbGluZVdpZHRoVG9Qb3NpdGlvbiArPSB0b2tlbnNbY3VycmVudENvbHVtbl0ud2lkdGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaXplTWF4LmFzY2VudCA8IHRva2Vuc1tjdXJyZW50Q29sdW1uXS5hc2NlbnQpIHtcbiAgICAgICAgICAgICAgICBzaXplTWF4ID0gdG9rZW5zW2N1cnJlbnRDb2x1bW5dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRva2Vuc1t0b2tlbkluZGV4XT8uaXNUYWJsZSkge1xuICAgICAgICAgICAgc2l6ZU1heC5hc2NlbnQgPSBwYXJhZ3JhcGhJbmZvLmxpbmVIZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhZ3JhcGggPSBwYXJhZ3JhcGhzW3BhcmFncmFwaEluZm8ucGFyYWdyYXBoSW5kZXhdO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhUb3AgPSBwYXJhZ3JhcGgucGFyYWdyYXBoU2V0dGluZ3MuZGlzdGFuY2VGcm9tVG9wIHx8IDA7XG4gICAgICAgIGNvbnN0IGxpbmVQYWRkaW5nTGVmdCA9IHBhcmFncmFwaC5wYXJhZ3JhcGhTZXR0aW5ncy50ZXh0TGluZXNJbmZvW3BhcmFncmFwaEluZm8ubGluZUluZGV4XS5wYWRkaW5nTGVmdDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFnZVg6IGxpbmVXaWR0aFRvUG9zaXRpb24gKyBsaW5lUGFkZGluZ0xlZnQsXG4gICAgICAgICAgICBwYWdlWTogcGFyYWdyYXBoVG9wICsgcGFyYWdyYXBoSW5mby5saW5lVG9wT2Zmc2V0IC0gc2Vzc2lvbi5zY3JvbGxUb3AsXG4gICAgICAgICAgICBsaW5lSGVpZ2h0OiBwYXJhZ3JhcGhJbmZvLmxpbmVIZWlnaHQsXG4gICAgICAgICAgICBzaXplQ3VycmVudDogc2l6ZSxcbiAgICAgICAgICAgIHNpemVNYXgsXG4gICAgICAgICAgICBzaXplTmV4dCxcbiAgICAgICAgICAgIGZpcnN0Q2hhcjogY29sdW1uID09PSAwLFxuICAgICAgICAgICAgbGFzdENoYXI6IGNvbHVtbiA9PT0gdG9rZW5zLmxlbmd0aCAtIDFcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBwaXhlbCBwb3NpdGlvbiB0byBzY3JlZW4gcG9zaXRpb25cbiAgICAgKiovXG4gICAgc3RhdGljIHBpeGVsVG9TY3JlZW4oc2Vzc2lvbjogRWRpdFNlc3Npb24sIHg6IG51bWJlciwgeTogbnVtYmVyLCBzY3JvbGxlclBvc2l0aW9uOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSk6IEN1cnNvclBhcmFncmFwaCB7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlEYXRhID0gc2Vzc2lvbi5kaXNwbGF5RGF0YTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gc2Vzc2lvbi5zY3JvbGxUb3A7XG5cbiAgICAgICAgbGV0IHlQb3MgPSB5ICsgc2Nyb2xsVG9wIC0gc2Nyb2xsZXJQb3NpdGlvbi50b3A7XG4gICAgICAgIGxldCBwYXJhZ3JhcGhJbmRleCA9IGRpc3BsYXlEYXRhLnBhcmFncmFwaHMuZmluZEluZGV4KHBhcmFncmFwaCA9PiBwYXJhZ3JhcGgucGFyYWdyYXBoU2V0dGluZ3MuZGlzdGFuY2VGcm9tVG9wID4geVBvcyk7XG4gICAgICAgIGlmIChwYXJhZ3JhcGhJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHBhcmFncmFwaEluZGV4ID0gZGlzcGxheURhdGEucGFyYWdyYXBocy5sZW5ndGggLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFncmFwaEluZGV4ID4gMCkge1xuICAgICAgICAgICAgcGFyYWdyYXBoSW5kZXgtLTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFncmFwaFNldHRpbmdzID0gZGlzcGxheURhdGEuZ2V0UGFyYWdyYXBoU2V0dGluZ3MocGFyYWdyYXBoSW5kZXgpO1xuICAgICAgICB5UG9zIC09IHBhcmFncmFwaFNldHRpbmdzLmRpc3RhbmNlRnJvbVRvcDtcbiAgICAgICAgbGV0IGxpbmVJbmRleCA9IDA7XG4gICAgICAgIHdoaWxlICh5UG9zID4gMCAmJiBsaW5lSW5kZXggPCBwYXJhZ3JhcGhTZXR0aW5ncy50ZXh0TGluZXNJbmZvLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBwYXJhZ3JhcGhTZXR0aW5ncy50ZXh0TGluZXNJbmZvW2xpbmVJbmRleF07XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGxpbmUuaGVpZ2h0ICsgbGluZS5lbmRQYWdlT2Zmc2V0ICsgbGluZS5vZmZzZXRCZWZvcmUgKyBsaW5lLm9mZnNldEFmdGVyO1xuICAgICAgICAgICAgaWYgKHlQb3MgPD0gd2lkdGgpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVJbmRleCsrO1xuICAgICAgICAgICAgeVBvcyAtPSB3aWR0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsaW5lID0gcGFyYWdyYXBoU2V0dGluZ3MudGV4dExpbmVzSW5mb1tsaW5lSW5kZXhdLnNjcmVlbkxpbmU7XG5cbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgbGV0IHhQb3MgPSB4IC0gc2Nyb2xsZXJQb3NpdGlvbi5sZWZ0IC0gZGlzcGxheURhdGEucGFnZU1hcmdpbi5sZWZ0IC0gcGFyYWdyYXBoU2V0dGluZ3MudGV4dExpbmVzSW5mb1tsaW5lSW5kZXhdLnBhZGRpbmdMZWZ0O1xuICAgICAgICBjb25zdCB0b2tlbnMgPSBMaW5lV2lkdGhIZWxwZXIuZ2V0UGFyYWdyYXBoTGluZURpc3BsYXlUb2tlbnMoc2Vzc2lvbiwgcGFyYWdyYXBoSW5kZXgsIGxpbmVJbmRleCk7XG4gICAgICAgIGlmICh0b2tlbnNbMF0uZGlzcGxheVZhbHVlID09PSBEaXNwbGF5VmFsdWUuZW1wdHlMaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEN1cnNvclBhcmFncmFwaChsaW5lLCBpbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAodG9rZW5zLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICAgICAgICBpZiAoeFBvcyA8IHRva2Vuc1tpbmRleF0ud2lkdGggLyAyKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHhQb3MgLT0gdG9rZW5zW2luZGV4XS53aWR0aDtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDdXJzb3JQYXJhZ3JhcGgobGluZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIHN0YXRpYyBmaW5kTGluZUluUGFyYWdyYXBocyhwYXJhZ3JhcGhzOiBQYXJhZ3JhcGhJbmZvTW9kZWxbXSwgZG9jdW1lbnRMaW5lOiBudW1iZXIpOiB7IHBhcmFncmFwaEluZGV4OiBudW1iZXI7IGxpbmVJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBsZXQgcGFyYWdyYXBoSW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAocGFyYWdyYXBoSW5kZXggPCBwYXJhZ3JhcGhzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ICsgcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0ucGFyYWdyYXBoU2V0dGluZ3MudGV4dExpbmVzSW5mby5sZW5ndGggPiBkb2N1bWVudExpbmUpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5kZXggKz0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0ucGFyYWdyYXBoU2V0dGluZ3MudGV4dExpbmVzSW5mby5sZW5ndGg7XG4gICAgICAgICAgICBwYXJhZ3JhcGhJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpbmVJbmRleCA9IGRvY3VtZW50TGluZSAtIGluZGV4O1xuICAgICAgICByZXR1cm4geyBwYXJhZ3JhcGhJbmRleCwgbGluZUluZGV4IH07XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEFwcHJveGltYXRlUG9zaXRpb24oc2Vzc2lvbjogRWRpdFNlc3Npb24sIGRvY3VtZW50TGluZTogbnVtYmVyLCBwb3NpdGlvbldpZHRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzID0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzO1xuICAgICAgICBjb25zdCBkb2N1bWVudE1hcmdpbiA9IHNlc3Npb24uZGlzcGxheURhdGEucGFnZU1hcmdpbjtcbiAgICAgICAgY29uc3QgeyBwYXJhZ3JhcGhJbmRleCwgbGluZUluZGV4IH0gPSBQb3NpdGlvbkhlbHBlci5maW5kTGluZUluUGFyYWdyYXBocyhwYXJhZ3JhcGhzLCBkb2N1bWVudExpbmUpO1xuICAgICAgICBsZXQgY29sdW1uID0gMDtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gTGluZVdpZHRoSGVscGVyLmdldFBhcmFncmFwaExpbmVEaXNwbGF5VG9rZW5zKHNlc3Npb24sIHBhcmFncmFwaEluZGV4LCBsaW5lSW5kZXgpO1xuICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMSAmJiB0b2tlbnNbMF0uZGlzcGxheVZhbHVlID09PSBEaXNwbGF5VmFsdWUuZW1wdHlMaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGV4dExpbmVJbmZvID0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0ucGFyYWdyYXBoU2V0dGluZ3MudGV4dExpbmVzSW5mb1tsaW5lSW5kZXhdO1xuICAgICAgICBsZXQgd2lkdGggPSBwb3NpdGlvbldpZHRoIC0gdGV4dExpbmVJbmZvLnBhZGRpbmdMZWZ0IC0gZG9jdW1lbnRNYXJnaW4ubGVmdDtcbiAgICAgICAgd2hpbGUgKGNvbHVtbiA8IHRva2Vucy5sZW5ndGggJiYgd2lkdGggPj0gdG9rZW5zW2NvbHVtbl0ud2lkdGgpIHtcbiAgICAgICAgICAgIHdpZHRoIC09IHRva2Vuc1tjb2x1bW5dLndpZHRoO1xuICAgICAgICAgICAgY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGl4ZWxUb1BhZ2UocG9zWTogbnVtYmVyLCBzZXNzaW9uOiBFZGl0U2Vzc2lvbik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHBhZ2VzQ291bnQgPSBzZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaFNldHRpbmdzKHNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocy5sZW5ndGggLSAxKS5sYXN0UGFnZU51bWJlcjtcbiAgICAgICAgbGV0IHBhZ2UgPSAxO1xuICAgICAgICB3aGlsZSAocGFnZSA8PSBwYWdlc0NvdW50KSB7XG4gICAgICAgICAgICBjb25zdCBlbmRQYWdlUG9zaXRpb24gPSAoc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlc1NwYWNlICsgc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlSGVpZ2h0KSAqIHBhZ2U7XG4gICAgICAgICAgICBpZiAoZW5kUGFnZVBvc2l0aW9uID49IHBvc1kpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhZ2UrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFnZTtcbiAgICB9XG59XG4iXX0=