@1money/component-ui 0.0.98 → 0.0.99

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.
@@ -1,4 +1,4 @@
1
- import { type HTMLAttributes, type Key, type ReactNode } from 'react';
1
+ import { type HTMLAttributes, type Key, type ReactNode, type UIEventHandler } from 'react';
2
2
  import type { TableComponents, TableDirection, TableGetComponentProps, TableLayout, TableProps, TableRecord, TableRowClassName } from '../interface';
3
3
  import type { ColumnsType as InternalColumnsType, ExpandableConfig } from '../internal/kernel/interface';
4
4
  /** Kernel props that flow identically through `Table` and `VirtualTable`. */
@@ -16,6 +16,12 @@ export interface ForwardedKernelProps<T extends TableRecord> {
16
16
  direction?: TableDirection;
17
17
  rowHoverable?: boolean;
18
18
  sticky?: TableProps<T>['sticky'];
19
+ /**
20
+ * Fires on the kernel's real scroll container (`Table`'s `.../-body` div,
21
+ * `VirtualTable`'s virtual-list holder) — not the outer wrapper div, which
22
+ * never scrolls. Useful for scroll-position-driven UI like infinite load.
23
+ */
24
+ onScroll?: UIEventHandler<HTMLDivElement>;
19
25
  }
20
26
  export interface TableSetupResult<T extends TableRecord> {
21
27
  prefixCls: string;
@@ -60,7 +60,8 @@ export var useTableSetup = function useTableSetup(props) {
60
60
  components = props.components,
61
61
  direction = props.direction,
62
62
  rowHoverable = props.rowHoverable,
63
- rest = __rest(props, ["className", "prefixCls", "variant", "columns", "dataSource", "rowKey", "empty", "bordered", "scroll", "sticky", "pagination", "rowSelection", "loading", "onChange", "childrenColumnName", "indentSize", "expandable", "onRow", "rowClassName", "summary", "footer", "showHeader", "tableLayout", "components", "direction", "rowHoverable"]);
63
+ onScroll = props.onScroll,
64
+ rest = __rest(props, ["className", "prefixCls", "variant", "columns", "dataSource", "rowKey", "empty", "bordered", "scroll", "sticky", "pagination", "rowSelection", "loading", "onChange", "childrenColumnName", "indentSize", "expandable", "onRow", "rowClassName", "summary", "footer", "showHeader", "tableLayout", "components", "direction", "rowHoverable", "onScroll"]);
64
65
  // Pulled out of `rest` so it doesn't land on the wrapper div; each entry point
65
66
  // forwards its own `scroll` to the kernel (see ForwardedKernelProps note).
66
67
  void _scroll;
@@ -201,9 +202,10 @@ export var useTableSetup = function useTableSetup(props) {
201
202
  components: components,
202
203
  direction: direction,
203
204
  rowHoverable: rowHoverable,
204
- sticky: sticky
205
+ sticky: sticky,
206
+ onScroll: onScroll
205
207
  },
206
208
  paginationNode: paginationNode
207
209
  };
208
210
  };
209
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZVNldHVwLmpzIiwiY29tcG9uZW50cy9UYWJsZS9zcmMvY29tcG9uZW50cy9UYWJsZS9jb3JlL3VzZVRhYmxlU2V0dXAudHN4Il0sIm5hbWVzIjpbIl9fcmVzdCIsInMiLCJlIiwidCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaSIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwianN4IiwiX2pzeCIsInVzZU1lbW8iLCJ1c2VNZW1vaXplZEZuIiwiY2xhc3NuYW1lcyIsImpvaW5DbHMiLCJQYWdpbmF0aW9uIiwiU3Bpbm5lciIsIkV4cGFuZGVkUm93Q29udGFpbmVyIiwiVGFibGVFbXB0eVN0YXRlIiwiVEFCTEVfQkxPQ0siLCJUQUJMRV9ERUZBVUxUX1BSRUZJWCIsIlRBQkxFX0RFRkFVTFRfVkFSSUFOVCIsInVzZVRhYmxlRGF0YVBpcGVsaW5lIiwidXNlVGFibGVTZWxlY3Rpb24iLCJ1c2VUYWJsZUV4cGFuZCIsInVzZVRhYmxlQ29sdW1ucyIsInVzZVRhYmxlU2V0dXAiLCJwcm9wcyIsIl9hIiwiX2IiLCJfYyIsIl9wcm9wcyRjbGFzc05hbWUiLCJjbGFzc05hbWUiLCJfcHJvcHMkcHJlZml4Q2xzIiwicHJlZml4Q2xzIiwiX3Byb3BzJHZhcmlhbnQiLCJ2YXJpYW50IiwiY29sdW1ucyIsImRhdGFTb3VyY2UiLCJyb3dLZXkiLCJlbXB0eSIsImJvcmRlcmVkIiwiX3Njcm9sbCIsInNjcm9sbCIsInN0aWNreSIsInBhZ2luYXRpb24iLCJyb3dTZWxlY3Rpb24iLCJfcHJvcHMkbG9hZGluZyIsImxvYWRpbmciLCJvbkNoYW5nZSIsImNoaWxkcmVuQ29sdW1uTmFtZSIsImluZGVudFNpemUiLCJleHBhbmRhYmxlIiwib25Sb3ciLCJyb3dDbGFzc05hbWUiLCJzdW1tYXJ5IiwiZm9vdGVyIiwic2hvd0hlYWRlciIsInRhYmxlTGF5b3V0IiwiY29tcG9uZW50cyIsImRpcmVjdGlvbiIsInJvd0hvdmVyYWJsZSIsInJlc3QiLCJjbHMiLCJsb2FkaW5nQ29uZmlnIiwic3Bpbm5pbmciLCJpc0xvYWRpbmciLCJsb2FkaW5nSW5kaWNhdG9yIiwiaW5kaWNhdG9yIiwidHlwZSIsInRpdGxlIiwiZ2V0Um93S2V5IiwicmVjb3JkIiwiaW5kZXgiLCJwaXBlbGluZSIsInNlbGVjdGlvbiIsImN1cnJlbnREYXRhU291cmNlIiwiZXhwYW5kIiwicmVuZGVyZWRDb2x1bW5zIiwibWVyZ2VkRXhwYW5kZWRSb3dLZXlzIiwidHJpZ2dlckV4cGFuZCIsIm1lcmdlZFNlbGVjdGVkUm93S2V5cyIsImNoZWNrYm94UHJvcHNNYXAiLCJpc0FsbFNlbGVjdGVkIiwiaXNJbmRldGVybWluYXRlIiwidHJpZ2dlclNlbGVjdGlvbiIsInRyaWdnZXJTZWxlY3RBbGwiLCJzb3J0ZXIiLCJzZXRTb3J0ZXIiLCJmaWx0ZXJzIiwic2V0RmlsdGVycyIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImV4cGFuZGVkUm93UmVuZGVyIiwidW5kZWZpbmVkIiwiY29uc29sZSIsIndhcm4iLCJ3cmFwcGVkRXhwYW5kZWRSb3dSZW5kZXIiLCJpbmRlbnQiLCJleHBhbmRlZCIsInJvd0V4cGFuZGFibGUiLCJjaGlsZHJlbiIsImtlcm5lbE9uRXhwYW5kIiwicmVjb3JkS2V5Iiwib25LZXJuZWxFeHBhbmQiLCJtZXJnZWRFeHBhbmRhYmxlIiwiYXNzaWduIiwiZXhwYW5kZWRSb3dLZXlzIiwic2hvd0V4cGFuZENvbHVtbiIsIm9uRXhwYW5kIiwicmVzb2x2ZWRQYWdpbmF0aW9uIiwiY3VycmVudCIsInBhZ2VTaXplIiwicGFnaW5hdGlvbk5vZGUiLCJjb25jYXQiLCJ0b3RhbCIsIm5leHRQYWdlIiwibmV4dFBhZ2VTaXplIiwic2V0UGFnaW5hdGlvbiIsImN1cnJlbnRQYWdpbmF0aW9uIiwid3JhcHBlckNsYXNzTmFtZSIsInRhYmxlQ2xhc3NOYW1lIiwiZW1wdHlUZXh0Iiwid3JhcHBlckh0bWxQcm9wcyIsImZvcndhcmRlZEtlcm5lbFByb3BzIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxNQUFNLEdBQUksSUFBSSxJQUFJLElBQUksQ0FBQ0EsTUFBTSxJQUFLLFVBQVVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFO0VBQ2xELElBQUlDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDVixLQUFLLElBQUlDLENBQUMsSUFBSUgsQ0FBQyxFQUFFLElBQUlJLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ1AsQ0FBQyxFQUFFRyxDQUFDLENBQUMsSUFBSUYsQ0FBQyxDQUFDTyxPQUFPLENBQUNMLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDL0VELENBQUMsQ0FBQ0MsQ0FBQyxDQUFDLEdBQUdILENBQUMsQ0FBQ0csQ0FBQyxDQUFDO0VBQ2YsSUFBSUgsQ0FBQyxJQUFJLElBQUksSUFBSSxPQUFPSSxNQUFNLENBQUNLLHFCQUFxQixLQUFLLFVBQVUsRUFDL0QsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFUCxDQUFDLEdBQUdDLE1BQU0sQ0FBQ0sscUJBQXFCLENBQUNULENBQUMsQ0FBQyxFQUFFVSxDQUFDLEdBQUdQLENBQUMsQ0FBQ1EsTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtJQUNwRSxJQUFJVCxDQUFDLENBQUNPLE9BQU8sQ0FBQ0wsQ0FBQyxDQUFDTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSU4sTUFBTSxDQUFDQyxTQUFTLENBQUNPLG9CQUFvQixDQUFDTCxJQUFJLENBQUNQLENBQUMsRUFBRUcsQ0FBQyxDQUFDTyxDQUFDLENBQUMsQ0FBQyxFQUMxRVIsQ0FBQyxDQUFDQyxDQUFDLENBQUNPLENBQUMsQ0FBQyxDQUFDLEdBQUdWLENBQUMsQ0FBQ0csQ0FBQyxDQUFDTyxDQUFDLENBQUMsQ0FBQztFQUN6QjtFQUNKLE9BQU9SLENBQUM7QUFDWixDQUFDO0FBQ0QsU0FBU1csR0FBRyxJ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ZmlsZSI6ImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZVNldHVwLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlTWVtb2l6ZWRGbiBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZU1lbW9pemVkRm4nO1xuaW1wb3J0IGNsYXNzbmFtZXMsIHsgam9pbkNscyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgUGFnaW5hdGlvbiB9IGZyb20gJy4uLy4uL1BhZ2luYXRpb24nO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4uLy4uL1NwaW5uZXInO1xuaW1wb3J0IHsgRXhwYW5kZWRSb3dDb250YWluZXIgfSBmcm9tICcuLi9yZW5kZXJlcnMvRXhwYW5kZWRSb3dDb250YWluZXInO1xuaW1wb3J0IHsgVGFibGVFbXB0eVN0YXRlIH0gZnJvbSAnLi4vcmVuZGVyZXJzL0VtcHR5U3RhdGUnO1xuaW1wb3J0IHsgVEFCTEVfQkxPQ0ssIFRBQkxFX0RFRkFVTFRfUFJFRklYLCBUQUJMRV9ERUZBVUxUX1ZBUklBTlQsIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IHVzZVRhYmxlRGF0YVBpcGVsaW5lIH0gZnJvbSAnLi91c2VUYWJsZURhdGFQaXBlbGluZSc7XG5pbXBvcnQgeyB1c2VUYWJsZVNlbGVjdGlvbiB9IGZyb20gJy4vdXNlVGFibGVTZWxlY3Rpb24nO1xuaW1wb3J0IHsgdXNlVGFibGVFeHBhbmQgfSBmcm9tICcuL3VzZVRhYmxlRXhwYW5kJztcbmltcG9ydCB7IHVzZVRhYmxlQ29sdW1ucyB9IGZyb20gJy4vdXNlVGFibGVDb2x1bW5zJztcbi8qKlxuICogQ2VudHJhbGlzZXMgdGhlIHdpcmluZyBzaGFyZWQgYnkgYFRhYmxlYCBhbmQgYFZpcnR1YWxUYWJsZWA6XG4gKiAgLSBkZXN0cnVjdHVyZSBwcm9wc1xuICogIC0gcmVzb2x2ZSByb3cga2V5XG4gKiAgLSBydW4gcGlwZWxpbmUgLyBzZWxlY3Rpb24gLyBleHBhbmQgLyBjb2x1bW4gdHJhbnNmb3Jtc1xuICogIC0gYnVpbGQga2VybmVsLXJlYWR5IHByb3BzXG4gKiAgLSBzcGxpdCBvZmYgcGFzcy10aHJvdWdoIEhUTUwgYXR0cmlidXRlcyBzbyB0aGV5IGNhbiBsYW5kIG9uIHRoZSBvdXRlciB3cmFwcGVyXG4gKiAgICBkaXYgKGluc3RlYWQgb2YgYmVpbmcgc3ByZWFkIHVudHlwZWQgaW50byB0aGUga2VybmVsIHZpYSBgcmVzdCBhcyBvYmplY3RgKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZVRhYmxlU2V0dXAgPSAocHJvcHMpID0+IHtcbiAgICB2YXIgX2EsIF9iLCBfYztcbiAgICBjb25zdCB7IGNsYXNzTmFtZSA9ICcnLCBwcmVmaXhDbHMgPSBUQUJMRV9ERUZBVUxUX1BSRUZJWCwgdmFyaWFudCA9IFRBQkxFX0RFRkFVTFRfVkFSSUFOVCwgY29sdW1ucywgZGF0YVNvdXJjZSwgcm93S2V5LCBlbXB0eSwgYm9yZGVyZWQsIHNjcm9sbDogX3Njcm9sbCwgc3RpY2t5LCBwYWdpbmF0aW9uLCByb3dTZWxlY3Rpb24sIGxvYWRpbmcgPSBmYWxzZSwgb25DaGFuZ2UsIGNoaWxkcmVuQ29sdW1uTmFtZSwgaW5kZW50U2l6ZSwgZXhwYW5kYWJsZSwgb25Sb3csIHJvd0NsYXNzTmFtZSwgc3VtbWFyeSwgZm9vdGVyLCBzaG93SGVhZGVyLCB0YWJsZUxheW91dCwgY29tcG9uZW50cywgZGlyZWN0aW9uLCByb3dIb3ZlcmFibGUgfSA9IHByb3BzLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJjbGFzc05hbWVcIiwgXCJwcmVmaXhDbHNcIiwgXCJ2YXJpYW50XCIsIFwiY29sdW1uc1wiLCBcImRhdGFTb3VyY2VcIiwgXCJyb3dLZXlcIiwgXCJlbXB0eVwiLCBcImJvcmRlcmVkXCIsIFwic2Nyb2xsXCIsIFwic3RpY2t5XCIsIFwicGFnaW5hdGlvblwiLCBcInJvd1NlbGVjdGlvblwiLCBcImxvYWRpbmdcIiwgXCJvbkNoYW5nZVwiLCBcImNoaWxkcmVuQ29sdW1uTmFtZVwiLCBcImluZGVudFNpemVcIiwgXCJleHBhbmRhYmxlXCIsIFwib25Sb3dcIiwgXCJyb3dDbGFzc05hbWVcIiwgXCJzdW1tYXJ5XCIsIFwiZm9vdGVyXCIsIFwic2hvd0hlYWRlclwiLCBcInRhYmxlTGF5b3V0XCIsIFwiY29tcG9uZW50c1wiLCBcImRpcmVjdGlvblwiLCBcInJvd0hvdmVyYWJsZVwiXSk7XG4gICAgLy8gUHVsbGVkIG91dCBvZiBgcmVzdGAgc28gaXQgZG9lc24ndCBsYW5kIG9uIHRoZSB3cmFwcGVyIGRpdjsgZWFjaCBlbnRyeSBwb2ludFxuICAgIC8vIGZvcndhcmRzIGl0cyBvd24gYHNjcm9sbGAgdG8gdGhlIGtlcm5lbCAoc2VlIEZvcndhcmRlZEtlcm5lbFByb3BzIG5vdGUpLlxuICAgIHZvaWQgX3Njcm9sbDtcbiAgICBjb25zdCBjbHMgPSBjbGFzc25hbWVzKFRBQkxFX0JMT0NLKTtcbiAgICAvLyBgbG9hZGluZ2AgYWNjZXB0cyBhIGJvb2xlYW4gb3IgYW4gb2JqZWN0IG92ZXJyaWRlLiBUaGUgb2JqZWN0IGZvcm0gZGVmYXVsdHNcbiAgICAvLyBgc3Bpbm5pbmdgIHRvIHRydWUgKHBhc3NpbmcgYSBjb25maWcgaW1wbGllcyBpbnRlbnQgdG8gc2hvdyB0aGUgb3ZlcmxheSkgYW5kXG4gICAgLy8gZmFsbHMgYmFjayB0byB0aGUgYnJhbmQgU3Bpbm5lciB3aGVuIG5vIGN1c3RvbSBgaW5kaWNhdG9yYCBpcyBzdXBwbGllZC5cbiAgICBjb25zdCBsb2FkaW5nQ29uZmlnID0gdHlwZW9mIGxvYWRpbmcgPT09ICdib29sZWFuJyA/IHsgc3Bpbm5pbmc6IGxvYWRpbmcgfSA6IGxvYWRpbmc7XG4gICAgY29uc3QgaXNMb2FkaW5nID0gKF9hID0gbG9hZGluZ0NvbmZpZy5zcGlubmluZykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdHJ1ZTtcbiAgICBjb25zdCBsb2FkaW5nSW5kaWNhdG9yID0gKF9iID0gbG9hZGluZ0NvbmZpZy5pbmRpY2F0b3IpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IF9qc3goU3Bpbm5lciwgeyB0eXBlOiBcImJyYW5kXCIsIHRpdGxlOiBcIkxvYWRpbmdcIiB9KTtcbiAgICBjb25zdCBnZXRSb3dLZXkgPSB1c2VNZW1vaXplZEZuKChyZWNvcmQsIGluZGV4KSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByb3dLZXkgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gcm93S2V5KHJlY29yZClcbiAgICAgICAgICAgIDogKF9hID0gcmVjb3JkW3Jvd0tleSAhPT0gbnVsbCAmJiByb3dLZXkgIT09IHZvaWQgMCA/IHJvd0tleSA6ICdrZXknXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogaW5kZXg7XG4gICAgfSk7XG4gICAgY29uc3QgcGlwZWxpbmUgPSB1c2VUYWJsZURhdGFQaXBlbGluZSh7IGNvbHVtbnMsIGRhdGFTb3VyY2UsIHBhZ2luYXRpb24sIG9uQ2hhbmdlIH0pO1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHVzZVRhYmxlU2VsZWN0aW9uKHtcbiAgICAgICAgcm93U2VsZWN0aW9uLFxuICAgICAgICBkYXRhU291cmNlLFxuICAgICAgICBjdXJyZW50RGF0YVNvdXJjZTogcGlwZWxpbmUuY3VycmVudERhdGFTb3VyY2UsXG4gICAgICAgIGdldFJvd0tleSxcbiAgICB9KTtcbiAgICBjb25zdCBleHBhbmQgPSB1c2VUYWJsZUV4cGFuZCh7IGV4cGFuZGFibGUsIGRhdGFTb3VyY2UsIGdldFJvd0tleSB9KTtcbiAgICBjb25zdCByZW5kZXJlZENvbHVtbnMgPSB1c2VUYWJsZUNvbHVtbnMoe1xuICAgICAgICBjb2x1bW5zLFxuICAgICAgICB2YXJpYW50LFxuICAgICAgICBleHBhbmRhYmxlLFxuICAgICAgICBtZXJnZWRFeHBhbmRlZFJvd0tleXM6IGV4cGFuZC5tZXJnZWRFeHBhbmRlZFJvd0tleXMsXG4gICAgICAgIHRyaWdnZXJFeHBhbmQ6IGV4cGFuZC50cmlnZ2VyRXhwYW5kLFxuICAgICAgICByb3dTZWxlY3Rpb24sXG4gICAgICAgIG1lcmdlZFNlbGVjdGVkUm93S2V5czogc2VsZWN0aW9uLm1lcmdlZFNlbGVjdGVkUm93S2V5cyxcbiAgICAgICAgY2hlY2tib3hQcm9wc01hcDogc2VsZWN0aW9uLmNoZWNrYm94UHJvcHNNYXAsXG4gICAgICAgIGlzQWxsU2VsZWN0ZWQ6IHNlbGVjdGlvbi5pc0FsbFNlbGVjdGVkLFxuICAgICAgICBpc0luZGV0ZXJtaW5hdGU6IHNlbGVjdGlvbi5pc0luZGV0ZXJtaW5hdGUsXG4gICAgICAgIHRyaWdnZXJTZWxlY3Rpb246IHNlbGVjdGlvbi50cmlnZ2VyU2VsZWN0aW9uLFxuICAgICAgICB0cmlnZ2VyU2VsZWN0QWxsOiBzZWxlY3Rpb24udHJpZ2dlclNlbGVjdEFsbCxcbiAgICAgICAgc29ydGVyOiBwaXBlbGluZS5zb3J0ZXIsXG4gICAgICAgIHNldFNvcnRlcjogcGlwZWxpbmUuc2V0U29ydGVyLFxuICAgICAgICBmaWx0ZXJzOiBwaXBlbGluZS5maWx0ZXJzLFxuICAgICAgICBzZXRGaWx0ZXJzOiBwaXBlbGluZS5zZXRGaWx0ZXJzLFxuICAgICAgICBnZXRSb3dLZXksXG4gICAgfSk7XG4gICAgLy8gRGV2LW9ubHkgd2FybmluZzogbWl4aW5nIHJvdy1leHBhbnNpb24gd2l0aCB0cmVlLWRhdGEgKGNoaWxkcmVuQ29sdW1uTmFtZSlcbiAgICAvLyBwcm9kdWNlcyB0d28gY2hldnJvbnMgcGVyIHJvdyAodGhlIGxlZnRtb3N0IF9fZXhwYW5kX18gY29sdW1uIGZyb20gdGhlIHdyYXBwZXJcbiAgICAvLyBwbHVzIHRoZSBrZXJuZWwncyBwZXItaW5kZW50IG5lc3QgZXhwYW5kKS4gcmMtdGFibGUgaGFzIHRoZSBzYW1lIGdhcDtcbiAgICAvLyBwaWNrIG9uZSBtb2RlIGF0IGEgdGltZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICgoX2MgPSBwcm9jZXNzLmVudikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLk5PREVfRU5WKSAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICgoZXhwYW5kYWJsZSA9PT0gbnVsbCB8fCBleHBhbmRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHBhbmRhYmxlLmV4cGFuZGVkUm93UmVuZGVyKSAmJiBjaGlsZHJlbkNvbHVtbk5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbY29tcG9uZW50cy11aSBUYWJsZV0gQ29tYmluaW5nIGBleHBhbmRhYmxlLmV4cGFuZGVkUm93UmVuZGVyYCB3aXRoIGBjaGlsZHJlbkNvbHVtbk5hbWVgIGlzIG5vdCBzdXBwb3J0ZWQg4oCUIHRoZSBsZWZ0bW9zdCBleHBhbmQgY29sdW1uIHdpbGwgcmVuZGVyIGFsb25nc2lkZSB0aGUgbmVzdGVkIHRyZWUgZXhwYW5kZXIuIFVzZSBvbmUgbW9kZSBhdCBhIHRpbWUuJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgd3JhcHBlZEV4cGFuZGVkUm93UmVuZGVyID0gdXNlTWVtb2l6ZWRGbigocmVjb3JkLCBpbmRleCwgaW5kZW50LCBleHBhbmRlZCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIC8vIEhvbm9yIGByb3dFeHBhbmRhYmxlYDogZXZlbiBpZiBhIG5vbi1leHBhbmRhYmxlIHJvdydzIGtleSBzbmVha3MgaW50b1xuICAgICAgICAvLyBgZXhwYW5kZWRSb3dLZXlzYCwgcmVmdXNlIHRvIHJlbmRlciBpdHMgZXhwYW5zaW9uIGNvbnRlbnQuXG4gICAgICAgIGlmICgoZXhwYW5kYWJsZSA9PT0gbnVsbCB8fCBleHBhbmRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHBhbmRhYmxlLnJvd0V4cGFuZGFibGUpICYmICFleHBhbmRhYmxlLnJvd0V4cGFuZGFibGUocmVjb3JkKSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gKF9qc3goRXhwYW5kZWRSb3dDb250YWluZXIsIHsgY2hpbGRyZW46IChfYSA9IGV4cGFuZGFibGUgPT09IG51bGwgfHwgZXhwYW5kYWJsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXhwYW5kYWJsZS5leHBhbmRlZFJvd1JlbmRlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoZXhwYW5kYWJsZSwgcmVjb3JkLCBpbmRleCwgaW5kZW50LCBleHBhbmRlZCkgfSkpO1xuICAgIH0pO1xuICAgIC8vIFdpcmUga2VybmVsJ3Mgb25FeHBhbmQgKHRyaWdnZXJlZCBieSBleHBhbmRSb3dCeUNsaWNrKSB0byBvdXIgc3RhdGUuXG4gICAgY29uc3Qga2VybmVsT25FeHBhbmQgPSB1c2VNZW1vaXplZEZuKChleHBhbmRlZCwgcmVjb3JkKSA9PiB7XG4gICAgICAgIC8vIFRoZSBrZXJuZWwgcGFzc2VzIGEgcmVjb3JkIGZyb20gYGN1cnJlbnREYXRhU291cmNlYCAocG9zdCBzb3J0L2ZpbHRlci9wYWdpbmF0ZSkuXG4gICAgICAgIC8vIExvb2tpbmcgaXQgdXAgYWdhaW5zdCB0aGUgcmF3IGBkYXRhU291cmNlYCByZXR1cm5zIC0xIHdoZW4gdGhlIGNvbnN1bWVyXG4gICAgICAgIC8vIHJlY3JlYXRlcyB0aGUgYXJyYXkgZWFjaCByZW5kZXIsIG9yIGEgcG9zaXRpb25hbGx5IHdyb25nIGluZGV4IGFmdGVyIHNvcnQuXG4gICAgICAgIC8vIFVzZSBgY3VycmVudERhdGFTb3VyY2VgIHNvIHRoZSBpbmRleCBtYXRjaGVzIHdoYXQgdGhlIGtlcm5lbCBhY3R1YWxseSBzZWVzLlxuICAgICAgICBjb25zdCByZWNvcmRLZXkgPSBnZXRSb3dLZXkocmVjb3JkLCBwaXBlbGluZS5jdXJyZW50RGF0YVNvdXJjZS5pbmRleE9mKHJlY29yZCkpO1xuICAgICAgICBleHBhbmQub25LZXJuZWxFeHBhbmQoZXhwYW5kZWQsIHJlY29yZCwgcmVjb3JkS2V5KTtcbiAgICB9KTtcbiAgICBjb25zdCBtZXJnZWRFeHBhbmRhYmxlID0gdXNlTWVtbygoKSA9PiBleHBhbmRhYmxlXG4gICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBleHBhbmRhYmxlKSwgeyBleHBhbmRlZFJvd0tleXM6IGV4cGFuZC5tZXJnZWRFeHBhbmRlZFJvd0tleXMsIGV4cGFuZGVkUm93UmVuZGVyOiBleHBhbmRhYmxlLmV4cGFuZGVkUm93UmVuZGVyXG4gICAgICAgICAgICAgICAgPyB3cmFwcGVkRXhwYW5kZWRSb3dSZW5kZXJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCwgc2hvd0V4cGFuZENvbHVtbjogZmFsc2UsIG9uRXhwYW5kOiBrZXJuZWxPbkV4cGFuZCB9KVxuICAgICAgICA6IHVuZGVmaW5lZCwgW2V4cGFuZGFibGUsIGV4cGFuZC5tZXJnZWRFeHBhbmRlZFJvd0tleXMsIHdyYXBwZWRFeHBhbmRlZFJvd1JlbmRlciwga2VybmVsT25FeHBhbmRdKTtcbiAgICBjb25zdCByZXNvbHZlZFBhZ2luYXRpb24gPSBwaXBlbGluZS5wYWdpbmF0aW9uID09PSBmYWxzZVxuICAgICAgICA/IHsgY3VycmVudDogMSwgcGFnZVNpemU6IDEwIH1cbiAgICAgICAgOiBwaXBlbGluZS5wYWdpbmF0aW9uO1xuICAgIGNvbnN0IHBhZ2luYXRpb25Ob2RlID0gcGFnaW5hdGlvbiAhPT0gZmFsc2UgPyAoX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogYCR7cHJlZml4Q2xzfS1wYWdpbmF0aW9uYCwgY2hpbGRyZW46IF9qc3goUGFnaW5hdGlvbiwgeyB0b3RhbDogcGlwZWxpbmUudG90YWwsIHBhZ2VTaXplOiByZXNvbHZlZFBhZ2luYXRpb24ucGFnZVNpemUsIGN1cnJlbnQ6IHJlc29sdmVkUGFnaW5hdGlvbi5jdXJyZW50LCBvbkNoYW5nZTogKG5leHRQYWdlLCBuZXh0UGFnZVNpemUpID0+IHBpcGVsaW5lLnNldFBhZ2luYXRpb24oKGN1cnJlbnRQYWdpbmF0aW9uKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50UGFnaW5hdGlvbiksIHsgY3VycmVudDogbmV4dFBhZ2UsIHBhZ2VTaXplOiBuZXh0UGFnZVNpemUgfSkpKSB9KSB9KSkgOiBudWxsO1xuICAgIGNvbnN0IHdyYXBwZXJDbGFzc05hbWUgPSBqb2luQ2xzKGAke3ByZWZpeENsc30td3JhcHBlcmAsIGlzTG9hZGluZyAmJiBgJHtwcmVmaXhDbHN9LXdyYXBwZXItLWxvYWRpbmdgLCBib3JkZXJlZCAmJiBgJHtwcmVmaXhDbHN9LXdyYXBwZXItLWJvcmRlcmVkYCk7XG4gICAgY29uc3QgdGFibGVDbGFzc05hbWUgPSBqb2luQ2xzKGNscygpLCBjbHModmFyaWFudCksIHJvd0hvdmVyYWJsZSA9PT0gZmFsc2UgJiYgY2xzKCduby1ob3ZlcicpLCBjbGFzc05hbWUpO1xuICAgIGNvbnN0IGVtcHR5VGV4dCA9IGlzTG9hZGluZyAmJiAhZGF0YVNvdXJjZS5sZW5ndGggPyBfanN4KFwic3BhblwiLCB7fSkgOiBfanN4KFRhYmxlRW1wdHlTdGF0ZSwgeyBlbXB0eTogZW1wdHkgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJlZml4Q2xzLFxuICAgICAgICB3cmFwcGVyQ2xhc3NOYW1lLFxuICAgICAgICB0YWJsZUNsYXNzTmFtZSxcbiAgICAgICAgbG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgICBsb2FkaW5nSW5kaWNhdG9yLFxuICAgICAgICByZW5kZXJlZENvbHVtbnMsXG4gICAgICAgIGN1cnJlbnREYXRhU291cmNlOiBwaXBlbGluZS5jdXJyZW50RGF0YVNvdXJjZSxcbiAgICAgICAgbWVyZ2VkRXhwYW5kYWJsZSxcbiAgICAgICAgZW1wdHlUZXh0LFxuICAgICAgICB3cmFwcGVySHRtbFByb3BzOiByZXN0LFxuICAgICAgICBmb3J3YXJkZWRLZXJuZWxQcm9wczoge1xuICAgICAgICAgICAgcm93S2V5OiByb3dLZXksXG4gICAgICAgICAgICBjaGlsZHJlbkNvbHVtbk5hbWUsXG4gICAgICAgICAgICBpbmRlbnRTaXplLFxuICAgICAgICAgICAgb25Sb3csXG4gICAgICAgICAgICByb3dDbGFzc05hbWUsXG4gICAgICAgICAgICBzdW1tYXJ5LFxuICAgICAgICAgICAgZm9vdGVyLFxuICAgICAgICAgICAgc2hvd0hlYWRlcixcbiAgICAgICAgICAgIHRhYmxlTGF5b3V0LFxuICAgICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgICAgIHJvd0hvdmVyYWJsZSxcbiAgICAgICAgICAgIHN0aWNreSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFnaW5hdGlvbk5vZGUsXG4gICAgfTtcbn07IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
211
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZVNldHVwLmpzIiwiY29tcG9uZW50cy9UYWJsZS9zcmMvY29tcG9uZW50cy9UYWJsZS9jb3JlL3VzZVRhYmxlU2V0dXAudHN4Il0sIm5hbWVzIjpbIl9fcmVzdCIsInMiLCJlIiwidCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaSIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwianN4IiwiX2pzeCIsInVzZU1lbW8iLCJ1c2VNZW1vaXplZEZuIiwiY2xhc3NuYW1lcyIsImpvaW5DbHMiLCJQYWdpbmF0aW9uIiwiU3Bpbm5lciIsIkV4cGFuZGVkUm93Q29udGFpbmVyIiwiVGFibGVFbXB0eVN0YXRlIiwiVEFCTEVfQkxPQ0siLCJUQUJMRV9ERUZBVUxUX1BSRUZJWCIsIlRBQkxFX0RFRkFVTFRfVkFSSUFOVCIsInVzZVRhYmxlRGF0YVBpcGVsaW5lIiwidXNlVGFibGVTZWxlY3Rpb24iLCJ1c2VUYWJsZUV4cGFuZCIsInVzZVRhYmxlQ29sdW1ucyIsInVzZVRhYmxlU2V0dXAiLCJwcm9wcyIsIl9hIiwiX2IiLCJfYyIsIl9wcm9wcyRjbGFzc05hbWUiLCJjbGFzc05hbWUiLCJfcHJvcHMkcHJlZml4Q2xzIiwicHJlZml4Q2xzIiwiX3Byb3BzJHZhcmlhbnQiLCJ2YXJpYW50IiwiY29sdW1ucyIsImRhdGFTb3VyY2UiLCJyb3dLZXkiLCJlbXB0eSIsImJvcmRlcmVkIiwiX3Njcm9sbCIsInNjcm9sbCIsInN0aWNreSIsInBhZ2luYXRpb24iLCJyb3dTZWxlY3Rpb24iLCJfcHJvcHMkbG9hZGluZyIsImxvYWRpbmciLCJvbkNoYW5nZSIsImNoaWxkcmVuQ29sdW1uTmFtZSIsImluZGVudFNpemUiLCJleHBhbmRhYmxlIiwib25Sb3ciLCJyb3dDbGFzc05hbWUiLCJzdW1tYXJ5IiwiZm9vdGVyIiwic2hvd0hlYWRlciIsInRhYmxlTGF5b3V0IiwiY29tcG9uZW50cyIsImRpcmVjdGlvbiIsInJvd0hvdmVyYWJsZSIsIm9uU2Nyb2xsIiwicmVzdCIsImNscyIsImxvYWRpbmdDb25maWciLCJzcGlubmluZyIsImlzTG9hZGluZyIsImxvYWRpbmdJbmRpY2F0b3IiLCJpbmRpY2F0b3IiLCJ0eXBlIiwidGl0bGUiLCJnZXRSb3dLZXkiLCJyZWNvcmQiLCJpbmRleCIsInBpcGVsaW5lIiwic2VsZWN0aW9uIiwiY3VycmVudERhdGFTb3VyY2UiLCJleHBhbmQiLCJyZW5kZXJlZENvbHVtbnMiLCJtZXJnZWRFeHBhbmRlZFJvd0tleXMiLCJ0cmlnZ2VyRXhwYW5kIiwibWVyZ2VkU2VsZWN0ZWRSb3dLZXlzIiwiY2hlY2tib3hQcm9wc01hcCIsImlzQWxsU2VsZWN0ZWQiLCJpc0luZGV0ZXJtaW5hdGUiLCJ0cmlnZ2VyU2VsZWN0aW9uIiwidHJpZ2dlclNlbGVjdEFsbCIsInNvcnRlciIsInNldFNvcnRlciIsImZpbHRlcnMiLCJzZXRGaWx0ZXJzIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiZXhwYW5kZWRSb3dSZW5kZXIiLCJ1bmRlZmluZWQiLCJjb25zb2xlIiwid2FybiIsIndyYXBwZWRFeHBhbmRlZFJvd1JlbmRlciIsImluZGVudCIsImV4cGFuZGVkIiwicm93RXhwYW5kYWJsZSIsImNoaWxkcmVuIiwia2VybmVsT25FeHBhbmQiLCJyZWNvcmRLZXkiLCJvbktlcm5lbEV4cGFuZCIsIm1lcmdlZEV4cGFuZGFibGUiLCJhc3NpZ24iLCJleHBhbmRlZFJvd0tleXMiLCJzaG93RXhwYW5kQ29sdW1uIiwib25FeHBhbmQiLCJyZXNvbHZlZFBhZ2luYXRpb24iLCJjdXJyZW50IiwicGFnZVNpemUiLCJwYWdpbmF0aW9uTm9kZSIsImNvbmNhdCIsInRvdGFsIiwibmV4dFBhZ2UiLCJuZXh0UGFnZVNpemUiLCJzZXRQYWdpbmF0aW9uIiwiY3VycmVudFBhZ2luYXRpb24iLCJ3cmFwcGVyQ2xhc3NOYW1lIiwidGFibGVDbGFzc05hbWUiLCJlbXB0eVRleHQiLCJ3cmFwcGVySHRtbFByb3BzIiwiZm9yd2FyZGVkS2VybmVsUHJvcHMiXSwibWFwcGluZ3MiOiJBQUFBLElBQUlBLE1BQU0sR0FBSSxJQUFJLElBQUksSUFBSSxDQUFDQSxNQUFNLElBQUssVUFBVUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7RUFDbEQsSUFBSUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNWLEtBQUssSUFBSUMsQ0FBQyxJQUFJSCxDQUFDLEVBQUUsSUFBSUksTUFBTSxDQUFDQyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDUCxDQUFDLEVBQUVHLENBQUMsQ0FBQyxJQUFJRixDQUFDLENBQUNPLE9BQU8sQ0FBQ0wsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUMvRUQsQ0FBQyxDQUFDQyxDQUFDLENBQUMsR0FBR0gsQ0FBQyxDQUFDRyxDQUFDLENBQUM7RUFDZixJQUFJSCxDQUFDLElBQUksSUFBSSxJQUFJLE9BQU9JLE1BQU0sQ0FBQ0sscUJBQXFCLEtBQUssVUFBVSxFQUMvRCxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVQLENBQUMsR0FBR0MsTUFBTSxDQUFDSyxxQkFBcUIsQ0FBQ1QsQ0FBQyxDQUFDLEVBQUVVLENBQUMsR0FBR1AsQ0FBQyxDQUFDUSxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO0lBQ3BFLElBQUlULENBQUMsQ0FBQ08sT0FBTyxDQUFDTCxDQUFDLENBQUNPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJTixNQUFNLENBQUNDLFNBQVMsQ0FBQ08sb0JBQW9CLENBQUNMLElBQUksQ0FBQ1AsQ0FBQyxFQUFFRyxDQUFDLENBQUNPLENBQUMsQ0FBQyxDQUFDLEVBQzFFUixDQUFDLENBQUNDLENBQUMsQ0FBQ08sQ0FBQyxDQUFDLENBQUMsR0FBR1YsQ0FBQyxDQUFDRyxDQUFDLENBQUNPLENBQUMsQ0FBQyxDQUFDO0VBQ3pCO0VBQ0osT0FBT1IsQ0FBQztBQUNaLENBQUM7QUFDRCxT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TkEsTUFBTTtNQUNOa0IsUUFBUSxFQUFSQTtJRDVJRSxDQzZJSDtJQUNEcUQsY0FBYyxFQUFkQTtFRDVJQSxDQzZJRDtBQUNILENBQUMiLCJmaWxlIjoiY29tcG9uZW50cy9UYWJsZS9jb3JlL3VzZVRhYmxlU2V0dXAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgY2xhc3NuYW1lcywgeyBqb2luQ2xzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnLi4vLi4vUGFnaW5hdGlvbic7XG5pbXBvcnQgeyBTcGlubmVyIH0gZnJvbSAnLi4vLi4vU3Bpbm5lcic7XG5pbXBvcnQgeyBFeHBhbmRlZFJvd0NvbnRhaW5lciB9IGZyb20gJy4uL3JlbmRlcmVycy9FeHBhbmRlZFJvd0NvbnRhaW5lcic7XG5pbXBvcnQgeyBUYWJsZUVtcHR5U3RhdGUgfSBmcm9tICcuLi9yZW5kZXJlcnMvRW1wdHlTdGF0ZSc7XG5pbXBvcnQgeyBUQUJMRV9CTE9DSywgVEFCTEVfREVGQVVMVF9QUkVGSVgsIFRBQkxFX0RFRkFVTFRfVkFSSUFOVCwgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgdXNlVGFibGVEYXRhUGlwZWxpbmUgfSBmcm9tICcuL3VzZVRhYmxlRGF0YVBpcGVsaW5lJztcbmltcG9ydCB7IHVzZVRhYmxlU2VsZWN0aW9uIH0gZnJvbSAnLi91c2VUYWJsZVNlbGVjdGlvbic7XG5pbXBvcnQgeyB1c2VUYWJsZUV4cGFuZCB9IGZyb20gJy4vdXNlVGFibGVFeHBhbmQnO1xuaW1wb3J0IHsgdXNlVGFibGVDb2x1bW5zIH0gZnJvbSAnLi91c2VUYWJsZUNvbHVtbnMnO1xuLyoqXG4gKiBDZW50cmFsaXNlcyB0aGUgd2lyaW5nIHNoYXJlZCBieSBgVGFibGVgIGFuZCBgVmlydHVhbFRhYmxlYDpcbiAqICAtIGRlc3RydWN0dXJlIHByb3BzXG4gKiAgLSByZXNvbHZlIHJvdyBrZXlcbiAqICAtIHJ1biBwaXBlbGluZSAvIHNlbGVjdGlvbiAvIGV4cGFuZCAvIGNvbHVtbiB0cmFuc2Zvcm1zXG4gKiAgLSBidWlsZCBrZXJuZWwtcmVhZHkgcHJvcHNcbiAqICAtIHNwbGl0IG9mZiBwYXNzLXRocm91Z2ggSFRNTCBhdHRyaWJ1dGVzIHNvIHRoZXkgY2FuIGxhbmQgb24gdGhlIG91dGVyIHdyYXBwZXJcbiAqICAgIGRpdiAoaW5zdGVhZCBvZiBiZWluZyBzcHJlYWQgdW50eXBlZCBpbnRvIHRoZSBrZXJuZWwgdmlhIGByZXN0IGFzIG9iamVjdGApLlxuICovXG5leHBvcnQgY29uc3QgdXNlVGFibGVTZXR1cCA9IChwcm9wcykgPT4ge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIGNvbnN0IHsgY2xhc3NOYW1lID0gJycsIHByZWZpeENscyA9IFRBQkxFX0RFRkFVTFRfUFJFRklYLCB2YXJpYW50ID0gVEFCTEVfREVGQVVMVF9WQVJJQU5ULCBjb2x1bW5zLCBkYXRhU291cmNlLCByb3dLZXksIGVtcHR5LCBib3JkZXJlZCwgc2Nyb2xsOiBfc2Nyb2xsLCBzdGlja3ksIHBhZ2luYXRpb24sIHJvd1NlbGVjdGlvbiwgbG9hZGluZyA9IGZhbHNlLCBvbkNoYW5nZSwgY2hpbGRyZW5Db2x1bW5OYW1lLCBpbmRlbnRTaXplLCBleHBhbmRhYmxlLCBvblJvdywgcm93Q2xhc3NOYW1lLCBzdW1tYXJ5LCBmb290ZXIsIHNob3dIZWFkZXIsIHRhYmxlTGF5b3V0LCBjb21wb25lbnRzLCBkaXJlY3Rpb24sIHJvd0hvdmVyYWJsZSwgb25TY3JvbGwgfSA9IHByb3BzLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJjbGFzc05hbWVcIiwgXCJwcmVmaXhDbHNcIiwgXCJ2YXJpYW50XCIsIFwiY29sdW1uc1wiLCBcImRhdGFTb3VyY2VcIiwgXCJyb3dLZXlcIiwgXCJlbXB0eVwiLCBcImJvcmRlcmVkXCIsIFwic2Nyb2xsXCIsIFwic3RpY2t5XCIsIFwicGFnaW5hdGlvblwiLCBcInJvd1NlbGVjdGlvblwiLCBcImxvYWRpbmdcIiwgXCJvbkNoYW5nZVwiLCBcImNoaWxkcmVuQ29sdW1uTmFtZVwiLCBcImluZGVudFNpemVcIiwgXCJleHBhbmRhYmxlXCIsIFwib25Sb3dcIiwgXCJyb3dDbGFzc05hbWVcIiwgXCJzdW1tYXJ5XCIsIFwiZm9vdGVyXCIsIFwic2hvd0hlYWRlclwiLCBcInRhYmxlTGF5b3V0XCIsIFwiY29tcG9uZW50c1wiLCBcImRpcmVjdGlvblwiLCBcInJvd0hvdmVyYWJsZVwiLCBcIm9uU2Nyb2xsXCJdKTtcbiAgICAvLyBQdWxsZWQgb3V0IG9mIGByZXN0YCBzbyBpdCBkb2Vzbid0IGxhbmQgb24gdGhlIHdyYXBwZXIgZGl2OyBlYWNoIGVudHJ5IHBvaW50XG4gICAgLy8gZm9yd2FyZHMgaXRzIG93biBgc2Nyb2xsYCB0byB0aGUga2VybmVsIChzZWUgRm9yd2FyZGVkS2VybmVsUHJvcHMgbm90ZSkuXG4gICAgdm9pZCBfc2Nyb2xsO1xuICAgIGNvbnN0IGNscyA9IGNsYXNzbmFtZXMoVEFCTEVfQkxPQ0spO1xuICAgIC8vIGBsb2FkaW5nYCBhY2NlcHRzIGEgYm9vbGVhbiBvciBhbiBvYmplY3Qgb3ZlcnJpZGUuIFRoZSBvYmplY3QgZm9ybSBkZWZhdWx0c1xuICAgIC8vIGBzcGlubmluZ2AgdG8gdHJ1ZSAocGFzc2luZyBhIGNvbmZpZyBpbXBsaWVzIGludGVudCB0byBzaG93IHRoZSBvdmVybGF5KSBhbmRcbiAgICAvLyBmYWxscyBiYWNrIHRvIHRoZSBicmFuZCBTcGlubmVyIHdoZW4gbm8gY3VzdG9tIGBpbmRpY2F0b3JgIGlzIHN1cHBsaWVkLlxuICAgIGNvbnN0IGxvYWRpbmdDb25maWcgPSB0eXBlb2YgbG9hZGluZyA9PT0gJ2Jvb2xlYW4nID8geyBzcGlubmluZzogbG9hZGluZyB9IDogbG9hZGluZztcbiAgICBjb25zdCBpc0xvYWRpbmcgPSAoX2EgPSBsb2FkaW5nQ29uZmlnLnNwaW5uaW5nKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0cnVlO1xuICAgIGNvbnN0IGxvYWRpbmdJbmRpY2F0b3IgPSAoX2IgPSBsb2FkaW5nQ29uZmlnLmluZGljYXRvcikgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogX2pzeChTcGlubmVyLCB7IHR5cGU6IFwiYnJhbmRcIiwgdGl0bGU6IFwiTG9hZGluZ1wiIH0pO1xuICAgIGNvbnN0IGdldFJvd0tleSA9IHVzZU1lbW9pemVkRm4oKHJlY29yZCwgaW5kZXgpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHJvd0tleSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyByb3dLZXkocmVjb3JkKVxuICAgICAgICAgICAgOiAoX2EgPSByZWNvcmRbcm93S2V5ICE9PSBudWxsICYmIHJvd0tleSAhPT0gdm9pZCAwID8gcm93S2V5IDogJ2tleSddKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBpbmRleDtcbiAgICB9KTtcbiAgICBjb25zdCBwaXBlbGluZSA9IHVzZVRhYmxlRGF0YVBpcGVsaW5lKHsgY29sdW1ucywgZGF0YVNvdXJjZSwgcGFnaW5hdGlvbiwgb25DaGFuZ2UgfSk7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdXNlVGFibGVTZWxlY3Rpb24oe1xuICAgICAgICByb3dTZWxlY3Rpb24sXG4gICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgIGN1cnJlbnREYXRhU291cmNlOiBwaXBlbGluZS5jdXJyZW50RGF0YVNvdXJjZSxcbiAgICAgICAgZ2V0Um93S2V5LFxuICAgIH0pO1xuICAgIGNvbnN0IGV4cGFuZCA9IHVzZVRhYmxlRXhwYW5kKHsgZXhwYW5kYWJsZSwgZGF0YVNvdXJjZSwgZ2V0Um93S2V5IH0pO1xuICAgIGNvbnN0IHJlbmRlcmVkQ29sdW1ucyA9IHVzZVRhYmxlQ29sdW1ucyh7XG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIHZhcmlhbnQsXG4gICAgICAgIGV4cGFuZGFibGUsXG4gICAgICAgIG1lcmdlZEV4cGFuZGVkUm93S2V5czogZXhwYW5kLm1lcmdlZEV4cGFuZGVkUm93S2V5cyxcbiAgICAgICAgdHJpZ2dlckV4cGFuZDogZXhwYW5kLnRyaWdnZXJFeHBhbmQsXG4gICAgICAgIHJvd1NlbGVjdGlvbixcbiAgICAgICAgbWVyZ2VkU2VsZWN0ZWRSb3dLZXlzOiBzZWxlY3Rpb24ubWVyZ2VkU2VsZWN0ZWRSb3dLZXlzLFxuICAgICAgICBjaGVja2JveFByb3BzTWFwOiBzZWxlY3Rpb24uY2hlY2tib3hQcm9wc01hcCxcbiAgICAgICAgaXNBbGxTZWxlY3RlZDogc2VsZWN0aW9uLmlzQWxsU2VsZWN0ZWQsXG4gICAgICAgIGlzSW5kZXRlcm1pbmF0ZTogc2VsZWN0aW9uLmlzSW5kZXRlcm1pbmF0ZSxcbiAgICAgICAgdHJpZ2dlclNlbGVjdGlvbjogc2VsZWN0aW9uLnRyaWdnZXJTZWxlY3Rpb24sXG4gICAgICAgIHRyaWdnZXJTZWxlY3RBbGw6IHNlbGVjdGlvbi50cmlnZ2VyU2VsZWN0QWxsLFxuICAgICAgICBzb3J0ZXI6IHBpcGVsaW5lLnNvcnRlcixcbiAgICAgICAgc2V0U29ydGVyOiBwaXBlbGluZS5zZXRTb3J0ZXIsXG4gICAgICAgIGZpbHRlcnM6IHBpcGVsaW5lLmZpbHRlcnMsXG4gICAgICAgIHNldEZpbHRlcnM6IHBpcGVsaW5lLnNldEZpbHRlcnMsXG4gICAgICAgIGdldFJvd0tleSxcbiAgICB9KTtcbiAgICAvLyBEZXYtb25seSB3YXJuaW5nOiBtaXhpbmcgcm93LWV4cGFuc2lvbiB3aXRoIHRyZWUtZGF0YSAoY2hpbGRyZW5Db2x1bW5OYW1lKVxuICAgIC8vIHByb2R1Y2VzIHR3byBjaGV2cm9ucyBwZXIgcm93ICh0aGUgbGVmdG1vc3QgX19leHBhbmRfXyBjb2x1bW4gZnJvbSB0aGUgd3JhcHBlclxuICAgIC8vIHBsdXMgdGhlIGtlcm5lbCdzIHBlci1pbmRlbnQgbmVzdCBleHBhbmQpLiByYy10YWJsZSBoYXMgdGhlIHNhbWUgZ2FwO1xuICAgIC8vIHBpY2sgb25lIG1vZGUgYXQgYSB0aW1lLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgKChfYyA9IHByb2Nlc3MuZW52KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuTk9ERV9FTlYpICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKChleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUuZXhwYW5kZWRSb3dSZW5kZXIpICYmIGNoaWxkcmVuQ29sdW1uTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tjb21wb25lbnRzLXVpIFRhYmxlXSBDb21iaW5pbmcgYGV4cGFuZGFibGUuZXhwYW5kZWRSb3dSZW5kZXJgIHdpdGggYGNoaWxkcmVuQ29sdW1uTmFtZWAgaXMgbm90IHN1cHBvcnRlZCDigJQgdGhlIGxlZnRtb3N0IGV4cGFuZCBjb2x1bW4gd2lsbCByZW5kZXIgYWxvbmdzaWRlIHRoZSBuZXN0ZWQgdHJlZSBleHBhbmRlci4gVXNlIG9uZSBtb2RlIGF0IGEgdGltZS4nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB3cmFwcGVkRXhwYW5kZWRSb3dSZW5kZXIgPSB1c2VNZW1vaXplZEZuKChyZWNvcmQsIGluZGV4LCBpbmRlbnQsIGV4cGFuZGVkKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgLy8gSG9ub3IgYHJvd0V4cGFuZGFibGVgOiBldmVuIGlmIGEgbm9uLWV4cGFuZGFibGUgcm93J3Mga2V5IHNuZWFrcyBpbnRvXG4gICAgICAgIC8vIGBleHBhbmRlZFJvd0tleXNgLCByZWZ1c2UgdG8gcmVuZGVyIGl0cyBleHBhbnNpb24gY29udGVudC5cbiAgICAgICAgaWYgKChleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUucm93RXhwYW5kYWJsZSkgJiYgIWV4cGFuZGFibGUucm93RXhwYW5kYWJsZShyZWNvcmQpKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiAoX2pzeChFeHBhbmRlZFJvd0NvbnRhaW5lciwgeyBjaGlsZHJlbjogKF9hID0gZXhwYW5kYWJsZSA9PT0gbnVsbCB8fCBleHBhbmRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHBhbmRhYmxlLmV4cGFuZGVkUm93UmVuZGVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChleHBhbmRhYmxlLCByZWNvcmQsIGluZGV4LCBpbmRlbnQsIGV4cGFuZGVkKSB9KSk7XG4gICAgfSk7XG4gICAgLy8gV2lyZSBrZXJuZWwncyBvbkV4cGFuZCAodHJpZ2dlcmVkIGJ5IGV4cGFuZFJvd0J5Q2xpY2spIHRvIG91ciBzdGF0ZS5cbiAgICBjb25zdCBrZXJuZWxPbkV4cGFuZCA9IHVzZU1lbW9pemVkRm4oKGV4cGFuZGVkLCByZWNvcmQpID0+IHtcbiAgICAgICAgLy8gVGhlIGtlcm5lbCBwYXNzZXMgYSByZWNvcmQgZnJvbSBgY3VycmVudERhdGFTb3VyY2VgIChwb3N0IHNvcnQvZmlsdGVyL3BhZ2luYXRlKS5cbiAgICAgICAgLy8gTG9va2luZyBpdCB1cCBhZ2FpbnN0IHRoZSByYXcgYGRhdGFTb3VyY2VgIHJldHVybnMgLTEgd2hlbiB0aGUgY29uc3VtZXJcbiAgICAgICAgLy8gcmVjcmVhdGVzIHRoZSBhcnJheSBlYWNoIHJlbmRlciwgb3IgYSBwb3NpdGlvbmFsbHkgd3JvbmcgaW5kZXggYWZ0ZXIgc29ydC5cbiAgICAgICAgLy8gVXNlIGBjdXJyZW50RGF0YVNvdXJjZWAgc28gdGhlIGluZGV4IG1hdGNoZXMgd2hhdCB0aGUga2VybmVsIGFjdHVhbGx5IHNlZXMuXG4gICAgICAgIGNvbnN0IHJlY29yZEtleSA9IGdldFJvd0tleShyZWNvcmQsIHBpcGVsaW5lLmN1cnJlbnREYXRhU291cmNlLmluZGV4T2YocmVjb3JkKSk7XG4gICAgICAgIGV4cGFuZC5vbktlcm5lbEV4cGFuZChleHBhbmRlZCwgcmVjb3JkLCByZWNvcmRLZXkpO1xuICAgIH0pO1xuICAgIGNvbnN0IG1lcmdlZEV4cGFuZGFibGUgPSB1c2VNZW1vKCgpID0+IGV4cGFuZGFibGVcbiAgICAgICAgPyBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGV4cGFuZGFibGUpLCB7IGV4cGFuZGVkUm93S2V5czogZXhwYW5kLm1lcmdlZEV4cGFuZGVkUm93S2V5cywgZXhwYW5kZWRSb3dSZW5kZXI6IGV4cGFuZGFibGUuZXhwYW5kZWRSb3dSZW5kZXJcbiAgICAgICAgICAgICAgICA/IHdyYXBwZWRFeHBhbmRlZFJvd1JlbmRlclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLCBzaG93RXhwYW5kQ29sdW1uOiBmYWxzZSwgb25FeHBhbmQ6IGtlcm5lbE9uRXhwYW5kIH0pXG4gICAgICAgIDogdW5kZWZpbmVkLCBbZXhwYW5kYWJsZSwgZXhwYW5kLm1lcmdlZEV4cGFuZGVkUm93S2V5cywgd3JhcHBlZEV4cGFuZGVkUm93UmVuZGVyLCBrZXJuZWxPbkV4cGFuZF0pO1xuICAgIGNvbnN0IHJlc29sdmVkUGFnaW5hdGlvbiA9IHBpcGVsaW5lLnBhZ2luYXRpb24gPT09IGZhbHNlXG4gICAgICAgID8geyBjdXJyZW50OiAxLCBwYWdlU2l6ZTogMTAgfVxuICAgICAgICA6IHBpcGVsaW5lLnBhZ2luYXRpb247XG4gICAgY29uc3QgcGFnaW5hdGlvbk5vZGUgPSBwYWdpbmF0aW9uICE9PSBmYWxzZSA/IChfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBgJHtwcmVmaXhDbHN9LXBhZ2luYXRpb25gLCBjaGlsZHJlbjogX2pzeChQYWdpbmF0aW9uLCB7IHRvdGFsOiBwaXBlbGluZS50b3RhbCwgcGFnZVNpemU6IHJlc29sdmVkUGFnaW5hdGlvbi5wYWdlU2l6ZSwgY3VycmVudDogcmVzb2x2ZWRQYWdpbmF0aW9uLmN1cnJlbnQsIG9uQ2hhbmdlOiAobmV4dFBhZ2UsIG5leHRQYWdlU2l6ZSkgPT4gcGlwZWxpbmUuc2V0UGFnaW5hdGlvbigoY3VycmVudFBhZ2luYXRpb24pID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnRQYWdpbmF0aW9uKSwgeyBjdXJyZW50OiBuZXh0UGFnZSwgcGFnZVNpemU6IG5leHRQYWdlU2l6ZSB9KSkpIH0pIH0pKSA6IG51bGw7XG4gICAgY29uc3Qgd3JhcHBlckNsYXNzTmFtZSA9IGpvaW5DbHMoYCR7cHJlZml4Q2xzfS13cmFwcGVyYCwgaXNMb2FkaW5nICYmIGAke3ByZWZpeENsc30td3JhcHBlci0tbG9hZGluZ2AsIGJvcmRlcmVkICYmIGAke3ByZWZpeENsc30td3JhcHBlci0tYm9yZGVyZWRgKTtcbiAgICBjb25zdCB0YWJsZUNsYXNzTmFtZSA9IGpvaW5DbHMoY2xzKCksIGNscyh2YXJpYW50KSwgcm93SG92ZXJhYmxlID09PSBmYWxzZSAmJiBjbHMoJ25vLWhvdmVyJyksIGNsYXNzTmFtZSk7XG4gICAgY29uc3QgZW1wdHlUZXh0ID0gaXNMb2FkaW5nICYmICFkYXRhU291cmNlLmxlbmd0aCA/IF9qc3goXCJzcGFuXCIsIHt9KSA6IF9qc3goVGFibGVFbXB0eVN0YXRlLCB7IGVtcHR5OiBlbXB0eSB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwcmVmaXhDbHMsXG4gICAgICAgIHdyYXBwZXJDbGFzc05hbWUsXG4gICAgICAgIHRhYmxlQ2xhc3NOYW1lLFxuICAgICAgICBsb2FkaW5nOiBpc0xvYWRpbmcsXG4gICAgICAgIGxvYWRpbmdJbmRpY2F0b3IsXG4gICAgICAgIHJlbmRlcmVkQ29sdW1ucyxcbiAgICAgICAgY3VycmVudERhdGFTb3VyY2U6IHBpcGVsaW5lLmN1cnJlbnREYXRhU291cmNlLFxuICAgICAgICBtZXJnZWRFeHBhbmRhYmxlLFxuICAgICAgICBlbXB0eVRleHQsXG4gICAgICAgIHdyYXBwZXJIdG1sUHJvcHM6IHJlc3QsXG4gICAgICAgIGZvcndhcmRlZEtlcm5lbFByb3BzOiB7XG4gICAgICAgICAgICByb3dLZXk6IHJvd0tleSxcbiAgICAgICAgICAgIGNoaWxkcmVuQ29sdW1uTmFtZSxcbiAgICAgICAgICAgIGluZGVudFNpemUsXG4gICAgICAgICAgICBvblJvdyxcbiAgICAgICAgICAgIHJvd0NsYXNzTmFtZSxcbiAgICAgICAgICAgIHN1bW1hcnksXG4gICAgICAgICAgICBmb290ZXIsXG4gICAgICAgICAgICBzaG93SGVhZGVyLFxuICAgICAgICAgICAgdGFibGVMYXlvdXQsXG4gICAgICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgcm93SG92ZXJhYmxlLFxuICAgICAgICAgICAgc3RpY2t5LFxuICAgICAgICAgICAgb25TY3JvbGwsXG4gICAgICAgIH0sXG4gICAgICAgIHBhZ2luYXRpb25Ob2RlLFxuICAgIH07XG59OyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -103,6 +103,10 @@ export function RawList(props, ref) {
103
103
  _useState6 = _slicedToArray(_useState5, 2),
104
104
  scrollMoving = _useState6[0],
105
105
  setScrollMoving = _useState6[1];
106
+ // Mirrors `offsetTop` synchronously so `syncScrollTop` can read the latest
107
+ // value immediately (a state updater can't safely have side effects — see
108
+ // the `onScroll` call below).
109
+ var offsetTopRef = useRef(0);
106
110
  var onScrollbarStartMove = function onScrollbarStartMove() {
107
111
  setScrollMoving(true);
108
112
  };
@@ -113,18 +117,28 @@ export function RawList(props, ref) {
113
117
  getKey: getKey
114
118
  };
115
119
  // ================================ Scroll ================================
120
+ // Wheel scroll, scrollbar drag, and touch move (see `onWheelDelta` /
121
+ // `useScrollDrag` / `useMobileTouchMove` below) all funnel through here —
122
+ // it's the single place a virtual-mode scroll position change happens.
123
+ //
124
+ // In virtual mode the holder is `overflow-y: hidden` (scrolling is faked via
125
+ // this offset, not native browser scroll), so setting `scrollTop`
126
+ // programmatically does not reliably dispatch a native `scroll` DOM event.
127
+ // `onFallbackScroll` below (bound to the holder's native `onScroll`) only
128
+ // fires in non-virtual mode. Call `onScroll` directly here — with the same
129
+ // event shape a native scroll would carry — so it fires for real user
130
+ // scrolling in virtual mode too.
116
131
  function syncScrollTop(newTop) {
117
- setOffsetTop(function (origin) {
118
- var value;
119
- if (typeof newTop === 'function') {
120
- value = newTop(origin);
121
- } else {
122
- value = newTop;
123
- }
124
- var alignedTop = keepInRange(value);
132
+ var value = typeof newTop === 'function' ? newTop(offsetTopRef.current) : newTop;
133
+ var alignedTop = keepInRange(value);
134
+ offsetTopRef.current = alignedTop;
135
+ setOffsetTop(alignedTop);
136
+ if (componentRef.current) {
125
137
  componentRef.current.scrollTop = alignedTop;
126
- return alignedTop;
127
- });
138
+ onScroll === null || onScroll === void 0 ? void 0 : onScroll({
139
+ currentTarget: componentRef.current
140
+ });
141
+ }
128
142
  }
129
143
  // ================================ Legacy ================================
130
144
  // Put ref here since the range is generate by follow
@@ -298,10 +312,10 @@ export function RawList(props, ref) {
298
312
  function onFallbackScroll(e) {
299
313
  var newScrollTop = e.currentTarget.scrollTop;
300
314
  if (newScrollTop !== offsetTop) {
315
+ // `syncScrollTop` calls `onScroll` itself — don't also fire it here, or
316
+ // fallback (non-virtual) mode would notify the consumer twice per event.
301
317
  syncScrollTop(newScrollTop);
302
318
  }
303
- // Trigger origin onScroll
304
- onScroll === null || onScroll === void 0 ? void 0 : onScroll(e);
305
319
  triggerScroll();
306
320
  }
307
321
  var keepInHorizontalRange = function keepInHorizontalRange(nextOffsetLeft) {
@@ -527,4 +541,4 @@ var VirtualListBase = /*#__PURE__*/React.forwardRef(RawList);
527
541
  VirtualListBase.displayName = VIRTUAL_LIST_COMPONENT_NAME;
528
542
  var VirtualList = /*#__PURE__*/React.memo(VirtualListBase);
529
543
  export default VirtualList;
530
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVmlydHVhbExpc3QvVmlydHVhbExpc3QuanMiLCJjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL1ZpcnR1YWxMaXN0L1ZpcnR1YWxMaXN0LnRzeCJdLCJuYW1lcyI6WyJfX3Jlc3QiLCJzIiwiZSIsInQiLCJwIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImkiLCJsZW5ndGgiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJjbHN4IiwiUmVzaXplT2JzZXJ2ZXIiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VFdmVudENhbGxiYWNrIiwiUmVhY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImZsdXNoU3luYyIsIkZpbGxlciIsInVzZUNoaWxkcmVuIiwidXNlRGlmZkl0ZW0iLCJ1c2VGcmFtZVdoZWVsIiwidXNlR2V0U2l6ZSIsInVzZUhlaWdodHMiLCJ1c2VNb2JpbGVUb3VjaE1vdmUiLCJ1c2VPcmlnaW5TY3JvbGwiLCJ1c2VTY3JvbGxEcmFnIiwidXNlU2Nyb2xsVG8iLCJTY3JvbGxCYXIiLCJnZXRTcGluU2l6ZSIsIlZJUlRVQUxfTElTVF9DT01QT05FTlRfTkFNRSIsIlZJUlRVQUxfTElTVF9QUkVGSVhDTFMiLCJFTVBUWV9EQVRBIiwiU2Nyb2xsU3R5bGUiLCJvdmVyZmxvd1kiLCJvdmVyZmxvd0FuY2hvciIsIlJhd0xpc3QiLCJwcm9wcyIsInJlZiIsIl9wcm9wcyRwcmVmaXhDbHMiLCJwcmVmaXhDbHMiLCJjbGFzc05hbWUiLCJoZWlnaHQiLCJpdGVtSGVpZ2h0IiwiX3Byb3BzJGZ1bGxIZWlnaHQiLCJmdWxsSGVpZ2h0Iiwic3R5bGUiLCJkYXRhIiwiY2hpbGRyZW4iLCJpdGVtS2V5IiwidmlydHVhbCIsImRpcmVjdGlvbiIsInNjcm9sbFdpZHRoIiwiX3Byb3BzJGNvbXBvbmVudCIsImNvbXBvbmVudCIsIkNvbXBvbmVudCIsIm9uU2Nyb2xsIiwib25WaXJ0dWFsU2Nyb2xsIiwib25WaXNpYmxlQ2hhbmdlIiwiaW5uZXJQcm9wcyIsImV4dHJhUmVuZGVyIiwic3R5bGVzIiwiX3Byb3BzJHNob3dTY3JvbGxCYXIiLCJzaG93U2Nyb2xsQmFyIiwicmVzdFByb3BzIiwiZ2V0S2V5IiwidXNlQ2FsbGJhY2siLCJpdGVtIiwiX3VzZUhlaWdodHMiLCJ1bmRlZmluZWQiLCJfdXNlSGVpZ2h0czIiLCJfc2xpY2VkVG9BcnJheSIsInNldEluc3RhbmNlUmVmIiwiY29sbGVjdEhlaWdodCIsImhlaWdodHMiLCJoZWlnaHRVcGRhdGVkTWFyayIsInVzZVZpcnR1YWwiLCJjb250YWluZXJIZWlnaHQiLCJ1c2VNZW1vIiwidmFsdWVzIiwibWFwcyIsInJlZHVjZSIsInRvdGFsIiwiY3VyciIsImlkIiwiaW5WaXJ0dWFsIiwiTWF0aCIsIm1heCIsImlzUlRMIiwibWVyZ2VkQ2xhc3NOYW1lIiwiX2RlZmluZVByb3BlcnR5IiwiY29uY2F0IiwibWVyZ2VkRGF0YSIsImNvbXBvbmVudFJlZiIsImZpbGxlcklubmVyUmVmIiwiY29udGFpbmVyUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIm9mZnNldFRvcCIsInNldE9mZnNldFRvcCIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwib2Zmc2V0TGVmdCIsInNldE9mZnNldExlZnQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNjcm9sbE1vdmluZyIsInNldFNjcm9sbE1vdmluZyIsIm9uU2Nyb2xsYmFyU3RhcnRNb3ZlIiwib25TY3JvbGxiYXJTdG9wTW92ZSIsInNoYXJlZENvbmZpZyIsInN5bmNTY3JvbGxUb3AiLCJuZXdUb3AiLCJvcmlnaW4iLCJ2YWx1ZSIsImFsaWduZWRUb3AiLCJrZWVwSW5SYW5nZSIsImN1cnJlbnQiLCJzY3JvbGxUb3AiLCJyYW5nZVJlZiIsInN0YXJ0IiwiZW5kIiwiZGlmZkl0ZW1SZWYiLCJfdXNlRGlmZkl0ZW0iLCJfdXNlRGlmZkl0ZW0yIiwiZGlmZkl0ZW0iLCJfUmVhY3QkdXNlTWVtbyIsIl9hIiwic2Nyb2xsSGVpZ2h0Iiwib2Zmc2V0Iiwib2Zmc2V0SGVpZ2h0IiwiaXRlbVRvcCIsInN0YXJ0SW5kZXgiLCJzdGFydE9mZnNldCIsImVuZEluZGV4IiwiZGF0YUxlbiIsImtleSIsImNhY2hlSGVpZ2h0IiwiZ2V0IiwiY3VycmVudEl0ZW1Cb3R0b20iLCJjZWlsIiwibWluIiwiZmlsbGVyT2Zmc2V0IiwiY2hhbmdlZFJlY29yZCIsImdldFJlY29yZCIsInNpemUiLCJyZWNvcmRLZXkiLCJBcnJheSIsImZyb20iLCJrZXlzIiwicHJldkNhY2hlSGVpZ2h0Iiwic3RhcnRJdGVtIiwic3RhcnRJbmRleEtleSIsInJlYWxTdGFydEhlaWdodCIsImRpZmZIZWlnaHQiLCJvcmkiLCJyZXNldFJlY29yZCIsIl9SZWFjdCR1c2VTdGF0ZSIsIndpZHRoIiwiX1JlYWN0JHVzZVN0YXRlMiIsInNldFNpemUiLCJvbkhvbGRlclJlc2l6ZSIsInNpemVJbmZvIiwib2Zmc2V0V2lkdGgiLCJ2ZXJ0aWNhbFNjcm9sbEJhclJlZiIsImhvcml6b250YWxTY3JvbGxCYXJSZWYiLCJob3Jpem9udGFsU2Nyb2xsQmFyU3BpblNpemUiLCJ2ZXJ0aWNhbFNjcm9sbEJhclNwaW5TaXplIiwibWF4U2Nyb2xsSGVpZ2h0IiwibWF4U2Nyb2xsSGVpZ2h0UmVmIiwibmV3U2Nyb2xsVG9wIiwiTnVtYmVyIiwiaXNOYU4iLCJpc1Njcm9sbEF0VG9wIiwiaXNTY3JvbGxBdEJvdHRvbSIsImlzU2Nyb2xsQXRMZWZ0IiwiaXNTY3JvbGxBdFJpZ2h0Iiwib3JpZ2luU2Nyb2xsIiwiZ2V0VmlydHVhbFNjcm9sbEluZm8iLCJ4IiwieSIsImxhc3RWaXJ0dWFsU2Nyb2xsSW5mb1JlZiIsInRyaWdnZXJTY3JvbGwiLCJwYXJhbXMiLCJuZXh0SW5mbyIsImFzc2lnbiIsIm9uU2Nyb2xsQmFyIiwibmV3U2Nyb2xsT2Zmc2V0IiwiaG9yaXpvbnRhbCIsIm5ld09mZnNldCIsIm9uRmFsbGJhY2tTY3JvbGwiLCJjdXJyZW50VGFyZ2V0Iiwia2VlcEluSG9yaXpvbnRhbFJhbmdlIiwibmV4dE9mZnNldExlZnQiLCJ0bXBPZmZzZXRMZWZ0Iiwib25XaGVlbERlbHRhIiwib2Zmc2V0WFkiLCJmcm9tSG9yaXpvbnRhbCIsImxlZnQiLCJ0b3AiLCJfdXNlRnJhbWVXaGVlbCIsIl91c2VGcmFtZVdoZWVsMiIsIm9uUmF3V2hlZWwiLCJvbkZpcmVGb3hTY3JvbGwiLCJpc0hvcml6b250YWwiLCJkZWx0YSIsInNtb290aE9mZnNldCIsImV2ZW50IiwiX3ZpcnR1YWxIYW5kbGVkIiwicHJldmVudERlZmF1bHQiLCJkZWx0YVgiLCJkZWx0YVkiLCJvbk1vek1vdXNlUGl4ZWxTY3JvbGwiLCJzY3JvbGxpbmdVcEF0VG9wIiwiZGV0YWlsIiwic2Nyb2xsaW5nRG93bkF0Qm90dG9tIiwiY29tcG9uZW50RWxlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhc3NpdmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibmV3T2Zmc2V0TGVmdCIsImRlbGF5SGlkZVNjcm9sbEJhciIsIl9iIiwiZGVsYXlIaWRkZW4iLCJzY3JvbGxUbyIsInVzZUltcGVyYXRpdmVIYW5kbGUiLCJuYXRpdmVFbGVtZW50IiwiZ2V0U2Nyb2xsSW5mbyIsImNvbmZpZyIsImlzUG9zU2Nyb2xsIiwiYXJnIiwiX3R5cGVvZiIsInJlbmRlckxpc3QiLCJzbGljZSIsImdldFNpemUiLCJleHRyYUNvbnRlbnQiLCJvZmZzZXRYIiwib2Zmc2V0WSIsInJ0bCIsImxpc3RDaGlsZHJlbiIsImNvbXBvbmVudFN0eWxlIiwib3ZlcmZsb3dYIiwicG9pbnRlckV2ZW50cyIsImNvbnRhaW5lclByb3BzIiwiZGlyIiwicG9zaXRpb24iLCJvblJlc2l6ZSIsIm9uTW91c2VFbnRlciIsIm9uSW5uZXJSZXNpemUiLCJleHRyYSIsInNjcm9sbE9mZnNldCIsInNjcm9sbFJhbmdlIiwib25TdGFydE1vdmUiLCJvblN0b3BNb3ZlIiwic3BpblNpemUiLCJjb250YWluZXJTaXplIiwidmVydGljYWxTY3JvbGxCYXIiLCJ0aHVtYlN0eWxlIiwidmVydGljYWxTY3JvbGxCYXJUaHVtYiIsImhvcml6b250YWxTY3JvbGxCYXIiLCJob3Jpem9udGFsU2Nyb2xsQmFyVGh1bWIiLCJWaXJ0dWFsTGlzdEJhc2UiLCJmb3J3YXJkUmVmIiwiZGlzcGxheU5hbWUiLCJWaXJ0dWFsTGlzdCIsIm1lbW8iXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUlBLE1BQU0sR0FBSSxJQUFJLElBQUksSUFBSSxDQUFDQSxNQUFNLElBQUssVUFBVUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7RUFDbEQsSUFBSUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNWLEtBQUssSUFBSUMsQ0FBQyxJQUFJSCxDQUFDLEVBQUUsSUFBSUksTUFBTSxDQUFDQyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDUCxDQUFDLEVBQUVHLENBQUMsQ0FBQyxJQUFJRixDQUFDLENBQUNPLE9BQU8sQ0FBQ0wsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUMvRUQsQ0FBQyxDQUFDQyxDQUFDLENBQUMsR0FBR0gsQ0FBQyxDQUFDRyxDQUFDLENBQUM7RUFDZixJQUFJSCxDQUFDLElBQUksSUFBSSxJQUFJLE9BQU9JLE1BQU0sQ0FBQ0sscUJBQXFCLEtBQUssVUFBVSxFQUMvRCxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVQLENBQUMsR0FBR0MsTUFBTSxDQUFDSyxxQkFBcUIsQ0FBQ1QsQ0FBQyxDQUFDLEVBQUVVLENBQUMsR0FBR1AsQ0FBQyxDQUFDUSxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO0lBQ3BFLElBQUlULENBQUMsQ0FBQ08sT0FBTyxDQUFDTCxDQUFDLENBQUNPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJTixNQUFNLENBQUNDLFNBQVMsQ0FBQ08sb0JBQW9CLENBQUNMLElBQUksQ0FBQ1AsQ0FBQyxFQUFFRyxDQUFDLENBQUNPLENBQUMsQ0FBQyxDQUFDLEVBQzFFUixD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QXdCO01BQzVDck0sYUFBYSxFQUFFQTtJQUFhLENBQUEsQ0FFL0I7RUFBQSxDQUFBLENBQUEsQ0FDRztBQUVWO0FBRUEsSUFBTXNNLGVBQWUsZ0JBQUd2UCxLQUFLLENBQUN3UCxVQUFVLENBQTBCbE8sT0FBTyxDQUFDO0FBRTFFaU8sZUFBZSxDQUFDRSxXQUFXLEdBQUd6TywyQkFBMkI7QUFFekQsSUFBTTBPLFdBQVcsZ0JBQUcxUCxLQUFLLENBQUMyUCxJQUFJLENBQUNKLGVBQWUsQ0FFdkI7QUFFdkIsZUFBZUcsV0FBVyIsImZpbGUiOiJjb21wb25lbnRzL1ZpcnR1YWxMaXN0L1ZpcnR1YWxMaXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGNsc3ggfSBmcm9tICdjbHN4JztcbmltcG9ydCBSZXNpemVPYnNlcnZlciBmcm9tICcuLi9SZXNpemVPYnNlcnZlcic7XG5pbXBvcnQgdXNlTGF5b3V0RWZmZWN0IGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTGF5b3V0RWZmZWN0JztcbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZmx1c2hTeW5jIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBGaWxsZXIgZnJvbSAnLi9GaWxsZXInO1xuaW1wb3J0IHVzZUNoaWxkcmVuIGZyb20gJy4vaG9va3MvdXNlQ2hpbGRyZW4nO1xuaW1wb3J0IHVzZURpZmZJdGVtIGZyb20gJy4vaG9va3MvdXNlRGlmZkl0ZW0nO1xuaW1wb3J0IHVzZUZyYW1lV2hlZWwgZnJvbSAnLi9ob29rcy91c2VGcmFtZVdoZWVsJztcbmltcG9ydCB7IHVzZUdldFNpemUgfSBmcm9tICcuL2hvb2tzL3VzZUdldFNpemUnO1xuaW1wb3J0IHVzZUhlaWdodHMgZnJvbSAnLi9ob29rcy91c2VIZWlnaHRzJztcbmltcG9ydCB1c2VNb2JpbGVUb3VjaE1vdmUgZnJvbSAnLi9ob29rcy91c2VNb2JpbGVUb3VjaE1vdmUnO1xuaW1wb3J0IHVzZU9yaWdpblNjcm9sbCBmcm9tICcuL2hvb2tzL3VzZU9yaWdpblNjcm9sbCc7XG5pbXBvcnQgdXNlU2Nyb2xsRHJhZyBmcm9tICcuL2hvb2tzL3VzZVNjcm9sbERyYWcnO1xuaW1wb3J0IHVzZVNjcm9sbFRvIGZyb20gJy4vaG9va3MvdXNlU2Nyb2xsVG8nO1xuaW1wb3J0IFNjcm9sbEJhciBmcm9tICcuL1Njcm9sbEJhcic7XG5pbXBvcnQgeyBnZXRTcGluU2l6ZSB9IGZyb20gJy4vdXRpbHMvc2Nyb2xsYmFyVXRpbCc7XG5pbXBvcnQgeyBWSVJUVUFMX0xJU1RfQ09NUE9ORU5UX05BTUUsIFZJUlRVQUxfTElTVF9QUkVGSVhDTFMsIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0ICcuL3N0eWxlJztcbmNvbnN0IEVNUFRZX0RBVEEgPSBbXTtcbmNvbnN0IFNjcm9sbFN0eWxlID0ge1xuICAgIG92ZXJmbG93WTogJ2F1dG8nLFxuICAgIG92ZXJmbG93QW5jaG9yOiAnbm9uZScsXG59O1xuZXhwb3J0IGZ1bmN0aW9uIFJhd0xpc3QocHJvcHMsIHJlZikge1xuICAgIGNvbnN0IHsgcHJlZml4Q2xzID0gVklSVFVBTF9MSVNUX1BSRUZJWENMUywgY2xhc3NOYW1lLCBoZWlnaHQsIGl0ZW1IZWlnaHQsIGZ1bGxIZWlnaHQgPSB0cnVlLCBzdHlsZSwgZGF0YSwgY2hpbGRyZW4sIGl0ZW1LZXksIHZpcnR1YWwsIGRpcmVjdGlvbiwgc2Nyb2xsV2lkdGgsIGNvbXBvbmVudDogQ29tcG9uZW50ID0gJ2RpdicsIG9uU2Nyb2xsLCBvblZpcnR1YWxTY3JvbGwsIG9uVmlzaWJsZUNoYW5nZSwgaW5uZXJQcm9wcywgZXh0cmFSZW5kZXIsIHN0eWxlcywgc2hvd1Njcm9sbEJhciA9ICdvcHRpb25hbCcgfSA9IHByb3BzLCByZXN0UHJvcHMgPSBfX3Jlc3QocHJvcHMsIFtcInByZWZpeENsc1wiLCBcImNsYXNzTmFtZVwiLCBcImhlaWdodFwiLCBcIml0ZW1IZWlnaHRcIiwgXCJmdWxsSGVpZ2h0XCIsIFwic3R5bGVcIiwgXCJkYXRhXCIsIFwiY2hpbGRyZW5cIiwgXCJpdGVtS2V5XCIsIFwidmlydHVhbFwiLCBcImRpcmVjdGlvblwiLCBcInNjcm9sbFdpZHRoXCIsIFwiY29tcG9uZW50XCIsIFwib25TY3JvbGxcIiwgXCJvblZpcnR1YWxTY3JvbGxcIiwgXCJvblZpc2libGVDaGFuZ2VcIiwgXCJpbm5lclByb3BzXCIsIFwiZXh0cmFSZW5kZXJcIiwgXCJzdHlsZXNcIiwgXCJzaG93U2Nyb2xsQmFyXCJdKTtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEl0ZW0gS2V5ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBnZXRLZXkgPSBSZWFjdC51c2VDYWxsYmFjaygoaXRlbSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1LZXkgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtS2V5KGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGl0ZW1baXRlbUtleV07XG4gICAgfSwgW2l0ZW1LZXldKTtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBIZWlnaHQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBbc2V0SW5zdGFuY2VSZWYsIGNvbGxlY3RIZWlnaHQsIGhlaWdodHMsIGhlaWdodFVwZGF0ZWRNYXJrXSA9IHVzZUhlaWdodHMoZ2V0S2V5LCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IE1JU0MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgdXNlVmlydHVhbCA9ICEhKHZpcnR1YWwgIT09IGZhbHNlICYmIGhlaWdodCAmJiBpdGVtSGVpZ2h0KTtcbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSBSZWFjdC51c2VNZW1vKCgpID0+IE9iamVjdC52YWx1ZXMoaGVpZ2h0cy5tYXBzKS5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiB0b3RhbCArIGN1cnIsIDApLCBbaGVpZ2h0cy5pZF0pO1xuICAgIGNvbnN0IGluVmlydHVhbCA9IHVzZVZpcnR1YWwgJiZcbiAgICAgICAgZGF0YSAmJlxuICAgICAgICAoTWF0aC5tYXgoaXRlbUhlaWdodCAqIGRhdGEubGVuZ3RoLCBjb250YWluZXJIZWlnaHQpID4gaGVpZ2h0IHx8ICEhc2Nyb2xsV2lkdGgpO1xuICAgIGNvbnN0IGlzUlRMID0gZGlyZWN0aW9uID09PSAncnRsJztcbiAgICBjb25zdCBtZXJnZWRDbGFzc05hbWUgPSBjbHN4KHByZWZpeENscywgeyBbYCR7cHJlZml4Q2xzfS1ydGxgXTogaXNSVEwgfSwgY2xhc3NOYW1lKTtcbiAgICBjb25zdCBtZXJnZWREYXRhID0gZGF0YSB8fCBFTVBUWV9EQVRBO1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBmaWxsZXJJbm5lclJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBJdGVtIEtleSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgW29mZnNldFRvcCwgc2V0T2Zmc2V0VG9wXSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtvZmZzZXRMZWZ0LCBzZXRPZmZzZXRMZWZ0XSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtzY3JvbGxNb3ZpbmcsIHNldFNjcm9sbE1vdmluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3Qgb25TY3JvbGxiYXJTdGFydE1vdmUgPSAoKSA9PiB7XG4gICAgICAgIHNldFNjcm9sbE1vdmluZyh0cnVlKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uU2Nyb2xsYmFyU3RvcE1vdmUgPSAoKSA9PiB7XG4gICAgICAgIHNldFNjcm9sbE1vdmluZyhmYWxzZSk7XG4gICAgfTtcbiAgICBjb25zdCBzaGFyZWRDb25maWcgPSB7XG4gICAgICAgIGdldEtleSxcbiAgICB9O1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFNjcm9sbCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGZ1bmN0aW9uIHN5bmNTY3JvbGxUb3AobmV3VG9wKSB7XG4gICAgICAgIHNldE9mZnNldFRvcCgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG5ld1RvcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3VG9wKG9yaWdpbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ld1RvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFsaWduZWRUb3AgPSBrZWVwSW5SYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICBjb21wb25lbnRSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBhbGlnbmVkVG9wO1xuICAgICAgICAgICAgcmV0dXJuIGFsaWduZWRUb3A7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBMZWdhY3kgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBQdXQgcmVmIGhlcmUgc2luY2UgdGhlIHJhbmdlIGlzIGdlbmVyYXRlIGJ5IGZvbGxvd1xuICAgIGNvbnN0IHJhbmdlUmVmID0gdXNlUmVmKHsgc3RhcnQ6IDAsIGVuZDogbWVyZ2VkRGF0YS5sZW5ndGggfSk7XG4gICAgY29uc3QgZGlmZkl0ZW1SZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgW2RpZmZJdGVtXSA9IHVzZURpZmZJdGVtKG1lcmdlZERhdGEsIGdldEtleSk7XG4gICAgZGlmZkl0ZW1SZWYuY3VycmVudCA9IGRpZmZJdGVtO1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IFZpc2libGUgQ2FsY3VsYXRpb24gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IHsgc2Nyb2xsSGVpZ2h0LCBzdGFydCwgZW5kLCBvZmZzZXQ6IGZpbGxlck9mZnNldCwgfSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdXNlVmlydHVhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzY3JvbGxIZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzdGFydDogMCxcbiAgICAgICAgICAgICAgICBlbmQ6IG1lcmdlZERhdGEubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWx3YXlzIHVzZSB2aXJ0dWFsIHNjcm9sbCBiYXIgaW4gYXZvaWQgc2hha2luZ1xuICAgICAgICBpZiAoIWluVmlydHVhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzY3JvbGxIZWlnaHQ6ICgoX2EgPSBmaWxsZXJJbm5lclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub2Zmc2V0SGVpZ2h0KSB8fCAwLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICAgICAgICAgIGVuZDogbWVyZ2VkRGF0YS5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICAgIG9mZnNldDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXRlbVRvcCA9IDA7XG4gICAgICAgIGxldCBzdGFydEluZGV4O1xuICAgICAgICBsZXQgc3RhcnRPZmZzZXQ7XG4gICAgICAgIGxldCBlbmRJbmRleDtcbiAgICAgICAgY29uc3QgZGF0YUxlbiA9IG1lcmdlZERhdGEubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFMZW47IGkgKz0gMSkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IG1lcmdlZERhdGFbaV07XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBnZXRLZXkoaXRlbSk7XG4gICAgICAgICAgICBjb25zdCBjYWNoZUhlaWdodCA9IGhlaWdodHMuZ2V0KGtleSk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SXRlbUJvdHRvbSA9IGl0ZW1Ub3AgKyAoY2FjaGVIZWlnaHQgPT09IHVuZGVmaW5lZCA/IGl0ZW1IZWlnaHQgOiBjYWNoZUhlaWdodCk7XG4gICAgICAgICAgICAvLyBDaGVjayBpdGVtIHRvcCBpbiB0aGUgcmFuZ2VcbiAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbUJvdHRvbSA+PSBvZmZzZXRUb3AgJiYgc3RhcnRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBpdGVtVG9wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2hlY2sgaXRlbSBib3R0b20gaW4gdGhlIHJhbmdlLiBXZSB3aWxsIHJlbmRlciBhZGRpdGlvbmFsIG9uZSBpdGVtIGZvciBtb3Rpb24gdXNhZ2VcbiAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbUJvdHRvbSA+IG9mZnNldFRvcCArIGhlaWdodCAmJiBlbmRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZW5kSW5kZXggPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbVRvcCA9IGN1cnJlbnRJdGVtQm90dG9tO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdoZW4gc2Nyb2xsVG9wIGF0IHRoZSBlbmQgYnV0IGRhdGEgY3V0IHRvIHNtYWxsIGNvdW50IHdpbGwgcmVhY2ggdGhpc1xuICAgICAgICBpZiAoc3RhcnRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gMDtcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIGVuZEluZGV4ID0gTWF0aC5jZWlsKGhlaWdodCAvIGl0ZW1IZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlbmRJbmRleCA9IG1lcmdlZERhdGEubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBHaXZlIGNhY2hlIHRvIGltcHJvdmUgc2Nyb2xsIGV4cGVyaWVuY2VcbiAgICAgICAgZW5kSW5kZXggPSBNYXRoLm1pbihlbmRJbmRleCArIDEsIG1lcmdlZERhdGEubGVuZ3RoIC0gMSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY3JvbGxIZWlnaHQ6IGl0ZW1Ub3AsXG4gICAgICAgICAgICBzdGFydDogc3RhcnRJbmRleCxcbiAgICAgICAgICAgIGVuZDogZW5kSW5kZXgsXG4gICAgICAgICAgICBvZmZzZXQ6IHN0YXJ0T2Zmc2V0LFxuICAgICAgICB9O1xuICAgIH0sIFtpblZpcnR1YWwsIHVzZVZpcnR1YWwsIG9mZnNldFRvcCwgbWVyZ2VkRGF0YSwgaGVpZ2h0VXBkYXRlZE1hcmssIGhlaWdodF0pO1xuICAgIHJhbmdlUmVmLmN1cnJlbnQuc3RhcnQgPSBzdGFydDtcbiAgICByYW5nZVJlZi5jdXJyZW50LmVuZCA9IGVuZDtcbiAgICAvLyBXaGVuIHNjcm9sbCB1cCwgZmlyc3QgdmlzaWJsZSBpdGVtIGdldCByZWFsIGhlaWdodCBtYXkgbm90IHNhbWUgYXMgYGl0ZW1IZWlnaHRgLFxuICAgIC8vIFdoaWNoIHdpbGwgbWFrZSBzY3JvbGwganVtcC5cbiAgICAvLyBMZXQncyBzeW5jIHNjcm9sbCB0b3AgdG8gYXZvaWQganVtcFxuICAgIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWRSZWNvcmQgPSBoZWlnaHRzLmdldFJlY29yZCgpO1xuICAgICAgICBpZiAoY2hhbmdlZFJlY29yZC5zaXplID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmRLZXkgPSBBcnJheS5mcm9tKGNoYW5nZWRSZWNvcmQua2V5cygpKVswXTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZDYWNoZUhlaWdodCA9IGNoYW5nZWRSZWNvcmQuZ2V0KHJlY29yZEtleSk7XG4gICAgICAgICAgICAvLyBRdWljayBzd2l0Y2ggZGF0YSBtYXkgY2F1c2UgYHN0YXJ0YCBub3QgaW4gYG1lcmdlZERhdGFgIGFueW1vcmVcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0SXRlbSA9IG1lcmdlZERhdGFbc3RhcnRdO1xuICAgICAgICAgICAgaWYgKHN0YXJ0SXRlbSAmJiBwcmV2Q2FjaGVIZWlnaHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXhLZXkgPSBnZXRLZXkoc3RhcnRJdGVtKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRJbmRleEtleSA9PT0gcmVjb3JkS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWxTdGFydEhlaWdodCA9IGhlaWdodHMuZ2V0KHJlY29yZEtleSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZmZIZWlnaHQgPSByZWFsU3RhcnRIZWlnaHQgLSBpdGVtSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBzeW5jU2Nyb2xsVG9wKChvcmkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmkgKyBkaWZmSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaGVpZ2h0cy5yZXNldFJlY29yZCgpO1xuICAgIH0sIFtzY3JvbGxIZWlnaHRdKTtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU2l6ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBbc2l6ZSwgc2V0U2l6ZV0gPSBSZWFjdC51c2VTdGF0ZSh7IHdpZHRoOiAwLCBoZWlnaHQ6IGhlaWdodCAhPT0gbnVsbCAmJiBoZWlnaHQgIT09IHZvaWQgMCA/IGhlaWdodCA6IDAgfSk7XG4gICAgY29uc3Qgb25Ib2xkZXJSZXNpemUgPSAoc2l6ZUluZm8pID0+IHtcbiAgICAgICAgc2V0U2l6ZSh7XG4gICAgICAgICAgICB3aWR0aDogc2l6ZUluZm8ub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHNpemVJbmZvLm9mZnNldEhlaWdodCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBIYWNrIG9uIHNjcm9sbGJhciB0byBlbmFibGUgZmxhc2ggY2FsbFxuICAgIGNvbnN0IHZlcnRpY2FsU2Nyb2xsQmFyUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGhvcml6b250YWxTY3JvbGxCYXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbEJhclNwaW5TaXplID0gUmVhY3QudXNlTWVtbygoKSA9PiBnZXRTcGluU2l6ZShzaXplLndpZHRoLCBzY3JvbGxXaWR0aCksIFtzaXplLndpZHRoLCBzY3JvbGxXaWR0aF0pO1xuICAgIGNvbnN0IHZlcnRpY2FsU2Nyb2xsQmFyU3BpblNpemUgPSBSZWFjdC51c2VNZW1vKCgpID0+IGdldFNwaW5TaXplKHNpemUuaGVpZ2h0LCBzY3JvbGxIZWlnaHQpLCBbc2l6ZS5oZWlnaHQsIHNjcm9sbEhlaWdodF0pO1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gSW4gUmFuZ2UgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IG1heFNjcm9sbEhlaWdodCA9IHNjcm9sbEhlaWdodCAtIGhlaWdodDtcbiAgICBjb25zdCBtYXhTY3JvbGxIZWlnaHRSZWYgPSB1c2VSZWYobWF4U2Nyb2xsSGVpZ2h0KTtcbiAgICBtYXhTY3JvbGxIZWlnaHRSZWYuY3VycmVudCA9IG1heFNjcm9sbEhlaWdodDtcbiAgICBmdW5jdGlvbiBrZWVwSW5SYW5nZShuZXdTY3JvbGxUb3ApIHtcbiAgICAgICAgbGV0IG5ld1RvcCA9IG5ld1Njcm9sbFRvcDtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obWF4U2Nyb2xsSGVpZ2h0UmVmLmN1cnJlbnQpKSB7XG4gICAgICAgICAgICBuZXdUb3AgPSBNYXRoLm1pbihuZXdUb3AsIG1heFNjcm9sbEhlaWdodFJlZi5jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBuZXdUb3AgPSBNYXRoLm1heChuZXdUb3AsIDApO1xuICAgICAgICByZXR1cm4gbmV3VG9wO1xuICAgIH1cbiAgICBjb25zdCBpc1Njcm9sbEF0VG9wID0gb2Zmc2V0VG9wIDw9IDA7XG4gICAgY29uc3QgaXNTY3JvbGxBdEJvdHRvbSA9IG9mZnNldFRvcCA+PSBtYXhTY3JvbGxIZWlnaHQ7XG4gICAgY29uc3QgaXNTY3JvbGxBdExlZnQgPSBvZmZzZXRMZWZ0IDw9IDA7XG4gICAgY29uc3QgaXNTY3JvbGxBdFJpZ2h0ID0gISFzY3JvbGxXaWR0aCAmJiBvZmZzZXRMZWZ0ID49IHNjcm9sbFdpZHRoIC0gc2l6ZS53aWR0aDtcbiAgICBjb25zdCBvcmlnaW5TY3JvbGwgPSB1c2VPcmlnaW5TY3JvbGwoaXNTY3JvbGxBdFRvcCwgaXNTY3JvbGxBdEJvdHRvbSwgaXNTY3JvbGxBdExlZnQsIGlzU2Nyb2xsQXRSaWdodCk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU2Nyb2xsID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgZ2V0VmlydHVhbFNjcm9sbEluZm8gPSAoKSA9PiAoe1xuICAgICAgICB4OiBpc1JUTCA/IC1vZmZzZXRMZWZ0IDogb2Zmc2V0TGVmdCxcbiAgICAgICAgeTogb2Zmc2V0VG9wLFxuICAgIH0pO1xuICAgIGNvbnN0IGxhc3RWaXJ0dWFsU2Nyb2xsSW5mb1JlZiA9IHVzZVJlZihnZXRWaXJ0dWFsU2Nyb2xsSW5mbygpKTtcbiAgICBjb25zdCB0cmlnZ2VyU2Nyb2xsID0gdXNlRXZlbnRDYWxsYmFjaygocGFyYW1zKSA9PiB7XG4gICAgICAgIGlmIChvblZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRJbmZvID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBnZXRWaXJ0dWFsU2Nyb2xsSW5mbygpKSwgcGFyYW1zKTtcbiAgICAgICAgICAgIC8vIFRyaWdnZXIgd2hlbiBvZmZzZXQgY2hhbmdlZFxuICAgICAgICAgICAgaWYgKGxhc3RWaXJ0dWFsU2Nyb2xsSW5mb1JlZi5jdXJyZW50LnggIT09IG5leHRJbmZvLnggfHxcbiAgICAgICAgICAgICAgICBsYXN0VmlydHVhbFNjcm9sbEluZm9SZWYuY3VycmVudC55ICE9PSBuZXh0SW5mby55KSB7XG4gICAgICAgICAgICAgICAgb25WaXJ0dWFsU2Nyb2xsKG5leHRJbmZvKTtcbiAgICAgICAgICAgICAgICBsYXN0VmlydHVhbFNjcm9sbEluZm9SZWYuY3VycmVudCA9IG5leHRJbmZvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gb25TY3JvbGxCYXIobmV3U2Nyb2xsT2Zmc2V0LCBob3Jpem9udGFsKSB7XG4gICAgICAgIGNvbnN0IG5ld09mZnNldCA9IG5ld1Njcm9sbE9mZnNldDtcbiAgICAgICAgaWYgKGhvcml6b250YWwpIHtcbiAgICAgICAgICAgIGZsdXNoU3luYygoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0T2Zmc2V0TGVmdChuZXdPZmZzZXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0cmlnZ2VyU2Nyb2xsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzeW5jU2Nyb2xsVG9wKG5ld09mZnNldCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gV2hlbiBkYXRhIHNpemUgcmVkdWNlLiBJdCBtYXkgdHJpZ2dlciBuYXRpdmUgc2Nyb2xsIGV2ZW50IGJhY2sgdG8gZml0IHNjcm9sbCBwb3NpdGlvblxuICAgIGZ1bmN0aW9uIG9uRmFsbGJhY2tTY3JvbGwoZSkge1xuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcDogbmV3U2Nyb2xsVG9wIH0gPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgIGlmIChuZXdTY3JvbGxUb3AgIT09IG9mZnNldFRvcCkge1xuICAgICAgICAgICAgc3luY1Njcm9sbFRvcChuZXdTY3JvbGxUb3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRyaWdnZXIgb3JpZ2luIG9uU2Nyb2xsXG4gICAgICAgIG9uU2Nyb2xsID09PSBudWxsIHx8IG9uU2Nyb2xsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblNjcm9sbChlKTtcbiAgICAgICAgdHJpZ2dlclNjcm9sbCgpO1xuICAgIH1cbiAgICBjb25zdCBrZWVwSW5Ib3Jpem9udGFsUmFuZ2UgPSAobmV4dE9mZnNldExlZnQpID0+IHtcbiAgICAgICAgbGV0IHRtcE9mZnNldExlZnQgPSBuZXh0T2Zmc2V0TGVmdDtcbiAgICAgICAgY29uc3QgbWF4ID0gc2Nyb2xsV2lkdGggPyBzY3JvbGxXaWR0aCAtIHNpemUud2lkdGggOiAwO1xuICAgICAgICB0bXBPZmZzZXRMZWZ0ID0gTWF0aC5tYXgodG1wT2Zmc2V0TGVmdCwgMCk7XG4gICAgICAgIHRtcE9mZnNldExlZnQgPSBNYXRoLm1pbih0bXBPZmZzZXRMZWZ0LCBtYXgpO1xuICAgICAgICByZXR1cm4gdG1wT2Zmc2V0TGVmdDtcbiAgICB9O1xuICAgIGNvbnN0IG9uV2hlZWxEZWx0YSA9IHVzZUV2ZW50Q2FsbGJhY2soKG9mZnNldFhZLCBmcm9tSG9yaXpvbnRhbCkgPT4ge1xuICAgICAgICBpZiAoZnJvbUhvcml6b250YWwpIHtcbiAgICAgICAgICAgIGZsdXNoU3luYygoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0T2Zmc2V0TGVmdCgobGVmdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0T2Zmc2V0TGVmdCA9IGxlZnQgKyAoaXNSVEwgPyAtb2Zmc2V0WFkgOiBvZmZzZXRYWSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZWVwSW5Ib3Jpem9udGFsUmFuZ2UobmV4dE9mZnNldExlZnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0cmlnZ2VyU2Nyb2xsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzeW5jU2Nyb2xsVG9wKCh0b3ApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdUb3AgPSB0b3AgKyBvZmZzZXRYWTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3VG9wO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBTaW5jZSB0aGlzIGFkZGVkIGluIGdsb2JhbCxzaG91bGQgdXNlIHJlZiB0byBrZWVwIHVwZGF0ZVxuICAgIGNvbnN0IFtvblJhd1doZWVsLCBvbkZpcmVGb3hTY3JvbGxdID0gdXNlRnJhbWVXaGVlbCh1c2VWaXJ0dWFsLCBpc1Njcm9sbEF0VG9wLCBpc1Njcm9sbEF0Qm90dG9tLCBpc1Njcm9sbEF0TGVmdCwgaXNTY3JvbGxBdFJpZ2h0LCAhIXNjcm9sbFdpZHRoLCBvbldoZWVsRGVsdGEpO1xuICAgIC8vIE1vYmlsZSB0b3VjaCBtb3ZlXG4gICAgdXNlTW9iaWxlVG91Y2hNb3ZlKHVzZVZpcnR1YWwsIGNvbXBvbmVudFJlZiwgKGlzSG9yaXpvbnRhbCwgZGVsdGEsIHNtb290aE9mZnNldCwgZSkgPT4ge1xuICAgICAgICBjb25zdCBldmVudCA9IGU7XG4gICAgICAgIGlmIChvcmlnaW5TY3JvbGwoaXNIb3Jpem9udGFsLCBkZWx0YSwgc21vb3RoT2Zmc2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpeCBuZXN0IExpc3QgdHJpZ2dlciBUb3VjaE1vdmUgZXZlbnRcbiAgICAgICAgaWYgKCFldmVudCB8fCAhZXZlbnQuX3ZpcnR1YWxIYW5kbGVkKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBldmVudC5fdmlydHVhbEhhbmRsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25SYXdXaGVlbCh7XG4gICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQoKSB7IH0sXG4gICAgICAgICAgICAgICAgZGVsdGFYOiBpc0hvcml6b250YWwgPyBkZWx0YSA6IDAsXG4gICAgICAgICAgICAgICAgZGVsdGFZOiBpc0hvcml6b250YWwgPyAwIDogZGVsdGEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICAvLyBNb3VzZURvd24gZHJhZyBmb3Igc2Nyb2xsXG4gICAgdXNlU2Nyb2xsRHJhZyhpblZpcnR1YWwsIGNvbXBvbmVudFJlZiwgKG9mZnNldCkgPT4ge1xuICAgICAgICBzeW5jU2Nyb2xsVG9wKCh0b3ApID0+IHRvcCArIG9mZnNldCk7XG4gICAgfSk7XG4gICAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgLy8gRmlyZWZveCBvbmx5XG4gICAgICAgIGZ1bmN0aW9uIG9uTW96TW91c2VQaXhlbFNjcm9sbChlKSB7XG4gICAgICAgICAgICAvLyBzY3JvbGxpbmcgYXQgdG9wL2JvdHRvbSBsaW1pdFxuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsaW5nVXBBdFRvcCA9IGlzU2Nyb2xsQXRUb3AgJiYgZS5kZXRhaWwgPCAwO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsaW5nRG93bkF0Qm90dG9tID0gaXNTY3JvbGxBdEJvdHRvbSAmJiBlLmRldGFpbCA+IDA7XG4gICAgICAgICAgICBpZiAodXNlVmlydHVhbCAmJiAhc2Nyb2xsaW5nVXBBdFRvcCAmJiAhc2Nyb2xsaW5nRG93bkF0Qm90dG9tKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEVsZSA9IGNvbXBvbmVudFJlZi5jdXJyZW50O1xuICAgICAgICBjb21wb25lbnRFbGUuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBvblJhd1doZWVsLCB7IHBhc3NpdmU6IGZhbHNlIH0pO1xuICAgICAgICBjb21wb25lbnRFbGUuYWRkRXZlbnRMaXN0ZW5lcignRE9NTW91c2VTY3JvbGwnLCBvbkZpcmVGb3hTY3JvbGwsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgY29tcG9uZW50RWxlLmFkZEV2ZW50TGlzdGVuZXIoJ01vek1vdXNlUGl4ZWxTY3JvbGwnLCBvbk1vek1vdXNlUGl4ZWxTY3JvbGwsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb21wb25lbnRFbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBvblJhd1doZWVsKTtcbiAgICAgICAgICAgIGNvbXBvbmVudEVsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdET01Nb3VzZVNjcm9sbCcsIG9uRmlyZUZveFNjcm9sbCk7XG4gICAgICAgICAgICBjb21wb25lbnRFbGUucmVtb3ZlRXZlbnRMaXN0ZW5lcignTW96TW91c2VQaXhlbFNjcm9sbCcsIG9uTW96TW91c2VQaXhlbFNjcm9sbCk7XG4gICAgICAgIH07XG4gICAgfSwgW3VzZVZpcnR1YWwsIGlzU2Nyb2xsQXRUb3AsIGlzU2Nyb2xsQXRCb3R0b21dKTtcbiAgICAvLyBTeW5jIHNjcm9sbCBsZWZ0XG4gICAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHNjcm9sbFdpZHRoKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdPZmZzZXRMZWZ0ID0ga2VlcEluSG9yaXpvbnRhbFJhbmdlKG9mZnNldExlZnQpO1xuICAgICAgICAgICAgc2V0T2Zmc2V0TGVmdChuZXdPZmZzZXRMZWZ0KTtcbiAgICAgICAgICAgIHRyaWdnZXJTY3JvbGwoeyB4OiBuZXdPZmZzZXRMZWZ0IH0pO1xuICAgICAgICB9XG4gICAgfSwgW3NpemUud2lkdGgsIHNjcm9sbFdpZHRoXSk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFJlZiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgZGVsYXlIaWRlU2Nyb2xsQmFyID0gKCkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2EgPSB2ZXJ0aWNhbFNjcm9sbEJhclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVsYXlIaWRkZW4oKTtcbiAgICAgICAgKF9iID0gaG9yaXpvbnRhbFNjcm9sbEJhclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZGVsYXlIaWRkZW4oKTtcbiAgICB9O1xuICAgIGNvbnN0IHNjcm9sbFRvID0gdXNlU2Nyb2xsVG8oY29tcG9uZW50UmVmLCBtZXJnZWREYXRhLCBoZWlnaHRzLCBpdGVtSGVpZ2h0LCBnZXRLZXksICgpID0+IGNvbGxlY3RIZWlnaHQodHJ1ZSksIHN5bmNTY3JvbGxUb3AsIGRlbGF5SGlkZVNjcm9sbEJhcik7XG4gICAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgICAgIG5hdGl2ZUVsZW1lbnQ6IGNvbnRhaW5lclJlZi5jdXJyZW50LFxuICAgICAgICBnZXRTY3JvbGxJbmZvOiBnZXRWaXJ0dWFsU2Nyb2xsSW5mbyxcbiAgICAgICAgc2Nyb2xsVG86IChjb25maWcpID0+IHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGlzUG9zU2Nyb2xsKGFyZykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmcgJiYgdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgKCdsZWZ0JyBpbiBhcmcgfHwgJ3RvcCcgaW4gYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1Bvc1Njcm9sbChjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgLy8gU2Nyb2xsIFhcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmxlZnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRPZmZzZXRMZWZ0KGtlZXBJbkhvcml6b250YWxSYW5nZShjb25maWcubGVmdCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTY3JvbGwgWVxuICAgICAgICAgICAgICAgIHNjcm9sbFRvKGNvbmZpZy50b3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2Nyb2xsVG8oY29uZmlnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KSk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRWZmZWN0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLyoqIFdlIG5lZWQgdG9sZCBvdXRzaWRlIHRoYXQgc29tZSBsaXN0IG5vdCByZW5kZXJlZCAqL1xuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChvblZpc2libGVDaGFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckxpc3QgPSBtZXJnZWREYXRhLnNsaWNlKHN0YXJ0LCBlbmQgKyAxKTtcbiAgICAgICAgICAgIG9uVmlzaWJsZUNoYW5nZShyZW5kZXJMaXN0LCBtZXJnZWREYXRhKTtcbiAgICAgICAgfVxuICAgIH0sIFtzdGFydCwgZW5kLCBtZXJnZWREYXRhXSk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRXh0cmEgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgZ2V0U2l6ZSA9IHVzZUdldFNpemUobWVyZ2VkRGF0YSwgZ2V0S2V5LCBoZWlnaHRzLCBpdGVtSGVpZ2h0KTtcbiAgICBjb25zdCBleHRyYUNvbnRlbnQgPSBleHRyYVJlbmRlciA9PT0gbnVsbCB8fCBleHRyYVJlbmRlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXh0cmFSZW5kZXIoe1xuICAgICAgICBzdGFydCxcbiAgICAgICAgZW5kLFxuICAgICAgICB2aXJ0dWFsOiBpblZpcnR1YWwsXG4gICAgICAgIG9mZnNldFg6IG9mZnNldExlZnQsXG4gICAgICAgIG9mZnNldFk6IGZpbGxlck9mZnNldCxcbiAgICAgICAgcnRsOiBpc1JUTCxcbiAgICAgICAgZ2V0U2l6ZSxcbiAgICB9KTtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBSZW5kZXIgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBsaXN0Q2hpbGRyZW4gPSB1c2VDaGlsZHJlbihtZXJnZWREYXRhLCBzdGFydCwgZW5kLCBzY3JvbGxXaWR0aCwgb2Zmc2V0TGVmdCwgc2V0SW5zdGFuY2VSZWYsIGNoaWxkcmVuLCBzaGFyZWRDb25maWcpO1xuICAgIGxldCBjb21wb25lbnRTdHlsZSA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaGVpZ2h0KSB7XG4gICAgICAgIGNvbXBvbmVudFN0eWxlID0gT2JqZWN0LmFzc2lnbih7IFtmdWxsSGVpZ2h0ID8gJ2hlaWdodCcgOiAnbWF4SGVpZ2h0J106IGhlaWdodCB9LCBTY3JvbGxTdHlsZSk7XG4gICAgICAgIGlmICh1c2VWaXJ0dWFsKSB7XG4gICAgICAgICAgICBjb21wb25lbnRTdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJztcbiAgICAgICAgICAgIGlmIChzY3JvbGxXaWR0aCkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFN0eWxlLm92ZXJmbG93WCA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNjcm9sbE1vdmluZykge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29udGFpbmVyUHJvcHMgPSB7fTtcbiAgICBpZiAoaXNSVEwpIHtcbiAgICAgICAgY29udGFpbmVyUHJvcHMuZGlyID0gJ3J0bCc7XG4gICAgfVxuICAgIHJldHVybiAoX2pzeHMoXCJkaXZcIiwgT2JqZWN0LmFzc2lnbih7IHJlZjogY29udGFpbmVyUmVmLCBzdHlsZTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdHlsZSksIHsgcG9zaXRpb246ICdyZWxhdGl2ZScgfSksIGNsYXNzTmFtZTogbWVyZ2VkQ2xhc3NOYW1lIH0sIGNvbnRhaW5lclByb3BzLCByZXN0UHJvcHMsIHsgY2hpbGRyZW46IFtfanN4KFJlc2l6ZU9ic2VydmVyLCB7IG9uUmVzaXplOiBvbkhvbGRlclJlc2l6ZSwgY2hpbGRyZW46IF9qc3goQ29tcG9uZW50LCB7IGNsYXNzTmFtZTogYCR7cHJlZml4Q2xzfS1ob2xkZXJgLCBzdHlsZTogY29tcG9uZW50U3R5bGUsIHJlZjogY29tcG9uZW50UmVmLCBvblNjcm9sbDogb25GYWxsYmFja1Njcm9sbCwgb25Nb3VzZUVudGVyOiBkZWxheUhpZGVTY3JvbGxCYXIsIGNoaWxkcmVuOiBfanN4KEZpbGxlciwgeyBwcmVmaXhDbHM6IHByZWZpeENscywgaGVpZ2h0OiBzY3JvbGxIZWlnaHQsIG9mZnNldFg6IG9mZnNldExlZnQsIG9mZnNldFk6IGZpbGxlck9mZnNldCwgc2Nyb2xsV2lkdGg6IHNjcm9sbFdpZHRoLCBvbklubmVyUmVzaXplOiBjb2xsZWN0SGVpZ2h0LCByZWY6IGZpbGxlcklubmVyUmVmLCBpbm5lclByb3BzOiBpbm5lclByb3BzLCBydGw6IGlzUlRMLCBleHRyYTogZXh0cmFDb250ZW50LCBjaGlsZHJlbjogbGlzdENoaWxkcmVuIH0pIH0pIH0pLCBpblZpcnR1YWwgJiYgc2Nyb2xsSGVpZ2h0ID4gaGVpZ2h0ICYmIChfanN4KFNjcm9sbEJhciwgeyByZWY6IHZlcnRpY2FsU2Nyb2xsQmFyUmVmLCBwcmVmaXhDbHM6IHByZWZpeENscywgc2Nyb2xsT2Zmc2V0OiBvZmZzZXRUb3AsIHNjcm9sbFJhbmdlOiBzY3JvbGxIZWlnaHQsIHJ0bDogaXNSVEwsIG9uU2Nyb2xsOiBvblNjcm9sbEJhciwgb25TdGFydE1vdmU6IG9uU2Nyb2xsYmFyU3RhcnRNb3ZlLCBvblN0b3BNb3ZlOiBvblNjcm9sbGJhclN0b3BNb3ZlLCBzcGluU2l6ZTogdmVydGljYWxTY3JvbGxCYXJTcGluU2l6ZSwgY29udGFpbmVyU2l6ZTogc2l6ZS5oZWlnaHQsIHN0eWxlOiBzdHlsZXMgPT09IG51bGwgfHwgc3R5bGVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdHlsZXMudmVydGljYWxTY3JvbGxCYXIsIHRodW1iU3R5bGU6IHN0eWxlcyA9PT0gbnVsbCB8fCBzdHlsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0eWxlcy52ZXJ0aWNhbFNjcm9sbEJhclRodW1iLCBzaG93U2Nyb2xsQmFyOiBzaG93U2Nyb2xsQmFyIH0pKSwgaW5WaXJ0dWFsICYmIHNjcm9sbFdpZHRoID4gc2l6ZS53aWR0aCAmJiAoX2pzeChTY3JvbGxCYXIsIHsgcmVmOiBob3Jpem9udGFsU2Nyb2xsQmFyUmVmLCBwcmVmaXhDbHM6IHByZWZpeENscywgc2Nyb2xsT2Zmc2V0OiBvZmZzZXRMZWZ0LCBzY3JvbGxSYW5nZTogc2Nyb2xsV2lkdGgsIHJ0bDogaXNSVEwsIG9uU2Nyb2xsOiBvblNjcm9sbEJhciwgb25TdGFydE1vdmU6IG9uU2Nyb2xsYmFyU3RhcnRNb3ZlLCBvblN0b3BNb3ZlOiBvblNjcm9sbGJhclN0b3BNb3ZlLCBzcGluU2l6ZTogaG9yaXpvbnRhbFNjcm9sbEJhclNwaW5TaXplLCBjb250YWluZXJTaXplOiBzaXplLndpZHRoLCBob3Jpem9udGFsOiB0cnVlLCBzdHlsZTogc3R5bGVzID09PSBudWxsIHx8IHN0eWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3R5bGVzLmhvcml6b250YWxTY3JvbGxCYXIsIHRodW1iU3R5bGU6IHN0eWxlcyA9PT0gbnVsbCB8fCBzdHlsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0eWxlcy5ob3Jpem9udGFsU2Nyb2xsQmFyVGh1bWIsIHNob3dTY3JvbGxCYXI6IHNob3dTY3JvbGxCYXIgfSkpXSB9KSkpO1xufVxuY29uc3QgVmlydHVhbExpc3RCYXNlID0gUmVhY3QuZm9yd2FyZFJlZihSYXdMaXN0KTtcblZpcnR1YWxMaXN0QmFzZS5kaXNwbGF5TmFtZSA9IFZJUlRVQUxfTElTVF9DT01QT05FTlRfTkFNRTtcbmNvbnN0IFZpcnR1YWxMaXN0ID0gUmVhY3QubWVtbyhWaXJ0dWFsTGlzdEJhc2UpO1xuZXhwb3J0IGRlZmF1bHQgVmlydHVhbExpc3Q7IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
544
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVmlydHVhbExpc3QvVmlydHVhbExpc3QuanMiLCJjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL1ZpcnR1YWxMaXN0L1ZpcnR1YWxMaXN0LnRzeCJdLCJuYW1lcyI6WyJfX3Jlc3QiLCJzIiwiZSIsInQiLCJwIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImkiLCJsZW5ndGgiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJjbHN4IiwiUmVzaXplT2JzZXJ2ZXIiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VFdmVudENhbGxiYWNrIiwiUmVhY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImZsdXNoU3luYyIsIkZpbGxlciIsInVzZUNoaWxkcmVuIiwidXNlRGlmZkl0ZW0iLCJ1c2VGcmFtZVdoZWVsIiwidXNlR2V0U2l6ZSIsInVzZUhlaWdodHMiLCJ1c2VNb2JpbGVUb3VjaE1vdmUiLCJ1c2VPcmlnaW5TY3JvbGwiLCJ1c2VTY3JvbGxEcmFnIiwidXNlU2Nyb2xsVG8iLCJTY3JvbGxCYXIiLCJnZXRTcGluU2l6ZSIsIlZJUlRVQUxfTElTVF9DT01QT05FTlRfTkFNRSIsIlZJUlRVQUxfTElTVF9QUkVGSVhDTFMiLCJFTVBUWV9EQVRBIiwiU2Nyb2xsU3R5bGUiLCJvdmVyZmxvd1kiLCJvdmVyZmxvd0FuY2hvciIsIlJhd0xpc3QiLCJwcm9wcyIsInJlZiIsIl9wcm9wcyRwcmVmaXhDbHMiLCJwcmVmaXhDbHMiLCJjbGFzc05hbWUiLCJoZWlnaHQiLCJpdGVtSGVpZ2h0IiwiX3Byb3BzJGZ1bGxIZWlnaHQiLCJmdWxsSGVpZ2h0Iiwic3R5bGUiLCJkYXRhIiwiY2hpbGRyZW4iLCJpdGVtS2V5IiwidmlydHVhbCIsImRpcmVjdGlvbiIsInNjcm9sbFdpZHRoIiwiX3Byb3BzJGNvbXBvbmVudCIsImNvbXBvbmVudCIsIkNvbXBvbmVudCIsIm9uU2Nyb2xsIiwib25WaXJ0dWFsU2Nyb2xsIiwib25WaXNpYmxlQ2hhbmdlIiwiaW5uZXJQcm9wcyIsImV4dHJhUmVuZGVyIiwic3R5bGVzIiwiX3Byb3BzJHNob3dTY3JvbGxCYXIiLCJzaG93U2Nyb2xsQmFyIiwicmVzdFByb3BzIiwiZ2V0S2V5IiwidXNlQ2FsbGJhY2siLCJpdGVtIiwiX3VzZUhlaWdodHMiLCJ1bmRlZmluZWQiLCJfdXNlSGVpZ2h0czIiLCJfc2xpY2VkVG9BcnJheSIsInNldEluc3RhbmNlUmVmIiwiY29sbGVjdEhlaWdodCIsImhlaWdodHMiLCJoZWlnaHRVcGRhdGVkTWFyayIsInVzZVZpcnR1YWwiLCJjb250YWluZXJIZWlnaHQiLCJ1c2VNZW1vIiwidmFsdWVzIiwibWFwcyIsInJlZHVjZSIsInRvdGFsIiwiY3VyciIsImlkIiwiaW5WaXJ0dWFsIiwiTWF0aCIsIm1heCIsImlzUlRMIiwibWVyZ2VkQ2xhc3NOYW1lIiwiX2RlZmluZVByb3BlcnR5IiwiY29uY2F0IiwibWVyZ2VkRGF0YSIsImNvbXBvbmVudFJlZiIsImZpbGxlcklubmVyUmVmIiwiY29udGFpbmVyUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIm9mZnNldFRvcCIsInNldE9mZnNldFRvcCIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwib2Zmc2V0TGVmdCIsInNldE9mZnNldExlZnQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNjcm9sbE1vdmluZyIsInNldFNjcm9sbE1vdmluZyIsIm9mZnNldFRvcFJlZiIsIm9uU2Nyb2xsYmFyU3RhcnRNb3ZlIiwib25TY3JvbGxiYXJTdG9wTW92ZSIsInNoYXJlZENvbmZpZyIsInN5bmNTY3JvbGxUb3AiLCJuZXdUb3AiLCJ2YWx1ZSIsImN1cnJlbnQiLCJhbGlnbmVkVG9wIiwia2VlcEluUmFuZ2UiLCJzY3JvbGxUb3AiLCJjdXJyZW50VGFyZ2V0IiwicmFuZ2VSZWYiLCJzdGFydCIsImVuZCIsImRpZmZJdGVtUmVmIiwiX3VzZURpZmZJdGVtIiwiX3VzZURpZmZJdGVtMiIsImRpZmZJdGVtIiwiX1JlYWN0JHVzZU1lbW8iLCJfYSIsInNjcm9sbEhlaWdodCIsIm9mZnNldCIsIm9mZnNldEhlaWdodCIsIml0ZW1Ub3AiLCJzdGFydEluZGV4Iiwic3RhcnRPZmZzZXQiLCJlbmRJbmRleCIsImRhdGFMZW4iLCJrZXkiLCJjYWNoZUhlaWdodCIsImdldCIsImN1cnJlbnRJdGVtQm90dG9tIiwiY2VpbCIsIm1pbiIsImZpbGxlck9mZnNldCIsImNoYW5nZWRSZWNvcmQiLCJnZXRSZWNvcmQiLCJzaXplIiwicmVjb3JkS2V5IiwiQXJyYXkiLCJmcm9tIiwia2V5cyIsInByZXZDYWNoZUhlaWdodCIsInN0YXJ0SXRlbSIsInN0YXJ0SW5kZXhLZXkiLCJyZWFsU3RhcnRIZWlnaHQiLCJkaWZmSGVpZ2h0Iiwib3JpIiwicmVzZXRSZWNvcmQiLCJfUmVhY3QkdXNlU3RhdGUiLCJ3aWR0aCIsIl9SZWFjdCR1c2VTdGF0ZTIiLCJzZXRTaXplIiwib25Ib2xkZXJSZXNpemUiLCJzaXplSW5mbyIsIm9mZnNldFdpZHRoIiwidmVydGljYWxTY3JvbGxCYXJSZWYiLCJob3Jpem9udGFsU2Nyb2xsQmFyUmVmIiwiaG9yaXpvbnRhbFNjcm9sbEJhclNwaW5TaXplIiwidmVydGljYWxTY3JvbGxCYXJTcGluU2l6ZSIsIm1heFNjcm9sbEhlaWdodCIsIm1heFNjcm9sbEhlaWdodFJlZiIsIm5ld1Njcm9sbFRvcCIsIk51bWJlciIsImlzTmFOIiwiaXNTY3JvbGxBdFRvcCIsImlzU2Nyb2xsQXRCb3R0b20iLCJpc1Njcm9sbEF0TGVmdCIsImlzU2Nyb2xsQXRSaWdodCIsIm9yaWdpblNjcm9sbCIsImdldFZpcnR1YWxTY3JvbGxJbmZvIiwieCIsInkiLCJsYXN0VmlydHVhbFNjcm9sbEluZm9SZWYiLCJ0cmlnZ2VyU2Nyb2xsIiwicGFyYW1zIiwibmV4dEluZm8iLCJhc3NpZ24iLCJvblNjcm9sbEJhciIsIm5ld1Njcm9sbE9mZnNldCIsImhvcml6b250YWwiLCJuZXdPZmZzZXQiLCJvbkZhbGxiYWNrU2Nyb2xsIiwia2VlcEluSG9yaXpvbnRhbFJhbmdlIiwibmV4dE9mZnNldExlZnQiLCJ0bXBPZmZzZXRMZWZ0Iiwib25XaGVlbERlbHRhIiwib2Zmc2V0WFkiLCJmcm9tSG9yaXpvbnRhbCIsImxlZnQiLCJ0b3AiLCJfdXNlRnJhbWVXaGVlbCIsIl91c2VGcmFtZVdoZWVsMiIsIm9uUmF3V2hlZWwiLCJvbkZpcmVGb3hTY3JvbGwiLCJpc0hvcml6b250YWwiLCJkZWx0YSIsInNtb290aE9mZnNldCIsImV2ZW50IiwiX3ZpcnR1YWxIYW5kbGVkIiwicHJldmVudERlZmF1bHQiLCJkZWx0YVgiLCJkZWx0YVkiLCJvbk1vek1vdXNlUGl4ZWxTY3JvbGwiLCJzY3JvbGxpbmdVcEF0VG9wIiwiZGV0YWlsIiwic2Nyb2xsaW5nRG93bkF0Qm90dG9tIiwiY29tcG9uZW50RWxlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhc3NpdmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibmV3T2Zmc2V0TGVmdCIsImRlbGF5SGlkZVNjcm9sbEJhciIsIl9iIiwiZGVsYXlIaWRkZW4iLCJzY3JvbGxUbyIsInVzZUltcGVyYXRpdmVIYW5kbGUiLCJuYXRpdmVFbGVtZW50IiwiZ2V0U2Nyb2xsSW5mbyIsImNvbmZpZyIsImlzUG9zU2Nyb2xsIiwiYXJnIiwiX3R5cGVvZiIsInJlbmRlckxpc3QiLCJzbGljZSIsImdldFNpemUiLCJleHRyYUNvbnRlbnQiLCJvZmZzZXRYIiwib2Zmc2V0WSIsInJ0bCIsImxpc3RDaGlsZHJlbiIsImNvbXBvbmVudFN0eWxlIiwib3ZlcmZsb3dYIiwicG9pbnRlckV2ZW50cyIsImNvbnRhaW5lclByb3BzIiwiZGlyIiwicG9zaXRpb24iLCJvblJlc2l6ZSIsIm9uTW91c2VFbnRlciIsIm9uSW5uZXJSZXNpemUiLCJleHRyYSIsInNjcm9sbE9mZnNldCIsInNjcm9sbFJhbmdlIiwib25TdGFydE1vdmUiLCJvblN0b3BNb3ZlIiwic3BpblNpemUiLCJjb250YWluZXJTaXplIiwidmVydGljYWxTY3JvbGxCYXIiLCJ0aHVtYlN0eWxlIiwidmVydGljYWxTY3JvbGxCYXJUaHVtYiIsImhvcml6b250YWxTY3JvbGxCYXIiLCJob3Jpem9udGFsU2Nyb2xsQmFyVGh1bWIiLCJWaXJ0dWFsTGlzdEJhc2UiLCJmb3J3YXJkUmVmIiwiZGlzcGxheU5hbWUiLCJWaXJ0dWFsTGlzdCIsIm1lbW8iXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUlBLE1BQU0sR0FBSSxJQUFJLElBQUksSUFBSSxDQUFDQSxNQUFNLElBQUssVUFBVUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7RUFDbEQsSUFBSUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNWLEtBQUssSUFBSUMsQ0FBQyxJQUFJSCxDQUFDLEVBQUUsSUFBSUksTUFBTSxDQUFDQyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDUCxDQUFDLEVBQUVHLENBQUMsQ0FBQyxJQUFJRixDQUFDLENBQUNPLE9BQU8sQ0FBQ0wsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUMvRUQsQ0FBQyxDQUFDQyxDQUFDLENBQUMsR0FBR0gsQ0FBQyxDQUFDRyxDQUFDLENBQUM7RUFDZixJQUFJSCxDQUFDLElBQUksSUFBSSxJQUFJLE9BQU9JLE1BQU0sQ0FBQ0sscUJBQXFCLEtBQUssVUFBVSxFQUMvRCxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVQLENBQUMsR0FBR0MsTUFBTSxDQUFDSyxxQkFBcUIsQ0FBQ1QsQ0FBQyxDQUFDLEVBQUVVLENBQUMsR0FBR1AsQ0FBQyxDQUFDUSxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO0lBQ3BFLElBQUlULENBQUMsQ0FBQ08sT0FBTyxDQUFDTCxDQUFDLENBQUNPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJTixNQUFNLENBQUNDLFNBQVMsQ0FBQ08sb0JBQW9CLENBQUNMLElBQUksQ0FBQ1AsQ0FBQyxFQUFFRyxDQUFDLENBQUNPLENBQUMsQ0FBQyxDQUFDLEVB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QUFNLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQU5BLE1BQU0sQ0FBRXNNLG1CQUFtQjtNQUNsQ0YsVUFBVSxFQUFFcE0sTUFBTSxLQUFBLElBQUEsSUFBTkEsTUFBTSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFOQSxNQUFNLENBQUV1TSx3QkFBd0I7TUFDNUNyTSxhQUFhLEVBQUVBO0lBQWEsQ0FBQSxDQUUvQjtFQUFBLENBQUEsQ0FBQSxDQUNHO0FBRVY7QUFFQSxJQUFNc00sZUFBZSxnQkFBR3ZQLEtBQUssQ0FBQ3dQLFVBQVUsQ0FBMEJsTyxPQUFPLENBQUM7QUFFMUVpTyxlQUFlLENBQUNFLFdBQVcsR0FBR3pPLDJCQUEyQjtBQUV6RCxJQUFNME8sV0FBVyxnQkFBRzFQLEtBQUssQ0FBQzJQLElBQUksQ0FBQ0osZUFBZSxDQUV2QjtBQUV2QixlQUFlRyxXQUFXIiwiZmlsZSI6ImNvbXBvbmVudHMvVmlydHVhbExpc3QvVmlydHVhbExpc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgY2xzeCB9IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IFJlc2l6ZU9ic2VydmVyIGZyb20gJy4uL1Jlc2l6ZU9ic2VydmVyJztcbmltcG9ydCB1c2VMYXlvdXRFZmZlY3QgZnJvbSAnQDFtb25leS9ob29rcy91c2VMYXlvdXRFZmZlY3QnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBmbHVzaFN5bmMgfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IEZpbGxlciBmcm9tICcuL0ZpbGxlcic7XG5pbXBvcnQgdXNlQ2hpbGRyZW4gZnJvbSAnLi9ob29rcy91c2VDaGlsZHJlbic7XG5pbXBvcnQgdXNlRGlmZkl0ZW0gZnJvbSAnLi9ob29rcy91c2VEaWZmSXRlbSc7XG5pbXBvcnQgdXNlRnJhbWVXaGVlbCBmcm9tICcuL2hvb2tzL3VzZUZyYW1lV2hlZWwnO1xuaW1wb3J0IHsgdXNlR2V0U2l6ZSB9IGZyb20gJy4vaG9va3MvdXNlR2V0U2l6ZSc7XG5pbXBvcnQgdXNlSGVpZ2h0cyBmcm9tICcuL2hvb2tzL3VzZUhlaWdodHMnO1xuaW1wb3J0IHVzZU1vYmlsZVRvdWNoTW92ZSBmcm9tICcuL2hvb2tzL3VzZU1vYmlsZVRvdWNoTW92ZSc7XG5pbXBvcnQgdXNlT3JpZ2luU2Nyb2xsIGZyb20gJy4vaG9va3MvdXNlT3JpZ2luU2Nyb2xsJztcbmltcG9ydCB1c2VTY3JvbGxEcmFnIGZyb20gJy4vaG9va3MvdXNlU2Nyb2xsRHJhZyc7XG5pbXBvcnQgdXNlU2Nyb2xsVG8gZnJvbSAnLi9ob29rcy91c2VTY3JvbGxUbyc7XG5pbXBvcnQgU2Nyb2xsQmFyIGZyb20gJy4vU2Nyb2xsQmFyJztcbmltcG9ydCB7IGdldFNwaW5TaXplIH0gZnJvbSAnLi91dGlscy9zY3JvbGxiYXJVdGlsJztcbmltcG9ydCB7IFZJUlRVQUxfTElTVF9DT01QT05FTlRfTkFNRSwgVklSVFVBTF9MSVNUX1BSRUZJWENMUywgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgJy4vc3R5bGUnO1xuY29uc3QgRU1QVFlfREFUQSA9IFtdO1xuY29uc3QgU2Nyb2xsU3R5bGUgPSB7XG4gICAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gICAgb3ZlcmZsb3dBbmNob3I6ICdub25lJyxcbn07XG5leHBvcnQgZnVuY3Rpb24gUmF3TGlzdChwcm9wcywgcmVmKSB7XG4gICAgY29uc3QgeyBwcmVmaXhDbHMgPSBWSVJUVUFMX0xJU1RfUFJFRklYQ0xTLCBjbGFzc05hbWUsIGhlaWdodCwgaXRlbUhlaWdodCwgZnVsbEhlaWdodCA9IHRydWUsIHN0eWxlLCBkYXRhLCBjaGlsZHJlbiwgaXRlbUtleSwgdmlydHVhbCwgZGlyZWN0aW9uLCBzY3JvbGxXaWR0aCwgY29tcG9uZW50OiBDb21wb25lbnQgPSAnZGl2Jywgb25TY3JvbGwsIG9uVmlydHVhbFNjcm9sbCwgb25WaXNpYmxlQ2hhbmdlLCBpbm5lclByb3BzLCBleHRyYVJlbmRlciwgc3R5bGVzLCBzaG93U2Nyb2xsQmFyID0gJ29wdGlvbmFsJyB9ID0gcHJvcHMsIHJlc3RQcm9wcyA9IF9fcmVzdChwcm9wcywgW1wicHJlZml4Q2xzXCIsIFwiY2xhc3NOYW1lXCIsIFwiaGVpZ2h0XCIsIFwiaXRlbUhlaWdodFwiLCBcImZ1bGxIZWlnaHRcIiwgXCJzdHlsZVwiLCBcImRhdGFcIiwgXCJjaGlsZHJlblwiLCBcIml0ZW1LZXlcIiwgXCJ2aXJ0dWFsXCIsIFwiZGlyZWN0aW9uXCIsIFwic2Nyb2xsV2lkdGhcIiwgXCJjb21wb25lbnRcIiwgXCJvblNjcm9sbFwiLCBcIm9uVmlydHVhbFNjcm9sbFwiLCBcIm9uVmlzaWJsZUNoYW5nZVwiLCBcImlubmVyUHJvcHNcIiwgXCJleHRyYVJlbmRlclwiLCBcInN0eWxlc1wiLCBcInNob3dTY3JvbGxCYXJcIl0pO1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gSXRlbSBLZXkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IGdldEtleSA9IFJlYWN0LnVzZUNhbGxiYWNrKChpdGVtKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbUtleSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1LZXkoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogaXRlbVtpdGVtS2V5XTtcbiAgICB9LCBbaXRlbUtleV0pO1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEhlaWdodCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IFtzZXRJbnN0YW5jZVJlZiwgY29sbGVjdEhlaWdodCwgaGVpZ2h0cywgaGVpZ2h0VXBkYXRlZE1hcmtdID0gdXNlSGVpZ2h0cyhnZXRLZXksIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gTUlTQyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCB1c2VWaXJ0dWFsID0gISEodmlydHVhbCAhPT0gZmFsc2UgJiYgaGVpZ2h0ICYmIGl0ZW1IZWlnaHQpO1xuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gT2JqZWN0LnZhbHVlcyhoZWlnaHRzLm1hcHMpLnJlZHVjZSgodG90YWwsIGN1cnIpID0+IHRvdGFsICsgY3VyciwgMCksIFtoZWlnaHRzLmlkXSk7XG4gICAgY29uc3QgaW5WaXJ0dWFsID0gdXNlVmlydHVhbCAmJlxuICAgICAgICBkYXRhICYmXG4gICAgICAgIChNYXRoLm1heChpdGVtSGVpZ2h0ICogZGF0YS5sZW5ndGgsIGNvbnRhaW5lckhlaWdodCkgPiBoZWlnaHQgfHwgISFzY3JvbGxXaWR0aCk7XG4gICAgY29uc3QgaXNSVEwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgIGNvbnN0IG1lcmdlZENsYXNzTmFtZSA9IGNsc3gocHJlZml4Q2xzLCB7IFtgJHtwcmVmaXhDbHN9LXJ0bGBdOiBpc1JUTCB9LCBjbGFzc05hbWUpO1xuICAgIGNvbnN0IG1lcmdlZERhdGEgPSBkYXRhIHx8IEVNUFRZX0RBVEE7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGZpbGxlcklubmVyUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZihudWxsKTtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEl0ZW0gS2V5ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBbb2Zmc2V0VG9wLCBzZXRPZmZzZXRUb3BdID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW29mZnNldExlZnQsIHNldE9mZnNldExlZnRdID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW3Njcm9sbE1vdmluZywgc2V0U2Nyb2xsTW92aW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICAvLyBNaXJyb3JzIGBvZmZzZXRUb3BgIHN5bmNocm9ub3VzbHkgc28gYHN5bmNTY3JvbGxUb3BgIGNhbiByZWFkIHRoZSBsYXRlc3RcbiAgICAvLyB2YWx1ZSBpbW1lZGlhdGVseSAoYSBzdGF0ZSB1cGRhdGVyIGNhbid0IHNhZmVseSBoYXZlIHNpZGUgZWZmZWN0cyDigJQgc2VlXG4gICAgLy8gdGhlIGBvblNjcm9sbGAgY2FsbCBiZWxvdykuXG4gICAgY29uc3Qgb2Zmc2V0VG9wUmVmID0gdXNlUmVmKDApO1xuICAgIGNvbnN0IG9uU2Nyb2xsYmFyU3RhcnRNb3ZlID0gKCkgPT4ge1xuICAgICAgICBzZXRTY3JvbGxNb3ZpbmcodHJ1ZSk7XG4gICAgfTtcbiAgICBjb25zdCBvblNjcm9sbGJhclN0b3BNb3ZlID0gKCkgPT4ge1xuICAgICAgICBzZXRTY3JvbGxNb3ZpbmcoZmFsc2UpO1xuICAgIH07XG4gICAgY29uc3Qgc2hhcmVkQ29uZmlnID0ge1xuICAgICAgICBnZXRLZXksXG4gICAgfTtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTY3JvbGwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBXaGVlbCBzY3JvbGwsIHNjcm9sbGJhciBkcmFnLCBhbmQgdG91Y2ggbW92ZSAoc2VlIGBvbldoZWVsRGVsdGFgIC9cbiAgICAvLyBgdXNlU2Nyb2xsRHJhZ2AgLyBgdXNlTW9iaWxlVG91Y2hNb3ZlYCBiZWxvdykgYWxsIGZ1bm5lbCB0aHJvdWdoIGhlcmUg4oCUXG4gICAgLy8gaXQncyB0aGUgc2luZ2xlIHBsYWNlIGEgdmlydHVhbC1tb2RlIHNjcm9sbCBwb3NpdGlvbiBjaGFuZ2UgaGFwcGVucy5cbiAgICAvL1xuICAgIC8vIEluIHZpcnR1YWwgbW9kZSB0aGUgaG9sZGVyIGlzIGBvdmVyZmxvdy15OiBoaWRkZW5gIChzY3JvbGxpbmcgaXMgZmFrZWQgdmlhXG4gICAgLy8gdGhpcyBvZmZzZXQsIG5vdCBuYXRpdmUgYnJvd3NlciBzY3JvbGwpLCBzbyBzZXR0aW5nIGBzY3JvbGxUb3BgXG4gICAgLy8gcHJvZ3JhbW1hdGljYWxseSBkb2VzIG5vdCByZWxpYWJseSBkaXNwYXRjaCBhIG5hdGl2ZSBgc2Nyb2xsYCBET00gZXZlbnQuXG4gICAgLy8gYG9uRmFsbGJhY2tTY3JvbGxgIGJlbG93IChib3VuZCB0byB0aGUgaG9sZGVyJ3MgbmF0aXZlIGBvblNjcm9sbGApIG9ubHlcbiAgICAvLyBmaXJlcyBpbiBub24tdmlydHVhbCBtb2RlLiBDYWxsIGBvblNjcm9sbGAgZGlyZWN0bHkgaGVyZSDigJQgd2l0aCB0aGUgc2FtZVxuICAgIC8vIGV2ZW50IHNoYXBlIGEgbmF0aXZlIHNjcm9sbCB3b3VsZCBjYXJyeSDigJQgc28gaXQgZmlyZXMgZm9yIHJlYWwgdXNlclxuICAgIC8vIHNjcm9sbGluZyBpbiB2aXJ0dWFsIG1vZGUgdG9vLlxuICAgIGZ1bmN0aW9uIHN5bmNTY3JvbGxUb3AobmV3VG9wKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIG5ld1RvcCA9PT0gJ2Z1bmN0aW9uJyA/IG5ld1RvcChvZmZzZXRUb3BSZWYuY3VycmVudCkgOiBuZXdUb3A7XG4gICAgICAgIGNvbnN0IGFsaWduZWRUb3AgPSBrZWVwSW5SYW5nZSh2YWx1ZSk7XG4gICAgICAgIG9mZnNldFRvcFJlZi5jdXJyZW50ID0gYWxpZ25lZFRvcDtcbiAgICAgICAgc2V0T2Zmc2V0VG9wKGFsaWduZWRUb3ApO1xuICAgICAgICBpZiAoY29tcG9uZW50UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZi5jdXJyZW50LnNjcm9sbFRvcCA9IGFsaWduZWRUb3A7XG4gICAgICAgICAgICBvblNjcm9sbCA9PT0gbnVsbCB8fCBvblNjcm9sbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25TY3JvbGwoeyBjdXJyZW50VGFyZ2V0OiBjb21wb25lbnRSZWYuY3VycmVudCB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBMZWdhY3kgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBQdXQgcmVmIGhlcmUgc2luY2UgdGhlIHJhbmdlIGlzIGdlbmVyYXRlIGJ5IGZvbGxvd1xuICAgIGNvbnN0IHJhbmdlUmVmID0gdXNlUmVmKHsgc3RhcnQ6IDAsIGVuZDogbWVyZ2VkRGF0YS5sZW5ndGggfSk7XG4gICAgY29uc3QgZGlmZkl0ZW1SZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgW2RpZmZJdGVtXSA9IHVzZURpZmZJdGVtKG1lcmdlZERhdGEsIGdldEtleSk7XG4gICAgZGlmZkl0ZW1SZWYuY3VycmVudCA9IGRpZmZJdGVtO1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09IFZpc2libGUgQ2FsY3VsYXRpb24gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IHsgc2Nyb2xsSGVpZ2h0LCBzdGFydCwgZW5kLCBvZmZzZXQ6IGZpbGxlck9mZnNldCwgfSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdXNlVmlydHVhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzY3JvbGxIZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBzdGFydDogMCxcbiAgICAgICAgICAgICAgICBlbmQ6IG1lcmdlZERhdGEubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWx3YXlzIHVzZSB2aXJ0dWFsIHNjcm9sbCBiYXIgaW4gYXZvaWQgc2hha2luZ1xuICAgICAgICBpZiAoIWluVmlydHVhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzY3JvbGxIZWlnaHQ6ICgoX2EgPSBmaWxsZXJJbm5lclJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub2Zmc2V0SGVpZ2h0KSB8fCAwLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICAgICAgICAgIGVuZDogbWVyZ2VkRGF0YS5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICAgIG9mZnNldDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXRlbVRvcCA9IDA7XG4gICAgICAgIGxldCBzdGFydEluZGV4O1xuICAgICAgICBsZXQgc3RhcnRPZmZzZXQ7XG4gICAgICAgIGxldCBlbmRJbmRleDtcbiAgICAgICAgY29uc3QgZGF0YUxlbiA9IG1lcmdlZERhdGEubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFMZW47IGkgKz0gMSkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IG1lcmdlZERhdGFbaV07XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBnZXRLZXkoaXRlbSk7XG4gICAgICAgICAgICBjb25zdCBjYWNoZUhlaWdodCA9IGhlaWdodHMuZ2V0KGtleSk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SXRlbUJvdHRvbSA9IGl0ZW1Ub3AgKyAoY2FjaGVIZWlnaHQgPT09IHVuZGVmaW5lZCA/IGl0ZW1IZWlnaHQgOiBjYWNoZUhlaWdodCk7XG4gICAgICAgICAgICAvLyBDaGVjayBpdGVtIHRvcCBpbiB0aGUgcmFuZ2VcbiAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbUJvdHRvbSA+PSBvZmZzZXRUb3AgJiYgc3RhcnRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBpdGVtVG9wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2hlY2sgaXRlbSBib3R0b20gaW4gdGhlIHJhbmdlLiBXZSB3aWxsIHJlbmRlciBhZGRpdGlvbmFsIG9uZSBpdGVtIGZvciBtb3Rpb24gdXNhZ2VcbiAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbUJvdHRvbSA+IG9mZnNldFRvcCArIGhlaWdodCAmJiBlbmRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZW5kSW5kZXggPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbVRvcCA9IGN1cnJlbnRJdGVtQm90dG9tO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdoZW4gc2Nyb2xsVG9wIGF0IHRoZSBlbmQgYnV0IGRhdGEgY3V0IHRvIHNtYWxsIGNvdW50IHdpbGwgcmVhY2ggdGhpc1xuICAgICAgICBpZiAoc3RhcnRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gMDtcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIGVuZEluZGV4ID0gTWF0aC5jZWlsKGhlaWdodCAvIGl0ZW1IZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbmRJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlbmRJbmRleCA9IG1lcmdlZERhdGEubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBHaXZlIGNhY2hlIHRvIGltcHJvdmUgc2Nyb2xsIGV4cGVyaWVuY2VcbiAgICAgICAgZW5kSW5kZXggPSBNYXRoLm1pbihlbmRJbmRleCArIDEsIG1lcmdlZERhdGEubGVuZ3RoIC0gMSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY3JvbGxIZWlnaHQ6IGl0ZW1Ub3AsXG4gICAgICAgICAgICBzdGFydDogc3RhcnRJbmRleCxcbiAgICAgICAgICAgIGVuZDogZW5kSW5kZXgsXG4gICAgICAgICAgICBvZmZzZXQ6IHN0YXJ0T2Zmc2V0LFxuICAgICAgICB9O1xuICAgIH0sIFtpblZpcnR1YWwsIHVzZVZpcnR1YWwsIG9mZnNldFRvcCwgbWVyZ2VkRGF0YSwgaGVpZ2h0VXBkYXRlZE1hcmssIGhlaWdodF0pO1xuICAgIHJhbmdlUmVmLmN1cnJlbnQuc3RhcnQgPSBzdGFydDtcbiAgICByYW5nZVJlZi5jdXJyZW50LmVuZCA9IGVuZDtcbiAgICAvLyBXaGVuIHNjcm9sbCB1cCwgZmlyc3QgdmlzaWJsZSBpdGVtIGdldCByZWFsIGhlaWdodCBtYXkgbm90IHNhbWUgYXMgYGl0ZW1IZWlnaHRgLFxuICAgIC8vIFdoaWNoIHdpbGwgbWFrZSBzY3JvbGwganVtcC5cbiAgICAvLyBMZXQncyBzeW5jIHNjcm9sbCB0b3AgdG8gYXZvaWQganVtcFxuICAgIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWRSZWNvcmQgPSBoZWlnaHRzLmdldFJlY29yZCgpO1xuICAgICAgICBpZiAoY2hhbmdlZFJlY29yZC5zaXplID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCByZWNvcmRLZXkgPSBBcnJheS5mcm9tKGNoYW5nZWRSZWNvcmQua2V5cygpKVswXTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZDYWNoZUhlaWdodCA9IGNoYW5nZWRSZWNvcmQuZ2V0KHJlY29yZEtleSk7XG4gICAgICAgICAgICAvLyBRdWljayBzd2l0Y2ggZGF0YSBtYXkgY2F1c2UgYHN0YXJ0YCBub3QgaW4gYG1lcmdlZERhdGFgIGFueW1vcmVcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0SXRlbSA9IG1lcmdlZERhdGFbc3RhcnRdO1xuICAgICAgICAgICAgaWYgKHN0YXJ0SXRlbSAmJiBwcmV2Q2FjaGVIZWlnaHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXhLZXkgPSBnZXRLZXkoc3RhcnRJdGVtKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRJbmRleEtleSA9PT0gcmVjb3JkS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWxTdGFydEhlaWdodCA9IGhlaWdodHMuZ2V0KHJlY29yZEtleSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZmZIZWlnaHQgPSByZWFsU3RhcnRIZWlnaHQgLSBpdGVtSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBzeW5jU2Nyb2xsVG9wKChvcmkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmkgKyBkaWZmSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaGVpZ2h0cy5yZXNldFJlY29yZCgpO1xuICAgIH0sIFtzY3JvbGxIZWlnaHRdKTtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU2l6ZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBbc2l6ZSwgc2V0U2l6ZV0gPSBSZWFjdC51c2VTdGF0ZSh7IHdpZHRoOiAwLCBoZWlnaHQ6IGhlaWdodCAhPT0gbnVsbCAmJiBoZWlnaHQgIT09IHZvaWQgMCA/IGhlaWdodCA6IDAgfSk7XG4gICAgY29uc3Qgb25Ib2xkZXJSZXNpemUgPSAoc2l6ZUluZm8pID0+IHtcbiAgICAgICAgc2V0U2l6ZSh7XG4gICAgICAgICAgICB3aWR0aDogc2l6ZUluZm8ub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHNpemVJbmZvLm9mZnNldEhlaWdodCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBIYWNrIG9uIHNjcm9sbGJhciB0byBlbmFibGUgZmxhc2ggY2FsbFxuICAgIGNvbnN0IHZlcnRpY2FsU2Nyb2xsQmFyUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGhvcml6b250YWxTY3JvbGxCYXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbEJhclNwaW5TaXplID0gUmVhY3QudXNlTWVtbygoKSA9PiBnZXRTcGluU2l6ZShzaXplLndpZHRoLCBzY3JvbGxXaWR0aCksIFtzaXplLndpZHRoLCBzY3JvbGxXaWR0aF0pO1xuICAgIGNvbnN0IHZlcnRpY2FsU2Nyb2xsQmFyU3BpblNpemUgPSBSZWFjdC51c2VNZW1vKCgpID0+IGdldFNwaW5TaXplKHNpemUuaGVpZ2h0LCBzY3JvbGxIZWlnaHQpLCBbc2l6ZS5oZWlnaHQsIHNjcm9sbEhlaWdodF0pO1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gSW4gUmFuZ2UgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IG1heFNjcm9sbEhlaWdodCA9IHNjcm9sbEhlaWdodCAtIGhlaWdodDtcbiAgICBjb25zdCBtYXhTY3JvbGxIZWlnaHRSZWYgPSB1c2VSZWYobWF4U2Nyb2xsSGVpZ2h0KTtcbiAgICBtYXhTY3JvbGxIZWlnaHRSZWYuY3VycmVudCA9IG1heFNjcm9sbEhlaWdodDtcbiAgICBmdW5jdGlvbiBrZWVwSW5SYW5nZShuZXdTY3JvbGxUb3ApIHtcbiAgICAgICAgbGV0IG5ld1RvcCA9IG5ld1Njcm9sbFRvcDtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obWF4U2Nyb2xsSGVpZ2h0UmVmLmN1cnJlbnQpKSB7XG4gICAgICAgICAgICBuZXdUb3AgPSBNYXRoLm1pbihuZXdUb3AsIG1heFNjcm9sbEhlaWdodFJlZi5jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICBuZXdUb3AgPSBNYXRoLm1heChuZXdUb3AsIDApO1xuICAgICAgICByZXR1cm4gbmV3VG9wO1xuICAgIH1cbiAgICBjb25zdCBpc1Njcm9sbEF0VG9wID0gb2Zmc2V0VG9wIDw9IDA7XG4gICAgY29uc3QgaXNTY3JvbGxBdEJvdHRvbSA9IG9mZnNldFRvcCA+PSBtYXhTY3JvbGxIZWlnaHQ7XG4gICAgY29uc3QgaXNTY3JvbGxBdExlZnQgPSBvZmZzZXRMZWZ0IDw9IDA7XG4gICAgY29uc3QgaXNTY3JvbGxBdFJpZ2h0ID0gISFzY3JvbGxXaWR0aCAmJiBvZmZzZXRMZWZ0ID49IHNjcm9sbFdpZHRoIC0gc2l6ZS53aWR0aDtcbiAgICBjb25zdCBvcmlnaW5TY3JvbGwgPSB1c2VPcmlnaW5TY3JvbGwoaXNTY3JvbGxBdFRvcCwgaXNTY3JvbGxBdEJvdHRvbSwgaXNTY3JvbGxBdExlZnQsIGlzU2Nyb2xsQXRSaWdodCk7XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU2Nyb2xsID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgZ2V0VmlydHVhbFNjcm9sbEluZm8gPSAoKSA9PiAoe1xuICAgICAgICB4OiBpc1JUTCA/IC1vZmZzZXRMZWZ0IDogb2Zmc2V0TGVmdCxcbiAgICAgICAgeTogb2Zmc2V0VG9wLFxuICAgIH0pO1xuICAgIGNvbnN0IGxhc3RWaXJ0dWFsU2Nyb2xsSW5mb1JlZiA9IHVzZVJlZihnZXRWaXJ0dWFsU2Nyb2xsSW5mbygpKTtcbiAgICBjb25zdCB0cmlnZ2VyU2Nyb2xsID0gdXNlRXZlbnRDYWxsYmFjaygocGFyYW1zKSA9PiB7XG4gICAgICAgIGlmIChvblZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRJbmZvID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBnZXRWaXJ0dWFsU2Nyb2xsSW5mbygpKSwgcGFyYW1zKTtcbiAgICAgICAgICAgIC8vIFRyaWdnZXIgd2hlbiBvZmZzZXQgY2hhbmdlZFxuICAgICAgICAgICAgaWYgKGxhc3RWaXJ0dWFsU2Nyb2xsSW5mb1JlZi5jdXJyZW50LnggIT09IG5leHRJbmZvLnggfHxcbiAgICAgICAgICAgICAgICBsYXN0VmlydHVhbFNjcm9sbEluZm9SZWYuY3VycmVudC55ICE9PSBuZXh0SW5mby55KSB7XG4gICAgICAgICAgICAgICAgb25WaXJ0dWFsU2Nyb2xsKG5leHRJbmZvKTtcbiAgICAgICAgICAgICAgICBsYXN0VmlydHVhbFNjcm9sbEluZm9SZWYuY3VycmVudCA9IG5leHRJbmZvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgZnVuY3Rpb24gb25TY3JvbGxCYXIobmV3U2Nyb2xsT2Zmc2V0LCBob3Jpem9udGFsKSB7XG4gICAgICAgIGNvbnN0IG5ld09mZnNldCA9IG5ld1Njcm9sbE9mZnNldDtcbiAgICAgICAgaWYgKGhvcml6b250YWwpIHtcbiAgICAgICAgICAgIGZsdXNoU3luYygoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0T2Zmc2V0TGVmdChuZXdPZmZzZXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0cmlnZ2VyU2Nyb2xsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzeW5jU2Nyb2xsVG9wKG5ld09mZnNldCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gV2hlbiBkYXRhIHNpemUgcmVkdWNlLiBJdCBtYXkgdHJpZ2dlciBuYXRpdmUgc2Nyb2xsIGV2ZW50IGJhY2sgdG8gZml0IHNjcm9sbCBwb3NpdGlvblxuICAgIGZ1bmN0aW9uIG9uRmFsbGJhY2tTY3JvbGwoZSkge1xuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcDogbmV3U2Nyb2xsVG9wIH0gPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgIGlmIChuZXdTY3JvbGxUb3AgIT09IG9mZnNldFRvcCkge1xuICAgICAgICAgICAgLy8gYHN5bmNTY3JvbGxUb3BgIGNhbGxzIGBvblNjcm9sbGAgaXRzZWxmIOKAlCBkb24ndCBhbHNvIGZpcmUgaXQgaGVyZSwgb3JcbiAgICAgICAgICAgIC8vIGZhbGxiYWNrIChub24tdmlydHVhbCkgbW9kZSB3b3VsZCBub3RpZnkgdGhlIGNvbnN1bWVyIHR3aWNlIHBlciBldmVudC5cbiAgICAgICAgICAgIHN5bmNTY3JvbGxUb3AobmV3U2Nyb2xsVG9wKTtcbiAgICAgICAgfVxuICAgICAgICB0cmlnZ2VyU2Nyb2xsKCk7XG4gICAgfVxuICAgIGNvbnN0IGtlZXBJbkhvcml6b250YWxSYW5nZSA9IChuZXh0T2Zmc2V0TGVmdCkgPT4ge1xuICAgICAgICBsZXQgdG1wT2Zmc2V0TGVmdCA9IG5leHRPZmZzZXRMZWZ0O1xuICAgICAgICBjb25zdCBtYXggPSBzY3JvbGxXaWR0aCA/IHNjcm9sbFdpZHRoIC0gc2l6ZS53aWR0aCA6IDA7XG4gICAgICAgIHRtcE9mZnNldExlZnQgPSBNYXRoLm1heCh0bXBPZmZzZXRMZWZ0LCAwKTtcbiAgICAgICAgdG1wT2Zmc2V0TGVmdCA9IE1hdGgubWluKHRtcE9mZnNldExlZnQsIG1heCk7XG4gICAgICAgIHJldHVybiB0bXBPZmZzZXRMZWZ0O1xuICAgIH07XG4gICAgY29uc3Qgb25XaGVlbERlbHRhID0gdXNlRXZlbnRDYWxsYmFjaygob2Zmc2V0WFksIGZyb21Ib3Jpem9udGFsKSA9PiB7XG4gICAgICAgIGlmIChmcm9tSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgZmx1c2hTeW5jKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRPZmZzZXRMZWZ0KChsZWZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRPZmZzZXRMZWZ0ID0gbGVmdCArIChpc1JUTCA/IC1vZmZzZXRYWSA6IG9mZnNldFhZKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtlZXBJbkhvcml6b250YWxSYW5nZShuZXh0T2Zmc2V0TGVmdCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRyaWdnZXJTY3JvbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN5bmNTY3JvbGxUb3AoKHRvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RvcCA9IHRvcCArIG9mZnNldFhZO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdUb3A7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIFNpbmNlIHRoaXMgYWRkZWQgaW4gZ2xvYmFsLHNob3VsZCB1c2UgcmVmIHRvIGtlZXAgdXBkYXRlXG4gICAgY29uc3QgW29uUmF3V2hlZWwsIG9uRmlyZUZveFNjcm9sbF0gPSB1c2VGcmFtZVdoZWVsKHVzZVZpcnR1YWwsIGlzU2Nyb2xsQXRUb3AsIGlzU2Nyb2xsQXRCb3R0b20sIGlzU2Nyb2xsQXRMZWZ0LCBpc1Njcm9sbEF0UmlnaHQsICEhc2Nyb2xsV2lkdGgsIG9uV2hlZWxEZWx0YSk7XG4gICAgLy8gTW9iaWxlIHRvdWNoIG1vdmVcbiAgICB1c2VNb2JpbGVUb3VjaE1vdmUodXNlVmlydHVhbCwgY29tcG9uZW50UmVmLCAoaXNIb3Jpem9udGFsLCBkZWx0YSwgc21vb3RoT2Zmc2V0LCBlKSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gZTtcbiAgICAgICAgaWYgKG9yaWdpblNjcm9sbChpc0hvcml6b250YWwsIGRlbHRhLCBzbW9vdGhPZmZzZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRml4IG5lc3QgTGlzdCB0cmlnZ2VyIFRvdWNoTW92ZSBldmVudFxuICAgICAgICBpZiAoIWV2ZW50IHx8ICFldmVudC5fdmlydHVhbEhhbmRsZWQpIHtcbiAgICAgICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgICAgIGV2ZW50Ll92aXJ0dWFsSGFuZGxlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvblJhd1doZWVsKHtcbiAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCgpIHsgfSxcbiAgICAgICAgICAgICAgICBkZWx0YVg6IGlzSG9yaXpvbnRhbCA/IGRlbHRhIDogMCxcbiAgICAgICAgICAgICAgICBkZWx0YVk6IGlzSG9yaXpvbnRhbCA/IDAgOiBkZWx0YSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIC8vIE1vdXNlRG93biBkcmFnIGZvciBzY3JvbGxcbiAgICB1c2VTY3JvbGxEcmFnKGluVmlydHVhbCwgY29tcG9uZW50UmVmLCAob2Zmc2V0KSA9PiB7XG4gICAgICAgIHN5bmNTY3JvbGxUb3AoKHRvcCkgPT4gdG9wICsgb2Zmc2V0KTtcbiAgICB9KTtcbiAgICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgICAvLyBGaXJlZm94IG9ubHlcbiAgICAgICAgZnVuY3Rpb24gb25Nb3pNb3VzZVBpeGVsU2Nyb2xsKGUpIHtcbiAgICAgICAgICAgIC8vIHNjcm9sbGluZyBhdCB0b3AvYm90dG9tIGxpbWl0XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxpbmdVcEF0VG9wID0gaXNTY3JvbGxBdFRvcCAmJiBlLmRldGFpbCA8IDA7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxpbmdEb3duQXRCb3R0b20gPSBpc1Njcm9sbEF0Qm90dG9tICYmIGUuZGV0YWlsID4gMDtcbiAgICAgICAgICAgIGlmICh1c2VWaXJ0dWFsICYmICFzY3JvbGxpbmdVcEF0VG9wICYmICFzY3JvbGxpbmdEb3duQXRCb3R0b20pIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50RWxlID0gY29tcG9uZW50UmVmLmN1cnJlbnQ7XG4gICAgICAgIGNvbXBvbmVudEVsZS5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIG9uUmF3V2hlZWwsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XG4gICAgICAgIGNvbXBvbmVudEVsZS5hZGRFdmVudExpc3RlbmVyKCdET01Nb3VzZVNjcm9sbCcsIG9uRmlyZUZveFNjcm9sbCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgICAgICBjb21wb25lbnRFbGUuYWRkRXZlbnRMaXN0ZW5lcignTW96TW91c2VQaXhlbFNjcm9sbCcsIG9uTW96TW91c2VQaXhlbFNjcm9sbCwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbXBvbmVudEVsZS5yZW1vdmVFdmVudExpc3RlbmVyKCd3aGVlbCcsIG9uUmF3V2hlZWwpO1xuICAgICAgICAgICAgY29tcG9uZW50RWxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ0RPTU1vdXNlU2Nyb2xsJywgb25GaXJlRm94U2Nyb2xsKTtcbiAgICAgICAgICAgIGNvbXBvbmVudEVsZS5yZW1vdmVFdmVudExpc3RlbmVyKCdNb3pNb3VzZVBpeGVsU2Nyb2xsJywgb25Nb3pNb3VzZVBpeGVsU2Nyb2xsKTtcbiAgICAgICAgfTtcbiAgICB9LCBbdXNlVmlydHVhbCwgaXNTY3JvbGxBdFRvcCwgaXNTY3JvbGxBdEJvdHRvbV0pO1xuICAgIC8vIFN5bmMgc2Nyb2xsIGxlZnRcbiAgICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoc2Nyb2xsV2lkdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld09mZnNldExlZnQgPSBrZWVwSW5Ib3Jpem9udGFsUmFuZ2Uob2Zmc2V0TGVmdCk7XG4gICAgICAgICAgICBzZXRPZmZzZXRMZWZ0KG5ld09mZnNldExlZnQpO1xuICAgICAgICAgICAgdHJpZ2dlclNjcm9sbCh7IHg6IG5ld09mZnNldExlZnQgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbc2l6ZS53aWR0aCwgc2Nyb2xsV2lkdGhdKTtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVmID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBkZWxheUhpZGVTY3JvbGxCYXIgPSAoKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYSA9IHZlcnRpY2FsU2Nyb2xsQmFyUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5kZWxheUhpZGRlbigpO1xuICAgICAgICAoX2IgPSBob3Jpem9udGFsU2Nyb2xsQmFyUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5kZWxheUhpZGRlbigpO1xuICAgIH07XG4gICAgY29uc3Qgc2Nyb2xsVG8gPSB1c2VTY3JvbGxUbyhjb21wb25lbnRSZWYsIG1lcmdlZERhdGEsIGhlaWdodHMsIGl0ZW1IZWlnaHQsIGdldEtleSwgKCkgPT4gY29sbGVjdEhlaWdodCh0cnVlKSwgc3luY1Njcm9sbFRvcCwgZGVsYXlIaWRlU2Nyb2xsQmFyKTtcbiAgICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICAgICAgbmF0aXZlRWxlbWVudDogY29udGFpbmVyUmVmLmN1cnJlbnQsXG4gICAgICAgIGdldFNjcm9sbEluZm86IGdldFZpcnR1YWxTY3JvbGxJbmZvLFxuICAgICAgICBzY3JvbGxUbzogKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgZnVuY3Rpb24gaXNQb3NTY3JvbGwoYXJnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiAoJ2xlZnQnIGluIGFyZyB8fCAndG9wJyBpbiBhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzUG9zU2Nyb2xsKGNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICAvLyBTY3JvbGwgWFxuICAgICAgICAgICAgICAgIGlmIChjb25maWcubGVmdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldE9mZnNldExlZnQoa2VlcEluSG9yaXpvbnRhbFJhbmdlKGNvbmZpZy5sZWZ0KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBZXG4gICAgICAgICAgICAgICAgc2Nyb2xsVG8oY29uZmlnLnRvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzY3JvbGxUbyhjb25maWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pKTtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBFZmZlY3QgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvKiogV2UgbmVlZCB0b2xkIG91dHNpZGUgdGhhdCBzb21lIGxpc3Qgbm90IHJlbmRlcmVkICovXG4gICAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKG9uVmlzaWJsZUNoYW5nZSkge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyTGlzdCA9IG1lcmdlZERhdGEuc2xpY2Uoc3RhcnQsIGVuZCArIDEpO1xuICAgICAgICAgICAgb25WaXNpYmxlQ2hhbmdlKHJlbmRlckxpc3QsIG1lcmdlZERhdGEpO1xuICAgICAgICB9XG4gICAgfSwgW3N0YXJ0LCBlbmQsIG1lcmdlZERhdGFdKTtcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBFeHRyYSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBnZXRTaXplID0gdXNlR2V0U2l6ZShtZXJnZWREYXRhLCBnZXRLZXksIGhlaWdodHMsIGl0ZW1IZWlnaHQpO1xuICAgIGNvbnN0IGV4dHJhQ29udGVudCA9IGV4dHJhUmVuZGVyID09PSBudWxsIHx8IGV4dHJhUmVuZGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHRyYVJlbmRlcih7XG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBlbmQsXG4gICAgICAgIHZpcnR1YWw6IGluVmlydHVhbCxcbiAgICAgICAgb2Zmc2V0WDogb2Zmc2V0TGVmdCxcbiAgICAgICAgb2Zmc2V0WTogZmlsbGVyT2Zmc2V0LFxuICAgICAgICBydGw6IGlzUlRMLFxuICAgICAgICBnZXRTaXplLFxuICAgIH0pO1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFJlbmRlciA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IGxpc3RDaGlsZHJlbiA9IHVzZUNoaWxkcmVuKG1lcmdlZERhdGEsIHN0YXJ0LCBlbmQsIHNjcm9sbFdpZHRoLCBvZmZzZXRMZWZ0LCBzZXRJbnN0YW5jZVJlZiwgY2hpbGRyZW4sIHNoYXJlZENvbmZpZyk7XG4gICAgbGV0IGNvbXBvbmVudFN0eWxlID0gdW5kZWZpbmVkO1xuICAgIGlmIChoZWlnaHQpIHtcbiAgICAgICAgY29tcG9uZW50U3R5bGUgPSBPYmplY3QuYXNzaWduKHsgW2Z1bGxIZWlnaHQgPyAnaGVpZ2h0JyA6ICdtYXhIZWlnaHQnXTogaGVpZ2h0IH0sIFNjcm9sbFN0eWxlKTtcbiAgICAgICAgaWYgKHVzZVZpcnR1YWwpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFN0eWxlLm92ZXJmbG93WSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgaWYgKHNjcm9sbFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50U3R5bGUub3ZlcmZsb3dYID0gJ2hpZGRlbic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2Nyb2xsTW92aW5nKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50U3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb250YWluZXJQcm9wcyA9IHt9O1xuICAgIGlmIChpc1JUTCkge1xuICAgICAgICBjb250YWluZXJQcm9wcy5kaXIgPSAncnRsJztcbiAgICB9XG4gICAgcmV0dXJuIChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgcmVmOiBjb250YWluZXJSZWYsIHN0eWxlOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0eWxlKSwgeyBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9KSwgY2xhc3NOYW1lOiBtZXJnZWRDbGFzc05hbWUgfSwgY29udGFpbmVyUHJvcHMsIHJlc3RQcm9wcywgeyBjaGlsZHJlbjogW19qc3goUmVzaXplT2JzZXJ2ZXIsIHsgb25SZXNpemU6IG9uSG9sZGVyUmVzaXplLCBjaGlsZHJlbjogX2pzeChDb21wb25lbnQsIHsgY2xhc3NOYW1lOiBgJHtwcmVmaXhDbHN9LWhvbGRlcmAsIHN0eWxlOiBjb21wb25lbnRTdHlsZSwgcmVmOiBjb21wb25lbnRSZWYsIG9uU2Nyb2xsOiBvbkZhbGxiYWNrU2Nyb2xsLCBvbk1vdXNlRW50ZXI6IGRlbGF5SGlkZVNjcm9sbEJhciwgY2hpbGRyZW46IF9qc3goRmlsbGVyLCB7IHByZWZpeENsczogcHJlZml4Q2xzLCBoZWlnaHQ6IHNjcm9sbEhlaWdodCwgb2Zmc2V0WDogb2Zmc2V0TGVmdCwgb2Zmc2V0WTogZmlsbGVyT2Zmc2V0LCBzY3JvbGxXaWR0aDogc2Nyb2xsV2lkdGgsIG9uSW5uZXJSZXNpemU6IGNvbGxlY3RIZWlnaHQsIHJlZjogZmlsbGVySW5uZXJSZWYsIGlubmVyUHJvcHM6IGlubmVyUHJvcHMsIHJ0bDogaXNSVEwsIGV4dHJhOiBleHRyYUNvbnRlbnQsIGNoaWxkcmVuOiBsaXN0Q2hpbGRyZW4gfSkgfSkgfSksIGluVmlydHVhbCAmJiBzY3JvbGxIZWlnaHQgPiBoZWlnaHQgJiYgKF9qc3goU2Nyb2xsQmFyLCB7IHJlZjogdmVydGljYWxTY3JvbGxCYXJSZWYsIHByZWZpeENsczogcHJlZml4Q2xzLCBzY3JvbGxPZmZzZXQ6IG9mZnNldFRvcCwgc2Nyb2xsUmFuZ2U6IHNjcm9sbEhlaWdodCwgcnRsOiBpc1JUTCwgb25TY3JvbGw6IG9uU2Nyb2xsQmFyLCBvblN0YXJ0TW92ZTogb25TY3JvbGxiYXJTdGFydE1vdmUsIG9uU3RvcE1vdmU6IG9uU2Nyb2xsYmFyU3RvcE1vdmUsIHNwaW5TaXplOiB2ZXJ0aWNhbFNjcm9sbEJhclNwaW5TaXplLCBjb250YWluZXJTaXplOiBzaXplLmhlaWdodCwgc3R5bGU6IHN0eWxlcyA9PT0gbnVsbCB8fCBzdHlsZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN0eWxlcy52ZXJ0aWNhbFNjcm9sbEJhciwgdGh1bWJTdHlsZTogc3R5bGVzID09PSBudWxsIHx8IHN0eWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3R5bGVzLnZlcnRpY2FsU2Nyb2xsQmFyVGh1bWIsIHNob3dTY3JvbGxCYXI6IHNob3dTY3JvbGxCYXIgfSkpLCBpblZpcnR1YWwgJiYgc2Nyb2xsV2lkdGggPiBzaXplLndpZHRoICYmIChfanN4KFNjcm9sbEJhciwgeyByZWY6IGhvcml6b250YWxTY3JvbGxCYXJSZWYsIHByZWZpeENsczogcHJlZml4Q2xzLCBzY3JvbGxPZmZzZXQ6IG9mZnNldExlZnQsIHNjcm9sbFJhbmdlOiBzY3JvbGxXaWR0aCwgcnRsOiBpc1JUTCwgb25TY3JvbGw6IG9uU2Nyb2xsQmFyLCBvblN0YXJ0TW92ZTogb25TY3JvbGxiYXJTdGFydE1vdmUsIG9uU3RvcE1vdmU6IG9uU2Nyb2xsYmFyU3RvcE1vdmUsIHNwaW5TaXplOiBob3Jpem9udGFsU2Nyb2xsQmFyU3BpblNpemUsIGNvbnRhaW5lclNpemU6IHNpemUud2lkdGgsIGhvcml6b250YWw6IHRydWUsIHN0eWxlOiBzdHlsZXMgPT09IG51bGwgfHwgc3R5bGVzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdHlsZXMuaG9yaXpvbnRhbFNjcm9sbEJhciwgdGh1bWJTdHlsZTogc3R5bGVzID09PSBudWxsIHx8IHN0eWxlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3R5bGVzLmhvcml6b250YWxTY3JvbGxCYXJUaHVtYiwgc2hvd1Njcm9sbEJhcjogc2hvd1Njcm9sbEJhciB9KSldIH0pKSk7XG59XG5jb25zdCBWaXJ0dWFsTGlzdEJhc2UgPSBSZWFjdC5mb3J3YXJkUmVmKFJhd0xpc3QpO1xuVmlydHVhbExpc3RCYXNlLmRpc3BsYXlOYW1lID0gVklSVFVBTF9MSVNUX0NPTVBPTkVOVF9OQU1FO1xuY29uc3QgVmlydHVhbExpc3QgPSBSZWFjdC5tZW1vKFZpcnR1YWxMaXN0QmFzZSk7XG5leHBvcnQgZGVmYXVsdCBWaXJ0dWFsTGlzdDsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=