@workflow/web-shared 5.0.0-beta.44 → 5.0.0-beta.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/components/event-list-view.js +3 -3
  2. package/dist/components/trace-viewer/components/use-alt-held.d.ts +11 -0
  3. package/dist/components/trace-viewer/components/use-alt-held.d.ts.map +1 -0
  4. package/dist/components/trace-viewer/components/use-alt-held.js +48 -0
  5. package/dist/components/trace-viewer/trace-viewer.d.ts.map +1 -1
  6. package/dist/components/trace-viewer/trace-viewer.js +4 -17
  7. package/dist/components/trace-viewer.d.ts +4 -1
  8. package/dist/components/trace-viewer.d.ts.map +1 -1
  9. package/dist/components/trace-viewer.js +4 -3
  10. package/dist/components/ui/data-inspector.d.ts +3 -2
  11. package/dist/components/ui/data-inspector.d.ts.map +1 -1
  12. package/dist/components/ui/data-inspector.js +85 -8
  13. package/dist/components/workflow-traces/trace-span-construction.d.ts +2 -1
  14. package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
  15. package/dist/components/workflow-traces/trace-span-construction.js +7 -3
  16. package/dist/lib/duplicate-events.d.ts.map +1 -1
  17. package/dist/lib/duplicate-events.js +14 -25
  18. package/dist/lib/trace-builder.d.ts +3 -1
  19. package/dist/lib/trace-builder.d.ts.map +1 -1
  20. package/dist/lib/trace-builder.js +5 -5
  21. package/package.json +5 -5
  22. package/src/components/event-list-view.tsx +2 -2
  23. package/src/components/trace-viewer/components/use-alt-held.ts +54 -0
  24. package/src/components/trace-viewer/trace-viewer.tsx +3 -15
  25. package/src/components/trace-viewer.tsx +6 -1
  26. package/src/components/ui/data-inspector.tsx +105 -9
  27. package/src/components/workflow-traces/trace-span-construction.ts +14 -2
  28. package/src/lib/duplicate-events.ts +14 -26
  29. package/src/lib/trace-builder.test.ts +42 -1
  30. package/src/lib/trace-builder.ts +13 -4
@@ -564,10 +564,10 @@ export function EventRow({ event, index, isFirst, isLast, isExpanded, onToggleEx
564
564
  // eslint-disable-next-line react-hooks/exhaustive-deps
565
565
  }, []);
566
566
  // When encryption key changes and this event was previously loaded,
567
- // re-load to get decrypted data
567
+ // re-load to get decrypted data. Keep the encrypted value visible until the
568
+ // refreshed data arrives so the payload does not flash empty while decrypting.
568
569
  useEffect(() => {
569
570
  if (encryptionKey && hasAttemptedLoad && onLoadEventData) {
570
- setLoadedEventData(null);
571
571
  setHasAttemptedLoad(false);
572
572
  onLoadEventData(event)
573
573
  .then((data) => {
@@ -986,4 +986,4 @@ function EventListViewInner({ events, run, onLoadEventData, hasMoreEvents = fals
986
986
  export function EventListView(props) {
987
987
  return (_jsx(ContextCardProvider, { children: _jsx(EventListViewInner, { ...props }) }));
988
988
  }
989
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbGlzdC12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvZXZlbnQtbGlzdC12aWV3LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQU16RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUF1QixNQUFNLGdCQUFnQixDQUFDO0FBQy9ELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIscUJBQXFCLEdBQ3RCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUdMLDhCQUE4QixFQUM5QiwwQkFBMEIsR0FDM0IsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsa0JB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LGFBRUQseUJBQ0csbUJBQW1CO2dDQUNsQixDQUFDLENBQUMsV0FBVztvQ0FDWCxDQUFDLENBQUMsV0FBVztvQ0FDYixDQUFDLENBQUMsY0FBYzt3Q0FDZCxDQUFDLENBQUMsdUJBQXVCLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3Q0FDN0MsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sU0FBUyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsV0FBVyxDQUFDLElBQUksRUFBRSxHQUFHLHNCQUFzQixDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dDQUNuSyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxTQUFTLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxHQUMzRSxFQUNOLENBQUMsbUJBQW1CLElBQUksYUFBYSxJQUFJLENBQ3hDLGNBQUssU0FBUyxFQUFDLHVFQUF1RSxZQUNwRixjQUFLLFNBQVMsRUFBQyxxQkFBcUIsWUFDbEMsS0FBQyxjQUFjLElBQ2IsT0FBTyxFQUFFLG1CQUFtQixFQUM1QixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxnQkFBZ0IsRUFBRSxFQUFFLEdBQ3hDLEdBQ0UsR0FDRixDQUNQLElBQ0csSUFDRixHQUN1QixDQUNoQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBc0I7SUFDbEQsT0FBTyxDQUNMLEtBQUMsbUJBQW1CLGNBQ2xCLEtBQUMsa0JBQWtCLE9BQUssS0FBSyxHQUFJLEdBQ2IsQ0FDdkIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHBhcnNlU3RlcE5hbWUsIHBhcnNlV29ya2Zsb3dOYW1lIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzL3BhcnNlLW5hbWUnO1xuaW1wb3J0IHR5cGUgeyBFdmVudCwgV29ya2Zsb3dSdW4gfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgQ2hlY2ssIENoZXZyb25SaWdodCwgQ29weSB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7XG4gIEtleWJvYXJkRXZlbnQgYXMgUmVhY3RLZXlib2FyZEV2ZW50LFxuICBNb3VzZUV2ZW50IGFzIFJlYWN0TW91c2VFdmVudCxcbiAgUmVhY3ROb2RlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVmlydHVvc28sIHR5cGUgVmlydHVvc29IYW5kbGUgfSBmcm9tICdyZWFjdC12aXJ0dW9zbyc7XG5pbXBvcnQge1xuICBEVVBMSUNBVEVfRVZFTlRfTUVTU0FHRSxcbiAgZmluZER1cGxpY2F0ZUV2ZW50SWRzLFxufSBmcm9tICcuLi9saWIvZHVwbGljYXRlLWV2ZW50cyc7XG5pbXBvcnQge1xuICB0eXBlIEV4YWN0SWRTZWFyY2hSZXN1bHQsXG4gIHR5cGUgRXhhY3RXb3JrZmxvd1NlYXJjaElkS2luZCxcbiAgbG9va3NMaWtlV29ya2Zsb3dJZFNlYXJjaElucHV0LFxuICBwYXJzZUV4YWN0V29ya2Zsb3dTZWFyY2hJZCxcbn0gZnJvbSAnLi4vbGliL2V4YWN0LWV2ZW50LXNlYXJjaC1pZCc7XG5pbXBvcnQgeyBpc0VuY3J5cHRlZE1hcmtlciB9IGZyb20gJy4uL2xpYi9oeWRyYXRpb24nO1xuaW1wb3J0IHsgaXNTZWFsZWROb29wRXZlbnQsIFNFQUxFRF9FVkVOVF9NRVNTQUdFIH0gZnJvbSAnLi4vbGliL3NlYWxlZC1ldmVudHMnO1xuaW1wb3J0IHsgdXNlVG9hc3QgfSBmcm9tICcuLi9saWIvdG9hc3QnO1xuaW1wb3J0IHsgZm9ybWF0RHVyYXRpb24gfSBmcm9tICcuLi9saWIvdXRpbHMnO1xuaW1wb3J0IHsgQXR0clNldEV2ZW50QmxvY2sgfSBmcm9tICcuL3NpZGViYXIvYXR0cmlidXRlcy1ibG9jayc7XG5pbXBvcnQgeyBDb250ZXh0Q2FyZFByb3ZpZGVyIH0gZnJvbSAnLi91aS9jb250ZXh0LWNhcmQnO1xuaW1wb3J0IHsgRGF0YUluc3BlY3RvciwgRGVjcnlwdENsaWNrQ29udGV4dCB9IGZyb20gJy4vdWkvZGF0YS1pbnNwZWN0b3InO1xuaW1wb3J0IHsgRGVjcnlwdEJ1dHRvbiB9IGZyb20gJy4vdWkvZGVjcnlwdC1idXR0b24nO1xuaW1wb3J0IHsgRXZlbnROb3RpY2VUb29sdGlwIH0gZnJvbSAnLi91aS9kdXBsaWNhdGUtZXZlbnQtdG9vbHRpcCc7XG5pbXBvcnQge1xuICBFcnJvclN0YWNrQmxvY2ssXG4gIGlzU3RydWN0dXJlZEVycm9yLFxuICB0eXBlIFN0cnVjdHVyZWRFcnJvclJlY29yZCxcbn0gZnJvbSAnLi91aS9lcnJvci1zdGFjay1ibG9jayc7XG5pbXBvcnQgeyBMb2FkTW9yZUJ1dHRvbiB9IGZyb20gJy4vdWkvbG9hZC1tb3JlLWJ1dHRvbic7XG5pbXBvcnQgeyBNZW51RHJvcGRvd24gfSBmcm9tICcuL3VpL21lbnUtZHJvcGRvd24nO1xuaW1wb3J0IHsgU2tlbGV0b24gfSBmcm9tICcuL3VpL3NrZWxldG9uJztcbmltcG9ydCB7IFRpbWVzdGFtcFRvb2x0aXAgfSBmcm9tICcuL3VpL3RpbWVzdGFtcC10b29sdGlwJztcblxuLyoqXG4gKiBFdmVudCB0eXBlcyB3aG9zZSBldmVudERhdGEgY29udGFpbnMgYW4gZXJyb3IgZmllbGQgd2l0aCBhIFN0cnVjdHVyZWRFcnJvci5cbiAqL1xuY29uc3QgRVJST1JfRVZFTlRfVFlQRVMgPSBuZXcgU2V0KFtcbiAgJ3N0ZXBfZmFpbGVkJyxcbiAgJ3N0ZXBfcmV0cnlpbmcnLFxuICAncnVuX2ZhaWxlZCcsXG4gICd3b3JrZmxvd19mYWlsZWQnLFxuXSk7XG5cbmNvbnN0IEJVVFRPTl9SRVNFVF9TVFlMRTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgYXBwZWFyYW5jZTogJ25vbmUnLFxuICBXZWJraXRBcHBlYXJhbmNlOiAnbm9uZScsXG4gIGJvcmRlcjogJ25vbmUnLFxuICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxufTtcbmNvbnN0IERPVF9QVUxTRV9BTklNQVRJT04gPVxuICAnd29ya2Zsb3ctZG90LXB1bHNlIDEuMjVzIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIGluZmluaXRlJztcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBIZWxwZXJzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gZm9ybWF0RXZlbnRUaW1lKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICByZXR1cm4gKFxuICAgIGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgc2Vjb25kOiAnMi1kaWdpdCcsXG4gICAgICBob3VyMTI6IGZhbHNlLFxuICAgIH0pICtcbiAgICAnLicgK1xuICAgIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgzLCAnMCcpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRXZlbnREYXRlKHZhbHVlOiB1bmtub3duKTogRGF0ZSB8IG51bGwge1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgZGF0ZSA9IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSA/IHZhbHVlIDogbmV3IERhdGUoU3RyaW5nKHZhbHVlKSk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpID8gbnVsbCA6IGRhdGU7XG59XG5cbmZ1bmN0aW9uIGdldEVmZmVjdGl2ZUV2ZW50RGF0ZShcbiAgZXZlbnQ6IFBpY2s8RXZlbnQsICdjcmVhdGVkQXQnIHwgJ29jY3VycmVkQXQnPlxuKTogRGF0ZSB7XG4gIHJldHVybiBwYXJzZUV2ZW50RGF0ZShldmVudC5vY2N1cnJlZEF0KSA/PyBuZXcgRGF0ZShldmVudC5jcmVhdGVkQXQpO1xufVxuXG5mdW5jdGlvbiBnZXRFZmZlY3RpdmVFdmVudFRpbWUoXG4gIGV2ZW50OiBQaWNrPEV2ZW50LCAnY3JlYXRlZEF0JyB8ICdvY2N1cnJlZEF0Jz5cbik6IG51bWJlciB7XG4gIHJldHVybiBnZXRFZmZlY3RpdmVFdmVudERhdGUoZXZlbnQpLmdldFRpbWUoKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RXZlbnRUeXBlKGV2ZW50VHlwZTogRXZlbnRbJ2V2ZW50VHlwZSddKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV2ZW50VHlwZVxuICAgIC5zcGxpdCgnXycpXG4gICAgLm1hcCgod29yZDogc3RyaW5nKSA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSlcbiAgICAuam9pbignICcpO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEV2ZW50IHR5cGUg4oaSIHN0YXR1cyBjb2xvciAoc21hbGwgZG90IG9ubHkpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFJldHVybnMgYSBDU1MgY29sb3IgdXNpbmcgR2Vpc3QgZGVzaWduIHRva2VucyBmb3IgdGhlIHN0YXR1cyBkb3QuICovXG5mdW5jdGlvbiBnZXRTdGF0dXNEb3RDb2xvcihldmVudFR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEZhaWxlZCDihpIgcmVkXG4gIGlmIChcbiAgICBldmVudFR5cGUgPT09ICdzdGVwX2ZhaWxlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICdydW5fZmFpbGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3dvcmtmbG93X2ZhaWxlZCdcbiAgKSB7XG4gICAgcmV0dXJuICd2YXIoLS1kcy1yZWQtNzAwKSc7XG4gIH1cbiAgLy8gQ2FuY2VsbGVkIOKGkiBhbWJlclxuICBpZiAoZXZlbnRUeXBlID09PSAncnVuX2NhbmNlbGxlZCcpIHtcbiAgICByZXR1cm4gJ3ZhcigtLWRzLWFtYmVyLTcwMCknO1xuICB9XG4gIC8vIFJldHJ5aW5nIOKGkiBhbWJlclxuICBpZiAoZXZlbnRUeXBlID09PSAnc3RlcF9yZXRyeWluZycpIHtcbiAgICByZXR1cm4gJ3ZhcigtLWRzLWFtYmVyLTcwMCknO1xuICB9XG4gIC8vIEF0dHJpYnV0ZSBjaGFuZ2VzIOKGkiB0ZWFsXG4gIGlmIChldmVudFR5cGUgPT09ICdhdHRyX3NldCcpIHtcbiAgICByZXR1cm4gJ3ZhcigtLWRzLXRlYWwtOTAwKSc7XG4gIH1cbiAgLy8gQ29tcGxldGVkL3N1Y2NlZWRlZCDihpIgZ3JlZW5cbiAgaWYgKFxuICAgIGV2ZW50VHlwZSA9PT0gJ3N0ZXBfY29tcGxldGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3J1bl9jb21wbGV0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnd29ya2Zsb3dfY29tcGxldGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ2hvb2tfZGlzcG9zZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnd2FpdF9jb21wbGV0ZWQnXG4gICkge1xuICAgIHJldHVybiAndmFyKC0tZHMtZ3JlZW4tNzAwKSc7XG4gIH1cbiAgLy8gU3RhcnRlZC9ydW5uaW5nIOKGkiBibHVlXG4gIGlmIChcbiAgICBldmVudFR5cGUgPT09ICdzdGVwX3N0YXJ0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAncnVuX3N0YXJ0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnd29ya2Zsb3dfc3RhcnRlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICdob29rX3JlY2VpdmVkJ1xuICApIHtcbiAgICByZXR1cm4gJ3ZhcigtLWRzLWJsdWUtNzAwKSc7XG4gIH1cbiAgLy8gU2VhbGVkIHBvc2l0aW9ucyDihpIgZGltIGdyYXksIG9uZSBzdGVwIHF1aWV0ZXIgdGhhbiBwZW5kaW5nOiB0aGUgcm93IGlzXG4gIC8vIGxvZyBmaWxsZXIgdGhlIHJ1biBuZXZlciBvYnNlcnZlZC5cbiAgaWYgKGV2ZW50VHlwZSA9PT0gJ25vb3AnKSB7XG4gICAgcmV0dXJuICd2YXIoLS1kcy1ncmF5LTUwMCknO1xuICB9XG4gIC8vIENyZWF0ZWQvcGVuZGluZyDihpIgZ3JheVxuICByZXR1cm4gJ3ZhcigtLWRzLWdyYXktNjAwKSc7XG59XG5cbi8qKlxuICogQnVpbGQgYSBtYXAgZnJvbSBjb3JyZWxhdGlvbklkIChzdGVwSWQpIOKGkiBkaXNwbGF5IG5hbWUgdXNpbmcgc3RlcF9jcmVhdGVkXG4gKiBldmVudHMsIGFuZCBwYXJzZSB0aGUgd29ya2Zsb3cgbmFtZSBmcm9tIHRoZSBydW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZE5hbWVNYXBzKFxuICBldmVudHM6IEV2ZW50W10gfCBudWxsLFxuICBydW46IFdvcmtmbG93UnVuIHwgbnVsbFxuKToge1xuICBjb3JyZWxhdGlvbk5hbWVNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gIHdvcmtmbG93TmFtZTogc3RyaW5nIHwgbnVsbDtcbn0ge1xuICBjb25zdCBjb3JyZWxhdGlvbk5hbWVNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gIC8vIE1hcCBzdGVwIGNvcnJlbGF0aW9uSWQgKD0gc3RlcElkKSDihpIgcGFyc2VkIHN0ZXAgbmFtZSBmcm9tIHN0ZXBfY3JlYXRlZCBldmVudHNcbiAgaWYgKGV2ZW50cykge1xuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnc3RlcF9jcmVhdGVkJyAmJiBldmVudC5jb3JyZWxhdGlvbklkKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBOYW1lID0gZXZlbnQuZXZlbnREYXRhPy5zdGVwTmFtZSA/PyAnJztcbiAgICAgICAgY29uc3QgcGFyc2VkID1cbiAgICAgICAgICBwYXJzZVN0ZXBOYW1lKFN0cmluZyhzdGVwTmFtZSkpID8/XG4gICAgICAgICAgcGFyc2VXb3JrZmxvd05hbWUoU3RyaW5nKHN0ZXBOYW1lKSk7XG4gICAgICAgIGNvcnJlbGF0aW9uTmFtZU1hcC5zZXQoXG4gICAgICAgICAgZXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICAgICAgICBwYXJzZWQ/LnNob3J0TmFtZSA/PyBzdGVwTmFtZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFBhcnNlIHdvcmtmbG93IG5hbWUgZnJvbSBydW5cbiAgY29uc3Qgd29ya2Zsb3dOYW1lID0gcnVuPy53b3JrZmxvd05hbWVcbiAgICA/IChwYXJzZVdvcmtmbG93TmFtZShydW4ud29ya2Zsb3dOYW1lKT8uc2hvcnROYW1lID8/IHJ1bi53b3JrZmxvd05hbWUpXG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7IGNvcnJlbGF0aW9uTmFtZU1hcCwgd29ya2Zsb3dOYW1lIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYXRpb25JbmZvIHtcbiAgLyoqIFRpbWUgZnJvbSBjcmVhdGVkIOKGkiBzdGFydGVkIChtcykgKi9cbiAgcXVldWVkPzogbnVtYmVyO1xuICAvKiogVGltZSBmcm9tIHN0YXJ0ZWQg4oaSIGNvbXBsZXRlZC9mYWlsZWQvY2FuY2VsbGVkIChtcykgKi9cbiAgcmFuPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgbWFwIGZyb20gY29ycmVsYXRpb25JZCDihpIgZHVyYXRpb24gaW5mbyBieSBkaWZmaW5nXG4gKiBjcmVhdGVkIOKGlCBzdGFydGVkIChxdWV1ZWQpIGFuZCBzdGFydGVkIOKGlCBjb21wbGV0ZWQvZmFpbGVkL2NhbmNlbGxlZCAocmFuKS5cbiAqIEFsc28gY29tcHV0ZXMgcnVuLWxldmVsIGR1cmF0aW9ucyB1bmRlciB0aGUga2V5ICdfX3J1bl9fJy5cbiAqXG4gKiBFdmVudHMgZXZlcnkgcmVwbGF5IHJlYWRzIHBhc3QgYXMgcmVwZWF0cyBhcmUgZXhjbHVkZWQ6IGEgc2Vjb25kXG4gKiBgc3RlcF9jb21wbGV0ZWRgIHdyaXR0ZW4gYnkgYSBjb25jdXJyZW50IHJlcGxheSB3b3VsZCBvdGhlcndpc2Ugc3RyZXRjaCB0aGVcbiAqIHN0ZXAncyBtZWFzdXJlZCBydW50aW1lIHRvIHdoZW5ldmVyIHRoYXQgcmVwbGF5IGhhcHBlbmVkIHRvIGNvbW1pdC4gVGhlXG4gKiBjYWxsZXIgc3VwcGxpZXMgdGhlbSwgYmVjYXVzZSB3aGV0aGVyIGFuIGV2ZW50IGlzIGEgcmVwZWF0IGlzIGEgcHJvcGVydHkgb2ZcbiAqIHRoZSB3aG9sZSBsb2cgYW5kIHRoaXMgZnVuY3Rpb24gbWF5IGJlIGhhbmRlZCBhIHBhZ2Ugb2YgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZER1cmF0aW9uTWFwKFxuICBldmVudHM6IEV2ZW50W10sXG4gIGR1cGxpY2F0ZUV2ZW50SWRzOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldCgpXG4pOiBNYXA8c3RyaW5nLCBEdXJhdGlvbkluZm8+IHtcbiAgLy8gUHJvY2VzcyBldmVudHMgaW4gY2hyb25vbG9naWNhbCBvcmRlciBzbyB0aGUgcmVzdWx0IGRvZXNuJ3QgZGVwZW5kIG9uXG4gIC8vIHRoZSBjYWxsZXIncyBzb3J0IGRpcmVjdGlvbi4gUmV0cmllZCBzdGVwcyBlbWl0IG11bHRpcGxlIGBzdGVwX3N0YXJ0ZWRgXG4gIC8vIGV2ZW50cyBmb3IgdGhlIHNhbWUgY29ycmVsYXRpb25JZDsgdGhlIHF1ZXVlZCBkdXJhdGlvbiBtdXN0IGJlIG1lYXN1cmVkXG4gIC8vIGFnYWluc3QgdGhlIGZpcnN0IG9uZSwgbm90IHRoZSBsYXN0LlxuICBjb25zdCBjaHJvbm9sb2dpY2FsID0gWy4uLmV2ZW50c11cbiAgICAuZmlsdGVyKChldmVudCkgPT4gIWR1cGxpY2F0ZUV2ZW50SWRzLmhhcyhldmVudC5ldmVudElkKSlcbiAgICAuc29ydCgoYSwgYikgPT4gZ2V0RWZmZWN0aXZlRXZlbnRUaW1lKGEpIC0gZ2V0RWZmZWN0aXZlRXZlbnRUaW1lKGIpKTtcblxuICBjb25zdCBjcmVhdGVkVGltZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBjb25zdCBmaXJzdFN0YXJ0ZWRUaW1lcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIGNvbnN0IHN0YXJ0ZWRUaW1lcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIGNvbnN0IGR1cmF0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBEdXJhdGlvbkluZm8+KCk7XG5cbiAgZm9yIChjb25zdCBldmVudCBvZiBjaHJvbm9sb2dpY2FsKSB7XG4gICAgY29uc3QgdHMgPSBnZXRFZmZlY3RpdmVFdmVudFRpbWUoZXZlbnQpO1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmNvcnJlbGF0aW9uSWQgPz8gJ19fcnVuX18nO1xuICAgIGNvbnN0IHR5cGU6IHN0cmluZyA9IGV2ZW50LmV2ZW50VHlwZTtcblxuICAgIC8vIFRyYWNrIGNyZWF0ZWQgdGltZXMgKGZpcnN0IGV2ZW50IGZvciBlYWNoIGNvcnJlbGF0aW9uKVxuICAgIGlmICh0eXBlID09PSAnc3RlcF9jcmVhdGVkJyB8fCB0eXBlID09PSAncnVuX2NyZWF0ZWQnKSB7XG4gICAgICBpZiAoIWNyZWF0ZWRUaW1lcy5oYXMoa2V5KSkge1xuICAgICAgICBjcmVhdGVkVGltZXMuc2V0KGtleSwgdHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRyYWNrIHN0YXJ0ZWQgdGltZXMgJiBjb21wdXRlIHF1ZXVlZCBkdXJhdGlvblxuICAgIGlmIChcbiAgICAgIHR5cGUgPT09ICdzdGVwX3N0YXJ0ZWQnIHx8XG4gICAgICB0eXBlID09PSAncnVuX3N0YXJ0ZWQnIHx8XG4gICAgICB0eXBlID09PSAnd29ya2Zsb3dfc3RhcnRlZCdcbiAgICApIHtcbiAgICAgIHN0YXJ0ZWRUaW1lcy5zZXQoa2V5LCB0cyk7XG4gICAgICAvLyBUaGUgcXVldWVkIGR1cmF0aW9uIGlzIGFuY2hvcmVkIG9uIHRoZSBmaXJzdCBzdGFydCBldmVudCBvbmx5LCBzaW5jZVxuICAgICAgLy8gc3Vic2VxdWVudCBzdGVwX3N0YXJ0ZWQgZXZlbnRzIGNvbWUgZnJvbSByZXRyaWVzLlxuICAgICAgaWYgKCFmaXJzdFN0YXJ0ZWRUaW1lcy5oYXMoa2V5KSkge1xuICAgICAgICBmaXJzdFN0YXJ0ZWRUaW1lcy5zZXQoa2V5LCB0cyk7XG4gICAgICAgIC8vIElmIG5vIGV4cGxpY2l0IGNyZWF0ZWQgZXZlbnQgd2FzIHNlZW4sIHVzZSB0aGUgc3RhcnRlZCB0aW1lIGFzIGNyZWF0ZWRcbiAgICAgICAgaWYgKCFjcmVhdGVkVGltZXMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjcmVhdGVkVGltZXMuc2V0KGtleSwgdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRBdCA9IGNyZWF0ZWRUaW1lcy5nZXQoa2V5KTtcbiAgICAgICAgY29uc3QgaW5mbyA9IGR1cmF0aW9ucy5nZXQoa2V5KSA/PyB7fTtcbiAgICAgICAgaWYgKGNyZWF0ZWRBdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaW5mby5xdWV1ZWQgPSB0cyAtIGNyZWF0ZWRBdDtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbnMuc2V0KGtleSwgaW5mbyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSByYW4gZHVyYXRpb24gb24gdGVybWluYWwgZXZlbnRzXG4gICAgaWYgKFxuICAgICAgdHlwZSA9PT0gJ3N0ZXBfY29tcGxldGVkJyB8fFxuICAgICAgdHlwZSA9PT0gJ3N0ZXBfZmFpbGVkJyB8fFxuICAgICAgdHlwZSA9PT0gJ3J1bl9jb21wbGV0ZWQnIHx8XG4gICAgICB0eXBlID09PSAncnVuX2ZhaWxlZCcgfHxcbiAgICAgIHR5cGUgPT09ICdydW5fY2FuY2VsbGVkJyB8fFxuICAgICAgdHlwZSA9PT0gJ3dvcmtmbG93X2NvbXBsZXRlZCcgfHxcbiAgICAgIHR5cGUgPT09ICd3b3JrZmxvd19mYWlsZWQnIHx8XG4gICAgICB0eXBlID09PSAnd2FpdF9jb21wbGV0ZWQnIHx8XG4gICAgICB0eXBlID09PSAnaG9va19kaXNwb3NlZCdcbiAgICApIHtcbiAgICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHN0YXJ0ZWRUaW1lcy5nZXQoa2V5KTtcbiAgICAgIGNvbnN0IGluZm8gPSBkdXJhdGlvbnMuZ2V0KGtleSkgPz8ge307XG4gICAgICBpZiAoc3RhcnRlZEF0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaW5mby5yYW4gPSB0cyAtIHN0YXJ0ZWRBdDtcbiAgICAgIH1cbiAgICAgIGR1cmF0aW9ucy5zZXQoa2V5LCBpbmZvKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZHVyYXRpb25zO1xufVxuXG4vKiogQ2hlY2sgaWYgYSBsb2FkZWQgZXZlbnREYXRhIG9iamVjdCBjb250YWlucyBhbnkgZW5jcnlwdGVkIG1hcmtlciB2YWx1ZXMuICovXG5mdW5jdGlvbiBoYXNFbmNyeXB0ZWRWYWx1ZXMoZGF0YTogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGZvciAoY29uc3QgdmFsIG9mIE9iamVjdC52YWx1ZXMoZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikpIHtcbiAgICBpZiAoaXNFbmNyeXB0ZWRNYXJrZXIodmFsKSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1J1bkxldmVsKGV2ZW50VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgZXZlbnRUeXBlID09PSAncnVuX2NyZWF0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAncnVuX3N0YXJ0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAncnVuX2NvbXBsZXRlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICdydW5fZmFpbGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3J1bl9jYW5jZWxsZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnd29ya2Zsb3dfc3RhcnRlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICd3b3JrZmxvd19jb21wbGV0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnd29ya2Zsb3dfZmFpbGVkJyB8fFxuICAgIC8vIGF0dHJfc2V0IGFuZCBub29wIGNhcnJ5IGEgZGVkdXAvcG9zaXRpb25hbCBjb3JyZWxhdGlvbklkIHJhdGhlciB0aGFuIGFcbiAgICAvLyBjaGlsZCBlbnRpdHkgSUQsIHNvIHRoZXkgZ3JvdXAgYW5kIGxhYmVsIHdpdGggdGhlIHJ1biBpdHNlbGYuXG4gICAgZXZlbnRUeXBlID09PSAnYXR0cl9zZXQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnbm9vcCdcbiAgKTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBUcmVlIGd1dHRlcjogZml4ZWQtd2lkdGgsIHNob3dzIGJyYW5jaCBsaW5lcyBvbmx5IGZvciB0aGUgc2VsZWN0ZWQgZ3JvdXBcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogRml4ZWQgZ3V0dGVyIHdpZHRoOiAyMHB4IHJvb3QgYXJlYSArIDE2cHggZm9yIG9uZSBicmFuY2ggbGFuZSAqL1xuY29uc3QgR1VUVEVSX1dJRFRIID0gMzY7XG4vKiogWCBwb3NpdGlvbiBvZiB0aGUgc2luZ2xlIGJyYW5jaCBsYW5lIGxpbmUgKi9cbmNvbnN0IExBTkVfWCA9IDIwO1xuY29uc3QgUk9PVF9MSU5FX0NPTE9SID0gJ3ZhcigtLWRzLWdyYXktNTAwKSc7XG5cbmZ1bmN0aW9uIFRyZWVHdXR0ZXIoe1xuICBpc0ZpcnN0LFxuICBpc0xhc3QsXG4gIGlzUnVuTGV2ZWw6IGlzUnVuLFxuICBzdGF0dXNEb3RDb2xvcixcbiAgcHVsc2UgPSBmYWxzZSxcbiAgaGFzU2VsZWN0aW9uLFxuICBzaG93QnJhbmNoLFxuICBzaG93TGFuZUxpbmUsXG4gIGlzTGFuZVN0YXJ0LFxuICBpc0xhbmVFbmQsXG4gIGNvbnRpbnVhdGlvbk9ubHkgPSBmYWxzZSxcbn06IHtcbiAgaXNGaXJzdDogYm9vbGVhbjtcbiAgaXNMYXN0OiBib29sZWFuO1xuICBpc1J1bkxldmVsOiBib29sZWFuO1xuICBzdGF0dXNEb3RDb2xvcj86IHN0cmluZztcbiAgcHVsc2U/OiBib29sZWFuO1xuICAvKiogV2hldGhlciBhbnkgZ3JvdXAgaXMgY3VycmVudGx5IGFjdGl2ZSAoc2VsZWN0ZWQgb3IgaG92ZXJlZCkgKi9cbiAgaGFzU2VsZWN0aW9uOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0byBzaG93IGEgaG9yaXpvbnRhbCBicmFuY2ggbGluZSBmb3IgdGhpcyByb3cgKGV2ZW50IGJlbG9uZ3MgdG8gYWN0aXZlIGdyb3VwKSAqL1xuICBzaG93QnJhbmNoOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgdmVydGljYWwgbGFuZSBsaW5lIHBhc3NlcyB0aHJvdWdoIHRoaXMgcm93ICovXG4gIHNob3dMYW5lTGluZTogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIHZlcnRpY2FsIGxhbmUgbGluZSBzdGFydHMgYXQgdGhpcyByb3cgKHRvcCBjbGlwcGVkIHRvIDUwJSkgKi9cbiAgaXNMYW5lU3RhcnQ6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSB2ZXJ0aWNhbCBsYW5lIGxpbmUgZW5kcyBhdCB0aGlzIHJvdyAoYm90dG9tIGNsaXBwZWQgdG8gNTAlKSAqL1xuICBpc0xhbmVFbmQ6IGJvb2xlYW47XG4gIGNvbnRpbnVhdGlvbk9ubHk/OiBib29sZWFuO1xufSkge1xuICBjb25zdCBkb3RTaXplID0gaXNSdW4gPyA4IDogNjtcbiAgY29uc3QgZG90TGVmdCA9IGlzUnVuID8gNSA6IDY7XG4gIGNvbnN0IGRvdE9wYWNpdHkgPSBoYXNTZWxlY3Rpb24gJiYgIXNob3dCcmFuY2ggJiYgIWlzUnVuID8gMC4zIDogMTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXgtc2hyaW5rLTAgc2VsZi1zdHJldGNoXCJcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIHdpZHRoOiBHVVRURVJfV0lEVEgsXG4gICAgICAgIG1pbkhlaWdodDogY29udGludWF0aW9uT25seSA/IDAgOiB1bmRlZmluZWQsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHsvKiBSb290IHZlcnRpY2FsIGxpbmUgKGxlZnRtb3N0LCBhbHdheXMgdmlzaWJsZSkgKi99XG4gICAgICA8ZGl2XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgbGVmdDogOCxcbiAgICAgICAgICB0b3A6IGNvbnRpbnVhdGlvbk9ubHkgPyAwIDogaXNGaXJzdCA/ICc1MCUnIDogMCxcbiAgICAgICAgICBib3R0b206IGNvbnRpbnVhdGlvbk9ubHkgPyAwIDogaXNMYXN0ID8gJzUwJScgOiAwLFxuICAgICAgICAgIHdpZHRoOiAyLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogUk9PVF9MSU5FX0NPTE9SLFxuICAgICAgICAgIHpJbmRleDogMCxcbiAgICAgICAgfX1cbiAgICAgIC8+XG5cbiAgICAgIHshY29udGludWF0aW9uT25seSAmJiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgey8qIFN0YXR1cyBkb3Qgb24gdGhlIHJvb3QgbGluZSBmb3IgZXZlcnkgZXZlbnQgKi99XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgIGxlZnQ6IGRvdExlZnQsXG4gICAgICAgICAgICAgIHRvcDogJzUwJScsXG4gICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwJSknLFxuICAgICAgICAgICAgICB3aWR0aDogZG90U2l6ZSxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBkb3RTaXplLFxuICAgICAgICAgICAgICB6SW5kZXg6IDIsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsvKiBPcGFxdWUgYmFja2Ryb3AgZW5zdXJlcyBndXR0ZXIgbGluZXMgbmV2ZXIgdmlzdWFsbHkgY3V0IHRocm91Z2ggZG90cyAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICBpbnNldDogMCxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLWJhY2tncm91bmQtMTAwKScsXG4gICAgICAgICAgICAgICAgekluZGV4OiAwLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHtwdWxzZSAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICBpbnNldDogMCxcbiAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHN0YXR1c0RvdENvbG9yLFxuICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC43NSAqIGRvdE9wYWNpdHksXG4gICAgICAgICAgICAgICAgICBhbmltYXRpb246IERPVF9QVUxTRV9BTklNQVRJT04sXG4gICAgICAgICAgICAgICAgICB6SW5kZXg6IDEsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogc3RhdHVzRG90Q29sb3IsXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogZG90T3BhY2l0eSxcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAxNTBtcycsXG4gICAgICAgICAgICAgICAgekluZGV4OiAyLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBIb3Jpem9udGFsIGJyYW5jaCBmcm9tIHJvb3QgdG8gZ3V0dGVyIGVkZ2UgKHNlbGVjdGVkIGdyb3VwIGV2ZW50cyBvbmx5KSAqL31cbiAgICAgICAgICB7c2hvd0JyYW5jaCAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgbGVmdDogOSxcbiAgICAgICAgICAgICAgICB0b3A6ICc1MCUnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiBHVVRURVJfV0lEVEggLSA5LFxuICAgICAgICAgICAgICAgIGhlaWdodDogMixcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFJPT1RfTElORV9DT0xPUixcbiAgICAgICAgICAgICAgICB6SW5kZXg6IDAsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvPlxuICAgICAgKX1cblxuICAgICAgey8qIFZlcnRpY2FsIGxhbmUgbGluZSBjb25uZWN0aW5nIHRoZSBzZWxlY3RlZCBncm91cCdzIGV2ZW50cyAqL31cbiAgICAgIHtzaG93TGFuZUxpbmUgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgbGVmdDogTEFORV9YLFxuICAgICAgICAgICAgdG9wOiBjb250aW51YXRpb25Pbmx5ID8gMCA6IGlzTGFuZVN0YXJ0ID8gJzUwJScgOiAwLFxuICAgICAgICAgICAgYm90dG9tOiBjb250aW51YXRpb25Pbmx5ID8gMCA6IGlzTGFuZUVuZCA/ICc1MCUnIDogMCxcbiAgICAgICAgICAgIHdpZHRoOiAyLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBST09UX0xJTkVfQ09MT1IsXG4gICAgICAgICAgICB6SW5kZXg6IDAsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQ29weWFibGUgY2VsbDogc2hvd3MgYSBjb3B5IGJ1dHRvbiBvbiBob3ZlclxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIENvcHlhYmxlQ2VsbCh7XG4gIHZhbHVlLFxuICBjbGFzc05hbWUsXG4gIHN0eWxlOiBzdHlsZVByb3AsXG59OiB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xufSk6IFJlYWN0Tm9kZSB7XG4gIGNvbnN0IFtjb3BpZWQsIHNldENvcGllZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHJlc2V0Q29waWVkVGltZW91dFJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChyZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZUNvcHkgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3RNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodmFsdWUpLnRoZW4oKCkgPT4ge1xuICAgICAgICBzZXRDb3BpZWQodHJ1ZSk7XG4gICAgICAgIGlmIChyZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQocmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHNldENvcGllZChmYWxzZSk7XG4gICAgICAgICAgcmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICB9LCAxNTAwKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW3ZhbHVlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtgZ3JvdXAvY29weSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBtaW4tdy0wIHB4LTQgJHtjbGFzc05hbWUgPz8gJyd9YH1cbiAgICAgIHN0eWxlPXtzdHlsZVByb3B9XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwib3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAge3ZhbHVlIHx8ICctJ31cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHt2YWx1ZSA/IChcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvcHl9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC1zaHJpbmstMCBvcGFjaXR5LTAgZ3JvdXAtaG92ZXIvY29weTpvcGFjaXR5LTEwMCB0cmFuc2l0aW9uLW9wYWNpdHkgcC0wLjUgcm91bmRlZCBob3ZlcjpiZy1bdmFyKC0tZHMtZ3JheS1hbHBoYS0yMDApXVwiXG4gICAgICAgICAgc3R5bGU9e0JVVFRPTl9SRVNFVF9TVFlMRX1cbiAgICAgICAgICBhcmlhLWxhYmVsPXtgQ29weSAke3ZhbHVlfWB9XG4gICAgICAgID5cbiAgICAgICAgICB7Y29waWVkID8gKFxuICAgICAgICAgICAgPENoZWNrXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtMyB3LTNcIlxuICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyZWVuLTcwMCknIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8Q29weSBjbGFzc05hbWU9XCJoLTMgdy0zXCIgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknIH19IC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICApIDogbnVsbH1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuLyoqIFJlY3Vyc2l2ZWx5IHBhcnNlIHN0cmluZ2lmaWVkIEpTT04gdmFsdWVzIHNvIGVzY2FwZWQgc2xhc2hlcyAvIHF1b3RlcyBhcmUgY2xlYW5lZCB1cCAqL1xuZnVuY3Rpb24gZGVlcFBhcnNlSnNvbih2YWx1ZTogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7XG4gICAgaWYgKFxuICAgICAgKHRyaW1tZWQuc3RhcnRzV2l0aCgneycpICYmIHRyaW1tZWQuZW5kc1dpdGgoJ30nKSkgfHxcbiAgICAgICh0cmltbWVkLnN0YXJ0c1dpdGgoJ1snKSAmJiB0cmltbWVkLmVuZHNXaXRoKCddJykpIHx8XG4gICAgICAodHJpbW1lZC5zdGFydHNXaXRoKCdcIicpICYmIHRyaW1tZWQuZW5kc1dpdGgoJ1wiJykpXG4gICAgKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVlcFBhcnNlSnNvbihKU09OLnBhcnNlKHRyaW1tZWQpKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUubWFwKGRlZXBQYXJzZUpzb24pO1xuICB9XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gUHJlc2VydmUgb2JqZWN0cyB3aXRoIGN1c3RvbSBjb25zdHJ1Y3RvcnMgKGUuZy4sIGVuY3J5cHRlZCBtYXJrZXJzLFxuICAgIC8vIGNsYXNzIGluc3RhbmNlIHJlZnMpOyBkb24ndCBkZXN0cnVjdHVyZSB0aGVtIGludG8gcGxhaW4gb2JqZWN0c1xuICAgIGlmICh2YWx1ZS5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgIHJlc3VsdFtrXSA9IGRlZXBQYXJzZUpzb24odik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgc3RydWN0dXJlZCBlcnJvciBmcm9tIGV2ZW50IGRhdGEsIGlmIHByZXNlbnQuXG4gKiBSZXR1cm5zIHRoZSBlcnJvciBvYmplY3QgdG8gcmVuZGVyIHdpdGggRXJyb3JTdGFja0Jsb2NrLCBvciBudWxsIGlmIG5vdCBhcHBsaWNhYmxlLlxuICovXG5mdW5jdGlvbiBleHRyYWN0U3RydWN0dXJlZEVycm9yKFxuICBkYXRhOiB1bmtub3duLFxuICBldmVudFR5cGU/OiBzdHJpbmdcbik6IFN0cnVjdHVyZWRFcnJvclJlY29yZCB8IG51bGwge1xuICBpZiAoIWV2ZW50VHlwZSB8fCAhRVJST1JfRVZFTlRfVFlQRVMuaGFzKGV2ZW50VHlwZSkpIHJldHVybiBudWxsO1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JykgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHJlY29yZCA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8vIENoZWNrIHRoZSBuZXN0ZWQgYGVycm9yYCBmaWVsZCBmaXJzdCAodGhlIFN0cnVjdHVyZWRFcnJvcilcbiAgaWYgKGlzU3RydWN0dXJlZEVycm9yKHJlY29yZC5lcnJvcikpIHJldHVybiByZWNvcmQuZXJyb3I7XG4gIC8vIFNvbWUgZXJyb3IgZm9ybWF0cyBwdXQgdGhlIG1lc3NhZ2Uvc3RhY2sgYXQgdGhlIHRvcCBsZXZlbCBvZiBldmVudERhdGEuXG4gIGlmIChpc1N0cnVjdHVyZWRFcnJvcihyZWNvcmQpKSByZXR1cm4gcmVjb3JkO1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gUGF5bG9hZEJsb2NrKHtcbiAgZGF0YSxcbiAgZXZlbnRUeXBlLFxufToge1xuICBkYXRhOiB1bmtub3duO1xuICBldmVudFR5cGU/OiBzdHJpbmc7XG59KTogUmVhY3ROb2RlIHtcbiAgY29uc3Qgc3RydWN0dXJlZEVycm9yID0gdXNlTWVtbyhcbiAgICAoKSA9PiBleHRyYWN0U3RydWN0dXJlZEVycm9yKGRhdGEsIGV2ZW50VHlwZSksXG4gICAgW2RhdGEsIGV2ZW50VHlwZV1cbiAgKTtcblxuICBjb25zdCBbY29waWVkLCBzZXRDb3BpZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByZXNldENvcGllZFRpbWVvdXRSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGNsZWFuZWQgPSB1c2VNZW1vKCgpID0+IGRlZXBQYXJzZUpzb24oZGF0YSksIFtkYXRhXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQocmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtdKTtcblxuICBjb25zdCBmb3JtYXR0ZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGNsZWFuZWQsIG51bGwsIDIpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIFN0cmluZyhjbGVhbmVkKTtcbiAgICB9XG4gIH0sIFtjbGVhbmVkXSk7XG5cbiAgY29uc3QgaGFuZGxlQ29weSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChmb3JtYXR0ZWQpLnRoZW4oKCkgPT4ge1xuICAgICAgICBzZXRDb3BpZWQodHJ1ZSk7XG4gICAgICAgIGlmIChyZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQocmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHNldENvcGllZChmYWxzZSk7XG4gICAgICAgICAgcmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICB9LCAxNTAwKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgW2Zvcm1hdHRlZF1cbiAgKTtcblxuICBpZiAoc3RydWN0dXJlZEVycm9yKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC0yXCI+XG4gICAgICAgIDxFcnJvclN0YWNrQmxvY2sgdmFsdWU9e3N0cnVjdHVyZWRFcnJvcn0gLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICAvLyBBdHRyaWJ1dGUgY2hhbmdlczogcmVuZGVyIHRoZSBjaGFuZ2VkIGtleXMgYW5kIHRoZSB3cml0ZXIgaW5zdGVhZCBvZlxuICAvLyB0aGUgcmF3IEpTT04gcGF5bG9hZC5cbiAgaWYgKGV2ZW50VHlwZSA9PT0gJ2F0dHJfc2V0Jykge1xuICAgIHJldHVybiA8QXR0clNldEV2ZW50QmxvY2sgZGF0YT17Y2xlYW5lZH0gLz47XG4gIH1cblxuICAvLyBDYW5jZWxsYXRpb24gcmVhc29uOiByZW5kZXIgdGhlIGZyZWUtdGV4dCByZWFzb24gYXMgYSByZWFkYWJsZSBsaW5lXG4gIC8vIGluc3RlYWQgb2YgYSByYXcgSlNPTiBwYXlsb2FkICh0aGUgb25seSBmaWVsZCBydW5fY2FuY2VsbGVkIGNhcnJpZXMpLlxuICBpZiAoZXZlbnRUeXBlID09PSAncnVuX2NhbmNlbGxlZCcpIHtcbiAgICBjb25zdCBjYW5jZWxSZWFzb24gPVxuICAgICAgY2xlYW5lZCAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgY2xlYW5lZCA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHR5cGVvZiAoY2xlYW5lZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuY2FuY2VsUmVhc29uID09PSAnc3RyaW5nJ1xuICAgICAgICA/ICgoY2xlYW5lZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuY2FuY2VsUmVhc29uIGFzIHN0cmluZylcbiAgICAgICAgOiBudWxsO1xuICAgIGlmIChjYW5jZWxSZWFzb24pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJwLTIgdGV4dC1sYWJlbC0xMlwiXG4gICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTEwMDApJyB9fVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTkwMCknIH19PlJlYXNvbjogPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIndoaXRlc3BhY2UtcHJlLXdyYXAgYnJlYWstd29yZHNcIj5cbiAgICAgICAgICAgIHtjYW5jZWxSZWFzb259XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGdyb3VwL3BheWxvYWRcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwib3ZlcmZsb3cteC1hdXRvIHAtMiB0ZXh0LVsxMXB4XVwiXG4gICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScgfX1cbiAgICAgID5cbiAgICAgICAgPERhdGFJbnNwZWN0b3IgZGF0YT17Y2xlYW5lZH0gZXhwYW5kTGV2ZWw9ezJ9IC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNvcHl9XG4gICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIGJvdHRvbS0yIHJpZ2h0LTIgb3BhY2l0eS0wIGdyb3VwLWhvdmVyL3BheWxvYWQ6b3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1vcGFjaXR5IGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTIgcHktMSByb3VuZGVkLW1kIHRleHQtYnV0dG9uLTEyIGhvdmVyOmJnLVt2YXIoLS1kcy1ncmF5LWFscGhhLTIwMCldXCJcbiAgICAgICAgc3R5bGU9e3sgLi4uQlVUVE9OX1JFU0VUX1NUWUxFLCBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScgfX1cbiAgICAgICAgYXJpYS1sYWJlbD1cIkNvcHkgcGF5bG9hZFwiXG4gICAgICA+XG4gICAgICAgIHtjb3BpZWQgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxDaGVja1xuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTMgdy0zXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmVlbi03MDApJyB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JlZW4tNzAwKScgfX0+Q29waWVkPC9zcGFuPlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8Q29weSBjbGFzc05hbWU9XCJoLTMgdy0zXCIgLz5cbiAgICAgICAgICAgIDxzcGFuPkNvcHk8L3NwYW4+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTb3J0IG9wdGlvbnMgZm9yIHRoZSBldmVudHMgbGlzdFxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmNvbnN0IFNPUlRfT1BUSU9OUyA9IFtcbiAgeyB2YWx1ZTogJ2Rlc2MnIGFzIGNvbnN0LCBsYWJlbDogJ05ld2VzdCcgfSxcbiAgeyB2YWx1ZTogJ2FzYycgYXMgY29uc3QsIGxhYmVsOiAnT2xkZXN0JyB9LFxuXTtcblxuZnVuY3Rpb24gUm93c1NrZWxldG9uKHtcbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcyA9IGZhbHNlLFxufToge1xuICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzPzogYm9vbGVhbjtcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgIHtBcnJheS5mcm9tKHsgbGVuZ3RoOiAxNiB9LCAoXywgaSkgPT4gKFxuICAgICAgICA8ZGl2IGtleT17aX0gY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTBcIiBzdHlsZT17eyBoZWlnaHQ6IDQwIH19PlxuICAgICAgICAgIHsvKiBHdXR0ZXIgYXJlYSAqL31cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4LXNocmluay0wIHNlbGYtc3RyZXRjaCBmbGV4IGl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogR1VUVEVSX1dJRFRIIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgey8qIFZlcnRpY2FsIGxpbmUgc2tlbGV0b24gKi99XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgbGVmdDogOCxcbiAgICAgICAgICAgICAgICB0b3A6IGkgPT09IDAgPyAnNTAlJyA6IDAsXG4gICAgICAgICAgICAgICAgYm90dG9tOiAwLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAyLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbFwiIHN0eWxlPXt7IGJvcmRlclJhZGl1czogMSB9fSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7LyogRG90IHNrZWxldG9uICovfVxuICAgICAgICAgICAgPFNrZWxldG9uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOiBpICUgNCA9PT0gMCA/IDggOiA2LFxuICAgICAgICAgICAgICAgIGhlaWdodDogaSAlIDQgPT09IDAgPyA4IDogNixcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IGkgJSA0ID09PSAwID8gNSA6IDYsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvKiBDaGV2cm9uIHBsYWNlaG9sZGVyICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy01IGZsZXgtc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJ3LTUgaC01XCIgc3R5bGU9e3sgYm9yZGVyUmFkaXVzOiA0IH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge3Nob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHMgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fT5cbiAgICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiAnNzAlJyB9fSAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7LyogQ3JlYXRlZCAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19PlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiAnNzAlJyB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvKiBFdmVudCBUeXBlICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41XCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNrZWxldG9uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogNiwgaGVpZ2h0OiA2LCBib3JkZXJSYWRpdXM6ICc1MCUnIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiAnNjAlJyB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvKiBOYW1lICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6ICc1MCUnIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgey8qIENvcnJlbGF0aW9uIElEICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzMgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6ICc3NSUnIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgey8qIEV2ZW50IElEICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzMgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6ICc3NSUnIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRXZlbnQgcm93XG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuaW50ZXJmYWNlIEV2ZW50c0xpc3RQcm9wcyB7XG4gIGV2ZW50czogRXZlbnRbXSB8IG51bGw7XG4gIHJ1bj86IFdvcmtmbG93UnVuIHwgbnVsbDtcbiAgb25Mb2FkRXZlbnREYXRhPzogKGV2ZW50OiBFdmVudCkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIGhhc01vcmVFdmVudHM/OiBib29sZWFuO1xuICBpc0xvYWRpbmdNb3JlRXZlbnRzPzogYm9vbGVhbjtcbiAgb25Mb2FkTW9yZUV2ZW50cz86ICgpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAvKiogV2hlbiBwcm92aWRlZCwgc2lnbmFscyB0aGF0IGRlY3J5cHRpb24gaXMgYWN0aXZlICh0cmlnZ2VycyByZS1sb2FkIG9mIGV4cGFuZGVkIGV2ZW50cykgKi9cbiAgZW5jcnlwdGlvbktleT86IFVpbnQ4QXJyYXk7XG4gIC8qKiBXaGVuIHRydWUsIHNob3dzIGEgbG9hZGluZyBzdGF0ZSBpbnN0ZWFkIG9mIFwiTm8gZXZlbnRzIGZvdW5kXCIgZm9yIGVtcHR5IGxpc3RzICovXG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBTb3J0IG9yZGVyIGZvciBldmVudHMuIERlZmF1bHRzIHRvICdhc2MnLiAqL1xuICBzb3J0T3JkZXI/OiAnYXNjJyB8ICdkZXNjJztcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGNoYW5nZXMgc29ydCBvcmRlci4gV2hlbiBwcm92aWRlZCwgdGhlIHNvcnQgZHJvcGRvd24gaXMgc2hvd25cbiAgICogIGFuZCB0aGUgcGFyZW50IGlzIGV4cGVjdGVkIHRvIHJlZmV0Y2ggZnJvbSB0aGUgQVBJIHdpdGggdGhlIG5ldyBvcmRlci4gKi9cbiAgb25Tb3J0T3JkZXJDaGFuZ2U/OiAob3JkZXI6ICdhc2MnIHwgJ2Rlc2MnKSA9PiB2b2lkO1xuICAvKiogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBEZWNyeXB0IGJ1dHRvbi4gKi9cbiAgb25EZWNyeXB0PzogKCkgPT4gdm9pZDtcbiAgLyoqIFdoZXRoZXIgdGhlIGVuY3J5cHRpb24ga2V5IGlzIGN1cnJlbnRseSBiZWluZyBmZXRjaGVkLiAqL1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xuICAvKiogV2hldGhlciBkZWNyeXB0aW9uIGlzIHVuYXZhaWxhYmxlLiAqL1xuICBpc0RlY3J5cHREaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBFeHBsYWlucyB3aHkgZGVjcnlwdGlvbiBpcyB1bmF2YWlsYWJsZS4gKi9cbiAgZGVjcnlwdERpc2FibGVkUmVhc29uPzogc3RyaW5nO1xuICAvKiogUnVuLWxldmVsIGhpbnQ6IHRoZSBydW4gY29udGFpbnMgZW5jcnlwdGVkIGRhdGEgKGZyb20gcHJvYmUpLiAqL1xuICBoYXNFbmNyeXB0ZWREYXRhPzogYm9vbGVhbjtcbiAgLyoqIEZldGNoIGV2ZW50cyBmb3IgYW4gZXhhY3QgY29ycmVsYXRpb24gb3IgZXZlbnQgSUQuICovXG4gIG9uRXhhY3RJZFNlYXJjaD86IChcbiAgICBpZDogc3RyaW5nLFxuICAgIGtpbmQ6IEV4YWN0V29ya2Zsb3dTZWFyY2hJZEtpbmQsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWxcbiAgKSA9PiBQcm9taXNlPEV4YWN0SWRTZWFyY2hSZXN1bHQ+O1xuICAvKiogU2hvdyBvY2N1cnJlZEF0IHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBmb2xkaW5nIGl0IGludG8gdGhlIENyZWF0ZWQgdGltZXN0YW1wLiAqL1xuICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50Um93KHtcbiAgZXZlbnQsXG4gIGluZGV4LFxuICBpc0ZpcnN0LFxuICBpc0xhc3QsXG4gIGlzRXhwYW5kZWQsXG4gIG9uVG9nZ2xlRXhwYW5kLFxuICBhY3RpdmVHcm91cEtleSxcbiAgc2VsZWN0ZWRHcm91cEtleSxcbiAgc2VsZWN0ZWRHcm91cFJhbmdlLFxuICBjb3JyZWxhdGlvbk5hbWVNYXAsXG4gIHdvcmtmbG93TmFtZSxcbiAgZHVyYXRpb25NYXAsXG4gIG9uU2VsZWN0R3JvdXAsXG4gIG9uSG92ZXJHcm91cCxcbiAgb25Mb2FkRXZlbnREYXRhLFxuICBjYWNoZWRFdmVudERhdGEsXG4gIG9uQ2FjaGVFdmVudERhdGEsXG4gIGVuY3J5cHRpb25LZXksXG4gIG9uRW5jcnlwdGVkRGF0YURldGVjdGVkLFxuICBzdXBwcmVzc0dyb3VwRGltbWluZyA9IGZhbHNlLFxuICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzID0gZmFsc2UsXG4gIGlzRHVwbGljYXRlID0gZmFsc2UsXG59OiB7XG4gIGV2ZW50OiBFdmVudDtcbiAgaW5kZXg6IG51bWJlcjtcbiAgaXNGaXJzdDogYm9vbGVhbjtcbiAgaXNMYXN0OiBib29sZWFuO1xuICBpc0V4cGFuZGVkOiBib29sZWFuO1xuICBvblRvZ2dsZUV4cGFuZDogKGV2ZW50SWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgYWN0aXZlR3JvdXBLZXk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkR3JvdXBLZXk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkR3JvdXBSYW5nZTogeyBmaXJzdDogbnVtYmVyOyBsYXN0OiBudW1iZXIgfSB8IG51bGw7XG4gIGNvcnJlbGF0aW9uTmFtZU1hcDogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgd29ya2Zsb3dOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBkdXJhdGlvbk1hcDogTWFwPHN0cmluZywgRHVyYXRpb25JbmZvPjtcbiAgb25TZWxlY3RHcm91cDogKGdyb3VwS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG4gIG9uSG92ZXJHcm91cDogKGdyb3VwS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG4gIG9uTG9hZEV2ZW50RGF0YT86IChldmVudDogRXZlbnQpID0+IFByb21pc2U8dW5rbm93biB8IG51bGw+O1xuICBjYWNoZWRFdmVudERhdGE6IHVua25vd24gfCBudWxsO1xuICBvbkNhY2hlRXZlbnREYXRhOiAoZXZlbnRJZDogc3RyaW5nLCBkYXRhOiB1bmtub3duKSA9PiB2b2lkO1xuICBlbmNyeXB0aW9uS2V5PzogVWludDhBcnJheTtcbiAgb25FbmNyeXB0ZWREYXRhRGV0ZWN0ZWQ/OiAoKSA9PiB2b2lkO1xuICAvKiogRXhhY3QtSUQgc2VhcmNoIHJlc3VsdHMgc2hvdWxkIG5vdCBkaW0gdW5yZWxhdGVkIHJvd3MuICovXG4gIHN1cHByZXNzR3JvdXBEaW1taW5nPzogYm9vbGVhbjtcbiAgLyoqIFNob3cgb2NjdXJyZWRBdCBzZXBhcmF0ZWx5IGluc3RlYWQgb2YgZm9sZGluZyBpdCBpbnRvIHRoZSBDcmVhdGVkIHRpbWVzdGFtcC4gKi9cbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz86IGJvb2xlYW47XG4gIC8qKiBUaGUgZXZlbnQgcmVwZWF0cyBhIGNsYXNzIGFscmVhZHkgaW4gdGhlIGxvZywgc28gdGhlIHJ1bnRpbWUgaWdub3JlZCBpdC4gKi9cbiAgaXNEdXBsaWNhdGU/OiBib29sZWFuO1xufSkge1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbbG9hZGVkRXZlbnREYXRhLCBzZXRMb2FkZWRFdmVudERhdGFdID0gdXNlU3RhdGU8dW5rbm93biB8IG51bGw+KFxuICAgIGNhY2hlZEV2ZW50RGF0YVxuICApO1xuICBjb25zdCBbbG9hZEVycm9yLCBzZXRMb2FkRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtoYXNBdHRlbXB0ZWRMb2FkLCBzZXRIYXNBdHRlbXB0ZWRMb2FkXSA9IHVzZVN0YXRlKFxuICAgIGNhY2hlZEV2ZW50RGF0YSAhPT0gbnVsbFxuICApO1xuXG4gIC8vIE5vdGlmeSBwYXJlbnQgaWYgY2FjaGVkIGRhdGEgaGFzIGVuY3J5cHRlZCBtYXJrZXJzIG9uIG1vdW50XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgY2FjaGVkRXZlbnREYXRhICE9PSBudWxsICYmXG4gICAgICAhZW5jcnlwdGlvbktleSAmJlxuICAgICAgaGFzRW5jcnlwdGVkVmFsdWVzKGNhY2hlZEV2ZW50RGF0YSlcbiAgICApIHtcbiAgICAgIG9uRW5jcnlwdGVkRGF0YURldGVjdGVkPy4oKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgcm93R3JvdXBLZXkgPSBpc1J1bkxldmVsKGV2ZW50LmV2ZW50VHlwZSlcbiAgICA/ICdfX3J1bl9fJ1xuICAgIDogKGV2ZW50LmNvcnJlbGF0aW9uSWQgPz8gdW5kZWZpbmVkKTtcblxuICBjb25zdCBpc1NlYWxlZCA9IGlzU2VhbGVkTm9vcEV2ZW50KGV2ZW50KTtcbiAgY29uc3Qgcm93Tm90aWNlID0gaXNEdXBsaWNhdGVcbiAgICA/IERVUExJQ0FURV9FVkVOVF9NRVNTQUdFXG4gICAgOiBpc1NlYWxlZFxuICAgICAgPyBTRUFMRURfRVZFTlRfTUVTU0FHRVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHN0YXR1c0RvdENvbG9yID0gZ2V0U3RhdHVzRG90Q29sb3IoZXZlbnQuZXZlbnRUeXBlKTtcbiAgY29uc3QgY3JlYXRlZEF0ID0gbmV3IERhdGUoZXZlbnQuY3JlYXRlZEF0KTtcbiAgY29uc3Qgb2NjdXJyZWRBdCA9IHBhcnNlRXZlbnREYXRlKGV2ZW50Lm9jY3VycmVkQXQpO1xuICBjb25zdCBkaXNwbGF5ZWRDcmVhdGVkQXQgPSBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzXG4gICAgPyBjcmVhdGVkQXRcbiAgICA6IGdldEVmZmVjdGl2ZUV2ZW50RGF0ZShldmVudCk7XG4gIGNvbnN0IGhhc0V4aXN0aW5nRXZlbnREYXRhID0gJ2V2ZW50RGF0YScgaW4gZXZlbnQgJiYgZXZlbnQuZXZlbnREYXRhICE9IG51bGw7XG4gIGNvbnN0IGlzUnVuID0gaXNSdW5MZXZlbChldmVudC5ldmVudFR5cGUpO1xuICBjb25zdCBldmVudE5hbWUgPSBpc1J1blxuICAgID8gKHdvcmtmbG93TmFtZSA/PyAnLScpXG4gICAgOiBldmVudC5jb3JyZWxhdGlvbklkXG4gICAgICA/IChjb3JyZWxhdGlvbk5hbWVNYXAuZ2V0KGV2ZW50LmNvcnJlbGF0aW9uSWQpID8/ICctJylcbiAgICAgIDogJy0nO1xuXG4gIGNvbnN0IGR1cmF0aW9uS2V5ID0gZXZlbnQuY29ycmVsYXRpb25JZCA/PyAoaXNSdW4gPyAnX19ydW5fXycgOiAnJyk7XG4gIGNvbnN0IGR1cmF0aW9uSW5mbyA9IGR1cmF0aW9uS2V5ID8gZHVyYXRpb25NYXAuZ2V0KGR1cmF0aW9uS2V5KSA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBoYXNBY3RpdmUgPSBhY3RpdmVHcm91cEtleSAhPT0gdW5kZWZpbmVkO1xuICBjb25zdCBpc1JlbGF0ZWQgPSByb3dHcm91cEtleSAhPT0gdW5kZWZpbmVkICYmIHJvd0dyb3VwS2V5ID09PSBhY3RpdmVHcm91cEtleTtcbiAgY29uc3QgaXNEaW1tZWQgPSBoYXNBY3RpdmUgJiYgIWlzUmVsYXRlZCAmJiAhc3VwcHJlc3NHcm91cERpbW1pbmc7XG4gIGNvbnN0IGlzUHVsc2luZyA9IGhhc0FjdGl2ZSAmJiBpc1JlbGF0ZWQ7XG5cbiAgLy8gR3V0dGVyIHN0YXRlIGRlcml2ZWQgZnJvbSBzZWxlY3RlZEdyb3VwUmFuZ2VcbiAgY29uc3Qgc2hvd0JyYW5jaCA9IGhhc0FjdGl2ZSAmJiBpc1JlbGF0ZWQgJiYgIWlzUnVuO1xuICBjb25zdCBzaG93TGFuZUxpbmUgPVxuICAgIHNlbGVjdGVkR3JvdXBSYW5nZSAhPT0gbnVsbCAmJlxuICAgIGluZGV4ID49IHNlbGVjdGVkR3JvdXBSYW5nZS5maXJzdCAmJlxuICAgIGluZGV4IDw9IHNlbGVjdGVkR3JvdXBSYW5nZS5sYXN0O1xuICBjb25zdCBpc0xhbmVTdGFydCA9XG4gICAgc2VsZWN0ZWRHcm91cFJhbmdlICE9PSBudWxsICYmIGluZGV4ID09PSBzZWxlY3RlZEdyb3VwUmFuZ2UuZmlyc3Q7XG4gIGNvbnN0IGlzTGFuZUVuZCA9XG4gICAgc2VsZWN0ZWRHcm91cFJhbmdlICE9PSBudWxsICYmIGluZGV4ID09PSBzZWxlY3RlZEdyb3VwUmFuZ2UubGFzdDtcblxuICBjb25zdCBsb2FkRXZlbnREZXRhaWxzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmIChsb2FkZWRFdmVudERhdGEgIT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNhY2hlZEV2ZW50RGF0YSAhPT0gbnVsbCkge1xuICAgICAgc2V0TG9hZGVkRXZlbnREYXRhKGNhY2hlZEV2ZW50RGF0YSk7XG4gICAgICBzZXRIYXNBdHRlbXB0ZWRMb2FkKHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldElzTG9hZGluZyh0cnVlKTtcbiAgICBzZXRMb2FkRXJyb3IobnVsbCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb25Mb2FkRXZlbnREYXRhKSB7XG4gICAgICAgIHNldExvYWRFcnJvcignRXZlbnQgZGV0YWlscyB1bmF2YWlsYWJsZScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgb25Mb2FkRXZlbnREYXRhKGV2ZW50KTtcbiAgICAgIGlmIChkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZXRMb2FkZWRFdmVudERhdGEoZGF0YSk7XG4gICAgICAgIG9uQ2FjaGVFdmVudERhdGEoZXZlbnQuZXZlbnRJZCwgZGF0YSk7XG4gICAgICAgIGlmICghZW5jcnlwdGlvbktleSAmJiBoYXNFbmNyeXB0ZWRWYWx1ZXMoZGF0YSkpIHtcbiAgICAgICAgICBvbkVuY3J5cHRlZERhdGFEZXRlY3RlZD8uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHNldExvYWRFcnJvcihcbiAgICAgICAgZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdGYWlsZWQgdG8gbG9hZCBldmVudCBkZXRhaWxzJ1xuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldEhhc0F0dGVtcHRlZExvYWQodHJ1ZSk7XG4gICAgfVxuICB9LCBbXG4gICAgZXZlbnQsXG4gICAgbG9hZGVkRXZlbnREYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBvbkxvYWRFdmVudERhdGEsXG4gICAgb25DYWNoZUV2ZW50RGF0YSxcbiAgICBlbmNyeXB0aW9uS2V5LFxuICAgIG9uRW5jcnlwdGVkRGF0YURldGVjdGVkLFxuICAgIGNhY2hlZEV2ZW50RGF0YSxcbiAgXSk7XG5cbiAgLy8gQXV0by1sb2FkIGV2ZW50IGRhdGEgd2hlbiByZW1vdW50aW5nIGluIGV4cGFuZGVkIHN0YXRlIHdpdGhvdXQgY2FjaGVkIGRhdGFcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzRXhwYW5kZWQgfHwgaXNMb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZvaWQgbG9hZEV2ZW50RGV0YWlscygpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pO1xuXG4gIC8vIFdoZW4gZW5jcnlwdGlvbiBrZXkgY2hhbmdlcyBhbmQgdGhpcyBldmVudCB3YXMgcHJldmlvdXNseSBsb2FkZWQsXG4gIC8vIHJlLWxvYWQgdG8gZ2V0IGRlY3J5cHRlZCBkYXRhXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGVuY3J5cHRpb25LZXkgJiYgaGFzQXR0ZW1wdGVkTG9hZCAmJiBvbkxvYWRFdmVudERhdGEpIHtcbiAgICAgIHNldExvYWRlZEV2ZW50RGF0YShudWxsKTtcbiAgICAgIHNldEhhc0F0dGVtcHRlZExvYWQoZmFsc2UpO1xuICAgICAgb25Mb2FkRXZlbnREYXRhKGV2ZW50KVxuICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2V0TG9hZGVkRXZlbnREYXRhKGRhdGEpO1xuICAgICAgICAgICAgb25DYWNoZUV2ZW50RGF0YShldmVudC5ldmVudElkLCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0SGFzQXR0ZW1wdGVkTG9hZCh0cnVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICBzZXRIYXNBdHRlbXB0ZWRMb2FkKHRydWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbZW5jcnlwdGlvbktleV0pO1xuXG4gIGNvbnN0IGhhbmRsZVJvd0NsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9uU2VsZWN0R3JvdXAocm93R3JvdXBLZXkgPT09IHNlbGVjdGVkR3JvdXBLZXkgPyB1bmRlZmluZWQgOiByb3dHcm91cEtleSk7XG4gICAgb25Ub2dnbGVFeHBhbmQoZXZlbnQuZXZlbnRJZCk7XG4gICAgaWYgKCFpc0V4cGFuZGVkKSB7XG4gICAgICB2b2lkIGxvYWRFdmVudERldGFpbHMoKTtcbiAgICB9XG4gIH0sIFtcbiAgICBzZWxlY3RlZEdyb3VwS2V5LFxuICAgIHJvd0dyb3VwS2V5LFxuICAgIG9uU2VsZWN0R3JvdXAsXG4gICAgb25Ub2dnbGVFeHBhbmQsXG4gICAgZXZlbnQuZXZlbnRJZCxcbiAgICBpc0V4cGFuZGVkLFxuICAgIGxvYWRFdmVudERldGFpbHMsXG4gIF0pO1xuXG4gIGNvbnN0IG1lcmdlZEV2ZW50RGF0YSA9XG4gICAgbG9hZGVkRXZlbnREYXRhID8/XG4gICAgKGhhc0V4aXN0aW5nRXZlbnREYXRhXG4gICAgICA/IChldmVudCBhcyBFdmVudCAmIHsgZXZlbnREYXRhOiB1bmtub3duIH0pLmV2ZW50RGF0YVxuICAgICAgOiBudWxsKTtcblxuICBjb25zdCBkaXNwbGF5UGF5bG9hZCA9IGlzTG9hZGluZyA/IGxvYWRlZEV2ZW50RGF0YSA6IG1lcmdlZEV2ZW50RGF0YTtcblxuICBjb25zdCBjb250ZW50T3BhY2l0eSA9IGlzRGltbWVkID8gMC4zIDogMTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtZXZlbnQtaWQ9e2V2ZW50LmV2ZW50SWR9XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IG9uSG92ZXJHcm91cChyb3dHcm91cEtleSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IG9uSG92ZXJHcm91cCh1bmRlZmluZWQpfVxuICAgID5cbiAgICAgIHsvKiBSb3cgKi99XG4gICAgICA8ZGl2XG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgb25DbGljaz17aGFuZGxlUm93Q2xpY2t9XG4gICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykgaGFuZGxlUm93Q2xpY2soKTtcbiAgICAgICAgfX1cbiAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIHRleHQtbGVmdCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMCB0ZXh0LWxhYmVsLTEzIGhvdmVyOmJnLVt2YXIoLS1kcy1ncmF5LWFscGhhLTEwMCldIHRyYW5zaXRpb24tY29sb3JzIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgc3R5bGU9e3sgbWluSGVpZ2h0OiA0MCB9fVxuICAgICAgPlxuICAgICAgICA8VHJlZUd1dHRlclxuICAgICAgICAgIGlzRmlyc3Q9e2lzRmlyc3R9XG4gICAgICAgICAgaXNMYXN0PXtpc0xhc3QgJiYgIWlzRXhwYW5kZWR9XG4gICAgICAgICAgaXNSdW5MZXZlbD17aXNSdW59XG4gICAgICAgICAgc3RhdHVzRG90Q29sb3I9e3N0YXR1c0RvdENvbG9yfVxuICAgICAgICAgIHB1bHNlPXtpc1B1bHNpbmd9XG4gICAgICAgICAgaGFzU2VsZWN0aW9uPXtoYXNBY3RpdmV9XG4gICAgICAgICAgc2hvd0JyYW5jaD17c2hvd0JyYW5jaH1cbiAgICAgICAgICBzaG93TGFuZUxpbmU9e3Nob3dMYW5lTGluZX1cbiAgICAgICAgICBpc0xhbmVTdGFydD17aXNMYW5lU3RhcnR9XG4gICAgICAgICAgaXNMYW5lRW5kPXtpc0xhbmVFbmR9XG4gICAgICAgIC8+XG5cbiAgICAgICAgey8qIENvbnRlbnQgYXJlYTogZGltcyB3aGVuIHVucmVsYXRlZCAqL31cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGZsZXgtMSBtaW4tdy0wXCJcbiAgICAgICAgICBzdHlsZT17eyBvcGFjaXR5OiBjb250ZW50T3BhY2l0eSwgdHJhbnNpdGlvbjogJ29wYWNpdHkgMTUwbXMnIH19XG4gICAgICAgID5cbiAgICAgICAgICB7LyogRXhwYW5kIGNoZXZyb24gaW5kaWNhdG9yICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctNSBoLTUgZmxleC1zaHJpbmstMCByb3VuZGVkXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCB2YXIoLS1kcy1ncmF5LTQwMCknLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q2hldnJvblJpZ2h0XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtMyB3LTMgdHJhbnNpdGlvbi10cmFuc2Zvcm1cIlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IGlzRXhwYW5kZWQgPyAncm90YXRlKDkwZGVnKScgOiAncm90YXRlKDBkZWcpJyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7c2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRhYnVsYXItbnVtcyBtaW4tdy0wIHB4LTRcIlxuICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScsIGZsZXg6ICcyIDEgMCUnIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtvY2N1cnJlZEF0ID8gKFxuICAgICAgICAgICAgICAgIDxUaW1lc3RhbXBUb29sdGlwIGRhdGU9e29jY3VycmVkQXR9PlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e2Zvcm1hdEV2ZW50VGltZShvY2N1cnJlZEF0KX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9UaW1lc3RhbXBUb29sdGlwPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICctJ1xuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIHsvKiBDcmVhdGVkICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInRhYnVsYXItbnVtcyBtaW4tdy0wIHB4LTRcIlxuICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTkwMCknLCBmbGV4OiAnMiAxIDAlJyB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUaW1lc3RhbXBUb29sdGlwIGRhdGU9e2Rpc3BsYXllZENyZWF0ZWRBdH0+XG4gICAgICAgICAgICAgIDxzcGFuPntmb3JtYXRFdmVudFRpbWUoZGlzcGxheWVkQ3JlYXRlZEF0KX08L3NwYW4+XG4gICAgICAgICAgICA8L1RpbWVzdGFtcFRvb2x0aXA+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogRXZlbnQgVHlwZSAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtIG1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19PlxuICAgICAgICAgICAgPEV2ZW50Tm90aWNlVG9vbHRpcCBub3RpY2U9e3Jvd05vdGljZX0+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjVcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogcm93Tm90aWNlXG4gICAgICAgICAgICAgICAgICAgID8gJ3ZhcigtLWRzLWdyYXktNzAwKSdcbiAgICAgICAgICAgICAgICAgICAgOiAndmFyKC0tZHMtZ3JheS05MDApJyxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogNixcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA2LFxuICAgICAgICAgICAgICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7aXNQdWxzaW5nICYmIChcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNldDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHN0YXR1c0RvdENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMC43NSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogRE9UX1BVTFNFX0FOSU1BVElPTixcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDYsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA2LFxuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBzdGF0dXNEb3RDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIHtmb3JtYXRFdmVudFR5cGUoZXZlbnQuZXZlbnRUeXBlKX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9FdmVudE5vdGljZVRvb2x0aXA+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogTmFtZSAqL31cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTQgb3ZlcmZsb3ctaGlkZGVuIHRleHQtZWxsaXBzaXMgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgICAgICAgICAgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX1cbiAgICAgICAgICAgIHRpdGxlPXtldmVudE5hbWUgIT09ICctJyA/IGV2ZW50TmFtZSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7ZXZlbnROYW1lfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgey8qIENvcnJlbGF0aW9uIElEICovfVxuICAgICAgICAgIDxDb3B5YWJsZUNlbGxcbiAgICAgICAgICAgIHZhbHVlPXtldmVudC5jb3JyZWxhdGlvbklkIHx8ICcnfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9udC1tb25vXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGZsZXg6ICczIDEgMCUnIH19XG4gICAgICAgICAgLz5cblxuICAgICAgICAgIHsvKiBFdmVudCBJRCAqL31cbiAgICAgICAgICA8Q29weWFibGVDZWxsXG4gICAgICAgICAgICB2YWx1ZT17ZXZlbnQuZXZlbnRJZH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvbnQtbW9ub1wiXG4gICAgICAgICAgICBzdHlsZT17eyBmbGV4OiAnMyAxIDAlJyB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBFeHBhbmRlZCBkZXRhaWxzOiB0cmVlIGxpbmVzIGNvbnRpbnVlIHRocm91Z2ggdGhpcyBhcmVhICovfVxuICAgICAge2lzRXhwYW5kZWQgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXhcIj5cbiAgICAgICAgICB7LyogQ29udGludWF0aW9uIGd1dHRlcjogbGFuZSBsaW5lIGNvbnRpbnVlcyBpZiBub3QgYXQgbGFuZSBlbmQgKi99XG4gICAgICAgICAgPFRyZWVHdXR0ZXJcbiAgICAgICAgICAgIGlzRmlyc3Q9e2ZhbHNlfVxuICAgICAgICAgICAgaXNMYXN0PXtpc0xhc3R9XG4gICAgICAgICAgICBpc1J1bkxldmVsPXtpc1J1bn1cbiAgICAgICAgICAgIGhhc1NlbGVjdGlvbj17aGFzQWN0aXZlfVxuICAgICAgICAgICAgc2hvd0JyYW5jaD17ZmFsc2V9XG4gICAgICAgICAgICBzaG93TGFuZUxpbmU9e3Nob3dMYW5lTGluZSAmJiAhaXNMYW5lRW5kfVxuICAgICAgICAgICAgaXNMYW5lU3RhcnQ9e2ZhbHNlfVxuICAgICAgICAgICAgaXNMYW5lRW5kPXtmYWxzZX1cbiAgICAgICAgICAgIGNvbnRpbnVhdGlvbk9ubHlcbiAgICAgICAgICAvPlxuICAgICAgICAgIHsvKiBTcGFjZXIgZm9yIGNoZXZyb24gY29sdW1uICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy01IGZsZXgtc2hyaW5rLTBcIiAvPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBteS0xLjUgbXItMyBtbC0yIHB5LTIgcm91bmRlZC1tZCBib3JkZXIgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAndmFyKC0tZHMtZ3JheS1hbHBoYS0yMDApJyxcbiAgICAgICAgICAgICAgb3BhY2l0eTogY29udGVudE9wYWNpdHksXG4gICAgICAgICAgICAgIHRyYW5zaXRpb246ICdvcGFjaXR5IDE1MG1zJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgey8qIER1cmF0aW9uIGluZm8gKi99XG4gICAgICAgICAgICB7KGR1cmF0aW9uSW5mbz8ucXVldWVkICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgZHVyYXRpb25JbmZvPy5yYW4gIT09IHVuZGVmaW5lZCkgJiYgKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicHgtMiBwYi0xLjUgdGV4dC1sYWJlbC0xMiBmbGV4IGdhcC0zXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtkdXJhdGlvbkluZm8ucXVldWVkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uSW5mby5xdWV1ZWQgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgUXVldWVkIGZvcnsnICd9XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tb25vIHRhYnVsYXItbnVtc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2Zvcm1hdER1cmF0aW9uKGR1cmF0aW9uSW5mby5xdWV1ZWQpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7ZHVyYXRpb25JbmZvLnJhbiAhPT0gdW5kZWZpbmVkICYmIChcbiAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICBSYW4gZm9yeycgJ31cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tb25vIHRhYnVsYXItbnVtc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHtmb3JtYXREdXJhdGlvbihkdXJhdGlvbkluZm8ucmFuKX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgey8qIFBheWxvYWQgKi99XG4gICAgICAgICAgICB7ZGlzcGxheVBheWxvYWQgIT0gbnVsbCA/IChcbiAgICAgICAgICAgICAgPFBheWxvYWRCbG9jayBkYXRhPXtkaXNwbGF5UGF5bG9hZH0gZXZlbnRUeXBlPXtldmVudC5ldmVudFR5cGV9IC8+XG4gICAgICAgICAgICApIDogbG9hZEVycm9yID8gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1tZCBib3JkZXIgcC0zIHRleHQtbGFiZWwtMTJcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLXJlZC00MDApJyxcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLXJlZC0xMDApJyxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtcmVkLTkwMCknLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7bG9hZEVycm9yfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiBpc0xvYWRpbmcgfHxcbiAgICAgICAgICAgICAgKGxvYWRlZEV2ZW50RGF0YSA9PT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICFoYXNBdHRlbXB0ZWRMb2FkICYmXG4gICAgICAgICAgICAgICAgZXZlbnQuY29ycmVsYXRpb25JZCkgPyAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMiBwLTNcIj5cbiAgICAgICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6ICc3NSUnIH19IC8+XG4gICAgICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiAnNTAlJyB9fSAvPlxuICAgICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTNcIiBzdHlsZT17eyB3aWR0aDogJzYwJScgfX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicC0yIHRleHQtbGFiZWwtMTJcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgTm8gZGF0YVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBNYWluIGNvbXBvbmVudFxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIEV2ZW50TGlzdFZpZXdJbm5lcih7XG4gIGV2ZW50cyxcbiAgcnVuLFxuICBvbkxvYWRFdmVudERhdGEsXG4gIGhhc01vcmVFdmVudHMgPSBmYWxzZSxcbiAgaXNMb2FkaW5nTW9yZUV2ZW50cyA9IGZhbHNlLFxuICBvbkxvYWRNb3JlRXZlbnRzLFxuICBlbmNyeXB0aW9uS2V5LFxuICBpc0xvYWRpbmcgPSBmYWxzZSxcbiAgc29ydE9yZGVyOiBzb3J0T3JkZXJQcm9wLFxuICBvblNvcnRPcmRlckNoYW5nZSxcbiAgb25EZWNyeXB0LFxuICBpc0RlY3J5cHRpbmcgPSBmYWxzZSxcbiAgaXNEZWNyeXB0RGlzYWJsZWQgPSBmYWxzZSxcbiAgZGVjcnlwdERpc2FibGVkUmVhc29uLFxuICBoYXNFbmNyeXB0ZWREYXRhOiBoYXNFbmNyeXB0ZWREYXRhUHJvcCA9IGZhbHNlLFxuICBvbkV4YWN0SWRTZWFyY2gsXG4gIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHMgPSBmYWxzZSxcbn06IEV2ZW50c0xpc3RQcm9wcykge1xuICBjb25zdCB0b2FzdCA9IHVzZVRvYXN0KCk7XG4gIGNvbnN0IFtpbnRlcm5hbFNvcnRPcmRlciwgc2V0SW50ZXJuYWxTb3J0T3JkZXJdID0gdXNlU3RhdGU8J2FzYycgfCAnZGVzYyc+KFxuICAgICdhc2MnXG4gICk7XG4gIGNvbnN0IGVmZmVjdGl2ZVNvcnRPcmRlciA9IHNvcnRPcmRlclByb3AgPz8gaW50ZXJuYWxTb3J0T3JkZXI7XG4gIGNvbnN0IGhhbmRsZVNvcnRPcmRlckNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChvcmRlcjogJ2FzYycgfCAnZGVzYycpID0+IHtcbiAgICAgIGlmIChvblNvcnRPcmRlckNoYW5nZSkge1xuICAgICAgICBvblNvcnRPcmRlckNoYW5nZShvcmRlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRJbnRlcm5hbFNvcnRPcmRlcihvcmRlcik7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25Tb3J0T3JkZXJDaGFuZ2VdXG4gICk7XG5cbiAgY29uc3QgW3NlYXJjaFF1ZXJ5LCBzZXRTZWFyY2hRdWVyeV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtzZWFyY2hSZXN1bHRzLCBzZXRTZWFyY2hSZXN1bHRzXSA9IHVzZVN0YXRlPEV2ZW50W10gfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3NlYXJjaFJlc3VsdHNUcnVuY2F0ZWQsIHNldFNlYXJjaFJlc3VsdHNUcnVuY2F0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2VhcmNoRXJyb3IsIHNldFNlYXJjaEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbc2VhcmNoTG9hZGluZywgc2V0U2VhcmNoTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzZWFyY2hOb3RGb3VuZCwgc2V0U2VhcmNoTm90Rm91bmRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBzZWFyY2hSZXF1ZXN0UmVmID0gdXNlUmVmKDApO1xuICBjb25zdCB2aXJ0dW9zb1JlZiA9IHVzZVJlZjxWaXJ0dW9zb0hhbmRsZT4obnVsbCk7XG5cbiAgY29uc3QgcGFyc2VkU2VhcmNoSWQgPSB1c2VNZW1vKFxuICAgICgpID0+IHBhcnNlRXhhY3RXb3JrZmxvd1NlYXJjaElkKHNlYXJjaFF1ZXJ5KSxcbiAgICBbc2VhcmNoUXVlcnldXG4gICk7XG4gIGNvbnN0IGlzRXhhY3RTZWFyY2hBY3RpdmUgPSBzZWFyY2hSZXN1bHRzICE9PSBudWxsO1xuXG4gIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHNvdXJjZUV2ZW50cyA9IGlzRXhhY3RTZWFyY2hBY3RpdmUgPyBzZWFyY2hSZXN1bHRzIDogKGV2ZW50cyA/PyBbXSk7XG4gICAgaWYgKHNvdXJjZUV2ZW50cy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcbiAgICBjb25zdCBkaXIgPSBlZmZlY3RpdmVTb3J0T3JkZXIgPT09ICdkZXNjJyA/IC0xIDogMTtcbiAgICByZXR1cm4gWy4uLnNvdXJjZUV2ZW50c10uc29ydChcbiAgICAgIChhLCBiKSA9PiBkaXIgKiAoZ2V0RWZmZWN0aXZlRXZlbnRUaW1lKGEpIC0gZ2V0RWZmZWN0aXZlRXZlbnRUaW1lKGIpKVxuICAgICk7XG4gIH0sIFtldmVudHMsIGVmZmVjdGl2ZVNvcnRPcmRlciwgaXNFeGFjdFNlYXJjaEFjdGl2ZSwgc2VhcmNoUmVzdWx0c10pO1xuXG4gIC8vIEV2ZW50cyBldmVyeSByZXBsYXkgcmVhZHMgcGFzdCBhcyByZXBlYXRzLiBDb21wdXRlZCBmcm9tIHRoZSBzb3VyY2UgbGlzdFxuICAvLyByYXRoZXIgdGhhbiBgc29ydGVkRXZlbnRzYCBiZWNhdXNlIHdoaWNoIG9jY3VycmVuY2UgY291bnRlZCBpcyBhIHByb3BlcnR5XG4gIC8vIG9mIHRoZSBsb2csIG5vdCBvZiB0aGUgZGlyZWN0aW9uIHRoZSB0YWJsZSBoYXBwZW5zIHRvIGJlIHNvcnRlZCBpbi5cbiAgLy9cbiAgLy8gQSBwYWdlIHNob3J0IG9mIHRoZSB3aG9sZSBsb2csIG9yIGFuIGV4YWN0LUlEIHNlYXJjaCB0aGF0IHJldHVybnMgb25lXG4gIC8vIGV2ZW50LCBjYW5ub3QgYW5zd2VyIHRoYXQgcXVlc3Rpb246IHRoZSBldmVudCBhIHJlcGVhdCBsb3N0IHRvIG1heSBiZVxuICAvLyBvdXRzaWRlIHRoZSB3aW5kb3csIGFuZCByZWFkaW5nIGl0IHRoZSBvdGhlciB3YXkgcm91bmQgd291bGQgbWFyayB0aGVcbiAgLy8gZXZlbnQgdGhlIHJ1biBhY3RlZCBvbiBhbmQgZHJvcCBpdCBmcm9tIHRoZSBkdXJhdGlvbnMuIEJvdGggY2FzZXMgY2xhc3NpZnlcbiAgLy8gbm90aGluZy5cbiAgY29uc3QgZHVwbGljYXRlRXZlbnRJZHMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBmaW5kRHVwbGljYXRlRXZlbnRJZHMoZXZlbnRzID8/IFtdLCB7XG4gICAgICAgIGlzQ29tcGxldGVIaXN0b3J5OiAhaGFzTW9yZUV2ZW50cyAmJiAhaXNFeGFjdFNlYXJjaEFjdGl2ZSxcbiAgICAgIH0pLFxuICAgIFtldmVudHMsIGhhc01vcmVFdmVudHMsIGlzRXhhY3RTZWFyY2hBY3RpdmVdXG4gICk7XG5cbiAgLy8gRGV0ZWN0IGVuY3J5cHRlZCBmaWVsZHMgYWNyb3NzIGFsbCBsb2FkZWQgZXZlbnRzIChpbmxpbmUgZXZlbnREYXRhKS5cbiAgY29uc3QgaGFzRW5jcnlwdGVkSW5saW5lRGF0YSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHNvdXJjZUV2ZW50cyA9IGlzRXhhY3RTZWFyY2hBY3RpdmUgPyBzZWFyY2hSZXN1bHRzIDogZXZlbnRzO1xuICAgIGlmICghc291cmNlRXZlbnRzKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChjb25zdCBldmVudCBvZiBzb3VyY2VFdmVudHMpIHtcbiAgICAgIGNvbnN0IGVkID0gKGV2ZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5ldmVudERhdGE7XG4gICAgICBpZiAoaGFzRW5jcnlwdGVkVmFsdWVzKGVkKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSwgW2V2ZW50cywgaXNFeGFjdFNlYXJjaEFjdGl2ZSwgc2VhcmNoUmVzdWx0c10pO1xuXG4gIC8vIFRyYWNrcyB3aGV0aGVyIGFueSBleHBhbmRlZCByb3cncyBsYXp5LWxvYWRlZCBkYXRhIGNvbnRhaW5lZCBlbmNyeXB0ZWQgbWFya2Vycy5cbiAgLy8gU2V0IHRvIHRydWUgYnkgRXZlbnRSb3cgdmlhIG9uRW5jcnlwdGVkRGF0YURldGVjdGVkOyBuZXZlciByZXNldCAoc3RpY2t5KS5cbiAgY29uc3QgW2ZvdW5kRW5jcnlwdGVkSW5MYXp5RGF0YSwgc2V0Rm91bmRFbmNyeXB0ZWRJbkxhenlEYXRhXSA9XG4gICAgdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBoYW5kbGVFbmNyeXB0ZWREYXRhRGV0ZWN0ZWQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0Rm91bmRFbmNyeXB0ZWRJbkxhenlEYXRhKHRydWUpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFzRW5jcnlwdGVkRGF0YSA9XG4gICAgaGFzRW5jcnlwdGVkRGF0YVByb3AgfHwgaGFzRW5jcnlwdGVkSW5saW5lRGF0YSB8fCBmb3VuZEVuY3J5cHRlZEluTGF6eURhdGE7XG5cbiAgY29uc3QgeyBjb3JyZWxhdGlvbk5hbWVNYXAsIHdvcmtmbG93TmFtZSB9ID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgYnVpbGROYW1lTWFwcyhcbiAgICAgICAgaXNFeGFjdFNlYXJjaEFjdGl2ZSA/IHNlYXJjaFJlc3VsdHMgOiAoZXZlbnRzID8/IG51bGwpLFxuICAgICAgICBydW4gPz8gbnVsbFxuICAgICAgKSxcbiAgICBbZXZlbnRzLCBpc0V4YWN0U2VhcmNoQWN0aXZlLCBydW4sIHNlYXJjaFJlc3VsdHNdXG4gICk7XG5cbiAgY29uc3QgZHVyYXRpb25NYXAgPSB1c2VNZW1vKFxuICAgICgpID0+IGJ1aWxkRHVyYXRpb25NYXAoc29ydGVkRXZlbnRzLCBkdXBsaWNhdGVFdmVudElkcyksXG4gICAgW3NvcnRlZEV2ZW50cywgZHVwbGljYXRlRXZlbnRJZHNdXG4gICk7XG5cbiAgY29uc3QgW3NlbGVjdGVkR3JvdXBLZXksIHNldFNlbGVjdGVkR3JvdXBLZXldID0gdXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgY29uc3QgW2hvdmVyZWRHcm91cEtleSwgc2V0SG92ZXJlZEdyb3VwS2V5XSA9IHVzZVN0YXRlPHN0cmluZyB8IHVuZGVmaW5lZD4oXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIGNvbnN0IG9uU2VsZWN0R3JvdXAgPSB1c2VDYWxsYmFjaygoZ3JvdXBLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIHNldFNlbGVjdGVkR3JvdXBLZXkoZ3JvdXBLZXkpO1xuICB9LCBbXSk7XG4gIGNvbnN0IG9uSG92ZXJHcm91cCA9IHVzZUNhbGxiYWNrKChncm91cEtleTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgc2V0SG92ZXJlZEdyb3VwS2V5KGdyb3VwS2V5KTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGFjdGl2ZUdyb3VwS2V5ID0gc2VsZWN0ZWRHcm91cEtleSA/PyBob3ZlcmVkR3JvdXBLZXk7XG5cbiAgLy8gRXhwYW5kZWQgc3RhdGUgbGlmdGVkIG91dCBvZiBFdmVudFJvdyBzbyBpdCBzdXJ2aXZlcyB2aXJ0dWFsaXphdGlvblxuICBjb25zdCBbZXhwYW5kZWRFdmVudElkcywgc2V0RXhwYW5kZWRFdmVudElkc10gPSB1c2VTdGF0ZTxTZXQ8c3RyaW5nPj4oXG4gICAgKCkgPT4gbmV3IFNldCgpXG4gICk7XG4gIGNvbnN0IHRvZ2dsZUV2ZW50RXhwYW5kZWQgPSB1c2VDYWxsYmFjaygoZXZlbnRJZDogc3RyaW5nKSA9PiB7XG4gICAgc2V0RXhwYW5kZWRFdmVudElkcygocHJldikgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IG5ldyBTZXQocHJldik7XG4gICAgICBpZiAobmV4dC5oYXMoZXZlbnRJZCkpIHtcbiAgICAgICAgbmV4dC5kZWxldGUoZXZlbnRJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0LmFkZChldmVudElkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pO1xuICB9LCBbXSk7XG5cbiAgLy8gRXZlbnQgZGF0YSBjYWNoZTogcmVmIGF2b2lkcyByZS1yZW5kZXJzIHdoZW4gY2FjaGUgdXBkYXRlc1xuICBjb25zdCBldmVudERhdGFDYWNoZVJlZiA9IHVzZVJlZjxNYXA8c3RyaW5nLCB1bmtub3duPj4obmV3IE1hcCgpKTtcbiAgY29uc3QgY2FjaGVFdmVudERhdGEgPSB1c2VDYWxsYmFjaygoZXZlbnRJZDogc3RyaW5nLCBkYXRhOiB1bmtub3duKSA9PiB7XG4gICAgZXZlbnREYXRhQ2FjaGVSZWYuY3VycmVudC5zZXQoZXZlbnRJZCwgZGF0YSk7XG4gIH0sIFtdKTtcblxuICAvLyBMb29rdXAgZnJvbSBldmVudElkIOKGkiBncm91cEtleSBmb3IgZWZmaWNpZW50IGNvbGxhcHNlIGZpbHRlcmluZ1xuICBjb25zdCBldmVudEdyb3VwS2V5TWFwID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IGV2IG9mIHNvcnRlZEV2ZW50cykge1xuICAgICAgY29uc3QgZ2sgPSBpc1J1bkxldmVsKGV2LmV2ZW50VHlwZSlcbiAgICAgICAgPyAnX19ydW5fXydcbiAgICAgICAgOiAoZXYuY29ycmVsYXRpb25JZCA/PyAnJyk7XG4gICAgICBpZiAoZ2spIG1hcC5zZXQoZXYuZXZlbnRJZCwgZ2spO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuICB9LCBbc29ydGVkRXZlbnRzXSk7XG5cbiAgLy8gQ29sbGFwc2UgZXhwYW5kZWQgZXZlbnRzIHRoYXQgZG9uJ3QgYmVsb25nIHRvIHRoZSBuZXdseSBzZWxlY3RlZCBncm91cFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZEdyb3VwS2V5ID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICBzZXRFeHBhbmRlZEV2ZW50SWRzKChwcmV2KSA9PiB7XG4gICAgICBpZiAocHJldi5zaXplID09PSAwKSByZXR1cm4gcHJldjtcbiAgICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICBjb25zdCBuZXh0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICBmb3IgKGNvbnN0IGV2ZW50SWQgb2YgcHJldikge1xuICAgICAgICBpZiAoZXZlbnRHcm91cEtleU1hcC5nZXQoZXZlbnRJZCkgPT09IHNlbGVjdGVkR3JvdXBLZXkpIHtcbiAgICAgICAgICBuZXh0LmFkZChldmVudElkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNoYW5nZWQgPyBuZXh0IDogcHJldjtcbiAgICB9KTtcbiAgfSwgW3NlbGVjdGVkR3JvdXBLZXksIGV2ZW50R3JvdXBLZXlNYXBdKTtcblxuICAvLyBDb21wdXRlIHRoZSByb3ctaW5kZXggcmFuZ2UgZm9yIHRoZSBhY3RpdmUgZ3JvdXAncyBjb25uZWN0aW5nIGxhbmUgbGluZS5cbiAgLy8gT25seSBhcHBsaWVzIHRvIG5vbi1ydW4gZ3JvdXBzIChzdGVwL2hvb2svd2FpdCBjb3JyZWxhdGlvbnMpLlxuICBjb25zdCBzZWxlY3RlZEdyb3VwUmFuZ2UgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWFjdGl2ZUdyb3VwS2V5IHx8IGFjdGl2ZUdyb3VwS2V5ID09PSAnX19ydW5fXycpIHJldHVybiBudWxsO1xuICAgIGxldCBmaXJzdCA9IC0xO1xuICAgIGxldCBsYXN0ID0gLTE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRFdmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChzb3J0ZWRFdmVudHNbaV0uY29ycmVsYXRpb25JZCA9PT0gYWN0aXZlR3JvdXBLZXkpIHtcbiAgICAgICAgaWYgKGZpcnN0ID09PSAtMSkgZmlyc3QgPSBpO1xuICAgICAgICBsYXN0ID0gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpcnN0ID49IDAgPyB7IGZpcnN0LCBsYXN0IH0gOiBudWxsO1xuICB9LCBbYWN0aXZlR3JvdXBLZXksIHNvcnRlZEV2ZW50c10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdHJpbW1lZCA9IHNlYXJjaFF1ZXJ5LnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWQpIHtcbiAgICAgIHNlYXJjaFJlcXVlc3RSZWYuY3VycmVudCArPSAxO1xuICAgICAgc2V0U2VhcmNoUmVzdWx0cyhudWxsKTtcbiAgICAgIHNldFNlYXJjaFJlc3VsdHNUcnVuY2F0ZWQoZmFsc2UpO1xuICAgICAgc2V0U2VhcmNoRXJyb3IobnVsbCk7XG4gICAgICBzZXRTZWFyY2hMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldFNlYXJjaE5vdEZvdW5kKGZhbHNlKTtcbiAgICAgIHNldFNlbGVjdGVkR3JvdXBLZXkodW5kZWZpbmVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUV4YWN0V29ya2Zsb3dTZWFyY2hJZCh0cmltbWVkKTtcbiAgICBpZiAoIXBhcnNlZCB8fCAhb25FeGFjdElkU2VhcmNoKSB7XG4gICAgICBzZXRTZWFyY2hSZXN1bHRzKG51bGwpO1xuICAgICAgc2V0U2VhcmNoTG9hZGluZyhmYWxzZSk7XG4gICAgICBzZXRTZWFyY2hOb3RGb3VuZChmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdElkID0gKytzZWFyY2hSZXF1ZXN0UmVmLmN1cnJlbnQ7XG4gICAgc2V0U2VhcmNoTG9hZGluZyh0cnVlKTtcbiAgICBzZXRTZWFyY2hOb3RGb3VuZChmYWxzZSk7XG4gICAgc2V0U2VhcmNoRXJyb3IobnVsbCk7XG5cbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBvbkV4YWN0SWRTZWFyY2goXG4gICAgICAgICAgICBwYXJzZWQuaWQsXG4gICAgICAgICAgICBwYXJzZWQua2luZCxcbiAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5zaWduYWxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCB8fFxuICAgICAgICAgICAgc2VhcmNoUmVxdWVzdFJlZi5jdXJyZW50ICE9PSByZXF1ZXN0SWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVzdWx0cy5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgIHNldFNlYXJjaFJlc3VsdHMoW10pO1xuICAgICAgICAgICAgc2V0U2VhcmNoUmVzdWx0c1RydW5jYXRlZChmYWxzZSk7XG4gICAgICAgICAgICBzZXRTZWFyY2hOb3RGb3VuZChmYWxzZSk7XG4gICAgICAgICAgICBzZXRTZWFyY2hFcnJvcihyZXN1bHRzLm1lc3NhZ2UpO1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRHcm91cEtleSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlc3VsdHMuc3RhdHVzID09PSAnbm90X2ZvdW5kJyB8fFxuICAgICAgICAgICAgKHJlc3VsdHMuc3RhdHVzID09PSAnb2snICYmIHJlc3VsdHMuZXZlbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNldFNlYXJjaFJlc3VsdHMoW10pO1xuICAgICAgICAgICAgc2V0U2VhcmNoUmVzdWx0c1RydW5jYXRlZChmYWxzZSk7XG4gICAgICAgICAgICBzZXRTZWFyY2hOb3RGb3VuZCh0cnVlKTtcbiAgICAgICAgICAgIHNldFNlYXJjaEVycm9yKG51bGwpO1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWRHcm91cEtleSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldFNlYXJjaFJlc3VsdHMocmVzdWx0cy5ldmVudHMpO1xuICAgICAgICAgIHNldFNlYXJjaFJlc3VsdHNUcnVuY2F0ZWQoQm9vbGVhbihyZXN1bHRzLnRydW5jYXRlZCkpO1xuICAgICAgICAgIHNldFNlYXJjaE5vdEZvdW5kKGZhbHNlKTtcbiAgICAgICAgICBzZXRTZWFyY2hFcnJvcihudWxsKTtcbiAgICAgICAgICBzZXRTZWxlY3RlZEdyb3VwS2V5KFxuICAgICAgICAgICAgcGFyc2VkLmtpbmQgPT09ICdldmVudCdcbiAgICAgICAgICAgICAgPyAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3QgPSByZXN1bHRzLmV2ZW50c1swXTtcbiAgICAgICAgICAgICAgICAgIGlmICghZmlyc3QpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXNSdW5MZXZlbChmaXJzdC5ldmVudFR5cGUpXG4gICAgICAgICAgICAgICAgICAgID8gJ19fcnVuX18nXG4gICAgICAgICAgICAgICAgICAgIDogKGZpcnN0LmNvcnJlbGF0aW9uSWQgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICB9KSgpXG4gICAgICAgICAgICAgIDogcGFyc2VkLmlkXG4gICAgICAgICAgKTtcbiAgICAgICAgICB2aXJ0dW9zb1JlZi5jdXJyZW50Py5zY3JvbGxUb0luZGV4KHtcbiAgICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgICAgYWxpZ246ICdzdGFydCcsXG4gICAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCB8fFxuICAgICAgICAgICAgc2VhcmNoUmVxdWVzdFJlZi5jdXJyZW50ICE9PSByZXF1ZXN0SWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0U2VhcmNoUmVzdWx0cyhbXSk7XG4gICAgICAgICAgc2V0U2VhcmNoUmVzdWx0c1RydW5jYXRlZChmYWxzZSk7XG4gICAgICAgICAgc2V0U2VhcmNoTm90Rm91bmQoZmFsc2UpO1xuICAgICAgICAgIHNldFNlYXJjaEVycm9yKCdGYWlsZWQgdG8gc2VhcmNoIGV2ZW50cy4gVHJ5IGFnYWluLicpO1xuICAgICAgICAgIHNldFNlbGVjdGVkR3JvdXBLZXkodW5kZWZpbmVkKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBzZWFyY2hSZXF1ZXN0UmVmLmN1cnJlbnQgPT09IHJlcXVlc3RJZCAmJlxuICAgICAgICAgICAgIWFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgc2V0U2VhcmNoTG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSgpO1xuICAgIH0sIDMwMCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgIH07XG4gIH0sIFtzZWFyY2hRdWVyeSwgb25FeGFjdElkU2VhcmNoXSk7XG5cbiAgY29uc3QgaGFuZGxlU2VhcmNoS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3RLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSAnRW50ZXInKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHJpbW1lZCA9IHNlYXJjaFF1ZXJ5LnRyaW0oKTtcbiAgICAgIGlmIChcbiAgICAgICAgIXRyaW1tZWQgfHxcbiAgICAgICAgcGFyc2VFeGFjdFdvcmtmbG93U2VhcmNoSWQodHJpbW1lZCkgfHxcbiAgICAgICAgIW9uRXhhY3RJZFNlYXJjaCB8fFxuICAgICAgICAhbG9va3NMaWtlV29ya2Zsb3dJZFNlYXJjaElucHV0KHRyaW1tZWQpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2FzdC5pbmZvKCdFbnRlciBhIGZ1bGwgc3RlcCBJRCwgd2FpdCBJRCwgaG9vayBJRCwgb3IgZXZlbnQgSUQnKTtcbiAgICB9LFxuICAgIFtzZWFyY2hRdWVyeSwgb25FeGFjdElkU2VhcmNoLCB0b2FzdF1cbiAgKTtcblxuICAvLyBUcmFjayB3aGV0aGVyIHdlJ3ZlIGV2ZXIgaGFkIGV2ZW50cyB0byBkaXN0aW5ndWlzaCBpbml0aWFsIGxvYWQgZnJvbSByZWZldGNoXG4gIGNvbnN0IGhhc0hhZEV2ZW50c1JlZiA9IHVzZVJlZihmYWxzZSk7XG4gIGlmIChzb3J0ZWRFdmVudHMubGVuZ3RoID4gMCkge1xuICAgIGhhc0hhZEV2ZW50c1JlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgfVxuICBjb25zdCBpc0luaXRpYWxMb2FkID0gaXNMb2FkaW5nICYmICFoYXNIYWRFdmVudHNSZWYuY3VycmVudDtcbiAgY29uc3QgaXNSZWZldGNoaW5nID1cbiAgICBpc0xvYWRpbmcgJiYgaGFzSGFkRXZlbnRzUmVmLmN1cnJlbnQgJiYgc29ydGVkRXZlbnRzLmxlbmd0aCA9PT0gMDtcblxuICBpZiAoaXNJbml0aWFsTG9hZCkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtZnVsbCBmbGV4IGZsZXgtY29sIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICB7LyogU2tlbGV0b24gc2VhcmNoIGJhciAqL31cbiAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiA2IH19PlxuICAgICAgICAgIDxTa2VsZXRvbiBzdHlsZT17eyBoZWlnaHQ6IDQwLCBib3JkZXJSYWRpdXM6IDYgfX0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHsvKiBTa2VsZXRvbiBoZWFkZXIgKi99XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMCBoLTEwIGJvcmRlci1iIGZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgIHN0eWxlPXt7IGJvcmRlckNvbG9yOiAndmFyKC0tZHMtZ3JheS1hbHBoYS0yMDApJyB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LXNocmluay0wXCIgc3R5bGU9e3sgd2lkdGg6IEdVVFRFUl9XSURUSCB9fSAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy01IGZsZXgtc2hyaW5rLTBcIiAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6IDQwIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fT5cbiAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTNcIiBzdHlsZT17eyB3aWR0aDogNzIgfX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19PlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiA0NCB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzMgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6IDkyIH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMyAxIDAlJyB9fT5cbiAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTNcIiBzdHlsZT17eyB3aWR0aDogNjAgfX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxSb3dzU2tlbGV0b24gLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxEZWNyeXB0Q2xpY2tDb250ZXh0LlByb3ZpZGVyXG4gICAgICB2YWx1ZT17XG4gICAgICAgIG9uRGVjcnlwdFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBvbkRlY3J5cHQsXG4gICAgICAgICAgICAgIGlzRGVjcnlwdGluZyxcbiAgICAgICAgICAgICAgaXNEZWNyeXB0RGlzYWJsZWQsXG4gICAgICAgICAgICAgIGRlY3J5cHREaXNhYmxlZFJlYXNvbixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1mdWxsIGZsZXggZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgIDxzdHlsZT57YEBrZXlmcmFtZXMgd29ya2Zsb3ctZG90LXB1bHNlezAle3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5Oi43fTcwJSwxMDAle3RyYW5zZm9ybTpzY2FsZSgyLjIpO29wYWNpdHk6MH19YH08L3N0eWxlPlxuICAgICAgICB7LyogU2VhcmNoIGJhciArIHNvcnQgKi99XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgcGFkZGluZzogNixcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLWJhY2tncm91bmQtMTAwKScsXG4gICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICBnYXA6IDYsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDYsXG4gICAgICAgICAgICAgIGJveFNoYWRvdzogJzAgMCAwIDFweCB2YXIoLS1kcy1ncmF5LWFscGhhLTQwMCknLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndmFyKC0tZHMtYmFja2dyb3VuZC0xMDApJyxcbiAgICAgICAgICAgICAgaGVpZ2h0OiA0MCxcbiAgICAgICAgICAgICAgZmxleDogMSxcbiAgICAgICAgICAgICAgbWluV2lkdGg6IDAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICB3aWR0aDogNDAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA0MCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS04MDApJyxcbiAgICAgICAgICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgd2lkdGg9ezE2fVxuICAgICAgICAgICAgICAgIGhlaWdodD17MTZ9XG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiXG4gICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgZm9jdXNhYmxlPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgICAgICAgY3g9XCI3XCJcbiAgICAgICAgICAgICAgICAgIGN5PVwiN1wiXG4gICAgICAgICAgICAgICAgICByPVwiNC41XCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgZD1cIk0xMS41IDExLjVMMTQgMTRcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggYnkgc3RlcCBJRCwgd2FpdCBJRCwgaG9vayBJRCwgb3IgZXZlbnQgSUTigKZcIlxuICAgICAgICAgICAgICB2YWx1ZT17c2VhcmNoUXVlcnl9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2VhcmNoUXVlcnkoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICBvbktleURvd249e2hhbmRsZVNlYXJjaEtleURvd259XG4gICAgICAgICAgICAgIGRpc2FibGVkPXshb25FeGFjdElkU2VhcmNofVxuICAgICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgICAgb25FeGFjdElkU2VhcmNoXG4gICAgICAgICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgOiAnRXhhY3QgSUQgc2VhcmNoIGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgdmlldy4nXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAtMTYsXG4gICAgICAgICAgICAgICAgcGFkZGluZ0lubGluZTogMTIsXG4gICAgICAgICAgICAgICAgZm9udEZhbWlseTogJ2luaGVyaXQnLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxNCxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICAgICAgICAgIG91dGxpbmU6ICdub25lJyxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogb25FeGFjdElkU2VhcmNoID8gMSA6IDAuNSxcbiAgICAgICAgICAgICAgICBjdXJzb3I6IG9uRXhhY3RJZFNlYXJjaCA/ICd0ZXh0JyA6ICdub3QtYWxsb3dlZCcsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPE1lbnVEcm9wZG93blxuICAgICAgICAgICAgb3B0aW9ucz17U09SVF9PUFRJT05TfVxuICAgICAgICAgICAgdmFsdWU9e2VmZmVjdGl2ZVNvcnRPcmRlcn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVTb3J0T3JkZXJDaGFuZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7KGhhc0VuY3J5cHRlZERhdGEgfHwgZW5jcnlwdGlvbktleSkgJiYgb25EZWNyeXB0ICYmIChcbiAgICAgICAgICAgIDxEZWNyeXB0QnV0dG9uXG4gICAgICAgICAgICAgIGRlY3J5cHRlZD17ISFlbmNyeXB0aW9uS2V5fVxuICAgICAgICAgICAgICBsb2FkaW5nPXtpc0RlY3J5cHRpbmd9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtpc0RlY3J5cHREaXNhYmxlZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWRSZWFzb249e2RlY3J5cHREaXNhYmxlZFJlYXNvbn1cbiAgICAgICAgICAgICAgb25DbGljaz17b25EZWNyeXB0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTAgdGV4dC1sYWJlbC0xMyBmb250LW1lZGl1bSBoLTEwIGJvcmRlci1iIGZsZXgtc2hyaW5rLTBcIlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktYWxwaGEtMjAwKScsXG4gICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTBcIiBzdHlsZT17eyB3aWR0aDogR1VUVEVSX1dJRFRIIH19IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTUgZmxleC1zaHJpbmstMFwiIC8+XG4gICAgICAgICAge3Nob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHMgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fT5cbiAgICAgICAgICAgICAgT2NjdXJyZWRcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fT5cbiAgICAgICAgICAgIENyZWF0ZWRcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19PlxuICAgICAgICAgICAgRXZlbnQgVHlwZVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICBOYW1lXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMyAxIDAlJyB9fT5cbiAgICAgICAgICAgIENvcnJlbGF0aW9uIElEXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMyAxIDAlJyB9fT5cbiAgICAgICAgICAgIEV2ZW50IElEXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBWaXJ0dWFsaXplZCBldmVudCByb3dzIG9yIHJlZmV0Y2hpbmcgc2tlbGV0b24gKi99XG4gICAgICAgIHtpc1JlZmV0Y2hpbmcgfHwgc2VhcmNoTG9hZGluZyA/IChcbiAgICAgICAgICA8Um93c1NrZWxldG9uXG4gICAgICAgICAgICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzPXtcbiAgICAgICAgICAgICAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiBzb3J0ZWRFdmVudHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggZmxleC0xIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC02IHRleHQtY2VudGVyIHRleHQtY29weS0xNFwiXG4gICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7c2VhcmNoTm90Rm91bmQgJiYgc2VhcmNoUXVlcnkudHJpbSgpXG4gICAgICAgICAgICAgID8gYE5vIGV2ZW50cyBmb3VuZCBmb3IgJHtzZWFyY2hRdWVyeS50cmltKCl9YFxuICAgICAgICAgICAgICA6IHNlYXJjaEVycm9yXG4gICAgICAgICAgICAgICAgPyBzZWFyY2hFcnJvclxuICAgICAgICAgICAgICAgIDogcGFyc2VkU2VhcmNoSWQgJiYgc2VhcmNoUXVlcnkudHJpbSgpICYmICFvbkV4YWN0SWRTZWFyY2hcbiAgICAgICAgICAgICAgICAgID8gJ0V4YWN0IElEIHNlYXJjaCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIHZpZXcuJ1xuICAgICAgICAgICAgICAgICAgOiAnTm8gZXZlbnRzIGZvdW5kJ31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8VmlydHVvc29cbiAgICAgICAgICAgIHJlZj17dmlydHVvc29SZWZ9XG4gICAgICAgICAgICB0b3RhbENvdW50PXtzb3J0ZWRFdmVudHMubGVuZ3RofVxuICAgICAgICAgICAgb3ZlcnNjYW49ezIwfVxuICAgICAgICAgICAgZGVmYXVsdEl0ZW1IZWlnaHQ9ezQwfVxuICAgICAgICAgICAgZW5kUmVhY2hlZD17KCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaXNFeGFjdFNlYXJjaEFjdGl2ZSB8fFxuICAgICAgICAgICAgICAgICFoYXNNb3JlRXZlbnRzIHx8XG4gICAgICAgICAgICAgICAgaXNMb2FkaW5nTW9yZUV2ZW50c1xuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdm9pZCBvbkxvYWRNb3JlRXZlbnRzPy4oKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBpdGVtQ29udGVudD17KGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXYgPSBzb3J0ZWRFdmVudHNbaW5kZXhdO1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxFdmVudFJvd1xuICAgICAgICAgICAgICAgICAgZXZlbnQ9e2V2fVxuICAgICAgICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgaXNGaXJzdD17aW5kZXggPT09IDB9XG4gICAgICAgICAgICAgICAgICBpc0xhc3Q9e2luZGV4ID09PSBzb3J0ZWRFdmVudHMubGVuZ3RoIC0gMX1cbiAgICAgICAgICAgICAgICAgIGlzRXhwYW5kZWQ9e2V4cGFuZGVkRXZlbnRJZHMuaGFzKGV2LmV2ZW50SWQpfVxuICAgICAgICAgICAgICAgICAgb25Ub2dnbGVFeHBhbmQ9e3RvZ2dsZUV2ZW50RXhwYW5kZWR9XG4gICAgICAgICAgICAgICAgICBhY3RpdmVHcm91cEtleT17YWN0aXZlR3JvdXBLZXl9XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZEdyb3VwS2V5PXtzZWxlY3RlZEdyb3VwS2V5fVxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRHcm91cFJhbmdlPXtzZWxlY3RlZEdyb3VwUmFuZ2V9XG4gICAgICAgICAgICAgICAgICBjb3JyZWxhdGlvbk5hbWVNYXA9e2NvcnJlbGF0aW9uTmFtZU1hcH1cbiAgICAgICAgICAgICAgICAgIHdvcmtmbG93TmFtZT17d29ya2Zsb3dOYW1lfVxuICAgICAgICAgICAgICAgICAgZHVyYXRpb25NYXA9e2R1cmF0aW9uTWFwfVxuICAgICAgICAgICAgICAgICAgb25TZWxlY3RHcm91cD17b25TZWxlY3RHcm91cH1cbiAgICAgICAgICAgICAgICAgIG9uSG92ZXJHcm91cD17b25Ib3Zlckdyb3VwfVxuICAgICAgICAgICAgICAgICAgb25Mb2FkRXZlbnREYXRhPXtvbkxvYWRFdmVudERhdGF9XG4gICAgICAgICAgICAgICAgICBjYWNoZWRFdmVudERhdGE9e1xuICAgICAgICAgICAgICAgICAgICBldmVudERhdGFDYWNoZVJlZi5jdXJyZW50LmdldChldi5ldmVudElkKSA/PyBudWxsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBvbkNhY2hlRXZlbnREYXRhPXtjYWNoZUV2ZW50RGF0YX1cbiAgICAgICAgICAgICAgICAgIGVuY3J5cHRpb25LZXk9e2VuY3J5cHRpb25LZXl9XG4gICAgICAgICAgICAgICAgICBvbkVuY3J5cHRlZERhdGFEZXRlY3RlZD17aGFuZGxlRW5jcnlwdGVkRGF0YURldGVjdGVkfVxuICAgICAgICAgICAgICAgICAgc3VwcHJlc3NHcm91cERpbW1pbmc9e2lzRXhhY3RTZWFyY2hBY3RpdmV9XG4gICAgICAgICAgICAgICAgICBpc0R1cGxpY2F0ZT17ZHVwbGljYXRlRXZlbnRJZHMuaGFzKGV2LmV2ZW50SWQpfVxuICAgICAgICAgICAgICAgICAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz17XG4gICAgICAgICAgICAgICAgICAgIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHN0eWxlPXt7IGZsZXg6IDEsIG1pbkhlaWdodDogMCB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG5cbiAgICAgICAgey8qIEZpeGVkIGZvb3RlcjogY291bnQgKyBsb2FkIG1vcmUgKi99XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4LXNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGgtMTAgYm9yZGVyLXQgcHgtNCB0ZXh0LWxhYmVsLTEyXCJcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LWFscGhhLTIwMCknLFxuICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTkwMCknLFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtYmFja2dyb3VuZC0xMDApJyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICB7aXNFeGFjdFNlYXJjaEFjdGl2ZVxuICAgICAgICAgICAgICA/IHNlYXJjaEVycm9yXG4gICAgICAgICAgICAgICAgPyBzZWFyY2hFcnJvclxuICAgICAgICAgICAgICAgIDogc2VhcmNoTm90Rm91bmRcbiAgICAgICAgICAgICAgICAgID8gYE5vIGV2ZW50cyBmb3VuZCBmb3IgJHtzZWFyY2hRdWVyeS50cmltKCl9YFxuICAgICAgICAgICAgICAgICAgOiBgJHtzb3J0ZWRFdmVudHMubGVuZ3RofSBldmVudCR7c29ydGVkRXZlbnRzLmxlbmd0aCAhPT0gMSA/ICdzJyA6ICcnfSBmb3IgJHtzZWFyY2hRdWVyeS50cmltKCl9JHtzZWFyY2hSZXN1bHRzVHJ1bmNhdGVkID8gJyAocmVzdWx0cyBtYXkgYmUgdHJ1bmNhdGVkKScgOiAnJ31gXG4gICAgICAgICAgICAgIDogYCR7c29ydGVkRXZlbnRzLmxlbmd0aH0gZXZlbnQke3NvcnRlZEV2ZW50cy5sZW5ndGggIT09IDEgPyAncycgOiAnJ30gbG9hZGVkYH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgeyFpc0V4YWN0U2VhcmNoQWN0aXZlICYmIGhhc01vcmVFdmVudHMgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1hdXRvXCI+XG4gICAgICAgICAgICAgICAgPExvYWRNb3JlQnV0dG9uXG4gICAgICAgICAgICAgICAgICBsb2FkaW5nPXtpc0xvYWRpbmdNb3JlRXZlbnRzfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdm9pZCBvbkxvYWRNb3JlRXZlbnRzPy4oKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9EZWNyeXB0Q2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRMaXN0Vmlldyhwcm9wczogRXZlbnRzTGlzdFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPENvbnRleHRDYXJkUHJvdmlkZXI+XG4gICAgICA8RXZlbnRMaXN0Vmlld0lubmVyIHsuLi5wcm9wc30gLz5cbiAgICA8L0NvbnRleHRDYXJkUHJvdmlkZXI+XG4gICk7XG59XG4iXX0=
989
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbGlzdC12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvZXZlbnQtbGlzdC12aWV3LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQU16RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUF1QixNQUFNLGdCQUFnQixDQUFDO0FBQy9ELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIscUJBQXFCLEdBQ3RCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUdMLDhCQUE4QixFQUM5QiwwQkFBMEIsR0FDM0IsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsa0JB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Q0FDbEIsQ0FBQyxDQUFDLFdBQVc7b0NBQ1gsQ0FBQyxDQUFDLFdBQVc7b0NBQ2IsQ0FBQyxDQUFDLGNBQWM7d0NBQ2QsQ0FBQyxDQUFDLHVCQUF1QixXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUU7d0NBQzdDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLFNBQVMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQ0FDbkssQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sU0FBUyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsR0FDM0UsRUFDTixDQUFDLG1CQUFtQixJQUFJLGFBQWEsSUFBSSxDQUN4QyxjQUFLLFNBQVMsRUFBQyx1RUFBdUUsWUFDcEYsY0FBSyxTQUFTLEVBQUMscUJBQXFCLFlBQ2xDLEtBQUMsY0FBYyxJQUNiLE9BQU8sRUFBRSxtQkFBbUIsRUFDNUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssZ0JBQWdCLEVBQUUsRUFBRSxHQUN4QyxHQUNFLEdBQ0YsQ0FDUCxJQUNHLElBQ0YsR0FDdUIsQ0FDaEMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQXNCO0lBQ2xELE9BQU8sQ0FDTCxLQUFDLG1CQUFtQixjQUNsQixLQUFDLGtCQUFrQixPQUFLLEtBQUssR0FBSSxHQUNiLENBQ3ZCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBwYXJzZVN0ZXBOYW1lLCBwYXJzZVdvcmtmbG93TmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB0eXBlIHsgRXZlbnQsIFdvcmtmbG93UnVuIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IENoZWNrLCBDaGV2cm9uUmlnaHQsIENvcHkgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHR5cGUge1xuICBLZXlib2FyZEV2ZW50IGFzIFJlYWN0S2V5Ym9hcmRFdmVudCxcbiAgTW91c2VFdmVudCBhcyBSZWFjdE1vdXNlRXZlbnQsXG4gIFJlYWN0Tm9kZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFZpcnR1b3NvLCB0eXBlIFZpcnR1b3NvSGFuZGxlIH0gZnJvbSAncmVhY3QtdmlydHVvc28nO1xuaW1wb3J0IHtcbiAgRFVQTElDQVRFX0VWRU5UX01FU1NBR0UsXG4gIGZpbmREdXBsaWNhdGVFdmVudElkcyxcbn0gZnJvbSAnLi4vbGliL2R1cGxpY2F0ZS1ldmVudHMnO1xuaW1wb3J0IHtcbiAgdHlwZSBFeGFjdElkU2VhcmNoUmVzdWx0LFxuICB0eXBlIEV4YWN0V29ya2Zsb3dTZWFyY2hJZEtpbmQsXG4gIGxvb2tzTGlrZVdvcmtmbG93SWRTZWFyY2hJbnB1dCxcbiAgcGFyc2VFeGFjdFdvcmtmbG93U2VhcmNoSWQsXG59IGZyb20gJy4uL2xpYi9leGFjdC1ldmVudC1zZWFyY2gtaWQnO1xuaW1wb3J0IHsgaXNFbmNyeXB0ZWRNYXJrZXIgfSBmcm9tICcuLi9saWIvaHlkcmF0aW9uJztcbmltcG9ydCB7IGlzU2VhbGVkTm9vcEV2ZW50LCBTRUFMRURfRVZFTlRfTUVTU0FHRSB9IGZyb20gJy4uL2xpYi9zZWFsZWQtZXZlbnRzJztcbmltcG9ydCB7IHVzZVRvYXN0IH0gZnJvbSAnLi4vbGliL3RvYXN0JztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uIH0gZnJvbSAnLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IEF0dHJTZXRFdmVudEJsb2NrIH0gZnJvbSAnLi9zaWRlYmFyL2F0dHJpYnV0ZXMtYmxvY2snO1xuaW1wb3J0IHsgQ29udGV4dENhcmRQcm92aWRlciB9IGZyb20gJy4vdWkvY29udGV4dC1jYXJkJztcbmltcG9ydCB7IERhdGFJbnNwZWN0b3IsIERlY3J5cHRDbGlja0NvbnRleHQgfSBmcm9tICcuL3VpL2RhdGEtaW5zcGVjdG9yJztcbmltcG9ydCB7IERlY3J5cHRCdXR0b24gfSBmcm9tICcuL3VpL2RlY3J5cHQtYnV0dG9uJztcbmltcG9ydCB7IEV2ZW50Tm90aWNlVG9vbHRpcCB9IGZyb20gJy4vdWkvZHVwbGljYXRlLWV2ZW50LXRvb2x0aXAnO1xuaW1wb3J0IHtcbiAgRXJyb3JTdGFja0Jsb2NrLFxuICBpc1N0cnVjdHVyZWRFcnJvcixcbiAgdHlwZSBTdHJ1Y3R1cmVkRXJyb3JSZWNvcmQsXG59IGZyb20gJy4vdWkvZXJyb3Itc3RhY2stYmxvY2snO1xuaW1wb3J0IHsgTG9hZE1vcmVCdXR0b24gfSBmcm9tICcuL3VpL2xvYWQtbW9yZS1idXR0b24nO1xuaW1wb3J0IHsgTWVudURyb3Bkb3duIH0gZnJvbSAnLi91aS9tZW51LWRyb3Bkb3duJztcbmltcG9ydCB7IFNrZWxldG9uIH0gZnJvbSAnLi91aS9za2VsZXRvbic7XG5pbXBvcnQgeyBUaW1lc3RhbXBUb29sdGlwIH0gZnJvbSAnLi91aS90aW1lc3RhbXAtdG9vbHRpcCc7XG5cbi8qKlxuICogRXZlbnQgdHlwZXMgd2hvc2UgZXZlbnREYXRhIGNvbnRhaW5zIGFuIGVycm9yIGZpZWxkIHdpdGggYSBTdHJ1Y3R1cmVkRXJyb3IuXG4gKi9cbmNvbnN0IEVSUk9SX0VWRU5UX1RZUEVTID0gbmV3IFNldChbXG4gICdzdGVwX2ZhaWxlZCcsXG4gICdzdGVwX3JldHJ5aW5nJyxcbiAgJ3J1bl9mYWlsZWQnLFxuICAnd29ya2Zsb3dfZmFpbGVkJyxcbl0pO1xuXG5jb25zdCBCVVRUT05fUkVTRVRfU1RZTEU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIGFwcGVhcmFuY2U6ICdub25lJyxcbiAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICBib3JkZXI6ICdub25lJyxcbiAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50Jyxcbn07XG5jb25zdCBET1RfUFVMU0VfQU5JTUFUSU9OID1cbiAgJ3dvcmtmbG93LWRvdC1wdWxzZSAxLjI1cyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSBpbmZpbml0ZSc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gSGVscGVyc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmZ1bmN0aW9uIGZvcm1hdEV2ZW50VGltZShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgcmV0dXJuIChcbiAgICBkYXRlLnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgIHNlY29uZDogJzItZGlnaXQnLFxuICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICB9KSArXG4gICAgJy4nICtcbiAgICBkYXRlLmdldE1pbGxpc2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMywgJzAnKVxuICApO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV2ZW50RGF0ZSh2YWx1ZTogdW5rbm93bik6IERhdGUgfCBudWxsIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGRhdGUgPSB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyB2YWx1ZSA6IG5ldyBEYXRlKFN0cmluZyh2YWx1ZSkpO1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSA/IG51bGwgOiBkYXRlO1xufVxuXG5mdW5jdGlvbiBnZXRFZmZlY3RpdmVFdmVudERhdGUoXG4gIGV2ZW50OiBQaWNrPEV2ZW50LCAnY3JlYXRlZEF0JyB8ICdvY2N1cnJlZEF0Jz5cbik6IERhdGUge1xuICByZXR1cm4gcGFyc2VFdmVudERhdGUoZXZlbnQub2NjdXJyZWRBdCkgPz8gbmV3IERhdGUoZXZlbnQuY3JlYXRlZEF0KTtcbn1cblxuZnVuY3Rpb24gZ2V0RWZmZWN0aXZlRXZlbnRUaW1lKFxuICBldmVudDogUGljazxFdmVudCwgJ2NyZWF0ZWRBdCcgfCAnb2NjdXJyZWRBdCc+XG4pOiBudW1iZXIge1xuICByZXR1cm4gZ2V0RWZmZWN0aXZlRXZlbnREYXRlKGV2ZW50KS5nZXRUaW1lKCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEV2ZW50VHlwZShldmVudFR5cGU6IEV2ZW50WydldmVudFR5cGUnXSk6IHN0cmluZyB7XG4gIHJldHVybiBldmVudFR5cGVcbiAgICAuc3BsaXQoJ18nKVxuICAgIC5tYXAoKHdvcmQ6IHN0cmluZykgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkpXG4gICAgLmpvaW4oJyAnKTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBFdmVudCB0eXBlIOKGkiBzdGF0dXMgY29sb3IgKHNtYWxsIGRvdCBvbmx5KVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBSZXR1cm5zIGEgQ1NTIGNvbG9yIHVzaW5nIEdlaXN0IGRlc2lnbiB0b2tlbnMgZm9yIHRoZSBzdGF0dXMgZG90LiAqL1xuZnVuY3Rpb24gZ2V0U3RhdHVzRG90Q29sb3IoZXZlbnRUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBGYWlsZWQg4oaSIHJlZFxuICBpZiAoXG4gICAgZXZlbnRUeXBlID09PSAnc3RlcF9mYWlsZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAncnVuX2ZhaWxlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICd3b3JrZmxvd19mYWlsZWQnXG4gICkge1xuICAgIHJldHVybiAndmFyKC0tZHMtcmVkLTcwMCknO1xuICB9XG4gIC8vIENhbmNlbGxlZCDihpIgYW1iZXJcbiAgaWYgKGV2ZW50VHlwZSA9PT0gJ3J1bl9jYW5jZWxsZWQnKSB7XG4gICAgcmV0dXJuICd2YXIoLS1kcy1hbWJlci03MDApJztcbiAgfVxuICAvLyBSZXRyeWluZyDihpIgYW1iZXJcbiAgaWYgKGV2ZW50VHlwZSA9PT0gJ3N0ZXBfcmV0cnlpbmcnKSB7XG4gICAgcmV0dXJuICd2YXIoLS1kcy1hbWJlci03MDApJztcbiAgfVxuICAvLyBBdHRyaWJ1dGUgY2hhbmdlcyDihpIgdGVhbFxuICBpZiAoZXZlbnRUeXBlID09PSAnYXR0cl9zZXQnKSB7XG4gICAgcmV0dXJuICd2YXIoLS1kcy10ZWFsLTkwMCknO1xuICB9XG4gIC8vIENvbXBsZXRlZC9zdWNjZWVkZWQg4oaSIGdyZWVuXG4gIGlmIChcbiAgICBldmVudFR5cGUgPT09ICdzdGVwX2NvbXBsZXRlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICdydW5fY29tcGxldGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3dvcmtmbG93X2NvbXBsZXRlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICdob29rX2Rpc3Bvc2VkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJ1xuICApIHtcbiAgICByZXR1cm4gJ3ZhcigtLWRzLWdyZWVuLTcwMCknO1xuICB9XG4gIC8vIFN0YXJ0ZWQvcnVubmluZyDihpIgYmx1ZVxuICBpZiAoXG4gICAgZXZlbnRUeXBlID09PSAnc3RlcF9zdGFydGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3J1bl9zdGFydGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3dvcmtmbG93X3N0YXJ0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnaG9va19yZWNlaXZlZCdcbiAgKSB7XG4gICAgcmV0dXJuICd2YXIoLS1kcy1ibHVlLTcwMCknO1xuICB9XG4gIC8vIFNlYWxlZCBwb3NpdGlvbnMg4oaSIGRpbSBncmF5LCBvbmUgc3RlcCBxdWlldGVyIHRoYW4gcGVuZGluZzogdGhlIHJvdyBpc1xuICAvLyBsb2cgZmlsbGVyIHRoZSBydW4gbmV2ZXIgb2JzZXJ2ZWQuXG4gIGlmIChldmVudFR5cGUgPT09ICdub29wJykge1xuICAgIHJldHVybiAndmFyKC0tZHMtZ3JheS01MDApJztcbiAgfVxuICAvLyBDcmVhdGVkL3BlbmRpbmcg4oaSIGdyYXlcbiAgcmV0dXJuICd2YXIoLS1kcy1ncmF5LTYwMCknO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgbWFwIGZyb20gY29ycmVsYXRpb25JZCAoc3RlcElkKSDihpIgZGlzcGxheSBuYW1lIHVzaW5nIHN0ZXBfY3JlYXRlZFxuICogZXZlbnRzLCBhbmQgcGFyc2UgdGhlIHdvcmtmbG93IG5hbWUgZnJvbSB0aGUgcnVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGROYW1lTWFwcyhcbiAgZXZlbnRzOiBFdmVudFtdIHwgbnVsbCxcbiAgcnVuOiBXb3JrZmxvd1J1biB8IG51bGxcbik6IHtcbiAgY29ycmVsYXRpb25OYW1lTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICB3b3JrZmxvd05hbWU6IHN0cmluZyB8IG51bGw7XG59IHtcbiAgY29uc3QgY29ycmVsYXRpb25OYW1lTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICAvLyBNYXAgc3RlcCBjb3JyZWxhdGlvbklkICg9IHN0ZXBJZCkg4oaSIHBhcnNlZCBzdGVwIG5hbWUgZnJvbSBzdGVwX2NyZWF0ZWQgZXZlbnRzXG4gIGlmIChldmVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50cykge1xuICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfY3JlYXRlZCcgJiYgZXZlbnQuY29ycmVsYXRpb25JZCkge1xuICAgICAgICBjb25zdCBzdGVwTmFtZSA9IGV2ZW50LmV2ZW50RGF0YT8uc3RlcE5hbWUgPz8gJyc7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9XG4gICAgICAgICAgcGFyc2VTdGVwTmFtZShTdHJpbmcoc3RlcE5hbWUpKSA/P1xuICAgICAgICAgIHBhcnNlV29ya2Zsb3dOYW1lKFN0cmluZyhzdGVwTmFtZSkpO1xuICAgICAgICBjb3JyZWxhdGlvbk5hbWVNYXAuc2V0KFxuICAgICAgICAgIGV2ZW50LmNvcnJlbGF0aW9uSWQsXG4gICAgICAgICAgcGFyc2VkPy5zaG9ydE5hbWUgPz8gc3RlcE5hbWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQYXJzZSB3b3JrZmxvdyBuYW1lIGZyb20gcnVuXG4gIGNvbnN0IHdvcmtmbG93TmFtZSA9IHJ1bj8ud29ya2Zsb3dOYW1lXG4gICAgPyAocGFyc2VXb3JrZmxvd05hbWUocnVuLndvcmtmbG93TmFtZSk/LnNob3J0TmFtZSA/PyBydW4ud29ya2Zsb3dOYW1lKVxuICAgIDogbnVsbDtcblxuICByZXR1cm4geyBjb3JyZWxhdGlvbk5hbWVNYXAsIHdvcmtmbG93TmFtZSB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER1cmF0aW9uSW5mbyB7XG4gIC8qKiBUaW1lIGZyb20gY3JlYXRlZCDihpIgc3RhcnRlZCAobXMpICovXG4gIHF1ZXVlZD86IG51bWJlcjtcbiAgLyoqIFRpbWUgZnJvbSBzdGFydGVkIOKGkiBjb21wbGV0ZWQvZmFpbGVkL2NhbmNlbGxlZCAobXMpICovXG4gIHJhbj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIG1hcCBmcm9tIGNvcnJlbGF0aW9uSWQg4oaSIGR1cmF0aW9uIGluZm8gYnkgZGlmZmluZ1xuICogY3JlYXRlZCDihpQgc3RhcnRlZCAocXVldWVkKSBhbmQgc3RhcnRlZCDihpQgY29tcGxldGVkL2ZhaWxlZC9jYW5jZWxsZWQgKHJhbikuXG4gKiBBbHNvIGNvbXB1dGVzIHJ1bi1sZXZlbCBkdXJhdGlvbnMgdW5kZXIgdGhlIGtleSAnX19ydW5fXycuXG4gKlxuICogRXZlbnRzIGV2ZXJ5IHJlcGxheSByZWFkcyBwYXN0IGFzIHJlcGVhdHMgYXJlIGV4Y2x1ZGVkOiBhIHNlY29uZFxuICogYHN0ZXBfY29tcGxldGVkYCB3cml0dGVuIGJ5IGEgY29uY3VycmVudCByZXBsYXkgd291bGQgb3RoZXJ3aXNlIHN0cmV0Y2ggdGhlXG4gKiBzdGVwJ3MgbWVhc3VyZWQgcnVudGltZSB0byB3aGVuZXZlciB0aGF0IHJlcGxheSBoYXBwZW5lZCB0byBjb21taXQuIFRoZVxuICogY2FsbGVyIHN1cHBsaWVzIHRoZW0sIGJlY2F1c2Ugd2hldGhlciBhbiBldmVudCBpcyBhIHJlcGVhdCBpcyBhIHByb3BlcnR5IG9mXG4gKiB0aGUgd2hvbGUgbG9nIGFuZCB0aGlzIGZ1bmN0aW9uIG1heSBiZSBoYW5kZWQgYSBwYWdlIG9mIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGREdXJhdGlvbk1hcChcbiAgZXZlbnRzOiBFdmVudFtdLFxuICBkdXBsaWNhdGVFdmVudElkczogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKVxuKTogTWFwPHN0cmluZywgRHVyYXRpb25JbmZvPiB7XG4gIC8vIFByb2Nlc3MgZXZlbnRzIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIgc28gdGhlIHJlc3VsdCBkb2Vzbid0IGRlcGVuZCBvblxuICAvLyB0aGUgY2FsbGVyJ3Mgc29ydCBkaXJlY3Rpb24uIFJldHJpZWQgc3RlcHMgZW1pdCBtdWx0aXBsZSBgc3RlcF9zdGFydGVkYFxuICAvLyBldmVudHMgZm9yIHRoZSBzYW1lIGNvcnJlbGF0aW9uSWQ7IHRoZSBxdWV1ZWQgZHVyYXRpb24gbXVzdCBiZSBtZWFzdXJlZFxuICAvLyBhZ2FpbnN0IHRoZSBmaXJzdCBvbmUsIG5vdCB0aGUgbGFzdC5cbiAgY29uc3QgY2hyb25vbG9naWNhbCA9IFsuLi5ldmVudHNdXG4gICAgLmZpbHRlcigoZXZlbnQpID0+ICFkdXBsaWNhdGVFdmVudElkcy5oYXMoZXZlbnQuZXZlbnRJZCkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGdldEVmZmVjdGl2ZUV2ZW50VGltZShhKSAtIGdldEVmZmVjdGl2ZUV2ZW50VGltZShiKSk7XG5cbiAgY29uc3QgY3JlYXRlZFRpbWVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgY29uc3QgZmlyc3RTdGFydGVkVGltZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBjb25zdCBzdGFydGVkVGltZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBjb25zdCBkdXJhdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgRHVyYXRpb25JbmZvPigpO1xuXG4gIGZvciAoY29uc3QgZXZlbnQgb2YgY2hyb25vbG9naWNhbCkge1xuICAgIGNvbnN0IHRzID0gZ2V0RWZmZWN0aXZlRXZlbnRUaW1lKGV2ZW50KTtcbiAgICBjb25zdCBrZXkgPSBldmVudC5jb3JyZWxhdGlvbklkID8/ICdfX3J1bl9fJztcbiAgICBjb25zdCB0eXBlOiBzdHJpbmcgPSBldmVudC5ldmVudFR5cGU7XG5cbiAgICAvLyBUcmFjayBjcmVhdGVkIHRpbWVzIChmaXJzdCBldmVudCBmb3IgZWFjaCBjb3JyZWxhdGlvbilcbiAgICBpZiAodHlwZSA9PT0gJ3N0ZXBfY3JlYXRlZCcgfHwgdHlwZSA9PT0gJ3J1bl9jcmVhdGVkJykge1xuICAgICAgaWYgKCFjcmVhdGVkVGltZXMuaGFzKGtleSkpIHtcbiAgICAgICAgY3JlYXRlZFRpbWVzLnNldChrZXksIHRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUcmFjayBzdGFydGVkIHRpbWVzICYgY29tcHV0ZSBxdWV1ZWQgZHVyYXRpb25cbiAgICBpZiAoXG4gICAgICB0eXBlID09PSAnc3RlcF9zdGFydGVkJyB8fFxuICAgICAgdHlwZSA9PT0gJ3J1bl9zdGFydGVkJyB8fFxuICAgICAgdHlwZSA9PT0gJ3dvcmtmbG93X3N0YXJ0ZWQnXG4gICAgKSB7XG4gICAgICBzdGFydGVkVGltZXMuc2V0KGtleSwgdHMpO1xuICAgICAgLy8gVGhlIHF1ZXVlZCBkdXJhdGlvbiBpcyBhbmNob3JlZCBvbiB0aGUgZmlyc3Qgc3RhcnQgZXZlbnQgb25seSwgc2luY2VcbiAgICAgIC8vIHN1YnNlcXVlbnQgc3RlcF9zdGFydGVkIGV2ZW50cyBjb21lIGZyb20gcmV0cmllcy5cbiAgICAgIGlmICghZmlyc3RTdGFydGVkVGltZXMuaGFzKGtleSkpIHtcbiAgICAgICAgZmlyc3RTdGFydGVkVGltZXMuc2V0KGtleSwgdHMpO1xuICAgICAgICAvLyBJZiBubyBleHBsaWNpdCBjcmVhdGVkIGV2ZW50IHdhcyBzZWVuLCB1c2UgdGhlIHN0YXJ0ZWQgdGltZSBhcyBjcmVhdGVkXG4gICAgICAgIGlmICghY3JlYXRlZFRpbWVzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgY3JlYXRlZFRpbWVzLnNldChrZXksIHRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjcmVhdGVkQXQgPSBjcmVhdGVkVGltZXMuZ2V0KGtleSk7XG4gICAgICAgIGNvbnN0IGluZm8gPSBkdXJhdGlvbnMuZ2V0KGtleSkgPz8ge307XG4gICAgICAgIGlmIChjcmVhdGVkQXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGluZm8ucXVldWVkID0gdHMgLSBjcmVhdGVkQXQ7XG4gICAgICAgIH1cbiAgICAgICAgZHVyYXRpb25zLnNldChrZXksIGluZm8pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbXB1dGUgcmFuIGR1cmF0aW9uIG9uIHRlcm1pbmFsIGV2ZW50c1xuICAgIGlmIChcbiAgICAgIHR5cGUgPT09ICdzdGVwX2NvbXBsZXRlZCcgfHxcbiAgICAgIHR5cGUgPT09ICdzdGVwX2ZhaWxlZCcgfHxcbiAgICAgIHR5cGUgPT09ICdydW5fY29tcGxldGVkJyB8fFxuICAgICAgdHlwZSA9PT0gJ3J1bl9mYWlsZWQnIHx8XG4gICAgICB0eXBlID09PSAncnVuX2NhbmNlbGxlZCcgfHxcbiAgICAgIHR5cGUgPT09ICd3b3JrZmxvd19jb21wbGV0ZWQnIHx8XG4gICAgICB0eXBlID09PSAnd29ya2Zsb3dfZmFpbGVkJyB8fFxuICAgICAgdHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJyB8fFxuICAgICAgdHlwZSA9PT0gJ2hvb2tfZGlzcG9zZWQnXG4gICAgKSB7XG4gICAgICBjb25zdCBzdGFydGVkQXQgPSBzdGFydGVkVGltZXMuZ2V0KGtleSk7XG4gICAgICBjb25zdCBpbmZvID0gZHVyYXRpb25zLmdldChrZXkpID8/IHt9O1xuICAgICAgaWYgKHN0YXJ0ZWRBdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluZm8ucmFuID0gdHMgLSBzdGFydGVkQXQ7XG4gICAgICB9XG4gICAgICBkdXJhdGlvbnMuc2V0KGtleSwgaW5mbyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGR1cmF0aW9ucztcbn1cblxuLyoqIENoZWNrIGlmIGEgbG9hZGVkIGV2ZW50RGF0YSBvYmplY3QgY29udGFpbnMgYW55IGVuY3J5cHRlZCBtYXJrZXIgdmFsdWVzLiAqL1xuZnVuY3Rpb24gaGFzRW5jcnlwdGVkVmFsdWVzKGRhdGE6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBmb3IgKGNvbnN0IHZhbCBvZiBPYmplY3QudmFsdWVzKGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgaWYgKGlzRW5jcnlwdGVkTWFya2VyKHZhbCkpIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNSdW5MZXZlbChldmVudFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGV2ZW50VHlwZSA9PT0gJ3J1bl9jcmVhdGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3J1bl9zdGFydGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3J1bl9jb21wbGV0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAncnVuX2ZhaWxlZCcgfHxcbiAgICBldmVudFR5cGUgPT09ICdydW5fY2FuY2VsbGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3dvcmtmbG93X3N0YXJ0ZWQnIHx8XG4gICAgZXZlbnRUeXBlID09PSAnd29ya2Zsb3dfY29tcGxldGVkJyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ3dvcmtmbG93X2ZhaWxlZCcgfHxcbiAgICAvLyBhdHRyX3NldCBhbmQgbm9vcCBjYXJyeSBhIGRlZHVwL3Bvc2l0aW9uYWwgY29ycmVsYXRpb25JZCByYXRoZXIgdGhhbiBhXG4gICAgLy8gY2hpbGQgZW50aXR5IElELCBzbyB0aGV5IGdyb3VwIGFuZCBsYWJlbCB3aXRoIHRoZSBydW4gaXRzZWxmLlxuICAgIGV2ZW50VHlwZSA9PT0gJ2F0dHJfc2V0JyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gJ25vb3AnXG4gICk7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gVHJlZSBndXR0ZXI6IGZpeGVkLXdpZHRoLCBzaG93cyBicmFuY2ggbGluZXMgb25seSBmb3IgdGhlIHNlbGVjdGVkIGdyb3VwXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIEZpeGVkIGd1dHRlciB3aWR0aDogMjBweCByb290IGFyZWEgKyAxNnB4IGZvciBvbmUgYnJhbmNoIGxhbmUgKi9cbmNvbnN0IEdVVFRFUl9XSURUSCA9IDM2O1xuLyoqIFggcG9zaXRpb24gb2YgdGhlIHNpbmdsZSBicmFuY2ggbGFuZSBsaW5lICovXG5jb25zdCBMQU5FX1ggPSAyMDtcbmNvbnN0IFJPT1RfTElORV9DT0xPUiA9ICd2YXIoLS1kcy1ncmF5LTUwMCknO1xuXG5mdW5jdGlvbiBUcmVlR3V0dGVyKHtcbiAgaXNGaXJzdCxcbiAgaXNMYXN0LFxuICBpc1J1bkxldmVsOiBpc1J1bixcbiAgc3RhdHVzRG90Q29sb3IsXG4gIHB1bHNlID0gZmFsc2UsXG4gIGhhc1NlbGVjdGlvbixcbiAgc2hvd0JyYW5jaCxcbiAgc2hvd0xhbmVMaW5lLFxuICBpc0xhbmVTdGFydCxcbiAgaXNMYW5lRW5kLFxuICBjb250aW51YXRpb25Pbmx5ID0gZmFsc2UsXG59OiB7XG4gIGlzRmlyc3Q6IGJvb2xlYW47XG4gIGlzTGFzdDogYm9vbGVhbjtcbiAgaXNSdW5MZXZlbDogYm9vbGVhbjtcbiAgc3RhdHVzRG90Q29sb3I/OiBzdHJpbmc7XG4gIHB1bHNlPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgYW55IGdyb3VwIGlzIGN1cnJlbnRseSBhY3RpdmUgKHNlbGVjdGVkIG9yIGhvdmVyZWQpICovXG4gIGhhc1NlbGVjdGlvbjogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyBhIGhvcml6b250YWwgYnJhbmNoIGxpbmUgZm9yIHRoaXMgcm93IChldmVudCBiZWxvbmdzIHRvIGFjdGl2ZSBncm91cCkgKi9cbiAgc2hvd0JyYW5jaDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIHZlcnRpY2FsIGxhbmUgbGluZSBwYXNzZXMgdGhyb3VnaCB0aGlzIHJvdyAqL1xuICBzaG93TGFuZUxpbmU6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSB2ZXJ0aWNhbCBsYW5lIGxpbmUgc3RhcnRzIGF0IHRoaXMgcm93ICh0b3AgY2xpcHBlZCB0byA1MCUpICovXG4gIGlzTGFuZVN0YXJ0OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgdmVydGljYWwgbGFuZSBsaW5lIGVuZHMgYXQgdGhpcyByb3cgKGJvdHRvbSBjbGlwcGVkIHRvIDUwJSkgKi9cbiAgaXNMYW5lRW5kOiBib29sZWFuO1xuICBjb250aW51YXRpb25Pbmx5PzogYm9vbGVhbjtcbn0pIHtcbiAgY29uc3QgZG90U2l6ZSA9IGlzUnVuID8gOCA6IDY7XG4gIGNvbnN0IGRvdExlZnQgPSBpc1J1biA/IDUgOiA2O1xuICBjb25zdCBkb3RPcGFjaXR5ID0gaGFzU2VsZWN0aW9uICYmICFzaG93QnJhbmNoICYmICFpc1J1biA/IDAuMyA6IDE7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4LXNocmluay0wIHNlbGYtc3RyZXRjaFwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICB3aWR0aDogR1VUVEVSX1dJRFRILFxuICAgICAgICBtaW5IZWlnaHQ6IGNvbnRpbnVhdGlvbk9ubHkgPyAwIDogdW5kZWZpbmVkLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7LyogUm9vdCB2ZXJ0aWNhbCBsaW5lIChsZWZ0bW9zdCwgYWx3YXlzIHZpc2libGUpICovfVxuICAgICAgPGRpdlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgIGxlZnQ6IDgsXG4gICAgICAgICAgdG9wOiBjb250aW51YXRpb25Pbmx5ID8gMCA6IGlzRmlyc3QgPyAnNTAlJyA6IDAsXG4gICAgICAgICAgYm90dG9tOiBjb250aW51YXRpb25Pbmx5ID8gMCA6IGlzTGFzdCA/ICc1MCUnIDogMCxcbiAgICAgICAgICB3aWR0aDogMixcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFJPT1RfTElORV9DT0xPUixcbiAgICAgICAgICB6SW5kZXg6IDAsXG4gICAgICAgIH19XG4gICAgICAvPlxuXG4gICAgICB7IWNvbnRpbnVhdGlvbk9ubHkgJiYgKFxuICAgICAgICA8PlxuICAgICAgICAgIHsvKiBTdGF0dXMgZG90IG9uIHRoZSByb290IGxpbmUgZm9yIGV2ZXJ5IGV2ZW50ICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICBsZWZ0OiBkb3RMZWZ0LFxuICAgICAgICAgICAgICB0b3A6ICc1MCUnLFxuICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpJyxcbiAgICAgICAgICAgICAgd2lkdGg6IGRvdFNpemUsXG4gICAgICAgICAgICAgIGhlaWdodDogZG90U2l6ZSxcbiAgICAgICAgICAgICAgekluZGV4OiAyLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LyogT3BhcXVlIGJhY2tkcm9wIGVuc3VyZXMgZ3V0dGVyIGxpbmVzIG5ldmVyIHZpc3VhbGx5IGN1dCB0aHJvdWdoIGRvdHMgKi99XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgaW5zZXQ6IDAsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgICAgICAgIHpJbmRleDogMCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7cHVsc2UgJiYgKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgaW5zZXQ6IDAsXG4gICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBzdGF0dXNEb3RDb2xvcixcbiAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNzUgKiBkb3RPcGFjaXR5LFxuICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBET1RfUFVMU0VfQU5JTUFUSU9OLFxuICAgICAgICAgICAgICAgICAgekluZGV4OiAxLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHN0YXR1c0RvdENvbG9yLFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IGRvdE9wYWNpdHksXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMTUwbXMnLFxuICAgICAgICAgICAgICAgIHpJbmRleDogMixcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogSG9yaXpvbnRhbCBicmFuY2ggZnJvbSByb290IHRvIGd1dHRlciBlZGdlIChzZWxlY3RlZCBncm91cCBldmVudHMgb25seSkgKi99XG4gICAgICAgICAge3Nob3dCcmFuY2ggJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgIGxlZnQ6IDksXG4gICAgICAgICAgICAgICAgdG9wOiAnNTAlJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogR1VUVEVSX1dJRFRIIC0gOSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDIsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBST09UX0xJTkVfQ09MT1IsXG4gICAgICAgICAgICAgICAgekluZGV4OiAwLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICAgICl9XG5cbiAgICAgIHsvKiBWZXJ0aWNhbCBsYW5lIGxpbmUgY29ubmVjdGluZyB0aGUgc2VsZWN0ZWQgZ3JvdXAncyBldmVudHMgKi99XG4gICAgICB7c2hvd0xhbmVMaW5lICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IExBTkVfWCxcbiAgICAgICAgICAgIHRvcDogY29udGludWF0aW9uT25seSA/IDAgOiBpc0xhbmVTdGFydCA/ICc1MCUnIDogMCxcbiAgICAgICAgICAgIGJvdHRvbTogY29udGludWF0aW9uT25seSA/IDAgOiBpc0xhbmVFbmQgPyAnNTAlJyA6IDAsXG4gICAgICAgICAgICB3aWR0aDogMixcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogUk9PVF9MSU5FX0NPTE9SLFxuICAgICAgICAgICAgekluZGV4OiAwLFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIENvcHlhYmxlIGNlbGw6IHNob3dzIGEgY29weSBidXR0b24gb24gaG92ZXJcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiBDb3B5YWJsZUNlbGwoe1xuICB2YWx1ZSxcbiAgY2xhc3NOYW1lLFxuICBzdHlsZTogc3R5bGVQcm9wLFxufToge1xuICB2YWx1ZTogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbn0pOiBSZWFjdE5vZGUge1xuICBjb25zdCBbY29waWVkLCBzZXRDb3BpZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByZXNldENvcGllZFRpbWVvdXRSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQocmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVDb3B5ID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0TW91c2VFdmVudCkgPT4ge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHZhbHVlKS50aGVuKCgpID0+IHtcbiAgICAgICAgc2V0Q29waWVkKHRydWUpO1xuICAgICAgICBpZiAocmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBzZXRDb3BpZWQoZmFsc2UpO1xuICAgICAgICAgIHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgfSwgMTUwMCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFt2YWx1ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17YGdyb3VwL2NvcHkgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgbWluLXctMCBweC00ICR7Y2xhc3NOYW1lID8/ICcnfWB9XG4gICAgICBzdHlsZT17c3R5bGVQcm9wfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwXCI+XG4gICAgICAgIHt2YWx1ZSB8fCAnLSd9XG4gICAgICA8L3NwYW4+XG4gICAgICB7dmFsdWUgPyAoXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb3B5fVxuICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTAgb3BhY2l0eS0wIGdyb3VwLWhvdmVyL2NvcHk6b3BhY2l0eS0xMDAgdHJhbnNpdGlvbi1vcGFjaXR5IHAtMC41IHJvdW5kZWQgaG92ZXI6YmctW3ZhcigtLWRzLWdyYXktYWxwaGEtMjAwKV1cIlxuICAgICAgICAgIHN0eWxlPXtCVVRUT05fUkVTRVRfU1RZTEV9XG4gICAgICAgICAgYXJpYS1sYWJlbD17YENvcHkgJHt2YWx1ZX1gfVxuICAgICAgICA+XG4gICAgICAgICAge2NvcGllZCA/IChcbiAgICAgICAgICAgIDxDaGVja1xuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTMgdy0zXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmVlbi03MDApJyB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPENvcHkgY2xhc3NOYW1lPVwiaC0zIHctM1wiIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyB9fSAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8qKiBSZWN1cnNpdmVseSBwYXJzZSBzdHJpbmdpZmllZCBKU09OIHZhbHVlcyBzbyBlc2NhcGVkIHNsYXNoZXMgLyBxdW90ZXMgYXJlIGNsZWFuZWQgdXAgKi9cbmZ1bmN0aW9uIGRlZXBQYXJzZUpzb24odmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpO1xuICAgIGlmIChcbiAgICAgICh0cmltbWVkLnN0YXJ0c1dpdGgoJ3snKSAmJiB0cmltbWVkLmVuZHNXaXRoKCd9JykpIHx8XG4gICAgICAodHJpbW1lZC5zdGFydHNXaXRoKCdbJykgJiYgdHJpbW1lZC5lbmRzV2l0aCgnXScpKSB8fFxuICAgICAgKHRyaW1tZWQuc3RhcnRzV2l0aCgnXCInKSAmJiB0cmltbWVkLmVuZHNXaXRoKCdcIicpKVxuICAgICkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRlZXBQYXJzZUpzb24oSlNPTi5wYXJzZSh0cmltbWVkKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcChkZWVwUGFyc2VKc29uKTtcbiAgfVxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIC8vIFByZXNlcnZlIG9iamVjdHMgd2l0aCBjdXN0b20gY29uc3RydWN0b3JzIChlLmcuLCBlbmNyeXB0ZWQgbWFya2VycyxcbiAgICAvLyBjbGFzcyBpbnN0YW5jZSByZWZzKTsgZG9uJ3QgZGVzdHJ1Y3R1cmUgdGhlbSBpbnRvIHBsYWluIG9iamVjdHNcbiAgICBpZiAodmFsdWUuY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG4gICAgICByZXN1bHRba10gPSBkZWVwUGFyc2VKc29uKHYpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIHN0cnVjdHVyZWQgZXJyb3IgZnJvbSBldmVudCBkYXRhLCBpZiBwcmVzZW50LlxuICogUmV0dXJucyB0aGUgZXJyb3Igb2JqZWN0IHRvIHJlbmRlciB3aXRoIEVycm9yU3RhY2tCbG9jaywgb3IgbnVsbCBpZiBub3QgYXBwbGljYWJsZS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFN0cnVjdHVyZWRFcnJvcihcbiAgZGF0YTogdW5rbm93bixcbiAgZXZlbnRUeXBlPzogc3RyaW5nXG4pOiBTdHJ1Y3R1cmVkRXJyb3JSZWNvcmQgfCBudWxsIHtcbiAgaWYgKCFldmVudFR5cGUgfHwgIUVSUk9SX0VWRU5UX1RZUEVTLmhhcyhldmVudFR5cGUpKSByZXR1cm4gbnVsbDtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHJldHVybiBudWxsO1xuICBjb25zdCByZWNvcmQgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvLyBDaGVjayB0aGUgbmVzdGVkIGBlcnJvcmAgZmllbGQgZmlyc3QgKHRoZSBTdHJ1Y3R1cmVkRXJyb3IpXG4gIGlmIChpc1N0cnVjdHVyZWRFcnJvcihyZWNvcmQuZXJyb3IpKSByZXR1cm4gcmVjb3JkLmVycm9yO1xuICAvLyBTb21lIGVycm9yIGZvcm1hdHMgcHV0IHRoZSBtZXNzYWdlL3N0YWNrIGF0IHRoZSB0b3AgbGV2ZWwgb2YgZXZlbnREYXRhLlxuICBpZiAoaXNTdHJ1Y3R1cmVkRXJyb3IocmVjb3JkKSkgcmV0dXJuIHJlY29yZDtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIFBheWxvYWRCbG9jayh7XG4gIGRhdGEsXG4gIGV2ZW50VHlwZSxcbn06IHtcbiAgZGF0YTogdW5rbm93bjtcbiAgZXZlbnRUeXBlPzogc3RyaW5nO1xufSk6IFJlYWN0Tm9kZSB7XG4gIGNvbnN0IHN0cnVjdHVyZWRFcnJvciA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZXh0cmFjdFN0cnVjdHVyZWRFcnJvcihkYXRhLCBldmVudFR5cGUpLFxuICAgIFtkYXRhLCBldmVudFR5cGVdXG4gICk7XG5cbiAgY29uc3QgW2NvcGllZCwgc2V0Q29waWVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcmVzZXRDb3BpZWRUaW1lb3V0UmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBjbGVhbmVkID0gdXNlTWVtbygoKSA9PiBkZWVwUGFyc2VKc29uKGRhdGEpLCBbZGF0YV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgY29uc3QgZm9ybWF0dGVkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShjbGVhbmVkLCBudWxsLCAyKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBTdHJpbmcoY2xlYW5lZCk7XG4gICAgfVxuICB9LCBbY2xlYW5lZF0pO1xuXG4gIGNvbnN0IGhhbmRsZUNvcHkgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3RNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZm9ybWF0dGVkKS50aGVuKCgpID0+IHtcbiAgICAgICAgc2V0Q29waWVkKHRydWUpO1xuICAgICAgICBpZiAocmVzZXRDb3BpZWRUaW1lb3V0UmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXNldENvcGllZFRpbWVvdXRSZWYuY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBzZXRDb3BpZWQoZmFsc2UpO1xuICAgICAgICAgIHJlc2V0Q29waWVkVGltZW91dFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgfSwgMTUwMCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtmb3JtYXR0ZWRdXG4gICk7XG5cbiAgaWYgKHN0cnVjdHVyZWRFcnJvcikge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtMlwiPlxuICAgICAgICA8RXJyb3JTdGFja0Jsb2NrIHZhbHVlPXtzdHJ1Y3R1cmVkRXJyb3J9IC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgLy8gQXR0cmlidXRlIGNoYW5nZXM6IHJlbmRlciB0aGUgY2hhbmdlZCBrZXlzIGFuZCB0aGUgd3JpdGVyIGluc3RlYWQgb2ZcbiAgLy8gdGhlIHJhdyBKU09OIHBheWxvYWQuXG4gIGlmIChldmVudFR5cGUgPT09ICdhdHRyX3NldCcpIHtcbiAgICByZXR1cm4gPEF0dHJTZXRFdmVudEJsb2NrIGRhdGE9e2NsZWFuZWR9IC8+O1xuICB9XG5cbiAgLy8gQ2FuY2VsbGF0aW9uIHJlYXNvbjogcmVuZGVyIHRoZSBmcmVlLXRleHQgcmVhc29uIGFzIGEgcmVhZGFibGUgbGluZVxuICAvLyBpbnN0ZWFkIG9mIGEgcmF3IEpTT04gcGF5bG9hZCAodGhlIG9ubHkgZmllbGQgcnVuX2NhbmNlbGxlZCBjYXJyaWVzKS5cbiAgaWYgKGV2ZW50VHlwZSA9PT0gJ3J1bl9jYW5jZWxsZWQnKSB7XG4gICAgY29uc3QgY2FuY2VsUmVhc29uID1cbiAgICAgIGNsZWFuZWQgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIGNsZWFuZWQgPT09ICdvYmplY3QnICYmXG4gICAgICB0eXBlb2YgKGNsZWFuZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmNhbmNlbFJlYXNvbiA9PT0gJ3N0cmluZydcbiAgICAgICAgPyAoKGNsZWFuZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmNhbmNlbFJlYXNvbiBhcyBzdHJpbmcpXG4gICAgICAgIDogbnVsbDtcbiAgICBpZiAoY2FuY2VsUmVhc29uKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwicC0yIHRleHQtbGFiZWwtMTJcIlxuICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyB9fT5SZWFzb246IDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ3aGl0ZXNwYWNlLXByZS13cmFwIGJyZWFrLXdvcmRzXCI+XG4gICAgICAgICAgICB7Y2FuY2VsUmVhc29ufVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBncm91cC9wYXlsb2FkXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cIm92ZXJmbG93LXgtYXV0byBwLTIgdGV4dC1bMTFweF1cIlxuICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwMCknIH19XG4gICAgICA+XG4gICAgICAgIDxEYXRhSW5zcGVjdG9yIGRhdGE9e2NsZWFuZWR9IGV4cGFuZExldmVsPXsyfSAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb3B5fVxuICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSBib3R0b20tMiByaWdodC0yIG9wYWNpdHktMCBncm91cC1ob3Zlci9wYXlsb2FkOm9wYWNpdHktMTAwIHRyYW5zaXRpb24tb3BhY2l0eSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0yIHB5LTEgcm91bmRlZC1tZCB0ZXh0LWJ1dHRvbi0xMiBob3ZlcjpiZy1bdmFyKC0tZHMtZ3JheS1hbHBoYS0yMDApXVwiXG4gICAgICAgIHN0eWxlPXt7IC4uLkJVVFRPTl9SRVNFVF9TVFlMRSwgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknIH19XG4gICAgICAgIGFyaWEtbGFiZWw9XCJDb3B5IHBheWxvYWRcIlxuICAgICAgPlxuICAgICAgICB7Y29waWVkID8gKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8Q2hlY2tcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC0zIHctM1wiXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JlZW4tNzAwKScgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyZWVuLTcwMCknIH19PkNvcGllZDwvc3Bhbj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPENvcHkgY2xhc3NOYW1lPVwiaC0zIHctM1wiIC8+XG4gICAgICAgICAgICA8c3Bhbj5Db3B5PC9zcGFuPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU29ydCBvcHRpb25zIGZvciB0aGUgZXZlbnRzIGxpc3Rcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5jb25zdCBTT1JUX09QVElPTlMgPSBbXG4gIHsgdmFsdWU6ICdkZXNjJyBhcyBjb25zdCwgbGFiZWw6ICdOZXdlc3QnIH0sXG4gIHsgdmFsdWU6ICdhc2MnIGFzIGNvbnN0LCBsYWJlbDogJ09sZGVzdCcgfSxcbl07XG5cbmZ1bmN0aW9uIFJvd3NTa2VsZXRvbih7XG4gIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHMgPSBmYWxzZSxcbn06IHtcbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz86IGJvb2xlYW47XG59KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICB7QXJyYXkuZnJvbSh7IGxlbmd0aDogMTYgfSwgKF8sIGkpID0+IChcbiAgICAgICAgPGRpdiBrZXk9e2l9IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0wXCIgc3R5bGU9e3sgaGVpZ2h0OiA0MCB9fT5cbiAgICAgICAgICB7LyogR3V0dGVyIGFyZWEgKi99XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleC1zaHJpbmstMCBzZWxmLXN0cmV0Y2ggZmxleCBpdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IEdVVFRFUl9XSURUSCB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsvKiBWZXJ0aWNhbCBsaW5lIHNrZWxldG9uICovfVxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgIGxlZnQ6IDgsXG4gICAgICAgICAgICAgICAgdG9wOiBpID09PSAwID8gJzUwJScgOiAwLFxuICAgICAgICAgICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgICAgICAgICB3aWR0aDogMixcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGxcIiBzdHlsZT17eyBib3JkZXJSYWRpdXM6IDEgfX0gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgey8qIERvdCBza2VsZXRvbiAqL31cbiAgICAgICAgICAgIDxTa2VsZXRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LXNocmluay0wXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICB3aWR0aDogaSAlIDQgPT09IDAgPyA4IDogNixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGkgJSA0ID09PSAwID8gOCA6IDYsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBpICUgNCA9PT0gMCA/IDUgOiA2LFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7LyogQ2hldnJvbiBwbGFjZWhvbGRlciAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctNSBmbGV4LXNocmluay0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwidy01IGgtNVwiIHN0eWxlPXt7IGJvcmRlclJhZGl1czogNCB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTNcIiBzdHlsZT17eyB3aWR0aDogJzcwJScgfX0gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAgey8qIENyZWF0ZWQgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fT5cbiAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTNcIiBzdHlsZT17eyB3aWR0aDogJzcwJScgfX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7LyogRXZlbnQgVHlwZSAqL31cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTQgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNVwiXG4gICAgICAgICAgICBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTa2VsZXRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LXNocmluay0wXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IDYsIGhlaWdodDogNiwgYm9yZGVyUmFkaXVzOiAnNTAlJyB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTNcIiBzdHlsZT17eyB3aWR0aDogJzYwJScgfX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7LyogTmFtZSAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19PlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiAnNTAlJyB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvKiBDb3JyZWxhdGlvbiBJRCAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICczIDEgMCUnIH19PlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiAnNzUlJyB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvKiBFdmVudCBJRCAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICczIDEgMCUnIH19PlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiAnNzUlJyB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEV2ZW50IHJvd1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmludGVyZmFjZSBFdmVudHNMaXN0UHJvcHMge1xuICBldmVudHM6IEV2ZW50W10gfCBudWxsO1xuICBydW4/OiBXb3JrZmxvd1J1biB8IG51bGw7XG4gIG9uTG9hZEV2ZW50RGF0YT86IChldmVudDogRXZlbnQpID0+IFByb21pc2U8dW5rbm93biB8IG51bGw+O1xuICBoYXNNb3JlRXZlbnRzPzogYm9vbGVhbjtcbiAgaXNMb2FkaW5nTW9yZUV2ZW50cz86IGJvb2xlYW47XG4gIG9uTG9hZE1vcmVFdmVudHM/OiAoKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHNpZ25hbHMgdGhhdCBkZWNyeXB0aW9uIGlzIGFjdGl2ZSAodHJpZ2dlcnMgcmUtbG9hZCBvZiBleHBhbmRlZCBldmVudHMpICovXG4gIGVuY3J5cHRpb25LZXk/OiBVaW50OEFycmF5O1xuICAvKiogV2hlbiB0cnVlLCBzaG93cyBhIGxvYWRpbmcgc3RhdGUgaW5zdGVhZCBvZiBcIk5vIGV2ZW50cyBmb3VuZFwiIGZvciBlbXB0eSBsaXN0cyAqL1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICAvKiogU29ydCBvcmRlciBmb3IgZXZlbnRzLiBEZWZhdWx0cyB0byAnYXNjJy4gKi9cbiAgc29ydE9yZGVyPzogJ2FzYycgfCAnZGVzYyc7XG4gIC8qKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHNvcnQgb3JkZXIuIFdoZW4gcHJvdmlkZWQsIHRoZSBzb3J0IGRyb3Bkb3duIGlzIHNob3duXG4gICAqICBhbmQgdGhlIHBhcmVudCBpcyBleHBlY3RlZCB0byByZWZldGNoIGZyb20gdGhlIEFQSSB3aXRoIHRoZSBuZXcgb3JkZXIuICovXG4gIG9uU29ydE9yZGVyQ2hhbmdlPzogKG9yZGVyOiAnYXNjJyB8ICdkZXNjJykgPT4gdm9pZDtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgRGVjcnlwdCBidXR0b24uICovXG4gIG9uRGVjcnlwdD86ICgpID0+IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIHRoZSBlbmNyeXB0aW9uIGtleSBpcyBjdXJyZW50bHkgYmVpbmcgZmV0Y2hlZC4gKi9cbiAgaXNEZWNyeXB0aW5nPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgZGVjcnlwdGlvbiBpcyB1bmF2YWlsYWJsZS4gKi9cbiAgaXNEZWNyeXB0RGlzYWJsZWQ/OiBib29sZWFuO1xuICAvKiogRXhwbGFpbnMgd2h5IGRlY3J5cHRpb24gaXMgdW5hdmFpbGFibGUuICovXG4gIGRlY3J5cHREaXNhYmxlZFJlYXNvbj86IHN0cmluZztcbiAgLyoqIFJ1bi1sZXZlbCBoaW50OiB0aGUgcnVuIGNvbnRhaW5zIGVuY3J5cHRlZCBkYXRhIChmcm9tIHByb2JlKS4gKi9cbiAgaGFzRW5jcnlwdGVkRGF0YT86IGJvb2xlYW47XG4gIC8qKiBGZXRjaCBldmVudHMgZm9yIGFuIGV4YWN0IGNvcnJlbGF0aW9uIG9yIGV2ZW50IElELiAqL1xuICBvbkV4YWN0SWRTZWFyY2g/OiAoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBraW5kOiBFeGFjdFdvcmtmbG93U2VhcmNoSWRLaW5kLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsXG4gICkgPT4gUHJvbWlzZTxFeGFjdElkU2VhcmNoUmVzdWx0PjtcbiAgLyoqIFNob3cgb2NjdXJyZWRBdCBzZXBhcmF0ZWx5IGluc3RlYWQgb2YgZm9sZGluZyBpdCBpbnRvIHRoZSBDcmVhdGVkIHRpbWVzdGFtcC4gKi9cbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFdmVudFJvdyh7XG4gIGV2ZW50LFxuICBpbmRleCxcbiAgaXNGaXJzdCxcbiAgaXNMYXN0LFxuICBpc0V4cGFuZGVkLFxuICBvblRvZ2dsZUV4cGFuZCxcbiAgYWN0aXZlR3JvdXBLZXksXG4gIHNlbGVjdGVkR3JvdXBLZXksXG4gIHNlbGVjdGVkR3JvdXBSYW5nZSxcbiAgY29ycmVsYXRpb25OYW1lTWFwLFxuICB3b3JrZmxvd05hbWUsXG4gIGR1cmF0aW9uTWFwLFxuICBvblNlbGVjdEdyb3VwLFxuICBvbkhvdmVyR3JvdXAsXG4gIG9uTG9hZEV2ZW50RGF0YSxcbiAgY2FjaGVkRXZlbnREYXRhLFxuICBvbkNhY2hlRXZlbnREYXRhLFxuICBlbmNyeXB0aW9uS2V5LFxuICBvbkVuY3J5cHRlZERhdGFEZXRlY3RlZCxcbiAgc3VwcHJlc3NHcm91cERpbW1pbmcgPSBmYWxzZSxcbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcyA9IGZhbHNlLFxuICBpc0R1cGxpY2F0ZSA9IGZhbHNlLFxufToge1xuICBldmVudDogRXZlbnQ7XG4gIGluZGV4OiBudW1iZXI7XG4gIGlzRmlyc3Q6IGJvb2xlYW47XG4gIGlzTGFzdDogYm9vbGVhbjtcbiAgaXNFeHBhbmRlZDogYm9vbGVhbjtcbiAgb25Ub2dnbGVFeHBhbmQ6IChldmVudElkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGFjdGl2ZUdyb3VwS2V5Pzogc3RyaW5nO1xuICBzZWxlY3RlZEdyb3VwS2V5Pzogc3RyaW5nO1xuICBzZWxlY3RlZEdyb3VwUmFuZ2U6IHsgZmlyc3Q6IG51bWJlcjsgbGFzdDogbnVtYmVyIH0gfCBudWxsO1xuICBjb3JyZWxhdGlvbk5hbWVNYXA6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gIHdvcmtmbG93TmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgZHVyYXRpb25NYXA6IE1hcDxzdHJpbmcsIER1cmF0aW9uSW5mbz47XG4gIG9uU2VsZWN0R3JvdXA6IChncm91cEtleTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuICBvbkhvdmVyR3JvdXA6IChncm91cEtleTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuICBvbkxvYWRFdmVudERhdGE/OiAoZXZlbnQ6IEV2ZW50KSA9PiBQcm9taXNlPHVua25vd24gfCBudWxsPjtcbiAgY2FjaGVkRXZlbnREYXRhOiB1bmtub3duIHwgbnVsbDtcbiAgb25DYWNoZUV2ZW50RGF0YTogKGV2ZW50SWQ6IHN0cmluZywgZGF0YTogdW5rbm93bikgPT4gdm9pZDtcbiAgZW5jcnlwdGlvbktleT86IFVpbnQ4QXJyYXk7XG4gIG9uRW5jcnlwdGVkRGF0YURldGVjdGVkPzogKCkgPT4gdm9pZDtcbiAgLyoqIEV4YWN0LUlEIHNlYXJjaCByZXN1bHRzIHNob3VsZCBub3QgZGltIHVucmVsYXRlZCByb3dzLiAqL1xuICBzdXBwcmVzc0dyb3VwRGltbWluZz86IGJvb2xlYW47XG4gIC8qKiBTaG93IG9jY3VycmVkQXQgc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGZvbGRpbmcgaXQgaW50byB0aGUgQ3JlYXRlZCB0aW1lc3RhbXAuICovXG4gIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHM/OiBib29sZWFuO1xuICAvKiogVGhlIGV2ZW50IHJlcGVhdHMgYSBjbGFzcyBhbHJlYWR5IGluIHRoZSBsb2csIHNvIHRoZSBydW50aW1lIGlnbm9yZWQgaXQuICovXG4gIGlzRHVwbGljYXRlPzogYm9vbGVhbjtcbn0pIHtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2xvYWRlZEV2ZW50RGF0YSwgc2V0TG9hZGVkRXZlbnREYXRhXSA9IHVzZVN0YXRlPHVua25vd24gfCBudWxsPihcbiAgICBjYWNoZWRFdmVudERhdGFcbiAgKTtcbiAgY29uc3QgW2xvYWRFcnJvciwgc2V0TG9hZEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbaGFzQXR0ZW1wdGVkTG9hZCwgc2V0SGFzQXR0ZW1wdGVkTG9hZF0gPSB1c2VTdGF0ZShcbiAgICBjYWNoZWRFdmVudERhdGEgIT09IG51bGxcbiAgKTtcblxuICAvLyBOb3RpZnkgcGFyZW50IGlmIGNhY2hlZCBkYXRhIGhhcyBlbmNyeXB0ZWQgbWFya2VycyBvbiBtb3VudFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChcbiAgICAgIGNhY2hlZEV2ZW50RGF0YSAhPT0gbnVsbCAmJlxuICAgICAgIWVuY3J5cHRpb25LZXkgJiZcbiAgICAgIGhhc0VuY3J5cHRlZFZhbHVlcyhjYWNoZWRFdmVudERhdGEpXG4gICAgKSB7XG4gICAgICBvbkVuY3J5cHRlZERhdGFEZXRlY3RlZD8uKCk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pO1xuXG4gIGNvbnN0IHJvd0dyb3VwS2V5ID0gaXNSdW5MZXZlbChldmVudC5ldmVudFR5cGUpXG4gICAgPyAnX19ydW5fXydcbiAgICA6IChldmVudC5jb3JyZWxhdGlvbklkID8/IHVuZGVmaW5lZCk7XG5cbiAgY29uc3QgaXNTZWFsZWQgPSBpc1NlYWxlZE5vb3BFdmVudChldmVudCk7XG4gIGNvbnN0IHJvd05vdGljZSA9IGlzRHVwbGljYXRlXG4gICAgPyBEVVBMSUNBVEVfRVZFTlRfTUVTU0FHRVxuICAgIDogaXNTZWFsZWRcbiAgICAgID8gU0VBTEVEX0VWRU5UX01FU1NBR0VcbiAgICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCBzdGF0dXNEb3RDb2xvciA9IGdldFN0YXR1c0RvdENvbG9yKGV2ZW50LmV2ZW50VHlwZSk7XG4gIGNvbnN0IGNyZWF0ZWRBdCA9IG5ldyBEYXRlKGV2ZW50LmNyZWF0ZWRBdCk7XG4gIGNvbnN0IG9jY3VycmVkQXQgPSBwYXJzZUV2ZW50RGF0ZShldmVudC5vY2N1cnJlZEF0KTtcbiAgY29uc3QgZGlzcGxheWVkQ3JlYXRlZEF0ID0gc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wc1xuICAgID8gY3JlYXRlZEF0XG4gICAgOiBnZXRFZmZlY3RpdmVFdmVudERhdGUoZXZlbnQpO1xuICBjb25zdCBoYXNFeGlzdGluZ0V2ZW50RGF0YSA9ICdldmVudERhdGEnIGluIGV2ZW50ICYmIGV2ZW50LmV2ZW50RGF0YSAhPSBudWxsO1xuICBjb25zdCBpc1J1biA9IGlzUnVuTGV2ZWwoZXZlbnQuZXZlbnRUeXBlKTtcbiAgY29uc3QgZXZlbnROYW1lID0gaXNSdW5cbiAgICA/ICh3b3JrZmxvd05hbWUgPz8gJy0nKVxuICAgIDogZXZlbnQuY29ycmVsYXRpb25JZFxuICAgICAgPyAoY29ycmVsYXRpb25OYW1lTWFwLmdldChldmVudC5jb3JyZWxhdGlvbklkKSA/PyAnLScpXG4gICAgICA6ICctJztcblxuICBjb25zdCBkdXJhdGlvbktleSA9IGV2ZW50LmNvcnJlbGF0aW9uSWQgPz8gKGlzUnVuID8gJ19fcnVuX18nIDogJycpO1xuICBjb25zdCBkdXJhdGlvbkluZm8gPSBkdXJhdGlvbktleSA/IGR1cmF0aW9uTWFwLmdldChkdXJhdGlvbktleSkgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgaGFzQWN0aXZlID0gYWN0aXZlR3JvdXBLZXkgIT09IHVuZGVmaW5lZDtcbiAgY29uc3QgaXNSZWxhdGVkID0gcm93R3JvdXBLZXkgIT09IHVuZGVmaW5lZCAmJiByb3dHcm91cEtleSA9PT0gYWN0aXZlR3JvdXBLZXk7XG4gIGNvbnN0IGlzRGltbWVkID0gaGFzQWN0aXZlICYmICFpc1JlbGF0ZWQgJiYgIXN1cHByZXNzR3JvdXBEaW1taW5nO1xuICBjb25zdCBpc1B1bHNpbmcgPSBoYXNBY3RpdmUgJiYgaXNSZWxhdGVkO1xuXG4gIC8vIEd1dHRlciBzdGF0ZSBkZXJpdmVkIGZyb20gc2VsZWN0ZWRHcm91cFJhbmdlXG4gIGNvbnN0IHNob3dCcmFuY2ggPSBoYXNBY3RpdmUgJiYgaXNSZWxhdGVkICYmICFpc1J1bjtcbiAgY29uc3Qgc2hvd0xhbmVMaW5lID1cbiAgICBzZWxlY3RlZEdyb3VwUmFuZ2UgIT09IG51bGwgJiZcbiAgICBpbmRleCA+PSBzZWxlY3RlZEdyb3VwUmFuZ2UuZmlyc3QgJiZcbiAgICBpbmRleCA8PSBzZWxlY3RlZEdyb3VwUmFuZ2UubGFzdDtcbiAgY29uc3QgaXNMYW5lU3RhcnQgPVxuICAgIHNlbGVjdGVkR3JvdXBSYW5nZSAhPT0gbnVsbCAmJiBpbmRleCA9PT0gc2VsZWN0ZWRHcm91cFJhbmdlLmZpcnN0O1xuICBjb25zdCBpc0xhbmVFbmQgPVxuICAgIHNlbGVjdGVkR3JvdXBSYW5nZSAhPT0gbnVsbCAmJiBpbmRleCA9PT0gc2VsZWN0ZWRHcm91cFJhbmdlLmxhc3Q7XG5cbiAgY29uc3QgbG9hZEV2ZW50RGV0YWlscyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAobG9hZGVkRXZlbnREYXRhICE9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjYWNoZWRFdmVudERhdGEgIT09IG51bGwpIHtcbiAgICAgIHNldExvYWRlZEV2ZW50RGF0YShjYWNoZWRFdmVudERhdGEpO1xuICAgICAgc2V0SGFzQXR0ZW1wdGVkTG9hZCh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzTG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgc2V0TG9hZEVycm9yKG51bGwpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9uTG9hZEV2ZW50RGF0YSkge1xuICAgICAgICBzZXRMb2FkRXJyb3IoJ0V2ZW50IGRldGFpbHMgdW5hdmFpbGFibGUnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IG9uTG9hZEV2ZW50RGF0YShldmVudCk7XG4gICAgICBpZiAoZGF0YSAhPT0gbnVsbCAmJiBkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2V0TG9hZGVkRXZlbnREYXRhKGRhdGEpO1xuICAgICAgICBvbkNhY2hlRXZlbnREYXRhKGV2ZW50LmV2ZW50SWQsIGRhdGEpO1xuICAgICAgICBpZiAoIWVuY3J5cHRpb25LZXkgJiYgaGFzRW5jcnlwdGVkVmFsdWVzKGRhdGEpKSB7XG4gICAgICAgICAgb25FbmNyeXB0ZWREYXRhRGV0ZWN0ZWQ/LigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzZXRMb2FkRXJyb3IoXG4gICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnRmFpbGVkIHRvIGxvYWQgZXZlbnQgZGV0YWlscydcbiAgICAgICk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICBzZXRIYXNBdHRlbXB0ZWRMb2FkKHRydWUpO1xuICAgIH1cbiAgfSwgW1xuICAgIGV2ZW50LFxuICAgIGxvYWRlZEV2ZW50RGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgb25Mb2FkRXZlbnREYXRhLFxuICAgIG9uQ2FjaGVFdmVudERhdGEsXG4gICAgZW5jcnlwdGlvbktleSxcbiAgICBvbkVuY3J5cHRlZERhdGFEZXRlY3RlZCxcbiAgICBjYWNoZWRFdmVudERhdGEsXG4gIF0pO1xuXG4gIC8vIEF1dG8tbG9hZCBldmVudCBkYXRhIHdoZW4gcmVtb3VudGluZyBpbiBleHBhbmRlZCBzdGF0ZSB3aXRob3V0IGNhY2hlZCBkYXRhXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0V4cGFuZGVkIHx8IGlzTG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2b2lkIGxvYWRFdmVudERldGFpbHMoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtdKTtcblxuICAvLyBXaGVuIGVuY3J5cHRpb24ga2V5IGNoYW5nZXMgYW5kIHRoaXMgZXZlbnQgd2FzIHByZXZpb3VzbHkgbG9hZGVkLFxuICAvLyByZS1sb2FkIHRvIGdldCBkZWNyeXB0ZWQgZGF0YS4gS2VlcCB0aGUgZW5jcnlwdGVkIHZhbHVlIHZpc2libGUgdW50aWwgdGhlXG4gIC8vIHJlZnJlc2hlZCBkYXRhIGFycml2ZXMgc28gdGhlIHBheWxvYWQgZG9lcyBub3QgZmxhc2ggZW1wdHkgd2hpbGUgZGVjcnlwdGluZy5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZW5jcnlwdGlvbktleSAmJiBoYXNBdHRlbXB0ZWRMb2FkICYmIG9uTG9hZEV2ZW50RGF0YSkge1xuICAgICAgc2V0SGFzQXR0ZW1wdGVkTG9hZChmYWxzZSk7XG4gICAgICBvbkxvYWRFdmVudERhdGEoZXZlbnQpXG4gICAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEgIT09IG51bGwgJiYgZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzZXRMb2FkZWRFdmVudERhdGEoZGF0YSk7XG4gICAgICAgICAgICBvbkNhY2hlRXZlbnREYXRhKGV2ZW50LmV2ZW50SWQsIGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRIYXNBdHRlbXB0ZWRMb2FkKHRydWUpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIHNldEhhc0F0dGVtcHRlZExvYWQodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtlbmNyeXB0aW9uS2V5XSk7XG5cbiAgY29uc3QgaGFuZGxlUm93Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgb25TZWxlY3RHcm91cChyb3dHcm91cEtleSA9PT0gc2VsZWN0ZWRHcm91cEtleSA/IHVuZGVmaW5lZCA6IHJvd0dyb3VwS2V5KTtcbiAgICBvblRvZ2dsZUV4cGFuZChldmVudC5ldmVudElkKTtcbiAgICBpZiAoIWlzRXhwYW5kZWQpIHtcbiAgICAgIHZvaWQgbG9hZEV2ZW50RGV0YWlscygpO1xuICAgIH1cbiAgfSwgW1xuICAgIHNlbGVjdGVkR3JvdXBLZXksXG4gICAgcm93R3JvdXBLZXksXG4gICAgb25TZWxlY3RHcm91cCxcbiAgICBvblRvZ2dsZUV4cGFuZCxcbiAgICBldmVudC5ldmVudElkLFxuICAgIGlzRXhwYW5kZWQsXG4gICAgbG9hZEV2ZW50RGV0YWlscyxcbiAgXSk7XG5cbiAgY29uc3QgbWVyZ2VkRXZlbnREYXRhID1cbiAgICBsb2FkZWRFdmVudERhdGEgPz9cbiAgICAoaGFzRXhpc3RpbmdFdmVudERhdGFcbiAgICAgID8gKGV2ZW50IGFzIEV2ZW50ICYgeyBldmVudERhdGE6IHVua25vd24gfSkuZXZlbnREYXRhXG4gICAgICA6IG51bGwpO1xuXG4gIGNvbnN0IGRpc3BsYXlQYXlsb2FkID0gaXNMb2FkaW5nID8gbG9hZGVkRXZlbnREYXRhIDogbWVyZ2VkRXZlbnREYXRhO1xuXG4gIGNvbnN0IGNvbnRlbnRPcGFjaXR5ID0gaXNEaW1tZWQgPyAwLjMgOiAxO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1ldmVudC1pZD17ZXZlbnQuZXZlbnRJZH1cbiAgICAgIG9uTW91c2VFbnRlcj17KCkgPT4gb25Ib3Zlckdyb3VwKHJvd0dyb3VwS2V5KX1cbiAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gb25Ib3Zlckdyb3VwKHVuZGVmaW5lZCl9XG4gICAgPlxuICAgICAgey8qIFJvdyAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVSb3dDbGlja31cbiAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyB8fCBlLmtleSA9PT0gJyAnKSBoYW5kbGVSb3dDbGljaygpO1xuICAgICAgICB9fVxuICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgdGV4dC1sZWZ0IGZsZXggaXRlbXMtY2VudGVyIGdhcC0wIHRleHQtbGFiZWwtMTMgaG92ZXI6YmctW3ZhcigtLWRzLWdyYXktYWxwaGEtMTAwKV0gdHJhbnNpdGlvbi1jb2xvcnMgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICBzdHlsZT17eyBtaW5IZWlnaHQ6IDQwIH19XG4gICAgICA+XG4gICAgICAgIDxUcmVlR3V0dGVyXG4gICAgICAgICAgaXNGaXJzdD17aXNGaXJzdH1cbiAgICAgICAgICBpc0xhc3Q9e2lzTGFzdCAmJiAhaXNFeHBhbmRlZH1cbiAgICAgICAgICBpc1J1bkxldmVsPXtpc1J1bn1cbiAgICAgICAgICBzdGF0dXNEb3RDb2xvcj17c3RhdHVzRG90Q29sb3J9XG4gICAgICAgICAgcHVsc2U9e2lzUHVsc2luZ31cbiAgICAgICAgICBoYXNTZWxlY3Rpb249e2hhc0FjdGl2ZX1cbiAgICAgICAgICBzaG93QnJhbmNoPXtzaG93QnJhbmNofVxuICAgICAgICAgIHNob3dMYW5lTGluZT17c2hvd0xhbmVMaW5lfVxuICAgICAgICAgIGlzTGFuZVN0YXJ0PXtpc0xhbmVTdGFydH1cbiAgICAgICAgICBpc0xhbmVFbmQ9e2lzTGFuZUVuZH1cbiAgICAgICAgLz5cblxuICAgICAgICB7LyogQ29udGVudCBhcmVhOiBkaW1zIHdoZW4gdW5yZWxhdGVkICovfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZmxleC0xIG1pbi13LTBcIlxuICAgICAgICAgIHN0eWxlPXt7IG9wYWNpdHk6IGNvbnRlbnRPcGFjaXR5LCB0cmFuc2l0aW9uOiAnb3BhY2l0eSAxNTBtcycgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHsvKiBFeHBhbmQgY2hldnJvbiBpbmRpY2F0b3IgKi99XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy01IGgtNSBmbGV4LXNocmluay0wIHJvdW5kZWRcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHZhcigtLWRzLWdyYXktNDAwKScsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGV2cm9uUmlnaHRcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC0zIHctMyB0cmFuc2l0aW9uLXRyYW5zZm9ybVwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTkwMCknLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogaXNFeHBhbmRlZCA/ICdyb3RhdGUoOTBkZWcpJyA6ICdyb3RhdGUoMGRlZyknLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHtzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidGFidWxhci1udW1zIG1pbi13LTAgcHgtNFwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJywgZmxleDogJzIgMSAwJScgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge29jY3VycmVkQXQgPyAoXG4gICAgICAgICAgICAgICAgPFRpbWVzdGFtcFRvb2x0aXAgZGF0ZT17b2NjdXJyZWRBdH0+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57Zm9ybWF0RXZlbnRUaW1lKG9jY3VycmVkQXQpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L1RpbWVzdGFtcFRvb2x0aXA+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgJy0nXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAgey8qIENyZWF0ZWQgKi99XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidGFidWxhci1udW1zIG1pbi13LTAgcHgtNFwiXG4gICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScsIGZsZXg6ICcyIDEgMCUnIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRpbWVzdGFtcFRvb2x0aXAgZGF0ZT17ZGlzcGxheWVkQ3JlYXRlZEF0fT5cbiAgICAgICAgICAgICAgPHNwYW4+e2Zvcm1hdEV2ZW50VGltZShkaXNwbGF5ZWRDcmVhdGVkQXQpfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvVGltZXN0YW1wVG9vbHRpcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBFdmVudCBUeXBlICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW0gbWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICA8RXZlbnROb3RpY2VUb29sdGlwIG5vdGljZT17cm93Tm90aWNlfT5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiByb3dOb3RpY2VcbiAgICAgICAgICAgICAgICAgICAgPyAndmFyKC0tZHMtZ3JheS03MDApJ1xuICAgICAgICAgICAgICAgICAgICA6ICd2YXIoLS1kcy1ncmF5LTkwMCknLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiA2LFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDYsXG4gICAgICAgICAgICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtpc1B1bHNpbmcgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc2V0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogc3RhdHVzRG90Q29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjc1LFxuICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiBET1RfUFVMU0VfQU5JTUFUSU9OLFxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogNixcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDYsXG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHN0YXR1c0RvdENvbG9yLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAge2Zvcm1hdEV2ZW50VHlwZShldmVudC5ldmVudFR5cGUpfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L0V2ZW50Tm90aWNlVG9vbHRpcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBOYW1lICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNCBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcFwiXG4gICAgICAgICAgICBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fVxuICAgICAgICAgICAgdGl0bGU9e2V2ZW50TmFtZSAhPT0gJy0nID8gZXZlbnROYW1lIDogdW5kZWZpbmVkfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtldmVudE5hbWV9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogQ29ycmVsYXRpb24gSUQgKi99XG4gICAgICAgICAgPENvcHlhYmxlQ2VsbFxuICAgICAgICAgICAgdmFsdWU9e2V2ZW50LmNvcnJlbGF0aW9uSWQgfHwgJyd9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJmb250LW1vbm9cIlxuICAgICAgICAgICAgc3R5bGU9e3sgZmxleDogJzMgMSAwJScgfX1cbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgey8qIEV2ZW50IElEICovfVxuICAgICAgICAgIDxDb3B5YWJsZUNlbGxcbiAgICAgICAgICAgIHZhbHVlPXtldmVudC5ldmVudElkfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9udC1tb25vXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGZsZXg6ICczIDEgMCUnIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIEV4cGFuZGVkIGRldGFpbHM6IHRyZWUgbGluZXMgY29udGludWUgdGhyb3VnaCB0aGlzIGFyZWEgKi99XG4gICAgICB7aXNFeHBhbmRlZCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleFwiPlxuICAgICAgICAgIHsvKiBDb250aW51YXRpb24gZ3V0dGVyOiBsYW5lIGxpbmUgY29udGludWVzIGlmIG5vdCBhdCBsYW5lIGVuZCAqL31cbiAgICAgICAgICA8VHJlZUd1dHRlclxuICAgICAgICAgICAgaXNGaXJzdD17ZmFsc2V9XG4gICAgICAgICAgICBpc0xhc3Q9e2lzTGFzdH1cbiAgICAgICAgICAgIGlzUnVuTGV2ZWw9e2lzUnVufVxuICAgICAgICAgICAgaGFzU2VsZWN0aW9uPXtoYXNBY3RpdmV9XG4gICAgICAgICAgICBzaG93QnJhbmNoPXtmYWxzZX1cbiAgICAgICAgICAgIHNob3dMYW5lTGluZT17c2hvd0xhbmVMaW5lICYmICFpc0xhbmVFbmR9XG4gICAgICAgICAgICBpc0xhbmVTdGFydD17ZmFsc2V9XG4gICAgICAgICAgICBpc0xhbmVFbmQ9e2ZhbHNlfVxuICAgICAgICAgICAgY29udGludWF0aW9uT25seVxuICAgICAgICAgIC8+XG4gICAgICAgICAgey8qIFNwYWNlciBmb3IgY2hldnJvbiBjb2x1bW4gKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTUgZmxleC1zaHJpbmstMFwiIC8+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleC0xIG15LTEuNSBtci0zIG1sLTIgcHktMiByb3VuZGVkLW1kIGJvcmRlciBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LWFscGhhLTIwMCknLFxuICAgICAgICAgICAgICBvcGFjaXR5OiBjb250ZW50T3BhY2l0eSxcbiAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgMTUwbXMnLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LyogRHVyYXRpb24gaW5mbyAqL31cbiAgICAgICAgICAgIHsoZHVyYXRpb25JbmZvPy5xdWV1ZWQgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICBkdXJhdGlvbkluZm8/LnJhbiAhPT0gdW5kZWZpbmVkKSAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJweC0yIHBiLTEuNSB0ZXh0LWxhYmVsLTEyIGZsZXggZ2FwLTNcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2R1cmF0aW9uSW5mby5xdWV1ZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgZHVyYXRpb25JbmZvLnF1ZXVlZCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICBRdWV1ZWQgZm9yeycgJ31cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1vbm8gdGFidWxhci1udW1zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Zm9ybWF0RHVyYXRpb24oZHVyYXRpb25JbmZvLnF1ZXVlZCl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIHtkdXJhdGlvbkluZm8ucmFuICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIFJhbiBmb3J7JyAnfVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1vbm8gdGFidWxhci1udW1zXCI+XG4gICAgICAgICAgICAgICAgICAgICAge2Zvcm1hdER1cmF0aW9uKGR1cmF0aW9uSW5mby5yYW4pfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7LyogUGF5bG9hZCAqL31cbiAgICAgICAgICAgIHtkaXNwbGF5UGF5bG9hZCAhPSBudWxsID8gKFxuICAgICAgICAgICAgICA8UGF5bG9hZEJsb2NrIGRhdGE9e2Rpc3BsYXlQYXlsb2FkfSBldmVudFR5cGU9e2V2ZW50LmV2ZW50VHlwZX0gLz5cbiAgICAgICAgICAgICkgOiBsb2FkRXJyb3IgPyAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlciBwLTMgdGV4dC1sYWJlbC0xMlwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAndmFyKC0tZHMtcmVkLTQwMCknLFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtcmVkLTEwMCknLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1yZWQtOTAwKScsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtsb2FkRXJyb3J9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IGlzTG9hZGluZyB8fFxuICAgICAgICAgICAgICAobG9hZGVkRXZlbnREYXRhID09PSBudWxsICYmXG4gICAgICAgICAgICAgICAgIWhhc0F0dGVtcHRlZExvYWQgJiZcbiAgICAgICAgICAgICAgICBldmVudC5jb3JyZWxhdGlvbklkKSA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0yIHAtM1wiPlxuICAgICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTNcIiBzdHlsZT17eyB3aWR0aDogJzc1JScgfX0gLz5cbiAgICAgICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6ICc1MCUnIH19IC8+XG4gICAgICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiAnNjAlJyB9fSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwLTIgdGV4dC1sYWJlbC0xMlwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTkwMCknIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBObyBkYXRhXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIE1haW4gY29tcG9uZW50XG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gRXZlbnRMaXN0Vmlld0lubmVyKHtcbiAgZXZlbnRzLFxuICBydW4sXG4gIG9uTG9hZEV2ZW50RGF0YSxcbiAgaGFzTW9yZUV2ZW50cyA9IGZhbHNlLFxuICBpc0xvYWRpbmdNb3JlRXZlbnRzID0gZmFsc2UsXG4gIG9uTG9hZE1vcmVFdmVudHMsXG4gIGVuY3J5cHRpb25LZXksXG4gIGlzTG9hZGluZyA9IGZhbHNlLFxuICBzb3J0T3JkZXI6IHNvcnRPcmRlclByb3AsXG4gIG9uU29ydE9yZGVyQ2hhbmdlLFxuICBvbkRlY3J5cHQsXG4gIGlzRGVjcnlwdGluZyA9IGZhbHNlLFxuICBpc0RlY3J5cHREaXNhYmxlZCA9IGZhbHNlLFxuICBkZWNyeXB0RGlzYWJsZWRSZWFzb24sXG4gIGhhc0VuY3J5cHRlZERhdGE6IGhhc0VuY3J5cHRlZERhdGFQcm9wID0gZmFsc2UsXG4gIG9uRXhhY3RJZFNlYXJjaCxcbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcyA9IGZhbHNlLFxufTogRXZlbnRzTGlzdFByb3BzKSB7XG4gIGNvbnN0IHRvYXN0ID0gdXNlVG9hc3QoKTtcbiAgY29uc3QgW2ludGVybmFsU29ydE9yZGVyLCBzZXRJbnRlcm5hbFNvcnRPcmRlcl0gPSB1c2VTdGF0ZTwnYXNjJyB8ICdkZXNjJz4oXG4gICAgJ2FzYydcbiAgKTtcbiAgY29uc3QgZWZmZWN0aXZlU29ydE9yZGVyID0gc29ydE9yZGVyUHJvcCA/PyBpbnRlcm5hbFNvcnRPcmRlcjtcbiAgY29uc3QgaGFuZGxlU29ydE9yZGVyQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9yZGVyOiAnYXNjJyB8ICdkZXNjJykgPT4ge1xuICAgICAgaWYgKG9uU29ydE9yZGVyQ2hhbmdlKSB7XG4gICAgICAgIG9uU29ydE9yZGVyQ2hhbmdlKG9yZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEludGVybmFsU29ydE9yZGVyKG9yZGVyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvblNvcnRPcmRlckNoYW5nZV1cbiAgKTtcblxuICBjb25zdCBbc2VhcmNoUXVlcnksIHNldFNlYXJjaFF1ZXJ5XSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3NlYXJjaFJlc3VsdHMsIHNldFNlYXJjaFJlc3VsdHNdID0gdXNlU3RhdGU8RXZlbnRbXSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbc2VhcmNoUmVzdWx0c1RydW5jYXRlZCwgc2V0U2VhcmNoUmVzdWx0c1RydW5jYXRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzZWFyY2hFcnJvciwgc2V0U2VhcmNoRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtzZWFyY2hMb2FkaW5nLCBzZXRTZWFyY2hMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NlYXJjaE5vdEZvdW5kLCBzZXRTZWFyY2hOb3RGb3VuZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHNlYXJjaFJlcXVlc3RSZWYgPSB1c2VSZWYoMCk7XG4gIGNvbnN0IHZpcnR1b3NvUmVmID0gdXNlUmVmPFZpcnR1b3NvSGFuZGxlPihudWxsKTtcblxuICBjb25zdCBwYXJzZWRTZWFyY2hJZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gcGFyc2VFeGFjdFdvcmtmbG93U2VhcmNoSWQoc2VhcmNoUXVlcnkpLFxuICAgIFtzZWFyY2hRdWVyeV1cbiAgKTtcbiAgY29uc3QgaXNFeGFjdFNlYXJjaEFjdGl2ZSA9IHNlYXJjaFJlc3VsdHMgIT09IG51bGw7XG5cbiAgY29uc3Qgc29ydGVkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgc291cmNlRXZlbnRzID0gaXNFeGFjdFNlYXJjaEFjdGl2ZSA/IHNlYXJjaFJlc3VsdHMgOiAoZXZlbnRzID8/IFtdKTtcbiAgICBpZiAoc291cmNlRXZlbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IGRpciA9IGVmZmVjdGl2ZVNvcnRPcmRlciA9PT0gJ2Rlc2MnID8gLTEgOiAxO1xuICAgIHJldHVybiBbLi4uc291cmNlRXZlbnRzXS5zb3J0KFxuICAgICAgKGEsIGIpID0+IGRpciAqIChnZXRFZmZlY3RpdmVFdmVudFRpbWUoYSkgLSBnZXRFZmZlY3RpdmVFdmVudFRpbWUoYikpXG4gICAgKTtcbiAgfSwgW2V2ZW50cywgZWZmZWN0aXZlU29ydE9yZGVyLCBpc0V4YWN0U2VhcmNoQWN0aXZlLCBzZWFyY2hSZXN1bHRzXSk7XG5cbiAgLy8gRXZlbnRzIGV2ZXJ5IHJlcGxheSByZWFkcyBwYXN0IGFzIHJlcGVhdHMuIENvbXB1dGVkIGZyb20gdGhlIHNvdXJjZSBsaXN0XG4gIC8vIHJhdGhlciB0aGFuIGBzb3J0ZWRFdmVudHNgIGJlY2F1c2Ugd2hpY2ggb2NjdXJyZW5jZSBjb3VudGVkIGlzIGEgcHJvcGVydHlcbiAgLy8gb2YgdGhlIGxvZywgbm90IG9mIHRoZSBkaXJlY3Rpb24gdGhlIHRhYmxlIGhhcHBlbnMgdG8gYmUgc29ydGVkIGluLlxuICAvL1xuICAvLyBBIHBhZ2Ugc2hvcnQgb2YgdGhlIHdob2xlIGxvZywgb3IgYW4gZXhhY3QtSUQgc2VhcmNoIHRoYXQgcmV0dXJucyBvbmVcbiAgLy8gZXZlbnQsIGNhbm5vdCBhbnN3ZXIgdGhhdCBxdWVzdGlvbjogdGhlIGV2ZW50IGEgcmVwZWF0IGxvc3QgdG8gbWF5IGJlXG4gIC8vIG91dHNpZGUgdGhlIHdpbmRvdywgYW5kIHJlYWRpbmcgaXQgdGhlIG90aGVyIHdheSByb3VuZCB3b3VsZCBtYXJrIHRoZVxuICAvLyBldmVudCB0aGUgcnVuIGFjdGVkIG9uIGFuZCBkcm9wIGl0IGZyb20gdGhlIGR1cmF0aW9ucy4gQm90aCBjYXNlcyBjbGFzc2lmeVxuICAvLyBub3RoaW5nLlxuICBjb25zdCBkdXBsaWNhdGVFdmVudElkcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGZpbmREdXBsaWNhdGVFdmVudElkcyhldmVudHMgPz8gW10sIHtcbiAgICAgICAgaXNDb21wbGV0ZUhpc3Rvcnk6ICFoYXNNb3JlRXZlbnRzICYmICFpc0V4YWN0U2VhcmNoQWN0aXZlLFxuICAgICAgfSksXG4gICAgW2V2ZW50cywgaGFzTW9yZUV2ZW50cywgaXNFeGFjdFNlYXJjaEFjdGl2ZV1cbiAgKTtcblxuICAvLyBEZXRlY3QgZW5jcnlwdGVkIGZpZWxkcyBhY3Jvc3MgYWxsIGxvYWRlZCBldmVudHMgKGlubGluZSBldmVudERhdGEpLlxuICBjb25zdCBoYXNFbmNyeXB0ZWRJbmxpbmVEYXRhID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgc291cmNlRXZlbnRzID0gaXNFeGFjdFNlYXJjaEFjdGl2ZSA/IHNlYXJjaFJlc3VsdHMgOiBldmVudHM7XG4gICAgaWYgKCFzb3VyY2VFdmVudHMpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIHNvdXJjZUV2ZW50cykge1xuICAgICAgY29uc3QgZWQgPSAoZXZlbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmV2ZW50RGF0YTtcbiAgICAgIGlmIChoYXNFbmNyeXB0ZWRWYWx1ZXMoZWQpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCBbZXZlbnRzLCBpc0V4YWN0U2VhcmNoQWN0aXZlLCBzZWFyY2hSZXN1bHRzXSk7XG5cbiAgLy8gVHJhY2tzIHdoZXRoZXIgYW55IGV4cGFuZGVkIHJvdydzIGxhenktbG9hZGVkIGRhdGEgY29udGFpbmVkIGVuY3J5cHRlZCBtYXJrZXJzLlxuICAvLyBTZXQgdG8gdHJ1ZSBieSBFdmVudFJvdyB2aWEgb25FbmNyeXB0ZWREYXRhRGV0ZWN0ZWQ7IG5ldmVyIHJlc2V0IChzdGlja3kpLlxuICBjb25zdCBbZm91bmRFbmNyeXB0ZWRJbkxhenlEYXRhLCBzZXRGb3VuZEVuY3J5cHRlZEluTGF6eURhdGFdID1cbiAgICB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZUVuY3J5cHRlZERhdGFEZXRlY3RlZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRGb3VuZEVuY3J5cHRlZEluTGF6eURhdGEodHJ1ZSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYXNFbmNyeXB0ZWREYXRhID1cbiAgICBoYXNFbmNyeXB0ZWREYXRhUHJvcCB8fCBoYXNFbmNyeXB0ZWRJbmxpbmVEYXRhIHx8IGZvdW5kRW5jcnlwdGVkSW5MYXp5RGF0YTtcblxuICBjb25zdCB7IGNvcnJlbGF0aW9uTmFtZU1hcCwgd29ya2Zsb3dOYW1lIH0gPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBidWlsZE5hbWVNYXBzKFxuICAgICAgICBpc0V4YWN0U2VhcmNoQWN0aXZlID8gc2VhcmNoUmVzdWx0cyA6IChldmVudHMgPz8gbnVsbCksXG4gICAgICAgIHJ1biA/PyBudWxsXG4gICAgICApLFxuICAgIFtldmVudHMsIGlzRXhhY3RTZWFyY2hBY3RpdmUsIHJ1biwgc2VhcmNoUmVzdWx0c11cbiAgKTtcblxuICBjb25zdCBkdXJhdGlvbk1hcCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gYnVpbGREdXJhdGlvbk1hcChzb3J0ZWRFdmVudHMsIGR1cGxpY2F0ZUV2ZW50SWRzKSxcbiAgICBbc29ydGVkRXZlbnRzLCBkdXBsaWNhdGVFdmVudElkc11cbiAgKTtcblxuICBjb25zdCBbc2VsZWN0ZWRHcm91cEtleSwgc2V0U2VsZWN0ZWRHcm91cEtleV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBjb25zdCBbaG92ZXJlZEdyb3VwS2V5LCBzZXRIb3ZlcmVkR3JvdXBLZXldID0gdXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPihcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgY29uc3Qgb25TZWxlY3RHcm91cCA9IHVzZUNhbGxiYWNrKChncm91cEtleTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRHcm91cEtleShncm91cEtleSk7XG4gIH0sIFtdKTtcbiAgY29uc3Qgb25Ib3Zlckdyb3VwID0gdXNlQ2FsbGJhY2soKGdyb3VwS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcbiAgICBzZXRIb3ZlcmVkR3JvdXBLZXkoZ3JvdXBLZXkpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgYWN0aXZlR3JvdXBLZXkgPSBzZWxlY3RlZEdyb3VwS2V5ID8/IGhvdmVyZWRHcm91cEtleTtcblxuICAvLyBFeHBhbmRlZCBzdGF0ZSBsaWZ0ZWQgb3V0IG9mIEV2ZW50Um93IHNvIGl0IHN1cnZpdmVzIHZpcnR1YWxpemF0aW9uXG4gIGNvbnN0IFtleHBhbmRlZEV2ZW50SWRzLCBzZXRFeHBhbmRlZEV2ZW50SWRzXSA9IHVzZVN0YXRlPFNldDxzdHJpbmc+PihcbiAgICAoKSA9PiBuZXcgU2V0KClcbiAgKTtcbiAgY29uc3QgdG9nZ2xlRXZlbnRFeHBhbmRlZCA9IHVzZUNhbGxiYWNrKChldmVudElkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRFeHBhbmRlZEV2ZW50SWRzKChwcmV2KSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gbmV3IFNldChwcmV2KTtcbiAgICAgIGlmIChuZXh0LmhhcyhldmVudElkKSkge1xuICAgICAgICBuZXh0LmRlbGV0ZShldmVudElkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHQuYWRkKGV2ZW50SWQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gIH0sIFtdKTtcblxuICAvLyBFdmVudCBkYXRhIGNhY2hlOiByZWYgYXZvaWRzIHJlLXJlbmRlcnMgd2hlbiBjYWNoZSB1cGRhdGVzXG4gIGNvbnN0IGV2ZW50RGF0YUNhY2hlUmVmID0gdXNlUmVmPE1hcDxzdHJpbmcsIHVua25vd24+PihuZXcgTWFwKCkpO1xuICBjb25zdCBjYWNoZUV2ZW50RGF0YSA9IHVzZUNhbGxiYWNrKChldmVudElkOiBzdHJpbmcsIGRhdGE6IHVua25vd24pID0+IHtcbiAgICBldmVudERhdGFDYWNoZVJlZi5jdXJyZW50LnNldChldmVudElkLCBkYXRhKTtcbiAgfSwgW10pO1xuXG4gIC8vIExvb2t1cCBmcm9tIGV2ZW50SWQg4oaSIGdyb3VwS2V5IGZvciBlZmZpY2llbnQgY29sbGFwc2UgZmlsdGVyaW5nXG4gIGNvbnN0IGV2ZW50R3JvdXBLZXlNYXAgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgZXYgb2Ygc29ydGVkRXZlbnRzKSB7XG4gICAgICBjb25zdCBnayA9IGlzUnVuTGV2ZWwoZXYuZXZlbnRUeXBlKVxuICAgICAgICA/ICdfX3J1bl9fJ1xuICAgICAgICA6IChldi5jb3JyZWxhdGlvbklkID8/ICcnKTtcbiAgICAgIGlmIChnaykgbWFwLnNldChldi5ldmVudElkLCBnayk7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH0sIFtzb3J0ZWRFdmVudHNdKTtcblxuICAvLyBDb2xsYXBzZSBleHBhbmRlZCBldmVudHMgdGhhdCBkb24ndCBiZWxvbmcgdG8gdGhlIG5ld2x5IHNlbGVjdGVkIGdyb3VwXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkR3JvdXBLZXkgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIHNldEV4cGFuZGVkRXZlbnRJZHMoKHByZXYpID0+IHtcbiAgICAgIGlmIChwcmV2LnNpemUgPT09IDApIHJldHVybiBwcmV2O1xuICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgIGZvciAoY29uc3QgZXZlbnRJZCBvZiBwcmV2KSB7XG4gICAgICAgIGlmIChldmVudEdyb3VwS2V5TWFwLmdldChldmVudElkKSA9PT0gc2VsZWN0ZWRHcm91cEtleSkge1xuICAgICAgICAgIG5leHQuYWRkKGV2ZW50SWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2hhbmdlZCA/IG5leHQgOiBwcmV2O1xuICAgIH0pO1xuICB9LCBbc2VsZWN0ZWRHcm91cEtleSwgZXZlbnRHcm91cEtleU1hcF0pO1xuXG4gIC8vIENvbXB1dGUgdGhlIHJvdy1pbmRleCByYW5nZSBmb3IgdGhlIGFjdGl2ZSBncm91cCdzIGNvbm5lY3RpbmcgbGFuZSBsaW5lLlxuICAvLyBPbmx5IGFwcGxpZXMgdG8gbm9uLXJ1biBncm91cHMgKHN0ZXAvaG9vay93YWl0IGNvcnJlbGF0aW9ucykuXG4gIGNvbnN0IHNlbGVjdGVkR3JvdXBSYW5nZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghYWN0aXZlR3JvdXBLZXkgfHwgYWN0aXZlR3JvdXBLZXkgPT09ICdfX3J1bl9fJykgcmV0dXJuIG51bGw7XG4gICAgbGV0IGZpcnN0ID0gLTE7XG4gICAgbGV0IGxhc3QgPSAtMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZEV2ZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHNvcnRlZEV2ZW50c1tpXS5jb3JyZWxhdGlvbklkID09PSBhY3RpdmVHcm91cEtleSkge1xuICAgICAgICBpZiAoZmlyc3QgPT09IC0xKSBmaXJzdCA9IGk7XG4gICAgICAgIGxhc3QgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlyc3QgPj0gMCA/IHsgZmlyc3QsIGxhc3QgfSA6IG51bGw7XG4gIH0sIFthY3RpdmVHcm91cEtleSwgc29ydGVkRXZlbnRzXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB0cmltbWVkID0gc2VhcmNoUXVlcnkudHJpbSgpO1xuICAgIGlmICghdHJpbW1lZCkge1xuICAgICAgc2VhcmNoUmVxdWVzdFJlZi5jdXJyZW50ICs9IDE7XG4gICAgICBzZXRTZWFyY2hSZXN1bHRzKG51bGwpO1xuICAgICAgc2V0U2VhcmNoUmVzdWx0c1RydW5jYXRlZChmYWxzZSk7XG4gICAgICBzZXRTZWFyY2hFcnJvcihudWxsKTtcbiAgICAgIHNldFNlYXJjaExvYWRpbmcoZmFsc2UpO1xuICAgICAgc2V0U2VhcmNoTm90Rm91bmQoZmFsc2UpO1xuICAgICAgc2V0U2VsZWN0ZWRHcm91cEtleSh1bmRlZmluZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlRXhhY3RXb3JrZmxvd1NlYXJjaElkKHRyaW1tZWQpO1xuICAgIGlmICghcGFyc2VkIHx8ICFvbkV4YWN0SWRTZWFyY2gpIHtcbiAgICAgIHNldFNlYXJjaFJlc3VsdHMobnVsbCk7XG4gICAgICBzZXRTZWFyY2hMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldFNlYXJjaE5vdEZvdW5kKGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0SWQgPSArK3NlYXJjaFJlcXVlc3RSZWYuY3VycmVudDtcbiAgICBzZXRTZWFyY2hMb2FkaW5nKHRydWUpO1xuICAgIHNldFNlYXJjaE5vdEZvdW5kKGZhbHNlKTtcbiAgICBzZXRTZWFyY2hFcnJvcihudWxsKTtcblxuICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IG9uRXhhY3RJZFNlYXJjaChcbiAgICAgICAgICAgIHBhcnNlZC5pZCxcbiAgICAgICAgICAgIHBhcnNlZC5raW5kLFxuICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkIHx8XG4gICAgICAgICAgICBzZWFyY2hSZXF1ZXN0UmVmLmN1cnJlbnQgIT09IHJlcXVlc3RJZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZXN1bHRzLnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgICAgc2V0U2VhcmNoUmVzdWx0cyhbXSk7XG4gICAgICAgICAgICBzZXRTZWFyY2hSZXN1bHRzVHJ1bmNhdGVkKGZhbHNlKTtcbiAgICAgICAgICAgIHNldFNlYXJjaE5vdEZvdW5kKGZhbHNlKTtcbiAgICAgICAgICAgIHNldFNlYXJjaEVycm9yKHJlc3VsdHMubWVzc2FnZSk7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEdyb3VwS2V5KHVuZGVmaW5lZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVzdWx0cy5zdGF0dXMgPT09ICdub3RfZm91bmQnIHx8XG4gICAgICAgICAgICAocmVzdWx0cy5zdGF0dXMgPT09ICdvaycgJiYgcmVzdWx0cy5ldmVudHMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgc2V0U2VhcmNoUmVzdWx0cyhbXSk7XG4gICAgICAgICAgICBzZXRTZWFyY2hSZXN1bHRzVHJ1bmNhdGVkKGZhbHNlKTtcbiAgICAgICAgICAgIHNldFNlYXJjaE5vdEZvdW5kKHRydWUpO1xuICAgICAgICAgICAgc2V0U2VhcmNoRXJyb3IobnVsbCk7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZEdyb3VwS2V5KHVuZGVmaW5lZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2V0U2VhcmNoUmVzdWx0cyhyZXN1bHRzLmV2ZW50cyk7XG4gICAgICAgICAgc2V0U2VhcmNoUmVzdWx0c1RydW5jYXRlZChCb29sZWFuKHJlc3VsdHMudHJ1bmNhdGVkKSk7XG4gICAgICAgICAgc2V0U2VhcmNoTm90Rm91bmQoZmFsc2UpO1xuICAgICAgICAgIHNldFNlYXJjaEVycm9yKG51bGwpO1xuICAgICAgICAgIHNldFNlbGVjdGVkR3JvdXBLZXkoXG4gICAgICAgICAgICBwYXJzZWQua2luZCA9PT0gJ2V2ZW50J1xuICAgICAgICAgICAgICA/ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdCA9IHJlc3VsdHMuZXZlbnRzWzBdO1xuICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpc1J1bkxldmVsKGZpcnN0LmV2ZW50VHlwZSlcbiAgICAgICAgICAgICAgICAgICAgPyAnX19ydW5fXydcbiAgICAgICAgICAgICAgICAgICAgOiAoZmlyc3QuY29ycmVsYXRpb25JZCA/PyB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH0pKClcbiAgICAgICAgICAgICAgOiBwYXJzZWQuaWRcbiAgICAgICAgICApO1xuICAgICAgICAgIHZpcnR1b3NvUmVmLmN1cnJlbnQ/LnNjcm9sbFRvSW5kZXgoe1xuICAgICAgICAgICAgaW5kZXg6IDAsXG4gICAgICAgICAgICBhbGlnbjogJ3N0YXJ0JyxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkIHx8XG4gICAgICAgICAgICBzZWFyY2hSZXF1ZXN0UmVmLmN1cnJlbnQgIT09IHJlcXVlc3RJZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRTZWFyY2hSZXN1bHRzKFtdKTtcbiAgICAgICAgICBzZXRTZWFyY2hSZXN1bHRzVHJ1bmNhdGVkKGZhbHNlKTtcbiAgICAgICAgICBzZXRTZWFyY2hOb3RGb3VuZChmYWxzZSk7XG4gICAgICAgICAgc2V0U2VhcmNoRXJyb3IoJ0ZhaWxlZCB0byBzZWFyY2ggZXZlbnRzLiBUcnkgYWdhaW4uJyk7XG4gICAgICAgICAgc2V0U2VsZWN0ZWRHcm91cEtleSh1bmRlZmluZWQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHNlYXJjaFJlcXVlc3RSZWYuY3VycmVudCA9PT0gcmVxdWVzdElkICYmXG4gICAgICAgICAgICAhYWJvcnRDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBzZXRTZWFyY2hMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pKCk7XG4gICAgfSwgMzAwKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgfTtcbiAgfSwgW3NlYXJjaFF1ZXJ5LCBvbkV4YWN0SWRTZWFyY2hdKTtcblxuICBjb25zdCBoYW5kbGVTZWFyY2hLZXlEb3duID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdEtleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdFbnRlcicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmltbWVkID0gc2VhcmNoUXVlcnkudHJpbSgpO1xuICAgICAgaWYgKFxuICAgICAgICAhdHJpbW1lZCB8fFxuICAgICAgICBwYXJzZUV4YWN0V29ya2Zsb3dTZWFyY2hJZCh0cmltbWVkKSB8fFxuICAgICAgICAhb25FeGFjdElkU2VhcmNoIHx8XG4gICAgICAgICFsb29rc0xpa2VXb3JrZmxvd0lkU2VhcmNoSW5wdXQodHJpbW1lZClcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRvYXN0LmluZm8oJ0VudGVyIGEgZnVsbCBzdGVwIElELCB3YWl0IElELCBob29rIElELCBvciBldmVudCBJRCcpO1xuICAgIH0sXG4gICAgW3NlYXJjaFF1ZXJ5LCBvbkV4YWN0SWRTZWFyY2gsIHRvYXN0XVxuICApO1xuXG4gIC8vIFRyYWNrIHdoZXRoZXIgd2UndmUgZXZlciBoYWQgZXZlbnRzIHRvIGRpc3Rpbmd1aXNoIGluaXRpYWwgbG9hZCBmcm9tIHJlZmV0Y2hcbiAgY29uc3QgaGFzSGFkRXZlbnRzUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgaWYgKHNvcnRlZEV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgaGFzSGFkRXZlbnRzUmVmLmN1cnJlbnQgPSB0cnVlO1xuICB9XG4gIGNvbnN0IGlzSW5pdGlhbExvYWQgPSBpc0xvYWRpbmcgJiYgIWhhc0hhZEV2ZW50c1JlZi5jdXJyZW50O1xuICBjb25zdCBpc1JlZmV0Y2hpbmcgPVxuICAgIGlzTG9hZGluZyAmJiBoYXNIYWRFdmVudHNSZWYuY3VycmVudCAmJiBzb3J0ZWRFdmVudHMubGVuZ3RoID09PSAwO1xuXG4gIGlmIChpc0luaXRpYWxMb2FkKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1mdWxsIGZsZXggZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgIHsvKiBTa2VsZXRvbiBzZWFyY2ggYmFyICovfVxuICAgICAgICA8ZGl2IHN0eWxlPXt7IHBhZGRpbmc6IDYgfX0+XG4gICAgICAgICAgPFNrZWxldG9uIHN0eWxlPXt7IGhlaWdodDogNDAsIGJvcmRlclJhZGl1czogNiB9fSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgey8qIFNrZWxldG9uIGhlYWRlciAqL31cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0wIGgtMTAgYm9yZGVyLWIgZmxleC1zaHJpbmstMFwiXG4gICAgICAgICAgc3R5bGU9e3sgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LWFscGhhLTIwMCknIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtc2hyaW5rLTBcIiBzdHlsZT17eyB3aWR0aDogR1VUVEVSX1dJRFRIIH19IC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTUgZmxleC1zaHJpbmstMFwiIC8+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fT5cbiAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTNcIiBzdHlsZT17eyB3aWR0aDogNDAgfX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19PlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiA3MiB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zXCIgc3R5bGU9e3sgd2lkdGg6IDQ0IH19IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMyAxIDAlJyB9fT5cbiAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTNcIiBzdHlsZT17eyB3aWR0aDogOTIgfX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICczIDEgMCUnIH19PlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtM1wiIHN0eWxlPXt7IHdpZHRoOiA2MCB9fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPFJvd3NTa2VsZXRvbiAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPERlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXJcbiAgICAgIHZhbHVlPXtcbiAgICAgICAgb25EZWNyeXB0XG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIG9uRGVjcnlwdCxcbiAgICAgICAgICAgICAgaXNEZWNyeXB0aW5nLFxuICAgICAgICAgICAgICBpc0RlY3J5cHREaXNhYmxlZCxcbiAgICAgICAgICAgICAgZGVjcnlwdERpc2FibGVkUmVhc29uLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLWZ1bGwgZmxleCBmbGV4LWNvbCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgPHN0eWxlPntgQGtleWZyYW1lcyB3b3JrZmxvdy1kb3QtcHVsc2V7MCV7dHJhbnNmb3JtOnNjYWxlKDEpO29wYWNpdHk6Ljd9NzAlLDEwMCV7dHJhbnNmb3JtOnNjYWxlKDIuMik7b3BhY2l0eTowfX1gfTwvc3R5bGU+XG4gICAgICAgIHsvKiBTZWFyY2ggYmFyICsgc29ydCAqL31cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBwYWRkaW5nOiA2LFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtYmFja2dyb3VuZC0xMDApJyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgIGdhcDogNixcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogNixcbiAgICAgICAgICAgICAgYm94U2hhZG93OiAnMCAwIDAgMXB4IHZhcigtLWRzLWdyYXktYWxwaGEtNDAwKScsXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgICAgICBoZWlnaHQ6IDQwLFxuICAgICAgICAgICAgICBmbGV4OiAxLFxuICAgICAgICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHdpZHRoOiA0MCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwLFxuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTgwMCknLFxuICAgICAgICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICB3aWR0aD17MTZ9XG4gICAgICAgICAgICAgICAgaGVpZ2h0PXsxNn1cbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBmb2N1c2FibGU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICAgICAgICBjeD1cIjdcIlxuICAgICAgICAgICAgICAgICAgY3k9XCI3XCJcbiAgICAgICAgICAgICAgICAgIHI9XCI0LjVcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICBkPVwiTTExLjUgMTEuNUwxNCAxNFwiXG4gICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBieSBzdGVwIElELCB3YWl0IElELCBob29rIElELCBvciBldmVudCBJROKAplwiXG4gICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2hRdWVyeShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlU2VhcmNoS2V5RG93bn1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFvbkV4YWN0SWRTZWFyY2h9XG4gICAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICBvbkV4YWN0SWRTZWFyY2hcbiAgICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICA6ICdFeGFjdCBJRCBzZWFyY2ggaXMgdW5hdmFpbGFibGUgaW4gdGhpcyB2aWV3LidcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IC0xNixcbiAgICAgICAgICAgICAgICBwYWRkaW5nSW5saW5lOiAxMixcbiAgICAgICAgICAgICAgICBmb250RmFtaWx5OiAnaW5oZXJpdCcsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IDE0LFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgb3V0bGluZTogJ25vbmUnLFxuICAgICAgICAgICAgICAgIGhlaWdodDogNDAsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiBvbkV4YWN0SWRTZWFyY2ggPyAxIDogMC41LFxuICAgICAgICAgICAgICAgIGN1cnNvcjogb25FeGFjdElkU2VhcmNoID8gJ3RleHQnIDogJ25vdC1hbGxvd2VkJyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8TWVudURyb3Bkb3duXG4gICAgICAgICAgICBvcHRpb25zPXtTT1JUX09QVElPTlN9XG4gICAgICAgICAgICB2YWx1ZT17ZWZmZWN0aXZlU29ydE9yZGVyfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVNvcnRPcmRlckNoYW5nZX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHsoaGFzRW5jcnlwdGVkRGF0YSB8fCBlbmNyeXB0aW9uS2V5KSAmJiBvbkRlY3J5cHQgJiYgKFxuICAgICAgICAgICAgPERlY3J5cHRCdXR0b25cbiAgICAgICAgICAgICAgZGVjcnlwdGVkPXshIWVuY3J5cHRpb25LZXl9XG4gICAgICAgICAgICAgIGxvYWRpbmc9e2lzRGVjcnlwdGluZ31cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRGVjcnlwdERpc2FibGVkfVxuICAgICAgICAgICAgICBkaXNhYmxlZFJlYXNvbj17ZGVjcnlwdERpc2FibGVkUmVhc29ufVxuICAgICAgICAgICAgICBvbkNsaWNrPXtvbkRlY3J5cHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMCB0ZXh0LWxhYmVsLTEzIGZvbnQtbWVkaXVtIGgtMTAgYm9yZGVyLWIgZmxleC1zaHJpbmstMFwiXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiAndmFyKC0tZHMtZ3JheS1hbHBoYS0yMDApJyxcbiAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyxcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLWJhY2tncm91bmQtMTAwKScsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC1zaHJpbmstMFwiIHN0eWxlPXt7IHdpZHRoOiBHVVRURVJfV0lEVEggfX0gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctNSBmbGV4LXNocmluay0wXCIgLz5cbiAgICAgICAgICB7c2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcyAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19PlxuICAgICAgICAgICAgICBPY2N1cnJlZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICcyIDEgMCUnIH19PlxuICAgICAgICAgICAgQ3JlYXRlZFxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBweC00XCIgc3R5bGU9e3sgZmxleDogJzIgMSAwJScgfX0+XG4gICAgICAgICAgICBFdmVudCBUeXBlXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wIHB4LTRcIiBzdHlsZT17eyBmbGV4OiAnMiAxIDAlJyB9fT5cbiAgICAgICAgICAgIE5hbWVcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICczIDEgMCUnIH19PlxuICAgICAgICAgICAgQ29ycmVsYXRpb24gSURcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgcHgtNFwiIHN0eWxlPXt7IGZsZXg6ICczIDEgMCUnIH19PlxuICAgICAgICAgICAgRXZlbnQgSURcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgey8qIFZpcnR1YWxpemVkIGV2ZW50IHJvd3Mgb3IgcmVmZXRjaGluZyBza2VsZXRvbiAqL31cbiAgICAgICAge2lzUmVmZXRjaGluZyB8fCBzZWFyY2hMb2FkaW5nID8gKFxuICAgICAgICAgIDxSb3dzU2tlbGV0b25cbiAgICAgICAgICAgIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHM9e1xuICAgICAgICAgICAgICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IHNvcnRlZEV2ZW50cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB4LTYgdGV4dC1jZW50ZXIgdGV4dC1jb3B5LTE0XCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtzZWFyY2hOb3RGb3VuZCAmJiBzZWFyY2hRdWVyeS50cmltKClcbiAgICAgICAgICAgICAgPyBgTm8gZXZlbnRzIGZvdW5kIGZvciAke3NlYXJjaFF1ZXJ5LnRyaW0oKX1gXG4gICAgICAgICAgICAgIDogc2VhcmNoRXJyb3JcbiAgICAgICAgICAgICAgICA/IHNlYXJjaEVycm9yXG4gICAgICAgICAgICAgICAgOiBwYXJzZWRTZWFyY2hJZCAmJiBzZWFyY2hRdWVyeS50cmltKCkgJiYgIW9uRXhhY3RJZFNlYXJjaFxuICAgICAgICAgICAgICAgICAgPyAnRXhhY3QgSUQgc2VhcmNoIGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgdmlldy4nXG4gICAgICAgICAgICAgICAgICA6ICdObyBldmVudHMgZm91bmQnfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxWaXJ0dW9zb1xuICAgICAgICAgICAgcmVmPXt2aXJ0dW9zb1JlZn1cbiAgICAgICAgICAgIHRvdGFsQ291bnQ9e3NvcnRlZEV2ZW50cy5sZW5ndGh9XG4gICAgICAgICAgICBvdmVyc2Nhbj17MjB9XG4gICAgICAgICAgICBkZWZhdWx0SXRlbUhlaWdodD17NDB9XG4gICAgICAgICAgICBlbmRSZWFjaGVkPXsoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBpc0V4YWN0U2VhcmNoQWN0aXZlIHx8XG4gICAgICAgICAgICAgICAgIWhhc01vcmVFdmVudHMgfHxcbiAgICAgICAgICAgICAgICBpc0xvYWRpbmdNb3JlRXZlbnRzXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2b2lkIG9uTG9hZE1vcmVFdmVudHM/LigpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGl0ZW1Db250ZW50PXsoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBldiA9IHNvcnRlZEV2ZW50c1tpbmRleF07XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEV2ZW50Um93XG4gICAgICAgICAgICAgICAgICBldmVudD17ZXZ9XG4gICAgICAgICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICBpc0ZpcnN0PXtpbmRleCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgIGlzTGFzdD17aW5kZXggPT09IHNvcnRlZEV2ZW50cy5sZW5ndGggLSAxfVxuICAgICAgICAgICAgICAgICAgaXNFeHBhbmRlZD17ZXhwYW5kZWRFdmVudElkcy5oYXMoZXYuZXZlbnRJZCl9XG4gICAgICAgICAgICAgICAgICBvblRvZ2dsZUV4cGFuZD17dG9nZ2xlRXZlbnRFeHBhbmRlZH1cbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUdyb3VwS2V5PXthY3RpdmVHcm91cEtleX1cbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkR3JvdXBLZXk9e3NlbGVjdGVkR3JvdXBLZXl9XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZEdyb3VwUmFuZ2U9e3NlbGVjdGVkR3JvdXBSYW5nZX1cbiAgICAgICAgICAgICAgICAgIGNvcnJlbGF0aW9uTmFtZU1hcD17Y29ycmVsYXRpb25OYW1lTWFwfVxuICAgICAgICAgICAgICAgICAgd29ya2Zsb3dOYW1lPXt3b3JrZmxvd05hbWV9XG4gICAgICAgICAgICAgICAgICBkdXJhdGlvbk1hcD17ZHVyYXRpb25NYXB9XG4gICAgICAgICAgICAgICAgICBvblNlbGVjdEdyb3VwPXtvblNlbGVjdEdyb3VwfVxuICAgICAgICAgICAgICAgICAgb25Ib3Zlckdyb3VwPXtvbkhvdmVyR3JvdXB9XG4gICAgICAgICAgICAgICAgICBvbkxvYWRFdmVudERhdGE9e29uTG9hZEV2ZW50RGF0YX1cbiAgICAgICAgICAgICAgICAgIGNhY2hlZEV2ZW50RGF0YT17XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50RGF0YUNhY2hlUmVmLmN1cnJlbnQuZ2V0KGV2LmV2ZW50SWQpID8/IG51bGxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG9uQ2FjaGVFdmVudERhdGE9e2NhY2hlRXZlbnREYXRhfVxuICAgICAgICAgICAgICAgICAgZW5jcnlwdGlvbktleT17ZW5jcnlwdGlvbktleX1cbiAgICAgICAgICAgICAgICAgIG9uRW5jcnlwdGVkRGF0YURldGVjdGVkPXtoYW5kbGVFbmNyeXB0ZWREYXRhRGV0ZWN0ZWR9XG4gICAgICAgICAgICAgICAgICBzdXBwcmVzc0dyb3VwRGltbWluZz17aXNFeGFjdFNlYXJjaEFjdGl2ZX1cbiAgICAgICAgICAgICAgICAgIGlzRHVwbGljYXRlPXtkdXBsaWNhdGVFdmVudElkcy5oYXMoZXYuZXZlbnRJZCl9XG4gICAgICAgICAgICAgICAgICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzPXtcbiAgICAgICAgICAgICAgICAgICAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wc1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgc3R5bGU9e3sgZmxleDogMSwgbWluSGVpZ2h0OiAwIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cblxuICAgICAgICB7LyogRml4ZWQgZm9vdGVyOiBjb3VudCArIGxvYWQgbW9yZSAqL31cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXgtc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIgaC0xMCBib3JkZXItdCBweC00IHRleHQtbGFiZWwtMTJcIlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktYWxwaGEtMjAwKScsXG4gICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIHtpc0V4YWN0U2VhcmNoQWN0aXZlXG4gICAgICAgICAgICAgID8gc2VhcmNoRXJyb3JcbiAgICAgICAgICAgICAgICA/IHNlYXJjaEVycm9yXG4gICAgICAgICAgICAgICAgOiBzZWFyY2hOb3RGb3VuZFxuICAgICAgICAgICAgICAgICAgPyBgTm8gZXZlbnRzIGZvdW5kIGZvciAke3NlYXJjaFF1ZXJ5LnRyaW0oKX1gXG4gICAgICAgICAgICAgICAgICA6IGAke3NvcnRlZEV2ZW50cy5sZW5ndGh9IGV2ZW50JHtzb3J0ZWRFdmVudHMubGVuZ3RoICE9PSAxID8gJ3MnIDogJyd9IGZvciAke3NlYXJjaFF1ZXJ5LnRyaW0oKX0ke3NlYXJjaFJlc3VsdHNUcnVuY2F0ZWQgPyAnIChyZXN1bHRzIG1heSBiZSB0cnVuY2F0ZWQpJyA6ICcnfWBcbiAgICAgICAgICAgICAgOiBgJHtzb3J0ZWRFdmVudHMubGVuZ3RofSBldmVudCR7c29ydGVkRXZlbnRzLmxlbmd0aCAhPT0gMSA/ICdzJyA6ICcnfSBsb2FkZWRgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB7IWlzRXhhY3RTZWFyY2hBY3RpdmUgJiYgaGFzTW9yZUV2ZW50cyAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8TG9hZE1vcmVCdXR0b25cbiAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e2lzTG9hZGluZ01vcmVFdmVudHN9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB2b2lkIG9uTG9hZE1vcmVFdmVudHM/LigpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L0RlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFdmVudExpc3RWaWV3KHByb3BzOiBFdmVudHNMaXN0UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8Q29udGV4dENhcmRQcm92aWRlcj5cbiAgICAgIDxFdmVudExpc3RWaWV3SW5uZXIgey4uLnByb3BzfSAvPlxuICAgIDwvQ29udGV4dENhcmRQcm92aWRlcj5cbiAgKTtcbn1cbiJdfQ==