@worktile/theia 18.0.9 → 18.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.
|
@@ -268,6 +268,13 @@ export const withTable = (editor) => {
|
|
|
268
268
|
children: rows
|
|
269
269
|
};
|
|
270
270
|
}
|
|
271
|
+
else {
|
|
272
|
+
const fragment = editor.getFragment();
|
|
273
|
+
const isAcrossBlocks = TheQueries.isAcrossBlocks(editor, fragment);
|
|
274
|
+
if (isAcrossBlocks && fragment.length === 1 && fragment[0].type === ElementKinds.table) {
|
|
275
|
+
tableFragment = fragment[0];
|
|
276
|
+
}
|
|
277
|
+
}
|
|
271
278
|
if (tableFragment) {
|
|
272
279
|
tableFragment = normalizeTable(cloneDeep(tableFragment));
|
|
273
280
|
setClipboardDataByDom(editor, tableFragment, data);
|
|
@@ -546,4 +553,4 @@ export const createTablePlugin = createPluginFactory({
|
|
|
546
553
|
}
|
|
547
554
|
}
|
|
548
555
|
});
|
|
549
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvdGFibGUvdGFibGUucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFhLFNBQVMsRUFBRSxJQUFJLEVBQVMsS0FBSyxFQUFRLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxRyxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRixPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRSxPQUFPLEtBQUssVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3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O1FBQ1A7WUFDSSxHQUFHLEVBQUUsWUFBWSxDQUFDLEtBQUs7WUFDdkIsUUFBUSxFQUFFLG9CQUFvQjtZQUM5QixPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztZQUNsRCxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUM5QyxJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxLQUFLO1lBQ2pDLFFBQVEsRUFBRSxlQUFlLENBQUMsS0FBSztZQUMvQixXQUFXLEVBQUUsUUFBUTtZQUNyQixVQUFVLEVBQUUsS0FBSztTQUNwQjtLQUNKO0lBQ0QsT0FBTyxFQUFFO1FBQ0wsY0FBYyxFQUFFLEtBQUs7UUFDckIsa0JBQWtCLEVBQUUsS0FBSztRQUN6QixlQUFlLEVBQUUsS0FBSztRQUN0QixhQUFhLEVBQUUsQ0FBQyxNQUFjLEVBQUUsS0FBaUIsRUFBRSxPQUFnQixFQUFFLEVBQUU7WUFDbkUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzNCLENBQUM7S0FDSjtDQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFZGl0b3IsIEVsZW1lbnQsIE5vZGUsIE5vZGVFbnRyeSwgT3BlcmF0aW9uLCBQYXRoLCBQb2ludCwgUmFuZ2UsIFRleHQsIFRyYW5zZm9ybXMgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yLCBFTEVNRU5UX1RPX0NPTVBPTkVOVCwgaG90a2V5cywgT3JpZ2luRXZlbnQgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcbmltcG9ydCB7IERyb3Bkb3duTW9kZSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBFbGVtZW50S2luZHMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvbm9kZS10eXBlcyc7XG5pbXBvcnQgeyBQbHVnaW5NZW51SWNvbnMsIFRoZVBsdWdpbk1lbnVJdGVtVHlwZSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9wbHVnaW4tbWVudSc7XG5pbXBvcnQgeyBDdXN0b21FbGVtZW50LCBUYWJsZUNlbGxFbGVtZW50LCBUYWJsZUVsZW1lbnQsIFRhYmxlUm93RWxlbWVudCB9IGZyb20gJy4uLy4uL2N1c3RvbS10eXBlcyc7XG5pbXBvcnQgeyBQbHVnaW5LZXlzLCBUaGVFZGl0b3IsIFRvb2xiYXJJdGVtVHlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0ICogYXMgVGhlUXVlcmllcyBmcm9tICcuLi8uLi9xdWVyaWVzJztcbmltcG9ydCB7IGNyZWF0ZUVtcHR5UGFyYWdyYXBoIH0gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlLWVtcHR5LXBhcmFncmFwaCc7XG5pbXBvcnQgeyBleHRyYWN0RnJhZ21lbnQgfSBmcm9tICcuLi8uLi91dGlscy9mcmFnbWVudCc7XG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICcuLi8uLi91dGlscy9sb2Rhc2gnO1xuaW1wb3J0IHsgVGhlVGFibGVSb3cgfSBmcm9tICcuL2NvbXBvbmVudHMvcm93L3Jvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGhlVGFibGUgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IFRoZVRkIH0gZnJvbSAnLi9jb21wb25lbnRzL3RkL3RkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZUVkaXRvciB9IGZyb20gJy4vdGFibGUuZWRpdG9yJztcbmltcG9ydCB7IFRhYmxlT3B0aW9ucywgVGhlUGx1Z2luVGFibGVPcHRpb24gfSBmcm9tICcuL3RhYmxlLnR5cGVzJztcbmltcG9ydCB7IFRoZVRhYmxlVG9vbGJhckl0ZW0gfSBmcm9tICcuL3Rvb2xiYXItaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgY2xlYXJUYWJsZU5vZGUgfSBmcm9tICcuL3RyYW5zZm9ybXMvY2xlYXItdGFibGUtbm9kZSc7XG5pbXBvcnQgeyBpbnNlcnRDb2x1bW5BdFJvdyB9IGZyb20gJy4vdHJhbnNmb3Jtcy9pbnNlcnQtY29sdW1uJztcbmltcG9ydCB7IFRhYmxlUG9zaXRpb24sIGlzUmFuZ2VJblRhYmxlLCBpc1NlbGVjdGlvbkluVGFibGUsIGlzVmlydHVhbEtleSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgYWRkQ29sdW1ucyB9IGZyb20gJy4vdXRpbHMvYWRkLWNvbHVtbnMnO1xuaW1wb3J0IHsgY2FsY3VsYXRlQW5jaG9yUG9zaXRpb25JbkNlbGwgfSBmcm9tICcuL3V0aWxzL2NhbGMtYW5jaG9yLXBvc2l0aW9uJztcbmltcG9ydCB7IGdldE9yaWdpbkNlbGwgfSBmcm9tICcuL3V0aWxzL2NhbGMtc3Bhbic7XG5pbXBvcnQgeyBjcmVhdGVUYWJsZVBvc2l0aW9uIH0gZnJvbSAnLi91dGlscy9jcmVhdGUtdGFibGUtcG9zaXRpb24nO1xuaW1wb3J0IHsgaXNJblRhYmxlLCBpc0luVGFibGVSb3csIGlzTGVnYWxUYWJsZSB9IGZyb20gJy4vdXRpbHMvaXMtbGVnYWwtdGFibGUnO1xuaW1wb3J0IHsgaXNTZWxlY3RlZENlbGxNZXJnZWQgfSBmcm9tICcuL3V0aWxzL21lcmdlLWNlbGwnO1xuaW1wb3J0IHsgbm9ybWFsaXplVGFibGUgfSBmcm9tICcuL3V0aWxzL25vcm1hbGl6ZS10YWJsZSc7XG5pbXBvcnQgeyByZW1vdmVDb2x1bW5zIH0gZnJvbSAnLi91dGlscy9yZW1vdmUtY29sdW1ucyc7XG5pbXBvcnQgeyByZXNldFRhYmxlQ2VsbCB9IGZyb20gJy4vdXRpbHMvc3BsaXQtY2VsbCc7XG5pbXBvcnQgeyBjcmVhdGVQbHVnaW5GYWN0b3J5IH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBzZXRDbGlwYm9hcmREYXRhQnlEb20gfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCB3aXRoVGFibGUgPSA8VCBleHRlbmRzIFRoZUVkaXRvcj4oZWRpdG9yOiBUKTogVCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgICBkZWxldGVCYWNrd2FyZCxcbiAgICAgICAgZGVsZXRlRm9yd2FyZCxcbiAgICAgICAgb25LZXlkb3duLFxuICAgICAgICBzZXRGcmFnbWVudERhdGEsXG4gICAgICAgIGluc2VydEZyYWdtZW50RGF0YSxcbiAgICAgICAgbm9ybWFsaXplTm9kZSxcbiAgICAgICAgaXNCbG9ja0NhcmQsXG4gICAgICAgIHJlbmRlckVsZW1lbnQsXG4gICAgICAgIGRlbGV0ZUN1dERhdGEsXG4gICAgICAgIGlzQ29udGFpbmVyLFxuICAgICAgICBvbkNoYW5nZSxcbiAgICAgICAgb25DbGljayxcbiAgICAgICAgbW91c2Vkb3duXG4gICAgfSA9IGVkaXRvcjtcblxuICAgIGVkaXRvci5kZWxldGVCYWNrd2FyZCA9IHVuaXQgPT4ge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICBpZiAoIWlzU2VsZWN0aW9uSW5UYWJsZShvcHRzLCBlZGl0b3IpKSB7XG4gICAgICAgICAgICBkZWxldGVCYWNrd2FyZCh1bml0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gZWRpdG9yO1xuXG4gICAgICAgIGNvbnN0IFssIHN0YXJ0QmxvY2tQYXRoXSA9IEVkaXRvci5hYm92ZTxFbGVtZW50PihlZGl0b3IsIHtcbiAgICAgICAgICAgIG1hdGNoOiBuID0+IEVsZW1lbnQuaXNFbGVtZW50KG4pICYmIEVkaXRvci5pc0Jsb2NrKGVkaXRvciwgbilcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvcik7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHN0YXJ0QmxvY2tQYXRoLmxlbmd0aCA8PSBzdGFydFBvc2l0aW9uLmNlbGxFbnRyeVsxXS5sZW5ndGggKyAxICYmXG4gICAgICAgICAgICBzdGFydEJsb2NrUGF0aC5wb3AoKSA9PT0gMCAmJlxuICAgICAgICAgICAgc2VsZWN0aW9uLmFuY2hvci5vZmZzZXQgPT09IDAgJiZcbiAgICAgICAgICAgIFRoZVF1ZXJpZXMuaXNTdGFydChlZGl0b3IsIHNlbGVjdGlvbi5hbmNob3IsIHN0YXJ0QmxvY2tQYXRoKSAmJlxuICAgICAgICAgICAgIUVkaXRvci5pc1ZvaWQoZWRpdG9yLCBUaGVRdWVyaWVzLmFuY2hvckJsb2NrKGVkaXRvcikpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZUJhY2t3YXJkKHVuaXQpO1xuICAgIH07XG5cbiAgICBlZGl0b3IuZGVsZXRlRm9yd2FyZCA9IHVuaXQgPT4ge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBhZnRlclBvaW50ID0gRWRpdG9yLmFmdGVyKGVkaXRvciwgZWRpdG9yLnNlbGVjdGlvbik7XG4gICAgICAgIGlmIChhZnRlclBvaW50ICYmIGlzUmFuZ2VJblRhYmxlKG9wdHMsIGVkaXRvciwgeyBhbmNob3I6IGFmdGVyUG9pbnQsIGZvY3VzOiBhZnRlclBvaW50IH0pKSB7XG4gICAgICAgICAgICBjb25zdCBiZWZvcmVQb3NpdGlvbiA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IGFmdGVyUG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvciwgYWZ0ZXJQb2ludC5wYXRoKTtcbiAgICAgICAgICAgIGlmIChiZWZvcmVQb3NpdGlvbi5jZWxsICYmIGJlZm9yZVBvc2l0aW9uLmNlbGwgIT09IGFmdGVyUG9zaXRpb24uY2VsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkZWxldGVGb3J3YXJkKHVuaXQpO1xuICAgIH07XG5cbiAgICBlZGl0b3Iub25DbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuZGV0YWlsID09PSAzKSB7XG4gICAgICAgICAgICBjb25zdCBpc01lcmdlZENlbGwgPSBpc1NlbGVjdGVkQ2VsbE1lcmdlZChlZGl0b3IpO1xuICAgICAgICAgICAgY29uc3QgZG9tU2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgaWYgKGRvbVNlbGVjdGlvbiAmJiAhZG9tU2VsZWN0aW9uLmlzQ29sbGFwc2VkICYmIGVkaXRvci5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzbGF0ZVNlbGVjdGlvbiA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZVJhbmdlKGVkaXRvciwgZG9tU2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSBUYWJsZVBvc2l0aW9uLmNyZWF0ZShvcHRzLCBlZGl0b3IsIHNsYXRlU2VsZWN0aW9uLmFuY2hvci5wYXRoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRQb3NpdGlvbiA9IFRhYmxlUG9zaXRpb24uY3JlYXRlKG9wdHMsIGVkaXRvciwgc2xhdGVTZWxlY3Rpb24uZm9jdXMucGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTWVyZ2VkQ2VsbCAmJiBzdGFydFBvc2l0aW9uLmNlbGwgIT09IGVuZFBvc2l0aW9uLmNlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZXIoODEpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIHNsYXRlU2VsZWN0aW9uLmFuY2hvci5wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH07XG5cbiAgICBlZGl0b3IubW91c2Vkb3duID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGhpdEVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmIChoaXRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygndGhlLXRhYmxlLXdyYXBwZXInKSkge1xuICAgICAgICAgICAgaWYgKCFUaGVFZGl0b3IuaXNGb2N1c2VkKGVkaXRvcikpIHtcbiAgICAgICAgICAgICAgICBUaGVFZGl0b3IuZm9jdXMoZWRpdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgbW91c2Vkb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLm9uS2V5ZG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBpc01vdmVVcCA9IGhvdGtleXMuaXNNb3ZlVXAoZXZlbnQpO1xuICAgICAgICBjb25zdCBpc01vdmVEb3duID0gaG90a2V5cy5pc01vdmVEb3duKGV2ZW50KTtcbiAgICAgICAgY29uc3QgaXNNb3ZlQmFja3dhcmQgPSBob3RrZXlzLmlzTW92ZUJhY2t3YXJkKGV2ZW50KTtcbiAgICAgICAgY29uc3QgaXNNb3ZlRm9yd2FyZCA9IGhvdGtleXMuaXNNb3ZlRm9yd2FyZChldmVudCk7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBlZGl0b3I7XG4gICAgICAgIGlmICghc2VsZWN0aW9uIHx8ICFzZWxlY3Rpb24uYW5jaG9yIHx8ICFzZWxlY3Rpb24uZm9jdXMpIHtcbiAgICAgICAgICAgIG9uS2V5ZG93bihldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRQb3NpdGlvbiA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yKTtcbiAgICAgICAgY29uc3QgZW5kUG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvciwgc2VsZWN0aW9uLmZvY3VzLnBhdGgpO1xuICAgICAgICBjb25zdCBpc0NvbGxhcHNlZCA9IFJhbmdlLmlzQ29sbGFwc2VkKHNlbGVjdGlvbik7XG4gICAgICAgIGlmIChzdGFydFBvc2l0aW9uICYmIGVuZFBvc2l0aW9uICYmIGVuZFBvc2l0aW9uLmlzSW5UYWJsZSgpKSB7XG4gICAgICAgICAgICAvLyBmb3Iga2V5Ym9hcmQgdXAgYW5kIGRvd24ga2V5IGluIHRoZSB0YWJsZVxuICAgICAgICAgICAgaWYgKGlzTW92ZVVwIHx8IGlzTW92ZURvd24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsUGF0aCA9IGVuZFBvc2l0aW9uLmNlbGxFbnRyeVsxXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFBhdGggPSBFZGl0b3Iuc3RhcnQoZWRpdG9yLCBjZWxsUGF0aCkucGF0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRQYXRoID0gRWRpdG9yLmVuZChlZGl0b3IsIGNlbGxQYXRoKS5wYXRoO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaXNGaXJzdExpbmUsIGlzTGFzdExpbmUgfSA9IGNhbGN1bGF0ZUFuY2hvclBvc2l0aW9uSW5DZWxsKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgc3RhcnRQYXRoLnBvcCgpO1xuICAgICAgICAgICAgICAgIGVuZFBhdGgucG9wKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoKFRoZVF1ZXJpZXMuYW5jaG9yQmxvY2tFbnRyeShlZGl0b3IpWzFdLnRvU3RyaW5nKCkgIT09IHN0YXJ0UGF0aC50b1N0cmluZygpIHx8ICFpc0ZpcnN0TGluZSkgJiYgaXNNb3ZlVXApIHtcbiAgICAgICAgICAgICAgICAgICAgb25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgoVGhlUXVlcmllcy5hbmNob3JCbG9ja0VudHJ5KGVkaXRvcilbMV0udG9TdHJpbmcoKSAhPT0gZW5kUGF0aC50b1N0cmluZygpIHx8ICFpc0xhc3RMaW5lKSAmJiBpc01vdmVEb3duKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uS2V5ZG93bihldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGxldCBhdDogUG9pbnQ7XG4gICAgICAgICAgICAgICAgaWYgKGlzTW92ZVVwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFib3ZlUm93ID0gc3RhcnRQb3NpdGlvbi50YWJsZS5jaGlsZHJlbltzdGFydFBvc2l0aW9uLmdldFJvd0luZGV4KCkgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJvdmVDZWxsID0gYWJvdmVSb3cgJiYgYWJvdmVSb3cuY2hpbGRyZW5bc3RhcnRQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFib3ZlQ2VsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFib3ZlQ2VsbC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZUVkaXRvci5zZWxlY3RPcmlnaW5DZWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24udGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24uZ2V0Um93SW5kZXgoKSAtIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgPSBFZGl0b3IuZW5kKGVkaXRvciwgVGhlRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgYWJvdmVDZWxsKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c05vZGVFbnRyeSA9IEVkaXRvci5wcmV2aW91cyhlZGl0b3IsIHsgYXQ6IHN0YXJ0UG9zaXRpb24udGFibGVFbnRyeVsxXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZVBvaW50ID0gRWRpdG9yLmJlZm9yZShlZGl0b3IsIHN0YXJ0UG9zaXRpb24udGFibGVFbnRyeVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IubmV4dChlZGl0b3IsIHsgYXQ6IHN0YXJ0UG9zaXRpb24udGFibGVFbnRyeVsxXSB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzTm9kZUVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgPSBFZGl0b3IuZW5kKGVkaXRvciwgcHJldmlvdXNOb2RlRW50cnlbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzTm9kZUVudHJ5ICYmIGJlZm9yZVBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgPSBFZGl0b3IuZW5kKGVkaXRvciwgYmVmb3JlUG9pbnQucGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXNOb2RlRW50cnkgJiYgIWJlZm9yZVBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5ndWxhckVkaXRvci5tb3ZlQmxvY2tDYXJkKGVkaXRvciwgc3RhcnRQb3NpdGlvbi50YWJsZUVudHJ5WzBdLCB7IGRpcmVjdGlvbjogJ2xlZnQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIGF0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYmVsb3dSb3dJbmRleCA9IHN0YXJ0UG9zaXRpb24uZ2V0Um93SW5kZXgoKSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFBvc2l0aW9uLmNlbGwucm93c3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlbG93Um93SW5kZXggPSBzdGFydFBvc2l0aW9uLmdldFJvd0luZGV4KCkgKyBzdGFydFBvc2l0aW9uLmNlbGwucm93c3BhbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWxvd1JvdyA9IHN0YXJ0UG9zaXRpb24udGFibGUuY2hpbGRyZW5bYmVsb3dSb3dJbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJlbG93Q2VsbCA9IGJlbG93Um93ICYmIGJlbG93Um93LmNoaWxkcmVuW3N0YXJ0UG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChiZWxvd0NlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWxvd0NlbGwuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFibGVFZGl0b3Iuc2VsZWN0T3JpZ2luQ2VsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uLnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uLmdldFJvd0luZGV4KCkgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uLmdldENvbHVtbkluZGV4KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgPSBFZGl0b3Iuc3RhcnQoZWRpdG9yLCBUaGVFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBiZWxvd0NlbGwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHROb2RlRW50cnkgPSBFZGl0b3IubmV4dChlZGl0b3IsIHsgYXQ6IHN0YXJ0UG9zaXRpb24udGFibGVFbnRyeVsxXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vdmVQYXRoID0gbmV4dE5vZGVFbnRyeSA/IG5leHROb2RlRW50cnlbMV0gOiBFZGl0b3IuYWZ0ZXIoZWRpdG9yLCBzdGFydFBvc2l0aW9uLnRhYmxlRW50cnlbMV0pLnBhdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdCA9IEVkaXRvci5zdGFydChlZGl0b3IsIG1vdmVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNNb3ZlQmFja3dhcmQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVQb2ludCA9IEVkaXRvci5iZWZvcmUoZWRpdG9yLCBlZGl0b3Iuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVQb3NpdGlvbiA9IGJlZm9yZVBvaW50ICYmIGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yLCBiZWZvcmVQb2ludC5wYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlUG9zaXRpb24gJiYgYmVmb3JlUG9zaXRpb24uY2VsbCAmJiBiZWZvcmVQb3NpdGlvbi5jZWxsLmhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdCA9IEVkaXRvci5lbmQoZWRpdG9yLCBUaGVFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBiZWZvcmVQb3NpdGlvbi5maW5kUHJldmlvdXMoKSkpO1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIGF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc01vdmVGb3J3YXJkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXJQb2ludCA9IEVkaXRvci5hZnRlcihlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyUG9zaXRpb24gPSBhZnRlclBvaW50ICYmIGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yLCBhZnRlclBvaW50LnBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChhZnRlclBvc2l0aW9uLmNlbGwgJiYgYWZ0ZXJQb3NpdGlvbi5jZWxsLmhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0Q2VsbCA9IGFmdGVyUG9zaXRpb24uZmluZE5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdCA9IEVkaXRvci5zdGFydChlZGl0b3IsIFRoZUVkaXRvci5maW5kUGF0aChlZGl0b3IsIGFmdGVyUG9zaXRpb24uZmluZE5leHQoKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCBhdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgQW5ndWxhckVkaXRvci5tb3ZlQmxvY2tDYXJkKGVkaXRvciwgc3RhcnRQb3NpdGlvbi50YWJsZUVudHJ5WzBdLCB7IGRpcmVjdGlvbjogJ3JpZ2h0JyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUHJldmVudCBkZWxldGluZyBjZWxscyBpbiB0aGUgdGFibGVcbiAgICAgICAgICAgIGlmICghaXNDb2xsYXBzZWQgJiYgIXN0YXJ0UG9zaXRpb24uaXNJblRhYmxlKCkgJiYgIWlzVmlydHVhbEtleShldmVudCkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGxldCB0YWJsZU91dFBhdGg6IFBvaW50O1xuICAgICAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChSYW5nZS5pc0ZvcndhcmQoc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVPdXRQYXRoID0gRWRpdG9yLmVuZChlZGl0b3IsIFtzZWxlY3Rpb24uZm9jdXMucGF0aFswXSAtIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGFibGVOb2RlKG9wdHMsIGVkaXRvciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZU91dFBhdGggPSBFZGl0b3Iuc3RhcnQoZWRpdG9yLCBbc2VsZWN0aW9uLmZvY3VzLnBhdGhbMF0gKyAxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRhYmxlTm9kZShvcHRzLCBlZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlT3V0UmFuZ2UgPSBFZGl0b3IucmFuZ2UoZWRpdG9yLCBzZWxlY3Rpb24uYW5jaG9yLCB0YWJsZU91dFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmRlbGV0ZShlZGl0b3IsIHsgYXQ6IHRhYmxlT3V0UmFuZ2UgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gbmV3IHJhbmdlXG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbFJhbmdlID0gRWRpdG9yLnJhbmdlKGVkaXRvciwgZWRpdG9yLnNlbGVjdGlvbi5mb2N1cy5wYXRoLnNsaWNlKDAsIDMpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmb2N1c1JhbmdlID0gUmFuZ2UuaW50ZXJzZWN0aW9uKGVkaXRvci5zZWxlY3Rpb24sIGNlbGxSYW5nZSk7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCBmb2N1c1JhbmdlKTtcbiAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRnJhZ21lbnQoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH07XG5cbiAgICBlZGl0b3Iuc2V0RnJhZ21lbnREYXRhID0gKGRhdGE6IERhdGFUcmFuc2Zlciwgb3JpZ2luRXZlbnQ/OiBPcmlnaW5FdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuXG4gICAgICAgIGlmIChpc1NlbGVjdGlvbkluVGFibGUob3B0cywgZWRpdG9yKSkge1xuICAgICAgICAgICAgY29uc3QgdGFibGVQb3NpdGlvbiA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlQ29tcG9uZW50ID0gRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KHRhYmxlUG9zaXRpb24udGFibGUpIGFzIFRoZVRhYmxlO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsUG9zaXRpb25zID0gdGFibGVDb21wb25lbnQudGFibGVTdG9yZS5nZXRTZWxlY3RlZENlbGxQb3NpdGlvbnMoKTtcbiAgICAgICAgICAgIGxldCB0YWJsZUZyYWdtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0YWJsZUNvbXBvbmVudC50YWJsZVN0b3JlLnNlbGVjdGVkUm93c0luZGV4Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dzID0gdGFibGVQb3NpdGlvbi50YWJsZS5jaGlsZHJlbi5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgdGFibGVDb21wb25lbnQudGFibGVTdG9yZS5zZWxlY3RlZFJvd3NJbmRleFswXSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVDb21wb25lbnQudGFibGVTdG9yZS5zZWxlY3RlZFJvd3NJbmRleFt0YWJsZUNvbXBvbmVudC50YWJsZVN0b3JlLnNlbGVjdGVkUm93c0luZGV4Lmxlbmd0aCAtIDFdICsgMVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGFibGVGcmFnbWVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGFibGVQb3NpdGlvbi50YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHJvd3NcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZENlbGxQb3NpdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBSb3dzID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjZWxsIG9mIHNlbGVjdGVkQ2VsbFBvc2l0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHJvdywgY29sIH0gPSBjZWxsO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsUGF0aCA9IFsuLi50YWJsZVBvc2l0aW9uLnRhYmxlRW50cnlbMV0sIHJvdywgY29sXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbE5vZGUgPSBOb2RlLmdldChlZGl0b3IsIGNlbGxQYXRoKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRlbXBSb3dzW3Jvd10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBSb3dzW3Jvd10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZW1wUm93c1tyb3ddLnB1c2goY2VsbE5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByb3dzOiBUYWJsZVJvd0VsZW1lbnRbXSA9IE9iamVjdC52YWx1ZXModGVtcFJvd3MpLm1hcCgoaXRlbTogVGFibGVDZWxsRWxlbWVudFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBFbGVtZW50S2luZHMudGFibGVSb3csXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogaXRlbVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRhYmxlRnJhZ21lbnQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEVsZW1lbnRLaW5kcy50YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHJvd3NcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRhYmxlRnJhZ21lbnQpIHtcbiAgICAgICAgICAgICAgICB0YWJsZUZyYWdtZW50ID0gbm9ybWFsaXplVGFibGUoY2xvbmVEZWVwKHRhYmxlRnJhZ21lbnQpKTtcbiAgICAgICAgICAgICAgICBzZXRDbGlwYm9hcmREYXRhQnlEb20oZWRpdG9yLCB0YWJsZUZyYWdtZW50LCBkYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0RnJhZ21lbnREYXRhKGRhdGEsIG9yaWdpbkV2ZW50KTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLmluc2VydEZyYWdtZW50RGF0YSA9IGFzeW5jIChkYXRhOiBEYXRhVHJhbnNmZXIpID0+IHtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBhd2FpdCBleHRyYWN0RnJhZ21lbnQoZGF0YSk7XG4gICAgICAgIGlmIChmcmFnbWVudCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBpc1NlbGVjdGlvbkluVGFibGUob3B0cywgZWRpdG9yKSAmJlxuICAgICAgICAgICAgICAgIGZyYWdtZW50Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgICAgIEVsZW1lbnQuaXNFbGVtZW50KGZyYWdtZW50WzBdKSAmJlxuICAgICAgICAgICAgICAgIGZyYWdtZW50WzBdLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFibGVQb3NpdGlvbiA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGlwYm9hcmRUYWJsZSA9IGZyYWdtZW50WzBdLmNoaWxkcmVuIGFzIE5vZGVbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGlwYm9hcmRSb3cgPSAoY2xpcGJvYXJkVGFibGVbMF0gYXMgRWxlbWVudCkuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0Um93SW5kZXggPSB0YWJsZVBvc2l0aW9uLmdldFJvd0luZGV4KCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0Q29sSW5kZXggPSB0YWJsZVBvc2l0aW9uLmdldENvbHVtbkluZGV4KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdFJvd0luZGV4ID0gc2VsZWN0Um93SW5kZXggKyBjbGlwYm9hcmRUYWJsZS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RDb2xJbmRleCA9IHNlbGVjdENvbEluZGV4ICsgY2xpcGJvYXJkUm93Lmxlbmd0aCAtIDE7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gc2VsZWN0Um93SW5kZXg7IGkgPD0gbGFzdFJvd0luZGV4OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IHNlbGVjdENvbEluZGV4OyBqIDw9IGxhc3RDb2xJbmRleDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB0YWJsZVBvc2l0aW9uLnRhYmxlLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyAmJiByb3cuY2hpbGRyZW5bal0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5DZWxsID0gZ2V0T3JpZ2luQ2VsbCh0YWJsZVBvc2l0aW9uLnRhYmxlLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luQ2VsbCAmJiAob3JpZ2luQ2VsbC5jb2xzcGFuIHx8IG9yaWdpbkNlbGwucm93c3BhbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFRoZUVkaXRvci5maW5kUGF0aChlZGl0b3IsIG9yaWdpbkNlbGwpLnNsaWNlKC0yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRUYWJsZUNlbGwoZWRpdG9yLCB0YWJsZVBvc2l0aW9uLnRhYmxlLCBvcmlnaW5DZWxsLCBwYXRoWzBdLCBwYXRoWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdENvbEluZGV4ID4gdGFibGVQb3NpdGlvbi5nZXRXaWR0aCgpIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRkQ29sQ291bnQgPSBsYXN0Q29sSW5kZXggLSAodGFibGVQb3NpdGlvbi5nZXRXaWR0aCgpIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBUYWJsZUVkaXRvci5pbnNlcnRDb2x1bW4oZWRpdG9yLCBhZGRDb2xDb3VudCwgdGFibGVQb3NpdGlvbi5nZXRXaWR0aCgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdFJvd0luZGV4ID4gdGFibGVQb3NpdGlvbi5nZXRIZWlnaHQoKSAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZFJvd0NvdW50ID0gbGFzdFJvd0luZGV4IC0gKHRhYmxlUG9zaXRpb24uZ2V0SGVpZ2h0KCkgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlRWRpdG9yLmluc2VydFJvdyhlZGl0b3IsIGFkZFJvd0NvdW50LCB0YWJsZVBvc2l0aW9uLmdldEhlaWdodCgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjbGlwYm9hcmRUYWJsZS5mb3JFYWNoKChyb3c6IFRhYmxlRWxlbWVudCwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3cuY2hpbGRyZW4uZm9yRWFjaCgoY29sOiBOb2RlLCBqOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdCA9IFsuLi50YWJsZVBvc2l0aW9uLnRhYmxlRW50cnlbMV0sIHNlbGVjdFJvd0luZGV4ICsgaSwgc2VsZWN0Q29sSW5kZXggKyBqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnJlbW92ZU5vZGVzKGVkaXRvciwgeyBhdCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmluc2VydE5vZGVzKGVkaXRvciwgY29sLCB7IGF0IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IEVkaXRvci5zdGFydChlZGl0b3IsIFsuLi50YWJsZVBvc2l0aW9uLnRhYmxlRW50cnlbMV0sIHNlbGVjdFJvd0luZGV4LCBzZWxlY3RDb2xJbmRleF0pO1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgdGFyZ2V0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gd2hlbiBwYXN0aW5nIGRhdGEsIHRoZSBsYXN0IG9uZSBpcyBhIHRhYmxlLCBhbmQgdGhlIGZvY3VzIHBvc2l0aW9uIGlzIHNwZWNpYWxseSBoYW5kbGVkXG4gICAgICAgICAgICAvLyAqIHRoaXMgaXMgdG8gZm9jdXMgYWZ0ZXIgd2l0aFRyYWlsaW5nTm9kZS5ub3JtYWxpemVOb2RlKCkgdG8gYXZvaWQgaW5jb3JyZWN0IGZvY3VzIGVsZW1lbnQuXG4gICAgICAgICAgICAvLyAqIGlmIHRoZXJlIGlzIGEgbm9kZSBiZWxvdywgdGhlIGZvY3VzIHdpbGwgYmUgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgbm9kZSBiZWxvdy5cbiAgICAgICAgICAgIC8vICogaWYgdGhlcmUgaXMgbm8gbm9kZSBiZWxvdywgdGhlIGZvY3VzIHdpbGwgYmUgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGN1cnJlbnQgdGFibGUuXG4gICAgICAgICAgICBjb25zdCBsYXN0SW5zZXJ0Tm9kZSA9IGZyYWdtZW50W2ZyYWdtZW50Lmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29uc3QgaXNUYWJsZSA9IChsYXN0SW5zZXJ0Tm9kZSBhcyBFbGVtZW50KS50eXBlID09PSBFbGVtZW50S2luZHMudGFibGU7XG4gICAgICAgICAgICBpZiAoaXNUYWJsZSkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWywgY3VycmVudFBhdGhdID0gVGhlUXVlcmllcy5maW5kTm9kZShlZGl0b3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaDogbiA9PiBFbGVtZW50LmlzRWxlbWVudChuKSAmJiBuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0UGF0aCA9IFBhdGgubmV4dChjdXJyZW50UGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNOZXh0Tm9kZSA9IE5vZGUuaGFzKGVkaXRvciwgbmV4dFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9jdXNQYXRoID0gaGFzTmV4dE5vZGUgPyBuZXh0UGF0aCA6IGN1cnJlbnRQYXRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9jdXNOb2RlID0gTm9kZS5nZXQoZWRpdG9yLCBmb2N1c1BhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNCbG9ja0NhcmQgPSBlZGl0b3IuaXNCbG9ja0NhcmQoZm9jdXNOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvclBhdGggPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogZm9jdXNQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogaXNCbG9ja0NhcmQgPyAoaGFzTmV4dE5vZGUgPyAtMSA6IC0yKSA6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIGN1cnNvclBhdGgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbnNlcnRGcmFnbWVudERhdGEoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluc2VydEZyYWdtZW50RGF0YShkYXRhKTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLm5vcm1hbGl6ZU5vZGUgPSAoW25vZGUsIHBhdGhdOiBOb2RlRW50cnk8Tm9kZT4pID0+IHtcbiAgICAgICAgaWYgKEVsZW1lbnQuaXNFbGVtZW50KG5vZGUpICYmIG5vZGUudHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZSA9IG5vZGUgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgbWF4V2lkdGggPSBNYXRoLm1heCguLi50YWJsZS5jaGlsZHJlbi5tYXAocm93ID0+IHJvdy5jaGlsZHJlbi5sZW5ndGgpKTtcbiAgICAgICAgICAgIGNvbnN0IGludmFsaWRSb3dzID0gdGFibGUuY2hpbGRyZW4uZmlsdGVyKHJvdyA9PiByb3cuY2hpbGRyZW4ubGVuZ3RoIDwgbWF4V2lkdGgpO1xuICAgICAgICAgICAgaWYgKGludmFsaWRSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlLmNoaWxkcmVuLm1hcCgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93LmNoaWxkcmVuLm1hcCgoY2VsbCwgY2VsbEluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwuaGlkZGVuIHx8IGNlbGwuY29sc3BhbiB8fCBjZWxsLnJvd3NwYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgaGlkZGVuOiBudWxsLCBjb2xzcGFuOiBudWxsLCByb3dzcGFuOiBudWxsIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGF0OiBbLi4ucGF0aCwgcm93SW5kZXgsIGNlbGxJbmRleF0gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaW52YWxpZFJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBtYXhXaWR0aCAtIHJvdy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRDb2x1bW5BdFJvdyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm9kZSwgcGF0aF0gYXMgTm9kZUVudHJ5PFRhYmxlRWxlbWVudD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUuY2hpbGRyZW4uaW5kZXhPZihyb3cpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5jaGlsZHJlbi5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRhYmxlLmNvbHVtbnMgJiYgdGFibGUuY29sdW1ucy5sZW5ndGggIT09IG1heFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IHRhYmxlLmNvbHVtbnMubGVuZ3RoID4gbWF4V2lkdGggPyByZW1vdmVDb2x1bW5zKHRhYmxlLCBtYXhXaWR0aCkgOiBhZGRDb2x1bW5zKHRhYmxlLCBtYXhXaWR0aCk7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlcyhlZGl0b3IsIHsgY29sdW1ucyB9LCB7IGF0OiBwYXRoIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm9yYW1saXplIGlsbGVnYWwgY2VsbCBhbmQgcm93IHRvIGJlIHBhcmFncmFwaFxuICAgICAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQobm9kZSkgJiYgW0VsZW1lbnRLaW5kcy50YWJsZUNlbGwsIEVsZW1lbnRLaW5kcy50YWJsZVJvd10uaW5jbHVkZXMobm9kZS50eXBlKSkge1xuICAgICAgICAgICAgaWYgKCFpc0xlZ2FsVGFibGUoZWRpdG9yLCBub2RlIGFzIFRhYmxlUm93RWxlbWVudCB8IFRhYmxlQ2VsbEVsZW1lbnQsIHBhdGgpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm9vdFBhdGggPSBbcGF0aFswXV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGVkaXRvci5zZWxlY3Rpb24uZm9jdXMub2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAvLyBmaW5kIGFsbCB0YWJsZUNlbGwgYW5kIHRhYmxlUm93XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gRWRpdG9yLm5vZGVzKGVkaXRvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXQ6IHJvb3RQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogJ2xvd2VzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaDogKG5vZGU6IEN1c3RvbUVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS50eXBlID09PSBFbGVtZW50S2luZHMudGFibGVDZWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnNvclBhdGggPSBwYXRoWzBdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBub3JhbWxpemUgdG8gYmUgcGFyYWdyYXBoXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFt0YXJnZXROb2RlLCB0YXJnZXRQYXRoXSBvZiBub2Rlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYWdyYXBoID0gY3JlYXRlRW1wdHlQYXJhZ3JhcGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gTm9kZS5zdHJpbmcodGFyZ2V0Tm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcmFncmFwaC5jaGlsZHJlblswXSBhcyBUZXh0KS50ZXh0ID0gdGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRhcmdldE5vZGUgYXMgQ3VzdG9tRWxlbWVudCkua2V5ID09PSBub2RlLmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JQYXRoID0gcm9vdFBhdGhbMF0gKyBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlcyhlZGl0b3IsIHBhcmFncmFwaCwgeyBhdDogW3Jvb3RQYXRoWzBdICsgaW5kZXhdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnNvciA9IHsgcGF0aDogW2N1cnNvclBhdGgsIDBdLCBvZmZzZXQ6IG9mZnNldCB9O1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIHsgYW5jaG9yOiBjdXJzb3IsIGZvY3VzOiBjdXJzb3IgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSByb290IG5vZGVcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5yZW1vdmVOb2RlcyhlZGl0b3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0OiByb290UGF0aFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGp1c3Qgc2VsZWN0aW9uIHdoZW4gc2VsZWN0aW9uIGlzIGluIGhpZGRlbiBjZWxsXG4gICAgICAgIGlmIChFbGVtZW50LmlzRWxlbWVudChub2RlKSAmJiBub2RlLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZUNlbGwpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgUmFuZ2UuaXNDb2xsYXBzZWQoZWRpdG9yLnNlbGVjdGlvbikgJiZcbiAgICAgICAgICAgICAgICBQYXRoLmlzQW5jZXN0b3IocGF0aCwgZWRpdG9yLnNlbGVjdGlvbi5hbmNob3IucGF0aCkgJiZcbiAgICAgICAgICAgICAgICBub2RlLmhpZGRlblxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlUG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IGdldE9yaWdpbkNlbGwodGFibGVQb3NpdGlvbi50YWJsZSwgdGFibGVQb3NpdGlvbi5nZXRSb3dJbmRleCgpLCB0YWJsZVBvc2l0aW9uLmdldENvbHVtbkluZGV4KCkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gQW5ndWxhckVkaXRvci5maW5kUGF0aChlZGl0b3IsIG9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIEVkaXRvci5lbmQoZWRpdG9yLCBwYXRoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBub3JtYWxpemVOb2RlKFtub2RlLCBwYXRoXSk7XG4gICAgfTtcblxuICAgIGVkaXRvci5pc0Jsb2NrQ2FyZCA9IChlbGVtZW50OiBFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNCbG9ja0NhcmQoZWxlbWVudCk7XG4gICAgfTtcblxuICAgIGVkaXRvci5yZW5kZXJFbGVtZW50ID0gKGVsZW1lbnQ6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gVGhlVGFibGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlUm93ICYmIGlzSW5UYWJsZShlZGl0b3IsIGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gVGhlVGFibGVSb3c7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlQ2VsbCAmJiBpc0luVGFibGVSb3coZWRpdG9yLCBlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIFRoZVRkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW5kZXJFbGVtZW50KGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBlZGl0b3IuZGVsZXRlQ3V0RGF0YSA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgaWYgKCFpc1NlbGVjdGlvbkluVGFibGUob3B0cywgZWRpdG9yKSkge1xuICAgICAgICAgICAgZGVsZXRlQ3V0RGF0YSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvcik7XG4gICAgICAgIGNvbnN0IHRhYmxlQ29tcG9uZW50ID0gRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KGVsZW1lbnQudGFibGUpIGFzIFRoZVRhYmxlO1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxQb3NpdGlvbnMgPSB0YWJsZUNvbXBvbmVudC50YWJsZVN0b3JlLmdldFNlbGVjdGVkQ2VsbFBvc2l0aW9ucygpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRDZWxsUG9zaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRhYmxlQ29tcG9uZW50LnRhYmxlU3RvcmUuaXNTZWxlY3RlZFRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZUNvbXBvbmVudC50YWJsZVN0b3JlLmlzRnVsbHNjcmVlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFRhYmxlRWRpdG9yLnJlbW92ZVRhYmxlKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgVGFibGVFZGl0b3IuY2xlYXJDZWxsc0NvbnRlbnQoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGFibGVDb21wb25lbnQudGFibGVTZXJ2aWNlLmNsb3NlVG9vbGJhcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlQ3V0RGF0YSgpO1xuICAgIH07XG5cbiAgICBlZGl0b3IuaXNDb250YWluZXIgPSAoZWxlbWVudDogRWxlbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gZWxlbWVudC50eXBlID09PSBFbGVtZW50S2luZHMudGFibGVDZWxsID8gdHJ1ZSA6IGlzQ29udGFpbmVyKGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBlZGl0b3Iub25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgIG9uQ2hhbmdlKCk7XG4gICAgICAgIC8vIGFkdWpzdCBzZWxlY3Rpb24gd2hlbiBzZWxlY3Rpb24gaXMgaW4gaGlkZGVuIGNlbGxcbiAgICAgICAgLy8ganVzdCBob29rIHNldF9zZWxlY3Rpb25cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gZWRpdG9yLnNlbGVjdGlvbiAmJiBSYW5nZS5pc0NvbGxhcHNlZChlZGl0b3Iuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0aW9uT3BlcmF0aW9uID0gZWRpdG9yLm9wZXJhdGlvbnMuZXZlcnkob3AgPT4gT3BlcmF0aW9uLmlzU2VsZWN0aW9uT3BlcmF0aW9uKG9wKSk7XG4gICAgICAgICAgICBpZiAoaXNDb2xsYXBzZWQgJiYgaXNTZWxlY3Rpb25PcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlUG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgaWYgKHRhYmxlUG9zaXRpb24uaXNJblRhYmxlKCkgJiYgdGFibGVQb3NpdGlvbi5jZWxsLmhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICBUYWJsZUVkaXRvci5zZWxlY3RPcmlnaW5DZWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVQb3NpdGlvbi50YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlUG9zaXRpb24uZ2V0Um93SW5kZXgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlUG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICB9O1xuXG4gICAgcmV0dXJuIGVkaXRvcjtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVUYWJsZVBsdWdpbiA9IGNyZWF0ZVBsdWdpbkZhY3Rvcnk8VGhlUGx1Z2luVGFibGVPcHRpb24+KHtcbiAgICBrZXk6IFBsdWdpbktleXMudGFibGUsXG4gICAgd2l0aE92ZXJyaWRlczogd2l0aFRhYmxlLFxuICAgIG5lc3RlZFN0cnVjdHVyZUJ5S2V5OiB7XG4gICAgICAgIFtFbGVtZW50S2luZHMudGFibGVdOiBFbGVtZW50S2luZHMudGFibGVSb3csXG4gICAgICAgIFtFbGVtZW50S2luZHMudGFibGVSb3ddOiBFbGVtZW50S2luZHMudGFibGVDZWxsXG4gICAgfSxcbiAgICB0b29sYmFySXRlbXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAga2V5OiBFbGVtZW50S2luZHMudGFibGUsXG4gICAgICAgICAgICBpY29uOiAndGFibGUtYm9yZGVyLWFsbCcsXG4gICAgICAgICAgICBuYW1lOiAn6KGo5qC8JyxcbiAgICAgICAgICAgIHR5cGU6IFRvb2xiYXJJdGVtVHlwZS5kcm9wZG93bixcbiAgICAgICAgICAgIGRyb3Bkb3duTW9kZTogRHJvcGRvd25Nb2RlLmljb24sXG4gICAgICAgICAgICBpY29uQ29tcG9uZW50OiBUaGVUYWJsZVRvb2xiYXJJdGVtLFxuICAgICAgICAgICAgZXhlY3V0ZTogZWRpdG9yID0+IFRhYmxlRWRpdG9yLmluc2VydFRhYmxlKGVkaXRvciksXG4gICAgICAgICAgICBhY3RpdmU6IGVkaXRvciA9PiBUYWJsZUVkaXRvci5pc0FjdGl2ZShlZGl0b3IpXG4gICAgICAgIH1cbiAgICBdLFxuICAgIG1lbnVJdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IEVsZW1lbnRLaW5kcy50YWJsZSxcbiAgICAgICAgICAgIGtleXdvcmRzOiAnYmlhb2dlLGJnLHRhYmxlLOihqOagvCcsXG4gICAgICAgICAgICBleGVjdXRlOiBlZGl0b3IgPT4gVGFibGVFZGl0b3IuaW5zZXJ0VGFibGUoZWRpdG9yKSxcbiAgICAgICAgICAgIGFjdGl2ZTogZWRpdG9yID0+IFRhYmxlRWRpdG9yLmlzQWN0aXZlKGVkaXRvciksXG4gICAgICAgICAgICBuYW1lOiAn6KGo5qC8JyxcbiAgICAgICAgICAgIHR5cGU6IFRoZVBsdWdpbk1lbnVJdGVtVHlwZS5ncm91cCxcbiAgICAgICAgICAgIG1lbnVJY29uOiBQbHVnaW5NZW51SWNvbnMudGFibGUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ+aUr+aMgeaPkuWFpeihqOagvCcsXG4gICAgICAgICAgICBkaXNwbGF5S2V5OiAnL2JnJ1xuICAgICAgICB9XG4gICAgXSxcbiAgICBvcHRpb25zOiB7XG4gICAgICAgIHNob3dGdWxsc2NyZWVuOiBmYWxzZSxcbiAgICAgICAgZnJlZXplQ29sdW1uSGVhZGVyOiBmYWxzZSxcbiAgICAgICAgZnJlZXplUm93SGVhZGVyOiBmYWxzZSxcbiAgICAgICAgc2V0RnVsbHNjcmVlbjogKGVkaXRvcjogRWRpdG9yLCBldmVudDogTW91c2VFdmVudCwgZWxlbWVudDogRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIl19
|
|
556
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvdGFibGUvdGFibGUucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFhLFNBQVMsRUFBRSxJQUFJLEVBQVMsS0FBSyxFQUFRLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxRyxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVyRixPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRSxPQUFPLEtBQUssVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3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LFlBQVksQ0FBQyxLQUFLO1lBQ3ZCLElBQUksRUFBRSxrQkFBa0I7WUFDeEIsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUsZUFBZSxDQUFDLFFBQVE7WUFDOUIsWUFBWSxFQUFFLFlBQVksQ0FBQyxJQUFJO1lBQy9CLGFBQWEsRUFBRSxtQkFBbUI7WUFDbEMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDbEQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7U0FDakQ7S0FDSjtJQUNELFNBQVMsRUFBRTtRQUNQO1lBQ0ksR0FBRyxFQUFFLFlBQVksQ0FBQyxLQUFLO1lBQ3ZCLFFBQVEsRUFBRSxvQkFBb0I7WUFDOUIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDbEQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDOUMsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUscUJBQXFCLENBQUMsS0FBSztZQUNqQyxRQUFRLEVBQUUsZUFBZSxDQUFDLEtBQUs7WUFDL0IsV0FBVyxFQUFFLFFBQVE7WUFDckIsVUFBVSxFQUFFLEtBQUs7U0FDcEI7S0FDSjtJQUNELE9BQU8sRUFBRTtRQUNMLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLGtCQUFrQixFQUFFLEtBQUs7UUFDekIsZUFBZSxFQUFFLEtBQUs7UUFDdEIsYUFBYSxFQUFFLENBQUMsTUFBYyxFQUFFLEtBQWlCLEVBQUUsT0FBZ0IsRUFBRSxFQUFFO1lBQ25FLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMzQixDQUFDO0tBQ0o7Q0FDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRWRpdG9yLCBFbGVtZW50LCBOb2RlLCBOb2RlRW50cnksIE9wZXJhdGlvbiwgUGF0aCwgUG9pbnQsIFJhbmdlLCBUZXh0LCBUcmFuc2Zvcm1zIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciwgRUxFTUVOVF9UT19DT01QT05FTlQsIGhvdGtleXMsIE9yaWdpbkV2ZW50IH0gZnJvbSAnc2xhdGUtYW5ndWxhcic7XG5pbXBvcnQgeyBEcm9wZG93bk1vZGUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRWxlbWVudEtpbmRzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL25vZGUtdHlwZXMnO1xuaW1wb3J0IHsgUGx1Z2luTWVudUljb25zLCBUaGVQbHVnaW5NZW51SXRlbVR5cGUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvcGx1Z2luLW1lbnUnO1xuaW1wb3J0IHsgQ3VzdG9tRWxlbWVudCwgVGFibGVDZWxsRWxlbWVudCwgVGFibGVFbGVtZW50LCBUYWJsZVJvd0VsZW1lbnQgfSBmcm9tICcuLi8uLi9jdXN0b20tdHlwZXMnO1xuaW1wb3J0IHsgUGx1Z2luS2V5cywgVGhlRWRpdG9yLCBUb29sYmFySXRlbVR5cGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCAqIGFzIFRoZVF1ZXJpZXMgZnJvbSAnLi4vLi4vcXVlcmllcyc7XG5pbXBvcnQgeyBjcmVhdGVFbXB0eVBhcmFncmFwaCB9IGZyb20gJy4uLy4uL3V0aWxzL2NyZWF0ZS1lbXB0eS1wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgZXh0cmFjdEZyYWdtZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZnJhZ21lbnQnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9kYXNoJztcbmltcG9ydCB7IFRoZVRhYmxlUm93IH0gZnJvbSAnLi9jb21wb25lbnRzL3Jvdy9yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IFRoZVRhYmxlIH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaGVUZCB9IGZyb20gJy4vY29tcG9uZW50cy90ZC90ZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVFZGl0b3IgfSBmcm9tICcuL3RhYmxlLmVkaXRvcic7XG5pbXBvcnQgeyBUYWJsZU9wdGlvbnMsIFRoZVBsdWdpblRhYmxlT3B0aW9uIH0gZnJvbSAnLi90YWJsZS50eXBlcyc7XG5pbXBvcnQgeyBUaGVUYWJsZVRvb2xiYXJJdGVtIH0gZnJvbSAnLi90b29sYmFyLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IGNsZWFyVGFibGVOb2RlIH0gZnJvbSAnLi90cmFuc2Zvcm1zL2NsZWFyLXRhYmxlLW5vZGUnO1xuaW1wb3J0IHsgaW5zZXJ0Q29sdW1uQXRSb3cgfSBmcm9tICcuL3RyYW5zZm9ybXMvaW5zZXJ0LWNvbHVtbic7XG5pbXBvcnQgeyBUYWJsZVBvc2l0aW9uLCBpc1JhbmdlSW5UYWJsZSwgaXNTZWxlY3Rpb25JblRhYmxlLCBpc1ZpcnR1YWxLZXkgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGFkZENvbHVtbnMgfSBmcm9tICcuL3V0aWxzL2FkZC1jb2x1bW5zJztcbmltcG9ydCB7IGNhbGN1bGF0ZUFuY2hvclBvc2l0aW9uSW5DZWxsIH0gZnJvbSAnLi91dGlscy9jYWxjLWFuY2hvci1wb3NpdGlvbic7XG5pbXBvcnQgeyBnZXRPcmlnaW5DZWxsIH0gZnJvbSAnLi91dGlscy9jYWxjLXNwYW4nO1xuaW1wb3J0IHsgY3JlYXRlVGFibGVQb3NpdGlvbiB9IGZyb20gJy4vdXRpbHMvY3JlYXRlLXRhYmxlLXBvc2l0aW9uJztcbmltcG9ydCB7IGlzSW5UYWJsZSwgaXNJblRhYmxlUm93LCBpc0xlZ2FsVGFibGUgfSBmcm9tICcuL3V0aWxzL2lzLWxlZ2FsLXRhYmxlJztcbmltcG9ydCB7IGlzU2VsZWN0ZWRDZWxsTWVyZ2VkIH0gZnJvbSAnLi91dGlscy9tZXJnZS1jZWxsJztcbmltcG9ydCB7IG5vcm1hbGl6ZVRhYmxlIH0gZnJvbSAnLi91dGlscy9ub3JtYWxpemUtdGFibGUnO1xuaW1wb3J0IHsgcmVtb3ZlQ29sdW1ucyB9IGZyb20gJy4vdXRpbHMvcmVtb3ZlLWNvbHVtbnMnO1xuaW1wb3J0IHsgcmVzZXRUYWJsZUNlbGwgfSBmcm9tICcuL3V0aWxzL3NwbGl0LWNlbGwnO1xuaW1wb3J0IHsgY3JlYXRlUGx1Z2luRmFjdG9yeSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgc2V0Q2xpcGJvYXJkRGF0YUJ5RG9tIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3Qgd2l0aFRhYmxlID0gPFQgZXh0ZW5kcyBUaGVFZGl0b3I+KGVkaXRvcjogVCk6IFQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICAgZGVsZXRlQmFja3dhcmQsXG4gICAgICAgIGRlbGV0ZUZvcndhcmQsXG4gICAgICAgIG9uS2V5ZG93bixcbiAgICAgICAgc2V0RnJhZ21lbnREYXRhLFxuICAgICAgICBpbnNlcnRGcmFnbWVudERhdGEsXG4gICAgICAgIG5vcm1hbGl6ZU5vZGUsXG4gICAgICAgIGlzQmxvY2tDYXJkLFxuICAgICAgICByZW5kZXJFbGVtZW50LFxuICAgICAgICBkZWxldGVDdXREYXRhLFxuICAgICAgICBpc0NvbnRhaW5lcixcbiAgICAgICAgb25DaGFuZ2UsXG4gICAgICAgIG9uQ2xpY2ssXG4gICAgICAgIG1vdXNlZG93blxuICAgIH0gPSBlZGl0b3I7XG5cbiAgICBlZGl0b3IuZGVsZXRlQmFja3dhcmQgPSB1bml0ID0+IHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgaWYgKCFpc1NlbGVjdGlvbkluVGFibGUob3B0cywgZWRpdG9yKSkge1xuICAgICAgICAgICAgZGVsZXRlQmFja3dhcmQodW5pdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGVkaXRvcjtcblxuICAgICAgICBjb25zdCBbLCBzdGFydEJsb2NrUGF0aF0gPSBFZGl0b3IuYWJvdmU8RWxlbWVudD4oZWRpdG9yLCB7XG4gICAgICAgICAgICBtYXRjaDogbiA9PiBFbGVtZW50LmlzRWxlbWVudChuKSAmJiBFZGl0b3IuaXNCbG9jayhlZGl0b3IsIG4pXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzdGFydFBvc2l0aW9uID0gY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBzdGFydEJsb2NrUGF0aC5sZW5ndGggPD0gc3RhcnRQb3NpdGlvbi5jZWxsRW50cnlbMV0ubGVuZ3RoICsgMSAmJlxuICAgICAgICAgICAgc3RhcnRCbG9ja1BhdGgucG9wKCkgPT09IDAgJiZcbiAgICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3Iub2Zmc2V0ID09PSAwICYmXG4gICAgICAgICAgICBUaGVRdWVyaWVzLmlzU3RhcnQoZWRpdG9yLCBzZWxlY3Rpb24uYW5jaG9yLCBzdGFydEJsb2NrUGF0aCkgJiZcbiAgICAgICAgICAgICFFZGl0b3IuaXNWb2lkKGVkaXRvciwgVGhlUXVlcmllcy5hbmNob3JCbG9jayhlZGl0b3IpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGVCYWNrd2FyZCh1bml0KTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLmRlbGV0ZUZvcndhcmQgPSB1bml0ID0+IHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgYWZ0ZXJQb2ludCA9IEVkaXRvci5hZnRlcihlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24pO1xuICAgICAgICBpZiAoYWZ0ZXJQb2ludCAmJiBpc1JhbmdlSW5UYWJsZShvcHRzLCBlZGl0b3IsIHsgYW5jaG9yOiBhZnRlclBvaW50LCBmb2N1czogYWZ0ZXJQb2ludCB9KSkge1xuICAgICAgICAgICAgY29uc3QgYmVmb3JlUG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvcik7XG4gICAgICAgICAgICBjb25zdCBhZnRlclBvc2l0aW9uID0gY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IsIGFmdGVyUG9pbnQucGF0aCk7XG4gICAgICAgICAgICBpZiAoYmVmb3JlUG9zaXRpb24uY2VsbCAmJiBiZWZvcmVQb3NpdGlvbi5jZWxsICE9PSBhZnRlclBvc2l0aW9uLmNlbGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlRm9yd2FyZCh1bml0KTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLm9uQ2xpY2sgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmRldGFpbCA9PT0gMykge1xuICAgICAgICAgICAgY29uc3QgaXNNZXJnZWRDZWxsID0gaXNTZWxlY3RlZENlbGxNZXJnZWQoZWRpdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IGRvbVNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGlmIChkb21TZWxlY3Rpb24gJiYgIWRvbVNlbGVjdGlvbi5pc0NvbGxhcHNlZCAmJiBlZGl0b3Iuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2xhdGVTZWxlY3Rpb24gPSBBbmd1bGFyRWRpdG9yLnRvU2xhdGVSYW5nZShlZGl0b3IsIGRvbVNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydFBvc2l0aW9uID0gVGFibGVQb3NpdGlvbi5jcmVhdGUob3B0cywgZWRpdG9yLCBzbGF0ZVNlbGVjdGlvbi5hbmNob3IucGF0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kUG9zaXRpb24gPSBUYWJsZVBvc2l0aW9uLmNyZWF0ZShvcHRzLCBlZGl0b3IsIHNsYXRlU2VsZWN0aW9uLmZvY3VzLnBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChpc01lcmdlZENlbGwgJiYgc3RhcnRQb3NpdGlvbi5jZWxsICE9PSBlbmRQb3NpdGlvbi5jZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVyKDgxKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCBzbGF0ZVNlbGVjdGlvbi5hbmNob3IucGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLm1vdXNlZG93biA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBoaXRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoaGl0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3RoZS10YWJsZS13cmFwcGVyJykpIHtcbiAgICAgICAgICAgIGlmICghVGhlRWRpdG9yLmlzRm9jdXNlZChlZGl0b3IpKSB7XG4gICAgICAgICAgICAgICAgVGhlRWRpdG9yLmZvY3VzKGVkaXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIG1vdXNlZG93bihldmVudCk7XG4gICAgfTtcblxuICAgIGVkaXRvci5vbktleWRvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgaXNNb3ZlVXAgPSBob3RrZXlzLmlzTW92ZVVwKGV2ZW50KTtcbiAgICAgICAgY29uc3QgaXNNb3ZlRG93biA9IGhvdGtleXMuaXNNb3ZlRG93bihldmVudCk7XG4gICAgICAgIGNvbnN0IGlzTW92ZUJhY2t3YXJkID0gaG90a2V5cy5pc01vdmVCYWNrd2FyZChldmVudCk7XG4gICAgICAgIGNvbnN0IGlzTW92ZUZvcndhcmQgPSBob3RrZXlzLmlzTW92ZUZvcndhcmQoZXZlbnQpO1xuICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gZWRpdG9yO1xuICAgICAgICBpZiAoIXNlbGVjdGlvbiB8fCAhc2VsZWN0aW9uLmFuY2hvciB8fCAhc2VsZWN0aW9uLmZvY3VzKSB7XG4gICAgICAgICAgICBvbktleWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0UG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvcik7XG4gICAgICAgIGNvbnN0IGVuZFBvc2l0aW9uID0gY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IsIHNlbGVjdGlvbi5mb2N1cy5wYXRoKTtcbiAgICAgICAgY29uc3QgaXNDb2xsYXBzZWQgPSBSYW5nZS5pc0NvbGxhcHNlZChzZWxlY3Rpb24pO1xuICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiAmJiBlbmRQb3NpdGlvbiAmJiBlbmRQb3NpdGlvbi5pc0luVGFibGUoKSkge1xuICAgICAgICAgICAgLy8gZm9yIGtleWJvYXJkIHVwIGFuZCBkb3duIGtleSBpbiB0aGUgdGFibGVcbiAgICAgICAgICAgIGlmIChpc01vdmVVcCB8fCBpc01vdmVEb3duKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbFBhdGggPSBlbmRQb3NpdGlvbi5jZWxsRW50cnlbMV07XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRQYXRoID0gRWRpdG9yLnN0YXJ0KGVkaXRvciwgY2VsbFBhdGgpLnBhdGg7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kUGF0aCA9IEVkaXRvci5lbmQoZWRpdG9yLCBjZWxsUGF0aCkucGF0aDtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGlzRmlyc3RMaW5lLCBpc0xhc3RMaW5lIH0gPSBjYWxjdWxhdGVBbmNob3JQb3NpdGlvbkluQ2VsbChlZGl0b3IpO1xuICAgICAgICAgICAgICAgIHN0YXJ0UGF0aC5wb3AoKTtcbiAgICAgICAgICAgICAgICBlbmRQYXRoLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKChUaGVRdWVyaWVzLmFuY2hvckJsb2NrRW50cnkoZWRpdG9yKVsxXS50b1N0cmluZygpICE9PSBzdGFydFBhdGgudG9TdHJpbmcoKSB8fCAhaXNGaXJzdExpbmUpICYmIGlzTW92ZVVwKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uS2V5ZG93bihldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoKFRoZVF1ZXJpZXMuYW5jaG9yQmxvY2tFbnRyeShlZGl0b3IpWzFdLnRvU3RyaW5nKCkgIT09IGVuZFBhdGgudG9TdHJpbmcoKSB8fCAhaXNMYXN0TGluZSkgJiYgaXNNb3ZlRG93bikge1xuICAgICAgICAgICAgICAgICAgICBvbktleWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBsZXQgYXQ6IFBvaW50O1xuICAgICAgICAgICAgICAgIGlmIChpc01vdmVVcCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhYm92ZVJvdyA9IHN0YXJ0UG9zaXRpb24udGFibGUuY2hpbGRyZW5bc3RhcnRQb3NpdGlvbi5nZXRSb3dJbmRleCgpIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFib3ZlQ2VsbCA9IGFib3ZlUm93ICYmIGFib3ZlUm93LmNoaWxkcmVuW3N0YXJ0UG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChhYm92ZUNlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYm92ZUNlbGwuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFibGVFZGl0b3Iuc2VsZWN0T3JpZ2luQ2VsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uLnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uLmdldFJvd0luZGV4KCkgLSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uLmdldENvbHVtbkluZGV4KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0ID0gRWRpdG9yLmVuZChlZGl0b3IsIFRoZUVkaXRvci5maW5kUGF0aChlZGl0b3IsIGFib3ZlQ2VsbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNOb2RlRW50cnkgPSBFZGl0b3IucHJldmlvdXMoZWRpdG9yLCB7IGF0OiBzdGFydFBvc2l0aW9uLnRhYmxlRW50cnlbMV0gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVQb2ludCA9IEVkaXRvci5iZWZvcmUoZWRpdG9yLCBzdGFydFBvc2l0aW9uLnRhYmxlRW50cnlbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLm5leHQoZWRpdG9yLCB7IGF0OiBzdGFydFBvc2l0aW9uLnRhYmxlRW50cnlbMV0gfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c05vZGVFbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0ID0gRWRpdG9yLmVuZChlZGl0b3IsIHByZXZpb3VzTm9kZUVudHJ5WzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c05vZGVFbnRyeSAmJiBiZWZvcmVQb2ludCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0ID0gRWRpdG9yLmVuZChlZGl0b3IsIGJlZm9yZVBvaW50LnBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzTm9kZUVudHJ5ICYmICFiZWZvcmVQb2ludCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuZ3VsYXJFZGl0b3IubW92ZUJsb2NrQ2FyZChlZGl0b3IsIHN0YXJ0UG9zaXRpb24udGFibGVFbnRyeVswXSwgeyBkaXJlY3Rpb246ICdsZWZ0JyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCBhdCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJlbG93Um93SW5kZXggPSBzdGFydFBvc2l0aW9uLmdldFJvd0luZGV4KCkgKyAxO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbi5jZWxsLnJvd3NwYW4gPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZWxvd1Jvd0luZGV4ID0gc3RhcnRQb3NpdGlvbi5nZXRSb3dJbmRleCgpICsgc3RhcnRQb3NpdGlvbi5jZWxsLnJvd3NwYW47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVsb3dSb3cgPSBzdGFydFBvc2l0aW9uLnRhYmxlLmNoaWxkcmVuW2JlbG93Um93SW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWxvd0NlbGwgPSBiZWxvd1JvdyAmJiBiZWxvd1Jvdy5jaGlsZHJlbltzdGFydFBvc2l0aW9uLmdldENvbHVtbkluZGV4KCldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYmVsb3dDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmVsb3dDZWxsLmhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlRWRpdG9yLnNlbGVjdE9yaWdpbkNlbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbi50YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbi5nZXRSb3dJbmRleCgpICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0ID0gRWRpdG9yLnN0YXJ0KGVkaXRvciwgVGhlRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgYmVsb3dDZWxsKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0Tm9kZUVudHJ5ID0gRWRpdG9yLm5leHQoZWRpdG9yLCB7IGF0OiBzdGFydFBvc2l0aW9uLnRhYmxlRW50cnlbMV0gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtb3ZlUGF0aCA9IG5leHROb2RlRW50cnkgPyBuZXh0Tm9kZUVudHJ5WzFdIDogRWRpdG9yLmFmdGVyKGVkaXRvciwgc3RhcnRQb3NpdGlvbi50YWJsZUVudHJ5WzFdKS5wYXRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXQgPSBFZGl0b3Iuc3RhcnQoZWRpdG9yLCBtb3ZlUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCBhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzTW92ZUJhY2t3YXJkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlUG9pbnQgPSBFZGl0b3IuYmVmb3JlKGVkaXRvciwgZWRpdG9yLnNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlUG9zaXRpb24gPSBiZWZvcmVQb2ludCAmJiBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvciwgYmVmb3JlUG9pbnQucGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZVBvc2l0aW9uICYmIGJlZm9yZVBvc2l0aW9uLmNlbGwgJiYgYmVmb3JlUG9zaXRpb24uY2VsbC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXQgPSBFZGl0b3IuZW5kKGVkaXRvciwgVGhlRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgYmVmb3JlUG9zaXRpb24uZmluZFByZXZpb3VzKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCBhdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNNb3ZlRm9yd2FyZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyUG9pbnQgPSBFZGl0b3IuYWZ0ZXIoZWRpdG9yLCBlZGl0b3Iuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhZnRlclBvc2l0aW9uID0gYWZ0ZXJQb2ludCAmJiBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvciwgYWZ0ZXJQb2ludC5wYXRoKTtcbiAgICAgICAgICAgICAgICBpZiAoYWZ0ZXJQb3NpdGlvbi5jZWxsICYmIGFmdGVyUG9zaXRpb24uY2VsbC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dENlbGwgPSBhZnRlclBvc2l0aW9uLmZpbmROZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Q2VsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXQgPSBFZGl0b3Iuc3RhcnQoZWRpdG9yLCBUaGVFZGl0b3IuZmluZFBhdGgoZWRpdG9yLCBhZnRlclBvc2l0aW9uLmZpbmROZXh0KCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFuZ3VsYXJFZGl0b3IubW92ZUJsb2NrQ2FyZChlZGl0b3IsIHN0YXJ0UG9zaXRpb24udGFibGVFbnRyeVswXSwgeyBkaXJlY3Rpb246ICdyaWdodCcgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFByZXZlbnQgZGVsZXRpbmcgY2VsbHMgaW4gdGhlIHRhYmxlXG4gICAgICAgICAgICBpZiAoIWlzQ29sbGFwc2VkICYmICFzdGFydFBvc2l0aW9uLmlzSW5UYWJsZSgpICYmICFpc1ZpcnR1YWxLZXkoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBsZXQgdGFibGVPdXRQYXRoOiBQb2ludDtcbiAgICAgICAgICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoUmFuZ2UuaXNGb3J3YXJkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlT3V0UGF0aCA9IEVkaXRvci5lbmQoZWRpdG9yLCBbc2VsZWN0aW9uLmZvY3VzLnBhdGhbMF0gLSAxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRhYmxlTm9kZShvcHRzLCBlZGl0b3IsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVPdXRQYXRoID0gRWRpdG9yLnN0YXJ0KGVkaXRvciwgW3NlbGVjdGlvbi5mb2N1cy5wYXRoWzBdICsgMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUYWJsZU5vZGUob3B0cywgZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJsZU91dFJhbmdlID0gRWRpdG9yLnJhbmdlKGVkaXRvciwgc2VsZWN0aW9uLmFuY2hvciwgdGFibGVPdXRQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5kZWxldGUoZWRpdG9yLCB7IGF0OiB0YWJsZU91dFJhbmdlIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIG5ldyByYW5nZVxuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxSYW5nZSA9IEVkaXRvci5yYW5nZShlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24uZm9jdXMucGF0aC5zbGljZSgwLCAzKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9jdXNSYW5nZSA9IFJhbmdlLmludGVyc2VjdGlvbihlZGl0b3Iuc2VsZWN0aW9uLCBjZWxsUmFuZ2UpO1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgZm9jdXNSYW5nZSk7XG4gICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KGVkaXRvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uS2V5ZG93bihldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9O1xuXG4gICAgZWRpdG9yLnNldEZyYWdtZW50RGF0YSA9IChkYXRhOiBEYXRhVHJhbnNmZXIsIG9yaWdpbkV2ZW50PzogT3JpZ2luRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcblxuICAgICAgICBpZiAoaXNTZWxlY3Rpb25JblRhYmxlKG9wdHMsIGVkaXRvcikpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlUG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvcik7XG4gICAgICAgICAgICBjb25zdCB0YWJsZUNvbXBvbmVudCA9IEVMRU1FTlRfVE9fQ09NUE9ORU5ULmdldCh0YWJsZVBvc2l0aW9uLnRhYmxlKSBhcyBUaGVUYWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbFBvc2l0aW9ucyA9IHRhYmxlQ29tcG9uZW50LnRhYmxlU3RvcmUuZ2V0U2VsZWN0ZWRDZWxsUG9zaXRpb25zKCk7XG4gICAgICAgICAgICBsZXQgdGFibGVGcmFnbWVudCA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGFibGVDb21wb25lbnQudGFibGVTdG9yZS5zZWxlY3RlZFJvd3NJbmRleC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93cyA9IHRhYmxlUG9zaXRpb24udGFibGUuY2hpbGRyZW4uc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlQ29tcG9uZW50LnRhYmxlU3RvcmUuc2VsZWN0ZWRSb3dzSW5kZXhbMF0sXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlQ29tcG9uZW50LnRhYmxlU3RvcmUuc2VsZWN0ZWRSb3dzSW5kZXhbdGFibGVDb21wb25lbnQudGFibGVTdG9yZS5zZWxlY3RlZFJvd3NJbmRleC5sZW5ndGggLSAxXSArIDFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRhYmxlRnJhZ21lbnQgPSB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRhYmxlUG9zaXRpb24udGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiByb3dzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRDZWxsUG9zaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wUm93cyA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2VsbCBvZiBzZWxlY3RlZENlbGxQb3NpdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyByb3csIGNvbCB9ID0gY2VsbDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbFBhdGggPSBbLi4udGFibGVQb3NpdGlvbi50YWJsZUVudHJ5WzFdLCByb3csIGNvbF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxOb2RlID0gTm9kZS5nZXQoZWRpdG9yLCBjZWxsUGF0aCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZW1wUm93c1tyb3ddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wUm93c1tyb3ddID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVtcFJvd3Nbcm93XS5wdXNoKGNlbGxOb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93czogVGFibGVSb3dFbGVtZW50W10gPSBPYmplY3QudmFsdWVzKHRlbXBSb3dzKS5tYXAoKGl0ZW06IFRhYmxlQ2VsbEVsZW1lbnRbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogRWxlbWVudEtpbmRzLnRhYmxlUm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0YWJsZUZyYWdtZW50ID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBFbGVtZW50S2luZHMudGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiByb3dzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBlZGl0b3IuZ2V0RnJhZ21lbnQoKSBhcyBDdXN0b21FbGVtZW50W107XG4gICAgICAgICAgICAgICAgY29uc3QgaXNBY3Jvc3NCbG9ja3MgPSBUaGVRdWVyaWVzLmlzQWNyb3NzQmxvY2tzKGVkaXRvciwgZnJhZ21lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChpc0Fjcm9zc0Jsb2NrcyAmJiBmcmFnbWVudC5sZW5ndGggPT09IDEgJiYgZnJhZ21lbnRbMF0udHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlRnJhZ21lbnQgPSBmcmFnbWVudFswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGFibGVGcmFnbWVudCkge1xuICAgICAgICAgICAgICAgIHRhYmxlRnJhZ21lbnQgPSBub3JtYWxpemVUYWJsZShjbG9uZURlZXAodGFibGVGcmFnbWVudCkpO1xuICAgICAgICAgICAgICAgIHNldENsaXBib2FyZERhdGFCeURvbShlZGl0b3IsIHRhYmxlRnJhZ21lbnQsIGRhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRGcmFnbWVudERhdGEoZGF0YSwgb3JpZ2luRXZlbnQpO1xuICAgIH07XG5cbiAgICBlZGl0b3IuaW5zZXJ0RnJhZ21lbnREYXRhID0gYXN5bmMgKGRhdGE6IERhdGFUcmFuc2ZlcikgPT4ge1xuICAgICAgICBjb25zdCBmcmFnbWVudCA9IGF3YWl0IGV4dHJhY3RGcmFnbWVudChkYXRhKTtcbiAgICAgICAgaWYgKGZyYWdtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGlzU2VsZWN0aW9uSW5UYWJsZShvcHRzLCBlZGl0b3IpICYmXG4gICAgICAgICAgICAgICAgZnJhZ21lbnQubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICAgICAgRWxlbWVudC5pc0VsZW1lbnQoZnJhZ21lbnRbMF0pICYmXG4gICAgICAgICAgICAgICAgZnJhZ21lbnRbMF0udHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZVBvc2l0aW9uID0gY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsaXBib2FyZFRhYmxlID0gZnJhZ21lbnRbMF0uY2hpbGRyZW4gYXMgTm9kZVtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsaXBib2FyZFJvdyA9IChjbGlwYm9hcmRUYWJsZVswXSBhcyBFbGVtZW50KS5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RSb3dJbmRleCA9IHRhYmxlUG9zaXRpb24uZ2V0Um93SW5kZXgoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RDb2xJbmRleCA9IHRhYmxlUG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0Um93SW5kZXggPSBzZWxlY3RSb3dJbmRleCArIGNsaXBib2FyZFRhYmxlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdENvbEluZGV4ID0gc2VsZWN0Q29sSW5kZXggKyBjbGlwYm9hcmRSb3cubGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBzZWxlY3RSb3dJbmRleDsgaSA8PSBsYXN0Um93SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gc2VsZWN0Q29sSW5kZXg7IGogPD0gbGFzdENvbEluZGV4OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRhYmxlUG9zaXRpb24udGFibGUuY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93ICYmIHJvdy5jaGlsZHJlbltqXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbkNlbGwgPSBnZXRPcmlnaW5DZWxsKHRhYmxlUG9zaXRpb24udGFibGUsIGksIGopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW5DZWxsICYmIChvcmlnaW5DZWxsLmNvbHNwYW4gfHwgb3JpZ2luQ2VsbC5yb3dzcGFuKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gVGhlRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgb3JpZ2luQ2VsbCkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldFRhYmxlQ2VsbChlZGl0b3IsIHRhYmxlUG9zaXRpb24udGFibGUsIG9yaWdpbkNlbGwsIHBhdGhbMF0sIHBhdGhbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Q29sSW5kZXggPiB0YWJsZVBvc2l0aW9uLmdldFdpZHRoKCkgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGRDb2xDb3VudCA9IGxhc3RDb2xJbmRleCAtICh0YWJsZVBvc2l0aW9uLmdldFdpZHRoKCkgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlRWRpdG9yLmluc2VydENvbHVtbihlZGl0b3IsIGFkZENvbENvdW50LCB0YWJsZVBvc2l0aW9uLmdldFdpZHRoKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Um93SW5kZXggPiB0YWJsZVBvc2l0aW9uLmdldEhlaWdodCgpIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRkUm93Q291bnQgPSBsYXN0Um93SW5kZXggLSAodGFibGVQb3NpdGlvbi5nZXRIZWlnaHQoKSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgVGFibGVFZGl0b3IuaW5zZXJ0Um93KGVkaXRvciwgYWRkUm93Q291bnQsIHRhYmxlUG9zaXRpb24uZ2V0SGVpZ2h0KCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNsaXBib2FyZFRhYmxlLmZvckVhY2goKHJvdzogVGFibGVFbGVtZW50LCBpOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5jaGlsZHJlbi5mb3JFYWNoKChjb2w6IE5vZGUsIGo6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0ID0gWy4uLnRhYmxlUG9zaXRpb24udGFibGVFbnRyeVsxXSwgc2VsZWN0Um93SW5kZXggKyBpLCBzZWxlY3RDb2xJbmRleCArIGpdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMucmVtb3ZlTm9kZXMoZWRpdG9yLCB7IGF0IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZXMoZWRpdG9yLCBjb2wsIHsgYXQgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gRWRpdG9yLnN0YXJ0KGVkaXRvciwgWy4uLnRhYmxlUG9zaXRpb24udGFibGVFbnRyeVsxXSwgc2VsZWN0Um93SW5kZXgsIHNlbGVjdENvbEluZGV4XSk7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCB0YXJnZXQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB3aGVuIHBhc3RpbmcgZGF0YSwgdGhlIGxhc3Qgb25lIGlzIGEgdGFibGUsIGFuZCB0aGUgZm9jdXMgcG9zaXRpb24gaXMgc3BlY2lhbGx5IGhhbmRsZWRcbiAgICAgICAgICAgIC8vICogdGhpcyBpcyB0byBmb2N1cyBhZnRlciB3aXRoVHJhaWxpbmdOb2RlLm5vcm1hbGl6ZU5vZGUoKSB0byBhdm9pZCBpbmNvcnJlY3QgZm9jdXMgZWxlbWVudC5cbiAgICAgICAgICAgIC8vICogaWYgdGhlcmUgaXMgYSBub2RlIGJlbG93LCB0aGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBub2RlIGJlbG93LlxuICAgICAgICAgICAgLy8gKiBpZiB0aGVyZSBpcyBubyBub2RlIGJlbG93LCB0aGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY3VycmVudCB0YWJsZS5cbiAgICAgICAgICAgIGNvbnN0IGxhc3RJbnNlcnROb2RlID0gZnJhZ21lbnRbZnJhZ21lbnQubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBpc1RhYmxlID0gKGxhc3RJbnNlcnROb2RlIGFzIEVsZW1lbnQpLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZTtcbiAgICAgICAgICAgIGlmIChpc1RhYmxlKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbLCBjdXJyZW50UGF0aF0gPSBUaGVRdWVyaWVzLmZpbmROb2RlKGVkaXRvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOiBuID0+IEVsZW1lbnQuaXNFbGVtZW50KG4pICYmIG4udHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRQYXRoID0gUGF0aC5uZXh0KGN1cnJlbnRQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc05leHROb2RlID0gTm9kZS5oYXMoZWRpdG9yLCBuZXh0UGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb2N1c1BhdGggPSBoYXNOZXh0Tm9kZSA/IG5leHRQYXRoIDogY3VycmVudFBhdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb2N1c05vZGUgPSBOb2RlLmdldChlZGl0b3IsIGZvY3VzUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0Jsb2NrQ2FyZCA9IGVkaXRvci5pc0Jsb2NrQ2FyZChmb2N1c05vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yUGF0aCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBmb2N1c1BhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBpc0Jsb2NrQ2FyZCA/IChoYXNOZXh0Tm9kZSA/IC0xIDogLTIpIDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgY3Vyc29yUGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc2VydEZyYWdtZW50RGF0YShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5zZXJ0RnJhZ21lbnREYXRhKGRhdGEpO1xuICAgIH07XG5cbiAgICBlZGl0b3Iubm9ybWFsaXplTm9kZSA9IChbbm9kZSwgcGF0aF06IE5vZGVFbnRyeTxOb2RlPikgPT4ge1xuICAgICAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQobm9kZSkgJiYgbm9kZS50eXBlID09PSBFbGVtZW50S2luZHMudGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gbm9kZSBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBtYXhXaWR0aCA9IE1hdGgubWF4KC4uLnRhYmxlLmNoaWxkcmVuLm1hcChyb3cgPT4gcm93LmNoaWxkcmVuLmxlbmd0aCkpO1xuICAgICAgICAgICAgY29uc3QgaW52YWxpZFJvd3MgPSB0YWJsZS5jaGlsZHJlbi5maWx0ZXIocm93ID0+IHJvdy5jaGlsZHJlbi5sZW5ndGggPCBtYXhXaWR0aCk7XG4gICAgICAgICAgICBpZiAoaW52YWxpZFJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgRWRpdG9yLndpdGhvdXROb3JtYWxpemluZyhlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGFibGUuY2hpbGRyZW4ubWFwKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3cuY2hpbGRyZW4ubWFwKChjZWxsLCBjZWxsSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbC5oaWRkZW4gfHwgY2VsbC5jb2xzcGFuIHx8IGNlbGwucm93c3Bhbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBoaWRkZW46IG51bGwsIGNvbHNwYW46IG51bGwsIHJvd3NwYW46IG51bGwgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYXQ6IFsuLi5wYXRoLCByb3dJbmRleCwgY2VsbEluZGV4XSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkUm93cy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IG1heFdpZHRoIC0gcm93LmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydENvbHVtbkF0Um93KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtub2RlLCBwYXRoXSBhcyBOb2RlRW50cnk8VGFibGVFbGVtZW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZS5jaGlsZHJlbi5pbmRleE9mKHJvdyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LmNoaWxkcmVuLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGFibGUuY29sdW1ucyAmJiB0YWJsZS5jb2x1bW5zLmxlbmd0aCAhPT0gbWF4V2lkdGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGFibGUuY29sdW1ucy5sZW5ndGggPiBtYXhXaWR0aCA/IHJlbW92ZUNvbHVtbnModGFibGUsIG1heFdpZHRoKSA6IGFkZENvbHVtbnModGFibGUsIG1heFdpZHRoKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGVzKGVkaXRvciwgeyBjb2x1bW5zIH0sIHsgYXQ6IHBhdGggfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBub3JhbWxpemUgaWxsZWdhbCBjZWxsIGFuZCByb3cgdG8gYmUgcGFyYWdyYXBoXG4gICAgICAgIGlmIChFbGVtZW50LmlzRWxlbWVudChub2RlKSAmJiBbRWxlbWVudEtpbmRzLnRhYmxlQ2VsbCwgRWxlbWVudEtpbmRzLnRhYmxlUm93XS5pbmNsdWRlcyhub2RlLnR5cGUpKSB7XG4gICAgICAgICAgICBpZiAoIWlzTGVnYWxUYWJsZShlZGl0b3IsIG5vZGUgYXMgVGFibGVSb3dFbGVtZW50IHwgVGFibGVDZWxsRWxlbWVudCwgcGF0aCkpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb290UGF0aCA9IFtwYXRoWzBdXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZWRpdG9yLnNlbGVjdGlvbi5mb2N1cy5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZpbmQgYWxsIHRhYmxlQ2VsbCBhbmQgdGFibGVSb3dcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBFZGl0b3Iubm9kZXMoZWRpdG9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdDogcm9vdFBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiAnbG93ZXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOiAobm9kZTogQ3VzdG9tRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZUNlbGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3Vyc29yUGF0aCA9IHBhdGhbMF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2Rlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vcmFtbGl6ZSB0byBiZSBwYXJhZ3JhcGhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW3RhcmdldE5vZGUsIHRhcmdldFBhdGhdIG9mIG5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhZ3JhcGggPSBjcmVhdGVFbXB0eVBhcmFncmFwaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBOb2RlLnN0cmluZyh0YXJnZXROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFyYWdyYXBoLmNoaWxkcmVuWzBdIGFzIFRleHQpLnRleHQgPSB0ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodGFyZ2V0Tm9kZSBhcyBDdXN0b21FbGVtZW50KS5rZXkgPT09IG5vZGUua2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvclBhdGggPSByb290UGF0aFswXSArIGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmluc2VydE5vZGVzKGVkaXRvciwgcGFyYWdyYXBoLCB7IGF0OiBbcm9vdFBhdGhbMF0gKyBpbmRleF0gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yID0geyBwYXRoOiBbY3Vyc29yUGF0aCwgMF0sIG9mZnNldDogb2Zmc2V0IH07XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgeyBhbmNob3I6IGN1cnNvciwgZm9jdXM6IGN1cnNvciB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIHJvb3Qgbm9kZVxuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnJlbW92ZU5vZGVzKGVkaXRvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXQ6IHJvb3RQYXRoXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkanVzdCBzZWxlY3Rpb24gd2hlbiBzZWxlY3Rpb24gaXMgaW4gaGlkZGVuIGNlbGxcbiAgICAgICAgaWYgKEVsZW1lbnQuaXNFbGVtZW50KG5vZGUpICYmIG5vZGUudHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlQ2VsbCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICBSYW5nZS5pc0NvbGxhcHNlZChlZGl0b3Iuc2VsZWN0aW9uKSAmJlxuICAgICAgICAgICAgICAgIFBhdGguaXNBbmNlc3RvcihwYXRoLCBlZGl0b3Iuc2VsZWN0aW9uLmFuY2hvci5wYXRoKSAmJlxuICAgICAgICAgICAgICAgIG5vZGUuaGlkZGVuXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFibGVQb3NpdGlvbiA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gZ2V0T3JpZ2luQ2VsbCh0YWJsZVBvc2l0aW9uLnRhYmxlLCB0YWJsZVBvc2l0aW9uLmdldFJvd0luZGV4KCksIHRhYmxlUG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgb3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgRWRpdG9yLmVuZChlZGl0b3IsIHBhdGgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG5vcm1hbGl6ZU5vZGUoW25vZGUsIHBhdGhdKTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLmlzQmxvY2tDYXJkID0gKGVsZW1lbnQ6IEVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC50eXBlID09PSBFbGVtZW50S2luZHMudGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0Jsb2NrQ2FyZChlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgZWRpdG9yLnJlbmRlckVsZW1lbnQgPSAoZWxlbWVudDogRWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBFbGVtZW50S2luZHMudGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBUaGVUYWJsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBFbGVtZW50S2luZHMudGFibGVSb3cgJiYgaXNJblRhYmxlKGVkaXRvciwgZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBUaGVUYWJsZVJvdztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBFbGVtZW50S2luZHMudGFibGVDZWxsICYmIGlzSW5UYWJsZVJvdyhlZGl0b3IsIGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gVGhlVGQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlbmRlckVsZW1lbnQoZWxlbWVudCk7XG4gICAgfTtcblxuICAgIGVkaXRvci5kZWxldGVDdXREYXRhID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICBpZiAoIWlzU2VsZWN0aW9uSW5UYWJsZShvcHRzLCBlZGl0b3IpKSB7XG4gICAgICAgICAgICBkZWxldGVDdXREYXRhKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yKTtcbiAgICAgICAgY29uc3QgdGFibGVDb21wb25lbnQgPSBFTEVNRU5UX1RPX0NPTVBPTkVOVC5nZXQoZWxlbWVudC50YWJsZSkgYXMgVGhlVGFibGU7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbFBvc2l0aW9ucyA9IHRhYmxlQ29tcG9uZW50LnRhYmxlU3RvcmUuZ2V0U2VsZWN0ZWRDZWxsUG9zaXRpb25zKCk7XG4gICAgICAgIGlmIChzZWxlY3RlZENlbGxQb3NpdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgRWRpdG9yLndpdGhvdXROb3JtYWxpemluZyhlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGFibGVDb21wb25lbnQudGFibGVTdG9yZS5pc1NlbGVjdGVkVGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlQ29tcG9uZW50LnRhYmxlU3RvcmUuaXNGdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgVGFibGVFZGl0b3IucmVtb3ZlVGFibGUoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBUYWJsZUVkaXRvci5jbGVhckNlbGxzQ29udGVudChlZGl0b3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YWJsZUNvbXBvbmVudC50YWJsZVNlcnZpY2UuY2xvc2VUb29sYmFyKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGVDdXREYXRhKCk7XG4gICAgfTtcblxuICAgIGVkaXRvci5pc0NvbnRhaW5lciA9IChlbGVtZW50OiBFbGVtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZUNlbGwgPyB0cnVlIDogaXNDb250YWluZXIoZWxlbWVudCk7XG4gICAgfTtcblxuICAgIGVkaXRvci5vbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgb25DaGFuZ2UoKTtcbiAgICAgICAgLy8gYWR1anN0IHNlbGVjdGlvbiB3aGVuIHNlbGVjdGlvbiBpcyBpbiBoaWRkZW4gY2VsbFxuICAgICAgICAvLyBqdXN0IGhvb2sgc2V0X3NlbGVjdGlvblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaXNDb2xsYXBzZWQgPSBlZGl0b3Iuc2VsZWN0aW9uICYmIFJhbmdlLmlzQ29sbGFwc2VkKGVkaXRvci5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgY29uc3QgaXNTZWxlY3Rpb25PcGVyYXRpb24gPSBlZGl0b3Iub3BlcmF0aW9ucy5ldmVyeShvcCA9PiBPcGVyYXRpb24uaXNTZWxlY3Rpb25PcGVyYXRpb24ob3ApKTtcbiAgICAgICAgICAgIGlmIChpc0NvbGxhcHNlZCAmJiBpc1NlbGVjdGlvbk9wZXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFibGVQb3NpdGlvbiA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAodGFibGVQb3NpdGlvbi5pc0luVGFibGUoKSAmJiB0YWJsZVBvc2l0aW9uLmNlbGwuaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIFRhYmxlRWRpdG9yLnNlbGVjdE9yaWdpbkNlbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVBvc2l0aW9uLnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVQb3NpdGlvbi5nZXRSb3dJbmRleCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIH07XG5cbiAgICByZXR1cm4gZWRpdG9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVRhYmxlUGx1Z2luID0gY3JlYXRlUGx1Z2luRmFjdG9yeTxUaGVQbHVnaW5UYWJsZU9wdGlvbj4oe1xuICAgIGtleTogUGx1Z2luS2V5cy50YWJsZSxcbiAgICB3aXRoT3ZlcnJpZGVzOiB3aXRoVGFibGUsXG4gICAgbmVzdGVkU3RydWN0dXJlQnlLZXk6IHtcbiAgICAgICAgW0VsZW1lbnRLaW5kcy50YWJsZV06IEVsZW1lbnRLaW5kcy50YWJsZVJvdyxcbiAgICAgICAgW0VsZW1lbnRLaW5kcy50YWJsZVJvd106IEVsZW1lbnRLaW5kcy50YWJsZUNlbGxcbiAgICB9LFxuICAgIHRvb2xiYXJJdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IEVsZW1lbnRLaW5kcy50YWJsZSxcbiAgICAgICAgICAgIGljb246ICd0YWJsZS1ib3JkZXItYWxsJyxcbiAgICAgICAgICAgIG5hbWU6ICfooajmoLwnLFxuICAgICAgICAgICAgdHlwZTogVG9vbGJhckl0ZW1UeXBlLmRyb3Bkb3duLFxuICAgICAgICAgICAgZHJvcGRvd25Nb2RlOiBEcm9wZG93bk1vZGUuaWNvbixcbiAgICAgICAgICAgIGljb25Db21wb25lbnQ6IFRoZVRhYmxlVG9vbGJhckl0ZW0sXG4gICAgICAgICAgICBleGVjdXRlOiBlZGl0b3IgPT4gVGFibGVFZGl0b3IuaW5zZXJ0VGFibGUoZWRpdG9yKSxcbiAgICAgICAgICAgIGFjdGl2ZTogZWRpdG9yID0+IFRhYmxlRWRpdG9yLmlzQWN0aXZlKGVkaXRvcilcbiAgICAgICAgfVxuICAgIF0sXG4gICAgbWVudUl0ZW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogRWxlbWVudEtpbmRzLnRhYmxlLFxuICAgICAgICAgICAga2V5d29yZHM6ICdiaWFvZ2UsYmcsdGFibGUs6KGo5qC8JyxcbiAgICAgICAgICAgIGV4ZWN1dGU6IGVkaXRvciA9PiBUYWJsZUVkaXRvci5pbnNlcnRUYWJsZShlZGl0b3IpLFxuICAgICAgICAgICAgYWN0aXZlOiBlZGl0b3IgPT4gVGFibGVFZGl0b3IuaXNBY3RpdmUoZWRpdG9yKSxcbiAgICAgICAgICAgIG5hbWU6ICfooajmoLwnLFxuICAgICAgICAgICAgdHlwZTogVGhlUGx1Z2luTWVudUl0ZW1UeXBlLmdyb3VwLFxuICAgICAgICAgICAgbWVudUljb246IFBsdWdpbk1lbnVJY29ucy50YWJsZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAn5pSv5oyB5o+S5YWl6KGo5qC8JyxcbiAgICAgICAgICAgIGRpc3BsYXlLZXk6ICcvYmcnXG4gICAgICAgIH1cbiAgICBdLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgICAgc2hvd0Z1bGxzY3JlZW46IGZhbHNlLFxuICAgICAgICBmcmVlemVDb2x1bW5IZWFkZXI6IGZhbHNlLFxuICAgICAgICBmcmVlemVSb3dIZWFkZXI6IGZhbHNlLFxuICAgICAgICBzZXRGdWxsc2NyZWVuOiAoZWRpdG9yOiBFZGl0b3IsIGV2ZW50OiBNb3VzZUV2ZW50LCBlbGVtZW50OiBFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iXX0=
|
|
@@ -14,7 +14,7 @@ export const setClipboardDataByDom = async (e, fragment, data) => {
|
|
|
14
14
|
child.innerHTML = htmlString;
|
|
15
15
|
document.body.appendChild(div);
|
|
16
16
|
const attach = div.childNodes[0];
|
|
17
|
-
const plainText = getPlainText(div);
|
|
17
|
+
const plainText = getPlainText(div).trim();
|
|
18
18
|
const clipboardData = createClipboardData(htmlString, nodes, plainText, []);
|
|
19
19
|
await setClipboardData(clipboardData, div, attach, data);
|
|
20
20
|
document.body.removeChild(div);
|
|
@@ -33,4 +33,4 @@ export function copyNode(e, element, thyNotifyService) {
|
|
|
33
33
|
thyNotifyService?.error('复制失败');
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS1ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3V0aWxzL2NvcHktbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5SCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHckMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsS0FBSyxFQUFFLENBQVksRUFBRSxRQUE2QixFQUFFLElBQW1CLEVBQUUsRUFBRTtJQUM1RyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxLQUFZLENBQUMsQ0FBQztJQUM5RCxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU1QyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkMsS0FBSyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7SUFDN0IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFL0IsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQWdCLENBQUM7SUFDaEQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNDLE1BQU0sYUFBYSxHQUFHLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sZ0JBQWdCLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekQsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLFFBQVEsQ0FBQyxDQUFZLEVBQUUsT0FBZ0IsRUFBRSxnQkFBbUM7SUFDeEYsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsQ0FBQztRQUMvQixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsT0FBTztJQUNYLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsT0FBTyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDO1NBQ3BDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDUCxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDO1NBQ0QsS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUNSLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUMsQ0FBQztBQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciwgY3JlYXRlQ2xpcGJvYXJkRGF0YSwgZ2V0UGxhaW5UZXh0LCBpc0NsaXBib2FyZFdyaXRlU3VwcG9ydGVkLCBzZXRDbGlwYm9hcmREYXRhIH0gZnJvbSAnc2xhdGUtYW5ndWxhcic7XG5pbXBvcnQgeyBUaHlOb3RpZnlTZXJ2aWNlIH0gZnJvbSAnbmd4LXRldGh5cy9ub3RpZnknO1xuaW1wb3J0IHsgVGhlaWFDb252ZXJ0ZXIgfSBmcm9tICdAYXRpbmMvc2VsZW5lJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJy4vbG9kYXNoJztcbmltcG9ydCB7IFRoZUVkaXRvciB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY29uc3Qgc2V0Q2xpcGJvYXJkRGF0YUJ5RG9tID0gYXN5bmMgKGU6IFRoZUVkaXRvciwgZnJhZ21lbnQ6IEVsZW1lbnQgfCBFbGVtZW50W10sIGRhdGE/OiBEYXRhVHJhbnNmZXIpID0+IHtcbiAgICBjb25zdCBub2RlcyA9IEFycmF5LmlzQXJyYXkoZnJhZ21lbnQpID8gZnJhZ21lbnQgOiBbZnJhZ21lbnRdO1xuICAgIGNvbnN0IGh0bWxTdHJpbmcgPSBUaGVpYUNvbnZlcnRlci5jb252ZXJ0VG9IdG1sKG5vZGVzIGFzIGFueSk7XG4gICAgY29uc3QgZG9tUmFuZ2UgPSBBbmd1bGFyRWRpdG9yLnRvRE9NUmFuZ2UoZSwgZS5zZWxlY3Rpb24pO1xuICAgIGNvbnN0IGNvbnRlbnRzID0gZG9tUmFuZ2UuY2xvbmVDb250ZW50cygpO1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IGNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICBjaGlsZC5hcHBlbmRDaGlsZChjb250ZW50cyk7XG4gICAgZGl2LmFwcGVuZENoaWxkKGNoaWxkKTtcbiAgICBkaXYuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAndHJ1ZScpO1xuICAgIGNoaWxkLmlubmVySFRNTCA9IGh0bWxTdHJpbmc7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xuXG4gICAgY29uc3QgYXR0YWNoID0gZGl2LmNoaWxkTm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgcGxhaW5UZXh0ID0gZ2V0UGxhaW5UZXh0KGRpdikudHJpbSgpO1xuICAgIGNvbnN0IGNsaXBib2FyZERhdGEgPSBjcmVhdGVDbGlwYm9hcmREYXRhKGh0bWxTdHJpbmcsIG5vZGVzLCBwbGFpblRleHQsIFtdKTtcbiAgICBhd2FpdCBzZXRDbGlwYm9hcmREYXRhKGNsaXBib2FyZERhdGEsIGRpdiwgYXR0YWNoLCBkYXRhKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY29weU5vZGUoZTogVGhlRWRpdG9yLCBlbGVtZW50OiBFbGVtZW50LCB0aHlOb3RpZnlTZXJ2aWNlPzogVGh5Tm90aWZ5U2VydmljZSkge1xuICAgIGlmICghaXNDbGlwYm9hcmRXcml0ZVN1cHBvcnRlZCgpKSB7XG4gICAgICAgIHRoeU5vdGlmeVNlcnZpY2U/LmVycm9yKCflpI3liLblpLHotKUnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZyYWdtZW50ID0gY2xvbmVEZWVwKGVsZW1lbnQpO1xuICAgIHJldHVybiBzZXRDbGlwYm9hcmREYXRhQnlEb20oZSwgZnJhZ21lbnQpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoeU5vdGlmeVNlcnZpY2U/LnN1Y2Nlc3MoJ+WkjeWItuaIkOWKnycpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgdGh5Tm90aWZ5U2VydmljZT8uZXJyb3IoJ+WkjeWItuWksei0pScpO1xuICAgICAgICB9KTtcbn1cbiJdfQ==
|
|
@@ -1734,7 +1734,7 @@ const setClipboardDataByDom = async (e, fragment, data) => {
|
|
|
1734
1734
|
child.innerHTML = htmlString;
|
|
1735
1735
|
document.body.appendChild(div);
|
|
1736
1736
|
const attach = div.childNodes[0];
|
|
1737
|
-
const plainText = getPlainText$1(div);
|
|
1737
|
+
const plainText = getPlainText$1(div).trim();
|
|
1738
1738
|
const clipboardData = createClipboardData(htmlString, nodes, plainText, []);
|
|
1739
1739
|
await setClipboardData(clipboardData, div, attach, data);
|
|
1740
1740
|
document.body.removeChild(div);
|
|
@@ -16129,6 +16129,13 @@ const withTable = (editor) => {
|
|
|
16129
16129
|
children: rows
|
|
16130
16130
|
};
|
|
16131
16131
|
}
|
|
16132
|
+
else {
|
|
16133
|
+
const fragment = editor.getFragment();
|
|
16134
|
+
const isAcrossBlocks$1 = isAcrossBlocks(editor, fragment);
|
|
16135
|
+
if (isAcrossBlocks$1 && fragment.length === 1 && fragment[0].type === ElementKinds.table) {
|
|
16136
|
+
tableFragment = fragment[0];
|
|
16137
|
+
}
|
|
16138
|
+
}
|
|
16132
16139
|
if (tableFragment) {
|
|
16133
16140
|
tableFragment = normalizeTable(cloneDeep(tableFragment));
|
|
16134
16141
|
setClipboardDataByDom(editor, tableFragment, data);
|