@ai-table/grid 0.0.43 → 0.0.44

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 (57) hide show
  1. package/angular-konva/interfaces/event-object.d.ts +4 -0
  2. package/angular-konva/interfaces/event-object.d.ts.map +1 -1
  3. package/components/field-menu/field-menu.component.d.ts +3 -2
  4. package/components/field-menu/field-menu.component.d.ts.map +1 -1
  5. package/constants/grid.d.ts.map +1 -1
  6. package/constants/table.d.ts +5 -1
  7. package/constants/table.d.ts.map +1 -1
  8. package/esm2022/angular-konva/interfaces/event-object.mjs +1 -1
  9. package/esm2022/components/field-menu/field-menu.component.mjs +9 -3
  10. package/esm2022/constants/grid.mjs +1 -2
  11. package/esm2022/constants/table.mjs +6 -2
  12. package/esm2022/grid-base.component.mjs +4 -2
  13. package/esm2022/grid.component.mjs +38 -22
  14. package/esm2022/renderer/components/action-icon.component.mjs +117 -0
  15. package/esm2022/renderer/components/cells/attachment.component.mjs +117 -0
  16. package/esm2022/renderer/components/cells/index.mjs +3 -1
  17. package/esm2022/renderer/components/hover-cell.component.mjs +7 -7
  18. package/esm2022/renderer/drawers/cell-drawer.mjs +4 -7
  19. package/esm2022/types/cell.mjs +1 -1
  20. package/esm2022/types/component-config.mjs +1 -1
  21. package/esm2022/types/field.mjs +1 -1
  22. package/esm2022/utils/clipboard/paste.mjs +3 -2
  23. package/esm2022/utils/common.mjs +6 -5
  24. package/esm2022/utils/field/model/date.mjs +6 -12
  25. package/esm2022/utils/field/model/progress.mjs +11 -4
  26. package/esm2022/utils/file.mjs +1 -93
  27. package/esm2022/utils/hover-cell.mjs +1 -8
  28. package/fesm2022/ai-table-grid.mjs +1322 -1252
  29. package/fesm2022/ai-table-grid.mjs.map +1 -1
  30. package/grid-base.component.d.ts +4 -1
  31. package/grid-base.component.d.ts.map +1 -1
  32. package/grid.component.d.ts.map +1 -1
  33. package/package.json +1 -1
  34. package/renderer/components/action-icon.component.d.ts +47 -0
  35. package/renderer/components/action-icon.component.d.ts.map +1 -0
  36. package/renderer/components/cells/attachment.component.d.ts +16 -0
  37. package/renderer/components/cells/attachment.component.d.ts.map +1 -0
  38. package/renderer/components/cells/index.d.ts +1 -0
  39. package/renderer/components/cells/index.d.ts.map +1 -1
  40. package/renderer/drawers/cell-drawer.d.ts.map +1 -1
  41. package/types/cell.d.ts +1 -0
  42. package/types/cell.d.ts.map +1 -1
  43. package/types/component-config.d.ts +13 -1
  44. package/types/component-config.d.ts.map +1 -1
  45. package/types/field.d.ts +1 -1
  46. package/types/field.d.ts.map +1 -1
  47. package/utils/clipboard/paste.d.ts.map +1 -1
  48. package/utils/common.d.ts +1 -1
  49. package/utils/common.d.ts.map +1 -1
  50. package/utils/field/model/date.d.ts.map +1 -1
  51. package/utils/field/model/progress.d.ts.map +1 -1
  52. package/utils/file.d.ts +0 -9
  53. package/utils/file.d.ts.map +1 -1
  54. package/utils/hover-cell.d.ts.map +1 -1
  55. package/esm2022/utils/icon.mjs +0 -48
  56. package/utils/icon.d.ts +0 -19
  57. package/utils/icon.d.ts.map +0 -1
@@ -616,15 +616,12 @@ export class CellDrawer extends Drawer {
616
616
  }
617
617
  renderCellAttachment(render, ctx) {
618
618
  const { references, x, y, field, transformValue: _cellValue, rowHeight, columnWidth, isActive } = render;
619
- const cellValue = _cellValue;
620
- if (!cellValue?.length || !references) {
621
- return;
622
- }
619
+ const cellValue = _cellValue || [];
623
620
  const fileIconSize = AI_TABLE_FILE_ICON_SIZE;
624
621
  const itemHeight = AI_TABLE_FILE_ICON_ITEM_HEIGHT;
625
622
  const isOperating = isActive;
626
623
  let currentX = AI_TABLE_CELL_PADDING;
627
- let currentY = (AI_TABLE_ROW_BLANK_HEIGHT - fileIconSize) / 2;
624
+ let currentY = (AI_TABLE_ROW_BLANK_HEIGHT - itemHeight) / 2;
628
625
  const itemOtherWidth = fileIconSize + AI_TABLE_FIELD_ITEM_MARGIN_RIGHT;
629
626
  const maxHeight = isActive ? 130 - AI_TABLE_CELL_MULTI_PADDING_TOP : rowHeight - AI_TABLE_CELL_MULTI_PADDING_TOP;
630
627
  const maxTextWidth = isOperating
@@ -633,7 +630,7 @@ export class CellDrawer extends Drawer {
633
630
  const listCount = cellValue.length;
634
631
  let isOverflow = false;
635
632
  for (let index = 0; index < listCount; index++) {
636
- const attachmentInfo = references.attachments[cellValue[index]];
633
+ const attachmentInfo = references?.attachments[cellValue[index]];
637
634
  if (!attachmentInfo)
638
635
  continue;
639
636
  const { title, addition } = attachmentInfo;
@@ -685,4 +682,4 @@ export class CellDrawer extends Drawer {
685
682
  }
686
683
  }
687
684
  export const cellDrawer = new CellDrawer();
688
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1kcmF3ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9kcmF3ZXJzL2NlbGwtZHJhd2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFDSCxrQ0FBa0MsRUFDbEMscUNBQXFDLEVBQ3JDLDRDQUE0QyxFQUM1QywyQkFBMkIsRUFDM0Isd0JBQXdCLEVBQ3hCLDJCQUEyQixFQUMzQixnQ0FBZ0MsRUFDaEMsaUNBQWlDLEVBQ2pDLDhCQUE4QixFQUM5QixtQ0FBbUMsRUFDbkMsa0NBQWtDLEVBQ2xDLGdDQUFnQyxFQUNoQywrQkFBK0IsRUFDL0IscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6QixtQkFBbUIsRUFDbkIsZ0NBQWdDLEVBQ2hDLDhCQUE4QixFQUM5Qix1QkFBdUIsRUFDdkIsMkJBQTJCLEVBQzNCLHdDQUF3QyxFQUN4Qyx1QkFBdUIsRUFDdkIsZUFBZSxFQUNmLDhCQUE4QixFQUM5QiwyQkFBMkIsRUFDM0IsNEJBQTRCLEVBQzVCLDJCQUEyQixFQUMzQixxQkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLDRCQUE0QixFQUM1Qiw0QkFBNEIsRUFDNUIsNEJBQTRCLEVBQzVCLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4Qix1QkFBdUIsRUFDdkIsd0JBQXdCLEVBQ3hCLGtDQUFrQyxFQUNsQyxZQUFZLEVBQ1osUUFBUSxFQUNYLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQWtDLE1BQU0sWUFBWSxDQUFDO0FBQy9ILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBcUMsTUFBTSxhQUFhLENBQUM7QUFDdEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU3RDs7R0FFRztBQUNILE1BQU0sT0FBTyxVQUFXLFNBQVEsTUFBTTtJQUNsQyxRQUFRO0lBQ0QsU0FBUyxDQUFDLEtBQW1CLEVBQUUsVUFBK0I7UUFDakUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDbEMsTUFBTSxFQUFFLFVBQVUsR0FBRyxtQkFBbUIsRUFBRSxHQUFHLFVBQVUsQ0FBQztRQUV4RCxRQUFRLFNBQVMsRUFBRSxDQUFDO1lBQ2hCLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQzNCLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQzNCLEtBQUssZ0JBQWdCLENBQUMsU0FBUyxDQUFDO1lBQ2hDLEtBQUssZ0JBQWdCLENBQUMsU0FBUyxDQUFDO1lBQ2hDLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQzNCLEtBQUssZ0JBQWdCLENBQUMsUUFBUSxDQUFDO1lBQy9CLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1lBQzdCLEtBQUssZ0JBQWdCLENBQUMsU0FBUyxDQUFDO1lBQ2hDLEtBQUssZ0JBQWdCLENBQUMsU0FBUztnQkFDM0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDdEU7Z0JBQ0ksT0FBTyxJQUFJLENBQUM7UUFDcEIsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO0lBQ0QsVUFBVSxDQUFDLE1BQXFCLEVBQUUsR0FBMEM7UUFDL0UsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUN6QixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBRTdCLFFBQVEsU0FBUyxFQUFFLENBQUM7WUFDaEIsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDM0IsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7WUFDN0IsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJO2dCQUN0QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLEtBQUssZ0JBQWdCLENBQUMsTUFBTTtnQkFDeEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQzNCLEtBQUssZ0JBQWdCLENBQUMsU0FBUyxDQUFDO1lBQ2hDLEtBQUssZ0JBQWdCLENBQUMsU0FBUztnQkFDM0IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM1QyxLQUFLLGdCQUFnQixDQUFDLElBQUk7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDNUMsS0FBSyxnQkFBZ0IsQ0FBQyxRQUFRO2dCQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDaEQsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7WUFDN0IsS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7WUFDaEMsS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTO2dCQUMzQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUMsS0FBSyxnQkFBZ0IsQ0FBQyxVQUFVO2dCQUM1QixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbEQ7Z0JBQ0ksT0FBTyxJQUFJLENBQUM7UUFDcEIsQ0FBQztJQUNMLENBQUM7SUFFTyxjQUFjLENBQUMsTUFBcUIsRUFBRSxHQUFTO1FBQ25ELE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUNuRSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQzdCLElBQUksVUFBVSxHQUFrQixTQUFTLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDNUcsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFLENBQUM7WUFDckIsT0FBTztRQUNYLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUNsQyxNQUFNLFdBQVcsR0FBRyxTQUFTLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1FBQ3hELE1BQU0sYUFBYSxHQUFHLFNBQVMsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7UUFFNUQsSUFBSSxXQUFXLElBQUksWUFBWSxFQUFFLENBQUM7WUFDOUIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ2xELE1BQU0sU0FBUyxHQUFHLEtBQUssRUFBRSxTQUFTLElBQUksdUJBQXVCLENBQUM7UUFDOUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxFQUFFLFVBQVUsQ0FBQztRQUNyQyxNQUFNLFlBQVksR0FBRyxXQUFXLEdBQUcsQ0FBQyxHQUFHLHFCQUFxQixDQUFDO1FBQzdELE1BQU0sT0FBTyxHQUFHLFNBQVMsS0FBSyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLHFCQUFxQixDQUFDO1FBQzdILE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyx5QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFDbEQsTUFBTSxjQUFjLEdBQUcsdUJBQXVCLENBQUM7UUFFL0MsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNoQixVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUMvQixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsUUFBUSxFQUFFLFdBQVcsSUFBSSxZQUFZO2dCQUNyQyxVQUFVO2FBQ2IsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDTixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQ04sQ0FBQyxFQUFFLE9BQU87b0JBQ1YsQ0FBQyxFQUFFLE9BQU87b0JBQ1YsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsU0FBUztvQkFDVCxTQUFTLEVBQUUsS0FBSztvQkFDaEIsVUFBVTtvQkFDVixjQUFjO29CQUNkLGFBQWEsRUFBRSxrQ0FBa0M7aUJBQ3BELENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ1YsQ0FBQyxFQUFFLE9BQU87Z0JBQ1YsQ0FBQyxFQUFFLE9BQU87Z0JBQ1YsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixNQUFNLEVBQUUsMkJBQTJCO2dCQUNuQyxVQUFVLEVBQUUsd0JBQXdCO2dCQUNwQyxTQUFTO2dCQUNULGFBQWEsRUFBRSxrQ0FBa0M7Z0JBQ2pELFNBQVMsRUFBRSxTQUFTLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLO2dCQUN2RSxVQUFVO2dCQUNWLGNBQWM7Z0JBQ2QsU0FBUztnQkFDVCxRQUFRLEVBQUUsSUFBSTthQUNqQixDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE1BQXFCLEVBQUUsR0FBUztRQUNyRCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLElBQUssS0FBNEIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1QyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNMLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxLQUFtQixFQUFFLGNBQXdCO1FBQ3ZFLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUUsS0FBNEIsQ0FBQyxRQUFRLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuRyxPQUFPLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRU8scUJBQXFCLENBQUMsTUFBcUIsRUFBRSxHQUFTO1FBQzFELE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDNUMsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6QixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxxQkFBcUIsQ0FBQztRQUN6QyxNQUFNLGlCQUFpQixHQUFHLFdBQVcsR0FBRyxDQUFDLEdBQUcscUJBQXFCLENBQUM7UUFDbEUsTUFBTSxXQUFXLEdBQUksS0FBNEIsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBQ3hFLE1BQU0sU0FBUyxHQUFHLEdBQUcsbUJBQW1CLElBQUksOEJBQThCLE1BQU0sbUJBQW1CLEVBQUUsQ0FBQztRQUN0RyxNQUFNLFlBQVksR0FBRyxXQUFXLEtBQUssd0JBQXdCLENBQUMsR0FBRyxJQUFJLFdBQVcsS0FBSyx3QkFBd0IsQ0FBQyxLQUFLLENBQUM7UUFFcEgsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEMsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxJQUFJLEdBQUksS0FBNEIsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQztZQUN2RyxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDckUsVUFBVSxJQUFJLFNBQVMsR0FBRyxDQUFDLEdBQUcscUJBQXFCLENBQUM7WUFDcEQsSUFBSSxLQUFLLEdBQUcsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsVUFBVSxJQUFJLGdDQUFnQyxDQUFDO1lBQ25ELENBQUM7WUFDRCxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNmLFVBQVUsSUFBSSw4QkFBOEIsR0FBRyxDQUFDLEdBQUcsZ0NBQWdDLENBQUM7WUFDeEYsQ0FBQztZQUNELElBQUksVUFBVSxHQUFHLGlCQUFpQixJQUFJLFVBQVUsS0FBSyxpQkFBaUIsRUFBRSxDQUFDO2dCQUNyRSxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzFCLENBQUM7WUFDRCxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFNBQVMsR0FBRyx1QkFBdUIsR0FBRyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7UUFDdEUsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsOEJBQThCLEdBQUcsQ0FBQyxHQUFHLGdDQUFnQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFOUgsSUFBSSxjQUFjLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ3JGLE1BQU0sYUFBYSxHQUFHLGlCQUFpQixHQUFHLGFBQWEsR0FBRyxRQUFRLENBQUM7WUFDbkUsYUFBYSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQ2xFLDZCQUE2QjtZQUM3QixNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRTNELElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNiLGVBQWU7Z0JBQ2YsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLHFCQUFxQixDQUFDO2dCQUMxRixNQUFNLEdBQUcsR0FBRyxpQkFBaUIsR0FBRyxnQ0FBZ0MsR0FBRyxXQUFXLENBQUM7Z0JBQy9FLGdDQUFnQztnQkFDaEMsTUFBTSxrQkFBa0IsR0FBRyxhQUFhLEdBQUcsR0FBRyxDQUFDO2dCQUMvQyxJQUFJLGtCQUFrQixFQUFFLENBQUM7b0JBQ3JCLE1BQU0sVUFBVSxHQUFHLGFBQWEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BHLGFBQWEsR0FBRyxHQUFHLEdBQUcsVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRixDQUFDO3FCQUFNLENBQUM7b0JBQ0osb0JBQW9CO29CQUNwQixhQUFhLEdBQUcsR0FBRyxHQUFHLGFBQWEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztnQkFDdkYsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckUsTUFBTSxXQUFXLEdBQ2IsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ILE9BQU87UUFDUCxJQUFJLFdBQVcsR0FBRyxpQkFBaUIsR0FBRyxXQUFXLEdBQUcsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0csS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN6RCxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsTUFBTSxRQUFRLEdBQUc7Z0JBQ2IsQ0FBQyxFQUFFLFFBQVE7Z0JBQ1gsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLHlCQUF5QixHQUFHLDJCQUEyQixDQUFDLEdBQUcsQ0FBQztnQkFDcEUsTUFBTSxFQUFFLDJCQUEyQjtnQkFDbkMsTUFBTSxFQUFFLHFCQUFxQjtnQkFDN0IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPO2dCQUNwQixLQUFLLEVBQUUsQ0FBQzthQUNYLENBQUM7WUFFRixNQUFNLFVBQVUsR0FBRyxDQUFDLFdBQXFDLEVBQUUsS0FBYSxFQUFFLEVBQUU7Z0JBQ3hFLE1BQU0sU0FBUyxHQUFHLFlBQVk7b0JBQzFCLENBQUMsQ0FBQyw4QkFBOEIsR0FBRyxDQUFDLEdBQUcsZ0NBQWdDLEdBQUcscUJBQXFCLEdBQUcsQ0FBQztvQkFDbkcsQ0FBQyxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxXQUFXLEdBQUcsUUFBUSxFQUFFLENBQUM7b0JBQ3pCLE9BQU87Z0JBQ1gsQ0FBQztnQkFDRCxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFELE1BQU0sYUFBYSxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUM7Z0JBQzVDLElBQUksS0FBSyxLQUFLLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLFdBQVcsSUFBSSxnQ0FBZ0MsQ0FBQztnQkFDcEQsQ0FBQztnQkFDRCxNQUFNLE9BQU8sR0FBRyxXQUFXLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztnQkFDMUUsUUFBUSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7Z0JBQ3pCLElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDcEIsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7d0JBQ25CLElBQUksQ0FBQyxJQUFJLENBQUM7NEJBQ04sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcscUJBQXFCOzRCQUNyQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMseUJBQXlCLEdBQUcsOEJBQThCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQzs0QkFDM0UsS0FBSyxFQUFFLDhCQUE4QixHQUFHLENBQUM7NEJBQ3pDLE1BQU0sRUFBRSw4QkFBOEIsR0FBRyxDQUFDOzRCQUMxQyxNQUFNLEVBQUUscUJBQXFCOzRCQUM3QixJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsSUFBSSxJQUFJLEVBQUUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxPQUFPO3lCQUN4RCxDQUFDLENBQUM7b0JBQ1AsQ0FBQzt5QkFBTSxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQzt3QkFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQzs0QkFDTCxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxxQkFBcUI7NEJBQ3JDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyw4QkFBOEIsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsOEJBQThCOzRCQUM1RyxNQUFNLEVBQUUsOEJBQThCOzRCQUN0QyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsSUFBSSxJQUFJLEVBQUUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxPQUFPO3lCQUN4RCxDQUFDLENBQUM7b0JBQ1AsQ0FBQztvQkFFRCxJQUFJLENBQUMsSUFBSSxDQUFDO3dCQUNOLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLHFCQUFxQixHQUFHLDhCQUE4QixHQUFHLENBQUMsR0FBRyxnQ0FBZ0M7d0JBQzdHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyw4QkFBOEIsQ0FBQyxHQUFHLENBQUM7d0JBQ3ZFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDOzRCQUNwQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7NEJBQ2YsUUFBUSxFQUFFLE9BQU8sR0FBRyxTQUFTOzRCQUM3QixRQUFRLEVBQUUsOEJBQThCO3lCQUMzQyxDQUFDLENBQUMsSUFBSTt3QkFDUCxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU87d0JBQ3pCLFFBQVEsRUFBRSw4QkFBOEI7cUJBQzNDLENBQUMsQ0FBQztnQkFDUCxDQUFDO3FCQUFNLElBQUksV0FBVyxLQUFLLHdCQUF3QixDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUN0RCxJQUFJLENBQUMsR0FBRyxDQUFDO3dCQUNMLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQzt3QkFDYixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7d0JBQ2IsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO3dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQzs0QkFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJOzRCQUNmLFFBQVEsRUFBRSxPQUFPLEdBQUcsU0FBUzs0QkFDN0IsUUFBUSxFQUFFLHNCQUFzQjt5QkFDbkMsQ0FBQyxDQUFDLElBQUk7d0JBQ1AsTUFBTSxFQUFFLDJCQUEyQjt3QkFDbkMsUUFBUSxFQUFFLHNCQUFzQjt3QkFDaEMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO3dCQUN2QixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7d0JBQ25CLE9BQU8sRUFBRSxxQkFBcUI7d0JBQzlCLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDLE9BQU87cUJBQzlELENBQUMsQ0FBQztnQkFDUCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQzt3QkFDTixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsR0FBRyxxQkFBcUI7d0JBQ3JDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyxzQkFBc0IsQ0FBQyxHQUFHLENBQUM7d0JBQy9ELElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDOzRCQUNwQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7NEJBQ2YsUUFBUSxFQUFFLE9BQU8sR0FBRyxTQUFTOzRCQUM3QixRQUFRLEVBQUUsc0JBQXNCO3lCQUNuQyxDQUFDLENBQUMsSUFBSTt3QkFDUCxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU87d0JBQ3pCLFFBQVEsRUFBRSxzQkFBc0I7cUJBQ25DLENBQUMsQ0FBQztnQkFDUCxDQUFDO2dCQUNELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3BDLFdBQVcsSUFBSSxZQUFZLENBQUM7Z0JBQzVCLFFBQVEsSUFBSSxZQUFZLEdBQUcsZ0NBQWdDLENBQUM7WUFDaEUsQ0FBQyxDQUFDO1lBRUYsUUFBUSxXQUFXLEVBQUUsQ0FBQztnQkFDbEIsS0FBSyx3QkFBd0IsQ0FBQyxHQUFHO29CQUM3QixVQUFVLENBQUMsd0JBQXdCLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNoRCxNQUFNO2dCQUNWLEtBQUssd0JBQXdCLENBQUMsS0FBSztvQkFDL0IsVUFBVSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDbkQsTUFBTTtnQkFDVixLQUFLLHdCQUF3QixDQUFDLEdBQUc7b0JBQzdCLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzdDLE1BQU07Z0JBQ1Y7b0JBQ0ksVUFBVSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDOUMsTUFBTTtZQUNkLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEIsSUFBSSxXQUFXLEtBQUssd0JBQXdCLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxHQUFHLENBQUM7b0JBQ0wsQ0FBQyxFQUFFLFFBQVE7b0JBQ1gsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLHlCQUF5QixHQUFHLDJCQUEyQixDQUFDLEdBQUcsQ0FBQztvQkFDcEUsS0FBSyxFQUFFLFdBQVc7b0JBQ2xCLE1BQU0sRUFBRSwyQkFBMkI7b0JBQ25DLElBQUksRUFBRSxVQUFVO29CQUNoQixVQUFVLEVBQUUsTUFBTSxDQUFDLE9BQU87b0JBQzFCLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTztvQkFDckIsTUFBTSxFQUFFLDJCQUEyQjtvQkFDbkMsT0FBTyxFQUFFLHFCQUFxQjtvQkFDOUIsUUFBUSxFQUFFLHNCQUFzQjtpQkFDbkMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQ04sQ0FBQyxFQUFFLFFBQVE7b0JBQ1gsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLHlCQUF5QixHQUFHLDJCQUEyQixDQUFDLEdBQUcsQ0FBQztvQkFDcEUsS0FBSyxFQUFFLFdBQVc7b0JBQ2xCLE1BQU0sRUFBRSwyQkFBMkI7b0JBQ25DLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTztvQkFDcEIsTUFBTSxFQUFFLHFCQUFxQjtpQkFDaEMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQ04sQ0FBQyxFQUFFLFFBQVEsR0FBRyxxQkFBcUI7b0JBQ25DLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyxzQkFBc0IsQ0FBQyxHQUFHLENBQUM7b0JBQy9ELElBQUksRUFBRSxVQUFVO29CQUNoQixTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU87b0JBQ3pCLFFBQVEsRUFBRSxzQkFBc0I7aUJBQ25DLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE1BQXFCLEVBQUUsR0FBUztRQUMzRCxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUN0RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMseUNBQXlDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQztRQUM3QixNQUFNLElBQUksR0FBSSxLQUE0QixDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hILE1BQU0sUUFBUSxHQUFHLElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2xDLE1BQU0sZUFBZSxHQUFHLENBQUMsWUFBb0IsRUFBRSxXQUFtQix5QkFBeUIsRUFBRSxFQUFFO1lBQzNGLFlBQVksSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLHFDQUFxQyxHQUFHLDRDQUE0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkgsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUNyQixJQUFJLEVBQUUsUUFBUTtnQkFDZCxRQUFRLEVBQUUsV0FBVyxJQUFJLFlBQVk7Z0JBQ3JDLFFBQVEsRUFBRSxRQUFRO2FBQ3JCLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQztRQUNGLElBQUksR0FBRyxFQUFFLENBQUM7WUFDTixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWCxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNwQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkMsTUFBTSxXQUFXLEdBQUksS0FBNEIsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQ3hFLElBQUksVUFBVSxHQUFHLElBQUksRUFBRSxRQUFRLElBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ2pFLE1BQU0sZUFBZSxHQUFHLFdBQVcsR0FBRyxDQUFDLEdBQUcscUJBQXFCLEdBQUcsb0JBQW9CLEdBQUcsaUJBQWlCLENBQUM7WUFDM0csTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLFFBQVEsV0FBVyxFQUFFLENBQUM7Z0JBQ2xCLEtBQUssd0JBQXdCLENBQUMsR0FBRztvQkFDN0IsMkRBQTJEO29CQUMzRCxJQUFJLENBQUMsR0FBRyxDQUFDO3dCQUNMLENBQUMsRUFBRSxDQUFDLEdBQUcscUJBQXFCLEdBQUcsbUJBQW1CO3dCQUNsRCxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMseUJBQXlCLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEdBQUcsbUJBQW1CLEdBQUcsZUFBZTt3QkFDckcsTUFBTSxFQUFFLG1CQUFtQjt3QkFDM0IsSUFBSSxFQUFFLFVBQVU7cUJBQ25CLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsSUFBSSxDQUFDO3dCQUNOLENBQUMsRUFBRSxDQUFDLEdBQUcsb0JBQW9CLEdBQUcsaUJBQWlCLEdBQUcscUJBQXFCO3dCQUN2RSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMseUJBQXlCLEdBQUcsOEJBQThCLENBQUMsR0FBRyxDQUFDO3dCQUN2RSxJQUFJLEVBQUUsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUk7d0JBQzNDLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTztxQkFDNUIsQ0FBQyxDQUFDO29CQUNILE1BQU07Z0JBQ1YsS0FBSyx3QkFBd0IsQ0FBQyxLQUFLO29CQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDO3dCQUNOLENBQUMsRUFBRSxDQUFDLEdBQUcscUJBQXFCO3dCQUM1QixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMseUJBQXlCLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEdBQUcsZUFBZTt3QkFDL0UsS0FBSyxFQUFFLG9CQUFvQjt3QkFDM0IsTUFBTSxFQUFFLG9CQUFvQjt3QkFDNUIsTUFBTSxFQUFFLHFCQUFxQjt3QkFDN0IsSUFBSSxFQUFFLFVBQVU7cUJBQ25CLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsSUFBSSxDQUFDO3dCQUNOLENBQUMsRUFBRSxDQUFDLEdBQUcsb0JBQW9CLEdBQUcsaUJBQWlCLEdBQUcscUJBQXFCO3dCQUN2RSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMseUJBQXlCLEdBQUcsOEJBQThCLENBQUMsR0FBRyxDQUFDO3dCQUN2RSxJQUFJLEVBQUUsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUk7d0JBQzNDLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTztxQkFDNUIsQ0FBQyxDQUFDO29CQUNILE1BQU07Z0JBRVYsS0FBSyx3QkFBd0IsQ0FBQyxHQUFHO29CQUM3QixNQUFNLFlBQVksR0FBRyxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMscUJBQXFCLEdBQUcsb0JBQW9CLENBQUMsQ0FBQztvQkFDdEYsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUMsWUFBWSxFQUFFLHNCQUFzQixDQUFDLENBQUM7b0JBQ2xGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxvQkFBb0IsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO29CQUNqRyxJQUFJLENBQUMsR0FBRyxDQUFDO3dCQUNMLENBQUMsRUFBRSxDQUFDLEdBQUcscUJBQXFCO3dCQUM1QixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMseUJBQXlCLEdBQUcsMkJBQTJCLENBQUMsR0FBRyxDQUFDO3dCQUNwRSxLQUFLO3dCQUNMLE1BQU0sRUFBRSwyQkFBMkI7d0JBQ25DLElBQUk7d0JBQ0osVUFBVTt3QkFDVixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7d0JBQ25CLE1BQU0sRUFBRSwyQkFBMkI7d0JBQ25DLE9BQU8sRUFBRSw0QkFBNEI7d0JBQ3JDLFFBQVEsRUFBRSxzQkFBc0I7d0JBQ2hDLE1BQU0sRUFBRSxVQUFVO3FCQUNyQixDQUFDLENBQUM7b0JBQ0gsTUFBTTtnQkFDVjtvQkFDSSxNQUFNLGdCQUFnQixHQUFHLFdBQVcsR0FBRyxDQUFDLEdBQUcscUJBQXFCLENBQUM7b0JBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUM7d0JBQ04sQ0FBQyxFQUFFLENBQUMsR0FBRyxxQkFBcUI7d0JBQzVCLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyw4QkFBOEIsQ0FBQyxHQUFHLENBQUM7d0JBQ3ZFLElBQUksRUFBRSxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJO3dCQUM1QyxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU87cUJBQzVCLENBQUMsQ0FBQztvQkFDSCxNQUFNO1lBQ2QsQ0FBQztZQUVELEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixDQUFDO0lBQ0wsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFxQixFQUFFLEdBQVM7UUFDbkQsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDNUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25DLElBQUksUUFBUSxHQUFHLGNBQWMsQ0FBQztRQUU5QixJQUFJLFFBQVEsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDNUMsT0FBTztRQUNYLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxXQUFXLEdBQUcsQ0FBQyxHQUFHLHFCQUFxQixDQUFDO1FBQzdELE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDOUYsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNOLE1BQU0sS0FBSyxHQUFHLEtBQUssRUFBRSxLQUFLLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNOLENBQUMsRUFBRSxDQUFDLEdBQUcscUJBQXFCO2dCQUM1QixDQUFDLEVBQUUsQ0FBQyxHQUFHLHlCQUF5QixHQUFHLENBQUM7Z0JBQ3BDLElBQUk7Z0JBQ0osU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVTtnQkFDN0IsYUFBYSxFQUFFLGtDQUFrQzthQUNwRCxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFxQixFQUFFLEdBQTBDO1FBQ3BGLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDcEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsTUFBTSxTQUFTLEdBQUcsVUFBNEIsQ0FBQztRQUMvQyxNQUFNLElBQUksR0FBRyx3QkFBd0IsQ0FBQztRQUN0QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzlDLE1BQU0sS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDeEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxJQUFJLFNBQVMsQ0FBQztZQUNuQyxNQUFNLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLHFCQUFxQixHQUFHLEtBQUssR0FBRywyQkFBMkIsQ0FBQztZQUN6RixNQUFNLEtBQUssR0FBRyxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVyRCxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDO29CQUNOLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSztvQkFDWixDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUs7b0JBQ1osSUFBSSxFQUFFLEVBQUU7b0JBQ1IsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtvQkFDeEQsTUFBTSxFQUFFLElBQUk7b0JBQ1osTUFBTSxFQUFFLElBQUk7aUJBQ2YsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE1BQXFCLEVBQUUsR0FBUztRQUN2RCxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUM1RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkMsSUFBSSxTQUFTLEdBQUcsY0FBYyxDQUFDO1FBQy9CLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDbkIsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUN6QixPQUFPO1FBQ1gsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLFdBQVcsR0FBRyxDQUFDLEdBQUcscUJBQXFCLEdBQUcsNEJBQTRCLENBQUM7UUFDckYsTUFBTSxNQUFNLEdBQUcsNEJBQTRCLENBQUM7UUFDNUMsTUFBTSxVQUFVLEdBQUcseUJBQXlCLENBQUM7UUFDN0MsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQUM7UUFDdEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvRSxNQUFNLFdBQVcsR0FBRyxDQUFDLHlCQUF5QixHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVqRSxPQUFPO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNOLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTztZQUNkLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTztZQUNkLEtBQUs7WUFDTCxNQUFNO1lBQ04sTUFBTSxFQUFFLDRCQUE0QjtZQUNwQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE9BQU87U0FDdkIsQ0FBQyxDQUFDO1FBRUgsVUFBVTtRQUNWLE1BQU0sYUFBYSxHQUFHLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ04sQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPO1lBQ2QsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPO1lBQ2QsS0FBSyxFQUFFLGFBQWE7WUFDcEIsTUFBTTtZQUNOLE1BQU0sRUFBRSw0QkFBNEI7WUFDcEMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPO1NBQ3ZCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUM7WUFDTixDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsaUJBQWlCO1lBQzFDLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVztZQUNsQixJQUFJLEVBQUUsR0FBRyxTQUFTLEdBQUc7WUFDckIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1NBQzVCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxNQUFxQixFQUFFLEdBQTBDO1FBQ3RGLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUN6RyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUM7UUFFN0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQyxPQUFPO1FBQ1gsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUEwQixDQUFDO1FBQ2xELE1BQU0sVUFBVSxHQUFHLDJCQUEyQixDQUFDO1FBQy9DLE1BQU0sVUFBVSxHQUFHLGdDQUFnQyxDQUFDO1FBQ3BELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQztRQUM3QixNQUFNLFVBQVUsR0FBRyxRQUFRLEVBQUUsV0FBVyxDQUFDO1FBRXpDLElBQUksUUFBUSxHQUFHLHFCQUFxQixDQUFDO1FBQ3JDLElBQUksUUFBUSxHQUFHLENBQUMseUJBQXlCLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVELE1BQU0sY0FBYyxHQUFHLFVBQVUsR0FBRyx3Q0FBd0MsQ0FBQztRQUM3RSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLCtCQUErQixDQUFDO1FBQ2pILE1BQU0sWUFBWSxHQUFHLFdBQVc7WUFDNUIsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcscUJBQXFCLEdBQUcsY0FBYyxHQUFHLHFDQUFxQyxHQUFHLEVBQUU7WUFDdkcsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcscUJBQXFCLEdBQUcsY0FBYyxDQUFDO1FBRS9ELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDbkMsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBRXZCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUM3QyxNQUFNLFFBQVEsR0FBRyxVQUFVLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxRQUFRO2dCQUFFLFNBQVM7WUFFeEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDO1lBQy9DLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWxHLFFBQVEsR0FBRyxxQkFBcUIsR0FBRyxLQUFLLEdBQUcsU0FBUyxDQUFDO1lBRXJELElBQUksZ0JBQWdCLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFDM0QsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUM3QixNQUFNLGlCQUFpQixHQUFHLFlBQVksR0FBRyxDQUFDLGtDQUFrQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNsRixxREFBcUQ7Z0JBQ3JELElBQUksaUJBQWlCLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQzFCLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQztvQkFDakMsUUFBUSxJQUFJLDJCQUEyQixHQUFHLG1DQUFtQyxDQUFDO2dCQUNsRixDQUFDO3FCQUFNLENBQUM7b0JBQ0osZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ3pDLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxNQUFNLEdBQUcsUUFBUSxHQUFHLFNBQVMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxHQUFHLHFCQUFxQixDQUFDO1lBQzVFLElBQUksV0FBVyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN0QiwwQkFBMEI7Z0JBQzFCLElBQUksUUFBUSxJQUFJLFdBQVcsR0FBRyxDQUFDLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztvQkFDdEQsTUFBTTtnQkFDVixDQUFDO2dCQUNELDJCQUEyQjtnQkFDM0IsSUFBSSxRQUFRLEdBQUcsV0FBVyxHQUFHLENBQUMsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO29CQUNyRCxRQUFRLEdBQUcscUJBQXFCLENBQUM7Z0JBQ3JDLENBQUM7Z0JBQ0QsSUFBSSxRQUFRLEdBQUcsU0FBUyxHQUFHLFdBQVcsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO29CQUM3RCxRQUFRLEdBQUcscUJBQXFCLENBQUM7b0JBQ2pDLFFBQVEsSUFBSSxVQUFVLENBQUM7Z0JBQzNCLENBQUM7Z0JBQ0QsSUFBSSxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ3hCLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDO29CQUNSLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUTtvQkFDZixDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVE7b0JBQ2YsR0FBRyxFQUFFLE1BQU87b0JBQ1osRUFBRSxFQUFFLEdBQUk7b0JBQ1IsS0FBSyxFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQztvQkFDdkMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLFlBQWEsQ0FBQztvQkFDeEMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLE1BQU07b0JBQzlCLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxNQUFNO2lCQUNqQyxDQUFDLENBQUM7Z0JBRUgsY0FBYztnQkFDZCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ2QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsd0NBQXdDLENBQUM7b0JBQ2pHLElBQUksQ0FBQyxJQUFJLENBQUM7d0JBQ04sQ0FBQyxFQUFFLEtBQUs7d0JBQ1IsQ0FBQyxFQUFFLENBQUMsR0FBRyx5QkFBeUIsR0FBRyxDQUFDO3dCQUNwQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQzs0QkFDcEIsSUFBSSxFQUFFLFlBQVksSUFBSSxFQUFFOzRCQUN4QixRQUFRLEVBQUUsWUFBWTs0QkFDdEIsUUFBUSxFQUFFLHlCQUF5Qjt5QkFDdEMsQ0FBQyxDQUFDLElBQUk7d0JBQ1AsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTzt3QkFDOUIsUUFBUSxFQUFFLHlCQUF5Qjt3QkFDbkMsYUFBYSxFQUFFLGtDQUFrQztxQkFDcEQsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBRUQsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDVCxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ1gsR0FBRyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUM7d0JBQ04sQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRO3dCQUNmLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUTt3QkFDZixLQUFLLEVBQUUsaUJBQWlCLENBQUMsTUFBTTt3QkFDL0IsTUFBTSxFQUFFLGlCQUFpQixDQUFDLE1BQU07d0JBQ2hDLE1BQU0sRUFBRSxFQUFFO3dCQUNWLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7cUJBQzFCLENBQUMsQ0FBQztvQkFDSCxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQzt3QkFDTixDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsR0FBRyxZQUFZLEdBQUcsQ0FBQzt3QkFDbEMsQ0FBQyxFQUFFLENBQUMsR0FBRyx5QkFBeUIsR0FBRyxDQUFDO3dCQUNwQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO3dCQUM1QixRQUFRLEVBQUUsWUFBWTt3QkFDdEIsSUFBSSxFQUFFLElBQUksU0FBUyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUU7d0JBQ2pDLGFBQWEsRUFBRSxrQ0FBa0M7cUJBQ3BELENBQUMsQ0FBQztnQkFDUCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsTUFBcUIsRUFBRSxHQUEwQztRQUMxRixNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDekcsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEMsT0FBTztRQUNYLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyx1QkFBdUIsQ0FBQztRQUM3QyxNQUFNLFVBQVUsR0FBRyw4QkFBOEIsQ0FBQztRQUNsRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUM7UUFFN0IsSUFBSSxRQUFRLEdBQUcscUJBQXFCLENBQUM7UUFDckMsSUFBSSxRQUFRLEdBQUcsQ0FBQyx5QkFBeUIsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUQsTUFBTSxjQUFjLEdBQUcsWUFBWSxHQUFHLGdDQUFnQyxDQUFDO1FBQ3ZFLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLCtCQUErQixDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsK0JBQStCLENBQUM7UUFDakgsTUFBTSxZQUFZLEdBQUcsV0FBVztZQUM1QixDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxxQkFBcUIsR0FBRyxjQUFjLEdBQUcscUNBQXFDLEdBQUcsRUFBRTtZQUN2RyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxxQkFBcUIsR0FBRyxjQUFjLENBQUM7UUFFL0QsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNuQyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFFdkIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzdDLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLGNBQWM7Z0JBQUUsU0FBUztZQUM5QixNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLGNBQWMsQ0FBQztZQUMzQyxNQUFNLFNBQVMsR0FBRyx1QkFBdUIsR0FBRyxnQ0FBZ0MsQ0FBQztZQUM3RSxRQUFRLEdBQUcscUJBQXFCLEdBQUcsS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUNyRCxJQUFJLGdCQUFnQixHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQzNELElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLEdBQUcsQ0FBQyxrQ0FBa0MsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDbEYscURBQXFEO2dCQUNyRCxJQUFJLGlCQUFpQixJQUFJLEVBQUUsRUFBRSxDQUFDO29CQUMxQixRQUFRLEdBQUcscUJBQXFCLENBQUM7b0JBQ2pDLFFBQVEsSUFBSSwyQkFBMkIsR0FBRyxtQ0FBbUMsQ0FBQztnQkFDbEYsQ0FBQztxQkFBTSxDQUFDO29CQUNKLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDO2dCQUN6QyxDQUFDO1lBQ0wsQ0FBQztZQUNELElBQUksV0FBVyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN0QiwwQkFBMEI7Z0JBQzFCLElBQUksUUFBUSxJQUFJLFdBQVcsR0FBRyxDQUFDLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztvQkFDdEQsTUFBTTtnQkFDVixDQUFDO2dCQUNELDJCQUEyQjtnQkFDM0IsSUFBSSxRQUFRLEdBQUcsV0FBVyxHQUFHLENBQUMsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO29CQUNyRCxRQUFRLEdBQUcscUJBQXFCLENBQUM7Z0JBQ3JDLENBQUM7Z0JBQ0QsSUFBSSxRQUFRLEdBQUcsU0FBUyxHQUFHLFdBQVcsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO29CQUM3RCxRQUFRLEdBQUcscUJBQXFCLENBQUM7b0JBQ2pDLFFBQVEsSUFBSSxVQUFVLENBQUM7Z0JBQzNCLENBQUM7Z0JBQ0QsSUFBSSxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ3hCLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLENBQUM7WUFDTCxDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQUcseUJBQXlCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzNELE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDeEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0Msa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM5RSxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNOLElBQUksQ0FBQyxLQUFLLENBQUM7b0JBQ1AsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHO29CQUNiLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUTtvQkFDZixDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVE7b0JBQ2YsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHO29CQUNaLEtBQUssRUFBRSx1QkFBdUI7b0JBQzlCLE1BQU0sRUFBRSx1QkFBdUI7aUJBQ2xDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXywgeyBpc05pbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICAgIEFJX1RBQkxFX0NFTExfQUREX0lURU1fQlVUVE9OX1NJWkUsXG4gICAgQUlfVEFCTEVfQ0VMTF9ERUxFVEVfSVRFTV9CVVRUT05fU0laRSxcbiAgICBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFX09GRlNFVCxcbiAgICBBSV9UQUJMRV9DRUxMX0VNT0pJX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfQ0VMTF9FTU9KSV9TSVpFLFxuICAgIEFJX1RBQkxFX0NFTExfTUFYX1JPV19DT1VOVCxcbiAgICBBSV9UQUJMRV9DRUxMX01FTUJFUl9JVEVNX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9DRUxMX01FTUJFUl9JVEVNX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTLFxuICAgIEFJX1RBQkxFX0NFTExfTVVMVElfSVRFTV9NQVJHSU5fVE9QLFxuICAgIEFJX1RBQkxFX0NFTExfTVVMVElfSVRFTV9NSU5fV0lEVEgsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX1RPUCxcbiAgICBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRSxcbiAgICBBSV9UQUJMRV9ET1RfUkFESVVTLFxuICAgIEFJX1RBQkxFX0ZJRUxEX0lURU1fTUFSR0lOX1JJR0hULFxuICAgIEFJX1RBQkxFX0ZJTEVfSUNPTl9JVEVNX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9GSUxFX0lDT05fU0laRSxcbiAgICBBSV9UQUJMRV9NRU1CRVJfQVZBVEFSX1NJWkUsXG4gICAgQUlfVEFCTEVfTUVNQkVSX0lURU1fQVZBVEFSX01BUkdJTl9SSUdIVCxcbiAgICBBSV9UQUJMRV9NSU5fVEVYVF9XSURUSCxcbiAgICBBSV9UQUJMRV9PRkZTRVQsXG4gICAgQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFLFxuICAgIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9PUFRJT05fSVRFTV9QQURESU5HLFxuICAgIEFJX1RBQkxFX09QVElPTl9JVEVNX1JBRElVUyxcbiAgICBBSV9UQUJMRV9QSUVDRV9SQURJVVMsXG4gICAgQUlfVEFCTEVfUElFQ0VfV0lEVEgsXG4gICAgQUlfVEFCTEVfUFJPR1JFU1NfQkFSX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9QUk9HUkVTU19CQVJfUkFESVVTLFxuICAgIEFJX1RBQkxFX1BST0dSRVNTX1RFWFRfV2lkdGgsXG4gICAgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFLFxuICAgIEFJX1RBQkxFX1RBR19QQURESU5HLFxuICAgIEFJX1RBQkxFX1RFWFRfR0FQLFxuICAgIENvbG9ycyxcbiAgICBERUZBVUxUX0ZPTlRfRkFNSUxZLFxuICAgIERFRkFVTFRfRk9OVF9TSVpFLFxuICAgIERFRkFVTFRfRk9OVF9XRUlHSFQsXG4gICAgREVGQVVMVF9URVhUX0FMSUdOX0xFRlQsXG4gICAgREVGQVVMVF9URVhUX0FMSUdOX1JJR0hULFxuICAgIERFRkFVTFRfVEVYVF9ERUNPUkFUSU9OLFxuICAgIERFRkFVTFRfVEVYVF9MSU5FX0hFSUdIVCxcbiAgICBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFLFxuICAgIEZPTlRfU0laRV9TTSxcbiAgICBTdGFyRmlsbFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQUlUYWJsZSwgQUlUYWJsZUZpZWxkLCBBSVRhYmxlRmllbGRUeXBlLCBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUsIE1lbWJlclNldHRpbmdzLCBSYXRlRmllbGRWYWx1ZSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgQUlUYWJsZUF2YXRhclNpemUsIEFJVGFibGVBdmF0YXJUeXBlLCBBSVRhYmxlUmVuZGVyLCBBSVRhYmxlU2VsZWN0RmllbGQgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRBdmF0YXJCZ0NvbG9yLCBnZXRBdmF0YXJTaG9ydE5hbWUsIGdldFRleHRXaWR0aCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IERyYXdlciB9IGZyb20gJy4vZHJhd2VyJztcbmltcG9ydCB7IGhlbHBlcnMgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgZ2V0RmlsZVRodW1ibmFpbFN2Z1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUnO1xuXG4vKipcbiAqIOWkhOeQhuWSjOa4suafk+ihqOagvOWNleWFg+agvOeahOWGheWuuVxuICovXG5leHBvcnQgY2xhc3MgQ2VsbERyYXdlciBleHRlbmRzIERyYXdlciB7XG4gICAgLy8g5qC35byP5Yid5aeL5YyWXG4gICAgcHVibGljIGluaXRTdHlsZShmaWVsZDogQUlUYWJsZUZpZWxkLCBzdHlsZVByb3BzOiB7IGZvbnRXZWlnaHQ6IGFueSB9KTogdm9pZCB8IG51bGwge1xuICAgICAgICBjb25zdCB7IHR5cGU6IGZpZWxkVHlwZSB9ID0gZmllbGQ7XG4gICAgICAgIGNvbnN0IHsgZm9udFdlaWdodCA9IERFRkFVTFRfRk9OVF9XRUlHSFQgfSA9IHN0eWxlUHJvcHM7XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS50ZXh0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmRhdGU6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuY3JlYXRlZEF0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnVwZGF0ZWRBdDpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5yYXRlOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnByb2dyZXNzOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLm1lbWJlcjpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQnk6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEJ5OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldFN0eWxlKHsgZm9udFNpemU6IERFRkFVTFRfRk9OVF9TSVpFLCBmb250V2VpZ2h0IH0pO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIOWNleWFg+agvOa4suafk1xuICAgIHB1YmxpYyByZW5kZXJDZWxsKHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHsgZmllbGQgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgZmllbGRUeXBlID0gZmllbGQudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnRleHQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUubnVtYmVyOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmxpbms6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFRleHQocmVuZGVyLCBjdHgpO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnNlbGVjdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsU2VsZWN0KHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5kYXRlOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmNyZWF0ZWRBdDpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS51cGRhdGVkQXQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbERhdGUocmVuZGVyLCBjdHgpO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnJhdGU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFJhdGUocmVuZGVyLCBjdHgpO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnByb2dyZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxQcm9ncmVzcyhyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUubWVtYmVyOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmNyZWF0ZWRCeTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS51cGRhdGVkQnk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbE1lbWJlcihyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuYXR0YWNobWVudDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsQXR0YWNobWVudChyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsVGV4dChyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IGFueSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHRyYW5zZm9ybVZhbHVlLCBmaWVsZCwgY29sdW1uV2lkdGgsIHN0eWxlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XG4gICAgICAgIGxldCByZW5kZXJUZXh0OiBzdHJpbmcgfCBudWxsID0gZmllbGRUeXBlID09PSBBSVRhYmxlRmllbGRUeXBlLmxpbmsgPyB0cmFuc2Zvcm1WYWx1ZT8udGV4dCA6IHRyYW5zZm9ybVZhbHVlO1xuICAgICAgICBpZiAocmVuZGVyVGV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNTaW5nbGVMaW5lID0gIWNvbHVtbldpZHRoO1xuICAgICAgICBjb25zdCBpc1RleHRGaWVsZCA9IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS50ZXh0O1xuICAgICAgICBjb25zdCBpc051bWJlckZpZWxkID0gZmllbGRUeXBlID09PSBBSVRhYmxlRmllbGRUeXBlLm51bWJlcjtcblxuICAgICAgICBpZiAoaXNUZXh0RmllbGQgJiYgaXNTaW5nbGVMaW5lKSB7XG4gICAgICAgICAgICByZW5kZXJUZXh0ID0gcmVuZGVyVGV4dC5yZXBsYWNlKC9cXHJ8XFxuL2csICcgJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2xvciA9IHN0eWxlPy5jb2xvciB8fCB0aGlzLmNvbG9ycy5ncmF5ODAwO1xuICAgICAgICBjb25zdCB0ZXh0QWxpZ24gPSBzdHlsZT8udGV4dEFsaWduIHx8IERFRkFVTFRfVEVYVF9BTElHTl9MRUZUO1xuICAgICAgICBjb25zdCBmb250V2VpZ2h0ID0gc3R5bGU/LmZvbnRXZWlnaHQ7XG4gICAgICAgIGNvbnN0IHRleHRNYXhXaWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3QgcmVuZGVyWCA9IHRleHRBbGlnbiA9PT0gREVGQVVMVF9URVhUX0FMSUdOX1JJR0hUID8geCArIGNvbHVtbldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9QQURESU5HIDogeCArIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3QgcmVuZGVyWSA9IHkgKyBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC8gMjtcbiAgICAgICAgY29uc3QgdGV4dERlY29yYXRpb24gPSBERUZBVUxUX1RFWFRfREVDT1JBVElPTjtcblxuICAgICAgICBpZiAoaXNOdW1iZXJGaWVsZCkge1xuICAgICAgICAgICAgcmVuZGVyVGV4dCA9IFN0cmluZyhyZW5kZXJUZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgIHRleHQ6IHJlbmRlclRleHQsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IGNvbHVtbldpZHRoICYmIHRleHRNYXhXaWR0aCxcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICBsZXQgcHVyZVRleHQgPSB0ZXh0O1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgIHg6IHJlbmRlclgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHJlbmRlclksXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHB1cmVUZXh0LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24sXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3IsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndyYXBUZXh0KHtcbiAgICAgICAgICAgICAgICB4OiByZW5kZXJYLFxuICAgICAgICAgICAgICAgIHk6IHJlbmRlclksXG4gICAgICAgICAgICAgICAgdGV4dDogcmVuZGVyVGV4dCxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogdGV4dE1heFdpZHRoLFxuICAgICAgICAgICAgICAgIG1heFJvdzogQUlfVEFCTEVfQ0VMTF9NQVhfUk9XX0NPVU5ULFxuICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IERFRkFVTFRfVEVYVF9MSU5FX0hFSUdIVCxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ24sXG4gICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRSxcbiAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5saW5rID8gQ29sb3JzLnByaW1hcnkgOiBjb2xvcixcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0LFxuICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uLFxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSxcbiAgICAgICAgICAgICAgICBuZWVkRHJhdzogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxTZWxlY3QocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBmaWVsZCB9ID0gcmVuZGVyO1xuICAgICAgICBpZiAoKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3M/LmlzX211bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckNlbGxNdWx0aVNlbGVjdChyZW5kZXIsIGN0eCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclNpbmdsZVNlbGVjdENlbGwocmVuZGVyLCBjdHgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWxpZFNlbGVjdGVkVmFsdWUoZmllbGQ6IEFJVGFibGVGaWVsZCwgdHJhbnNmb3JtVmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkT3B0aW9uc01hcCA9IGhlbHBlcnMua2V5QnkoKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3Mub3B0aW9ucyB8fCBbXSwgJ19pZCcpO1xuICAgICAgICByZXR1cm4gKHRyYW5zZm9ybVZhbHVlIHx8IFtdKS5maWx0ZXIoKG9wdGlvbklkOiBzdHJpbmcpID0+ICEhZmllbGRPcHRpb25zTWFwW29wdGlvbklkXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsTXVsdGlTZWxlY3QocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCBmaWVsZCwgY29sdW1uV2lkdGggfSA9IHJlbmRlcjtcbiAgICAgICAgbGV0IHRyYW5zZm9ybVZhbHVlID0gdGhpcy5nZXRWYWxpZFNlbGVjdGVkVmFsdWUoZmllbGQsIHJlbmRlci50cmFuc2Zvcm1WYWx1ZSk7XG4gICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY3VycmVudFggPSB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCBtYXhDb250YWluZXJXaWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3Qgb3B0aW9uU3R5bGUgPSAoZmllbGQgYXMgQUlUYWJsZVNlbGVjdEZpZWxkKS5zZXR0aW5ncy5vcHRpb25fc3R5bGU7XG4gICAgICAgIGNvbnN0IGZvbnRTdHlsZSA9IGAke0RFRkFVTFRfRk9OVF9XRUlHSFR9ICR7QUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFfXB4ICR7REVGQVVMVF9GT05UX0ZBTUlMWX1gO1xuICAgICAgICBjb25zdCBpc0RvdE9yUGllY2UgPSBvcHRpb25TdHlsZSA9PT0gQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLmRvdCB8fCBvcHRpb25TdHlsZSA9PT0gQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnBpZWNlO1xuXG4gICAgICAgIGxldCB0b3RhbFdpZHRoID0gMDtcbiAgICAgICAgY29uc3QgY2VsbEl0ZW1JbmZvTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBsZXQgZHJhd2FibGVJbmRleCA9IDA7XG4gICAgICAgIHRyYW5zZm9ybVZhbHVlLmZvckVhY2goKG9wdGlvbklkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbnM/LmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLl9pZCA9PT0gb3B0aW9uSWQpO1xuICAgICAgICAgICAgY29uc3QgdGV4dFdpZHRoID0gZ2V0VGV4dFdpZHRoKGN0eCwgaXRlbT8udGV4dCBhcyBzdHJpbmcsIGZvbnRTdHlsZSk7XG4gICAgICAgICAgICB0b3RhbFdpZHRoICs9IHRleHRXaWR0aCArIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgdG90YWxXaWR0aCArPSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0RvdE9yUGllY2UpIHtcbiAgICAgICAgICAgICAgICB0b3RhbFdpZHRoICs9IEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0b3RhbFdpZHRoIDwgbWF4Q29udGFpbmVyV2lkdGggfHwgdG90YWxXaWR0aCA9PT0gbWF4Q29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBkcmF3YWJsZUluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjZWxsSXRlbUluZm9NYXAuc2V0KG9wdGlvbklkLCB7IHRleHRXaWR0aCwgaXRlbSwgb2Zmc2V0OiB0b3RhbFdpZHRoIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBiYXNlV2lkdGggPSBBSV9UQUJMRV9NSU5fVEVYVF9XSURUSCArIEFJX1RBQkxFX0NFTExfUEFERElORyAqIDI7XG4gICAgICAgIGNvbnN0IG1pbldpZHRoID0gaXNEb3RPclBpZWNlID8gYmFzZVdpZHRoICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMiArIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUIDogYmFzZVdpZHRoO1xuXG4gICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZVtkcmF3YWJsZUluZGV4ICsgMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb2Zmc2V0OiBjdXJyZW50T2Zmc2V0IH0gPSBjZWxsSXRlbUluZm9NYXAuZ2V0KHRyYW5zZm9ybVZhbHVlW2RyYXdhYmxlSW5kZXhdKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbkRyYXdlck5leHQgPSBtYXhDb250YWluZXJXaWR0aCAtIGN1cnJlbnRPZmZzZXQgPiBtaW5XaWR0aDtcbiAgICAgICAgICAgIGRyYXdhYmxlSW5kZXggPSBjYW5EcmF3ZXJOZXh0ID8gZHJhd2FibGVJbmRleCArIDEgOiBkcmF3YWJsZUluZGV4O1xuICAgICAgICAgICAgLy8g5LiK6Z2i6L+H56iL5pivICDmsqHmnIkgK+aVsOWtlyAg55qE5oOF5Ya15LiL5pyA5aSn6IO95pS+5Yeg5Liq77ybXG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAoZHJhd2FibGVJbmRleCArIDEpO1xuXG4gICAgICAgICAgICBpZiAobnVtYmVyID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIOivtOaYjuaciSAr5pWw5a2X77yM6YeN5paw6K6h566XXG4gICAgICAgICAgICAgICAgY29uc3QgY2lyY2xlV2lkdGggPSBnZXRUZXh0V2lkdGgoY3R4LCBgK3tudW1iZXJ9YCwgZm9udFN0eWxlKSArIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4ID0gbWF4Q29udGFpbmVyV2lkdGggLSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCAtIGNpcmNsZVdpZHRoO1xuICAgICAgICAgICAgICAgIC8vIOWmguaenOW9k+WJjeW3sue7j+i2heWHuuS6hu+8jOeci+aYr+WQpuiDveWuueS4i+W9k+WJjeeahO+8jOS4jeiDveWwseWHj+WOuyAgMe+8m1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtSGFzT3ZlciA9IGN1cnJlbnRPZmZzZXQgPiBtYXg7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtSGFzT3Zlcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0T2Zmc2V0ID0gZHJhd2FibGVJbmRleCA9PT0gMCA/IDAgOiBjZWxsSXRlbUluZm9NYXAuZ2V0KHRyYW5zZm9ybVZhbHVlW2RyYXdhYmxlSW5kZXggLSAxXSk7XG4gICAgICAgICAgICAgICAgICAgIGRyYXdhYmxlSW5kZXggPSBtYXggLSBsYXN0T2Zmc2V0ID4gbWluV2lkdGggPyBkcmF3YWJsZUluZGV4IDogZHJhd2FibGVJbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g6L+Y5pyJ5Ymp5L2Z56m66Ze0LCDnnIvmmK/lkKbog73lpJrmuLLmn5PkuIDkuKpcbiAgICAgICAgICAgICAgICAgICAgZHJhd2FibGVJbmRleCA9IG1heCAtIGN1cnJlbnRPZmZzZXQgPiBtaW5XaWR0aCA/IGRyYXdhYmxlSW5kZXggKyAxIDogZHJhd2FibGVJbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaXJjbGVUZXh0ID0gYCske3RyYW5zZm9ybVZhbHVlLmxlbmd0aCAtIChkcmF3YWJsZUluZGV4ICsgMSl9YDtcbiAgICAgICAgY29uc3QgY2lyY2xlV2lkdGggPVxuICAgICAgICAgICAgdHJhbnNmb3JtVmFsdWUubGVuZ3RoIC0gKGRyYXdhYmxlSW5kZXggKyAxKSA+IDAgPyBnZXRUZXh0V2lkdGgoY3R4LCBjaXJjbGVUZXh0LCBmb250U3R5bGUpICsgMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyA6IDA7XG4gICAgICAgIC8vIOWJqeS9meepuumXtFxuICAgICAgICBsZXQgcmVtYWluU3BhY2UgPSBtYXhDb250YWluZXJXaWR0aCAtIGNpcmNsZVdpZHRoIC0gKGNpcmNsZVdpZHRoID4gMCA/IEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUIDogMCk7XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRyYW5zZm9ybVZhbHVlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uSWQgPSB0cmFuc2Zvcm1WYWx1ZVtpbmRleF07XG4gICAgICAgICAgICBjb25zdCBiZ0NvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICB4OiBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQpIC8gMixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCxcbiAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICAgICAgICAgICAgICBmaWxsOiBDb2xvcnMuZ3JheTEwMCxcbiAgICAgICAgICAgICAgICB3aWR0aDogMFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgY29tbW9uSXRlbSA9IChvcHRpb25TdHlsZTogQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLCBzaGFwZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZVdpZHRoID0gaXNEb3RPclBpZWNlXG4gICAgICAgICAgICAgICAgICAgID8gQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMiArIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HICogMlxuICAgICAgICAgICAgICAgICAgICA6IEFJX1RBQkxFX0NFTExfUEFERElORyAqIDI7XG4gICAgICAgICAgICAgICAgaWYgKHJlbWFpblNwYWNlIDwgbWluV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHRXaWR0aCwgaXRlbSB9ID0gY2VsbEl0ZW1JbmZvTWFwLmdldChvcHRpb25JZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcGxldGVXaWR0aCA9IGJhc2VXaWR0aCArIHRleHRXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IHRyYW5zZm9ybVZhbHVlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluU3BhY2UgLT0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGJnV2lkdGggPSByZW1haW5TcGFjZSA+IGNvbXBsZXRlV2lkdGggPyBjb21wbGV0ZVdpZHRoIDogcmVtYWluU3BhY2U7XG4gICAgICAgICAgICAgICAgYmdDb25maWcud2lkdGggPSBiZ1dpZHRoO1xuICAgICAgICAgICAgICAgIGlmIChpc0RvdE9yUGllY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN0KGJnQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoYXBlID09PSAncmVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUElFQ0VfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGl0ZW0/LmJnX2NvbG9yID8/IGl0ZW0/LmNvbG9yID8/IENvbG9ycy5wcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaGFwZSA9PT0gJ2FyYycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXJjKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBiZ0NvbmZpZy54ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIpIC8gMiArIEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBpdGVtPy5iZ19jb2xvciA/PyBpdGVtPy5jb2xvciA/PyBDb2xvcnMucHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCArIEFJX1RBQkxFX0NFTExfUEFERElORyArIEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogYmdXaWR0aCAtIGJhc2VXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBDb2xvcnMuZ3JheTcwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25TdHlsZSA9PT0gQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRhZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBiZ0NvbmZpZy54LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogYmdDb25maWcueSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBiZ0NvbmZpZy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IGJnV2lkdGggLSBiYXNlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX09QVElPTl9JVEVNX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBiZ0NvbmZpZy5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogQ29sb3JzLndoaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaXRlbT8uYmdfY29sb3IgPz8gaXRlbT8uY29sb3IgPz8gQ29sb3JzLnByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN0KGJnQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGJnQ29uZmlnLnggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBiZ1dpZHRoIC0gYmFzZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBDb2xvcnMuZ3JheTcwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50V2lkdGggPSBiZ0NvbmZpZy53aWR0aDtcbiAgICAgICAgICAgICAgICByZW1haW5TcGFjZSAtPSBjdXJyZW50V2lkdGg7XG4gICAgICAgICAgICAgICAgY3VycmVudFggKz0gY3VycmVudFdpZHRoICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQ7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBzd2l0Y2ggKG9wdGlvblN0eWxlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUuZG90OlxuICAgICAgICAgICAgICAgICAgICBjb21tb25JdGVtKEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5kb3QsICdhcmMnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUucGllY2U6XG4gICAgICAgICAgICAgICAgICAgIGNvbW1vbkl0ZW0oQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnBpZWNlLCAncmVjdCcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWc6XG4gICAgICAgICAgICAgICAgICAgIGNvbW1vbkl0ZW0oQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRhZywgJycpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBjb21tb25JdGVtKEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50ZXh0LCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNpcmNsZVdpZHRoID4gMCkge1xuICAgICAgICAgICAgaWYgKG9wdGlvblN0eWxlID09PSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWcoe1xuICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjaXJjbGVXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNpcmNsZVRleHQsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IENvbG9ycy5ncmF5MTAwLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfT1BUSU9OX0lURU1fUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICAgICAgICAgIHg6IGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNpcmNsZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogQ29sb3JzLmdyYXkxMDAsXG4gICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUElFQ0VfUkFESVVTXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgeDogY3VycmVudFggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX1RBR19GT05UX1NJWkUpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogY2lyY2xlVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBDb2xvcnMuZ3JheTcwMCxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyU2luZ2xlU2VsZWN0Q2VsbChyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IGFueSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIGZpZWxkLCBjb2x1bW5XaWR0aCwgaXNBY3RpdmUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtVmFsdWUgPSB0aGlzLmdldFZhbGlkU2VsZWN0ZWRWYWx1ZShmaWVsZCwgcmVuZGVyLnRyYW5zZm9ybVZhbHVlKTtcbiAgICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlWzBdKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYHNpbmdsZSBzZWxlY3QgZmllbGQgdW5leHBlY3RlZCB2YWx1ZTogJHt0cmFuc2Zvcm1WYWx1ZVswXX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc09wZXJhdGluZyA9IGlzQWN0aXZlO1xuICAgICAgICBjb25zdCBpdGVtID0gKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3Mub3B0aW9ucz8uZmluZCgob3B0aW9uKSA9PiBvcHRpb24uX2lkID09PSB0cmFuc2Zvcm1WYWx1ZVswXSk7XG4gICAgICAgIGNvbnN0IGl0ZW1OYW1lID0gaXRlbT8udGV4dCB8fCAnJztcbiAgICAgICAgY29uc3QgZ2V0VGV4dEVsbGlwc2lzID0gKG1heFRleHRXaWR0aDogbnVtYmVyLCBmb250U2l6ZTogbnVtYmVyID0gQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRSkgPT4ge1xuICAgICAgICAgICAgbWF4VGV4dFdpZHRoIC09IGlzT3BlcmF0aW5nID8gQUlfVEFCTEVfQ0VMTF9ERUxFVEVfSVRFTV9CVVRUT05fU0laRSAtIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkVfT0ZGU0VUIDogMDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgdGV4dDogaXRlbU5hbWUsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IGNvbHVtbldpZHRoICYmIG1heFRleHRXaWR0aCxcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogZm9udFNpemVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gMTtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25TdHlsZSA9IChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbl9zdHlsZTtcbiAgICAgICAgICAgIGxldCBiYWNrZ3JvdW5kID0gaXRlbT8uYmdfY29sb3IgPz8gaXRlbT8uY29sb3IgPz8gY29sb3JzLnByaW1hcnk7XG4gICAgICAgICAgICBjb25zdCBkb3RNYXhUZXh0V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBBSV9UQUJMRV9QSUVDRV9XSURUSCAtIEFJX1RBQkxFX1RFWFRfR0FQO1xuICAgICAgICAgICAgY29uc3QgYm9yZGVyV2lkdGggPSAxO1xuICAgICAgICAgICAgc3dpdGNoIChvcHRpb25TdHlsZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLmRvdDpcbiAgICAgICAgICAgICAgICAgICAgLy8g6L+Z6YeM55qEIEFJX1RBQkxFX09GRlNFVCDlgY/np7vkuI3noa7lrprmmK/kuLrllaXvvIjljIXmi6wgcGllY2Ug55qE77yJ77yM5Y+q5piv5Li65LqG5L+d5oyB5ZKM57yW6L6R57uE5Lu25Lit55qE5a+56b2QXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJjKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9ET1RfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfUElFQ0VfV0lEVEgpIC8gMiArIEFJX1RBQkxFX0RPVF9SQURJVVMgLSBBSV9UQUJMRV9PRkZTRVQsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX0RPVF9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX1BJRUNFX1dJRFRIICsgQUlfVEFCTEVfVEVYVF9HQVAgKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkUpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGdldFRleHRFbGxpcHNpcyhkb3RNYXhUZXh0V2lkdGgpLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9ycy5ncmF5ODAwXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5waWVjZTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9QSUVDRV9XSURUSCkgLyAyIC0gQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IEFJX1RBQkxFX1BJRUNFX1dJRFRILFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9QSUVDRV9XSURUSCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUElFQ0VfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogYmFja2dyb3VuZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9QSUVDRV9XSURUSCArIEFJX1RBQkxFX1RFWFRfR0FQICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0RWxsaXBzaXMoZG90TWF4VGV4dFdpZHRoKS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcnMuZ3JheTgwMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIChBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9UQUdfUEFERElORyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dFdpZHRoLCB0ZXh0IH0gPSBnZXRUZXh0RWxsaXBzaXMobWF4VGV4dFdpZHRoLCBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCh0ZXh0V2lkdGggKyAyICogQUlfVEFCTEVfVEFHX1BBRERJTkcsIEFJX1RBQkxFX0NFTExfTVVMVElfSVRFTV9NSU5fV0lEVEgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogY29sb3JzLndoaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IGJhY2tncm91bmRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRNYXhUZXh0V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0RWxsaXBzaXModGV4dE1heFRleHRXaWR0aCkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3JzLmdyYXk4MDBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsRGF0ZShyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IGFueSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHRyYW5zZm9ybVZhbHVlLCBjb2x1bW5XaWR0aCwgc3R5bGUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgY29sb3JzID0gQUlUYWJsZS5nZXRDb2xvcnMoKTtcbiAgICAgICAgbGV0IGNlbGxUZXh0ID0gdHJhbnNmb3JtVmFsdWU7XG5cbiAgICAgICAgaWYgKGNlbGxUZXh0ID09IG51bGwgfHwgIV8uaXNTdHJpbmcoY2VsbFRleHQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0TWF4V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gdGhpcy50ZXh0RWxsaXBzaXMoeyB0ZXh0OiBjZWxsVGV4dCwgbWF4V2lkdGg6IGNvbHVtbldpZHRoICYmIHRleHRNYXhXaWR0aCB9KTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY29uc3QgY29sb3IgPSBzdHlsZT8uY29sb3IgfHwgY29sb3JzLmdyYXk4MDA7XG4gICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgeTogeSArIEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLyAyLFxuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcixcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBzdHlsZT8uZm9udFdlaWdodCxcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbFJhdGUocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZTogX2NlbGxWYWx1ZSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCBtYXggPSA1O1xuICAgICAgICBjb25zdCBjZWxsVmFsdWUgPSBfY2VsbFZhbHVlIGFzIFJhdGVGaWVsZFZhbHVlO1xuICAgICAgICBjb25zdCBzaXplID0gQUlfVEFCTEVfQ0VMTF9FTU9KSV9TSVpFO1xuICAgICAgICBjb25zdCBpc0VtcHR5ID0gaXNOaWwoY2VsbFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIFsuLi5BcnJheShtYXgpLmtleXMoKV0ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbmRleCArIDE7XG4gICAgICAgICAgICBjb25zdCBjaGVja2VkID0gdmFsdWUgPD0gY2VsbFZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaWNvblggPSBpbmRleCAqIHNpemUgKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBpbmRleCAqIEFJX1RBQkxFX0NFTExfRU1PSklfUEFERElORztcbiAgICAgICAgICAgIGNvbnN0IGljb25ZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBzaXplKSAvIDI7XG5cbiAgICAgICAgICAgIGlmIChjdHggJiYgKGNoZWNrZWQgfHwgaXNFbXB0eSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGgoe1xuICAgICAgICAgICAgICAgICAgICB4OiB4ICsgaWNvblgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyBpY29uWSxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogMjIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IFN0YXJGaWxsLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBpc0VtcHR5ID8gdGhpcy5jb2xvcnMuZ3JheTEwMCA6IHRoaXMuY29sb3JzLndhcmluZyxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVYOiAxLjE0LFxuICAgICAgICAgICAgICAgICAgICBzY2FsZVk6IDEuMTRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsUHJvZ3Jlc3MocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSwgY29sdW1uV2lkdGgsIHN0eWxlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG4gICAgICAgIGxldCBjZWxsVmFsdWUgPSB0cmFuc2Zvcm1WYWx1ZTtcbiAgICAgICAgaWYgKGlzTmlsKGNlbGxWYWx1ZSkpIHtcbiAgICAgICAgICAgIGNlbGxWYWx1ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfLmlzTnVtYmVyKGNlbGxWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3aWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyAtIEFJX1RBQkxFX1BST0dSRVNTX1RFWFRfV2lkdGg7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IEFJX1RBQkxFX1BST0dSRVNTX0JBUl9IRUlHSFQ7XG4gICAgICAgIGNvbnN0IHRleHRIZWlnaHQgPSBBSV9UQUJMRV9DT01NT05fRk9OVF9TSVpFO1xuICAgICAgICBjb25zdCBvZmZzZXRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCBvZmZzZXRZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9QUk9HUkVTU19CQVJfSEVJR0hUKSAvIDI7XG4gICAgICAgIGNvbnN0IHRleHRPZmZzZXRZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSB0ZXh0SGVpZ2h0KSAvIDI7XG5cbiAgICAgICAgLy8g57uY5Yi26IOM5pmvXG4gICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICB4OiB4ICsgb2Zmc2V0WCxcbiAgICAgICAgICAgIHk6IHkgKyBvZmZzZXRZLFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BST0dSRVNTX0JBUl9SQURJVVMsXG4gICAgICAgICAgICBmaWxsOiBjb2xvcnMuZ3JheTIwMFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyDorqHnrpflubbnu5jliLbov5vluqZcbiAgICAgICAgY29uc3QgcHJvZ3Jlc3NXaWR0aCA9IChjZWxsVmFsdWUgLyAxMDApICogd2lkdGg7XG4gICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICB4OiB4ICsgb2Zmc2V0WCxcbiAgICAgICAgICAgIHk6IHkgKyBvZmZzZXRZLFxuICAgICAgICAgICAgd2lkdGg6IHByb2dyZXNzV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BST0dSRVNTX0JBUl9SQURJVVMsXG4gICAgICAgICAgICBmaWxsOiBjb2xvcnMuc3VjY2Vzc1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgeDogeCArIG9mZnNldFggKyB3aWR0aCArIEFJX1RBQkxFX1RFWFRfR0FQLFxuICAgICAgICAgICAgeTogeSArIHRleHRPZmZzZXRZLFxuICAgICAgICAgICAgdGV4dDogYCR7Y2VsbFZhbHVlfSVgLFxuICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcnMuZ3JheTgwMFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxNZW1iZXIocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyByZWZlcmVuY2VzLCB4LCB5LCBmaWVsZCwgdHJhbnNmb3JtVmFsdWU6IF9jZWxsVmFsdWUsIHJvd0hlaWdodCwgY29sdW1uV2lkdGgsIGlzQWN0aXZlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGNlbGxWYWx1ZSA9IF9jZWxsVmFsdWU7XG5cbiAgICAgICAgaWYgKCFjZWxsVmFsdWU/Lmxlbmd0aCB8fCAhcmVmZXJlbmNlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gZmllbGQuc2V0dGluZ3MgYXMgTWVtYmVyU2V0dGluZ3M7XG4gICAgICAgIGNvbnN0IGF2YXRhclNpemUgPSBBSV9UQUJMRV9NRU1CRVJfQVZBVEFSX1NJWkU7XG4gICAgICAgIGNvbnN0IGl0ZW1IZWlnaHQgPSBBSV9UQUJMRV9DRUxMX01FTUJFUl9JVEVNX0hFSUdIVDtcbiAgICAgICAgY29uc3QgaXNPcGVyYXRpbmcgPSBpc0FjdGl2ZTtcbiAgICAgICAgY29uc3QgaXNNdWx0aXBsZSA9IHNldHRpbmdzPy5pc19tdWx0aXBsZTtcblxuICAgICAgICBsZXQgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGxldCBjdXJyZW50WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gYXZhdGFyU2l6ZSkgLyAyO1xuICAgICAgICBjb25zdCBpdGVtT3RoZXJXaWR0aCA9IGF2YXRhclNpemUgKyBBSV9UQUJMRV9NRU1CRVJfSVRFTV9BVkFUQVJfTUFSR0lOX1JJR0hUO1xuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSBpc0FjdGl2ZSA/IDEzMCAtIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19UT1AgOiByb3dIZWlnaHQgLSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QO1xuICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBpc09wZXJhdGluZ1xuICAgICAgICAgICAgPyBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aCAtIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkUgLSAxMlxuICAgICAgICAgICAgOiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aDtcblxuICAgICAgICBjb25zdCBsaXN0Q291bnQgPSBjZWxsVmFsdWUubGVuZ3RoO1xuICAgICAgICBsZXQgaXNPdmVyZmxvdyA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaXN0Q291bnQ7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJJbmZvID0gcmVmZXJlbmNlcz8ubWVtYmVyc1tjZWxsVmFsdWVbaW5kZXhdXTtcbiAgICAgICAgICAgIGlmICghdXNlckluZm8pIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCB7IHVpZCwgZGlzcGxheV9uYW1lLCBhdmF0YXIgfSA9IHVzZXJJbmZvO1xuICAgICAgICAgICAgY29uc3QgaXRlbVdpZHRoID0gQUlUYWJsZUF2YXRhclNpemUuc2l6ZTI0ICsgKGlzTXVsdGlwbGUgPyBBSV9UQUJMRV9DRUxMX01FTUJFUl9JVEVNX1BBRERJTkcgOiAwKTtcblxuICAgICAgICAgICAgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBpbmRleCAqIGl0ZW1XaWR0aDtcblxuICAgICAgICAgICAgbGV0IHJlYWxNYXhUZXh0V2lkdGggPSBtYXhUZXh0V2lkdGggPCAwID8gMCA6IG1heFRleHRXaWR0aDtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBpc09wZXJhdGluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdGluZ01heFdpZHRoID0gbWF4VGV4dFdpZHRoIC0gKEFJX1RBQkxFX0NFTExfQUREX0lURU1fQlVUVE9OX1NJWkUgKyA0KTtcbiAgICAgICAgICAgICAgICAvLyBpdGVtIE5vIHNwYWNlIHRvIGRpc3BsYXksIHRoZW4gcGVyZm9ybSBhIGxpbmUgZmVlZFxuICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpbmdNYXhXaWR0aCA8PSAyMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01BUkdJTl9UT1A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbE1heFRleHRXaWR0aCA9IG9wZXJhdGluZ01heFdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlzTW9yZSA9IGN1cnJlbnRYICsgaXRlbVdpZHRoID4gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgaWYgKGNvbHVtbldpZHRoICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyDlnKjpnZ7mtLvliqjnirbmgIHkuIvvvIzlvZPotoXlh7rliJflrr3ml7bvvIzkuI3kvJrmuLLmn5PlkI7nu63lhoXlrrlcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggPj0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzkuI3mmK/pnZ7mtLvliqjnirbmgIHnmoTmnIDlkI7kuIDooYzvvIzliJnmjaLooYzmuLLmn5PmuqLlh7rlhoXlrrlcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggPiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50WCArIGl0ZW1XaWR0aCA+IGNvbHVtbldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBpdGVtSGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFkgPj0gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlzT3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXZhdGFyKHtcbiAgICAgICAgICAgICAgICAgICAgeDogeCArIGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgY3VycmVudFksXG4gICAgICAgICAgICAgICAgICAgIHVybDogYXZhdGFyISxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHVpZCEsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRBdmF0YXJTaG9ydE5hbWUoZGlzcGxheV9uYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgYmdDb2xvcjogZ2V0QXZhdGFyQmdDb2xvcihkaXNwbGF5X25hbWUhKSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogQUlUYWJsZUF2YXRhclR5cGUubWVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBzaXplOiBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjRcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIOWcqOmdnuWkmumAieaooeW8j+S4i+aYvuekuuWQjeensFxuICAgICAgICAgICAgICAgIGlmICghaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0WCA9IHggKyBjdXJyZW50WCArIEFJVGFibGVBdmF0YXJTaXplLnNpemUyNCArIEFJX1RBQkxFX01FTUJFUl9JVEVNX0FWQVRBUl9NQVJHSU5fUklHSFQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB0ZXh0WCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBkaXNwbGF5X25hbWUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG1heFRleHRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogdGhpcy5jb2xvcnMuZ3JheTgwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9DT01NT05fRk9OVF9TSVpFLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNNb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDAuMztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyBjdXJyZW50WSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJVGFibGVBdmF0YXJTaXplLnNpemUyNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiB0aGlzLmNvbG9ycy5ibGFja1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBjdXJyZW50WCArIEZPTlRfU0laRV9TTSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IHRoaXMuY29sb3JzLndoaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEZPTlRfU0laRV9TTSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGArJHtsaXN0Q291bnQgLSBpbmRleCAtIDF9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsQXR0YWNobWVudChyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB7IHJlZmVyZW5jZXMsIHgsIHksIGZpZWxkLCB0cmFuc2Zvcm1WYWx1ZTogX2NlbGxWYWx1ZSwgcm93SGVpZ2h0LCBjb2x1bW5XaWR0aCwgaXNBY3RpdmUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgY2VsbFZhbHVlID0gX2NlbGxWYWx1ZTtcbiAgICAgICAgaWYgKCFjZWxsVmFsdWU/Lmxlbmd0aCB8fCAhcmVmZXJlbmNlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUljb25TaXplID0gQUlfVEFCTEVfRklMRV9JQ09OX1NJWkU7XG4gICAgICAgIGNvbnN0IGl0ZW1IZWlnaHQgPSBBSV9UQUJMRV9GSUxFX0lDT05fSVRFTV9IRUlHSFQ7XG4gICAgICAgIGNvbnN0IGlzT3BlcmF0aW5nID0gaXNBY3RpdmU7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBsZXQgY3VycmVudFkgPSAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIGZpbGVJY29uU2l6ZSkgLyAyO1xuICAgICAgICBjb25zdCBpdGVtT3RoZXJXaWR0aCA9IGZpbGVJY29uU2l6ZSArIEFJX1RBQkxFX0ZJRUxEX0lURU1fTUFSR0lOX1JJR0hUO1xuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSBpc0FjdGl2ZSA/IDEzMCAtIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19UT1AgOiByb3dIZWlnaHQgLSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QO1xuICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBpc09wZXJhdGluZ1xuICAgICAgICAgICAgPyBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aCAtIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkUgLSAxMlxuICAgICAgICAgICAgOiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aDtcblxuICAgICAgICBjb25zdCBsaXN0Q291bnQgPSBjZWxsVmFsdWUubGVuZ3RoO1xuICAgICAgICBsZXQgaXNPdmVyZmxvdyA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaXN0Q291bnQ7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRJbmZvID0gcmVmZXJlbmNlcy5hdHRhY2htZW50c1tjZWxsVmFsdWVbaW5kZXhdXTtcbiAgICAgICAgICAgIGlmICghYXR0YWNobWVudEluZm8pIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgeyB0aXRsZSwgYWRkaXRpb24gfSA9IGF0dGFjaG1lbnRJbmZvO1xuICAgICAgICAgICAgY29uc3QgaXRlbVdpZHRoID0gQUlfVEFCTEVfRklMRV9JQ09OX1NJWkUgKyBBSV9UQUJMRV9GSUVMRF9JVEVNX01BUkdJTl9SSUdIVDtcbiAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgaW5kZXggKiBpdGVtV2lkdGg7XG4gICAgICAgICAgICBsZXQgcmVhbE1heFRleHRXaWR0aCA9IG1heFRleHRXaWR0aCA8IDAgPyAwIDogbWF4VGV4dFdpZHRoO1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwICYmIGlzT3BlcmF0aW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW5nTWF4V2lkdGggPSBtYXhUZXh0V2lkdGggLSAoQUlfVEFCTEVfQ0VMTF9BRERfSVRFTV9CVVRUT05fU0laRSArIDQpO1xuICAgICAgICAgICAgICAgIC8vIGl0ZW0gTm8gc3BhY2UgdG8gZGlzcGxheSwgdGhlbiBwZXJmb3JtIGEgbGluZSBmZWVkXG4gICAgICAgICAgICAgICAgaWYgKG9wZXJhdGluZ01heFdpZHRoIDw9IDIwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQgKyBBSV9UQUJMRV9DRUxMX01VTFRJX0lURU1fTUFSR0lOX1RPUDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWFsTWF4VGV4dFdpZHRoID0gb3BlcmF0aW5nTWF4V2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbHVtbldpZHRoICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyDlnKjpnZ7mtLvliqjnirbmgIHkuIvvvIzlvZPotoXlh7rliJflrr3ml7bvvIzkuI3kvJrmuLLmn5PlkI7nu63lhoXlrrlcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggPj0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzkuI3mmK/pnZ7mtLvliqjnirbmgIHnmoTmnIDlkI7kuIDooYzvvIzliJnmjaLooYzmuLLmn5PmuqLlh7rlhoXlrrlcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggPiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50WCArIGl0ZW1XaWR0aCA+IGNvbHVtbldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBpdGVtSGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFkgPj0gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlzT3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN2Z1N0cmluZyA9IGdldEZpbGVUaHVtYm5haWxTdmdTdHJpbmcoYWRkaXRpb24/LmV4dCk7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgIGltZy5zcmMgPSBgZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJHtlbmNvZGVVUklDb21wb25lbnQoc3ZnU3RyaW5nKX1gO1xuICAgICAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpbWcuc3JjLFxuICAgICAgICAgICAgICAgICAgICB4OiB4ICsgY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyBjdXJyZW50WSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBpbWcuc3JjLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogQUlfVEFCTEVfRklMRV9JQ09OX1NJWkUsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfRklMRV9JQ09OX1NJWkVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNlbGxEcmF3ZXIgPSBuZXcgQ2VsbERyYXdlcigpO1xuIl19
685
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1kcmF3ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9kcmF3ZXJzL2NlbGwtZHJhd2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFDSCxrQ0FBa0MsRUFDbEMscUNBQXFDLEVBQ3JDLDRDQUE0QyxFQUM1QywyQkFBMkIsRUFDM0Isd0JBQXdCLEVBQ3hCLDJCQUEyQixFQUMzQixnQ0FBZ0MsRUFDaEMsaUNBQWlDLEVBQ2pDLDhCQUE4QixFQUM5QixtQ0FBbUMsRUFDbkMsa0NBQWtDLEVBQ2xDLGdDQUFnQyxFQUNoQywrQkFBK0IsRUFDL0IscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6QixtQkFBbUIsRUFDbkIsZ0NBQWdDLEVBQ2hDLDhCQUE4QixFQUM5Qix1QkFBdUIsRUFDdkIsMkJBQTJCLEVBQzNCLHdDQUF3QyxFQUN4Qyx1QkFBdUIsRUFDdkIsZUFBZSxFQUNmLDhCQUE4QixFQUM5QiwyQkFBMkIsRUFDM0IsNEJBQTRCLEVBQzVCLDJCQUEyQixFQUMzQixxQkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLDRCQUE0QixFQUM1Qiw0QkFBNEIsRUFDNUIsNEJBQTRCLEVBQzVCLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4Qix1QkFBdUIsRUFDdkIsd0JBQXdCLEVBQ3hCLGtDQUFrQyxFQUNsQyxZQUFZLEVBQ1osUUFBUSxFQUNYLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQWtDLE1BQU0sWUFBWSxD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RUFBRSxDQUFDO29CQUM3RCxRQUFRLEdBQUcscUJBQXFCLENBQUM7b0JBQ2pDLFFBQVEsSUFBSSxVQUFVLENBQUM7Z0JBQzNCLENBQUM7Z0JBQ0QsSUFBSSxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ3hCLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLENBQUM7WUFDTCxDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQUcseUJBQXlCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzNELE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDeEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0Msa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM5RSxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNOLElBQUksQ0FBQyxLQUFLLENBQUM7b0JBQ1AsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHO29CQUNiLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUTtvQkFDZixDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVE7b0JBQ2YsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHO29CQUNaLEtBQUssRUFBRSx1QkFBdUI7b0JBQzlCLE1BQU0sRUFBRSx1QkFBdUI7aUJBQ2xDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXywgeyBpc05pbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICAgIEFJX1RBQkxFX0NFTExfQUREX0lURU1fQlVUVE9OX1NJWkUsXG4gICAgQUlfVEFCTEVfQ0VMTF9ERUxFVEVfSVRFTV9CVVRUT05fU0laRSxcbiAgICBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFX09GRlNFVCxcbiAgICBBSV9UQUJMRV9DRUxMX0VNT0pJX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfQ0VMTF9FTU9KSV9TSVpFLFxuICAgIEFJX1RBQkxFX0NFTExfTUFYX1JPV19DT1VOVCxcbiAgICBBSV9UQUJMRV9DRUxMX01FTUJFUl9JVEVNX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9DRUxMX01FTUJFUl9JVEVNX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTLFxuICAgIEFJX1RBQkxFX0NFTExfTVVMVElfSVRFTV9NQVJHSU5fVE9QLFxuICAgIEFJX1RBQkxFX0NFTExfTVVMVElfSVRFTV9NSU5fV0lEVEgsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX1RPUCxcbiAgICBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRSxcbiAgICBBSV9UQUJMRV9ET1RfUkFESVVTLFxuICAgIEFJX1RBQkxFX0ZJRUxEX0lURU1fTUFSR0lOX1JJR0hULFxuICAgIEFJX1RBQkxFX0ZJTEVfSUNPTl9JVEVNX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9GSUxFX0lDT05fU0laRSxcbiAgICBBSV9UQUJMRV9NRU1CRVJfQVZBVEFSX1NJWkUsXG4gICAgQUlfVEFCTEVfTUVNQkVSX0lURU1fQVZBVEFSX01BUkdJTl9SSUdIVCxcbiAgICBBSV9UQUJMRV9NSU5fVEVYVF9XSURUSCxcbiAgICBBSV9UQUJMRV9PRkZTRVQsXG4gICAgQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFLFxuICAgIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9PUFRJT05fSVRFTV9QQURESU5HLFxuICAgIEFJX1RBQkxFX09QVElPTl9JVEVNX1JBRElVUyxcbiAgICBBSV9UQUJMRV9QSUVDRV9SQURJVVMsXG4gICAgQUlfVEFCTEVfUElFQ0VfV0lEVEgsXG4gICAgQUlfVEFCTEVfUFJPR1JFU1NfQkFSX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9QUk9HUkVTU19CQVJfUkFESVVTLFxuICAgIEFJX1RBQkxFX1BST0dSRVNTX1RFWFRfV2lkdGgsXG4gICAgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFLFxuICAgIEFJX1RBQkxFX1RBR19QQURESU5HLFxuICAgIEFJX1RBQkxFX1RFWFRfR0FQLFxuICAgIENvbG9ycyxcbiAgICBERUZBVUxUX0ZPTlRfRkFNSUxZLFxuICAgIERFRkFVTFRfRk9OVF9TSVpFLFxuICAgIERFRkFVTFRfRk9OVF9XRUlHSFQsXG4gICAgREVGQVVMVF9URVhUX0FMSUdOX0xFRlQsXG4gICAgREVGQVVMVF9URVhUX0FMSUdOX1JJR0hULFxuICAgIERFRkFVTFRfVEVYVF9ERUNPUkFUSU9OLFxuICAgIERFRkFVTFRfVEVYVF9MSU5FX0hFSUdIVCxcbiAgICBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFLFxuICAgIEZPTlRfU0laRV9TTSxcbiAgICBTdGFyRmlsbFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQUlUYWJsZSwgQUlUYWJsZUZpZWxkLCBBSVRhYmxlRmllbGRUeXBlLCBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUsIE1lbWJlclNldHRpbmdzLCBSYXRlRmllbGRWYWx1ZSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgQUlUYWJsZUF2YXRhclNpemUsIEFJVGFibGVBdmF0YXJUeXBlLCBBSVRhYmxlUmVuZGVyLCBBSVRhYmxlU2VsZWN0RmllbGQgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRBdmF0YXJCZ0NvbG9yLCBnZXRBdmF0YXJTaG9ydE5hbWUsIGdldFRleHRXaWR0aCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IERyYXdlciB9IGZyb20gJy4vZHJhd2VyJztcbmltcG9ydCB7IGhlbHBlcnMgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgZ2V0RmlsZVRodW1ibmFpbFN2Z1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUnO1xuXG4vKipcbiAqIOWkhOeQhuWSjOa4suafk+ihqOagvOWNleWFg+agvOeahOWGheWuuVxuICovXG5leHBvcnQgY2xhc3MgQ2VsbERyYXdlciBleHRlbmRzIERyYXdlciB7XG4gICAgLy8g5qC35byP5Yid5aeL5YyWXG4gICAgcHVibGljIGluaXRTdHlsZShmaWVsZDogQUlUYWJsZUZpZWxkLCBzdHlsZVByb3BzOiB7IGZvbnRXZWlnaHQ6IGFueSB9KTogdm9pZCB8IG51bGwge1xuICAgICAgICBjb25zdCB7IHR5cGU6IGZpZWxkVHlwZSB9ID0gZmllbGQ7XG4gICAgICAgIGNvbnN0IHsgZm9udFdlaWdodCA9IERFRkFVTFRfRk9OVF9XRUlHSFQgfSA9IHN0eWxlUHJvcHM7XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS50ZXh0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmRhdGU6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuY3JlYXRlZEF0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnVwZGF0ZWRBdDpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5yYXRlOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnByb2dyZXNzOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLm1lbWJlcjpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQnk6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEJ5OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldFN0eWxlKHsgZm9udFNpemU6IERFRkFVTFRfRk9OVF9TSVpFLCBmb250V2VpZ2h0IH0pO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIOWNleWFg+agvOa4suafk1xuICAgIHB1YmxpYyByZW5kZXJDZWxsKHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHsgZmllbGQgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgZmllbGRUeXBlID0gZmllbGQudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnRleHQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUubnVtYmVyOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmxpbms6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFRleHQocmVuZGVyLCBjdHgpO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnNlbGVjdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsU2VsZWN0KHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5kYXRlOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmNyZWF0ZWRBdDpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS51cGRhdGVkQXQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbERhdGUocmVuZGVyLCBjdHgpO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnJhdGU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFJhdGUocmVuZGVyLCBjdHgpO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnByb2dyZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxQcm9ncmVzcyhyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUubWVtYmVyOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmNyZWF0ZWRCeTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS51cGRhdGVkQnk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbE1lbWJlcihyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuYXR0YWNobWVudDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsQXR0YWNobWVudChyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsVGV4dChyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IGFueSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHRyYW5zZm9ybVZhbHVlLCBmaWVsZCwgY29sdW1uV2lkdGgsIHN0eWxlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XG4gICAgICAgIGxldCByZW5kZXJUZXh0OiBzdHJpbmcgfCBudWxsID0gZmllbGRUeXBlID09PSBBSVRhYmxlRmllbGRUeXBlLmxpbmsgPyB0cmFuc2Zvcm1WYWx1ZT8udGV4dCA6IHRyYW5zZm9ybVZhbHVlO1xuICAgICAgICBpZiAocmVuZGVyVGV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNTaW5nbGVMaW5lID0gIWNvbHVtbldpZHRoO1xuICAgICAgICBjb25zdCBpc1RleHRGaWVsZCA9IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS50ZXh0O1xuICAgICAgICBjb25zdCBpc051bWJlckZpZWxkID0gZmllbGRUeXBlID09PSBBSVRhYmxlRmllbGRUeXBlLm51bWJlcjtcblxuICAgICAgICBpZiAoaXNUZXh0RmllbGQgJiYgaXNTaW5nbGVMaW5lKSB7XG4gICAgICAgICAgICByZW5kZXJUZXh0ID0gcmVuZGVyVGV4dC5yZXBsYWNlKC9cXHJ8XFxuL2csICcgJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2xvciA9IHN0eWxlPy5jb2xvciB8fCB0aGlzLmNvbG9ycy5ncmF5ODAwO1xuICAgICAgICBjb25zdCB0ZXh0QWxpZ24gPSBzdHlsZT8udGV4dEFsaWduIHx8IERFRkFVTFRfVEVYVF9BTElHTl9MRUZUO1xuICAgICAgICBjb25zdCBmb250V2VpZ2h0ID0gc3R5bGU/LmZvbnRXZWlnaHQ7XG4gICAgICAgIGNvbnN0IHRleHRNYXhXaWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3QgcmVuZGVyWCA9IHRleHRBbGlnbiA9PT0gREVGQVVMVF9URVhUX0FMSUdOX1JJR0hUID8geCArIGNvbHVtbldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9QQURESU5HIDogeCArIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3QgcmVuZGVyWSA9IHkgKyBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC8gMjtcbiAgICAgICAgY29uc3QgdGV4dERlY29yYXRpb24gPSBERUZBVUxUX1RFWFRfREVDT1JBVElPTjtcblxuICAgICAgICBpZiAoaXNOdW1iZXJGaWVsZCkge1xuICAgICAgICAgICAgcmVuZGVyVGV4dCA9IFN0cmluZyhyZW5kZXJUZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgIHRleHQ6IHJlbmRlclRleHQsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IGNvbHVtbldpZHRoICYmIHRleHRNYXhXaWR0aCxcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICBsZXQgcHVyZVRleHQgPSB0ZXh0O1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgIHg6IHJlbmRlclgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHJlbmRlclksXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHB1cmVUZXh0LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24sXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3IsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndyYXBUZXh0KHtcbiAgICAgICAgICAgICAgICB4OiByZW5kZXJYLFxuICAgICAgICAgICAgICAgIHk6IHJlbmRlclksXG4gICAgICAgICAgICAgICAgdGV4dDogcmVuZGVyVGV4dCxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogdGV4dE1heFdpZHRoLFxuICAgICAgICAgICAgICAgIG1heFJvdzogQUlfVEFCTEVfQ0VMTF9NQVhfUk9XX0NPVU5ULFxuICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IERFRkFVTFRfVEVYVF9MSU5FX0hFSUdIVCxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ24sXG4gICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRSxcbiAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5saW5rID8gQ29sb3JzLnByaW1hcnkgOiBjb2xvcixcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0LFxuICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uLFxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSxcbiAgICAgICAgICAgICAgICBuZWVkRHJhdzogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxTZWxlY3QocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBmaWVsZCB9ID0gcmVuZGVyO1xuICAgICAgICBpZiAoKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3M/LmlzX211bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckNlbGxNdWx0aVNlbGVjdChyZW5kZXIsIGN0eCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclNpbmdsZVNlbGVjdENlbGwocmVuZGVyLCBjdHgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWxpZFNlbGVjdGVkVmFsdWUoZmllbGQ6IEFJVGFibGVGaWVsZCwgdHJhbnNmb3JtVmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkT3B0aW9uc01hcCA9IGhlbHBlcnMua2V5QnkoKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3Mub3B0aW9ucyB8fCBbXSwgJ19pZCcpO1xuICAgICAgICByZXR1cm4gKHRyYW5zZm9ybVZhbHVlIHx8IFtdKS5maWx0ZXIoKG9wdGlvbklkOiBzdHJpbmcpID0+ICEhZmllbGRPcHRpb25zTWFwW29wdGlvbklkXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsTXVsdGlTZWxlY3QocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCBmaWVsZCwgY29sdW1uV2lkdGggfSA9IHJlbmRlcjtcbiAgICAgICAgbGV0IHRyYW5zZm9ybVZhbHVlID0gdGhpcy5nZXRWYWxpZFNlbGVjdGVkVmFsdWUoZmllbGQsIHJlbmRlci50cmFuc2Zvcm1WYWx1ZSk7XG4gICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY3VycmVudFggPSB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCBtYXhDb250YWluZXJXaWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3Qgb3B0aW9uU3R5bGUgPSAoZmllbGQgYXMgQUlUYWJsZVNlbGVjdEZpZWxkKS5zZXR0aW5ncy5vcHRpb25fc3R5bGU7XG4gICAgICAgIGNvbnN0IGZvbnRTdHlsZSA9IGAke0RFRkFVTFRfRk9OVF9XRUlHSFR9ICR7QUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFfXB4ICR7REVGQVVMVF9GT05UX0ZBTUlMWX1gO1xuICAgICAgICBjb25zdCBpc0RvdE9yUGllY2UgPSBvcHRpb25TdHlsZSA9PT0gQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLmRvdCB8fCBvcHRpb25TdHlsZSA9PT0gQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnBpZWNlO1xuXG4gICAgICAgIGxldCB0b3RhbFdpZHRoID0gMDtcbiAgICAgICAgY29uc3QgY2VsbEl0ZW1JbmZvTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBsZXQgZHJhd2FibGVJbmRleCA9IDA7XG4gICAgICAgIHRyYW5zZm9ybVZhbHVlLmZvckVhY2goKG9wdGlvbklkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbnM/LmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLl9pZCA9PT0gb3B0aW9uSWQpO1xuICAgICAgICAgICAgY29uc3QgdGV4dFdpZHRoID0gZ2V0VGV4dFdpZHRoKGN0eCwgaXRlbT8udGV4dCBhcyBzdHJpbmcsIGZvbnRTdHlsZSk7XG4gICAgICAgICAgICB0b3RhbFdpZHRoICs9IHRleHRXaWR0aCArIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgdG90YWxXaWR0aCArPSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0RvdE9yUGllY2UpIHtcbiAgICAgICAgICAgICAgICB0b3RhbFdpZHRoICs9IEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0b3RhbFdpZHRoIDwgbWF4Q29udGFpbmVyV2lkdGggfHwgdG90YWxXaWR0aCA9PT0gbWF4Q29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBkcmF3YWJsZUluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjZWxsSXRlbUluZm9NYXAuc2V0KG9wdGlvbklkLCB7IHRleHRXaWR0aCwgaXRlbSwgb2Zmc2V0OiB0b3RhbFdpZHRoIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBiYXNlV2lkdGggPSBBSV9UQUJMRV9NSU5fVEVYVF9XSURUSCArIEFJX1RBQkxFX0NFTExfUEFERElORyAqIDI7XG4gICAgICAgIGNvbnN0IG1pbldpZHRoID0gaXNEb3RPclBpZWNlID8gYmFzZVdpZHRoICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMiArIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUIDogYmFzZVdpZHRoO1xuXG4gICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZVtkcmF3YWJsZUluZGV4ICsgMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb2Zmc2V0OiBjdXJyZW50T2Zmc2V0IH0gPSBjZWxsSXRlbUluZm9NYXAuZ2V0KHRyYW5zZm9ybVZhbHVlW2RyYXdhYmxlSW5kZXhdKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbkRyYXdlck5leHQgPSBtYXhDb250YWluZXJXaWR0aCAtIGN1cnJlbnRPZmZzZXQgPiBtaW5XaWR0aDtcbiAgICAgICAgICAgIGRyYXdhYmxlSW5kZXggPSBjYW5EcmF3ZXJOZXh0ID8gZHJhd2FibGVJbmRleCArIDEgOiBkcmF3YWJsZUluZGV4O1xuICAgICAgICAgICAgLy8g5LiK6Z2i6L+H56iL5pivICDmsqHmnIkgK+aVsOWtlyAg55qE5oOF5Ya15LiL5pyA5aSn6IO95pS+5Yeg5Liq77ybXG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAoZHJhd2FibGVJbmRleCArIDEpO1xuXG4gICAgICAgICAgICBpZiAobnVtYmVyID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIOivtOaYjuaciSAr5pWw5a2X77yM6YeN5paw6K6h566XXG4gICAgICAgICAgICAgICAgY29uc3QgY2lyY2xlV2lkdGggPSBnZXRUZXh0V2lkdGgoY3R4LCBgK3tudW1iZXJ9YCwgZm9udFN0eWxlKSArIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4ID0gbWF4Q29udGFpbmVyV2lkdGggLSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCAtIGNpcmNsZVdpZHRoO1xuICAgICAgICAgICAgICAgIC8vIOWmguaenOW9k+WJjeW3sue7j+i2heWHuuS6hu+8jOeci+aYr+WQpuiDveWuueS4i+W9k+WJjeeahO+8jOS4jeiDveWwseWHj+WOuyAgMe+8m1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtSGFzT3ZlciA9IGN1cnJlbnRPZmZzZXQgPiBtYXg7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtSGFzT3Zlcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0T2Zmc2V0ID0gZHJhd2FibGVJbmRleCA9PT0gMCA/IDAgOiBjZWxsSXRlbUluZm9NYXAuZ2V0KHRyYW5zZm9ybVZhbHVlW2RyYXdhYmxlSW5kZXggLSAxXSk7XG4gICAgICAgICAgICAgICAgICAgIGRyYXdhYmxlSW5kZXggPSBtYXggLSBsYXN0T2Zmc2V0ID4gbWluV2lkdGggPyBkcmF3YWJsZUluZGV4IDogZHJhd2FibGVJbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g6L+Y5pyJ5Ymp5L2Z56m66Ze0LCDnnIvmmK/lkKbog73lpJrmuLLmn5PkuIDkuKpcbiAgICAgICAgICAgICAgICAgICAgZHJhd2FibGVJbmRleCA9IG1heCAtIGN1cnJlbnRPZmZzZXQgPiBtaW5XaWR0aCA/IGRyYXdhYmxlSW5kZXggKyAxIDogZHJhd2FibGVJbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaXJjbGVUZXh0ID0gYCske3RyYW5zZm9ybVZhbHVlLmxlbmd0aCAtIChkcmF3YWJsZUluZGV4ICsgMSl9YDtcbiAgICAgICAgY29uc3QgY2lyY2xlV2lkdGggPVxuICAgICAgICAgICAgdHJhbnNmb3JtVmFsdWUubGVuZ3RoIC0gKGRyYXdhYmxlSW5kZXggKyAxKSA+IDAgPyBnZXRUZXh0V2lkdGgoY3R4LCBjaXJjbGVUZXh0LCBmb250U3R5bGUpICsgMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyA6IDA7XG4gICAgICAgIC8vIOWJqeS9meepuumXtFxuICAgICAgICBsZXQgcmVtYWluU3BhY2UgPSBtYXhDb250YWluZXJXaWR0aCAtIGNpcmNsZVdpZHRoIC0gKGNpcmNsZVdpZHRoID4gMCA/IEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUIDogMCk7XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRyYW5zZm9ybVZhbHVlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uSWQgPSB0cmFuc2Zvcm1WYWx1ZVtpbmRleF07XG4gICAgICAgICAgICBjb25zdCBiZ0NvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICB4OiBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQpIC8gMixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCxcbiAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICAgICAgICAgICAgICBmaWxsOiBDb2xvcnMuZ3JheTEwMCxcbiAgICAgICAgICAgICAgICB3aWR0aDogMFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgY29tbW9uSXRlbSA9IChvcHRpb25TdHlsZTogQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLCBzaGFwZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZVdpZHRoID0gaXNEb3RPclBpZWNlXG4gICAgICAgICAgICAgICAgICAgID8gQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMiArIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HICogMlxuICAgICAgICAgICAgICAgICAgICA6IEFJX1RBQkxFX0NFTExfUEFERElORyAqIDI7XG4gICAgICAgICAgICAgICAgaWYgKHJlbWFpblNwYWNlIDwgbWluV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHRXaWR0aCwgaXRlbSB9ID0gY2VsbEl0ZW1JbmZvTWFwLmdldChvcHRpb25JZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcGxldGVXaWR0aCA9IGJhc2VXaWR0aCArIHRleHRXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IHRyYW5zZm9ybVZhbHVlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluU3BhY2UgLT0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGJnV2lkdGggPSByZW1haW5TcGFjZSA+IGNvbXBsZXRlV2lkdGggPyBjb21wbGV0ZVdpZHRoIDogcmVtYWluU3BhY2U7XG4gICAgICAgICAgICAgICAgYmdDb25maWcud2lkdGggPSBiZ1dpZHRoO1xuICAgICAgICAgICAgICAgIGlmIChpc0RvdE9yUGllY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN0KGJnQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoYXBlID09PSAncmVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUElFQ0VfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGl0ZW0/LmJnX2NvbG9yID8/IGl0ZW0/LmNvbG9yID8/IENvbG9ycy5wcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaGFwZSA9PT0gJ2FyYycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXJjKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBiZ0NvbmZpZy54ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIpIC8gMiArIEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBpdGVtPy5iZ19jb2xvciA/PyBpdGVtPy5jb2xvciA/PyBDb2xvcnMucHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCArIEFJX1RBQkxFX0NFTExfUEFERElORyArIEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogYmdXaWR0aCAtIGJhc2VXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBDb2xvcnMuZ3JheTcwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25TdHlsZSA9PT0gQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRhZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBiZ0NvbmZpZy54LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogYmdDb25maWcueSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBiZ0NvbmZpZy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IGJnV2lkdGggLSBiYXNlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX09QVElPTl9JVEVNX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBiZ0NvbmZpZy5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogQ29sb3JzLndoaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaXRlbT8uYmdfY29sb3IgPz8gaXRlbT8uY29sb3IgPz8gQ29sb3JzLnByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN0KGJnQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGJnQ29uZmlnLnggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBiZ1dpZHRoIC0gYmFzZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBDb2xvcnMuZ3JheTcwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50V2lkdGggPSBiZ0NvbmZpZy53aWR0aDtcbiAgICAgICAgICAgICAgICByZW1haW5TcGFjZSAtPSBjdXJyZW50V2lkdGg7XG4gICAgICAgICAgICAgICAgY3VycmVudFggKz0gY3VycmVudFdpZHRoICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQ7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBzd2l0Y2ggKG9wdGlvblN0eWxlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUuZG90OlxuICAgICAgICAgICAgICAgICAgICBjb21tb25JdGVtKEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5kb3QsICdhcmMnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUucGllY2U6XG4gICAgICAgICAgICAgICAgICAgIGNvbW1vbkl0ZW0oQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnBpZWNlLCAncmVjdCcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWc6XG4gICAgICAgICAgICAgICAgICAgIGNvbW1vbkl0ZW0oQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRhZywgJycpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBjb21tb25JdGVtKEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50ZXh0LCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNpcmNsZVdpZHRoID4gMCkge1xuICAgICAgICAgICAgaWYgKG9wdGlvblN0eWxlID09PSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWcoe1xuICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjaXJjbGVXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNpcmNsZVRleHQsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IENvbG9ycy5ncmF5MTAwLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfT1BUSU9OX0lURU1fUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICAgICAgICAgIHg6IGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNpcmNsZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogQ29sb3JzLmdyYXkxMDAsXG4gICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUElFQ0VfUkFESVVTXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgeDogY3VycmVudFggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX1RBR19GT05UX1NJWkUpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogY2lyY2xlVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBDb2xvcnMuZ3JheTcwMCxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyU2luZ2xlU2VsZWN0Q2VsbChyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IGFueSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIGZpZWxkLCBjb2x1bW5XaWR0aCwgaXNBY3RpdmUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtVmFsdWUgPSB0aGlzLmdldFZhbGlkU2VsZWN0ZWRWYWx1ZShmaWVsZCwgcmVuZGVyLnRyYW5zZm9ybVZhbHVlKTtcbiAgICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlWzBdKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYHNpbmdsZSBzZWxlY3QgZmllbGQgdW5leHBlY3RlZCB2YWx1ZTogJHt0cmFuc2Zvcm1WYWx1ZVswXX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc09wZXJhdGluZyA9IGlzQWN0aXZlO1xuICAgICAgICBjb25zdCBpdGVtID0gKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3Mub3B0aW9ucz8uZmluZCgob3B0aW9uKSA9PiBvcHRpb24uX2lkID09PSB0cmFuc2Zvcm1WYWx1ZVswXSk7XG4gICAgICAgIGNvbnN0IGl0ZW1OYW1lID0gaXRlbT8udGV4dCB8fCAnJztcbiAgICAgICAgY29uc3QgZ2V0VGV4dEVsbGlwc2lzID0gKG1heFRleHRXaWR0aDogbnVtYmVyLCBmb250U2l6ZTogbnVtYmVyID0gQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRSkgPT4ge1xuICAgICAgICAgICAgbWF4VGV4dFdpZHRoIC09IGlzT3BlcmF0aW5nID8gQUlfVEFCTEVfQ0VMTF9ERUxFVEVfSVRFTV9CVVRUT05fU0laRSAtIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkVfT0ZGU0VUIDogMDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgdGV4dDogaXRlbU5hbWUsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IGNvbHVtbldpZHRoICYmIG1heFRleHRXaWR0aCxcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogZm9udFNpemVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gMTtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25TdHlsZSA9IChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbl9zdHlsZTtcbiAgICAgICAgICAgIGxldCBiYWNrZ3JvdW5kID0gaXRlbT8uYmdfY29sb3IgPz8gaXRlbT8uY29sb3IgPz8gY29sb3JzLnByaW1hcnk7XG4gICAgICAgICAgICBjb25zdCBkb3RNYXhUZXh0V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBBSV9UQUJMRV9QSUVDRV9XSURUSCAtIEFJX1RBQkxFX1RFWFRfR0FQO1xuICAgICAgICAgICAgY29uc3QgYm9yZGVyV2lkdGggPSAxO1xuICAgICAgICAgICAgc3dpdGNoIChvcHRpb25TdHlsZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLmRvdDpcbiAgICAgICAgICAgICAgICAgICAgLy8g6L+Z6YeM55qEIEFJX1RBQkxFX09GRlNFVCDlgY/np7vkuI3noa7lrprmmK/kuLrllaXvvIjljIXmi6wgcGllY2Ug55qE77yJ77yM5Y+q5piv5Li65LqG5L+d5oyB5ZKM57yW6L6R57uE5Lu25Lit55qE5a+56b2QXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJjKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9ET1RfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfUElFQ0VfV0lEVEgpIC8gMiArIEFJX1RBQkxFX0RPVF9SQURJVVMgLSBBSV9UQUJMRV9PRkZTRVQsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX0RPVF9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX1BJRUNFX1dJRFRIICsgQUlfVEFCTEVfVEVYVF9HQVAgKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkUpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGdldFRleHRFbGxpcHNpcyhkb3RNYXhUZXh0V2lkdGgpLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9ycy5ncmF5ODAwXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5waWVjZTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9QSUVDRV9XSURUSCkgLyAyIC0gQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IEFJX1RBQkxFX1BJRUNFX1dJRFRILFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9QSUVDRV9XSURUSCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUElFQ0VfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogYmFja2dyb3VuZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9QSUVDRV9XSURUSCArIEFJX1RBQkxFX1RFWFRfR0FQICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0RWxsaXBzaXMoZG90TWF4VGV4dFdpZHRoKS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcnMuZ3JheTgwMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIChBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9UQUdfUEFERElORyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dFdpZHRoLCB0ZXh0IH0gPSBnZXRUZXh0RWxsaXBzaXMobWF4VGV4dFdpZHRoLCBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCh0ZXh0V2lkdGggKyAyICogQUlfVEFCTEVfVEFHX1BBRERJTkcsIEFJX1RBQkxFX0NFTExfTVVMVElfSVRFTV9NSU5fV0lEVEgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogY29sb3JzLndoaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IGJhY2tncm91bmRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRNYXhUZXh0V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0RWxsaXBzaXModGV4dE1heFRleHRXaWR0aCkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3JzLmdyYXk4MDBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsRGF0ZShyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IGFueSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHRyYW5zZm9ybVZhbHVlLCBjb2x1bW5XaWR0aCwgc3R5bGUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgY29sb3JzID0gQUlUYWJsZS5nZXRDb2xvcnMoKTtcbiAgICAgICAgbGV0IGNlbGxUZXh0ID0gdHJhbnNmb3JtVmFsdWU7XG5cbiAgICAgICAgaWYgKGNlbGxUZXh0ID09IG51bGwgfHwgIV8uaXNTdHJpbmcoY2VsbFRleHQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0TWF4V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gdGhpcy50ZXh0RWxsaXBzaXMoeyB0ZXh0OiBjZWxsVGV4dCwgbWF4V2lkdGg6IGNvbHVtbldpZHRoICYmIHRleHRNYXhXaWR0aCB9KTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY29uc3QgY29sb3IgPSBzdHlsZT8uY29sb3IgfHwgY29sb3JzLmdyYXk4MDA7XG4gICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgeTogeSArIEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLyAyLFxuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcixcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBzdHlsZT8uZm9udFdlaWdodCxcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbFJhdGUocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZTogX2NlbGxWYWx1ZSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCBtYXggPSA1O1xuICAgICAgICBjb25zdCBjZWxsVmFsdWUgPSBfY2VsbFZhbHVlIGFzIFJhdGVGaWVsZFZhbHVlO1xuICAgICAgICBjb25zdCBzaXplID0gQUlfVEFCTEVfQ0VMTF9FTU9KSV9TSVpFO1xuICAgICAgICBjb25zdCBpc0VtcHR5ID0gaXNOaWwoY2VsbFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIFsuLi5BcnJheShtYXgpLmtleXMoKV0ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbmRleCArIDE7XG4gICAgICAgICAgICBjb25zdCBjaGVja2VkID0gdmFsdWUgPD0gY2VsbFZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaWNvblggPSBpbmRleCAqIHNpemUgKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBpbmRleCAqIEFJX1RBQkxFX0NFTExfRU1PSklfUEFERElORztcbiAgICAgICAgICAgIGNvbnN0IGljb25ZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBzaXplKSAvIDI7XG5cbiAgICAgICAgICAgIGlmIChjdHggJiYgKGNoZWNrZWQgfHwgaXNFbXB0eSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGgoe1xuICAgICAgICAgICAgICAgICAgICB4OiB4ICsgaWNvblgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyBpY29uWSxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogMjIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IFN0YXJGaWxsLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBpc0VtcHR5ID8gdGhpcy5jb2xvcnMuZ3JheTEwMCA6IHRoaXMuY29sb3JzLndhcmluZyxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVYOiAxLjE0LFxuICAgICAgICAgICAgICAgICAgICBzY2FsZVk6IDEuMTRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsUHJvZ3Jlc3MocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSwgY29sdW1uV2lkdGgsIHN0eWxlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG4gICAgICAgIGxldCBjZWxsVmFsdWUgPSB0cmFuc2Zvcm1WYWx1ZTtcbiAgICAgICAgaWYgKGlzTmlsKGNlbGxWYWx1ZSkpIHtcbiAgICAgICAgICAgIGNlbGxWYWx1ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfLmlzTnVtYmVyKGNlbGxWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3aWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyAtIEFJX1RBQkxFX1BST0dSRVNTX1RFWFRfV2lkdGg7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IEFJX1RBQkxFX1BST0dSRVNTX0JBUl9IRUlHSFQ7XG4gICAgICAgIGNvbnN0IHRleHRIZWlnaHQgPSBBSV9UQUJMRV9DT01NT05fRk9OVF9TSVpFO1xuICAgICAgICBjb25zdCBvZmZzZXRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCBvZmZzZXRZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9QUk9HUkVTU19CQVJfSEVJR0hUKSAvIDI7XG4gICAgICAgIGNvbnN0IHRleHRPZmZzZXRZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSB0ZXh0SGVpZ2h0KSAvIDI7XG5cbiAgICAgICAgLy8g57uY5Yi26IOM5pmvXG4gICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICB4OiB4ICsgb2Zmc2V0WCxcbiAgICAgICAgICAgIHk6IHkgKyBvZmZzZXRZLFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BST0dSRVNTX0JBUl9SQURJVVMsXG4gICAgICAgICAgICBmaWxsOiBjb2xvcnMuZ3JheTIwMFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyDorqHnrpflubbnu5jliLbov5vluqZcbiAgICAgICAgY29uc3QgcHJvZ3Jlc3NXaWR0aCA9IChjZWxsVmFsdWUgLyAxMDApICogd2lkdGg7XG4gICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICB4OiB4ICsgb2Zmc2V0WCxcbiAgICAgICAgICAgIHk6IHkgKyBvZmZzZXRZLFxuICAgICAgICAgICAgd2lkdGg6IHByb2dyZXNzV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BST0dSRVNTX0JBUl9SQURJVVMsXG4gICAgICAgICAgICBmaWxsOiBjb2xvcnMuc3VjY2Vzc1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgeDogeCArIG9mZnNldFggKyB3aWR0aCArIEFJX1RBQkxFX1RFWFRfR0FQLFxuICAgICAgICAgICAgeTogeSArIHRleHRPZmZzZXRZLFxuICAgICAgICAgICAgdGV4dDogYCR7Y2VsbFZhbHVlfSVgLFxuICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcnMuZ3JheTgwMFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxNZW1iZXIocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyByZWZlcmVuY2VzLCB4LCB5LCBmaWVsZCwgdHJhbnNmb3JtVmFsdWU6IF9jZWxsVmFsdWUsIHJvd0hlaWdodCwgY29sdW1uV2lkdGgsIGlzQWN0aXZlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGNlbGxWYWx1ZSA9IF9jZWxsVmFsdWU7XG5cbiAgICAgICAgaWYgKCFjZWxsVmFsdWU/Lmxlbmd0aCB8fCAhcmVmZXJlbmNlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gZmllbGQuc2V0dGluZ3MgYXMgTWVtYmVyU2V0dGluZ3M7XG4gICAgICAgIGNvbnN0IGF2YXRhclNpemUgPSBBSV9UQUJMRV9NRU1CRVJfQVZBVEFSX1NJWkU7XG4gICAgICAgIGNvbnN0IGl0ZW1IZWlnaHQgPSBBSV9UQUJMRV9DRUxMX01FTUJFUl9JVEVNX0hFSUdIVDtcbiAgICAgICAgY29uc3QgaXNPcGVyYXRpbmcgPSBpc0FjdGl2ZTtcbiAgICAgICAgY29uc3QgaXNNdWx0aXBsZSA9IHNldHRpbmdzPy5pc19tdWx0aXBsZTtcblxuICAgICAgICBsZXQgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGxldCBjdXJyZW50WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gYXZhdGFyU2l6ZSkgLyAyO1xuICAgICAgICBjb25zdCBpdGVtT3RoZXJXaWR0aCA9IGF2YXRhclNpemUgKyBBSV9UQUJMRV9NRU1CRVJfSVRFTV9BVkFUQVJfTUFSR0lOX1JJR0hUO1xuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSBpc0FjdGl2ZSA/IDEzMCAtIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19UT1AgOiByb3dIZWlnaHQgLSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QO1xuICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBpc09wZXJhdGluZ1xuICAgICAgICAgICAgPyBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aCAtIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkUgLSAxMlxuICAgICAgICAgICAgOiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aDtcblxuICAgICAgICBjb25zdCBsaXN0Q291bnQgPSBjZWxsVmFsdWUubGVuZ3RoO1xuICAgICAgICBsZXQgaXNPdmVyZmxvdyA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaXN0Q291bnQ7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJJbmZvID0gcmVmZXJlbmNlcz8ubWVtYmVyc1tjZWxsVmFsdWVbaW5kZXhdXTtcbiAgICAgICAgICAgIGlmICghdXNlckluZm8pIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCB7IHVpZCwgZGlzcGxheV9uYW1lLCBhdmF0YXIgfSA9IHVzZXJJbmZvO1xuICAgICAgICAgICAgY29uc3QgaXRlbVdpZHRoID0gQUlUYWJsZUF2YXRhclNpemUuc2l6ZTI0ICsgKGlzTXVsdGlwbGUgPyBBSV9UQUJMRV9DRUxMX01FTUJFUl9JVEVNX1BBRERJTkcgOiAwKTtcblxuICAgICAgICAgICAgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBpbmRleCAqIGl0ZW1XaWR0aDtcblxuICAgICAgICAgICAgbGV0IHJlYWxNYXhUZXh0V2lkdGggPSBtYXhUZXh0V2lkdGggPCAwID8gMCA6IG1heFRleHRXaWR0aDtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBpc09wZXJhdGluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdGluZ01heFdpZHRoID0gbWF4VGV4dFdpZHRoIC0gKEFJX1RBQkxFX0NFTExfQUREX0lURU1fQlVUVE9OX1NJWkUgKyA0KTtcbiAgICAgICAgICAgICAgICAvLyBpdGVtIE5vIHNwYWNlIHRvIGRpc3BsYXksIHRoZW4gcGVyZm9ybSBhIGxpbmUgZmVlZFxuICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpbmdNYXhXaWR0aCA8PSAyMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01BUkdJTl9UT1A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbE1heFRleHRXaWR0aCA9IG9wZXJhdGluZ01heFdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlzTW9yZSA9IGN1cnJlbnRYICsgaXRlbVdpZHRoID4gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgaWYgKGNvbHVtbldpZHRoICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyDlnKjpnZ7mtLvliqjnirbmgIHkuIvvvIzlvZPotoXlh7rliJflrr3ml7bvvIzkuI3kvJrmuLLmn5PlkI7nu63lhoXlrrlcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggPj0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzkuI3mmK/pnZ7mtLvliqjnirbmgIHnmoTmnIDlkI7kuIDooYzvvIzliJnmjaLooYzmuLLmn5PmuqLlh7rlhoXlrrlcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggPiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50WCArIGl0ZW1XaWR0aCA+IGNvbHVtbldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBpdGVtSGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFkgPj0gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlzT3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXZhdGFyKHtcbiAgICAgICAgICAgICAgICAgICAgeDogeCArIGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgY3VycmVudFksXG4gICAgICAgICAgICAgICAgICAgIHVybDogYXZhdGFyISxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHVpZCEsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRBdmF0YXJTaG9ydE5hbWUoZGlzcGxheV9uYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgYmdDb2xvcjogZ2V0QXZhdGFyQmdDb2xvcihkaXNwbGF5X25hbWUhKSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogQUlUYWJsZUF2YXRhclR5cGUubWVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBzaXplOiBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjRcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIOWcqOmdnuWkmumAieaooeW8j+S4i+aYvuekuuWQjeensFxuICAgICAgICAgICAgICAgIGlmICghaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0WCA9IHggKyBjdXJyZW50WCArIEFJVGFibGVBdmF0YXJTaXplLnNpemUyNCArIEFJX1RBQkxFX01FTUJFUl9JVEVNX0FWQVRBUl9NQVJHSU5fUklHSFQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB0ZXh0WCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBkaXNwbGF5X25hbWUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG1heFRleHRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogdGhpcy5jb2xvcnMuZ3JheTgwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9DT01NT05fRk9OVF9TSVpFLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNNb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDAuMztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyBjdXJyZW50WSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJVGFibGVBdmF0YXJTaXplLnNpemUyNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiB0aGlzLmNvbG9ycy5ibGFja1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBjdXJyZW50WCArIEZPTlRfU0laRV9TTSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IHRoaXMuY29sb3JzLndoaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEZPTlRfU0laRV9TTSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGArJHtsaXN0Q291bnQgLSBpbmRleCAtIDF9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsQXR0YWNobWVudChyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB7IHJlZmVyZW5jZXMsIHgsIHksIGZpZWxkLCB0cmFuc2Zvcm1WYWx1ZTogX2NlbGxWYWx1ZSwgcm93SGVpZ2h0LCBjb2x1bW5XaWR0aCwgaXNBY3RpdmUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgY2VsbFZhbHVlID0gX2NlbGxWYWx1ZSB8fCBbXTtcblxuICAgICAgICBjb25zdCBmaWxlSWNvblNpemUgPSBBSV9UQUJMRV9GSUxFX0lDT05fU0laRTtcbiAgICAgICAgY29uc3QgaXRlbUhlaWdodCA9IEFJX1RBQkxFX0ZJTEVfSUNPTl9JVEVNX0hFSUdIVDtcbiAgICAgICAgY29uc3QgaXNPcGVyYXRpbmcgPSBpc0FjdGl2ZTtcblxuICAgICAgICBsZXQgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGxldCBjdXJyZW50WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gaXRlbUhlaWdodCkgLyAyO1xuICAgICAgICBjb25zdCBpdGVtT3RoZXJXaWR0aCA9IGZpbGVJY29uU2l6ZSArIEFJX1RBQkxFX0ZJRUxEX0lURU1fTUFSR0lOX1JJR0hUO1xuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSBpc0FjdGl2ZSA/IDEzMCAtIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19UT1AgOiByb3dIZWlnaHQgLSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QO1xuICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBpc09wZXJhdGluZ1xuICAgICAgICAgICAgPyBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aCAtIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkUgLSAxMlxuICAgICAgICAgICAgOiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aDtcblxuICAgICAgICBjb25zdCBsaXN0Q291bnQgPSBjZWxsVmFsdWUubGVuZ3RoO1xuICAgICAgICBsZXQgaXNPdmVyZmxvdyA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaXN0Q291bnQ7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRJbmZvID0gcmVmZXJlbmNlcz8uYXR0YWNobWVudHNbY2VsbFZhbHVlW2luZGV4XV07XG4gICAgICAgICAgICBpZiAoIWF0dGFjaG1lbnRJbmZvKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IHsgdGl0bGUsIGFkZGl0aW9uIH0gPSBhdHRhY2htZW50SW5mbztcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IEFJX1RBQkxFX0ZJTEVfSUNPTl9TSVpFICsgQUlfVEFCTEVfRklFTERfSVRFTV9NQVJHSU5fUklHSFQ7XG4gICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORyArIGluZGV4ICogaXRlbVdpZHRoO1xuICAgICAgICAgICAgbGV0IHJlYWxNYXhUZXh0V2lkdGggPSBtYXhUZXh0V2lkdGggPCAwID8gMCA6IG1heFRleHRXaWR0aDtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBpc09wZXJhdGluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdGluZ01heFdpZHRoID0gbWF4VGV4dFdpZHRoIC0gKEFJX1RBQkxFX0NFTExfQUREX0lURU1fQlVUVE9OX1NJWkUgKyA0KTtcbiAgICAgICAgICAgICAgICAvLyBpdGVtIE5vIHNwYWNlIHRvIGRpc3BsYXksIHRoZW4gcGVyZm9ybSBhIGxpbmUgZmVlZFxuICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpbmdNYXhXaWR0aCA8PSAyMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01BUkdJTl9UT1A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbE1heFRleHRXaWR0aCA9IG9wZXJhdGluZ01heFdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2x1bW5XaWR0aCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8g5Zyo6Z2e5rS75Yqo54q25oCB5LiL77yM5b2T6LaF5Ye65YiX5a695pe277yM5LiN5Lya5riy5p+T5ZCO57ut5YaF5a65XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRYID49IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5LiN5piv6Z2e5rS75Yqo54q25oCB55qE5pyA5ZCO5LiA6KGM77yM5YiZ5o2i6KGM5riy5p+T5rqi5Ye65YaF5a65XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRYID4gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggKyBpdGVtV2lkdGggPiBjb2x1bW5XaWR0aCAtIEFJX1RBQkxFX0NFTExfUEFERElORykge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gaXRlbUhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRZID49IG1heEhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBpc092ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdmdTdHJpbmcgPSBnZXRGaWxlVGh1bWJuYWlsU3ZnU3RyaW5nKGFkZGl0aW9uPy5leHQpO1xuICAgICAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICBpbWcuc3JjID0gYGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCR7ZW5jb2RlVVJJQ29tcG9uZW50KHN2Z1N0cmluZyl9YDtcbiAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogaW1nLnNyYyxcbiAgICAgICAgICAgICAgICAgICAgeDogeCArIGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgY3VycmVudFksXG4gICAgICAgICAgICAgICAgICAgIHVybDogaW1nLnNyYyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IEFJX1RBQkxFX0ZJTEVfSUNPTl9TSVpFLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX0ZJTEVfSUNPTl9TSVpFXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBjZWxsRHJhd2VyID0gbmV3IENlbGxEcmF3ZXIoKTtcbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3R5cGVzL2NlbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBLb252YSBmcm9tICdrb252YSc7XG5pbXBvcnQgeyBBSVRhYmxlLCBBSVRhYmxlRmllbGQsIENvb3JkaW5hdGUsIEZpZWxkVmFsdWUgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVSZWZlcmVuY2VzIH0gZnJvbSAnLi9ncmlkJztcbmltcG9ydCB7IEFJVGFibGVMaW5lYXJSb3dSZWNvcmQgfSBmcm9tICcuL3Jvdyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZUNlbGxzQ29uZmlnIHtcbiAgICBhaVRhYmxlOiBBSVRhYmxlO1xuICAgIGNvb3JkaW5hdGU6IENvb3JkaW5hdGU7XG4gICAgcm93U3RhcnRJbmRleDogbnVtYmVyO1xuICAgIHJvd1N0b3BJbmRleDogbnVtYmVyO1xuICAgIGNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBjb2x1bW5TdG9wSW5kZXg6IG51bWJlcjtcbiAgICByZWZlcmVuY2VzPzogQUlUYWJsZVJlZmVyZW5jZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZUNlbGxzRHJhd2VyQ29uZmlnIGV4dGVuZHMgQUlUYWJsZUNlbGxzQ29uZmlnIHtcbiAgICBjdHg6IEtvbnZhLkNvbnRleHQgfCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZVJlbmRlciB7XG4gICAgYWlUYWJsZTogQUlUYWJsZTtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIGNvbHVtbldpZHRoOiBudW1iZXI7XG4gICAgcm93SGVpZ2h0OiBudW1iZXI7XG4gICAgcmVjb3JkSWQ6IHN0cmluZztcbiAgICBmaWVsZDogQUlUYWJsZUZpZWxkO1xuICAgIGNlbGxWYWx1ZTogRmllbGRWYWx1ZTtcbiAgICB0cmFuc2Zvcm1WYWx1ZTogYW55O1xuICAgIGlzQWN0aXZlOiBib29sZWFuO1xuICAgIHN0eWxlOiBBSVRhYmxlUmVuZGVyU3R5bGU7XG4gICAgcmVmZXJlbmNlcz86IEFJVGFibGVSZWZlcmVuY2VzO1xuICAgIHpJbmRleD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlUmVuZGVyU3R5bGUge1xuICAgIGNvbG9yPzogc3RyaW5nO1xuICAgIHRleHRBbGlnbj86ICdsZWZ0JyB8ICdyaWdodCcgfCAnY2VudGVyJyB8ICdzdGFydCcgfCAnZW5kJztcbiAgICBmb250V2VpZ2h0PzogJ25vcm1hbCcgfCAnYm9sZCcgfCAnYm9sZGVyJyB8ICdsaWdodGVyJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlQ2VsbCB7XG4gICAgcm93OiBBSVRhYmxlTGluZWFyUm93UmVjb3JkO1xuICAgIHN0eWxlPzogYW55O1xuICAgIGlzSG92ZXJSb3c6IGJvb2xlYW47XG4gICAgaXNDaGVja2VkUm93OiBib29sZWFuO1xuICAgIHdpZHRoPzogbnVtYmVyO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3R5cGVzL2NlbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBLb252YSBmcm9tICdrb252YSc7XG5pbXBvcnQgeyBBSVRhYmxlLCBBSVRhYmxlRmllbGQsIENvb3JkaW5hdGUsIEZpZWxkVmFsdWUgfSBmcm9tICcuLi9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVSZWZlcmVuY2VzIH0gZnJvbSAnLi9ncmlkJztcbmltcG9ydCB7IEFJVGFibGVMaW5lYXJSb3dSZWNvcmQgfSBmcm9tICcuL3Jvdyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZUNlbGxzQ29uZmlnIHtcbiAgICBhaVRhYmxlOiBBSVRhYmxlO1xuICAgIGNvb3JkaW5hdGU6IENvb3JkaW5hdGU7XG4gICAgcm93U3RhcnRJbmRleDogbnVtYmVyO1xuICAgIHJvd1N0b3BJbmRleDogbnVtYmVyO1xuICAgIGNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBjb2x1bW5TdG9wSW5kZXg6IG51bWJlcjtcbiAgICByZWZlcmVuY2VzPzogQUlUYWJsZVJlZmVyZW5jZXM7XG4gICAgcmVhZG9ubHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVDZWxsc0RyYXdlckNvbmZpZyBleHRlbmRzIEFJVGFibGVDZWxsc0NvbmZpZyB7XG4gICAgY3R4OiBLb252YS5Db250ZXh0IHwgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVSZW5kZXIge1xuICAgIGFpVGFibGU6IEFJVGFibGU7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICBjb2x1bW5XaWR0aDogbnVtYmVyO1xuICAgIHJvd0hlaWdodDogbnVtYmVyO1xuICAgIHJlY29yZElkOiBzdHJpbmc7XG4gICAgZmllbGQ6IEFJVGFibGVGaWVsZDtcbiAgICBjZWxsVmFsdWU6IEZpZWxkVmFsdWU7XG4gICAgdHJhbnNmb3JtVmFsdWU6IGFueTtcbiAgICBpc0FjdGl2ZTogYm9vbGVhbjtcbiAgICBzdHlsZTogQUlUYWJsZVJlbmRlclN0eWxlO1xuICAgIHJlZmVyZW5jZXM/OiBBSVRhYmxlUmVmZXJlbmNlcztcbiAgICB6SW5kZXg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZVJlbmRlclN0eWxlIHtcbiAgICBjb2xvcj86IHN0cmluZztcbiAgICB0ZXh0QWxpZ24/OiAnbGVmdCcgfCAncmlnaHQnIHwgJ2NlbnRlcicgfCAnc3RhcnQnIHwgJ2VuZCc7XG4gICAgZm9udFdlaWdodD86ICdub3JtYWwnIHwgJ2JvbGQnIHwgJ2JvbGRlcicgfCAnbGlnaHRlcic7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZUNlbGwge1xuICAgIHJvdzogQUlUYWJsZUxpbmVhclJvd1JlY29yZDtcbiAgICBzdHlsZT86IGFueTtcbiAgICBpc0hvdmVyUm93OiBib29sZWFuO1xuICAgIGlzQ2hlY2tlZFJvdzogYm9vbGVhbjtcbiAgICB3aWR0aD86IG51bWJlcjtcbn1cbiJdfQ==
@@ -4,4 +4,4 @@ export var AITableMouseDownType;
4
4
  AITableMouseDownType[AITableMouseDownType["Center"] = 1] = "Center";
5
5
  AITableMouseDownType[AITableMouseDownType["Right"] = 2] = "Right";
6
6
  })(AITableMouseDownType || (AITableMouseDownType = {}));
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3R5cGVzL2NvbXBvbmVudC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUVBLE1BQU0sQ0FBTixJQUFZLG9CQUlYO0FBSkQsV0FBWSxvQkFBb0I7SUFDNUIsK0RBQUksQ0FBQTtJQUNKLG1FQUFNLENBQUE7SUFDTixpRUFBSyxDQUFBO0FBQ1QsQ0FBQyxFQUpXLG9CQUFvQixLQUFwQixvQkFBb0IsUUFJL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgS29udmEgZnJvbSAna29udmEnO1xuaW1wb3J0IHsgQUlUYWJsZSwgQUlUYWJsZUZpZWxkLCBDb29yZGluYXRlIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlUG9pbnRQb3NpdGlvbiB9IGZyb20gJy4vZ3JpZCc7XG5pbXBvcnQgeyBBSVRhYmxlUmVuZGVyIH0gZnJvbSAnLi9jZWxsJztcblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlSWNvbkNvbmZpZyBleHRlbmRzIEtvbnZhLlNoYXBlQ29uZmlnIHtcbiAgICBzaXplPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVGaWVsZFR5cGVJY29uQ29uZmlnIHtcbiAgICBmaWVsZDogQUlUYWJsZUZpZWxkO1xuICAgIHg/OiBudW1iZXI7XG4gICAgeT86IG51bWJlcjtcbiAgICB3aWR0aD86IG51bWJlcjtcbiAgICBoZWlnaHQ/OiBudW1iZXI7XG4gICAgZmlsbD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlRmllbGRIZWFkQ29uZmlnIHtcbiAgICB4PzogbnVtYmVyO1xuICAgIHk/OiBudW1iZXI7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICBmaWVsZDogQUlUYWJsZUZpZWxkO1xuICAgIHN0cm9rZT86IHN0cmluZztcbiAgICBpY29uVmlzaWJsZT86IGJvb2xlYW47XG4gICAgaXNTZWxlY3RlZD86IGJvb2xlYW47XG4gICAgaXNIb3Zlckljb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVDb2x1bW5IZWFkc0NvbmZpZyB7XG4gICAgYWlUYWJsZTogQUlUYWJsZTtcbiAgICBjb29yZGluYXRlOiBDb29yZGluYXRlO1xuICAgIGNvbHVtblN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBjb2x1bW5TdG9wSW5kZXg6IG51bWJlcjtcbiAgICBwb2ludFBvc2l0aW9uOiBBSVRhYmxlUG9pbnRQb3NpdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlQWRkRmllbGRDb25maWcge1xuICAgIGFpVGFibGU6IEFJVGFibGU7XG4gICAgY29vcmRpbmF0ZTogQ29vcmRpbmF0ZTtcbiAgICBmaWVsZHM6IEFJVGFibGVGaWVsZFtdO1xuICAgIGNvbHVtblN0b3BJbmRleDogbnVtYmVyO1xuICAgIHBvaW50UG9zaXRpb246IEFJVGFibGVQb2ludFBvc2l0aW9uO1xuICAgIHJlYWRvbmx5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlSG92ZXJDZWxsQ29uZmlnIHtcbiAgICBhaVRhYmxlOiBBSVRhYmxlO1xuICAgIGNvb3JkaW5hdGU6IENvb3JkaW5hdGU7XG4gICAgZmllbGQ6IEFJVGFibGVGaWVsZDtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIHJlbmRlcjogQUlUYWJsZVJlbmRlcjtcbiAgICByZWFkb25seT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZVRhcmdldE5hbWVPcHRpb25zIHtcbiAgICB0YXJnZXROYW1lOiBzdHJpbmc7XG4gICAgZmllbGRJZD86IHN0cmluZztcbiAgICByZWNvcmRJZD86IHN0cmluZztcbiAgICBtb3VzZVN0eWxlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVUYXJnZXROYW1lRGV0YWlsIHtcbiAgICB0YXJnZXROYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgIGZpZWxkSWQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIHJlY29yZElkPzogc3RyaW5nIHwgbnVsbDtcbiAgICBtb3VzZVN0eWxlPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGVudW0gQUlUYWJsZU1vdXNlRG93blR5cGUge1xuICAgIExlZnQsXG4gICAgQ2VudGVyLFxuICAgIFJpZ2h0XG59XG4iXX0=
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3R5cGVzL2NvbXBvbmVudC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUZBLE1BQU0sQ0FBTixJQUFZLG9CQUlYO0FBSkQsV0FBWSxvQkFBb0I7SUFDNUIsK0RBQUksQ0FBQTtJQUNKLG1FQUFNLENBQUE7SUFDTixpRUFBSyxDQUFBO0FBQ1QsQ0FBQyxFQUpXLG9CQUFvQixLQUFwQixvQkFBb0IsUUFJL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgS29udmEgZnJvbSAna29udmEnO1xuaW1wb3J0IHsgQUlUYWJsZSwgQUlUYWJsZUZpZWxkLCBDb29yZGluYXRlIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlQXR0YWNobWVudEluZm8sIEFJVGFibGVQb2ludFBvc2l0aW9uIH0gZnJvbSAnLi9ncmlkJztcbmltcG9ydCB7IEFJVGFibGVSZW5kZXIgfSBmcm9tICcuL2NlbGwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVJY29uQ29uZmlnIGV4dGVuZHMgS29udmEuU2hhcGVDb25maWcge1xuICAgIHNpemU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZUFjdGlvbkljb25Db25maWcgZXh0ZW5kcyBBSVRhYmxlSWNvbkNvbmZpZyB7XG4gICAgY29vcmRpbmF0ZTogQ29vcmRpbmF0ZTtcbiAgICBob3ZlckJhY2tncm91bmQ/OiBzdHJpbmc7XG4gICAgaG92ZXJGaWxsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVBdHRhY2htZW50Q29uZmlnIGV4dGVuZHMgS29udmEuU2hhcGVDb25maWcge1xuICAgIGNvb3JkaW5hdGU6IENvb3JkaW5hdGU7XG4gICAgYXR0YWNobWVudEluZm86IEFJVGFibGVBdHRhY2htZW50SW5mbztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlRmllbGRUeXBlSWNvbkNvbmZpZyB7XG4gICAgZmllbGQ6IEFJVGFibGVGaWVsZDtcbiAgICB4PzogbnVtYmVyO1xuICAgIHk/OiBudW1iZXI7XG4gICAgd2lkdGg/OiBudW1iZXI7XG4gICAgaGVpZ2h0PzogbnVtYmVyO1xuICAgIGZpbGw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZUZpZWxkSGVhZENvbmZpZyB7XG4gICAgeD86IG51bWJlcjtcbiAgICB5PzogbnVtYmVyO1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgZmllbGQ6IEFJVGFibGVGaWVsZDtcbiAgICBzdHJva2U/OiBzdHJpbmc7XG4gICAgaWNvblZpc2libGU/OiBib29sZWFuO1xuICAgIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIGlzSG92ZXJJY29uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlQ29sdW1uSGVhZHNDb25maWcge1xuICAgIGFpVGFibGU6IEFJVGFibGU7XG4gICAgY29vcmRpbmF0ZTogQ29vcmRpbmF0ZTtcbiAgICBjb2x1bW5TdGFydEluZGV4OiBudW1iZXI7XG4gICAgY29sdW1uU3RvcEluZGV4OiBudW1iZXI7XG4gICAgcG9pbnRQb3NpdGlvbjogQUlUYWJsZVBvaW50UG9zaXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZUFkZEZpZWxkQ29uZmlnIHtcbiAgICBhaVRhYmxlOiBBSVRhYmxlO1xuICAgIGNvb3JkaW5hdGU6IENvb3JkaW5hdGU7XG4gICAgZmllbGRzOiBBSVRhYmxlRmllbGRbXTtcbiAgICBjb2x1bW5TdG9wSW5kZXg6IG51bWJlcjtcbiAgICBwb2ludFBvc2l0aW9uOiBBSVRhYmxlUG9pbnRQb3NpdGlvbjtcbiAgICByZWFkb25seT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZUhvdmVyQ2VsbENvbmZpZyB7XG4gICAgYWlUYWJsZTogQUlUYWJsZTtcbiAgICBjb29yZGluYXRlOiBDb29yZGluYXRlO1xuICAgIGZpZWxkOiBBSVRhYmxlRmllbGQ7XG4gICAgcmVjb3JkSWQ/OiBzdHJpbmc7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICByZW5kZXI6IEFJVGFibGVSZW5kZXI7XG4gICAgcmVhZG9ubHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVUYXJnZXROYW1lT3B0aW9ucyB7XG4gICAgdGFyZ2V0TmFtZTogc3RyaW5nO1xuICAgIGZpZWxkSWQ/OiBzdHJpbmc7XG4gICAgcmVjb3JkSWQ/OiBzdHJpbmc7XG4gICAgbW91c2VTdHlsZT86IHN0cmluZztcbiAgICBzb3VyY2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZVRhcmdldE5hbWVEZXRhaWwge1xuICAgIHRhcmdldE5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgZmllbGRJZD86IHN0cmluZyB8IG51bGw7XG4gICAgcmVjb3JkSWQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIG1vdXNlU3R5bGU/OiBzdHJpbmcgfCBudWxsO1xuICAgIHNvdXJjZT86IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBlbnVtIEFJVGFibGVNb3VzZURvd25UeXBlIHtcbiAgICBMZWZ0LFxuICAgIENlbnRlcixcbiAgICBSaWdodFxufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy90eXBlcy9maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlLCBBSVRhYmxlRmllbGQsIFNlbGVjdFNldHRpbmdzIH0gZnJvbSAnLi4vY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZUZpZWxkTWVudUl0ZW0ge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIGljb24/OiBzdHJpbmc7XG4gICAgZXhlYz86IChcbiAgICAgICAgYWlUYWJsZTogQUlUYWJsZSxcbiAgICAgICAgZmllbGQ6IFNpZ25hbDxBSVRhYmxlRmllbGQ+LFxuICAgICAgICBvcmlnaW4/OiBIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWY8YW55PixcbiAgICAgICAgcG9zaXRpb24/OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH1cbiAgICApID0+IGFueTtcbiAgICBoaWRkZW4/OiAoYWlUYWJsZTogQUlUYWJsZSwgZmllbGQ6IFNpZ25hbDxBSVRhYmxlRmllbGQ+KSA9PiBib29sZWFuO1xuICAgIGRpc2FibGVkPzogKGFpVGFibGU6IEFJVGFibGUsIGZpZWxkOiBTaWduYWw8QUlUYWJsZUZpZWxkPikgPT4gYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlU2VsZWN0RmllbGQgZXh0ZW5kcyBBSVRhYmxlRmllbGQge1xuICAgIHNldHRpbmdzOiBTZWxlY3RTZXR0aW5ncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlRWRpdEZpZWxkT3B0aW9ucyB7XG4gICAgZmllbGQ6IEFJVGFibGVGaWVsZDtcbiAgICBpc1VwZGF0ZTogYm9vbGVhbjtcbiAgICBvcmlnaW46IEhUTUxFbGVtZW50IHwgRWxlbWVudFJlZjxhbnk+O1xuICAgIHBvc2l0aW9uPzogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVGaWVsZE1lbnVPcHRpb25zIHtcbiAgICBmaWVsZElkOiBzdHJpbmc7XG4gICAgZmllbGRNZW51czogQUlUYWJsZUZpZWxkTWVudUl0ZW1bXTtcbiAgICBlZGl0T3JpZ2luPzogYW55O1xuICAgIG9yaWdpbj86IGFueTtcbiAgICBwb3NpdGlvbj86IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTtcbiAgICBlZGl0RmllbGRQb3NpdGlvbj86IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy90eXBlcy9maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlLCBBSVRhYmxlRmllbGQsIFNlbGVjdFNldHRpbmdzIH0gZnJvbSAnLi4vY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlUYWJsZUZpZWxkTWVudUl0ZW0ge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nIHwgKChmaWVsZDogQUlUYWJsZUZpZWxkKSA9PiBzdHJpbmcpO1xuICAgIGljb24/OiBzdHJpbmc7XG4gICAgZXhlYz86IChcbiAgICAgICAgYWlUYWJsZTogQUlUYWJsZSxcbiAgICAgICAgZmllbGQ6IFNpZ25hbDxBSVRhYmxlRmllbGQ+LFxuICAgICAgICBvcmlnaW4/OiBIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWY8YW55PixcbiAgICAgICAgcG9zaXRpb24/OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH1cbiAgICApID0+IGFueTtcbiAgICBoaWRkZW4/OiAoYWlUYWJsZTogQUlUYWJsZSwgZmllbGQ6IFNpZ25hbDxBSVRhYmxlRmllbGQ+KSA9PiBib29sZWFuO1xuICAgIGRpc2FibGVkPzogKGFpVGFibGU6IEFJVGFibGUsIGZpZWxkOiBTaWduYWw8QUlUYWJsZUZpZWxkPikgPT4gYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlU2VsZWN0RmllbGQgZXh0ZW5kcyBBSVRhYmxlRmllbGQge1xuICAgIHNldHRpbmdzOiBTZWxlY3RTZXR0aW5ncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlRWRpdEZpZWxkT3B0aW9ucyB7XG4gICAgZmllbGQ6IEFJVGFibGVGaWVsZDtcbiAgICBpc1VwZGF0ZTogYm9vbGVhbjtcbiAgICBvcmlnaW46IEhUTUxFbGVtZW50IHwgRWxlbWVudFJlZjxhbnk+O1xuICAgIHBvc2l0aW9uPzogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVGaWVsZE1lbnVPcHRpb25zIHtcbiAgICBmaWVsZElkOiBzdHJpbmc7XG4gICAgZmllbGRNZW51czogQUlUYWJsZUZpZWxkTWVudUl0ZW1bXTtcbiAgICBlZGl0T3JpZ2luPzogYW55O1xuICAgIG9yaWdpbj86IGFueTtcbiAgICBwb3NpdGlvbj86IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTtcbiAgICBlZGl0RmllbGRQb3NpdGlvbj86IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTtcbn1cbiJdfQ==
@@ -128,7 +128,8 @@ function appendRecord(aiTable, actions) {
128
128
  });
129
129
  }
130
130
  function appendField(aiTable, originField, actions) {
131
- const lastFieldId = aiTable.fields().length > 0 ? aiTable.fields()[aiTable.fields().length - 1]._id : '';
131
+ const fields = aiTable.gridData().fields;
132
+ const lastFieldId = fields.length > 0 ? fields[fields.length - 1]._id : '';
132
133
  let defaultFieldValue;
133
134
  if (originField) {
134
135
  defaultFieldValue = {
@@ -193,4 +194,4 @@ export const writeToAITable = async (aiTable, actions) => {
193
194
  });
194
195
  return isPasteSuccess;
195
196
  };
196
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy91dGlscy9jbGlwYm9hcmQvcGFzdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILE9BQU8sRUFFUCxnQkFBZ0IsRUFFaEIsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QixZQUFZLEVBRVosYUFBYSxFQUNiLFNBQVMsRUFHWixNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsd0JBQXdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdwRSxNQUFNLHVCQUF1QixHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsd0JBQXdCLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUV2RixNQUFNLHVCQUF1QixHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUU7SUFDaEQsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3pELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFFRixTQUFTLCtCQUErQixDQUFDLGFBQXFCO0lBQzFELE1BQU0sUUFBUSxHQUFHLGFBQWE7U0FDekIsS0FBSyxDQUFDLElBQUksQ0FBQztTQUNYLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENB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QUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxjQUFjLENBQUM7QUFDMUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQUlUYWJsZUNvbnRlbnQsIEFJVGFibGVSZWZlcmVuY2VzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgICBBSVRhYmxlLFxuICAgIEFJVGFibGVGaWVsZCxcbiAgICBBSVRhYmxlRmllbGRUeXBlLFxuICAgIEFJVGFibGVSZWNvcmQsXG4gICAgY3JlYXRlRGVmYXVsdEZpZWxkLFxuICAgIGNyZWF0ZURlZmF1bHRGaWVsZE5hbWUsXG4gICAgRmllbGRPcHRpb25zLFxuICAgIEZpZWxkVmFsdWUsXG4gICAgZ2V0RmllbGRWYWx1ZSxcbiAgICBpZENyZWF0b3IsXG4gICAgU2VsZWN0U2V0dGluZ3MsXG4gICAgVXBkYXRlRmllbGRWYWx1ZU9wdGlvbnNcbn0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyByZWFkRnJvbUNsaXBib2FyZCwgYWlUYWJsZUZyYWdtZW50QXR0cmlidXRlLCBleHRyYWN0VGV4dCB9IGZyb20gJy4uL2NsaXBib2FyZCc7XG5pbXBvcnQgeyBGaWVsZE1vZGVsTWFwIH0gZnJvbSAnLi4vZmllbGQvbW9kZWwnO1xuaW1wb3J0IHsgcHJvY2Vzc1Bhc3RlZFZhbHVlRm9yU2VsZWN0IH0gZnJvbSAnLi4vZmllbGQvbW9kZWwvc2VsZWN0JztcbmltcG9ydCB7IEFkZFJlY29yZE9wdGlvbnMsIEFkZEZpZWxkT3B0aW9ucyB9IGZyb20gJy4uLy4uL2NvcmUnO1xuXG5jb25zdCBhaVRhYmxlQXR0cmlidXRlUGF0dGVybiA9IG5ldyBSZWdFeHAoYCR7YWlUYWJsZUZyYWdtZW50QXR0cmlidXRlfT1cIiguKz8pXCJgLCAnbScpO1xuXG5jb25zdCBkZWNvZGVDbGlwYm9hcmRKc29uRGF0YSA9IChlbmNvZGVkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5hdG9iKGVuY29kZWQpKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVkKTtcbn07XG5cbmZ1bmN0aW9uIGV4dHJhY3RDb250ZW50RnJvbUNsaXBib2FyZFRleHQoY2xpcGJvYXJkVGV4dDogc3RyaW5nKTogc3RyaW5nW11bXSB7XG4gICAgY29uc3QgY29udGVudHMgPSBjbGlwYm9hcmRUZXh0XG4gICAgICAgIC5zcGxpdCgnXFxuJylcbiAgICAgICAgLm1hcCgocm93KSA9PiByb3cuc3BsaXQoJ1xcdCcpKVxuICAgICAgICAuZmlsdGVyKChyb3cpID0+IHJvdy5sZW5ndGggPiAwICYmIHJvdy5zb21lKChjZWxsKSA9PiBjZWxsLnRyaW0oKS5sZW5ndGggPiAwKSk7XG5cbiAgICByZXR1cm4gY29udGVudHM7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NUYWJsZUNlbGwoY2VsbEh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbGlua1BhdHRlcm4gPSAvPGFbXj5dKj9ocmVmPVtcIiddKFteXCInXSspW1wiJ11bXj5dKj8+KFtePF0qPyk8XFwvYT4vaTtcbiAgICBjb25zdCBtYXRjaCA9IGNlbGxIdG1sLm1hdGNoKGxpbmtQYXR0ZXJuKTtcbiAgICBjb25zdCBsaW5rID0gbWF0Y2ggPyB7IGhyZWY6IG1hdGNoWzFdLCB0ZXh0OiBtYXRjaFsyXSB9IDogbnVsbDtcbiAgICBjb25zdCBjb250ZW50ID0gbGluayA/IGNlbGxIdG1sLnJlcGxhY2UobGlua1BhdHRlcm4sIGBbTElOSzoke2xpbmsudGV4dH1dKCR7bGluay5ocmVmfSlgKSA6IGNlbGxIdG1sO1xuXG4gICAgY29uc3QgY2xlYW5Db250ZW50ID0gY29udGVudFxuICAgICAgICAucmVwbGFjZSgvPFtePl0rPi9nLCAnJylcbiAgICAgICAgLnJlcGxhY2UoLyZuYnNwOy9nLCAnICcpXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrL2csICcgJylcbiAgICAgICAgLnRyaW0oKTtcblxuICAgIHJldHVybiBsaW5rID8gY2xlYW5Db250ZW50LnJlcGxhY2UoYFtMSU5LOiR7bGluay50ZXh0fV0oJHtsaW5rLmhyZWZ9KWAsIGA8YSBocmVmPVwiJHtsaW5rLmhyZWZ9XCI+JHtsaW5rLnRleHR9PC9hPmApIDogY2xlYW5Db250ZW50O1xufVxuXG5mdW5jdGlvbiBleHRyYWN0Q29udGVudEZyb21DbGlwYm9hcmRIdG1sKGNsaXBib2FyZEh0bWw6IHN0cmluZyk6IHN0cmluZ1tdW10ge1xuICAgIGNvbnN0IHRhYmxlUGF0dGVybiA9IC88dGFibGVbXj5dKj4oW1xcc1xcU10qPyk8XFwvdGFibGU+L2k7XG4gICAgY29uc3QgdHJQYXR0ZXJuID0gLzx0cltePl0qPihbXFxzXFxTXSo/KTxcXC90cj4vZ2k7XG4gICAgY29uc3QgdGRQYXR0ZXJuID0gLzx0ZFtePl0qPz4oW1xcc1xcU10qPyk8XFwvdGQ+L2dpO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdGFibGVNYXRjaCA9IGNsaXBib2FyZEh0bWwubWF0Y2godGFibGVQYXR0ZXJuKTtcbiAgICAgICAgY29uc3QgdGFibGVDb250ZW50ID0gdGFibGVNYXRjaCA/IHRhYmxlTWF0Y2hbMV0gOiBjbGlwYm9hcmRIdG1sO1xuICAgICAgICBjb25zdCByb3dzID0gdGFibGVDb250ZW50Lm1hdGNoKHRyUGF0dGVybikgfHwgW107XG5cbiAgICAgICAgcmV0dXJuIHJvd3NcbiAgICAgICAgICAgIC5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgICAgIGxldCB0ZE1hdGNoO1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKCh0ZE1hdGNoID0gdGRQYXR0ZXJuLmV4ZWMocm93KSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHMucHVzaChwcm9jZXNzVGFibGVDZWxsKHRkTWF0Y2hbMV0pKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGVudHM7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcigocm93KSA9PiByb3cubGVuZ3RoID4gMCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gZXh0cmFjdCBjb250ZW50IGZyb20gSFRNTDonLCBlcnJvcik7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBSVRhYmxlQ29udGVudEZyb21DbGlwYm9hcmRIdG1sKGNsaXBib2FyZEh0bWw6IHN0cmluZyk6IEFJVGFibGVDb250ZW50IHwgbnVsbCB7XG4gICAgY29uc3QgYWlUYWJsZUZyYWdtZW50ID0gY2xpcGJvYXJkSHRtbC5tYXRjaChhaVRhYmxlQXR0cmlidXRlUGF0dGVybik7XG4gICAgaWYgKGFpVGFibGVGcmFnbWVudCAmJiAhIWFpVGFibGVGcmFnbWVudC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZUNsaXBib2FyZEpzb25EYXRhKGFpVGFibGVGcmFnbWVudFsxXSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG5jb25zdCByZWFkQ2xpcGJvYXJkRGF0YSA9IGFzeW5jICgpOiBQcm9taXNlPHsgY2xpcGJvYXJkQ29udGVudDogc3RyaW5nW11bXTsgYWlUYWJsZUNvbnRlbnQ6IEFJVGFibGVDb250ZW50IHwgbnVsbCB9PiA9PiB7XG4gICAgY29uc3QgY2xpcGJvYXJkRGF0YSA9IGF3YWl0IHJlYWRGcm9tQ2xpcGJvYXJkKCk7XG4gICAgbGV0IGNsaXBib2FyZENvbnRlbnQ6IHN0cmluZ1tdW10gPSBbXTtcbiAgICBsZXQgYWlUYWJsZUNvbnRlbnQ6IEFJVGFibGVDb250ZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAoY2xpcGJvYXJkRGF0YSkge1xuICAgICAgICBjb25zdCBjbGlwYm9hcmRIdG1sID0gY2xpcGJvYXJkRGF0YS5odG1sO1xuICAgICAgICBjb25zdCBjbGlwYm9hcmRUZXh0ID0gY2xpcGJvYXJkRGF0YS50ZXh0O1xuXG4gICAgICAgIGlmIChjbGlwYm9hcmRIdG1sKSB7XG4gICAgICAgICAgICBhaVRhYmxlQ29udGVudCA9IGV4dHJhY3RBSVRhYmxlQ29udGVudEZyb21DbGlwYm9hcmRIdG1sKGNsaXBib2FyZEh0bWwpO1xuICAgICAgICAgICAgY2xpcGJvYXJkQ29udGVudCA9IGV4dHJhY3RDb250ZW50RnJvbUNsaXBib2FyZEh0bWwoY2xpcGJvYXJkSHRtbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNsaXBib2FyZENvbnRlbnQubGVuZ3RoICYmIGNsaXBib2FyZFRleHQpIHtcbiAgICAgICAgICAgIGNsaXBib2FyZENvbnRlbnQgPSBleHRyYWN0Q29udGVudEZyb21DbGlwYm9hcmRUZXh0KGNsaXBib2FyZFRleHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2xpcGJvYXJkQ29udGVudCxcbiAgICAgICAgYWlUYWJsZUNvbnRlbnRcbiAgICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0UGFzdGVWYWx1ZShcbiAgICBwbGFpblRleHQ6IHN0cmluZyxcbiAgICBhaVRhYmxlQ29udGVudDogQUlUYWJsZUNvbnRlbnQgfCBudWxsLFxuICAgIHJlY29yZEluZGV4OiBudW1iZXIsXG4gICAgZmllbGRJbmRleDogbnVtYmVyLFxuICAgIHRhcmdldEZpZWxkOiBBSVRhYmxlRmllbGQsXG4gICAgcmVmZXJlbmNlczogQUlUYWJsZVJlZmVyZW5jZXNcbik6IHtcbiAgICB2YWx1ZTogRmllbGRWYWx1ZSB8IG51bGw7XG4gICAgbmV3RmllbGQ6IEFJVGFibGVGaWVsZCB8IG51bGw7XG59IHtcbiAgICBsZXQgZmllbGQ6IEFJVGFibGVGaWVsZCB8IG51bGwgPSBudWxsO1xuICAgIGxldCByZWNvcmQ6IFBhcnRpYWw8QUlUYWJsZVJlY29yZD4gfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChhaVRhYmxlQ29udGVudCkge1xuICAgICAgICBjb25zdCB7IGZpZWxkcywgcmVjb3JkcyB9ID0gYWlUYWJsZUNvbnRlbnQ7XG4gICAgICAgIGZpZWxkID0gZmllbGRzW2ZpZWxkSW5kZXhdO1xuICAgICAgICByZWNvcmQgPSByZWNvcmRzW3JlY29yZEluZGV4XTtcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0RmllbGQudHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5hdHRhY2htZW50IHx8IChmaWVsZCAmJiBmaWVsZC50eXBlID09PSBBSVRhYmxlRmllbGRUeXBlLmF0dGFjaG1lbnQpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiBudWxsLCBuZXdGaWVsZDogbnVsbCB9O1xuICAgIH1cbiAgICBpZiAodGFyZ2V0RmllbGQudHlwZSAhPT0gQUlUYWJsZUZpZWxkVHlwZS5saW5rKSB7XG4gICAgICAgIHBsYWluVGV4dCA9IGV4dHJhY3RUZXh0KHBsYWluVGV4dCk7XG4gICAgfVxuXG4gICAgbGV0IG9yaWdpbkRhdGEgPSBmaWVsZCAmJiByZWNvcmQgPyB7IGZpZWxkLCBjZWxsVmFsdWU6IGdldEZpZWxkVmFsdWUocmVjb3JkLCBmaWVsZCkgfSA6IG51bGw7XG4gICAgaWYgKHRhcmdldEZpZWxkLnR5cGUgPT09IEFJVGFibGVGaWVsZFR5cGUuc2VsZWN0KSB7XG4gICAgICAgIGxldCB7IGV4aXN0T3B0aW9uSWRzLCBuZXdPcHRpb25zIH0gPSBwcm9jZXNzUGFzdGVkVmFsdWVGb3JTZWxlY3QocGxhaW5UZXh0LCB0YXJnZXRGaWVsZCwgb3JpZ2luRGF0YSk7XG4gICAgICAgIGxldCBuZXdGaWVsZDogQUlUYWJsZUZpZWxkIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGxldCBuZXdPcHRpb25JZHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgaWYgKG5ld09wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXdPcHRpb25zID0gbmV3T3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgX2lkOiBpZENyZWF0b3IoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5ld0ZpZWxkID0ge1xuICAgICAgICAgICAgICAgIC4uLnRhcmdldEZpZWxkLFxuICAgICAgICAgICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRhcmdldEZpZWxkLnNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBbLi4uKCh0YXJnZXRGaWVsZC5zZXR0aW5ncyBhcyBTZWxlY3RTZXR0aW5ncyk/Lm9wdGlvbnMgfHwgW10pLCAuLi5uZXdPcHRpb25zXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBuZXdPcHRpb25JZHMgPSBuZXdPcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24uX2lkKS5maWx0ZXIoKGlkKSA9PiAhIWlkKSBhcyBzdHJpbmdbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdEZpZWxkVmFsdWUgPSBuZXdPcHRpb25JZHM/Lmxlbmd0aCA/IFsuLi5leGlzdE9wdGlvbklkcywgLi4ubmV3T3B0aW9uSWRzXSA6IGV4aXN0T3B0aW9uSWRzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHNlbGVjdEZpZWxkVmFsdWUsXG4gICAgICAgICAgICBuZXdGaWVsZFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbHVlOiBGaWVsZE1vZGVsTWFwW3RhcmdldEZpZWxkLnR5cGVdLnRvRmllbGRWYWx1ZShwbGFpblRleHQsIHRhcmdldEZpZWxkLCBvcmlnaW5EYXRhLCByZWZlcmVuY2VzKSwgbmV3RmllbGQ6IG51bGwgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSVRhYmxlUGFzdGVBY3Rpb25zIHtcbiAgICB1cGRhdGVGaWVsZFZhbHVlOiAoZGF0YTogVXBkYXRlRmllbGRWYWx1ZU9wdGlvbnMpID0+IHZvaWQ7XG4gICAgc2V0RmllbGQ6IChmaWVsZDogQUlUYWJsZUZpZWxkKSA9PiB2b2lkO1xuICAgIGFkZFJlY29yZDogKGRhdGE6IEFkZFJlY29yZE9wdGlvbnMpID0+IHZvaWQ7XG4gICAgYWRkRmllbGQ6IChkYXRhOiBBZGRGaWVsZE9wdGlvbnMpID0+IHZvaWQ7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZFJlY29yZChhaVRhYmxlOiBBSVRhYmxlLCBhY3Rpb25zOiBBSVRhYmxlUGFzdGVBY3Rpb25zKSB7XG4gICAgY29uc3QgYWxsUmVjb3JkcyA9IGFpVGFibGUucmVjb3JkcygpO1xuICAgIGNvbnN0IGxhc3RSZWNvcmRJZCA9IGFsbFJlY29yZHMubGVuZ3RoID4gMCA/IGFsbFJlY29yZHNbYWxsUmVjb3Jkcy5sZW5ndGggLSAxXS5faWQgOiAnJztcbiAgICBhY3Rpb25zLmFkZFJlY29yZCh7XG4gICAgICAgIG9yaWdpbklkOiBsYXN0UmVjb3JkSWRcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kRmllbGQoYWlUYWJsZTogQUlUYWJsZSwgb3JpZ2luRmllbGQ6IEFJVGFibGVGaWVsZCB8IG51bGwsIGFjdGlvbnM6IEFJVGFibGVQYXN0ZUFjdGlvbnMpIHtcbiAgICBjb25zdCBsYXN0RmllbGRJZCA9IGFpVGFibGUuZmllbGRzKCkubGVuZ3RoID4gMCA/IGFpVGFibGUuZmllbGRzKClbYWlUYWJsZS5maWVsZHMoKS5sZW5ndGggLSAxXS5faWQgOiAnJztcbiAgICBsZXQgZGVmYXVsdEZpZWxkVmFsdWU6IFBhcnRpYWw8QUlUYWJsZUZpZWxkPjtcbiAgICBpZiAob3JpZ2luRmllbGQpIHtcbiAgICAgICAgZGVmYXVsdEZpZWxkVmFsdWUgPSB7XG4gICAgICAgICAgICAuLi5vcmlnaW5GaWVsZCxcbiAgICAgICAgICAgIG5hbWU6IGNyZWF0ZURlZmF1bHRGaWVsZE5hbWUoYWlUYWJsZSwgRmllbGRPcHRpb25zLmZpbmQoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gb3JpZ2luRmllbGQudHlwZSkhKSxcbiAgICAgICAgICAgIF9pZDogaWRDcmVhdG9yKClcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0RmllbGRWYWx1ZSA9IGNyZWF0ZURlZmF1bHRGaWVsZChhaVRhYmxlLCBBSVRhYmxlRmllbGRUeXBlLnRleHQpO1xuICAgIH1cblxuICAgIGFjdGlvbnMuYWRkRmllbGQoe1xuICAgICAgICBvcmlnaW5JZDogbGFzdEZpZWxkSWQsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZGVmYXVsdEZpZWxkVmFsdWVcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHdyaXRlVG9BSVRhYmxlID0gYXN5bmMgKGFpVGFibGU6IEFJVGFibGUsIGFjdGlvbnM6IEFJVGFibGVQYXN0ZUFjdGlvbnMpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gQXJyYXkuZnJvbShhaVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkQ2VsbHMpO1xuICAgIGlmICghc2VsZWN0ZWRDZWxscy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IGNsaXBib2FyZENvbnRlbnQsIGFpVGFibGVDb250ZW50IH0gPSBhd2FpdCByZWFkQ2xpcGJvYXJkRGF0YSgpO1xuICAgIGlmICghY2xpcGJvYXJkQ29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IFtmaXJzdENlbGxdID0gc2VsZWN0ZWRDZWxscztcbiAgICBjb25zdCBbc3RhcnRSZWNvcmRJZCwgc3RhcnRGaWVsZElkXSA9IGZpcnN0Q2VsbC5zcGxpdCgnOicpO1xuICAgIGNvbnN0IHN0YXJ0Um93SW5kZXggPSBhaVRhYmxlLmNvbnRleHQhLnZpc2libGVSb3dzSW5kZXhNYXAoKS5nZXQoc3RhcnRSZWNvcmRJZCkgPz8gMDtcbiAgICBjb25zdCBzdGFydENvbEluZGV4ID0gYWlUYWJsZS5jb250ZXh0IS52aXNpYmxlQ29sdW1uc0luZGV4TWFwKCkuZ2V0KHN0YXJ0RmllbGRJZCkgPz8gMDtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gYWlUYWJsZS5jb250ZXh0IS5yZWZlcmVuY2VzKCk7XG4gICAgbGV0IGlzUGFzdGVTdWNjZXNzID0gZmFsc2U7XG5cbiAgICBjbGlwYm9hcmRDb250ZW50LmZvckVhY2goKHJvdywgaSkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRSb3dJbmRleCA9IHN0YXJ0Um93SW5kZXggKyBpO1xuICAgICAgICBpZiAodGFyZ2V0Um93SW5kZXggPj0gYWlUYWJsZS5jb250ZXh0IS5saW5lYXJSb3dzKCkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgYXBwZW5kUmVjb3JkKGFpVGFibGUsIGFjdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcm93LmZvckVhY2goKHBsYWluVGV4dCwgaikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Q29sSW5kZXggPSBzdGFydENvbEluZGV4ICsgajtcbiAgICAgICAgICAgIGlmICh0YXJnZXRDb2xJbmRleCA+PSBBSVRhYmxlLmdldFZpc2libGVGaWVsZHMoYWlUYWJsZSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luRmllbGQgPSBhaVRhYmxlQ29udGVudD8uZmllbGRzW2pdIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgYXBwZW5kRmllbGQoYWlUYWJsZSwgb3JpZ2luRmllbGQsIGFjdGlvbnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRSZWNvcmQgPSBhaVRhYmxlLmNvbnRleHQhLmxpbmVhclJvd3MoKVt0YXJnZXRSb3dJbmRleF07XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRGaWVsZCA9IEFJVGFibGUuZ2V0VmlzaWJsZUZpZWxkcyhhaVRhYmxlKVt0YXJnZXRDb2xJbmRleF07XG4gICAgICAgICAgICBjb25zdCByZWNvcmRJbmRleCA9IGk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZEluZGV4ID0gajtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsdWUsIG5ld0ZpZWxkIH0gPSBnZXRQYXN0ZVZhbHVlKHBsYWluVGV4dCwgYWlUYWJsZUNvbnRlbnQsIHJlY29yZEluZGV4LCBmaWVsZEluZGV4LCB0YXJnZXRGaWVsZCwgcmVmZXJlbmNlcyk7XG5cbiAgICAgICAgICAgIGlmIChuZXdGaWVsZCkge1xuICAgICAgICAgICAgICAgIGFjdGlvbnMuc2V0RmllbGQobmV3RmllbGQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25zLnVwZGF0ZUZpZWxkVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBbdGFyZ2V0UmVjb3JkLl9pZCwgdGFyZ2V0RmllbGQuX2lkXVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaXNQYXN0ZVN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBpc1Bhc3RlU3VjY2Vzcztcbn07XG4iXX0=
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy91dGlscy9jbGlwYm9hcmQvcGFzdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILE9BQU8sRUFFUCxnQkFBZ0IsRUFFaEIsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QixZQUFZLEVBRVosYUFBYSxFQUNiLFNBQVMsRUFHWixNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsd0JBQXdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdwRSxNQUFNLHVCQUF1QixHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsd0JBQXdCLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUV2RixNQUFNLHVCQUF1QixHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUU7SUFDaEQsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3pELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFFRixTQUFTLCtCQUErQixDQUFDLGFBQXFCO0lBQzFELE1BQU0sUUFBUSxHQUFHLGFBQWE7U0FDekIsS0FBSyxDQUFDLElBQUksQ0FBQztTQUNYLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENB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QUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLGNBQWMsQ0FBQztBQUMxQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBSVRhYmxlQ29udGVudCwgQUlUYWJsZVJlZmVyZW5jZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge1xuICAgIEFJVGFibGUsXG4gICAgQUlUYWJsZUZpZWxkLFxuICAgIEFJVGFibGVGaWVsZFR5cGUsXG4gICAgQUlUYWJsZVJlY29yZCxcbiAgICBjcmVhdGVEZWZhdWx0RmllbGQsXG4gICAgY3JlYXRlRGVmYXVsdEZpZWxkTmFtZSxcbiAgICBGaWVsZE9wdGlvbnMsXG4gICAgRmllbGRWYWx1ZSxcbiAgICBnZXRGaWVsZFZhbHVlLFxuICAgIGlkQ3JlYXRvcixcbiAgICBTZWxlY3RTZXR0aW5ncyxcbiAgICBVcGRhdGVGaWVsZFZhbHVlT3B0aW9uc1xufSBmcm9tICcuLi8uLi9jb3JlJztcbmltcG9ydCB7IHJlYWRGcm9tQ2xpcGJvYXJkLCBhaVRhYmxlRnJhZ21lbnRBdHRyaWJ1dGUsIGV4dHJhY3RUZXh0IH0gZnJvbSAnLi4vY2xpcGJvYXJkJztcbmltcG9ydCB7IEZpZWxkTW9kZWxNYXAgfSBmcm9tICcuLi9maWVsZC9tb2RlbCc7XG5pbXBvcnQgeyBwcm9jZXNzUGFzdGVkVmFsdWVGb3JTZWxlY3QgfSBmcm9tICcuLi9maWVsZC9tb2RlbC9zZWxlY3QnO1xuaW1wb3J0IHsgQWRkUmVjb3JkT3B0aW9ucywgQWRkRmllbGRPcHRpb25zIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5cbmNvbnN0IGFpVGFibGVBdHRyaWJ1dGVQYXR0ZXJuID0gbmV3IFJlZ0V4cChgJHthaVRhYmxlRnJhZ21lbnRBdHRyaWJ1dGV9PVwiKC4rPylcImAsICdtJyk7XG5cbmNvbnN0IGRlY29kZUNsaXBib2FyZEpzb25EYXRhID0gKGVuY29kZWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVVUklDb21wb25lbnQod2luZG93LmF0b2IoZW5jb2RlZCkpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKGRlY29kZWQpO1xufTtcblxuZnVuY3Rpb24gZXh0cmFjdENvbnRlbnRGcm9tQ2xpcGJvYXJkVGV4dChjbGlwYm9hcmRUZXh0OiBzdHJpbmcpOiBzdHJpbmdbXVtdIHtcbiAgICBjb25zdCBjb250ZW50cyA9IGNsaXBib2FyZFRleHRcbiAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAubWFwKChyb3cpID0+IHJvdy5zcGxpdCgnXFx0JykpXG4gICAgICAgIC5maWx0ZXIoKHJvdykgPT4gcm93Lmxlbmd0aCA+IDAgJiYgcm93LnNvbWUoKGNlbGwpID0+IGNlbGwudHJpbSgpLmxlbmd0aCA+IDApKTtcblxuICAgIHJldHVybiBjb250ZW50cztcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1RhYmxlQ2VsbChjZWxsSHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBsaW5rUGF0dGVybiA9IC88YVtePl0qP2hyZWY9W1wiJ10oW15cIiddKylbXCInXVtePl0qPz4oW148XSo/KTxcXC9hPi9pO1xuICAgIGNvbnN0IG1hdGNoID0gY2VsbEh0bWwubWF0Y2gobGlua1BhdHRlcm4pO1xuICAgIGNvbnN0IGxpbmsgPSBtYXRjaCA/IHsgaHJlZjogbWF0Y2hbMV0sIHRleHQ6IG1hdGNoWzJdIH0gOiBudWxsO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBsaW5rID8gY2VsbEh0bWwucmVwbGFjZShsaW5rUGF0dGVybiwgYFtMSU5LOiR7bGluay50ZXh0fV0oJHtsaW5rLmhyZWZ9KWApIDogY2VsbEh0bWw7XG5cbiAgICBjb25zdCBjbGVhbkNvbnRlbnQgPSBjb250ZW50XG4gICAgICAgIC5yZXBsYWNlKC88W14+XSs+L2csICcnKVxuICAgICAgICAucmVwbGFjZSgvJm5ic3A7L2csICcgJylcbiAgICAgICAgLnJlcGxhY2UoL1xccysvZywgJyAnKVxuICAgICAgICAudHJpbSgpO1xuXG4gICAgcmV0dXJuIGxpbmsgPyBjbGVhbkNvbnRlbnQucmVwbGFjZShgW0xJTks6JHtsaW5rLnRleHR9XSgke2xpbmsuaHJlZn0pYCwgYDxhIGhyZWY9XCIke2xpbmsuaHJlZn1cIj4ke2xpbmsudGV4dH08L2E+YCkgOiBjbGVhbkNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RDb250ZW50RnJvbUNsaXBib2FyZEh0bWwoY2xpcGJvYXJkSHRtbDogc3RyaW5nKTogc3RyaW5nW11bXSB7XG4gICAgY29uc3QgdGFibGVQYXR0ZXJuID0gLzx0YWJsZVtePl0qPihbXFxzXFxTXSo/KTxcXC90YWJsZT4vaTtcbiAgICBjb25zdCB0clBhdHRlcm4gPSAvPHRyW14+XSo+KFtcXHNcXFNdKj8pPFxcL3RyPi9naTtcbiAgICBjb25zdCB0ZFBhdHRlcm4gPSAvPHRkW14+XSo/PihbXFxzXFxTXSo/KTxcXC90ZD4vZ2k7XG5cbiAgICB0cnkge1xuICAgICAgICBjb25zdCB0YWJsZU1hdGNoID0gY2xpcGJvYXJkSHRtbC5tYXRjaCh0YWJsZVBhdHRlcm4pO1xuICAgICAgICBjb25zdCB0YWJsZUNvbnRlbnQgPSB0YWJsZU1hdGNoID8gdGFibGVNYXRjaFsxXSA6IGNsaXBib2FyZEh0bWw7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0YWJsZUNvbnRlbnQubWF0Y2godHJQYXR0ZXJuKSB8fCBbXTtcblxuICAgICAgICByZXR1cm4gcm93c1xuICAgICAgICAgICAgLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICAgICAgbGV0IHRkTWF0Y2g7XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAoKHRkTWF0Y2ggPSB0ZFBhdHRlcm4uZXhlYyhyb3cpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50cy5wdXNoKHByb2Nlc3NUYWJsZUNlbGwodGRNYXRjaFsxXSkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50cztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKChyb3cpID0+IHJvdy5sZW5ndGggPiAwKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBleHRyYWN0IGNvbnRlbnQgZnJvbSBIVE1MOicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFJVGFibGVDb250ZW50RnJvbUNsaXBib2FyZEh0bWwoY2xpcGJvYXJkSHRtbDogc3RyaW5nKTogQUlUYWJsZUNvbnRlbnQgfCBudWxsIHtcbiAgICBjb25zdCBhaVRhYmxlRnJhZ21lbnQgPSBjbGlwYm9hcmRIdG1sLm1hdGNoKGFpVGFibGVBdHRyaWJ1dGVQYXR0ZXJuKTtcbiAgICBpZiAoYWlUYWJsZUZyYWdtZW50ICYmICEhYWlUYWJsZUZyYWdtZW50Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZGVjb2RlQ2xpcGJvYXJkSnNvbkRhdGEoYWlUYWJsZUZyYWdtZW50WzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IHJlYWRDbGlwYm9hcmREYXRhID0gYXN5bmMgKCk6IFByb21pc2U8eyBjbGlwYm9hcmRDb250ZW50OiBzdHJpbmdbXVtdOyBhaVRhYmxlQ29udGVudDogQUlUYWJsZUNvbnRlbnQgfCBudWxsIH0+ID0+IHtcbiAgICBjb25zdCBjbGlwYm9hcmREYXRhID0gYXdhaXQgcmVhZEZyb21DbGlwYm9hcmQoKTtcbiAgICBsZXQgY2xpcGJvYXJkQ29udGVudDogc3RyaW5nW11bXSA9IFtdO1xuICAgIGxldCBhaVRhYmxlQ29udGVudDogQUlUYWJsZUNvbnRlbnQgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChjbGlwYm9hcmREYXRhKSB7XG4gICAgICAgIGNvbnN0IGNsaXBib2FyZEh0bWwgPSBjbGlwYm9hcmREYXRhLmh0bWw7XG4gICAgICAgIGNvbnN0IGNsaXBib2FyZFRleHQgPSBjbGlwYm9hcmREYXRhLnRleHQ7XG5cbiAgICAgICAgaWYgKGNsaXBib2FyZEh0bWwpIHtcbiAgICAgICAgICAgIGFpVGFibGVDb250ZW50ID0gZXh0cmFjdEFJVGFibGVDb250ZW50RnJvbUNsaXBib2FyZEh0bWwoY2xpcGJvYXJkSHRtbCk7XG4gICAgICAgICAgICBjbGlwYm9hcmRDb250ZW50ID0gZXh0cmFjdENvbnRlbnRGcm9tQ2xpcGJvYXJkSHRtbChjbGlwYm9hcmRIdG1sKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2xpcGJvYXJkQ29udGVudC5sZW5ndGggJiYgY2xpcGJvYXJkVGV4dCkge1xuICAgICAgICAgICAgY2xpcGJvYXJkQ29udGVudCA9IGV4dHJhY3RDb250ZW50RnJvbUNsaXBib2FyZFRleHQoY2xpcGJvYXJkVGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBjbGlwYm9hcmRDb250ZW50LFxuICAgICAgICBhaVRhYmxlQ29udGVudFxuICAgIH07XG59O1xuXG5mdW5jdGlvbiBnZXRQYXN0ZVZhbHVlKFxuICAgIHBsYWluVGV4dDogc3RyaW5nLFxuICAgIGFpVGFibGVDb250ZW50OiBBSVRhYmxlQ29udGVudCB8IG51bGwsXG4gICAgcmVjb3JkSW5kZXg6IG51bWJlcixcbiAgICBmaWVsZEluZGV4OiBudW1iZXIsXG4gICAgdGFyZ2V0RmllbGQ6IEFJVGFibGVGaWVsZCxcbiAgICByZWZlcmVuY2VzOiBBSVRhYmxlUmVmZXJlbmNlc1xuKToge1xuICAgIHZhbHVlOiBGaWVsZFZhbHVlIHwgbnVsbDtcbiAgICBuZXdGaWVsZDogQUlUYWJsZUZpZWxkIHwgbnVsbDtcbn0ge1xuICAgIGxldCBmaWVsZDogQUlUYWJsZUZpZWxkIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHJlY29yZDogUGFydGlhbDxBSVRhYmxlUmVjb3JkPiB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKGFpVGFibGVDb250ZW50KSB7XG4gICAgICAgIGNvbnN0IHsgZmllbGRzLCByZWNvcmRzIH0gPSBhaVRhYmxlQ29udGVudDtcbiAgICAgICAgZmllbGQgPSBmaWVsZHNbZmllbGRJbmRleF07XG4gICAgICAgIHJlY29yZCA9IHJlY29yZHNbcmVjb3JkSW5kZXhdO1xuICAgIH1cblxuICAgIGlmICh0YXJnZXRGaWVsZC50eXBlID09PSBBSVRhYmxlRmllbGRUeXBlLmF0dGFjaG1lbnQgfHwgKGZpZWxkICYmIGZpZWxkLnR5cGUgPT09IEFJVGFibGVGaWVsZFR5cGUuYXR0YWNobWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG51bGwsIG5ld0ZpZWxkOiBudWxsIH07XG4gICAgfVxuICAgIGlmICh0YXJnZXRGaWVsZC50eXBlICE9PSBBSVRhYmxlRmllbGRUeXBlLmxpbmspIHtcbiAgICAgICAgcGxhaW5UZXh0ID0gZXh0cmFjdFRleHQocGxhaW5UZXh0KTtcbiAgICB9XG5cbiAgICBsZXQgb3JpZ2luRGF0YSA9IGZpZWxkICYmIHJlY29yZCA/IHsgZmllbGQsIGNlbGxWYWx1ZTogZ2V0RmllbGRWYWx1ZShyZWNvcmQsIGZpZWxkKSB9IDogbnVsbDtcbiAgICBpZiAodGFyZ2V0RmllbGQudHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5zZWxlY3QpIHtcbiAgICAgICAgbGV0IHsgZXhpc3RPcHRpb25JZHMsIG5ld09wdGlvbnMgfSA9IHByb2Nlc3NQYXN0ZWRWYWx1ZUZvclNlbGVjdChwbGFpblRleHQsIHRhcmdldEZpZWxkLCBvcmlnaW5EYXRhKTtcbiAgICAgICAgbGV0IG5ld0ZpZWxkOiBBSVRhYmxlRmllbGQgfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IG5ld09wdGlvbklkczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBpZiAobmV3T3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5ld09wdGlvbnMgPSBuZXdPcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgICAgICAgICBfaWQ6IGlkQ3JlYXRvcigpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbmV3RmllbGQgPSB7XG4gICAgICAgICAgICAgICAgLi4udGFyZ2V0RmllbGQsXG4gICAgICAgICAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGFyZ2V0RmllbGQuc2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IFsuLi4oKHRhcmdldEZpZWxkLnNldHRpbmdzIGFzIFNlbGVjdFNldHRpbmdzKT8ub3B0aW9ucyB8fCBbXSksIC4uLm5ld09wdGlvbnNdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG5ld09wdGlvbklkcyA9IG5ld09wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi5faWQpLmZpbHRlcigoaWQpID0+ICEhaWQpIGFzIHN0cmluZ1tdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0RmllbGRWYWx1ZSA9IG5ld09wdGlvbklkcz8ubGVuZ3RoID8gWy4uLmV4aXN0T3B0aW9uSWRzLCAuLi5uZXdPcHRpb25JZHNdIDogZXhpc3RPcHRpb25JZHM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogc2VsZWN0RmllbGRWYWx1ZSxcbiAgICAgICAgICAgIG5ld0ZpZWxkXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsdWU6IEZpZWxkTW9kZWxNYXBbdGFyZ2V0RmllbGQudHlwZV0udG9GaWVsZFZhbHVlKHBsYWluVGV4dCwgdGFyZ2V0RmllbGQsIG9yaWdpbkRhdGEsIHJlZmVyZW5jZXMpLCBuZXdGaWVsZDogbnVsbCB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFJVGFibGVQYXN0ZUFjdGlvbnMge1xuICAgIHVwZGF0ZUZpZWxkVmFsdWU6IChkYXRhOiBVcGRhdGVGaWVsZFZhbHVlT3B0aW9ucykgPT4gdm9pZDtcbiAgICBzZXRGaWVsZDogKGZpZWxkOiBBSVRhYmxlRmllbGQpID0+IHZvaWQ7XG4gICAgYWRkUmVjb3JkOiAoZGF0YTogQWRkUmVjb3JkT3B0aW9ucykgPT4gdm9pZDtcbiAgICBhZGRGaWVsZDogKGRhdGE6IEFkZEZpZWxkT3B0aW9ucykgPT4gdm9pZDtcbn1cblxuZnVuY3Rpb24gYXBwZW5kUmVjb3JkKGFpVGFibGU6IEFJVGFibGUsIGFjdGlvbnM6IEFJVGFibGVQYXN0ZUFjdGlvbnMpIHtcbiAgICBjb25zdCBhbGxSZWNvcmRzID0gYWlUYWJsZS5yZWNvcmRzKCk7XG4gICAgY29uc3QgbGFzdFJlY29yZElkID0gYWxsUmVjb3Jkcy5sZW5ndGggPiAwID8gYWxsUmVjb3Jkc1thbGxSZWNvcmRzLmxlbmd0aCAtIDFdLl9pZCA6ICcnO1xuICAgIGFjdGlvbnMuYWRkUmVjb3JkKHtcbiAgICAgICAgb3JpZ2luSWQ6IGxhc3RSZWNvcmRJZFxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBhcHBlbmRGaWVsZChhaVRhYmxlOiBBSVRhYmxlLCBvcmlnaW5GaWVsZDogQUlUYWJsZUZpZWxkIHwgbnVsbCwgYWN0aW9uczogQUlUYWJsZVBhc3RlQWN0aW9ucykge1xuICAgIGNvbnN0IGZpZWxkcyA9IGFpVGFibGUuZ3JpZERhdGEoKS5maWVsZHM7XG4gICAgY29uc3QgbGFzdEZpZWxkSWQgPSBmaWVsZHMubGVuZ3RoID4gMCA/IGZpZWxkc1tmaWVsZHMubGVuZ3RoIC0gMV0uX2lkIDogJyc7XG4gICAgbGV0IGRlZmF1bHRGaWVsZFZhbHVlOiBQYXJ0aWFsPEFJVGFibGVGaWVsZD47XG4gICAgaWYgKG9yaWdpbkZpZWxkKSB7XG4gICAgICAgIGRlZmF1bHRGaWVsZFZhbHVlID0ge1xuICAgICAgICAgICAgLi4ub3JpZ2luRmllbGQsXG4gICAgICAgICAgICBuYW1lOiBjcmVhdGVEZWZhdWx0RmllbGROYW1lKGFpVGFibGUsIEZpZWxkT3B0aW9ucy5maW5kKChpdGVtKSA9PiBpdGVtLnR5cGUgPT09IG9yaWdpbkZpZWxkLnR5cGUpISksXG4gICAgICAgICAgICBfaWQ6IGlkQ3JlYXRvcigpXG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGVmYXVsdEZpZWxkVmFsdWUgPSBjcmVhdGVEZWZhdWx0RmllbGQoYWlUYWJsZSwgQUlUYWJsZUZpZWxkVHlwZS50ZXh0KTtcbiAgICB9XG5cbiAgICBhY3Rpb25zLmFkZEZpZWxkKHtcbiAgICAgICAgb3JpZ2luSWQ6IGxhc3RGaWVsZElkLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRGaWVsZFZhbHVlXG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCB3cml0ZVRvQUlUYWJsZSA9IGFzeW5jIChhaVRhYmxlOiBBSVRhYmxlLCBhY3Rpb25zOiBBSVRhYmxlUGFzdGVBY3Rpb25zKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IEFycmF5LmZyb20oYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZENlbGxzKTtcbiAgICBpZiAoIXNlbGVjdGVkQ2VsbHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgeyBjbGlwYm9hcmRDb250ZW50LCBhaVRhYmxlQ29udGVudCB9ID0gYXdhaXQgcmVhZENsaXBib2FyZERhdGEoKTtcbiAgICBpZiAoIWNsaXBib2FyZENvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBbZmlyc3RDZWxsXSA9IHNlbGVjdGVkQ2VsbHM7XG4gICAgY29uc3QgW3N0YXJ0UmVjb3JkSWQsIHN0YXJ0RmllbGRJZF0gPSBmaXJzdENlbGwuc3BsaXQoJzonKTtcbiAgICBjb25zdCBzdGFydFJvd0luZGV4ID0gYWlUYWJsZS5jb250ZXh0IS52aXNpYmxlUm93c0luZGV4TWFwKCkuZ2V0KHN0YXJ0UmVjb3JkSWQpID8/IDA7XG4gICAgY29uc3Qgc3RhcnRDb2xJbmRleCA9IGFpVGFibGUuY29udGV4dCEudmlzaWJsZUNvbHVtbnNJbmRleE1hcCgpLmdldChzdGFydEZpZWxkSWQpID8/IDA7XG4gICAgY29uc3QgcmVmZXJlbmNlcyA9IGFpVGFibGUuY29udGV4dCEucmVmZXJlbmNlcygpO1xuICAgIGxldCBpc1Bhc3RlU3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgY2xpcGJvYXJkQ29udGVudC5mb3JFYWNoKChyb3csIGkpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0Um93SW5kZXggPSBzdGFydFJvd0luZGV4ICsgaTtcbiAgICAgICAgaWYgKHRhcmdldFJvd0luZGV4ID49IGFpVGFibGUuY29udGV4dCEubGluZWFyUm93cygpLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGFwcGVuZFJlY29yZChhaVRhYmxlLCBhY3Rpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvdy5mb3JFYWNoKChwbGFpblRleHQsIGopID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldENvbEluZGV4ID0gc3RhcnRDb2xJbmRleCArIGo7XG4gICAgICAgICAgICBpZiAodGFyZ2V0Q29sSW5kZXggPj0gQUlUYWJsZS5nZXRWaXNpYmxlRmllbGRzKGFpVGFibGUpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbkZpZWxkID0gYWlUYWJsZUNvbnRlbnQ/LmZpZWxkc1tqXSB8fCBudWxsO1xuICAgICAgICAgICAgICAgIGFwcGVuZEZpZWxkKGFpVGFibGUsIG9yaWdpbkZpZWxkLCBhY3Rpb25zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0UmVjb3JkID0gYWlUYWJsZS5jb250ZXh0IS5saW5lYXJSb3dzKClbdGFyZ2V0Um93SW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0RmllbGQgPSBBSVRhYmxlLmdldFZpc2libGVGaWVsZHMoYWlUYWJsZSlbdGFyZ2V0Q29sSW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgcmVjb3JkSW5kZXggPSBpO1xuICAgICAgICAgICAgY29uc3QgZmllbGRJbmRleCA9IGo7XG4gICAgICAgICAgICBjb25zdCB7IHZhbHVlLCBuZXdGaWVsZCB9ID0gZ2V0UGFzdGVWYWx1ZShwbGFpblRleHQsIGFpVGFibGVDb250ZW50LCByZWNvcmRJbmRleCwgZmllbGRJbmRleCwgdGFyZ2V0RmllbGQsIHJlZmVyZW5jZXMpO1xuXG4gICAgICAgICAgICBpZiAobmV3RmllbGQpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zLnNldEZpZWxkKG5ld0ZpZWxkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9ucy51cGRhdGVGaWVsZFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogW3RhcmdldFJlY29yZC5faWQsIHRhcmdldEZpZWxkLl9pZF1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlzUGFzdGVTdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXNQYXN0ZVN1Y2Nlc3M7XG59O1xuIl19