@workflow/web-shared 5.0.0-beta.46 → 5.0.0-beta.48
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.
- package/dist/components/event-list-view.js +3 -3
- package/dist/components/trace-viewer/components/use-alt-held.d.ts +11 -0
- package/dist/components/trace-viewer/components/use-alt-held.d.ts.map +1 -0
- package/dist/components/trace-viewer/components/use-alt-held.js +48 -0
- package/dist/components/trace-viewer/trace-viewer.d.ts.map +1 -1
- package/dist/components/trace-viewer/trace-viewer.js +4 -17
- package/dist/components/trace-viewer.d.ts +4 -1
- package/dist/components/trace-viewer.d.ts.map +1 -1
- package/dist/components/trace-viewer.js +4 -3
- package/dist/components/ui/data-inspector.d.ts +3 -2
- package/dist/components/ui/data-inspector.d.ts.map +1 -1
- package/dist/components/ui/data-inspector.js +85 -8
- package/dist/components/workflow-traces/trace-span-construction.d.ts +2 -1
- package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
- package/dist/components/workflow-traces/trace-span-construction.js +7 -3
- package/dist/lib/duplicate-events.d.ts.map +1 -1
- package/dist/lib/duplicate-events.js +14 -25
- package/dist/lib/hydration.d.ts.map +1 -1
- package/dist/lib/hydration.js +13 -1
- package/dist/lib/trace-builder.d.ts +3 -1
- package/dist/lib/trace-builder.d.ts.map +1 -1
- package/dist/lib/trace-builder.js +5 -5
- package/package.json +8 -8
- package/src/components/event-list-view.tsx +2 -2
- package/src/components/trace-viewer/components/use-alt-held.ts +54 -0
- package/src/components/trace-viewer/trace-viewer.tsx +3 -15
- package/src/components/trace-viewer.tsx +6 -1
- package/src/components/ui/data-inspector.tsx +105 -9
- package/src/components/workflow-traces/trace-span-construction.ts +14 -2
- package/src/lib/duplicate-events.ts +14 -26
- package/src/lib/hydration.ts +12 -0
- package/src/lib/trace-builder.test.ts +42 -1
- package/src/lib/trace-builder.ts +13 -4
|
@@ -171,7 +171,7 @@ export const stepEventsToStepEntity = (events) => {
|
|
|
171
171
|
/**
|
|
172
172
|
* Converts step events to an OpenTelemetry Span
|
|
173
173
|
*/
|
|
174
|
-
export function stepToSpan(stepEvents, maxEndTime) {
|
|
174
|
+
export function stepToSpan(stepEvents, maxEndTime, getStepAttributes) {
|
|
175
175
|
const step = stepEventsToStepEntity(stepEvents);
|
|
176
176
|
if (!step) {
|
|
177
177
|
return null;
|
|
@@ -180,7 +180,11 @@ export function stepToSpan(stepEvents, maxEndTime) {
|
|
|
180
180
|
parseWorkflowName(String(step.stepName));
|
|
181
181
|
const attributes = {
|
|
182
182
|
resource: 'step',
|
|
183
|
-
data:
|
|
183
|
+
data: {
|
|
184
|
+
...getStepAttributes?.(stepEvents),
|
|
185
|
+
// Canonical event-derived fields cannot be overridden by extensions.
|
|
186
|
+
...step,
|
|
187
|
+
},
|
|
184
188
|
};
|
|
185
189
|
const resource = 'step';
|
|
186
190
|
// Include ALL correlated events on the span so the sidebar detail view
|
|
@@ -333,4 +337,4 @@ export function runToSpan(run, runEvents, nowTime) {
|
|
|
333
337
|
: undefined,
|
|
334
338
|
};
|
|
335
339
|
}
|
|
336
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utc3Bhbi1jb25zdHJ1Y3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy93b3JrZmxvdy10cmFjZXMvdHJhY2Utc3Bhbi1jb25zdHJ1Y3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUVMLHVCQUF1QixHQUV4QixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV2RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixJQUFJLEVBQUUsMEJBQTBCO0lBQ2hDLE9BQU8sRUFBRSxPQUFPO0NBQ2pCLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sa0JBQWtCLEdBQTRCLElBQUksR0FBRyxDQUFDO0lBQzFELGNBQWM7SUFDZCxlQUFlO0lBQ2YsZUFBZTtJQUNmLGNBQWM7SUFDZCxlQUFlO0lBQ2YsYUFBYTtJQUNiLFlBQVk7SUFDWixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLFVBQVU7Q0FDWCxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixLQUF3QixFQUNOLEVBQUU7SUFDcEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUFFLFVBQVUsSUFBSSxLQUFLLEVBQUUsU0FBUyxDQUFDO0lBQ3BELElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFN0IsTUFBTSxJQUFJLEdBQUcsS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3RCxP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RixDQUFDO0lBRUYsMENBQTBDO0lBQzFDLE1BQU0sTUFBTSxHQUFHLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDekQsZ0JBQWdCLEVBQUUsSUFBSTtLQUN2QixDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ3pCLElBQUksRUFBRSxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLFNBQVMsSUFBSSxHQUFHLENBQUM7UUFDbkUsSUFBSSxFQUFFLENBQUMsRUFBRSxxQkFBcUI7UUFDOUIsUUFBUSxFQUFFLEtBQUs7UUFDZixPQUFPLEVBQUUsZ0JBQWdCO1FBQ3pCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7UUFDbkIsVUFBVSxFQUFFLENBQUM7UUFDYixVQUFVO1FBQ1YsS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNO1FBQ04sU0FBUyxFQUFFLGNBQWMsQ0FBQyxhQUFhLENBQUM7UUFDeEMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUM7UUFDaEMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUM7UUFDbkQsMEZBQTBGO1FBQzFGLGVBQWUsRUFDYixlQUFlLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRSxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUU7WUFDcEUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUM7WUFDakMsQ0FBQyxDQUFDLFNBQVM7S0FDaEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZ1bmN0aW9ucyBmb3IgY29uc3RydWN0aW5nIE9wZW5UZWxlbWV0cnkgc3BhbnMgZnJvbSB3b3JrZmxvdyBlbnRpdGllc1xuICovXG5cbmltcG9ydCB7IHBhcnNlU3RlcE5hbWUsIHBhcnNlV29ya2Zsb3dOYW1lIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzL3BhcnNlLW5hbWUnO1xuaW1wb3J0IHtcbiAgdHlwZSBFdmVudCxcbiAgaXNUZXJtaW5hbFN0ZXBFdmVudFR5cGUsXG4gIHR5cGUgV29ya2Zsb3dSdW4sXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IFNwYW4sIFNwYW5FdmVudCB9IGZyb20gJy4uLy4uL2xpYi90cmFjZS10eXBlcyc7XG5pbXBvcnQgeyBzaG91bGRTaG93VmVydGljYWxMaW5lIH0gZnJvbSAnLi9ldmVudC1jb2xvcnMnO1xuaW1wb3J0IHsgY2FsY3VsYXRlRHVyYXRpb24sIGRhdGVUb090ZWxUaW1lIH0gZnJvbSAnLi90cmFjZS10aW1lLXV0aWxzJztcblxuZXhwb3J0IGNvbnN0IFdPUktGTE9XX0xJQlJBUlkgPSB7XG4gIG5hbWU6ICd3b3JrZmxvdy1kZXZlbG9wbWVudC1raXQnLFxuICB2ZXJzaW9uOiAnNC4wLjAnLFxufTtcblxuLyoqXG4gKiBFdmVudCB0eXBlcyB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgdmlzdWFsIG1hcmtlcnMgaW4gdGhlIHRyYWNlIHZpZXdlclxuICovXG5jb25zdCBNQVJLRVJfRVZFTlRfVFlQRVM6IFNldDxFdmVudFsnZXZlbnRUeXBlJ10+ID0gbmV3IFNldChbXG4gICdob29rX2NyZWF0ZWQnLFxuICAnaG9va19yZWNlaXZlZCcsXG4gICdob29rX2Rpc3Bvc2VkJyxcbiAgJ3N0ZXBfc3RhcnRlZCcsXG4gICdzdGVwX3JldHJ5aW5nJyxcbiAgJ3N0ZXBfZmFpbGVkJyxcbiAgJ3J1bl9mYWlsZWQnLFxuICAnd2FpdF9jcmVhdGVkJyxcbiAgJ3dhaXRfY29tcGxldGVkJyxcbiAgJ2F0dHJfc2V0Jyxcbl0pO1xuXG5leHBvcnQgY29uc3QgZ2V0RXZlbnRUaW1lc3RhbXAgPSAoXG4gIGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZFxuKTogRGF0ZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IHZhbHVlID0gZXZlbnQ/Lm9jY3VycmVkQXQgPz8gZXZlbnQ/LmNyZWF0ZWRBdDtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBkYXRlID0gdmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gdmFsdWUgOiBuZXcgRGF0ZSh2YWx1ZSk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpID8gdW5kZWZpbmVkIDogZGF0ZTtcbn07XG5cbi8qKlxuICogQ29udmVydCB3b3JrZmxvdyBldmVudHMgdG8gc3BhbiBldmVudHNcbiAqIE9ubHkgaW5jbHVkZXMgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBhcyBtYXJrZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RXZlbnRzVG9TcGFuRXZlbnRzKFxuICBldmVudHM6IEV2ZW50W10sXG4gIGZpbHRlclR5cGVzID0gdHJ1ZSxcbiAgb3B0aW9uczogeyBwcmVmZXJPY2N1cnJlZEF0PzogYm9vbGVhbiB9ID0ge31cbik6IFNwYW5FdmVudFtdIHtcbiAgcmV0dXJuIGV2ZW50c1xuICAgIC5maWx0ZXIoKGV2ZW50KSA9PlxuICAgICAgZmlsdGVyVHlwZXMgPyBNQVJLRVJfRVZFTlRfVFlQRVMuaGFzKGV2ZW50LmV2ZW50VHlwZSkgOiB0cnVlXG4gICAgKVxuICAgIC5tYXAoKGV2ZW50KSA9PiAoe1xuICAgICAgbmFtZTogZXZlbnQuZXZlbnRUeXBlLFxuICAgICAgdGltZXN0YW1wOiBkYXRlVG9PdGVsVGltZShcbiAgICAgICAgb3B0aW9ucy5wcmVmZXJPY2N1cnJlZEF0XG4gICAgICAgICAgPyAoZ2V0RXZlbnRUaW1lc3RhbXAoZXZlbnQpID8/IGV2ZW50LmNyZWF0ZWRBdClcbiAgICAgICAgICA6IGV2ZW50LmNyZWF0ZWRBdFxuICAgICAgKSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCxcbiAgICAgICAgY29ycmVsYXRpb25JZDogZXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICAgICAgZXZlbnREYXRhOiAnZXZlbnREYXRhJyBpbiBldmVudCA/IGV2ZW50LmV2ZW50RGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICAvLyBDb250cm9sIHdoZXRoZXIgdG8gc2hvdyB2ZXJ0aWNhbCBsaW5lIGluIHRpbWVsaW5lXG4gICAgICBzaG93VmVydGljYWxMaW5lOiBzaG91bGRTaG93VmVydGljYWxMaW5lKGV2ZW50LmV2ZW50VHlwZSksXG4gICAgfSkpO1xufVxuXG5leHBvcnQgY29uc3Qgd2FpdEV2ZW50c1RvV2FpdEVudGl0eSA9IChcbiAgZXZlbnRzOiBFdmVudFtdXG4pOiB7XG4gIHdhaXRJZDogc3RyaW5nO1xuICBydW5JZDogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IERhdGU7XG4gIHJlc3VtZUF0PzogRGF0ZTtcbiAgY29tcGxldGVkQXQ/OiBEYXRlO1xufSB8IG51bGwgPT4ge1xuICBjb25zdCBzdGFydEV2ZW50ID0gZXZlbnRzLmZpbmQoKGV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnKTtcbiAgaWYgKCFzdGFydEV2ZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgY29tcGxldGVkRXZlbnQgPSBldmVudHMuZmluZChcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJ1xuICApO1xuICByZXR1cm4ge1xuICAgIHdhaXRJZDogc3RhcnRFdmVudC5jb3JyZWxhdGlvbklkLFxuICAgIHJ1bklkOiBzdGFydEV2ZW50LnJ1bklkLFxuICAgIGNyZWF0ZWRBdDogZ2V0RXZlbnRUaW1lc3RhbXAoc3RhcnRFdmVudCkgPz8gc3RhcnRFdmVudC5jcmVhdGVkQXQsXG4gICAgcmVzdW1lQXQ6IHN0YXJ0RXZlbnQuZXZlbnREYXRhPy5yZXN1bWVBdFxuICAgICAgPyBuZXcgRGF0ZShzdGFydEV2ZW50LmV2ZW50RGF0YS5yZXN1bWVBdClcbiAgICAgIDogdW5kZWZpbmVkLFxuICAgIGNvbXBsZXRlZEF0OiBnZXRFdmVudFRpbWVzdGFtcChjb21wbGV0ZWRFdmVudCksXG4gIH07XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgd29ya2Zsb3cgV2FpdCB0byBhbiBPcGVuVGVsZW1ldHJ5IFNwYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhaXRUb1NwYW4oXG4gIGV2ZW50czogRXZlbnRbXSxcbiAgbWF4RW5kVGltZTogRGF0ZSxcbiAgZmFsbGJhY2tFbmRUaW1lID0gbWF4RW5kVGltZVxuKTogU3BhbiB8IG51bGwge1xuICBjb25zdCB3YWl0ID0gd2FpdEV2ZW50c1RvV2FpdEVudGl0eShldmVudHMpO1xuICBpZiAoIXdhaXQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBzdGFydFRpbWUgPSB3YWl0LmNyZWF0ZWRBdDtcbiAgY29uc3Qgc3RhcnRNcyA9IHN0YXJ0VGltZS5nZXRUaW1lKCk7XG4gIGxldCBlbmRUaW1lID0gd2FpdC5jb21wbGV0ZWRBdDtcbiAgaWYgKCFlbmRUaW1lKSB7XG4gICAgY29uc3QgZmFsbGJhY2tDYXAgPVxuICAgICAgd2FpdC5yZXN1bWVBdCAmJiB3YWl0LnJlc3VtZUF0LmdldFRpbWUoKSA8IGZhbGxiYWNrRW5kVGltZS5nZXRUaW1lKClcbiAgICAgICAgPyB3YWl0LnJlc3VtZUF0XG4gICAgICAgIDogZmFsbGJhY2tFbmRUaW1lO1xuICAgIGVuZFRpbWUgPVxuICAgICAgbWF4RW5kVGltZS5nZXRUaW1lKCkgPiBzdGFydE1zICYmXG4gICAgICBtYXhFbmRUaW1lLmdldFRpbWUoKSA8IGZhbGxiYWNrQ2FwLmdldFRpbWUoKVxuICAgICAgICA/IG1heEVuZFRpbWVcbiAgICAgICAgOiBmYWxsYmFja0NhcDtcbiAgfVxuICBjb25zdCBzdGFydCA9IGRhdGVUb090ZWxUaW1lKHN0YXJ0VGltZSk7XG4gIGNvbnN0IGVuZCA9IGRhdGVUb090ZWxUaW1lKGVuZFRpbWUpO1xuICBjb25zdCBkdXJhdGlvbiA9IGNhbGN1bGF0ZUR1cmF0aW9uKHN0YXJ0VGltZSwgZW5kVGltZSk7XG4gIGNvbnN0IHNwYW5FdmVudHMgPSBjb252ZXJ0RXZlbnRzVG9TcGFuRXZlbnRzKGV2ZW50cywgZmFsc2UpO1xuICByZXR1cm4ge1xuICAgIHNwYW5JZDogd2FpdC53YWl0SWQsXG4gICAgbmFtZTogJ3NsZWVwJyxcbiAgICBraW5kOiAxLCAvLyBJTlRFUk5BTCBzcGFuIGtpbmRcbiAgICByZXNvdXJjZTogJ3NsZWVwJyxcbiAgICBsaWJyYXJ5OiBXT1JLRkxPV19MSUJSQVJZLFxuICAgIHN0YXR1czogeyBjb2RlOiAwIH0sXG4gICAgdHJhY2VGbGFnczogMSxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICByZXNvdXJjZTogJ3NsZWVwJyBhcyBjb25zdCxcbiAgICAgIGRhdGE6IHdhaXQsIC8vIHdhaXQgaXMgYSBwbGFpbiBvYmplY3QgYnVpbHQgZnJvbSBldmVudHMsIG5vIG5vbi1jbG9uZWFibGUgdHlwZXNcbiAgICB9LFxuICAgIGxpbmtzOiBbXSxcbiAgICBldmVudHM6IHNwYW5FdmVudHMsXG4gICAgZHVyYXRpb24sXG4gICAgc3RhcnRUaW1lOiBzdGFydCxcbiAgICBlbmRUaW1lOiBlbmQsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBzdGVwRXZlbnRzVG9TdGVwRW50aXR5ID0gKFxuICBldmVudHM6IEV2ZW50W11cbik6IHtcbiAgc3RlcElkOiBzdHJpbmc7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIHN0ZXBOYW1lOiBzdHJpbmc7XG4gIHN0YXR1czogJ3BlbmRpbmcnIHwgJ3J1bm5pbmcnIHwgJ2NvbXBsZXRlZCcgfCAnZmFpbGVkJyB8ICdjYW5jZWxsZWQnO1xuICBhdHRlbXB0OiBudW1iZXI7XG4gIGNyZWF0ZWRBdDogRGF0ZTtcbiAgdXBkYXRlZEF0OiBEYXRlO1xuICBzdGFydGVkQXQ/OiBEYXRlO1xuICBjb21wbGV0ZWRBdD86IERhdGU7XG4gIHNwZWNWZXJzaW9uPzogbnVtYmVyO1xufSB8IG51bGwgPT4ge1xuICBjb25zdCBjcmVhdGVkRXZlbnQgPSBldmVudHMuZmluZChcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfY3JlYXRlZCdcbiAgKTtcblxuICAvLyBWMSBydW5zIGRvbid0IGVtaXQgc3RlcF9jcmVhdGVkIGV2ZW50cy4gRmFsbCBiYWNrIHRvIHRoZSBlYXJsaWVzdCBldmVudFxuICAvLyBpbiB0aGUgZ3JvdXAgc28gd2UgY2FuIHN0aWxsIGJ1aWxkIGEgc3RlcCBzcGFuLlxuICBjb25zdCBhbmNob3JFdmVudCA9IGNyZWF0ZWRFdmVudCA/PyBldmVudHNbMF07XG4gIGlmICghYW5jaG9yRXZlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFdhbGsgZXZlbnRzIHRvIGRlcml2ZSBzdGF0dXMsIGF0dGVtcHQgY291bnQsIGFuZCB0aW1lc3RhbXBzLlxuICAvLyBIYW5kbGVzIGJvdGggc3RlcF9yZXRyeWluZyBhbmQgY29uc2VjdXRpdmUgc3RlcF9zdGFydGVkIGFzIHJldHJ5IHNpZ25hbHMuXG4gIGxldCBzdGF0dXM6ICdwZW5kaW5nJyB8ICdydW5uaW5nJyB8ICdjb21wbGV0ZWQnIHwgJ2ZhaWxlZCcgfCAnY2FuY2VsbGVkJyA9XG4gICAgJ3BlbmRpbmcnO1xuICBsZXQgYXR0ZW1wdCA9IDA7XG4gIGxldCBzdGFydGVkQXQ6IERhdGUgfCB1bmRlZmluZWQ7XG4gIGxldCBjb21wbGV0ZWRBdDogRGF0ZSB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IGUgb2YgZXZlbnRzKSB7XG4gICAgc3dpdGNoIChlLmV2ZW50VHlwZSkge1xuICAgICAgY2FzZSAnc3RlcF9zdGFydGVkJzpcbiAgICAgICAgc3RhdHVzID0gJ3J1bm5pbmcnO1xuICAgICAgICBhdHRlbXB0ICs9IDE7XG4gICAgICAgIGlmICghc3RhcnRlZEF0KSBzdGFydGVkQXQgPSBnZXRFdmVudFRpbWVzdGFtcChlKSA/PyBlLmNyZWF0ZWRBdDtcbiAgICAgICAgY29tcGxldGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3RlcF9jb21wbGV0ZWQnOlxuICAgICAgICBzdGF0dXMgPSAnY29tcGxldGVkJztcbiAgICAgICAgY29tcGxldGVkQXQgPSBnZXRFdmVudFRpbWVzdGFtcChlKSA/PyBlLmNyZWF0ZWRBdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdGVwX2ZhaWxlZCc6XG4gICAgICAgIHN0YXR1cyA9ICdmYWlsZWQnO1xuICAgICAgICBjb21wbGV0ZWRBdCA9IGdldEV2ZW50VGltZXN0YW1wKGUpID8/IGUuY3JlYXRlZEF0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0ZXBfcmV0cnlpbmcnOlxuICAgICAgICBzdGF0dXMgPSAncGVuZGluZyc7XG4gICAgICAgIGNvbXBsZXRlZEF0ID0gdW5kZWZpbmVkO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBFbnN1cmUgYXQgbGVhc3QgYXR0ZW1wdCAxIGlmIHdlIG5ldmVyIHNhdyBzdGVwX3N0YXJ0ZWRcbiAgaWYgKGF0dGVtcHQgPT09IDApIGF0dGVtcHQgPSAxO1xuXG4gIGNvbnN0IGxhc3RFdmVudCA9IGV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV07XG5cbiAgcmV0dXJuIHtcbiAgICBzdGVwSWQ6IGFuY2hvckV2ZW50LmNvcnJlbGF0aW9uSWQgPz8gJycsXG4gICAgcnVuSWQ6IGFuY2hvckV2ZW50LnJ1bklkLFxuICAgIHN0ZXBOYW1lOiBjcmVhdGVkRXZlbnQ/LmV2ZW50RGF0YT8uc3RlcE5hbWUgPz8gJycsXG4gICAgc3RhdHVzLFxuICAgIGF0dGVtcHQsXG4gICAgY3JlYXRlZEF0OiBnZXRFdmVudFRpbWVzdGFtcChhbmNob3JFdmVudCkgPz8gYW5jaG9yRXZlbnQuY3JlYXRlZEF0LFxuICAgIHVwZGF0ZWRBdDpcbiAgICAgIGdldEV2ZW50VGltZXN0YW1wKGxhc3RFdmVudCkgPz9cbiAgICAgIGxhc3RFdmVudD8uY3JlYXRlZEF0ID8/XG4gICAgICBhbmNob3JFdmVudC5jcmVhdGVkQXQsXG4gICAgc3RhcnRlZEF0LFxuICAgIGNvbXBsZXRlZEF0LFxuICAgIHNwZWNWZXJzaW9uOiBhbmNob3JFdmVudC5zcGVjVmVyc2lvbixcbiAgfTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgc3RlcCBldmVudHMgdG8gYW4gT3BlblRlbGVtZXRyeSBTcGFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGVwVG9TcGFuKHN0ZXBFdmVudHM6IEV2ZW50W10sIG1heEVuZFRpbWU6IERhdGUpOiBTcGFuIHwgbnVsbCB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRXZlbnRzVG9TdGVwRW50aXR5KHN0ZXBFdmVudHMpO1xuICBpZiAoIXN0ZXApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBwYXJzZWROYW1lID1cbiAgICBwYXJzZVN0ZXBOYW1lKFN0cmluZyhzdGVwLnN0ZXBOYW1lKSkgPz9cbiAgICBwYXJzZVdvcmtmbG93TmFtZShTdHJpbmcoc3RlcC5zdGVwTmFtZSkpO1xuXG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgcmVzb3VyY2U6ICdzdGVwJyBhcyBjb25zdCxcbiAgICBkYXRhOiBzdGVwLFxuICB9O1xuXG4gIGNvbnN0IHJlc291cmNlID0gJ3N0ZXAnO1xuXG4gIC8vIEluY2x1ZGUgQUxMIGNvcnJlbGF0ZWQgZXZlbnRzIG9uIHRoZSBzcGFuIHNvIHRoZSBzaWRlYmFyIGRldGFpbCB2aWV3XG4gIC8vIGNhbiBkaXNwbGF5IHRoZW0uIFRoZSB0aW1lbGluZSB1c2VzIHRoZSBgc2hvd1ZlcnRpY2FsTGluZWAgZmxhZyB0b1xuICAvLyBkZXRlcm1pbmUgd2hpY2ggZXZlbnRzIGFwcGVhciBhcyBtYXJrZXJzLlxuICBjb25zdCBldmVudHMgPSBjb252ZXJ0RXZlbnRzVG9TcGFuRXZlbnRzKHN0ZXBFdmVudHMsIGZhbHNlLCB7XG4gICAgcHJlZmVyT2NjdXJyZWRBdDogdHJ1ZSxcbiAgfSk7XG5cbiAgLy8gVXNlIHRoZSBldmVudCBvY2N1cnJlbmNlIHRpbWVzdGFtcCBmb3Igc3RlcCBzcGFucyB3aGVuIGl0IGlzIGF2YWlsYWJsZSxcbiAgLy8gZmFsbGluZyBiYWNrIHRvIHRoZSBpbmdlc3QgdGltZXN0YW1wIHVzZWQgYnkgb2xkZXIgZXZlbnQgc3RyZWFtcy5cbiAgY29uc3Qgc3BhblN0YXJ0RXZlbnQgPVxuICAgIHN0ZXBFdmVudHMuZmluZCgoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfY3JlYXRlZCcpID8/XG4gICAgc3RlcEV2ZW50c1swXTtcbiAgY29uc3Qgc3BhblN0YXJ0VGltZSA9XG4gICAgZ2V0RXZlbnRUaW1lc3RhbXAoc3BhblN0YXJ0RXZlbnQpID8/IG5ldyBEYXRlKHN0ZXAuY3JlYXRlZEF0KTtcbiAgbGV0IGFjdGl2ZVN0YXJ0VGltZSA9IHN0ZXAuc3RhcnRlZEF0ID8gbmV3IERhdGUoc3RlcC5zdGFydGVkQXQpIDogdW5kZWZpbmVkO1xuICBjb25zdCBmaXJzdFN0YXJ0RXZlbnQgPSBzdGVwRXZlbnRzLmZpbmQoXG4gICAgKGV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICdzdGVwX3N0YXJ0ZWQnXG4gICk7XG4gIGlmIChmaXJzdFN0YXJ0RXZlbnQpIHtcbiAgICBhY3RpdmVTdGFydFRpbWUgPVxuICAgICAgZ2V0RXZlbnRUaW1lc3RhbXAoZmlyc3RTdGFydEV2ZW50KSA/PyBuZXcgRGF0ZShmaXJzdFN0YXJ0RXZlbnQuY3JlYXRlZEF0KTtcbiAgfVxuXG4gIGxldCBlbmRUaW1lID0gbmV3IERhdGUobWF4RW5kVGltZSk7XG4gIGlmIChzdGVwLmNvbXBsZXRlZEF0KSB7XG4gICAgY29uc3QgY29tcGxldGVkRXZlbnQgPSBzdGVwRXZlbnRzXG4gICAgICAuc2xpY2UoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmZpbmQoKGV2ZW50KSA9PiBpc1Rlcm1pbmFsU3RlcEV2ZW50VHlwZShldmVudC5ldmVudFR5cGUpKTtcbiAgICBlbmRUaW1lID0gZ2V0RXZlbnRUaW1lc3RhbXAoY29tcGxldGVkRXZlbnQpID8/IG5ldyBEYXRlKHN0ZXAuY29tcGxldGVkQXQpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzcGFuSWQ6IFN0cmluZyhzdGVwLnN0ZXBJZCksXG4gICAgbmFtZTogcGFyc2VkTmFtZT8uc2hvcnROYW1lID8/IFN0cmluZyhzdGVwLnN0ZXBOYW1lKSxcbiAgICBraW5kOiAxLCAvLyBJTlRFUk5BTCBzcGFuIGtpbmRcbiAgICByZXNvdXJjZSxcbiAgICBsaWJyYXJ5OiBXT1JLRkxPV19MSUJSQVJZLFxuICAgIHN0YXR1czogeyBjb2RlOiAwIH0sXG4gICAgdHJhY2VGbGFnczogMSxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIGxpbmtzOiBbXSxcbiAgICBldmVudHMsXG4gICAgc3RhcnRUaW1lOiBkYXRlVG9PdGVsVGltZShzcGFuU3RhcnRUaW1lKSxcbiAgICBlbmRUaW1lOiBkYXRlVG9PdGVsVGltZShlbmRUaW1lKSxcbiAgICBkdXJhdGlvbjogY2FsY3VsYXRlRHVyYXRpb24oc3BhblN0YXJ0VGltZSwgZW5kVGltZSksXG4gICAgLy8gT25seSBzZXQgYWN0aXZlU3RhcnRUaW1lIGlmIGl0IGRpZmZlcnMgZnJvbSBzdGFydFRpbWUgKGkuZS4sIHRoZXJlIHdhcyBhIHF1ZXVlZCBwZXJpb2QpXG4gICAgYWN0aXZlU3RhcnRUaW1lOlxuICAgICAgYWN0aXZlU3RhcnRUaW1lICYmIGFjdGl2ZVN0YXJ0VGltZS5nZXRUaW1lKCkgPiBzcGFuU3RhcnRUaW1lLmdldFRpbWUoKVxuICAgICAgICA/IGRhdGVUb090ZWxUaW1lKGFjdGl2ZVN0YXJ0VGltZSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBob29rRXZlbnRzVG9Ib29rRW50aXR5ID0gKFxuICBldmVudHM6IEV2ZW50W11cbik6IHtcbiAgaG9va0lkOiBzdHJpbmc7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIHRva2VuPzogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IERhdGU7XG4gIHJlY2VpdmVkQ291bnQ6IG51bWJlcjtcbiAgbGFzdFJlY2VpdmVkQXQ/OiBEYXRlO1xuICBkaXNwb3NlZEF0PzogRGF0ZTtcbn0gfCBudWxsID0+IHtcbiAgY29uc3QgY3JlYXRlZEV2ZW50ID0gZXZlbnRzLmZpbmQoXG4gICAgKGV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICdob29rX2NyZWF0ZWQnXG4gICk7XG4gIGlmICghY3JlYXRlZEV2ZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcmVjZWl2ZWRFdmVudHMgPSBldmVudHMuZmlsdGVyKFxuICAgIChldmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19yZWNlaXZlZCdcbiAgKTtcbiAgY29uc3QgZGlzcG9zZWRFdmVudHMgPSBldmVudHMuZmlsdGVyKFxuICAgIChldmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19kaXNwb3NlZCdcbiAgKTtcbiAgY29uc3QgbGFzdFJlY2VpdmVkRXZlbnQgPSByZWNlaXZlZEV2ZW50cy5hdCgtMSk7XG4gIHJldHVybiB7XG4gICAgaG9va0lkOiBjcmVhdGVkRXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICBydW5JZDogY3JlYXRlZEV2ZW50LnJ1bklkLFxuICAgIHRva2VuOiBjcmVhdGVkRXZlbnQuZXZlbnREYXRhPy50b2tlbixcbiAgICBjcmVhdGVkQXQ6IGdldEV2ZW50VGltZXN0YW1wKGNyZWF0ZWRFdmVudCkgPz8gY3JlYXRlZEV2ZW50LmNyZWF0ZWRBdCxcbiAgICByZWNlaXZlZENvdW50OiByZWNlaXZlZEV2ZW50cy5sZW5ndGgsXG4gICAgbGFzdFJlY2VpdmVkQXQ6IGdldEV2ZW50VGltZXN0YW1wKGxhc3RSZWNlaXZlZEV2ZW50KSxcbiAgICBkaXNwb3NlZEF0OiBnZXRFdmVudFRpbWVzdGFtcChkaXNwb3NlZEV2ZW50cy5hdCgtMSkpLFxuICB9O1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHdvcmtmbG93IEhvb2sgdG8gYW4gT3BlblRlbGVtZXRyeSBTcGFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBob29rVG9TcGFuKGhvb2tFdmVudHM6IEV2ZW50W10sIG1heEVuZFRpbWU6IERhdGUpOiBTcGFuIHwgbnVsbCB7XG4gIGNvbnN0IGhvb2sgPSBob29rRXZlbnRzVG9Ib29rRW50aXR5KGhvb2tFdmVudHMpO1xuICBpZiAoIWhvb2spIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENvbnZlcnQgaG9vay1yZWxhdGVkIGV2ZW50cyB0byBzcGFuIGV2ZW50c1xuICBjb25zdCBldmVudHMgPSBjb252ZXJ0RXZlbnRzVG9TcGFuRXZlbnRzKGhvb2tFdmVudHMsIGZhbHNlKTtcblxuICBjb25zdCBlbmRUaW1lID0gaG9vay5kaXNwb3NlZEF0IHx8IG1heEVuZFRpbWU7XG5cbiAgcmV0dXJuIHtcbiAgICBzcGFuSWQ6IFN0cmluZyhob29rLmhvb2tJZCksXG4gICAgbmFtZTogaG9vay50b2tlbiA/PyBTdHJpbmcoaG9vay5ob29rSWQpLFxuICAgIGtpbmQ6IDEsIC8vIElOVEVSTkFMIHNwYW4ga2luZFxuICAgIHJlc291cmNlOiAnaG9vaycsXG4gICAgbGlicmFyeTogV09SS0ZMT1dfTElCUkFSWSxcbiAgICBzdGF0dXM6IHsgY29kZTogMSB9LFxuICAgIHRyYWNlRmxhZ3M6IDEsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgcmVzb3VyY2U6ICdob29rJyBhcyBjb25zdCxcbiAgICAgIGRhdGE6IGhvb2ssXG4gICAgfSxcbiAgICBsaW5rczogW10sXG4gICAgZXZlbnRzLFxuICAgIHN0YXJ0VGltZTogZGF0ZVRvT3RlbFRpbWUoaG9vay5jcmVhdGVkQXQpLFxuICAgIGVuZFRpbWU6IGRhdGVUb090ZWxUaW1lKGVuZFRpbWUpLFxuICAgIGR1cmF0aW9uOiBjYWxjdWxhdGVEdXJhdGlvbihob29rLmNyZWF0ZWRBdCwgZW5kVGltZSksXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJvb3Qgc3BhbiBmb3IgdGhlIHdvcmtmbG93IHJ1blxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuVG9TcGFuKFxuICBydW46IFdvcmtmbG93UnVuLFxuICBydW5FdmVudHM6IEV2ZW50W10sXG4gIG5vd1RpbWU/OiBEYXRlXG4pOiBTcGFuIHtcbiAgY29uc3Qgbm93ID0gbm93VGltZSA/PyBuZXcgRGF0ZSgpO1xuXG4gIC8vIFByZWZlciB0aGUgZXZlbnQgb2NjdXJyZW5jZSB0aW1lc3RhbXAgd2hlbiBhdmFpbGFibGUgc28gdGhlIHJvb3Qgc3BhblxuICAvLyBsaW5lcyB1cCB3aXRoIGNoaWxkIHNwYW5zIHRoYXQgYWxyZWFkeSB1c2UgZXZlbnQgb2NjdXJyZW5jZSB0aW1lLlxuICBjb25zdCBydW5DcmVhdGVkRXZlbnQgPSBydW5FdmVudHMuZmluZChcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3J1bl9jcmVhdGVkJ1xuICApO1xuICBjb25zdCBydW5TdGFydGVkRXZlbnQgPSBydW5FdmVudHMuZmluZChcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3J1bl9zdGFydGVkJ1xuICApO1xuICBjb25zdCB0ZXJtaW5hbEV2ZW50ID0gcnVuRXZlbnRzXG4gICAgLnNsaWNlKClcbiAgICAucmV2ZXJzZSgpXG4gICAgLmZpbmQoXG4gICAgICAoZXZlbnQpID0+XG4gICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3J1bl9jb21wbGV0ZWQnIHx8XG4gICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3J1bl9mYWlsZWQnIHx8XG4gICAgICAgIGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3J1bl9jYW5jZWxsZWQnXG4gICAgKTtcbiAgY29uc3Qgc3BhblN0YXJ0VGltZSA9XG4gICAgZ2V0RXZlbnRUaW1lc3RhbXAocnVuQ3JlYXRlZEV2ZW50KSA/PyBuZXcgRGF0ZShydW4uY3JlYXRlZEF0KTtcbiAgY29uc3QgYWN0aXZlU3RhcnRUaW1lID1cbiAgICBnZXRFdmVudFRpbWVzdGFtcChydW5TdGFydGVkRXZlbnQpID8/XG4gICAgKHJ1bi5zdGFydGVkQXQgPyBuZXcgRGF0ZShydW4uc3RhcnRlZEF0KSA6IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGNvbXBsZXRlZEF0ID1cbiAgICBnZXRFdmVudFRpbWVzdGFtcCh0ZXJtaW5hbEV2ZW50KSA/PyBydW4uY29tcGxldGVkQXQgPz8gdW5kZWZpbmVkO1xuICBjb25zdCBlbmRUaW1lID0gY29tcGxldGVkQXQgPz8gbm93O1xuXG4gIC8vIE9ubHkgZW1iZWQgaWRlbnRpZmljYXRpb24gZmllbGRzLCBub3QgdGhlIGZ1bGwgb2JqZWN0IHdpdGhcbiAgLy8gaW5wdXQvb3V0cHV0L2Vycm9yIHdoaWNoIG1heSBjb250YWluIG5vbi1jbG9uZWFibGUgdHlwZXMuIExpZmVjeWNsZVxuICAvLyB0aW1lc3RhbXBzIGFyZSBldmVudC1kZXJpdmVkIHNvIGRldGFpbCByb3dzIGFsaWduIHdpdGggdGhlIHNwYW4gdGltZWxpbmUuXG4gIGNvbnN0IHsgaW5wdXQ6IF9pLCBvdXRwdXQ6IF9vLCBlcnJvcjogX2UsIC4uLnJ1bklkZW50aXR5IH0gPSBydW47XG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgcmVzb3VyY2U6ICdydW4nIGFzIGNvbnN0LFxuICAgIGRhdGE6IHtcbiAgICAgIC4uLnJ1bklkZW50aXR5LFxuICAgICAgY3JlYXRlZEF0OiBzcGFuU3RhcnRUaW1lLFxuICAgICAgc3RhcnRlZEF0OiBhY3RpdmVTdGFydFRpbWUsXG4gICAgICBjb21wbGV0ZWRBdCxcbiAgICB9LFxuICB9O1xuXG4gIC8vIENvbnZlcnQgcnVuLWxldmVsIGV2ZW50cyB0byBzcGFuIGV2ZW50c1xuICBjb25zdCBldmVudHMgPSBjb252ZXJ0RXZlbnRzVG9TcGFuRXZlbnRzKHJ1bkV2ZW50cywgZmFsc2UsIHtcbiAgICBwcmVmZXJPY2N1cnJlZEF0OiB0cnVlLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHNwYW5JZDogU3RyaW5nKHJ1bi5ydW5JZCksXG4gICAgbmFtZTogU3RyaW5nKHBhcnNlV29ya2Zsb3dOYW1lKHJ1bi53b3JrZmxvd05hbWUpPy5zaG9ydE5hbWUgPz8gJz8nKSxcbiAgICBraW5kOiAxLCAvLyBJTlRFUk5BTCBzcGFuIGtpbmRcbiAgICByZXNvdXJjZTogJ3J1bicsXG4gICAgbGlicmFyeTogV09SS0ZMT1dfTElCUkFSWSxcbiAgICBzdGF0dXM6IHsgY29kZTogMCB9LFxuICAgIHRyYWNlRmxhZ3M6IDEsXG4gICAgYXR0cmlidXRlcyxcbiAgICBsaW5rczogW10sXG4gICAgZXZlbnRzLFxuICAgIHN0YXJ0VGltZTogZGF0ZVRvT3RlbFRpbWUoc3BhblN0YXJ0VGltZSksXG4gICAgZW5kVGltZTogZGF0ZVRvT3RlbFRpbWUoZW5kVGltZSksXG4gICAgZHVyYXRpb246IGNhbGN1bGF0ZUR1cmF0aW9uKHNwYW5TdGFydFRpbWUsIGVuZFRpbWUpLFxuICAgIC8vIE9ubHkgc2V0IGFjdGl2ZVN0YXJ0VGltZSBpZiBpdCBkaWZmZXJzIGZyb20gc3RhcnRUaW1lIChpLmUuLCB0aGVyZSB3YXMgYSBxdWV1ZWQgcGVyaW9kKVxuICAgIGFjdGl2ZVN0YXJ0VGltZTpcbiAgICAgIGFjdGl2ZVN0YXJ0VGltZSAmJiBhY3RpdmVTdGFydFRpbWUuZ2V0VGltZSgpID4gc3BhblN0YXJ0VGltZS5nZXRUaW1lKClcbiAgICAgICAgPyBkYXRlVG9PdGVsVGltZShhY3RpdmVTdGFydFRpbWUpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICB9O1xufVxuIl19
|
|
340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utc3Bhbi1jb25zdHJ1Y3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy93b3JrZmxvdy10cmFjZXMvdHJhY2Utc3Bhbi1jb25zdHJ1Y3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUVMLHVCQUF1QixHQUV4QixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV2RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixJQUFJLEVBQUUsMEJBQTBCO0lBQ2hDLE9BQU8sRUFBRSxPQUFPO0NBQ2pCLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sa0JBQWtCLEdBQTRCLElBQUksR0FBRyxDQUFDO0lBQzFELGNBQWM7SUFDZCxlQUFlO0lBQ2YsZUFBZTtJQUNmLGNBQWM7SUFDZCxlQUFlO0lBQ2YsYUFBYTtJQUNiLFlBQVk7SUFDWixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLFVBQVU7Q0FDWCxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixLQUF3QixFQUNOLEVBQUU7SUFDcEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUFFLFVBQVUsSUFBSSxLQUFLLEVBQUUsU0FBUyxDQUFDO0lBQ3BELElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFN0IsTUFBTSxJQUFJLEdBQUcsS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3RCxP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LEVBQUU7WUFDSixHQUFHLFdBQVc7WUFDZCxTQUFTLEVBQUUsYUFBYTtZQUN4QixTQUFTLEVBQUUsZUFBZTtZQUMxQixXQUFXO1NBQ1o7S0FDRixDQUFDO0lBRUYsMENBQTBDO0lBQzFDLE1BQU0sTUFBTSxHQUFHLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDekQsZ0JBQWdCLEVBQUUsSUFBSTtLQUN2QixDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ3pCLElBQUksRUFBRSxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLFNBQVMsSUFBSSxHQUFHLENBQUM7UUFDbkUsSUFBSSxFQUFFLENBQUMsRUFBRSxxQkFBcUI7UUFDOUIsUUFBUSxFQUFFLEtBQUs7UUFDZixPQUFPLEVBQUUsZ0JBQWdCO1FBQ3pCLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7UUFDbkIsVUFBVSxFQUFFLENBQUM7UUFDYixVQUFVO1FBQ1YsS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNO1FBQ04sU0FBUyxFQUFFLGNBQWMsQ0FBQyxhQUFhLENBQUM7UUFDeEMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUM7UUFDaEMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUM7UUFDbkQsMEZBQTBGO1FBQzFGLGVBQWUsRUFDYixlQUFlLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRSxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUU7WUFDcEUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUM7WUFDakMsQ0FBQyxDQUFDLFNBQVM7S0FDaEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZ1bmN0aW9ucyBmb3IgY29uc3RydWN0aW5nIE9wZW5UZWxlbWV0cnkgc3BhbnMgZnJvbSB3b3JrZmxvdyBlbnRpdGllc1xuICovXG5cbmltcG9ydCB7IHBhcnNlU3RlcE5hbWUsIHBhcnNlV29ya2Zsb3dOYW1lIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzL3BhcnNlLW5hbWUnO1xuaW1wb3J0IHtcbiAgdHlwZSBFdmVudCxcbiAgaXNUZXJtaW5hbFN0ZXBFdmVudFR5cGUsXG4gIHR5cGUgV29ya2Zsb3dSdW4sXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IFNwYW4sIFNwYW5FdmVudCB9IGZyb20gJy4uLy4uL2xpYi90cmFjZS10eXBlcyc7XG5pbXBvcnQgeyBzaG91bGRTaG93VmVydGljYWxMaW5lIH0gZnJvbSAnLi9ldmVudC1jb2xvcnMnO1xuaW1wb3J0IHsgY2FsY3VsYXRlRHVyYXRpb24sIGRhdGVUb090ZWxUaW1lIH0gZnJvbSAnLi90cmFjZS10aW1lLXV0aWxzJztcblxuZXhwb3J0IGNvbnN0IFdPUktGTE9XX0xJQlJBUlkgPSB7XG4gIG5hbWU6ICd3b3JrZmxvdy1kZXZlbG9wbWVudC1raXQnLFxuICB2ZXJzaW9uOiAnNC4wLjAnLFxufTtcblxuLyoqXG4gKiBFdmVudCB0eXBlcyB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgYXMgdmlzdWFsIG1hcmtlcnMgaW4gdGhlIHRyYWNlIHZpZXdlclxuICovXG5jb25zdCBNQVJLRVJfRVZFTlRfVFlQRVM6IFNldDxFdmVudFsnZXZlbnRUeXBlJ10+ID0gbmV3IFNldChbXG4gICdob29rX2NyZWF0ZWQnLFxuICAnaG9va19yZWNlaXZlZCcsXG4gICdob29rX2Rpc3Bvc2VkJyxcbiAgJ3N0ZXBfc3RhcnRlZCcsXG4gICdzdGVwX3JldHJ5aW5nJyxcbiAgJ3N0ZXBfZmFpbGVkJyxcbiAgJ3J1bl9mYWlsZWQnLFxuICAnd2FpdF9jcmVhdGVkJyxcbiAgJ3dhaXRfY29tcGxldGVkJyxcbiAgJ2F0dHJfc2V0Jyxcbl0pO1xuXG5leHBvcnQgY29uc3QgZ2V0RXZlbnRUaW1lc3RhbXAgPSAoXG4gIGV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZFxuKTogRGF0ZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IHZhbHVlID0gZXZlbnQ/Lm9jY3VycmVkQXQgPz8gZXZlbnQ/LmNyZWF0ZWRBdDtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBkYXRlID0gdmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gdmFsdWUgOiBuZXcgRGF0ZSh2YWx1ZSk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpID8gdW5kZWZpbmVkIDogZGF0ZTtcbn07XG5cbi8qKlxuICogQ29udmVydCB3b3JrZmxvdyBldmVudHMgdG8gc3BhbiBldmVudHNcbiAqIE9ubHkgaW5jbHVkZXMgZXZlbnRzIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBhcyBtYXJrZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RXZlbnRzVG9TcGFuRXZlbnRzKFxuICBldmVudHM6IEV2ZW50W10sXG4gIGZpbHRlclR5cGVzID0gdHJ1ZSxcbiAgb3B0aW9uczogeyBwcmVmZXJPY2N1cnJlZEF0PzogYm9vbGVhbiB9ID0ge31cbik6IFNwYW5FdmVudFtdIHtcbiAgcmV0dXJuIGV2ZW50c1xuICAgIC5maWx0ZXIoKGV2ZW50KSA9PlxuICAgICAgZmlsdGVyVHlwZXMgPyBNQVJLRVJfRVZFTlRfVFlQRVMuaGFzKGV2ZW50LmV2ZW50VHlwZSkgOiB0cnVlXG4gICAgKVxuICAgIC5tYXAoKGV2ZW50KSA9PiAoe1xuICAgICAgbmFtZTogZXZlbnQuZXZlbnRUeXBlLFxuICAgICAgdGltZXN0YW1wOiBkYXRlVG9PdGVsVGltZShcbiAgICAgICAgb3B0aW9ucy5wcmVmZXJPY2N1cnJlZEF0XG4gICAgICAgICAgPyAoZ2V0RXZlbnRUaW1lc3RhbXAoZXZlbnQpID8/IGV2ZW50LmNyZWF0ZWRBdClcbiAgICAgICAgICA6IGV2ZW50LmNyZWF0ZWRBdFxuICAgICAgKSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZXZlbnRJZDogZXZlbnQuZXZlbnRJZCxcbiAgICAgICAgY29ycmVsYXRpb25JZDogZXZlbnQuY29ycmVsYXRpb25JZCxcbiAgICAgICAgZXZlbnREYXRhOiAnZXZlbnREYXRhJyBpbiBldmVudCA/IGV2ZW50LmV2ZW50RGF0YSA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICAvLyBDb250cm9sIHdoZXRoZXIgdG8gc2hvdyB2ZXJ0aWNhbCBsaW5lIGluIHRpbWVsaW5lXG4gICAgICBzaG93VmVydGljYWxMaW5lOiBzaG91bGRTaG93VmVydGljYWxMaW5lKGV2ZW50LmV2ZW50VHlwZSksXG4gICAgfSkpO1xufVxuXG5leHBvcnQgY29uc3Qgd2FpdEV2ZW50c1RvV2FpdEVudGl0eSA9IChcbiAgZXZlbnRzOiBFdmVudFtdXG4pOiB7XG4gIHdhaXRJZDogc3RyaW5nO1xuICBydW5JZDogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IERhdGU7XG4gIHJlc3VtZUF0PzogRGF0ZTtcbiAgY29tcGxldGVkQXQ/OiBEYXRlO1xufSB8IG51bGwgPT4ge1xuICBjb25zdCBzdGFydEV2ZW50ID0gZXZlbnRzLmZpbmQoKGV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnKTtcbiAgaWYgKCFzdGFydEV2ZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgY29tcGxldGVkRXZlbnQgPSBldmVudHMuZmluZChcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJ1xuICApO1xuICByZXR1cm4ge1xuICAgIHdhaXRJZDogc3RhcnRFdmVudC5jb3JyZWxhdGlvbklkLFxuICAgIHJ1bklkOiBzdGFydEV2ZW50LnJ1bklkLFxuICAgIGNyZWF0ZWRBdDogZ2V0RXZlbnRUaW1lc3RhbXAoc3RhcnRFdmVudCkgPz8gc3RhcnRFdmVudC5jcmVhdGVkQXQsXG4gICAgcmVzdW1lQXQ6IHN0YXJ0RXZlbnQuZXZlbnREYXRhPy5yZXN1bWVBdFxuICAgICAgPyBuZXcgRGF0ZShzdGFydEV2ZW50LmV2ZW50RGF0YS5yZXN1bWVBdClcbiAgICAgIDogdW5kZWZpbmVkLFxuICAgIGNvbXBsZXRlZEF0OiBnZXRFdmVudFRpbWVzdGFtcChjb21wbGV0ZWRFdmVudCksXG4gIH07XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgd29ya2Zsb3cgV2FpdCB0byBhbiBPcGVuVGVsZW1ldHJ5IFNwYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhaXRUb1NwYW4oXG4gIGV2ZW50czogRXZlbnRbXSxcbiAgbWF4RW5kVGltZTogRGF0ZSxcbiAgZmFsbGJhY2tFbmRUaW1lID0gbWF4RW5kVGltZVxuKTogU3BhbiB8IG51bGwge1xuICBjb25zdCB3YWl0ID0gd2FpdEV2ZW50c1RvV2FpdEVudGl0eShldmVudHMpO1xuICBpZiAoIXdhaXQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBzdGFydFRpbWUgPSB3YWl0LmNyZWF0ZWRBdDtcbiAgY29uc3Qgc3RhcnRNcyA9IHN0YXJ0VGltZS5nZXRUaW1lKCk7XG4gIGxldCBlbmRUaW1lID0gd2FpdC5jb21wbGV0ZWRBdDtcbiAgaWYgKCFlbmRUaW1lKSB7XG4gICAgY29uc3QgZmFsbGJhY2tDYXAgPVxuICAgICAgd2FpdC5yZXN1bWVBdCAmJiB3YWl0LnJlc3VtZUF0LmdldFRpbWUoKSA8IGZhbGxiYWNrRW5kVGltZS5nZXRUaW1lKClcbiAgICAgICAgPyB3YWl0LnJlc3VtZUF0XG4gICAgICAgIDogZmFsbGJhY2tFbmRUaW1lO1xuICAgIGVuZFRpbWUgPVxuICAgICAgbWF4RW5kVGltZS5nZXRUaW1lKCkgPiBzdGFydE1zICYmXG4gICAgICBtYXhFbmRUaW1lLmdldFRpbWUoKSA8IGZhbGxiYWNrQ2FwLmdldFRpbWUoKVxuICAgICAgICA/IG1heEVuZFRpbWVcbiAgICAgICAgOiBmYWxsYmFja0NhcDtcbiAgfVxuICBjb25zdCBzdGFydCA9IGRhdGVUb090ZWxUaW1lKHN0YXJ0VGltZSk7XG4gIGNvbnN0IGVuZCA9IGRhdGVUb090ZWxUaW1lKGVuZFRpbWUpO1xuICBjb25zdCBkdXJhdGlvbiA9IGNhbGN1bGF0ZUR1cmF0aW9uKHN0YXJ0VGltZSwgZW5kVGltZSk7XG4gIGNvbnN0IHNwYW5FdmVudHMgPSBjb252ZXJ0RXZlbnRzVG9TcGFuRXZlbnRzKGV2ZW50cywgZmFsc2UpO1xuICByZXR1cm4ge1xuICAgIHNwYW5JZDogd2FpdC53YWl0SWQsXG4gICAgbmFtZTogJ3NsZWVwJyxcbiAgICBraW5kOiAxLCAvLyBJTlRFUk5BTCBzcGFuIGtpbmRcbiAgICByZXNvdXJjZTogJ3NsZWVwJyxcbiAgICBsaWJyYXJ5OiBXT1JLRkxPV19MSUJSQVJZLFxuICAgIHN0YXR1czogeyBjb2RlOiAwIH0sXG4gICAgdHJhY2VGbGFnczogMSxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICByZXNvdXJjZTogJ3NsZWVwJyBhcyBjb25zdCxcbiAgICAgIGRhdGE6IHdhaXQsIC8vIHdhaXQgaXMgYSBwbGFpbiBvYmplY3QgYnVpbHQgZnJvbSBldmVudHMsIG5vIG5vbi1jbG9uZWFibGUgdHlwZXNcbiAgICB9LFxuICAgIGxpbmtzOiBbXSxcbiAgICBldmVudHM6IHNwYW5FdmVudHMsXG4gICAgZHVyYXRpb24sXG4gICAgc3RhcnRUaW1lOiBzdGFydCxcbiAgICBlbmRUaW1lOiBlbmQsXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEdldFN0ZXBBdHRyaWJ1dGVzID0gKFxuICBldmVudHM6IEV2ZW50W11cbikgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCBjb25zdCBzdGVwRXZlbnRzVG9TdGVwRW50aXR5ID0gKFxuICBldmVudHM6IEV2ZW50W11cbik6IHtcbiAgc3RlcElkOiBzdHJpbmc7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIHN0ZXBOYW1lOiBzdHJpbmc7XG4gIHN0YXR1czogJ3BlbmRpbmcnIHwgJ3J1bm5pbmcnIHwgJ2NvbXBsZXRlZCcgfCAnZmFpbGVkJyB8ICdjYW5jZWxsZWQnO1xuICBhdHRlbXB0OiBudW1iZXI7XG4gIGNyZWF0ZWRBdDogRGF0ZTtcbiAgdXBkYXRlZEF0OiBEYXRlO1xuICBzdGFydGVkQXQ/OiBEYXRlO1xuICBjb21wbGV0ZWRBdD86IERhdGU7XG4gIHNwZWNWZXJzaW9uPzogbnVtYmVyO1xufSB8IG51bGwgPT4ge1xuICBjb25zdCBjcmVhdGVkRXZlbnQgPSBldmVudHMuZmluZChcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfY3JlYXRlZCdcbiAgKTtcblxuICAvLyBWMSBydW5zIGRvbid0IGVtaXQgc3RlcF9jcmVhdGVkIGV2ZW50cy4gRmFsbCBiYWNrIHRvIHRoZSBlYXJsaWVzdCBldmVudFxuICAvLyBpbiB0aGUgZ3JvdXAgc28gd2UgY2FuIHN0aWxsIGJ1aWxkIGEgc3RlcCBzcGFuLlxuICBjb25zdCBhbmNob3JFdmVudCA9IGNyZWF0ZWRFdmVudCA/PyBldmVudHNbMF07XG4gIGlmICghYW5jaG9yRXZlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFdhbGsgZXZlbnRzIHRvIGRlcml2ZSBzdGF0dXMsIGF0dGVtcHQgY291bnQsIGFuZCB0aW1lc3RhbXBzLlxuICAvLyBIYW5kbGVzIGJvdGggc3RlcF9yZXRyeWluZyBhbmQgY29uc2VjdXRpdmUgc3RlcF9zdGFydGVkIGFzIHJldHJ5IHNpZ25hbHMuXG4gIGxldCBzdGF0dXM6ICdwZW5kaW5nJyB8ICdydW5uaW5nJyB8ICdjb21wbGV0ZWQnIHwgJ2ZhaWxlZCcgfCAnY2FuY2VsbGVkJyA9XG4gICAgJ3BlbmRpbmcnO1xuICBsZXQgYXR0ZW1wdCA9IDA7XG4gIGxldCBzdGFydGVkQXQ6IERhdGUgfCB1bmRlZmluZWQ7XG4gIGxldCBjb21wbGV0ZWRBdDogRGF0ZSB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IGUgb2YgZXZlbnRzKSB7XG4gICAgc3dpdGNoIChlLmV2ZW50VHlwZSkge1xuICAgICAgY2FzZSAnc3RlcF9zdGFydGVkJzpcbiAgICAgICAgc3RhdHVzID0gJ3J1bm5pbmcnO1xuICAgICAgICBhdHRlbXB0ICs9IDE7XG4gICAgICAgIGlmICghc3RhcnRlZEF0KSBzdGFydGVkQXQgPSBnZXRFdmVudFRpbWVzdGFtcChlKSA/PyBlLmNyZWF0ZWRBdDtcbiAgICAgICAgY29tcGxldGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3RlcF9jb21wbGV0ZWQnOlxuICAgICAgICBzdGF0dXMgPSAnY29tcGxldGVkJztcbiAgICAgICAgY29tcGxldGVkQXQgPSBnZXRFdmVudFRpbWVzdGFtcChlKSA/PyBlLmNyZWF0ZWRBdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdGVwX2ZhaWxlZCc6XG4gICAgICAgIHN0YXR1cyA9ICdmYWlsZWQnO1xuICAgICAgICBjb21wbGV0ZWRBdCA9IGdldEV2ZW50VGltZXN0YW1wKGUpID8/IGUuY3JlYXRlZEF0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0ZXBfcmV0cnlpbmcnOlxuICAgICAgICBzdGF0dXMgPSAncGVuZGluZyc7XG4gICAgICAgIGNvbXBsZXRlZEF0ID0gdW5kZWZpbmVkO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvLyBFbnN1cmUgYXQgbGVhc3QgYXR0ZW1wdCAxIGlmIHdlIG5ldmVyIHNhdyBzdGVwX3N0YXJ0ZWRcbiAgaWYgKGF0dGVtcHQgPT09IDApIGF0dGVtcHQgPSAxO1xuXG4gIGNvbnN0IGxhc3RFdmVudCA9IGV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV07XG5cbiAgcmV0dXJuIHtcbiAgICBzdGVwSWQ6IGFuY2hvckV2ZW50LmNvcnJlbGF0aW9uSWQgPz8gJycsXG4gICAgcnVuSWQ6IGFuY2hvckV2ZW50LnJ1bklkLFxuICAgIHN0ZXBOYW1lOiBjcmVhdGVkRXZlbnQ/LmV2ZW50RGF0YT8uc3RlcE5hbWUgPz8gJycsXG4gICAgc3RhdHVzLFxuICAgIGF0dGVtcHQsXG4gICAgY3JlYXRlZEF0OiBnZXRFdmVudFRpbWVzdGFtcChhbmNob3JFdmVudCkgPz8gYW5jaG9yRXZlbnQuY3JlYXRlZEF0LFxuICAgIHVwZGF0ZWRBdDpcbiAgICAgIGdldEV2ZW50VGltZXN0YW1wKGxhc3RFdmVudCkgPz9cbiAgICAgIGxhc3RFdmVudD8uY3JlYXRlZEF0ID8/XG4gICAgICBhbmNob3JFdmVudC5jcmVhdGVkQXQsXG4gICAgc3RhcnRlZEF0LFxuICAgIGNvbXBsZXRlZEF0LFxuICAgIHNwZWNWZXJzaW9uOiBhbmNob3JFdmVudC5zcGVjVmVyc2lvbixcbiAgfTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgc3RlcCBldmVudHMgdG8gYW4gT3BlblRlbGVtZXRyeSBTcGFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGVwVG9TcGFuKFxuICBzdGVwRXZlbnRzOiBFdmVudFtdLFxuICBtYXhFbmRUaW1lOiBEYXRlLFxuICBnZXRTdGVwQXR0cmlidXRlcz86IEdldFN0ZXBBdHRyaWJ1dGVzXG4pOiBTcGFuIHwgbnVsbCB7XG4gIGNvbnN0IHN0ZXAgPSBzdGVwRXZlbnRzVG9TdGVwRW50aXR5KHN0ZXBFdmVudHMpO1xuICBpZiAoIXN0ZXApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBwYXJzZWROYW1lID1cbiAgICBwYXJzZVN0ZXBOYW1lKFN0cmluZyhzdGVwLnN0ZXBOYW1lKSkgPz9cbiAgICBwYXJzZVdvcmtmbG93TmFtZShTdHJpbmcoc3RlcC5zdGVwTmFtZSkpO1xuXG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgcmVzb3VyY2U6ICdzdGVwJyBhcyBjb25zdCxcbiAgICBkYXRhOiB7XG4gICAgICAuLi5nZXRTdGVwQXR0cmlidXRlcz8uKHN0ZXBFdmVudHMpLFxuICAgICAgLy8gQ2Fub25pY2FsIGV2ZW50LWRlcml2ZWQgZmllbGRzIGNhbm5vdCBiZSBvdmVycmlkZGVuIGJ5IGV4dGVuc2lvbnMuXG4gICAgICAuLi5zdGVwLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgcmVzb3VyY2UgPSAnc3RlcCc7XG5cbiAgLy8gSW5jbHVkZSBBTEwgY29ycmVsYXRlZCBldmVudHMgb24gdGhlIHNwYW4gc28gdGhlIHNpZGViYXIgZGV0YWlsIHZpZXdcbiAgLy8gY2FuIGRpc3BsYXkgdGhlbS4gVGhlIHRpbWVsaW5lIHVzZXMgdGhlIGBzaG93VmVydGljYWxMaW5lYCBmbGFnIHRvXG4gIC8vIGRldGVybWluZSB3aGljaCBldmVudHMgYXBwZWFyIGFzIG1hcmtlcnMuXG4gIGNvbnN0IGV2ZW50cyA9IGNvbnZlcnRFdmVudHNUb1NwYW5FdmVudHMoc3RlcEV2ZW50cywgZmFsc2UsIHtcbiAgICBwcmVmZXJPY2N1cnJlZEF0OiB0cnVlLFxuICB9KTtcblxuICAvLyBVc2UgdGhlIGV2ZW50IG9jY3VycmVuY2UgdGltZXN0YW1wIGZvciBzdGVwIHNwYW5zIHdoZW4gaXQgaXMgYXZhaWxhYmxlLFxuICAvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGluZ2VzdCB0aW1lc3RhbXAgdXNlZCBieSBvbGRlciBldmVudCBzdHJlYW1zLlxuICBjb25zdCBzcGFuU3RhcnRFdmVudCA9XG4gICAgc3RlcEV2ZW50cy5maW5kKChldmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAnc3RlcF9jcmVhdGVkJykgPz9cbiAgICBzdGVwRXZlbnRzWzBdO1xuICBjb25zdCBzcGFuU3RhcnRUaW1lID1cbiAgICBnZXRFdmVudFRpbWVzdGFtcChzcGFuU3RhcnRFdmVudCkgPz8gbmV3IERhdGUoc3RlcC5jcmVhdGVkQXQpO1xuICBsZXQgYWN0aXZlU3RhcnRUaW1lID0gc3RlcC5zdGFydGVkQXQgPyBuZXcgRGF0ZShzdGVwLnN0YXJ0ZWRBdCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGZpcnN0U3RhcnRFdmVudCA9IHN0ZXBFdmVudHMuZmluZChcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ3N0ZXBfc3RhcnRlZCdcbiAgKTtcbiAgaWYgKGZpcnN0U3RhcnRFdmVudCkge1xuICAgIGFjdGl2ZVN0YXJ0VGltZSA9XG4gICAgICBnZXRFdmVudFRpbWVzdGFtcChmaXJzdFN0YXJ0RXZlbnQpID8/IG5ldyBEYXRlKGZpcnN0U3RhcnRFdmVudC5jcmVhdGVkQXQpO1xuICB9XG5cbiAgbGV0IGVuZFRpbWUgPSBuZXcgRGF0ZShtYXhFbmRUaW1lKTtcbiAgaWYgKHN0ZXAuY29tcGxldGVkQXQpIHtcbiAgICBjb25zdCBjb21wbGV0ZWRFdmVudCA9IHN0ZXBFdmVudHNcbiAgICAgIC5zbGljZSgpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAuZmluZCgoZXZlbnQpID0+IGlzVGVybWluYWxTdGVwRXZlbnRUeXBlKGV2ZW50LmV2ZW50VHlwZSkpO1xuICAgIGVuZFRpbWUgPSBnZXRFdmVudFRpbWVzdGFtcChjb21wbGV0ZWRFdmVudCkgPz8gbmV3IERhdGUoc3RlcC5jb21wbGV0ZWRBdCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNwYW5JZDogU3RyaW5nKHN0ZXAuc3RlcElkKSxcbiAgICBuYW1lOiBwYXJzZWROYW1lPy5zaG9ydE5hbWUgPz8gU3RyaW5nKHN0ZXAuc3RlcE5hbWUpLFxuICAgIGtpbmQ6IDEsIC8vIElOVEVSTkFMIHNwYW4ga2luZFxuICAgIHJlc291cmNlLFxuICAgIGxpYnJhcnk6IFdPUktGTE9XX0xJQlJBUlksXG4gICAgc3RhdHVzOiB7IGNvZGU6IDAgfSxcbiAgICB0cmFjZUZsYWdzOiAxLFxuICAgIGF0dHJpYnV0ZXMsXG4gICAgbGlua3M6IFtdLFxuICAgIGV2ZW50cyxcbiAgICBzdGFydFRpbWU6IGRhdGVUb090ZWxUaW1lKHNwYW5TdGFydFRpbWUpLFxuICAgIGVuZFRpbWU6IGRhdGVUb090ZWxUaW1lKGVuZFRpbWUpLFxuICAgIGR1cmF0aW9uOiBjYWxjdWxhdGVEdXJhdGlvbihzcGFuU3RhcnRUaW1lLCBlbmRUaW1lKSxcbiAgICAvLyBPbmx5IHNldCBhY3RpdmVTdGFydFRpbWUgaWYgaXQgZGlmZmVycyBmcm9tIHN0YXJ0VGltZSAoaS5lLiwgdGhlcmUgd2FzIGEgcXVldWVkIHBlcmlvZClcbiAgICBhY3RpdmVTdGFydFRpbWU6XG4gICAgICBhY3RpdmVTdGFydFRpbWUgJiYgYWN0aXZlU3RhcnRUaW1lLmdldFRpbWUoKSA+IHNwYW5TdGFydFRpbWUuZ2V0VGltZSgpXG4gICAgICAgID8gZGF0ZVRvT3RlbFRpbWUoYWN0aXZlU3RhcnRUaW1lKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGhvb2tFdmVudHNUb0hvb2tFbnRpdHkgPSAoXG4gIGV2ZW50czogRXZlbnRbXVxuKToge1xuICBob29rSWQ6IHN0cmluZztcbiAgcnVuSWQ6IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogRGF0ZTtcbiAgcmVjZWl2ZWRDb3VudDogbnVtYmVyO1xuICBsYXN0UmVjZWl2ZWRBdD86IERhdGU7XG4gIGRpc3Bvc2VkQXQ/OiBEYXRlO1xufSB8IG51bGwgPT4ge1xuICBjb25zdCBjcmVhdGVkRXZlbnQgPSBldmVudHMuZmluZChcbiAgICAoZXZlbnQpID0+IGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfY3JlYXRlZCdcbiAgKTtcbiAgaWYgKCFjcmVhdGVkRXZlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZWNlaXZlZEV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoXG4gICAgKGV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICdob29rX3JlY2VpdmVkJ1xuICApO1xuICBjb25zdCBkaXNwb3NlZEV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoXG4gICAgKGV2ZW50KSA9PiBldmVudC5ldmVudFR5cGUgPT09ICdob29rX2Rpc3Bvc2VkJ1xuICApO1xuICBjb25zdCBsYXN0UmVjZWl2ZWRFdmVudCA9IHJlY2VpdmVkRXZlbnRzLmF0KC0xKTtcbiAgcmV0dXJuIHtcbiAgICBob29rSWQ6IGNyZWF0ZWRFdmVudC5jb3JyZWxhdGlvbklkLFxuICAgIHJ1bklkOiBjcmVhdGVkRXZlbnQucnVuSWQsXG4gICAgdG9rZW46IGNyZWF0ZWRFdmVudC5ldmVudERhdGE/LnRva2VuLFxuICAgIGNyZWF0ZWRBdDogZ2V0RXZlbnRUaW1lc3RhbXAoY3JlYXRlZEV2ZW50KSA/PyBjcmVhdGVkRXZlbnQuY3JlYXRlZEF0LFxuICAgIHJlY2VpdmVkQ291bnQ6IHJlY2VpdmVkRXZlbnRzLmxlbmd0aCxcbiAgICBsYXN0UmVjZWl2ZWRBdDogZ2V0RXZlbnRUaW1lc3RhbXAobGFzdFJlY2VpdmVkRXZlbnQpLFxuICAgIGRpc3Bvc2VkQXQ6IGdldEV2ZW50VGltZXN0YW1wKGRpc3Bvc2VkRXZlbnRzLmF0KC0xKSksXG4gIH07XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgd29ya2Zsb3cgSG9vayB0byBhbiBPcGVuVGVsZW1ldHJ5IFNwYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhvb2tUb1NwYW4oaG9va0V2ZW50czogRXZlbnRbXSwgbWF4RW5kVGltZTogRGF0ZSk6IFNwYW4gfCBudWxsIHtcbiAgY29uc3QgaG9vayA9IGhvb2tFdmVudHNUb0hvb2tFbnRpdHkoaG9va0V2ZW50cyk7XG4gIGlmICghaG9vaykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ29udmVydCBob29rLXJlbGF0ZWQgZXZlbnRzIHRvIHNwYW4gZXZlbnRzXG4gIGNvbnN0IGV2ZW50cyA9IGNvbnZlcnRFdmVudHNUb1NwYW5FdmVudHMoaG9va0V2ZW50cywgZmFsc2UpO1xuXG4gIGNvbnN0IGVuZFRpbWUgPSBob29rLmRpc3Bvc2VkQXQgfHwgbWF4RW5kVGltZTtcblxuICByZXR1cm4ge1xuICAgIHNwYW5JZDogU3RyaW5nKGhvb2suaG9va0lkKSxcbiAgICBuYW1lOiBob29rLnRva2VuID8/IFN0cmluZyhob29rLmhvb2tJZCksXG4gICAga2luZDogMSwgLy8gSU5URVJOQUwgc3BhbiBraW5kXG4gICAgcmVzb3VyY2U6ICdob29rJyxcbiAgICBsaWJyYXJ5OiBXT1JLRkxPV19MSUJSQVJZLFxuICAgIHN0YXR1czogeyBjb2RlOiAxIH0sXG4gICAgdHJhY2VGbGFnczogMSxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICByZXNvdXJjZTogJ2hvb2snIGFzIGNvbnN0LFxuICAgICAgZGF0YTogaG9vayxcbiAgICB9LFxuICAgIGxpbmtzOiBbXSxcbiAgICBldmVudHMsXG4gICAgc3RhcnRUaW1lOiBkYXRlVG9PdGVsVGltZShob29rLmNyZWF0ZWRBdCksXG4gICAgZW5kVGltZTogZGF0ZVRvT3RlbFRpbWUoZW5kVGltZSksXG4gICAgZHVyYXRpb246IGNhbGN1bGF0ZUR1cmF0aW9uKGhvb2suY3JlYXRlZEF0LCBlbmRUaW1lKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcm9vdCBzcGFuIGZvciB0aGUgd29ya2Zsb3cgcnVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Ub1NwYW4oXG4gIHJ1bjogV29ya2Zsb3dSdW4sXG4gIHJ1bkV2ZW50czogRXZlbnRbXSxcbiAgbm93VGltZT86IERhdGVcbik6IFNwYW4ge1xuICBjb25zdCBub3cgPSBub3dUaW1lID8/IG5ldyBEYXRlKCk7XG5cbiAgLy8gUHJlZmVyIHRoZSBldmVudCBvY2N1cnJlbmNlIHRpbWVzdGFtcCB3aGVuIGF2YWlsYWJsZSBzbyB0aGUgcm9vdCBzcGFuXG4gIC8vIGxpbmVzIHVwIHdpdGggY2hpbGQgc3BhbnMgdGhhdCBhbHJlYWR5IHVzZSBldmVudCBvY2N1cnJlbmNlIHRpbWUuXG4gIGNvbnN0IHJ1bkNyZWF0ZWRFdmVudCA9IHJ1bkV2ZW50cy5maW5kKFxuICAgIChldmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAncnVuX2NyZWF0ZWQnXG4gICk7XG4gIGNvbnN0IHJ1blN0YXJ0ZWRFdmVudCA9IHJ1bkV2ZW50cy5maW5kKFxuICAgIChldmVudCkgPT4gZXZlbnQuZXZlbnRUeXBlID09PSAncnVuX3N0YXJ0ZWQnXG4gICk7XG4gIGNvbnN0IHRlcm1pbmFsRXZlbnQgPSBydW5FdmVudHNcbiAgICAuc2xpY2UoKVxuICAgIC5yZXZlcnNlKClcbiAgICAuZmluZChcbiAgICAgIChldmVudCkgPT5cbiAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSAncnVuX2NvbXBsZXRlZCcgfHxcbiAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSAncnVuX2ZhaWxlZCcgfHxcbiAgICAgICAgZXZlbnQuZXZlbnRUeXBlID09PSAncnVuX2NhbmNlbGxlZCdcbiAgICApO1xuICBjb25zdCBzcGFuU3RhcnRUaW1lID1cbiAgICBnZXRFdmVudFRpbWVzdGFtcChydW5DcmVhdGVkRXZlbnQpID8/IG5ldyBEYXRlKHJ1bi5jcmVhdGVkQXQpO1xuICBjb25zdCBhY3RpdmVTdGFydFRpbWUgPVxuICAgIGdldEV2ZW50VGltZXN0YW1wKHJ1blN0YXJ0ZWRFdmVudCkgPz9cbiAgICAocnVuLnN0YXJ0ZWRBdCA/IG5ldyBEYXRlKHJ1bi5zdGFydGVkQXQpIDogdW5kZWZpbmVkKTtcbiAgY29uc3QgY29tcGxldGVkQXQgPVxuICAgIGdldEV2ZW50VGltZXN0YW1wKHRlcm1pbmFsRXZlbnQpID8/IHJ1bi5jb21wbGV0ZWRBdCA/PyB1bmRlZmluZWQ7XG4gIGNvbnN0IGVuZFRpbWUgPSBjb21wbGV0ZWRBdCA/PyBub3c7XG5cbiAgLy8gT25seSBlbWJlZCBpZGVudGlmaWNhdGlvbiBmaWVsZHMsIG5vdCB0aGUgZnVsbCBvYmplY3Qgd2l0aFxuICAvLyBpbnB1dC9vdXRwdXQvZXJyb3Igd2hpY2ggbWF5IGNvbnRhaW4gbm9uLWNsb25lYWJsZSB0eXBlcy4gTGlmZWN5Y2xlXG4gIC8vIHRpbWVzdGFtcHMgYXJlIGV2ZW50LWRlcml2ZWQgc28gZGV0YWlsIHJvd3MgYWxpZ24gd2l0aCB0aGUgc3BhbiB0aW1lbGluZS5cbiAgY29uc3QgeyBpbnB1dDogX2ksIG91dHB1dDogX28sIGVycm9yOiBfZSwgLi4ucnVuSWRlbnRpdHkgfSA9IHJ1bjtcbiAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICByZXNvdXJjZTogJ3J1bicgYXMgY29uc3QsXG4gICAgZGF0YToge1xuICAgICAgLi4ucnVuSWRlbnRpdHksXG4gICAgICBjcmVhdGVkQXQ6IHNwYW5TdGFydFRpbWUsXG4gICAgICBzdGFydGVkQXQ6IGFjdGl2ZVN0YXJ0VGltZSxcbiAgICAgIGNvbXBsZXRlZEF0LFxuICAgIH0sXG4gIH07XG5cbiAgLy8gQ29udmVydCBydW4tbGV2ZWwgZXZlbnRzIHRvIHNwYW4gZXZlbnRzXG4gIGNvbnN0IGV2ZW50cyA9IGNvbnZlcnRFdmVudHNUb1NwYW5FdmVudHMocnVuRXZlbnRzLCBmYWxzZSwge1xuICAgIHByZWZlck9jY3VycmVkQXQ6IHRydWUsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgc3BhbklkOiBTdHJpbmcocnVuLnJ1bklkKSxcbiAgICBuYW1lOiBTdHJpbmcocGFyc2VXb3JrZmxvd05hbWUocnVuLndvcmtmbG93TmFtZSk/LnNob3J0TmFtZSA/PyAnPycpLFxuICAgIGtpbmQ6IDEsIC8vIElOVEVSTkFMIHNwYW4ga2luZFxuICAgIHJlc291cmNlOiAncnVuJyxcbiAgICBsaWJyYXJ5OiBXT1JLRkxPV19MSUJSQVJZLFxuICAgIHN0YXR1czogeyBjb2RlOiAwIH0sXG4gICAgdHJhY2VGbGFnczogMSxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIGxpbmtzOiBbXSxcbiAgICBldmVudHMsXG4gICAgc3RhcnRUaW1lOiBkYXRlVG9PdGVsVGltZShzcGFuU3RhcnRUaW1lKSxcbiAgICBlbmRUaW1lOiBkYXRlVG9PdGVsVGltZShlbmRUaW1lKSxcbiAgICBkdXJhdGlvbjogY2FsY3VsYXRlRHVyYXRpb24oc3BhblN0YXJ0VGltZSwgZW5kVGltZSksXG4gICAgLy8gT25seSBzZXQgYWN0aXZlU3RhcnRUaW1lIGlmIGl0IGRpZmZlcnMgZnJvbSBzdGFydFRpbWUgKGkuZS4sIHRoZXJlIHdhcyBhIHF1ZXVlZCBwZXJpb2QpXG4gICAgYWN0aXZlU3RhcnRUaW1lOlxuICAgICAgYWN0aXZlU3RhcnRUaW1lICYmIGFjdGl2ZVN0YXJ0VGltZS5nZXRUaW1lKCkgPiBzcGFuU3RhcnRUaW1lLmdldFRpbWUoKVxuICAgICAgICA/IGRhdGVUb090ZWxUaW1lKGFjdGl2ZVN0YXJ0VGltZSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gIH07XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplicate-events.d.ts","sourceRoot":"","sources":["../../src/lib/duplicate-events.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"duplicate-events.d.ts","sourceRoot":"","sources":["../../src/lib/duplicate-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,KAAK,EAGX,MAAM,iBAAiB,CAAC;AA2BzB;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,uIACkG,CAAC;AAyGvI;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,EAAE,iBAAiB,EAAE,EAAE;IAAE,iBAAiB,EAAE,OAAO,CAAA;CAAE,GACpD,GAAG,CAAC,MAAM,CAAC,CAYb"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { classifyEntityEvent, isSlotEventId, TERMINAL_EVENT_CLASSES, } from '@workflow/world';
|
|
2
2
|
/**
|
|
3
3
|
* Identifies events a replay reads past.
|
|
4
4
|
*
|
|
5
5
|
* Concurrent replays of one run write to a shared log, so a replay working
|
|
6
6
|
* from a stale prefix can commit a second `step_created` / `step_started` /
|
|
7
|
-
* `wait_created` for an entity the log already records one of.
|
|
8
|
-
* reads the first event of that class at the same position, so a
|
|
9
|
-
* cannot change what the workflow observes.
|
|
7
|
+
* `wait_created` / `attr_set` for an entity the log already records one of.
|
|
8
|
+
* Every replay reads the first event of that class at the same position, so a
|
|
9
|
+
* later one cannot change what the workflow observes.
|
|
10
10
|
*
|
|
11
|
-
* The classification
|
|
12
|
-
*
|
|
13
|
-
* is consumer state: the runtime passes over an event only after every
|
|
11
|
+
* The classification comes from `classifyEntityEvent` in `@workflow/world`,
|
|
12
|
+
* the same function the runtime keys its own duplicate detection on. What it
|
|
13
|
+
* cannot share is consumer state: the runtime passes over an event only after every
|
|
14
14
|
* registered callback has declined it, and a callback registered for a
|
|
15
15
|
* still-open entity legitimately claims a repeat (each retry of a step writes
|
|
16
16
|
* another `step_started`, and a live step consumer absorbs a second
|
|
@@ -18,24 +18,10 @@ import { entityEventClass, isSlotEventId, } from '@workflow/world';
|
|
|
18
18
|
* same entity sits earlier in the log, which is the point past which no
|
|
19
19
|
* consumer remains.
|
|
20
20
|
*/
|
|
21
|
-
/**
|
|
22
|
-
* Classes whose event closes its entity: no consumer is left for it after.
|
|
23
|
-
*
|
|
24
|
-
* The run's own terminal events are absent because `entityEventClass` gives
|
|
25
|
-
* them no class. The runtime exits rather than replaying the body once the log
|
|
26
|
-
* holds one, so nothing ever consumes them and nothing can repeat them.
|
|
27
|
-
*/
|
|
28
|
-
const TERMINAL_EVENT_CLASSES = new Set([
|
|
29
|
-
'step_terminal',
|
|
30
|
-
'wait_completed',
|
|
31
|
-
'hook_disposed',
|
|
32
|
-
]);
|
|
33
21
|
/** Classes with no entity to close first: the log records one per run. */
|
|
34
22
|
const SINGLETON_EVENT_CLASSES = new Set([
|
|
35
23
|
'run_started',
|
|
36
24
|
]);
|
|
37
|
-
/** Entity key for events that carry no correlation ID (the run itself). */
|
|
38
|
-
const RUN_ENTITY_KEY = '';
|
|
39
25
|
/**
|
|
40
26
|
* Shown against an event this module reports. Deliberately says what the log
|
|
41
27
|
* shows rather than what the runtime did with it: tolerating these repeats is
|
|
@@ -107,10 +93,13 @@ function foldDuplicates(ordered) {
|
|
|
107
93
|
const seenClasses = new Set();
|
|
108
94
|
const closedEntities = new Set();
|
|
109
95
|
for (const event of ordered) {
|
|
110
|
-
|
|
111
|
-
|
|
96
|
+
// Shared with the runtime's own duplicate detection, deliberately: an
|
|
97
|
+
// event it tracks under no class is one it never reads past, so naming it
|
|
98
|
+
// here would grey out an event the run acted on.
|
|
99
|
+
const classification = classifyEntityEvent(event);
|
|
100
|
+
if (classification === undefined)
|
|
112
101
|
continue;
|
|
113
|
-
const entity =
|
|
102
|
+
const { eventClass, entity } = classification;
|
|
114
103
|
const classKey = `${eventClass}:${entity}`;
|
|
115
104
|
const repeatsClass = seenClasses.has(classKey);
|
|
116
105
|
const entityWasClosed = closedEntities.has(entity);
|
|
@@ -163,4 +152,4 @@ export function findDuplicateEventIds(events, { isCompleteHistory }) {
|
|
|
163
152
|
return new Set();
|
|
164
153
|
return foldDuplicates(ordered);
|
|
165
154
|
}
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVwbGljYXRlLWV2ZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvZHVwbGljYXRlLWV2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsZ0JBQWdCLEVBQ2hCLGFBQWEsR0FDZCxNQUFNLGlCQUFpQixDQUFDO0FBRXpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSDs7Ozs7O0dBTUc7QUFDSCxNQUFNLHNCQUFzQixHQUFrQyxJQUFJLEdBQUcsQ0FBQztJQUNwRSxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLGVBQWU7Q0FDaEIsQ0FBQyxDQUFDO0FBRUgsMEVBQTBFO0FBQzFFLE1BQU0sdUJBQXVCLEdBQWtDLElBQUksR0FBRyxDQUFDO0lBQ3JFLGFBQWE7Q0FDZCxDQUFDLENBQUM7QUFFSCwyRUFBMkU7QUFDM0UsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBRTFCOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQ2xDLG9JQUFvSSxDQUFDO0FBRXZJOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsY0FBYyxDQUFDLENBQVEsRUFBRSxDQUFRO0lBQ3hDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzdDLENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQVk7SUFDL0IsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUNsQyxPQUFPLFNBQVMsWUFBWSxJQUFJO1FBQzlCLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO1FBQ3JCLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUE4QixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDekQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILFNBQVMsbUJBQW1CLENBQUMsV0FBNkI7SUFDeEQsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFNUUsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN4RCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNoRCwwRUFBMEU7UUFDMUUsNkRBQTZEO1FBQzdELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2xFLElBQUksT0FBTyxHQUFHLFFBQVE7WUFBRSxPQUFPLEtBQUssQ0FBQztJQUN2QyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsd0RBQXdEO0FBQ3hELFNBQVMsY0FBYyxDQUFDLE9BQXlCO0lBQy9DLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUN0QyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBRXpDLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUIsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JELElBQUksVUFBVSxLQUFLLFNBQVM7WUFBRSxTQUFTO1FBRXZDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksY0FBYyxDQUFDO1FBQ3JELE1BQU0sUUFBUSxHQUFHLEdBQUcsVUFBVSxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzNDLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuRCxJQUFJLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzNDLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixzRUFBc0U7WUFDdEUsaUVBQWlFO1lBQ2pFLHdFQUF3RTtZQUN4RSx3RUFBd0U7WUFDeEUsdURBQXVEO1lBQ3ZELElBQUksZUFBZTtnQkFBRSxNQUFNO1lBQzNCLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUIsU0FBUztRQUNYLENBQUM7UUFFRCx5RUFBeUU7UUFDekUsdURBQXVEO1FBQ3ZELElBQUksZUFBZSxJQUFJLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQy9ELFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxNQUF3QixFQUN4QixFQUFFLGlCQUFpQixFQUFrQztJQUVyRCxJQUFJLENBQUMsaUJBQWlCLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTlELDJFQUEyRTtJQUMzRSxzRUFBc0U7SUFDdEUsTUFBTSxPQUFPLEdBQUcsTUFBTTtTQUNuQixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXhCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7UUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLENBQUM7SUFFcEQsT0FBTyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgRW50aXR5RXZlbnRDbGFzcyxcbiAgdHlwZSBFdmVudCxcbiAgZW50aXR5RXZlbnRDbGFzcyxcbiAgaXNTbG90RXZlbnRJZCxcbn0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcblxuLyoqXG4gKiBJZGVudGlmaWVzIGV2ZW50cyBhIHJlcGxheSByZWFkcyBwYXN0LlxuICpcbiAqIENvbmN1cnJlbnQgcmVwbGF5cyBvZiBvbmUgcnVuIHdyaXRlIHRvIGEgc2hhcmVkIGxvZywgc28gYSByZXBsYXkgd29ya2luZ1xuICogZnJvbSBhIHN0YWxlIHByZWZpeCBjYW4gY29tbWl0IGEgc2Vjb25kIGBzdGVwX2NyZWF0ZWRgIC8gYHN0ZXBfc3RhcnRlZGAgL1xuICogYHdhaXRfY3JlYXRlZGAgZm9yIGFuIGVudGl0eSB0aGUgbG9nIGFscmVhZHkgcmVjb3JkcyBvbmUgb2YuIEV2ZXJ5IHJlcGxheVxuICogcmVhZHMgdGhlIGZpcnN0IGV2ZW50IG9mIHRoYXQgY2xhc3MgYXQgdGhlIHNhbWUgcG9zaXRpb24sIHNvIGEgbGF0ZXIgb25lXG4gKiBjYW5ub3QgY2hhbmdlIHdoYXQgdGhlIHdvcmtmbG93IG9ic2VydmVzLlxuICpcbiAqIFRoZSBjbGFzc2lmaWNhdGlvbiBtaXJyb3JzIGBlbnRpdHlFdmVudENsYXNzYCBpbiBgQHdvcmtmbG93L3dvcmxkYCwgd2hpY2ggaXNcbiAqIHdoYXQgdGhlIHJ1bnRpbWUga2V5cyBpdHMgb3duIGR1cGxpY2F0ZSBkZXRlY3Rpb24gb24uIFdoYXQgaXQgY2Fubm90IG1pcnJvclxuICogaXMgY29uc3VtZXIgc3RhdGU6IHRoZSBydW50aW1lIHBhc3NlcyBvdmVyIGFuIGV2ZW50IG9ubHkgYWZ0ZXIgZXZlcnlcbiAqIHJlZ2lzdGVyZWQgY2FsbGJhY2sgaGFzIGRlY2xpbmVkIGl0LCBhbmQgYSBjYWxsYmFjayByZWdpc3RlcmVkIGZvciBhXG4gKiBzdGlsbC1vcGVuIGVudGl0eSBsZWdpdGltYXRlbHkgY2xhaW1zIGEgcmVwZWF0IChlYWNoIHJldHJ5IG9mIGEgc3RlcCB3cml0ZXNcbiAqIGFub3RoZXIgYHN0ZXBfc3RhcnRlZGAsIGFuZCBhIGxpdmUgc3RlcCBjb25zdW1lciBhYnNvcmJzIGEgc2Vjb25kXG4gKiBgc3RlcF9jcmVhdGVkYCkuIFNvIGEgcmVwZWF0IGNvdW50cyBoZXJlIG9ubHkgb25jZSBhIHRlcm1pbmFsIGV2ZW50IGZvciB0aGVcbiAqIHNhbWUgZW50aXR5IHNpdHMgZWFybGllciBpbiB0aGUgbG9nLCB3aGljaCBpcyB0aGUgcG9pbnQgcGFzdCB3aGljaCBub1xuICogY29uc3VtZXIgcmVtYWlucy5cbiAqL1xuXG4vKipcbiAqIENsYXNzZXMgd2hvc2UgZXZlbnQgY2xvc2VzIGl0cyBlbnRpdHk6IG5vIGNvbnN1bWVyIGlzIGxlZnQgZm9yIGl0IGFmdGVyLlxuICpcbiAqIFRoZSBydW4ncyBvd24gdGVybWluYWwgZXZlbnRzIGFyZSBhYnNlbnQgYmVjYXVzZSBgZW50aXR5RXZlbnRDbGFzc2AgZ2l2ZXNcbiAqIHRoZW0gbm8gY2xhc3MuIFRoZSBydW50aW1lIGV4aXRzIHJhdGhlciB0aGFuIHJlcGxheWluZyB0aGUgYm9keSBvbmNlIHRoZSBsb2dcbiAqIGhvbGRzIG9uZSwgc28gbm90aGluZyBldmVyIGNvbnN1bWVzIHRoZW0gYW5kIG5vdGhpbmcgY2FuIHJlcGVhdCB0aGVtLlxuICovXG5jb25zdCBURVJNSU5BTF9FVkVOVF9DTEFTU0VTOiBSZWFkb25seVNldDxFbnRpdHlFdmVudENsYXNzPiA9IG5ldyBTZXQoW1xuICAnc3RlcF90ZXJtaW5hbCcsXG4gICd3YWl0X2NvbXBsZXRlZCcsXG4gICdob29rX2Rpc3Bvc2VkJyxcbl0pO1xuXG4vKiogQ2xhc3NlcyB3aXRoIG5vIGVudGl0eSB0byBjbG9zZSBmaXJzdDogdGhlIGxvZyByZWNvcmRzIG9uZSBwZXIgcnVuLiAqL1xuY29uc3QgU0lOR0xFVE9OX0VWRU5UX0NMQVNTRVM6IFJlYWRvbmx5U2V0PEVudGl0eUV2ZW50Q2xhc3M+ID0gbmV3IFNldChbXG4gICdydW5fc3RhcnRlZCcsXG5dKTtcblxuLyoqIEVudGl0eSBrZXkgZm9yIGV2ZW50cyB0aGF0IGNhcnJ5IG5vIGNvcnJlbGF0aW9uIElEICh0aGUgcnVuIGl0c2VsZikuICovXG5jb25zdCBSVU5fRU5USVRZX0tFWSA9ICcnO1xuXG4vKipcbiAqIFNob3duIGFnYWluc3QgYW4gZXZlbnQgdGhpcyBtb2R1bGUgcmVwb3J0cy4gRGVsaWJlcmF0ZWx5IHNheXMgd2hhdCB0aGUgbG9nXG4gKiBzaG93cyByYXRoZXIgdGhhbiB3aGF0IHRoZSBydW50aW1lIGRpZCB3aXRoIGl0OiB0b2xlcmF0aW5nIHRoZXNlIHJlcGVhdHMgaXNcbiAqIHJlY2VudCwgYW5kIG9uIGEgcnVuIHJlY29yZGVkIGJlZm9yZSBpdCBhIHJlcGVhdCBubyBjb25zdW1lciBjbGFpbWVkIGZhaWxlZFxuICogdGhlIHJlcGxheSBpbnN0ZWFkIG9mIGJlaW5nIHBhc3NlZCBvdmVyLlxuICovXG5leHBvcnQgY29uc3QgRFVQTElDQVRFX0VWRU5UX01FU1NBR0UgPVxuICAnV3JpdHRlbiBieSBhIGNvbmN1cnJlbnQgcmVwbGF5IGFmdGVyIGFuIGV2ZW50IG9mIHRoZSBzYW1lIGtpbmQgd2FzIGFscmVhZHkgcmVjb3JkZWQgYW5kIGFjdGVkIG9uLiBUaGUgcnVuIGZvbGxvd3MgdGhlIGVhcmxpZXIgb25lLic7XG5cbi8qKlxuICogQ2FuZGlkYXRlIGxvZyBvcmRlciwgYnkgZXZlbnQgSUQuXG4gKlxuICogRXZlbnQgSURzIGFyZSBmaXhlZC13aWR0aCBhbmQgbW9ub3RvbmljIHdpdGhpbiBhIHJ1biB1bmRlciBib3RoIHRoZSBVTElEIGFuZFxuICogdGhlIHNsb3Qgc2NoZW1lLiBMZW5ndGggaXMgY29tcGFyZWQgZmlyc3Qgc28gYSBzaG9ydGVyIElEIG5ldmVyIHNvcnRzIGFmdGVyXG4gKiBhIGxvbmdlciBvbmUgb24gYSBsb2cgdGhhdCBtaXhlcyB3aWR0aHMuXG4gKlxuICogV2hldGhlciB0aGlzICppcyogdGhlIGxvZyBvcmRlciBkZXBlbmRzIG9uIHRoZSBJRCBzY2hlbWUsIHdoaWNoIGlzIHdoeVxuICoge0BsaW5rIGhhc0tub3dhYmxlTG9nT3JkZXJ9IGdhdGVzIHRoZSBmb2xkLiBTZWUgaXRzIGRvYy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUV2ZW50SWQoYTogRXZlbnQsIGI6IEV2ZW50KTogbnVtYmVyIHtcbiAgaWYgKGEuZXZlbnRJZC5sZW5ndGggIT09IGIuZXZlbnRJZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gYS5ldmVudElkLmxlbmd0aCAtIGIuZXZlbnRJZC5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIGEuZXZlbnRJZCA8IGIuZXZlbnRJZCA/IC0xIDogYS5ldmVudElkID4gYi5ldmVudElkID8gMSA6IDA7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZWRBdE1zKGV2ZW50OiBFdmVudCk6IG51bWJlciB7XG4gIGNvbnN0IGNyZWF0ZWRBdCA9IGV2ZW50LmNyZWF0ZWRBdDtcbiAgcmV0dXJuIGNyZWF0ZWRBdCBpbnN0YW5jZW9mIERhdGVcbiAgICA/IGNyZWF0ZWRBdC5nZXRUaW1lKClcbiAgICA6IG5ldyBEYXRlKGNyZWF0ZWRBdCBhcyB1bmtub3duIGFzIHN0cmluZykuZ2V0VGltZSgpO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdGhlIG9yZGVyIHRoZSBydW4gY29uc3VtZWQgaXRzIGxvZyBpbiBjYW4gYmUgcmVjb3ZlcmVkIGZyb20gdGhlXG4gKiBldmVudHMgYWxvbmUuXG4gKlxuICogV2hpY2ggb2NjdXJyZW5jZSBvZiBhIGNsYXNzIGNhbWUgZmlyc3QgaXMgdGhlIHdob2xlIHF1ZXN0aW9uIGhlcmUsIHNvIHRoZVxuICogZm9sZCBuZWVkcyB0aGUgbG9nJ3Mgb3JkZXIsIG5vdCBhbiBvcmRlci4gVGhlIGJhY2tlbmRzIGRvIG5vdCBhZ3JlZSBvbiBob3dcbiAqIHRvIHJlY292ZXIgaXQgZm9yIGV2ZXJ5IElEIHNjaGVtZTpcbiAqXG4gKiAtIEEgKipzbG90LW51bWJlcmVkKiogcnVuIGNhcnJpZXMgaXRzIHBvc2l0aW9uIGluIHRoZSBJRC4gVGhlIHNsb3QgaXMgZHJhd25cbiAqICAgYXQgdGhlIHB1Ymxpc2gsIHdoaWNoIGlzIHRoZSBsaW5lYXJpemF0aW9uIHBvaW50LCBzbyBzbG90IG9yZGVyIGlzIGxvZ1xuICogICBvcmRlciBldmVyeXdoZXJlIGFuZCB0aGUgSUQgYWxvbmUgc2V0dGxlcyBpdC5cbiAqIC0gQSAqKlVMSUQtbnVtYmVyZWQqKiBydW4gZG9lcyBub3QuIE9uZSBiYWNrZW5kIHJldHVybnMgc3VjaCBhIGxvZyBpblxuICogICBgKGNyZWF0ZWRBdCwgZXZlbnRJZClgIG9yZGVyIHdoaWxlIGFub3RoZXIgcmV0dXJucyBpdCBrZXllZCBvbiB0aGUgSUQsIGFuZFxuICogICBgY3JlYXRlZEF0YCBpcyBzdGFtcGVkIHdoZW4gdGhlIHdyaXRlIHJlcXVlc3QgYXJyaXZlcyByYXRoZXIgdGhhbiB3aGVuIGl0XG4gKiAgIGNvbW1pdHMuIENvbmN1cnJlbnQgd3JpdGVycyBjYW4gdGhlcmVmb3JlIHByb2R1Y2Ugb3Bwb3NpdGUgdGltZXN0YW1wIGFuZFxuICogICBJRCBvcmRlcnMsIGFuZCB0aGUgcnVuIGNvbnN1bWVkIHdoaWNoZXZlciBpdHMgb3duIGJhY2tlbmQgc2VydmVkLlxuICpcbiAqIFNvIGEgVUxJRCBsb2cgaXMgb25seSBrbm93YWJsZSB3aGVyZSB0aGUgdHdvIG9yZGVycyBhZ3JlZS4gV2hlcmUgdGhleVxuICogY29udHJhZGljdCwgdGhlIGZvbGQgY291bGQgbmFtZSB0aGUgc3Vydml2aW5nIGV2ZW50IGFuZCBwYXNzIG92ZXIgdGhlIG9uZVxuICogdGhlIHJ1biBhY3RlZCBvbiwgd2hpY2ggaXMgd29yc2UgdGhhbiBzYXlpbmcgbm90aGluZy5cbiAqL1xuZnVuY3Rpb24gaGFzS25vd2FibGVMb2dPcmRlcihvcmRlcmVkQnlJZDogcmVhZG9ubHkgRXZlbnRbXSk6IGJvb2xlYW4ge1xuICBpZiAob3JkZXJlZEJ5SWQuZXZlcnkoKGV2ZW50KSA9PiBpc1Nsb3RFdmVudElkKGV2ZW50LmV2ZW50SWQpKSkgcmV0dXJuIHRydWU7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IG9yZGVyZWRCeUlkLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IHByZXZpb3VzID0gY3JlYXRlZEF0TXMob3JkZXJlZEJ5SWRbaW5kZXggLSAxXSk7XG4gICAgY29uc3QgY3VycmVudCA9IGNyZWF0ZWRBdE1zKG9yZGVyZWRCeUlkW2luZGV4XSk7XG4gICAgLy8gQSBtaXNzaW5nIG9yIHVucGFyc2VhYmxlIHRpbWVzdGFtcCBsZWF2ZXMgbm90aGluZyB0byBjb3Jyb2JvcmF0ZSB0aGUgSURcbiAgICAvLyBvcmRlciB3aXRoLCB3aGljaCBpcyB0aGUgc2FtZSBwb3NpdGlvbiBhcyBhIGNvbnRyYWRpY3Rpb24uXG4gICAgaWYgKE51bWJlci5pc05hTihwcmV2aW91cykgfHwgTnVtYmVyLmlzTmFOKGN1cnJlbnQpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnQgPCBwcmV2aW91cykgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBUaGUgZm9sZCBpdHNlbGYsIG92ZXIgYSBsb2cgd2hvc2Ugb3JkZXIgaXMga25vd24uICovXG5mdW5jdGlvbiBmb2xkRHVwbGljYXRlcyhvcmRlcmVkOiByZWFkb25seSBFdmVudFtdKTogU2V0PHN0cmluZz4ge1xuICBjb25zdCBkdXBsaWNhdGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHNlZW5DbGFzc2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IGNsb3NlZEVudGl0aWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBldmVudCBvZiBvcmRlcmVkKSB7XG4gICAgY29uc3QgZXZlbnRDbGFzcyA9IGVudGl0eUV2ZW50Q2xhc3MoZXZlbnQuZXZlbnRUeXBlKTtcbiAgICBpZiAoZXZlbnRDbGFzcyA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblxuICAgIGNvbnN0IGVudGl0eSA9IGV2ZW50LmNvcnJlbGF0aW9uSWQgPz8gUlVOX0VOVElUWV9LRVk7XG4gICAgY29uc3QgY2xhc3NLZXkgPSBgJHtldmVudENsYXNzfToke2VudGl0eX1gO1xuICAgIGNvbnN0IHJlcGVhdHNDbGFzcyA9IHNlZW5DbGFzc2VzLmhhcyhjbGFzc0tleSk7XG4gICAgY29uc3QgZW50aXR5V2FzQ2xvc2VkID0gY2xvc2VkRW50aXRpZXMuaGFzKGVudGl0eSk7XG5cbiAgICBpZiAoVEVSTUlOQUxfRVZFTlRfQ0xBU1NFUy5oYXMoZXZlbnRDbGFzcykpIHtcbiAgICAgIGNsb3NlZEVudGl0aWVzLmFkZChlbnRpdHkpO1xuICAgIH1cblxuICAgIGlmICghcmVwZWF0c0NsYXNzKSB7XG4gICAgICAvLyBGaXJzdCBvZiBpdHMgY2xhc3MsIGJ1dCB0aGUgZW50aXR5IGFscmVhZHkgZmluaXNoZWQ6IG5vIGNvbnN1bWVyIGlzXG4gICAgICAvLyBsZWZ0IHRvIHRha2UgaXQgYW5kIGl0IHJlcGVhdHMgbm90aGluZywgc28gdGhlIHJ1bnRpbWUgcmVwb3J0c1xuICAgICAgLy8gZGl2ZXJnZW5jZSBoZXJlIGFuZCBleGl0cy4gRXZlcnl0aGluZyBwYXN0IHRoaXMgcG9pbnQgd2VudCB1bnJlYWQsIHNvXG4gICAgICAvLyB0aGUgZm9sZCBzdG9wcyB3aXRoIGl0IHJhdGhlciB0aGFuIHJlY29yZGluZyB0aGUgY2xhc3MgYW5kIHByZXNlbnRpbmdcbiAgICAgIC8vIGEgbGF0ZXIgZXZlbnQgb2YgaXQgYXMgYSByZXBlYXQgdGhlIHJ1biBwYXNzZWQgb3Zlci5cbiAgICAgIGlmIChlbnRpdHlXYXNDbG9zZWQpIGJyZWFrO1xuICAgICAgc2VlbkNsYXNzZXMuYWRkKGNsYXNzS2V5KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIFRoZSBlbnRpdHkgaXMgc3RpbGwgb3Blbiwgc28gYSBjb25zdW1lciBpcyByZWdpc3RlcmVkIGZvciBpdCBhbmQgdGFrZXNcbiAgICAvLyB0aGlzIGV2ZW50OiBhbm90aGVyIGF0dGVtcHQsIG5vdCBhIHJlcGVhdCByZWFkIHBhc3QuXG4gICAgaWYgKGVudGl0eVdhc0Nsb3NlZCB8fCBTSU5HTEVUT05fRVZFTlRfQ0xBU1NFUy5oYXMoZXZlbnRDbGFzcykpIHtcbiAgICAgIGR1cGxpY2F0ZXMuYWRkKGV2ZW50LmV2ZW50SWQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkdXBsaWNhdGVzO1xufVxuXG4vKipcbiAqIFRoZSBJRHMgb2YgdGhlIGV2ZW50cyBpbiBgZXZlbnRzYCB0aGF0IHJlcGVhdCBhIGNsYXNzIHRoZSBsb2cgYWxyZWFkeVxuICogcmVjb3JkcyBmb3IgdGhlIHNhbWUgZW50aXR5LCBhZnRlciB0aGF0IGVudGl0eSBmaW5pc2hlZC5cbiAqXG4gKiBgaXNDb21wbGV0ZUhpc3RvcnlgIG11c3QgYmUgZmFsc2Ugd2hlbmV2ZXIgdGhlIGNhbGxlciBob2xkcyBhIHN1YnNldCBvZiB0aGVcbiAqIHJ1bidzIGxvZzogb25lIHBhZ2Ugb2YgYSBwYWdpbmF0ZWQgbGlzdCwgb3IgdGhlIHJlc3VsdCBvZiBhIHNlYXJjaC4gV2hpY2hcbiAqIG9jY3VycmVuY2Ugb2YgYSBjbGFzcyBjYW1lIGZpcnN0IGlzIGEgcHJvcGVydHkgb2YgdGhlIHdob2xlIGxvZywgc28gb24gYVxuICogc3Vic2V0IHRoZSBlYXJsaWVyIGV2ZW50IG1heSBiZSBtaXNzaW5nLCBhbmQgdGhlIGZvbGQgd291bGQgcmVwb3J0XG4gKiB0aGUgc3Vydml2aW5nIG9uZS4gTm90aGluZyBpcyBjbGFzc2lmaWVkIGluIHRoYXQgY2FzZS5cbiAqXG4gKiBUd28gb3RoZXIgdGhpbmdzIG1ha2UgdGhlIGFuc3dlciB1bmtub3dhYmxlIGFuZCB5aWVsZCB0aGUgc2FtZSBlbXB0eSByZXN1bHQ6XG4gKiBhIGxvZyB3aG9zZSBvcmRlciBjYW5ub3QgYmUgcmVjb3ZlcmVkIGZyb20gdGhlIGV2ZW50cyAoc2VlXG4gKiB7QGxpbmsgaGFzS25vd2FibGVMb2dPcmRlcn0pLCBhbmQgZXZlcnl0aGluZyBwYXN0IHRoZSBwb2ludCB0aGUgcnVuXG4gKiBkaXZlcmdlZCwgc2luY2UgdGhlIHJ1biBleGl0ZWQgdGhlcmUgYW5kIHJlYWQgbm8gZnVydGhlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmREdXBsaWNhdGVFdmVudElkcyhcbiAgZXZlbnRzOiByZWFkb25seSBFdmVudFtdLFxuICB7IGlzQ29tcGxldGVIaXN0b3J5IH06IHsgaXNDb21wbGV0ZUhpc3Rvcnk6IGJvb2xlYW4gfVxuKTogU2V0PHN0cmluZz4ge1xuICBpZiAoIWlzQ29tcGxldGVIaXN0b3J5IHx8IGV2ZW50cy5sZW5ndGggPCAyKSByZXR1cm4gbmV3IFNldCgpO1xuXG4gIC8vIERyb3BwZWQgYmVmb3JlIHRoZSBzb3J0LCBub3QgZHVyaW5nIHRoZSBmb2xkOiBhbiBldmVudCB3aXRoIG5vIElEIGhhcyBub1xuICAvLyBsb2cgcG9zaXRpb24gdG8gb3JkZXIgb24sIGFuZCB0aGUgY2FsbGVyIGNvdWxkIG5vdCBtYXRjaCBpdCBlaXRoZXIuXG4gIGNvbnN0IG9yZGVyZWQgPSBldmVudHNcbiAgICAuZmlsdGVyKChldmVudCkgPT4gQm9vbGVhbihldmVudC5ldmVudElkKSlcbiAgICAuc29ydChjb21wYXJlRXZlbnRJZCk7XG5cbiAgaWYgKCFoYXNLbm93YWJsZUxvZ09yZGVyKG9yZGVyZWQpKSByZXR1cm4gbmV3IFNldCgpO1xuXG4gIHJldHVybiBmb2xkRHVwbGljYXRlcyhvcmRlcmVkKTtcbn1cbiJdfQ==
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVwbGljYXRlLWV2ZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvZHVwbGljYXRlLWV2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsbUJBQW1CLEVBR25CLGFBQWEsRUFDYixzQkFBc0IsR0FDdkIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsMEVBQTBFO0FBQzFFLE1BQU0sdUJBQXVCLEdBQWtDLElBQUksR0FBRyxDQUFDO0lBQ3JFLGFBQWE7Q0FDZCxDQUFDLENBQUM7QUFFSDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUNsQyxvSUFBb0ksQ0FBQztBQUV2STs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxDQUFRLEVBQUUsQ0FBUTtJQUN4QyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUM3QyxDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFZO0lBQy9CLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDbEMsT0FBTyxTQUFTLFlBQVksSUFBSTtRQUM5QixDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtRQUNyQixDQUFDLENBQUMsSUFBSSxJ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O1FBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTlELDJFQUEyRTtJQUMzRSxzRUFBc0U7SUFDdEUsTUFBTSxPQUFPLEdBQUcsTUFBTTtTQUNuQixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRXhCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7UUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLENBQUM7SUFFcEQsT0FBTyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNsYXNzaWZ5RW50aXR5RXZlbnQsXG4gIHR5cGUgRW50aXR5RXZlbnRDbGFzcyxcbiAgdHlwZSBFdmVudCxcbiAgaXNTbG90RXZlbnRJZCxcbiAgVEVSTUlOQUxfRVZFTlRfQ0xBU1NFUyxcbn0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcblxuLyoqXG4gKiBJZGVudGlmaWVzIGV2ZW50cyBhIHJlcGxheSByZWFkcyBwYXN0LlxuICpcbiAqIENvbmN1cnJlbnQgcmVwbGF5cyBvZiBvbmUgcnVuIHdyaXRlIHRvIGEgc2hhcmVkIGxvZywgc28gYSByZXBsYXkgd29ya2luZ1xuICogZnJvbSBhIHN0YWxlIHByZWZpeCBjYW4gY29tbWl0IGEgc2Vjb25kIGBzdGVwX2NyZWF0ZWRgIC8gYHN0ZXBfc3RhcnRlZGAgL1xuICogYHdhaXRfY3JlYXRlZGAgLyBgYXR0cl9zZXRgIGZvciBhbiBlbnRpdHkgdGhlIGxvZyBhbHJlYWR5IHJlY29yZHMgb25lIG9mLlxuICogRXZlcnkgcmVwbGF5IHJlYWRzIHRoZSBmaXJzdCBldmVudCBvZiB0aGF0IGNsYXNzIGF0IHRoZSBzYW1lIHBvc2l0aW9uLCBzbyBhXG4gKiBsYXRlciBvbmUgY2Fubm90IGNoYW5nZSB3aGF0IHRoZSB3b3JrZmxvdyBvYnNlcnZlcy5cbiAqXG4gKiBUaGUgY2xhc3NpZmljYXRpb24gY29tZXMgZnJvbSBgY2xhc3NpZnlFbnRpdHlFdmVudGAgaW4gYEB3b3JrZmxvdy93b3JsZGAsXG4gKiB0aGUgc2FtZSBmdW5jdGlvbiB0aGUgcnVudGltZSBrZXlzIGl0cyBvd24gZHVwbGljYXRlIGRldGVjdGlvbiBvbi4gV2hhdCBpdFxuICogY2Fubm90IHNoYXJlIGlzIGNvbnN1bWVyIHN0YXRlOiB0aGUgcnVudGltZSBwYXNzZXMgb3ZlciBhbiBldmVudCBvbmx5IGFmdGVyIGV2ZXJ5XG4gKiByZWdpc3RlcmVkIGNhbGxiYWNrIGhhcyBkZWNsaW5lZCBpdCwgYW5kIGEgY2FsbGJhY2sgcmVnaXN0ZXJlZCBmb3IgYVxuICogc3RpbGwtb3BlbiBlbnRpdHkgbGVnaXRpbWF0ZWx5IGNsYWltcyBhIHJlcGVhdCAoZWFjaCByZXRyeSBvZiBhIHN0ZXAgd3JpdGVzXG4gKiBhbm90aGVyIGBzdGVwX3N0YXJ0ZWRgLCBhbmQgYSBsaXZlIHN0ZXAgY29uc3VtZXIgYWJzb3JicyBhIHNlY29uZFxuICogYHN0ZXBfY3JlYXRlZGApLiBTbyBhIHJlcGVhdCBjb3VudHMgaGVyZSBvbmx5IG9uY2UgYSB0ZXJtaW5hbCBldmVudCBmb3IgdGhlXG4gKiBzYW1lIGVudGl0eSBzaXRzIGVhcmxpZXIgaW4gdGhlIGxvZywgd2hpY2ggaXMgdGhlIHBvaW50IHBhc3Qgd2hpY2ggbm9cbiAqIGNvbnN1bWVyIHJlbWFpbnMuXG4gKi9cblxuLyoqIENsYXNzZXMgd2l0aCBubyBlbnRpdHkgdG8gY2xvc2UgZmlyc3Q6IHRoZSBsb2cgcmVjb3JkcyBvbmUgcGVyIHJ1bi4gKi9cbmNvbnN0IFNJTkdMRVRPTl9FVkVOVF9DTEFTU0VTOiBSZWFkb25seVNldDxFbnRpdHlFdmVudENsYXNzPiA9IG5ldyBTZXQoW1xuICAncnVuX3N0YXJ0ZWQnLFxuXSk7XG5cbi8qKlxuICogU2hvd24gYWdhaW5zdCBhbiBldmVudCB0aGlzIG1vZHVsZSByZXBvcnRzLiBEZWxpYmVyYXRlbHkgc2F5cyB3aGF0IHRoZSBsb2dcbiAqIHNob3dzIHJhdGhlciB0aGFuIHdoYXQgdGhlIHJ1bnRpbWUgZGlkIHdpdGggaXQ6IHRvbGVyYXRpbmcgdGhlc2UgcmVwZWF0cyBpc1xuICogcmVjZW50LCBhbmQgb24gYSBydW4gcmVjb3JkZWQgYmVmb3JlIGl0IGEgcmVwZWF0IG5vIGNvbnN1bWVyIGNsYWltZWQgZmFpbGVkXG4gKiB0aGUgcmVwbGF5IGluc3RlYWQgb2YgYmVpbmcgcGFzc2VkIG92ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBEVVBMSUNBVEVfRVZFTlRfTUVTU0FHRSA9XG4gICdXcml0dGVuIGJ5IGEgY29uY3VycmVudCByZXBsYXkgYWZ0ZXIgYW4gZXZlbnQgb2YgdGhlIHNhbWUga2luZCB3YXMgYWxyZWFkeSByZWNvcmRlZCBhbmQgYWN0ZWQgb24uIFRoZSBydW4gZm9sbG93cyB0aGUgZWFybGllciBvbmUuJztcblxuLyoqXG4gKiBDYW5kaWRhdGUgbG9nIG9yZGVyLCBieSBldmVudCBJRC5cbiAqXG4gKiBFdmVudCBJRHMgYXJlIGZpeGVkLXdpZHRoIGFuZCBtb25vdG9uaWMgd2l0aGluIGEgcnVuIHVuZGVyIGJvdGggdGhlIFVMSUQgYW5kXG4gKiB0aGUgc2xvdCBzY2hlbWUuIExlbmd0aCBpcyBjb21wYXJlZCBmaXJzdCBzbyBhIHNob3J0ZXIgSUQgbmV2ZXIgc29ydHMgYWZ0ZXJcbiAqIGEgbG9uZ2VyIG9uZSBvbiBhIGxvZyB0aGF0IG1peGVzIHdpZHRocy5cbiAqXG4gKiBXaGV0aGVyIHRoaXMgKmlzKiB0aGUgbG9nIG9yZGVyIGRlcGVuZHMgb24gdGhlIElEIHNjaGVtZSwgd2hpY2ggaXMgd2h5XG4gKiB7QGxpbmsgaGFzS25vd2FibGVMb2dPcmRlcn0gZ2F0ZXMgdGhlIGZvbGQuIFNlZSBpdHMgZG9jLlxuICovXG5mdW5jdGlvbiBjb21wYXJlRXZlbnRJZChhOiBFdmVudCwgYjogRXZlbnQpOiBudW1iZXIge1xuICBpZiAoYS5ldmVudElkLmxlbmd0aCAhPT0gYi5ldmVudElkLmxlbmd0aCkge1xuICAgIHJldHVybiBhLmV2ZW50SWQubGVuZ3RoIC0gYi5ldmVudElkLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gYS5ldmVudElkIDwgYi5ldmVudElkID8gLTEgOiBhLmV2ZW50SWQgPiBiLmV2ZW50SWQgPyAxIDogMDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlZEF0TXMoZXZlbnQ6IEV2ZW50KTogbnVtYmVyIHtcbiAgY29uc3QgY3JlYXRlZEF0ID0gZXZlbnQuY3JlYXRlZEF0O1xuICByZXR1cm4gY3JlYXRlZEF0IGluc3RhbmNlb2YgRGF0ZVxuICAgID8gY3JlYXRlZEF0LmdldFRpbWUoKVxuICAgIDogbmV3IERhdGUoY3JlYXRlZEF0IGFzIHVua25vd24gYXMgc3RyaW5nKS5nZXRUaW1lKCk7XG59XG5cbi8qKlxuICogV2hldGhlciB0aGUgb3JkZXIgdGhlIHJ1biBjb25zdW1lZCBpdHMgbG9nIGluIGNhbiBiZSByZWNvdmVyZWQgZnJvbSB0aGVcbiAqIGV2ZW50cyBhbG9uZS5cbiAqXG4gKiBXaGljaCBvY2N1cnJlbmNlIG9mIGEgY2xhc3MgY2FtZSBmaXJzdCBpcyB0aGUgd2hvbGUgcXVlc3Rpb24gaGVyZSwgc28gdGhlXG4gKiBmb2xkIG5lZWRzIHRoZSBsb2cncyBvcmRlciwgbm90IGFuIG9yZGVyLiBUaGUgYmFja2VuZHMgZG8gbm90IGFncmVlIG9uIGhvd1xuICogdG8gcmVjb3ZlciBpdCBmb3IgZXZlcnkgSUQgc2NoZW1lOlxuICpcbiAqIC0gQSAqKnNsb3QtbnVtYmVyZWQqKiBydW4gY2FycmllcyBpdHMgcG9zaXRpb24gaW4gdGhlIElELiBUaGUgc2xvdCBpcyBkcmF3blxuICogICBhdCB0aGUgcHVibGlzaCwgd2hpY2ggaXMgdGhlIGxpbmVhcml6YXRpb24gcG9pbnQsIHNvIHNsb3Qgb3JkZXIgaXMgbG9nXG4gKiAgIG9yZGVyIGV2ZXJ5d2hlcmUgYW5kIHRoZSBJRCBhbG9uZSBzZXR0bGVzIGl0LlxuICogLSBBICoqVUxJRC1udW1iZXJlZCoqIHJ1biBkb2VzIG5vdC4gT25lIGJhY2tlbmQgcmV0dXJucyBzdWNoIGEgbG9nIGluXG4gKiAgIGAoY3JlYXRlZEF0LCBldmVudElkKWAgb3JkZXIgd2hpbGUgYW5vdGhlciByZXR1cm5zIGl0IGtleWVkIG9uIHRoZSBJRCwgYW5kXG4gKiAgIGBjcmVhdGVkQXRgIGlzIHN0YW1wZWQgd2hlbiB0aGUgd3JpdGUgcmVxdWVzdCBhcnJpdmVzIHJhdGhlciB0aGFuIHdoZW4gaXRcbiAqICAgY29tbWl0cy4gQ29uY3VycmVudCB3cml0ZXJzIGNhbiB0aGVyZWZvcmUgcHJvZHVjZSBvcHBvc2l0ZSB0aW1lc3RhbXAgYW5kXG4gKiAgIElEIG9yZGVycywgYW5kIHRoZSBydW4gY29uc3VtZWQgd2hpY2hldmVyIGl0cyBvd24gYmFja2VuZCBzZXJ2ZWQuXG4gKlxuICogU28gYSBVTElEIGxvZyBpcyBvbmx5IGtub3dhYmxlIHdoZXJlIHRoZSB0d28gb3JkZXJzIGFncmVlLiBXaGVyZSB0aGV5XG4gKiBjb250cmFkaWN0LCB0aGUgZm9sZCBjb3VsZCBuYW1lIHRoZSBzdXJ2aXZpbmcgZXZlbnQgYW5kIHBhc3Mgb3ZlciB0aGUgb25lXG4gKiB0aGUgcnVuIGFjdGVkIG9uLCB3aGljaCBpcyB3b3JzZSB0aGFuIHNheWluZyBub3RoaW5nLlxuICovXG5mdW5jdGlvbiBoYXNLbm93YWJsZUxvZ09yZGVyKG9yZGVyZWRCeUlkOiByZWFkb25seSBFdmVudFtdKTogYm9vbGVhbiB7XG4gIGlmIChvcmRlcmVkQnlJZC5ldmVyeSgoZXZlbnQpID0+IGlzU2xvdEV2ZW50SWQoZXZlbnQuZXZlbnRJZCkpKSByZXR1cm4gdHJ1ZTtcblxuICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgb3JkZXJlZEJ5SWQubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgcHJldmlvdXMgPSBjcmVhdGVkQXRNcyhvcmRlcmVkQnlJZFtpbmRleCAtIDFdKTtcbiAgICBjb25zdCBjdXJyZW50ID0gY3JlYXRlZEF0TXMob3JkZXJlZEJ5SWRbaW5kZXhdKTtcbiAgICAvLyBBIG1pc3Npbmcgb3IgdW5wYXJzZWFibGUgdGltZXN0YW1wIGxlYXZlcyBub3RoaW5nIHRvIGNvcnJvYm9yYXRlIHRoZSBJRFxuICAgIC8vIG9yZGVyIHdpdGgsIHdoaWNoIGlzIHRoZSBzYW1lIHBvc2l0aW9uIGFzIGEgY29udHJhZGljdGlvbi5cbiAgICBpZiAoTnVtYmVyLmlzTmFOKHByZXZpb3VzKSB8fCBOdW1iZXIuaXNOYU4oY3VycmVudCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoY3VycmVudCA8IHByZXZpb3VzKSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqIFRoZSBmb2xkIGl0c2VsZiwgb3ZlciBhIGxvZyB3aG9zZSBvcmRlciBpcyBrbm93bi4gKi9cbmZ1bmN0aW9uIGZvbGREdXBsaWNhdGVzKG9yZGVyZWQ6IHJlYWRvbmx5IEV2ZW50W10pOiBTZXQ8c3RyaW5nPiB7XG4gIGNvbnN0IGR1cGxpY2F0ZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgc2VlbkNsYXNzZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgY2xvc2VkRW50aXRpZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IGV2ZW50IG9mIG9yZGVyZWQpIHtcbiAgICAvLyBTaGFyZWQgd2l0aCB0aGUgcnVudGltZSdzIG93biBkdXBsaWNhdGUgZGV0ZWN0aW9uLCBkZWxpYmVyYXRlbHk6IGFuXG4gICAgLy8gZXZlbnQgaXQgdHJhY2tzIHVuZGVyIG5vIGNsYXNzIGlzIG9uZSBpdCBuZXZlciByZWFkcyBwYXN0LCBzbyBuYW1pbmcgaXRcbiAgICAvLyBoZXJlIHdvdWxkIGdyZXkgb3V0IGFuIGV2ZW50IHRoZSBydW4gYWN0ZWQgb24uXG4gICAgY29uc3QgY2xhc3NpZmljYXRpb24gPSBjbGFzc2lmeUVudGl0eUV2ZW50KGV2ZW50KTtcbiAgICBpZiAoY2xhc3NpZmljYXRpb24gPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICBjb25zdCB7IGV2ZW50Q2xhc3MsIGVudGl0eSB9ID0gY2xhc3NpZmljYXRpb247XG4gICAgY29uc3QgY2xhc3NLZXkgPSBgJHtldmVudENsYXNzfToke2VudGl0eX1gO1xuICAgIGNvbnN0IHJlcGVhdHNDbGFzcyA9IHNlZW5DbGFzc2VzLmhhcyhjbGFzc0tleSk7XG4gICAgY29uc3QgZW50aXR5V2FzQ2xvc2VkID0gY2xvc2VkRW50aXRpZXMuaGFzKGVudGl0eSk7XG5cbiAgICBpZiAoVEVSTUlOQUxfRVZFTlRfQ0xBU1NFUy5oYXMoZXZlbnRDbGFzcykpIHtcbiAgICAgIGNsb3NlZEVudGl0aWVzLmFkZChlbnRpdHkpO1xuICAgIH1cblxuICAgIGlmICghcmVwZWF0c0NsYXNzKSB7XG4gICAgICAvLyBGaXJzdCBvZiBpdHMgY2xhc3MsIGJ1dCB0aGUgZW50aXR5IGFscmVhZHkgZmluaXNoZWQ6IG5vIGNvbnN1bWVyIGlzXG4gICAgICAvLyBsZWZ0IHRvIHRha2UgaXQgYW5kIGl0IHJlcGVhdHMgbm90aGluZywgc28gdGhlIHJ1bnRpbWUgcmVwb3J0c1xuICAgICAgLy8gZGl2ZXJnZW5jZSBoZXJlIGFuZCBleGl0cy4gRXZlcnl0aGluZyBwYXN0IHRoaXMgcG9pbnQgd2VudCB1bnJlYWQsIHNvXG4gICAgICAvLyB0aGUgZm9sZCBzdG9wcyB3aXRoIGl0IHJhdGhlciB0aGFuIHJlY29yZGluZyB0aGUgY2xhc3MgYW5kIHByZXNlbnRpbmdcbiAgICAgIC8vIGEgbGF0ZXIgZXZlbnQgb2YgaXQgYXMgYSByZXBlYXQgdGhlIHJ1biBwYXNzZWQgb3Zlci5cbiAgICAgIGlmIChlbnRpdHlXYXNDbG9zZWQpIGJyZWFrO1xuICAgICAgc2VlbkNsYXNzZXMuYWRkKGNsYXNzS2V5KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIFRoZSBlbnRpdHkgaXMgc3RpbGwgb3Blbiwgc28gYSBjb25zdW1lciBpcyByZWdpc3RlcmVkIGZvciBpdCBhbmQgdGFrZXNcbiAgICAvLyB0aGlzIGV2ZW50OiBhbm90aGVyIGF0dGVtcHQsIG5vdCBhIHJlcGVhdCByZWFkIHBhc3QuXG4gICAgaWYgKGVudGl0eVdhc0Nsb3NlZCB8fCBTSU5HTEVUT05fRVZFTlRfQ0xBU1NFUy5oYXMoZXZlbnRDbGFzcykpIHtcbiAgICAgIGR1cGxpY2F0ZXMuYWRkKGV2ZW50LmV2ZW50SWQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkdXBsaWNhdGVzO1xufVxuXG4vKipcbiAqIFRoZSBJRHMgb2YgdGhlIGV2ZW50cyBpbiBgZXZlbnRzYCB0aGF0IHJlcGVhdCBhIGNsYXNzIHRoZSBsb2cgYWxyZWFkeVxuICogcmVjb3JkcyBmb3IgdGhlIHNhbWUgZW50aXR5LCBhZnRlciB0aGF0IGVudGl0eSBmaW5pc2hlZC5cbiAqXG4gKiBgaXNDb21wbGV0ZUhpc3RvcnlgIG11c3QgYmUgZmFsc2Ugd2hlbmV2ZXIgdGhlIGNhbGxlciBob2xkcyBhIHN1YnNldCBvZiB0aGVcbiAqIHJ1bidzIGxvZzogb25lIHBhZ2Ugb2YgYSBwYWdpbmF0ZWQgbGlzdCwgb3IgdGhlIHJlc3VsdCBvZiBhIHNlYXJjaC4gV2hpY2hcbiAqIG9jY3VycmVuY2Ugb2YgYSBjbGFzcyBjYW1lIGZpcnN0IGlzIGEgcHJvcGVydHkgb2YgdGhlIHdob2xlIGxvZywgc28gb24gYVxuICogc3Vic2V0IHRoZSBlYXJsaWVyIGV2ZW50IG1heSBiZSBtaXNzaW5nLCBhbmQgdGhlIGZvbGQgd291bGQgcmVwb3J0XG4gKiB0aGUgc3Vydml2aW5nIG9uZS4gTm90aGluZyBpcyBjbGFzc2lmaWVkIGluIHRoYXQgY2FzZS5cbiAqXG4gKiBUd28gb3RoZXIgdGhpbmdzIG1ha2UgdGhlIGFuc3dlciB1bmtub3dhYmxlIGFuZCB5aWVsZCB0aGUgc2FtZSBlbXB0eSByZXN1bHQ6XG4gKiBhIGxvZyB3aG9zZSBvcmRlciBjYW5ub3QgYmUgcmVjb3ZlcmVkIGZyb20gdGhlIGV2ZW50cyAoc2VlXG4gKiB7QGxpbmsgaGFzS25vd2FibGVMb2dPcmRlcn0pLCBhbmQgZXZlcnl0aGluZyBwYXN0IHRoZSBwb2ludCB0aGUgcnVuXG4gKiBkaXZlcmdlZCwgc2luY2UgdGhlIHJ1biBleGl0ZWQgdGhlcmUgYW5kIHJlYWQgbm8gZnVydGhlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmREdXBsaWNhdGVFdmVudElkcyhcbiAgZXZlbnRzOiByZWFkb25seSBFdmVudFtdLFxuICB7IGlzQ29tcGxldGVIaXN0b3J5IH06IHsgaXNDb21wbGV0ZUhpc3Rvcnk6IGJvb2xlYW4gfVxuKTogU2V0PHN0cmluZz4ge1xuICBpZiAoIWlzQ29tcGxldGVIaXN0b3J5IHx8IGV2ZW50cy5sZW5ndGggPCAyKSByZXR1cm4gbmV3IFNldCgpO1xuXG4gIC8vIERyb3BwZWQgYmVmb3JlIHRoZSBzb3J0LCBub3QgZHVyaW5nIHRoZSBmb2xkOiBhbiBldmVudCB3aXRoIG5vIElEIGhhcyBub1xuICAvLyBsb2cgcG9zaXRpb24gdG8gb3JkZXIgb24sIGFuZCB0aGUgY2FsbGVyIGNvdWxkIG5vdCBtYXRjaCBpdCBlaXRoZXIuXG4gIGNvbnN0IG9yZGVyZWQgPSBldmVudHNcbiAgICAuZmlsdGVyKChldmVudCkgPT4gQm9vbGVhbihldmVudC5ldmVudElkKSlcbiAgICAuc29ydChjb21wYXJlRXZlbnRJZCk7XG5cbiAgaWYgKCFoYXNLbm93YWJsZUxvZ09yZGVyKG9yZGVyZWQpKSByZXR1cm4gbmV3IFNldCgpO1xuXG4gIHJldHVybiBmb2xkRHVwbGljYXRlcyhvcmRlcmVkKTtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../src/lib/hydration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAOL,KAAK,QAAQ,EAEd,MAAM,qCAAqC,CAAC;AAI7C,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,YAAY,EACZ,KAAK,MAAM,EACX,eAAe,EACf,KAAK,SAAS,EACd,uBAAuB,EACvB,UAAU,GACX,MAAM,qCAAqC,CAAC;AAgE7C;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,IAAI,QAAQ,
|
|
1
|
+
{"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../src/lib/hydration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAOL,KAAK,QAAQ,EAEd,MAAM,qCAAqC,CAAC;AAI7C,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,YAAY,EACZ,KAAK,MAAM,EACX,eAAe,EACf,KAAK,SAAS,EACd,uBAAuB,EACvB,UAAU,GACX,MAAM,qCAAqC,CAAC;AAgE7C;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CA2NzC;AAmBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAMnD;AAMD,eAAO,MAAM,sBAAsB,cAAc,CAAC;AA0BlD,sDAAsD;AACtD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMzD;AAMD,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAiBnD,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMvD;AAsCD;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAAC,CAAC,EAC9C,QAAQ,EAAE,CAAC,EACX,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,QAAQ,EAAE,CAAC,EACX,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,CAAC,CAAC,CA0DZ;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAkB7D"}
|
package/dist/lib/hydration.js
CHANGED
|
@@ -178,6 +178,18 @@ export function getWebRevivers() {
|
|
|
178
178
|
error.stack = value.stack;
|
|
179
179
|
return error;
|
|
180
180
|
},
|
|
181
|
+
StreamError: (value) => {
|
|
182
|
+
const opts = 'cause' in value ? { cause: value.cause } : undefined;
|
|
183
|
+
const error = new Error(value.message, opts);
|
|
184
|
+
error.name = 'StreamError';
|
|
185
|
+
if (value.status !== undefined)
|
|
186
|
+
error.status = value.status;
|
|
187
|
+
if (value.url !== undefined)
|
|
188
|
+
error.url = value.url;
|
|
189
|
+
if (value.stack !== undefined)
|
|
190
|
+
error.stack = value.stack;
|
|
191
|
+
return error;
|
|
192
|
+
},
|
|
181
193
|
DOMException: (value) => {
|
|
182
194
|
// Modern browsers and Node 18+ expose `DOMException` on globalThis.
|
|
183
195
|
// `AbortController.abort()` with no argument synthesizes one as the
|
|
@@ -474,4 +486,4 @@ export function hasEncryptedFields(resource) {
|
|
|
474
486
|
}
|
|
475
487
|
return false;
|
|
476
488
|
}
|
|
477
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlkcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9oeWRyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixpQkFBaUIsSUFBSSx3QkFBd0IsRUFDN0MsZUFBZSxFQUNmLGFBQWEsRUFDYixRQUFRLEVBQ1IscUJBQXFCLEVBRXJCLHVCQUF1QixHQUN4QixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhELG9EQUFvRDtBQUNwRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsUUFBUSxFQUNSLFVBQVUsRUFDVixXQUFXLEVBRVgsWUFBWSxFQUVaLGVBQWUsRUFFZix1QkFBdUIsRUFDdkIsVUFBVSxHQUNYLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsOEVBQThFO0FBQzlFLDZCQUE2QjtBQUM3Qiw4RUFBOEU7QUFFOUUsU0FBUyxtQkFBbUIsQ0FBQyxNQUFjO0lBQ3pDLElBQUksTUFBTSxLQUFLLEVBQUUsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDcEMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzdDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENB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RSxDQUFDO1lBQzFCLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7UUFDM0QsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdlYi1zcGVjaWZpYyBoeWRyYXRpb24gZm9yIG8xMXkgZGlzcGxheS5cbiAqXG4gKiBCcm93c2VyLXNhZmUgcmV2aXZlcnMgdGhhdCB1c2UgYGF0b2IoKWAgZm9yIGJhc2U2NCBkZWNvZGluZyAobm8gTm9kZS5qc1xuICogYEJ1ZmZlcmAgZGVwZW5kZW5jeSkuIFByb2R1Y2VzIGBDbGFzc0luc3RhbmNlUmVmYCBvYmplY3RzIGFuZCBgU3RyZWFtUmVmYFxuICogb2JqZWN0cyBmb3IgVUkgcmVuZGVyaW5nLlxuICovXG5cbmltcG9ydCB7XG4gIGV4dHJhY3RDbGFzc05hbWUsXG4gIGh5ZHJhdGVSZXNvdXJjZUlPIGFzIGh5ZHJhdGVSZXNvdXJjZUlPR2VuZXJpYyxcbiAgaXNFbmNyeXB0ZWREYXRhLFxuICBpc0V4cGlyZWRTdHViLFxuICBpc1J1blJlZixcbiAgb2JzZXJ2YWJpbGl0eVJldml2ZXJzLFxuICB0eXBlIFJldml2ZXJzLFxuICBzZXJpYWxpemVkSW5zdGFuY2VUb1JlZixcbn0gZnJvbSAnQHdvcmtmbG93L2NvcmUvc2VyaWFsaXphdGlvbi1mb3JtYXQnO1xuaW1wb3J0IHsgZ2V0RXZlbnREYXRhUmVmRmllbGRzIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcblxuLy8gUmUtZXhwb3J0IHR5cGVzIGFuZCB1dGlsaXRpZXMgdGhhdCBjb25zdW1lcnMgbmVlZFxuZXhwb3J0IHtcbiAgQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEUsXG4gIENsYXNzSW5zdGFuY2VSZWYsXG4gIEVOQ1JZUFRFRF9QTEFDRUhPTERFUixcbiAgZXh0cmFjdFN0cmVhbUlkcyxcbiAgaXNDbGFzc0luc3RhbmNlUmVmLFxuICBpc0VuY3J5cHRlZERhdGEsXG4gIGlzUnVuUmVmLFxuICBpc1N0cmVhbUlkLFxuICBpc1N0cmVhbVJlZixcbiAgdHlwZSBSZXZpdmVycyxcbiAgUlVOX1JFRl9UWVBFLFxuICB0eXBlIFJ1blJlZixcbiAgU1RSRUFNX1JFRl9UWVBFLFxuICB0eXBlIFN0cmVhbVJlZixcbiAgc2VyaWFsaXplZEluc3RhbmNlVG9SZWYsXG4gIHRydW5jYXRlSWQsXG59IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24tZm9ybWF0JztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCcm93c2VyLXNhZmUgYmFzZTY0IGRlY29kZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGJhc2U2NFRvQXJyYXlCdWZmZXIoYmFzZTY0OiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB7XG4gIGlmIChiYXNlNjQgPT09ICcnIHx8IGJhc2U2NCA9PT0gJy4nKSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgfVxuICBjb25zdCBiaW5hcnlTdHJpbmcgPSBhdG9iKGJhc2U2NCk7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYmluYXJ5U3RyaW5nLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYmluYXJ5U3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgYnl0ZXNbaV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgfVxuICByZXR1cm4gYnl0ZXMuYnVmZmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdlYiByZXZpdmVycyAoYnJvd3Nlci1zYWZlLCBubyBCdWZmZXIgZGVwZW5kZW5jeSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEJ1aWxkIGEgcmV2aXZlciBmb3Igb25lIG9mIHRoZSBidWlsdC1pbiBgRXJyb3JgIHN1YmNsYXNzZXMgKGUuZy5cbiAqIGBUeXBlRXJyb3JgLCBgUmFuZ2VFcnJvcmApLiBUaGUgY29uc3RydWN0b3IgZm9yIHRoZSBuYW1lZCBzdWJjbGFzcyBpc1xuICogcmVzb2x2ZWQgb2ZmIGBnbG9iYWxUaGlzYCBhdCBjYWxsIHRpbWUgc28gdGhlIHByb2R1Y2VkIGluc3RhbmNlIGhhcyB0aGVcbiAqIGNvcnJlY3QgcHJvdG90eXBlIGNoYWluIGluIHRoZSBjb25zdW1lciByZWFsbS4gRmFsbHMgYmFjayB0byBhIGdlbmVyaWNcbiAqIGBFcnJvcmAgKHdpdGggYG5hbWVgIHNldCkgaWYgdGhlIGdsb2JhbCBpc24ndCBhdmFpbGFibGUsIHdoaWNoIGtlZXBzIHRoZVxuICogbzExeSBVSSByZW5kZXJpbmcgZXZlbiBvbiBleG90aWMgYnJvd3NlcnMuXG4gKlxuICogYGNhdXNlYCBpcyBwYXNzZWQgdGhyb3VnaCBgRXJyb3JPcHRpb25zYCB0byB0aGUgY29uc3RydWN0b3Igd2hlbiBwcmVzZW50LFxuICogbWF0Y2hpbmcgYGdldENvbW1vblJldml2ZXJzYCBpbiBgQHdvcmtmbG93L2NvcmVgIHNvIHRoZSByZXN1bHRpbmcgYGNhdXNlYFxuICogcHJvcGVydHkgaGFzIHRoZSBzYW1lIHNlbWFudGljcyAobm9uLWVudW1lcmFibGUsIHNldCBieSB0aGUgZW5naW5lKSBhcyBhXG4gKiBmcmVzaGx5IHRocm93biBFcnJvciBpbiB0aGUgY29uc3VtZXIgcmVhbG0uIFRoZSBgJ2NhdXNlJyBpbiB2YWx1ZWAgY2hlY2tcbiAqIHByZXNlcnZlcyB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBcIm5vIGNhdXNlXCIgYW5kIFwiY2F1c2UgaXMgdW5kZWZpbmVkXCIuXG4gKi9cbmZ1bmN0aW9uIG1ha2VXZWJFcnJvclN1YmNsYXNzUmV2aXZlcihcbiAgbmFtZTpcbiAgICB8ICdFdmFsRXJyb3InXG4gICAgfCAnUmFuZ2VFcnJvcidcbiAgICB8ICdSZWZlcmVuY2VFcnJvcidcbiAgICB8ICdTeW50YXhFcnJvcidcbiAgICB8ICdUeXBlRXJyb3InXG4gICAgfCAnVVJJRXJyb3InXG4pIHtcbiAgcmV0dXJuICh2YWx1ZTogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nOyBjYXVzZT86IHVua25vd24gfSkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSAnY2F1c2UnIGluIHZhbHVlID8geyBjYXVzZTogdmFsdWUuY2F1c2UgfSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBDdG9yID0gKGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN0cmluZywgYW55PilbbmFtZV0gYXNcbiAgICAgIHwgRXJyb3JDb25zdHJ1Y3RvclxuICAgICAgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGVycm9yOiBFcnJvcjtcbiAgICBpZiAodHlwZW9mIEN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yID0gbmV3IEN0b3IodmFsdWUubWVzc2FnZSwgb3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZhbGxiYWNrIHBhdGg6IG5vIGJ1aWx0LWluIHN1YmNsYXNzIGF2YWlsYWJsZSAoZXhvdGljIGVudikuIENvbnN0cnVjdFxuICAgICAgLy8gYSBwbGFpbiBFcnJvciB3aXRoIHRoZSByaWdodCBgbmFtZWAgYW5kIGNvcHkgYGNhdXNlYCBtYW51YWxseSBzaW5jZVxuICAgICAgLy8gdGhlIGJhc2UgRXJyb3IgY29uc3RydWN0b3IgaXMgd2hhdCB3ZSBhY3R1YWxseSBjYWxsZWQuXG4gICAgICBlcnJvciA9IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UsIG9wdHMpLCB7IG5hbWUgfSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5zdGFjayAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgIHJldHVybiBlcnJvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHdlYi1zcGVjaWZpYyByZXZpdmVycyBmb3IgaHlkcmF0aW5nIHNlcmlhbGl6ZWQgZGF0YS5cbiAqXG4gKiBVc2VzIGBhdG9iKClgIGZvciBiYXNlNjQgZGVjb2RpbmcgKG5vIE5vZGUuanMgQnVmZmVyIGRlcGVuZGVuY3kpLlxuICogQWxsIHR5cGVzIGFyZSByZXZpdmVkIGFzIHJlYWwgaW5zdGFuY2VzIChEYXRlLCBNYXAsIFNldCwgVVJMLFxuICogVVJMU2VhcmNoUGFyYW1zLCBIZWFkZXJzLCBFcnJvciwgZXRjLikuXG4gKlxuICogTk9URTogdGhpcyBzZXQgbXVzdCBtaXJyb3IgdGhlIGtleXMgaW4gYFNlcmlhbGl6YWJsZVNwZWNpYWxgIChzZWVcbiAqIGBAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uL3R5cGVzYCkuIEFueSByZWR1Y2VyIGtleSBhZGRlZCBvbiB0aGVcbiAqIHNlcmlhbGl6YXRpb24gc2lkZSB0aGF0IGlzbid0IGNvdmVyZWQgaGVyZSB3aWxsIGNhdXNlIGBkZXZhbHVlLnVuZmxhdHRlbmBcbiAqIHRvIHRocm93IGBVbmtub3duIHR5cGUgWGAsIHdoaWNoIGBoeWRyYXRlUmVzb3VyY2VJT2Agc3dhbGxvd3MgYW5kXG4gKiBzdXJmYWNlcyBhcyBhIFwiRmFpbGVkIHRvIGxvYWQgcmVzb3VyY2UgZGV0YWlsc1wiIGJhbm5lciBpbiB0aGUgbzExeSBVSS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlYlJldml2ZXJzKCk6IFJldml2ZXJzIHtcbiAgZnVuY3Rpb24gcmV2aXZlQXJyYXlCdWZmZXIodmFsdWU6IHN0cmluZyk6IEFycmF5QnVmZmVyIHtcbiAgICByZXR1cm4gYmFzZTY0VG9BcnJheUJ1ZmZlcih2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC8vIE8xMXktc3BlY2lmaWMgcmV2aXZlcnMgKHN0cmVhbXMsIHN0ZXAgZnVuY3Rpb25zIOKGkiBkaXNwbGF5IG9iamVjdHMpLlxuICAgIC8vIFNwcmVhZCBGSVJTVCBzbyB3ZWItc3BlY2lmaWMgb3ZlcnJpZGVzIGJlbG93IHRha2UgcHJlY2VkZW5jZS5cbiAgICAuLi5vYnNlcnZhYmlsaXR5UmV2aXZlcnMsXG5cbiAgICAvLyBCaW5hcnkgdHlwZXNcbiAgICBBcnJheUJ1ZmZlcjogcmV2aXZlQXJyYXlCdWZmZXIsXG4gICAgQmlnSW50OiAodmFsdWU6IHN0cmluZykgPT4gQmlnSW50KHZhbHVlKSxcbiAgICBCaWdJbnQ2NEFycmF5OiAodmFsdWU6IHN0cmluZykgPT5cbiAgICAgIG5ldyBCaWdJbnQ2NEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgQmlnVWludDY0QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PlxuICAgICAgbmV3IEJpZ1VpbnQ2NEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgRGF0ZTogKHZhbHVlKSA9PiBuZXcgRGF0ZSh2YWx1ZSksXG5cbiAgICAvLyBFcnJvciBmYW1pbHkuIFRoZSByZWR1Y2VyIHNpZGUgKHNlZVxuICAgIC8vIGBwYWNrYWdlcy9jb3JlL3NyYy9zZXJpYWxpemF0aW9uL3JlZHVjZXJzL2NvbW1vbi50c2ApIGVtaXRzIGEgdGFnZ2VkXG4gICAgLy8gZW50cnkgZm9yIGVhY2ggYnVpbHQtaW4gRXJyb3Igc3ViY2xhc3MgcGx1cyB0aGUgd29ya2Zsb3ctc3BlY2lmaWNcbiAgICAvLyBgRmF0YWxFcnJvcmAgLyBgUmV0cnlhYmxlRXJyb3JgIC8gYEhvb2tDb25mbGljdEVycm9yYCAvXG4gICAgLy8gYFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3JgIGFuZCBgQWdncmVnYXRlRXJyb3JgLiBXaXRob3V0XG4gICAgLy8gbWF0Y2hpbmcgcmV2aXZlcnMgaGVyZSwgYGRldmFsdWUudW5mbGF0dGVuYCB0aHJvd3MgXCJVbmtub3duIHR5cGUgWFwiLFxuICAgIC8vIHdoaWNoIHN1cmZhY2VzIGluIHRoZSB3ZWIgbzExeSBVSSBhcyBcIkZhaWxlZCB0byBsb2FkIHJlc291cmNlXG4gICAgLy8gZGV0YWlsczogVW5rbm93biB0eXBlIEZhdGFsRXJyb3JcIi5cbiAgICBFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBvcHRzID0gJ2NhdXNlJyBpbiB2YWx1ZSA/IHsgY2F1c2U6IHZhbHVlLmNhdXNlIH0gOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcih2YWx1ZS5tZXNzYWdlLCBvcHRzKTtcbiAgICAgIGVycm9yLm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGVycm9yLnN0YWNrID0gdmFsdWUuc3RhY2s7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSxcbiAgICBFdmFsRXJyb3I6IG1ha2VXZWJFcnJvclN1YmNsYXNzUmV2aXZlcignRXZhbEVycm9yJyksXG4gICAgUmFuZ2VFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdSYW5nZUVycm9yJyksXG4gICAgUmVmZXJlbmNlRXJyb3I6IG1ha2VXZWJFcnJvclN1YmNsYXNzUmV2aXZlcignUmVmZXJlbmNlRXJyb3InKSxcbiAgICBTeW50YXhFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdTeW50YXhFcnJvcicpLFxuICAgIFR5cGVFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdUeXBlRXJyb3InKSxcbiAgICBVUklFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdVUklFcnJvcicpLFxuICAgIEFnZ3JlZ2F0ZUVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG9wdHMgPSAnY2F1c2UnIGluIHZhbHVlID8geyBjYXVzZTogdmFsdWUuY2F1c2UgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IEN0b3IgPSAoXG4gICAgICAgIGdsb2JhbFRoaXMgYXMgeyBBZ2dyZWdhdGVFcnJvcj86IEFnZ3JlZ2F0ZUVycm9yQ29uc3RydWN0b3IgfVxuICAgICAgKS5BZ2dyZWdhdGVFcnJvcjtcbiAgICAgIGNvbnN0IGVycm9yID1cbiAgICAgICAgdHlwZW9mIEN0b3IgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IG5ldyBDdG9yKHZhbHVlLmVycm9ycywgdmFsdWUubWVzc2FnZSwgb3B0cylcbiAgICAgICAgICA6IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UsIG9wdHMpLCB7XG4gICAgICAgICAgICAgIG5hbWU6ICdBZ2dyZWdhdGVFcnJvcicsXG4gICAgICAgICAgICAgIGVycm9yczogdmFsdWUuZXJyb3JzLFxuICAgICAgICAgICAgfSk7XG4gICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZXJyb3Iuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIC8vIGBGYXRhbEVycm9yYCBhbmQgYFJldHJ5YWJsZUVycm9yYCBhcmUgbm90IGJ1aWx0LWluIGJyb3dzZXIgZ2xvYmFscyxcbiAgICAvLyBzbyB3ZSBjYW4ndCByZXNvbHZlIGEgY29uc3RydWN0b3IgZnJvbSBnbG9iYWxUaGlzLiBUaGUgd2ViIG8xMXkgVUlcbiAgICAvLyBkb2Vzbid0IG5lZWQgYGluc3RhbmNlb2YgRmF0YWxFcnJvcmAgdG8gcGFzcyAobm8gdXNlciBjb2RlIHJ1bnNcbiAgICAvLyBoZXJlKS4gVGhlIHdlYiBvMTF5IFVJIG5lZWRzIGBuYW1lYCwgYG1lc3NhZ2VgLCBgc3RhY2tgLCBhbmQgYW55IGV4dHJhXG4gICAgLy8gZW51bWVyYWJsZSBmaWVsZHMgdG8gcmVuZGVyLiBDb25zdHJ1Y3QgYSBwbGFpbiBgRXJyb3JgIHdpdGggYG5hbWVgXG4gICAgLy8gc2V0OyBPYmplY3RJbnNwZWN0b3IgcmVhZHMgYGNvbnN0cnVjdG9yLm5hbWVgIGZvciB0aGUgZGlzcGxheWVkXG4gICAgLy8gY2xhc3MgbGFiZWwsIGJ1dCB3ZSBkb24ndCBoYXZlIHRoZSByZWFsIGNsYXNzLCBzbyB3ZSBlbWl0IGEgdGFnZ2VkXG4gICAgLy8gRXJyb3Igd2hvc2UgYG5hbWVgIGZpZWxkIGNhcnJpZXMgdGhlIGNsYXNzIGlkZW50aXR5LiBUaGlzIG1hdGNoZXNcbiAgICAvLyBob3cgdGhlIGV4aXN0aW5nIGJhc2UgYEVycm9yYCByZXZpdmVyIHByZXNlbnRzIHVua25vd24gc3ViY2xhc3Nlcy5cbiAgICBGYXRhbEVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG9wdHMgPSAnY2F1c2UnIGluIHZhbHVlID8geyBjYXVzZTogdmFsdWUuY2F1c2UgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UsIG9wdHMpO1xuICAgICAgZXJyb3IubmFtZSA9ICdGYXRhbEVycm9yJztcbiAgICAgIGlmICh2YWx1ZS5zdGFjayAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0sXG4gICAgSG9va0NvbmZsaWN0RXJyb3I6ICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgb3B0cyA9ICdjYXVzZScgaW4gdmFsdWUgPyB7IGNhdXNlOiB2YWx1ZS5jYXVzZSB9IDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IodmFsdWUubWVzc2FnZSwgb3B0cykgYXMgRXJyb3IgJiB7XG4gICAgICAgIHRva2VuPzogc3RyaW5nO1xuICAgICAgICBjb25mbGljdGluZ1J1bklkPzogc3RyaW5nO1xuICAgICAgfTtcbiAgICAgIGVycm9yLm5hbWUgPSAnSG9va0NvbmZsaWN0RXJyb3InO1xuICAgICAgZXJyb3IudG9rZW4gPSB2YWx1ZS50b2tlbjtcbiAgICAgIGlmICh2YWx1ZS5jb25mbGljdGluZ1J1bklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXJyb3IuY29uZmxpY3RpbmdSdW5JZCA9IHZhbHVlLmNvbmZsaWN0aW5nUnVuSWQ7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZXJyb3Iuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIFJldHJ5YWJsZUVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG9wdHMgPSAnY2F1c2UnIGluIHZhbHVlID8geyBjYXVzZTogdmFsdWUuY2F1c2UgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UsIG9wdHMpIGFzIEVycm9yICYge1xuICAgICAgICByZXRyeUFmdGVyPzogRGF0ZTtcbiAgICAgIH07XG4gICAgICBlcnJvci5uYW1lID0gJ1JldHJ5YWJsZUVycm9yJztcbiAgICAgIGlmICh2YWx1ZS5zdGFjayAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgICAgLy8gYHJldHJ5QWZ0ZXJgIGlzIHNlcmlhbGl6ZWQgYXMgYW4gZXBvY2ggbXMgbnVtYmVyIChzZWUgdGhlIHJ1bnRpbWVcbiAgICAgIC8vIFJldHJ5YWJsZUVycm9yIHJlZHVjZXIgZm9yIHRoZSByYXRpb25hbGUgYXJvdW5kIHJlYWxtLXNhZmV0eSkuXG4gICAgICAvLyBSZWh5ZHJhdGUgYXMgYSBEYXRlIHNvIG8xMXkgY29uc3VtZXJzIGNhbiByZW5kZXIgaXQgZGlyZWN0bHkuXG4gICAgICAvLyBHdWFyZCBhZ2FpbnN0IHBheWxvYWRzIGZyb20gb2xkZXIgcnVudGltZSB2ZXJzaW9ucyB0aGF0IHByZWRhdGVcbiAgICAgIC8vIHRoZSBmaWVsZDogd2l0aG91dCB0aGlzIGNoZWNrLCBgbmV3IERhdGUodW5kZWZpbmVkKWAgd291bGRcbiAgICAgIC8vIHByb2R1Y2UgYW4gSW52YWxpZCBEYXRlIHJhdGhlciB0aGFuIG9taXR0aW5nIHRoZSBwcm9wZXJ0eS5cbiAgICAgIGlmICh2YWx1ZS5yZXRyeUFmdGVyICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IucmV0cnlBZnRlciA9IG5ldyBEYXRlKHZhbHVlLnJldHJ5QWZ0ZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0sXG4gICAgUnVudGltZURlY3J5cHRpb25FcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBvcHRzID0gJ2NhdXNlJyBpbiB2YWx1ZSA/IHsgY2F1c2U6IHZhbHVlLmNhdXNlIH0gOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcih2YWx1ZS5tZXNzYWdlLCBvcHRzKSBhcyBFcnJvciAmIHtcbiAgICAgICAgY29udGV4dD86IHVua25vd247XG4gICAgICB9O1xuICAgICAgZXJyb3IubmFtZSA9ICdSdW50aW1lRGVjcnlwdGlvbkVycm9yJztcbiAgICAgIGlmICh2YWx1ZS5jb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXJyb3IuY29udGV4dCA9IHZhbHVlLmNvbnRleHQ7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZXJyb3Iuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIERPTUV4Y2VwdGlvbjogKHZhbHVlKSA9PiB7XG4gICAgICAvLyBNb2Rlcm4gYnJvd3NlcnMgYW5kIE5vZGUgMTgrIGV4cG9zZSBgRE9NRXhjZXB0aW9uYCBvbiBnbG9iYWxUaGlzLlxuICAgICAgLy8gYEFib3J0Q29udHJvbGxlci5hYm9ydCgpYCB3aXRoIG5vIGFyZ3VtZW50IHN5bnRoZXNpemVzIG9uZSBhcyB0aGVcbiAgICAgIC8vIHNpZ25hbCdzIHJlYXNvbiwgc28gdGhpcyBpcyBhIGNvbW1vbiBwYXlsb2FkIGZvciBhbnkgYWJvcnRlZCBzdGVwLlxuICAgICAgY29uc3QgRyA9IGdsb2JhbFRoaXMgYXMgeyBET01FeGNlcHRpb24/OiB0eXBlb2YgRE9NRXhjZXB0aW9uIH07XG4gICAgICBpZiAodHlwZW9mIEcuRE9NRXhjZXB0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IGUgPSBuZXcgRy5ET01FeGNlcHRpb24odmFsdWUubWVzc2FnZSwgdmFsdWUubmFtZSk7XG4gICAgICAgIGlmICh2YWx1ZS5zdGFjayAhPT0gdW5kZWZpbmVkKSBlLnN0YWNrID0gdmFsdWUuc3RhY2s7XG4gICAgICAgIGlmICgnY2F1c2UnIGluIHZhbHVlKSAoZSBhcyB7IGNhdXNlPzogdW5rbm93biB9KS5jYXVzZSA9IHZhbHVlLmNhdXNlO1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UpO1xuICAgICAgZXJyb3IubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZXJyb3Iuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgIGlmICgnY2F1c2UnIGluIHZhbHVlKSB7XG4gICAgICAgIChlcnJvciBhcyBFcnJvciAmIHsgY2F1c2U/OiB1bmtub3duIH0pLmNhdXNlID0gdmFsdWUuY2F1c2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSxcbiAgICBGbG9hdDMyQXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PiBuZXcgRmxvYXQzMkFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgRmxvYXQ2NEFycmF5OiAodmFsdWU6IHN0cmluZykgPT4gbmV3IEZsb2F0NjRBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSkpLFxuICAgIEludDhBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+IG5ldyBJbnQ4QXJyYXkocmV2aXZlQXJyYXlCdWZmZXIodmFsdWUpKSxcbiAgICBJbnQxNkFycmF5OiAodmFsdWU6IHN0cmluZykgPT4gbmV3IEludDE2QXJyYXkocmV2aXZlQXJyYXlCdWZmZXIodmFsdWUpKSxcbiAgICBJbnQzMkFycmF5OiAodmFsdWU6IHN0cmluZykgPT4gbmV3IEludDMyQXJyYXkocmV2aXZlQXJyYXlCdWZmZXIodmFsdWUpKSxcbiAgICBNYXA6ICh2YWx1ZSkgPT4gbmV3IE1hcCh2YWx1ZSksXG4gICAgUmVnRXhwOiAodmFsdWUpID0+IG5ldyBSZWdFeHAodmFsdWUuc291cmNlLCB2YWx1ZS5mbGFncyksXG4gICAgU2V0OiAodmFsdWUpID0+IG5ldyBTZXQodmFsdWUpLFxuICAgIFVpbnQ4QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PiBuZXcgVWludDhBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSkpLFxuICAgIFVpbnQ4Q2xhbXBlZEFycmF5OiAodmFsdWU6IHN0cmluZykgPT5cbiAgICAgIG5ldyBVaW50OENsYW1wZWRBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSkpLFxuICAgIFVpbnQxNkFycmF5OiAodmFsdWU6IHN0cmluZykgPT4gbmV3IFVpbnQxNkFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgVWludDMyQXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PiBuZXcgVWludDMyQXJyYXkocmV2aXZlQXJyYXlCdWZmZXIodmFsdWUpKSxcblxuICAgIEhlYWRlcnM6ICh2YWx1ZSkgPT4gbmV3IEhlYWRlcnModmFsdWUpLFxuICAgIFJlcXVlc3Q6ICh2YWx1ZSkgPT4ge1xuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS91c2VBcnJvd0Z1bmN0aW9uOiBhcnJvdyBmdW5jdGlvbnMgaGF2ZSBubyAucHJvdG90eXBlXG4gICAgICBjb25zdCBjdG9yID0geyBSZXF1ZXN0OiBmdW5jdGlvbiAoKSB7fSB9LlJlcXVlc3QhO1xuICAgICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShjdG9yLnByb3RvdHlwZSk7XG4gICAgICBPYmplY3QuYXNzaWduKG9iaiwge1xuICAgICAgICBtZXRob2Q6IHZhbHVlLm1ldGhvZCxcbiAgICAgICAgdXJsOiB2YWx1ZS51cmwsXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHZhbHVlLmhlYWRlcnMpLFxuICAgICAgICBib2R5OiB2YWx1ZS5ib2R5LFxuICAgICAgICBkdXBsZXg6IHZhbHVlLmR1cGxleCxcbiAgICAgICAgLi4uKHZhbHVlLnJlc3BvbnNlV3JpdGFibGVcbiAgICAgICAgICA/IHsgcmVzcG9uc2VXcml0YWJsZTogdmFsdWUucmVzcG9uc2VXcml0YWJsZSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICBSZXNwb25zZTogKHZhbHVlKSA9PiB7XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L3VzZUFycm93RnVuY3Rpb246IGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGVcbiAgICAgIGNvbnN0IGN0b3IgPSB7IFJlc3BvbnNlOiBmdW5jdGlvbiAoKSB7fSB9LlJlc3BvbnNlITtcbiAgICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUoY3Rvci5wcm90b3R5cGUpO1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHtcbiAgICAgICAgc3RhdHVzOiB2YWx1ZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHZhbHVlLnN0YXR1c1RleHQsXG4gICAgICAgIHVybDogdmFsdWUudXJsLFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh2YWx1ZS5oZWFkZXJzKSxcbiAgICAgICAgYm9keTogdmFsdWUuYm9keSxcbiAgICAgICAgcmVkaXJlY3RlZDogdmFsdWUucmVkaXJlY3RlZCxcbiAgICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIFVSTDogKHZhbHVlKSA9PiBuZXcgVVJMKHZhbHVlKSxcbiAgICBVUkxTZWFyY2hQYXJhbXM6ICh2YWx1ZSkgPT4gbmV3IFVSTFNlYXJjaFBhcmFtcyh2YWx1ZSA9PT0gJy4nID8gJycgOiB2YWx1ZSksXG5cbiAgICAvLyBXZWItc3BlY2lmaWMgb3ZlcnJpZGVzIGZvciBjbGFzcyBpbnN0YW5jZXMuXG4gICAgLy8gQ3JlYXRlIG9iamVjdHMgd2l0aCBhIGR5bmFtaWNhbGx5LW5hbWVkIGNvbnN0cnVjdG9yIHNvIHRoYXRcbiAgICAvLyB0aGUgZGF0YSBpbnNwZWN0b3Igc2hvd3MgdGhlIGNsYXNzIG5hbWUgKGl0IHJlYWRzIGNvbnN0cnVjdG9yLm5hbWUpLlxuICAgIENsYXNzOiAodmFsdWUpID0+IGA8Y2xhc3M6JHtleHRyYWN0Q2xhc3NOYW1lKHZhbHVlLmNsYXNzSWQpfT5gLFxuICAgIEluc3RhbmNlOiAodmFsdWUpID0+IHtcbiAgICAgIC8vIFJ1biBpbnN0YW5jZXMgYXJlIHJlbmRlcmVkIGFzIGNsaWNrYWJsZSBSdW5SZWYgYmFkZ2VzXG4gICAgICBjb25zdCBydW5SZWYgPSBzZXJpYWxpemVkSW5zdGFuY2VUb1JlZih2YWx1ZSk7XG4gICAgICBpZiAoaXNSdW5SZWYocnVuUmVmKSkge1xuICAgICAgICByZXR1cm4gcnVuUmVmO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xhc3NOYW1lID0gZXh0cmFjdENsYXNzTmFtZSh2YWx1ZS5jbGFzc0lkKTtcbiAgICAgIGNvbnN0IGRhdGEgPSB2YWx1ZS5kYXRhO1xuICAgICAgY29uc3QgcHJvcHMgPVxuICAgICAgICBkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IHsgLi4uZGF0YSB9IDogeyB2YWx1ZTogZGF0YSB9O1xuICAgICAgLy8gQ3JlYXRlIGEgY29uc3RydWN0b3Igd2l0aCB0aGUgcmlnaHQgbmFtZSB1c2luZyBjb21wdXRlZCBwcm9wZXJ0eVxuICAgICAgLy8gc28gdGhlIGRhdGEgaW5zcGVjdG9yJ3MgYG9iamVjdC5jb25zdHJ1Y3Rvci5uYW1lYCBzaG93cyB0aGUgY2xhc3MgbmFtZS5cbiAgICAgIC8vIE11c3QgdXNlIGBmdW5jdGlvbmAgKG5vdCBhcnJvdykgYmVjYXVzZSBhcnJvdyBmdW5jdGlvbnMgaGF2ZSBubyAucHJvdG90eXBlLlxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS91c2VBcnJvd0Z1bmN0aW9uOiBhcnJvdyBmdW5jdGlvbnMgaGF2ZSBubyAucHJvdG90eXBlXG4gICAgICBjb25zdCBjdG9yID0geyBbY2xhc3NOYW1lXTogZnVuY3Rpb24gKCkge30gfVtjbGFzc05hbWVdITtcbiAgICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUoY3Rvci5wcm90b3R5cGUpO1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHByb3BzKTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQcmUtYnVpbHQgd2ViIHJldml2ZXJzIChjYWNoZWQgZm9yIHBlcmZvcm1hbmNlKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmxldCBjYWNoZWRSZXZpdmVyczogUmV2aXZlcnMgfCBudWxsID0gbnVsbDtcblxuZnVuY3Rpb24gZ2V0UmV2aXZlcnMoKTogUmV2aXZlcnMge1xuICBpZiAoIWNhY2hlZFJldml2ZXJzKSB7XG4gICAgY2FjaGVkUmV2aXZlcnMgPSBnZXRXZWJSZXZpdmVycygpO1xuICB9XG4gIHJldHVybiBjYWNoZWRSZXZpdmVycztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQdWJsaWMgQVBJXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBIeWRyYXRlIHRoZSBzZXJpYWxpemVkIGRhdGEgZmllbGRzIG9mIGEgcmVzb3VyY2UgZm9yIHdlYiBkaXNwbGF5LlxuICpcbiAqIFVzZXMgYnJvd3Nlci1zYWZlIHJldml2ZXJzIChhdG9iIGZvciBiYXNlNjQsIENsYXNzSW5zdGFuY2VSZWYgZm9yXG4gKiBjdXN0b20gY2xhc3NlcywgU3RyZWFtUmVmIGZvciBzdHJlYW1zKS4gQ2FsbCB0aGlzIG9uIGRhdGEgcmVjZWl2ZWRcbiAqIGZyb20gdGhlIHNlcnZlciBiZWZvcmUgcGFzc2luZyBpdCB0byBVSSBjb21wb25lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaHlkcmF0ZVJlc291cmNlSU88VD4ocmVzb3VyY2U6IFQpOiBUIHtcbiAgY29uc3QgaHlkcmF0ZWQgPSBoeWRyYXRlUmVzb3VyY2VJT0dlbmVyaWMoXG4gICAgcmVzb3VyY2UgYXMgYW55LFxuICAgIGdldFJldml2ZXJzKClcbiAgKSBhcyBUO1xuICByZXR1cm4gcmVwbGFjZUVuY3J5cHRlZEFuZEV4cGlyZWRXaXRoTWFya2VycyhoeWRyYXRlZCk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRW5jcnlwdGVkIGRhdGEgZGlzcGxheSBtYXJrZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IEVOQ1JZUFRFRF9ESVNQTEFZX05BTUUgPSAnRW5jcnlwdGVkJztcblxuLyoqXG4gKiBDcmVhdGUgYSBkaXNwbGF5LWZyaWVuZGx5IG9iamVjdCBmb3IgZW5jcnlwdGVkIGRhdGEuXG4gKlxuICogVXNlcyB0aGUgc2FtZSBuYW1lZC1jb25zdHJ1Y3RvciB0cmljayBhcyB0aGUgSW5zdGFuY2UgcmV2aXZlciBzbyB0aGF0XG4gKiBPYmplY3RJbnNwZWN0b3IgcmVuZGVycyB0aGUgY29uc3RydWN0b3IgbmFtZSAoXCLwn5SSIEVuY3J5cHRlZFwiKSB3aXRoIG5vXG4gKiBleHBhbmRhYmxlIGNoaWxkcmVuLiBUaGUgb3JpZ2luYWwgZW5jcnlwdGVkIGJ5dGVzIGFyZSBzdG9yZWQgaW4gYVxuICogbm9uLWVudW1lcmFibGUgcHJvcGVydHkgZm9yIGxhdGVyIGRlY3J5cHRpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVuY3J5cHRlZE1hcmtlcihkYXRhOiBVaW50OEFycmF5KTogb2JqZWN0IHtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS91c2VBcnJvd0Z1bmN0aW9uOiBhcnJvdyBmdW5jdGlvbnMgaGF2ZSBubyAucHJvdG90eXBlXG4gIGNvbnN0IGN0b3IgPSB7IFtFTkNSWVBURURfRElTUExBWV9OQU1FXTogZnVuY3Rpb24gKCkge30gfVtcbiAgICBFTkNSWVBURURfRElTUExBWV9OQU1FXG4gIF0hO1xuICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKGN0b3IucHJvdG90eXBlKTtcbiAgLy8gU3RvcmUgb3JpZ2luYWwgYnl0ZXMgZm9yIGRlY3J5cHRpb24sIGJ1dCBub24tZW51bWVyYWJsZSBzb1xuICAvLyBPYmplY3RJbnNwZWN0b3IgZG9lc24ndCBzaG93IHRoZW0gYXMgY2hpbGRyZW5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ19fZW5jcnlwdGVkRGF0YScsIHtcbiAgICB2YWx1ZTogZGF0YSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICB9KTtcbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqIENoZWNrIGlmIGEgdmFsdWUgaXMgYW4gZW5jcnlwdGVkIGRpc3BsYXkgbWFya2VyICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbmNyeXB0ZWRNYXJrZXIodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICB2YWx1ZS5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gRU5DUllQVEVEX0RJU1BMQVlfTkFNRVxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV4cGlyZWQgZGF0YSBkaXNwbGF5IG1hcmtlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgRVhQSVJFRF9ESVNQTEFZX05BTUUgPSAnRXhwaXJlZCBEYXRhJztcblxuLyoqXG4gKiBDcmVhdGUgYSBkaXNwbGF5LWZyaWVuZGx5IG9iamVjdCBmb3IgZXhwaXJlZCBkYXRhLlxuICpcbiAqIFVzZXMgdGhlIHNhbWUgbmFtZWQtY29uc3RydWN0b3IgdHJpY2sgYXMgdGhlIGVuY3J5cHRlZCBtYXJrZXIgc28gdGhhdFxuICogT2JqZWN0SW5zcGVjdG9yIHJlbmRlcnMgdGhlIGNvbnN0cnVjdG9yIG5hbWUgKFwiRXhwaXJlZCBEYXRhXCIpIHdpdGggbm9cbiAqIGV4cGFuZGFibGUgY2hpbGRyZW4uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUV4cGlyZWRNYXJrZXIoKTogb2JqZWN0IHtcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS91c2VBcnJvd0Z1bmN0aW9uOiBhcnJvdyBmdW5jdGlvbnMgaGF2ZSBubyAucHJvdG90eXBlXG4gIGNvbnN0IGN0b3IgPSB7IFtFWFBJUkVEX0RJU1BMQVlfTkFNRV06IGZ1bmN0aW9uICgpIHt9IH1bXG4gICAgRVhQSVJFRF9ESVNQTEFZX05BTUVcbiAgXSE7XG4gIHJldHVybiBPYmplY3QuY3JlYXRlKGN0b3IucHJvdG90eXBlKTtcbn1cblxuLyoqIENoZWNrIGlmIGEgdmFsdWUgaXMgYW4gZXhwaXJlZCBkYXRhIGRpc3BsYXkgbWFya2VyICovXG5leHBvcnQgZnVuY3Rpb24gaXNFeHBpcmVkTWFya2VyKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgdmFsdWUuY29uc3RydWN0b3I/Lm5hbWUgPT09IEVYUElSRURfRElTUExBWV9OQU1FXG4gICk7XG59XG5cbi8qKiBSZXBsYWNlIGEgc2luZ2xlIGZpZWxkIHZhbHVlIHdpdGggYSBkaXNwbGF5IG1hcmtlciBpZiBpdCdzIGVuY3J5cHRlZCBvciBleHBpcmVkLiAqL1xuZnVuY3Rpb24gdG9EaXNwbGF5TWFya2VyKHZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gIGlmIChpc0VuY3J5cHRlZERhdGEodmFsdWUpKSByZXR1cm4gY3JlYXRlRW5jcnlwdGVkTWFya2VyKHZhbHVlIGFzIFVpbnQ4QXJyYXkpO1xuICBpZiAoaXNFeHBpcmVkU3R1Yih2YWx1ZSkpIHJldHVybiBjcmVhdGVFeHBpcmVkTWFya2VyKCk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBQb3N0LXByb2Nlc3MgaHlkcmF0ZWQgcmVzb3VyY2UgZGF0YTogcmVwbGFjZSBlbmNyeXB0ZWQgVWludDhBcnJheSB2YWx1ZXNcbiAqIGFuZCBleHBpcmVkIHN0dWJzIHdpdGggZGlzcGxheS1mcmllbmRseSBtYXJrZXIgb2JqZWN0cyBpbiBrbm93biBkYXRhIGZpZWxkcy5cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUVuY3J5cHRlZEFuZEV4cGlyZWRXaXRoTWFya2VyczxUPihyZXNvdXJjZTogVCk6IFQge1xuICBpZiAoIXJlc291cmNlIHx8IHR5cGVvZiByZXNvdXJjZSAhPT0gJ29iamVjdCcpIHJldHVybiByZXNvdXJjZTtcbiAgY29uc3QgciA9IHJlc291cmNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCByZXN1bHQgPSB7IC4uLnIgfTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBbJ2lucHV0JywgJ291dHB1dCcsICdtZXRhZGF0YScsICdlcnJvciddKSB7XG4gICAgcmVzdWx0W2tleV0gPSB0b0Rpc3BsYXlNYXJrZXIocmVzdWx0W2tleV0pO1xuICB9XG5cbiAgaWYgKHJlc3VsdC5ldmVudERhdGEgJiYgdHlwZW9mIHJlc3VsdC5ldmVudERhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgZXZlbnRUeXBlID1cbiAgICAgIHR5cGVvZiByZXN1bHQuZXZlbnRUeXBlID09PSAnc3RyaW5nJyA/IHJlc3VsdC5ldmVudFR5cGUgOiAnJztcbiAgICBjb25zdCByZWZLZXlzID0gZ2V0RXZlbnREYXRhUmVmRmllbGRzKGV2ZW50VHlwZSk7XG4gICAgY29uc3QgZWQgPSB7IC4uLihyZXN1bHQuZXZlbnREYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHJlZktleXMpIHtcbiAgICAgIGlmIChrZXkgaW4gZWQpIHtcbiAgICAgICAgZWRba2V5XSA9IHRvRGlzcGxheU1hcmtlcihlZFtrZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0LmV2ZW50RGF0YSA9IGVkO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCBhcyBUO1xufVxuXG4vKipcbiAqIEh5ZHJhdGUgcmVzb3VyY2UgZGF0YSB3aXRoIGRlY3J5cHRpb24gc3VwcG9ydC5cbiAqXG4gKiBXaGVuIGEga2V5IGlzIHByb3ZpZGVkLCBlbmNyeXB0ZWQgZmllbGRzIGFyZSBkZWNyeXB0ZWQgYmVmb3JlIGh5ZHJhdGlvbi5cbiAqIFRoaXMgaXMgdGhlIGFzeW5jIHZlcnNpb24gdXNlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBcIkRlY3J5cHRcIiBpbiB0aGUgd2ViIFVJLlxuICpcbiAqIEhhbmRsZXMgYm90aCB0b3AtbGV2ZWwgZmllbGRzIChpbnB1dCwgb3V0cHV0LCBtZXRhZGF0YSkgYW5kIG5lc3RlZCBldmVudERhdGFcbiAqIHBheWxvYWQgZmllbGRzIGZvciB0aGF0IGV2ZW50IHR5cGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoeWRyYXRlUmVzb3VyY2VJT1dpdGhLZXk8VD4oXG4gIHJlc291cmNlOiBULFxuICBrZXk6IFVpbnQ4QXJyYXlcbik6IFByb21pc2U8VD4ge1xuICByZXR1cm4gaHlkcmF0ZVJlc291cmNlSU9Bc3luYyhyZXNvdXJjZSwga2V5KTtcbn1cblxuLyoqXG4gKiBBc3luYyBoeWRyYXRpb24gZm9yIHdlYiBkaXNwbGF5LlxuICpcbiAqIFRoaXMgZm9sbG93cyB0aGUgc2FtZSByZXNvdXJjZS1maWVsZCBtYXBwaW5nIGFzIHtAbGluayBoeWRyYXRlUmVzb3VyY2VJT30sXG4gKiBidXQgY2FuIGFsc28gaW5mbGF0ZSBjb21wcmVzc2VkIGJyb3dzZXIgcGF5bG9hZHMgdGhyb3VnaCB0aGUgcmVnaXN0ZXJlZFxuICogenN0ZCBXQVNNIGRlY29kZXIuIFdoZW4gYSBrZXkgaXMgcHJvdmlkZWQsIGVuY3J5cHRlZCBmaWVsZHMgYXJlIGRlY3J5cHRlZFxuICogZmlyc3QgYW5kIHRoZW4gaW5mbGF0ZWQvaHlkcmF0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoeWRyYXRlUmVzb3VyY2VJT0FzeW5jPFQ+KFxuICByZXNvdXJjZTogVCxcbiAga2V5PzogVWludDhBcnJheVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHsgaHlkcmF0ZURhdGFXaXRoS2V5LCBkZXJpdmVSdW5QYXlsb2FkS2V5cyB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uLWZvcm1hdCdcbiAgKTtcbiAgLy8gUGF5bG9hZHMgbWF5IGJlIHpzdGQtY29tcHJlc3NlZCAodGhlIFdlYiBEZWNvbXByZXNzaW9uU3RyZWFtIGhhcyBubyB6c3RkKTtcbiAgLy8gcmVnaXN0ZXIgdGhlIFdBU00tYmFja2VkIGJyb3dzZXIgZGVjb2RlciBiZWZvcmUgaHlkcmF0aW5nLiBJZGVtcG90ZW50IGFuZFxuICAvLyBsYXp5OiB0aGUgV0FTTSBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYSB6c3RkIHBheWxvYWQgaXMgYWN0dWFsbHkgZGVjb2RlZC5cbiAgY29uc3QgeyBlbnN1cmVac3RkRGVjb2RlclJlZ2lzdGVyZWQgfSA9IGF3YWl0IGltcG9ydChcbiAgICAnLi96c3RkLWJyb3dzZXItZGVjb2Rlci5qcydcbiAgKTtcbiAgZW5zdXJlWnN0ZERlY29kZXJSZWdpc3RlcmVkKCk7XG4gIC8vIFJlc29sdmUgdGhlICpmdWxsKiBrZXkgY2FwYWJpbGl0eTogYSBydW4nc1xuICAvLyBldmVudCBsb2cgY2FuIGNvbnRhaW4gc2VhbGVkICgnZW5jcCcpIHBheWxvYWRzIHRoYXQgYW5vdGhlciBydW4gd3JvdGUgdG9cbiAgLy8gaXQgKGEgY3Jvc3MtZGVwbG95bWVudCBob29rIHJlc3VtcHRpb24sIHNheSksIGFuZCBvcGVuaW5nIHRob3NlIG5lZWRzIHRoZVxuICAvLyBydW4ncyBYMjU1MTkgc2NhbGFyIGluIGFkZGl0aW9uIHRvIGl0cyBBRVMga2V5LiBCb3RoIGRlcml2ZSBmcm9tIHRoZSBzYW1lXG4gIC8vIDMyIGJ5dGVzIHRoZSBrZXktcmV0cmlldmFsIGVuZHBvaW50IHJldHVybnMuXG4gIGNvbnN0IGNyeXB0b0tleSA9IGtleSA/IGF3YWl0IGRlcml2ZVJ1blBheWxvYWRLZXlzKGtleSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJldml2ZXJzID0gZ2V0UmV2aXZlcnMoKTtcblxuICBhc3luYyBmdW5jdGlvbiBoeWRyYXRlRmllbGQodmFsdWU6IHVua25vd24pOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAvLyBBbHJlYWR5LWh5ZHJhdGVkOiBlbmNyeXB0ZWQgbWFya2VyIHdpdGggc3RvcmVkIGJ5dGVzXG4gICAgaWYgKGlzRW5jcnlwdGVkTWFya2VyKHZhbHVlKSkge1xuICAgICAgY29uc3QgcmF3ID0gKHZhbHVlIGFzIGFueSkuX19lbmNyeXB0ZWREYXRhIGFzIFVpbnQ4QXJyYXk7XG4gICAgICByZXR1cm4gY3J5cHRvS2V5ID8gaHlkcmF0ZURhdGFXaXRoS2V5KHJhdywgcmV2aXZlcnMsIGNyeXB0b0tleSkgOiB2YWx1ZTtcbiAgICB9XG4gICAgLy8gUmF3IFVpbnQ4QXJyYXk6IG1heSBiZSBlbmNyeXB0ZWQsIGNvbXByZXNzZWQsIG9yIHBsYWluIGRldmFsdWUuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgcmV0dXJuIGh5ZHJhdGVEYXRhV2l0aEtleSh2YWx1ZSwgcmV2aXZlcnMsIGNyeXB0b0tleSk7XG4gICAgfVxuICAgIC8vIE5vdCBzZXJpYWxpemVkLCBzbyByZXR1cm4gYXMtaXMuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgY29uc3QgciA9IHJlc291cmNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCByZXN1bHQgPSB7IC4uLnIgfTtcblxuICAvLyBEZWNyeXB0ICsgaHlkcmF0ZSB0b3AtbGV2ZWwgc2VyaWFsaXplZCBmaWVsZHMgKHJ1bnMsIHN0ZXBzLCBob29rcylcbiAgZm9yIChjb25zdCBmaWVsZCBvZiBbJ2lucHV0JywgJ291dHB1dCcsICdtZXRhZGF0YScsICdlcnJvciddKSB7XG4gICAgaWYgKGZpZWxkIGluIHJlc3VsdCkge1xuICAgICAgcmVzdWx0W2ZpZWxkXSA9IGF3YWl0IGh5ZHJhdGVGaWVsZChyZXN1bHRbZmllbGRdKTtcbiAgICB9XG4gIH1cblxuICAvLyBIeWRyYXRlIGV2ZW50RGF0YSBzdWJmaWVsZHMgKGV2ZW50cylcbiAgaWYgKHJlc3VsdC5ldmVudERhdGEgJiYgdHlwZW9mIHJlc3VsdC5ldmVudERhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgZXZlbnRUeXBlID1cbiAgICAgIHR5cGVvZiByZXN1bHQuZXZlbnRUeXBlID09PSAnc3RyaW5nJyA/IHJlc3VsdC5ldmVudFR5cGUgOiAnJztcbiAgICBjb25zdCByZWZLZXlzID0gZ2V0RXZlbnREYXRhUmVmRmllbGRzKGV2ZW50VHlwZSk7XG4gICAgY29uc3QgZXZlbnREYXRhID0geyAuLi4ocmVzdWx0LmV2ZW50RGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHJlZktleXMpIHtcbiAgICAgIGlmIChmaWVsZCBpbiBldmVudERhdGEpIHtcbiAgICAgICAgZXZlbnREYXRhW2ZpZWxkXSA9IGF3YWl0IGh5ZHJhdGVGaWVsZChldmVudERhdGFbZmllbGRdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0LmV2ZW50RGF0YSA9IGV2ZW50RGF0YTtcbiAgfVxuXG4gIHJldHVybiByZXBsYWNlRW5jcnlwdGVkQW5kRXhwaXJlZFdpdGhNYXJrZXJzKHJlc3VsdCBhcyBUKTtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGEgaHlkcmF0ZWQgcmVzb3VyY2UgKGV2ZW50LCBzdGVwLCBydW4sIGV0Yy4pIGNvbnRhaW5zIGFueVxuICogZW5jcnlwdGVkIGRpc3BsYXkgbWFya2Vycy4gSW5zcGVjdHMgdGhlIHN0YW5kYXJkIHRvcC1sZXZlbCBmaWVsZHNcbiAqIChgaW5wdXRgLCBgb3V0cHV0YCwgYGVycm9yYCwgYG1ldGFkYXRhYCkgYXMgd2VsbCBhcyB0aGUgZXZlbnQtdHlwZS1zcGVjaWZpY1xuICogYGV2ZW50RGF0YWAgcmVmIGZpZWxkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0VuY3J5cHRlZEZpZWxkcyhyZXNvdXJjZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoIXJlc291cmNlIHx8IHR5cGVvZiByZXNvdXJjZSAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgciA9IHJlc291cmNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIFsnaW5wdXQnLCAnb3V0cHV0JywgJ21ldGFkYXRhJywgJ2Vycm9yJ10pIHtcbiAgICBpZiAoaXNFbmNyeXB0ZWRNYXJrZXIocltrZXldKSkgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoci5ldmVudERhdGEgJiYgdHlwZW9mIHIuZXZlbnREYXRhID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGV2ZW50VHlwZSA9IHR5cGVvZiByLmV2ZW50VHlwZSA9PT0gJ3N0cmluZycgPyByLmV2ZW50VHlwZSA6ICcnO1xuICAgIGNvbnN0IHJlZktleXMgPSBnZXRFdmVudERhdGFSZWZGaWVsZHMoZXZlbnRUeXBlKTtcbiAgICBjb25zdCBlZCA9IHIuZXZlbnREYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHJlZktleXMpIHtcbiAgICAgIGlmIChrZXkgaW4gZWQgJiYgaXNFbmNyeXB0ZWRNYXJrZXIoZWRba2V5XSkpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbiJdfQ==
|
|
489
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlkcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9oeWRyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixpQkFBaUIsSUFBSSx3QkFBd0IsRUFDN0MsZUFBZSxFQUNmLGFBQWEsRUFDYixRQUFRLEVBQ1IscUJBQXFCLEVBRXJCLHVCQUF1QixHQUN4QixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhELG9EQUFvRDtBQUNwRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsUUFBUSxFQUNSLFVBQVUsRUFDVixXQUFXLEVBRVgsWUFBWSxFQUVaLGVBQWUsRUFFZix1QkFBdUIsRUFDdkIsVUFBVSxHQUNYLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsOEVBQThFO0FBQzlFLDZCQUE2QjtBQUM3Qiw4RUFBOEU7QUFFOUUsU0FBUyxtQkFBbUIsQ0FBQyxNQUFjO0lBQ3pDLElBQUksTUFBTSxLQUFLLEVBQUUsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDcEMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzdDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENB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QU8sUUFBUSxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM1RCxNQUFNLENBQUMsR0FBRyxRQUFtQyxDQUFDO0lBRTlDLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzNELElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE1BQU0sT0FBTyxHQUFHLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFvQyxDQUFDO1FBQ2xELEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7WUFDMUIsSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztRQUMzRCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2ViLXNwZWNpZmljIGh5ZHJhdGlvbiBmb3IgbzExeSBkaXNwbGF5LlxuICpcbiAqIEJyb3dzZXItc2FmZSByZXZpdmVycyB0aGF0IHVzZSBgYXRvYigpYCBmb3IgYmFzZTY0IGRlY29kaW5nIChubyBOb2RlLmpzXG4gKiBgQnVmZmVyYCBkZXBlbmRlbmN5KS4gUHJvZHVjZXMgYENsYXNzSW5zdGFuY2VSZWZgIG9iamVjdHMgYW5kIGBTdHJlYW1SZWZgXG4gKiBvYmplY3RzIGZvciBVSSByZW5kZXJpbmcuXG4gKi9cblxuaW1wb3J0IHtcbiAgZXh0cmFjdENsYXNzTmFtZSxcbiAgaHlkcmF0ZVJlc291cmNlSU8gYXMgaHlkcmF0ZVJlc291cmNlSU9HZW5lcmljLFxuICBpc0VuY3J5cHRlZERhdGEsXG4gIGlzRXhwaXJlZFN0dWIsXG4gIGlzUnVuUmVmLFxuICBvYnNlcnZhYmlsaXR5UmV2aXZlcnMsXG4gIHR5cGUgUmV2aXZlcnMsXG4gIHNlcmlhbGl6ZWRJbnN0YW5jZVRvUmVmLFxufSBmcm9tICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uLWZvcm1hdCc7XG5pbXBvcnQgeyBnZXRFdmVudERhdGFSZWZGaWVsZHMgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuXG4vLyBSZS1leHBvcnQgdHlwZXMgYW5kIHV0aWxpdGllcyB0aGF0IGNvbnN1bWVycyBuZWVkXG5leHBvcnQge1xuICBDTEFTU19JTlNUQU5DRV9SRUZfVFlQRSxcbiAgQ2xhc3NJbnN0YW5jZVJlZixcbiAgRU5DUllQVEVEX1BMQUNFSE9MREVSLFxuICBleHRyYWN0U3RyZWFtSWRzLFxuICBpc0NsYXNzSW5zdGFuY2VSZWYsXG4gIGlzRW5jcnlwdGVkRGF0YSxcbiAgaXNSdW5SZWYsXG4gIGlzU3RyZWFtSWQsXG4gIGlzU3RyZWFtUmVmLFxuICB0eXBlIFJldml2ZXJzLFxuICBSVU5fUkVGX1RZUEUsXG4gIHR5cGUgUnVuUmVmLFxuICBTVFJFQU1fUkVGX1RZUEUsXG4gIHR5cGUgU3RyZWFtUmVmLFxuICBzZXJpYWxpemVkSW5zdGFuY2VUb1JlZixcbiAgdHJ1bmNhdGVJZCxcbn0gZnJvbSAnQHdvcmtmbG93L2NvcmUvc2VyaWFsaXphdGlvbi1mb3JtYXQnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEJyb3dzZXItc2FmZSBiYXNlNjQgZGVjb2RlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gYmFzZTY0VG9BcnJheUJ1ZmZlcihiYXNlNjQ6IHN0cmluZyk6IEFycmF5QnVmZmVyIHtcbiAgaWYgKGJhc2U2NCA9PT0gJycgfHwgYmFzZTY0ID09PSAnLicpIHtcbiAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xuICB9XG4gIGNvbnN0IGJpbmFyeVN0cmluZyA9IGF0b2IoYmFzZTY0KTtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnlTdHJpbmcubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaW5hcnlTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICBieXRlc1tpXSA9IGJpbmFyeVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICB9XG4gIHJldHVybiBieXRlcy5idWZmZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gV2ViIHJldml2ZXJzIChicm93c2VyLXNhZmUsIG5vIEJ1ZmZlciBkZXBlbmRlbmN5KVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQnVpbGQgYSByZXZpdmVyIGZvciBvbmUgb2YgdGhlIGJ1aWx0LWluIGBFcnJvcmAgc3ViY2xhc3NlcyAoZS5nLlxuICogYFR5cGVFcnJvcmAsIGBSYW5nZUVycm9yYCkuIFRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIG5hbWVkIHN1YmNsYXNzIGlzXG4gKiByZXNvbHZlZCBvZmYgYGdsb2JhbFRoaXNgIGF0IGNhbGwgdGltZSBzbyB0aGUgcHJvZHVjZWQgaW5zdGFuY2UgaGFzIHRoZVxuICogY29ycmVjdCBwcm90b3R5cGUgY2hhaW4gaW4gdGhlIGNvbnN1bWVyIHJlYWxtLiBGYWxscyBiYWNrIHRvIGEgZ2VuZXJpY1xuICogYEVycm9yYCAod2l0aCBgbmFtZWAgc2V0KSBpZiB0aGUgZ2xvYmFsIGlzbid0IGF2YWlsYWJsZSwgd2hpY2gga2VlcHMgdGhlXG4gKiBvMTF5IFVJIHJlbmRlcmluZyBldmVuIG9uIGV4b3RpYyBicm93c2Vycy5cbiAqXG4gKiBgY2F1c2VgIGlzIHBhc3NlZCB0aHJvdWdoIGBFcnJvck9wdGlvbnNgIHRvIHRoZSBjb25zdHJ1Y3RvciB3aGVuIHByZXNlbnQsXG4gKiBtYXRjaGluZyBgZ2V0Q29tbW9uUmV2aXZlcnNgIGluIGBAd29ya2Zsb3cvY29yZWAgc28gdGhlIHJlc3VsdGluZyBgY2F1c2VgXG4gKiBwcm9wZXJ0eSBoYXMgdGhlIHNhbWUgc2VtYW50aWNzIChub24tZW51bWVyYWJsZSwgc2V0IGJ5IHRoZSBlbmdpbmUpIGFzIGFcbiAqIGZyZXNobHkgdGhyb3duIEVycm9yIGluIHRoZSBjb25zdW1lciByZWFsbS4gVGhlIGAnY2F1c2UnIGluIHZhbHVlYCBjaGVja1xuICogcHJlc2VydmVzIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIFwibm8gY2F1c2VcIiBhbmQgXCJjYXVzZSBpcyB1bmRlZmluZWRcIi5cbiAqL1xuZnVuY3Rpb24gbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKFxuICBuYW1lOlxuICAgIHwgJ0V2YWxFcnJvcidcbiAgICB8ICdSYW5nZUVycm9yJ1xuICAgIHwgJ1JlZmVyZW5jZUVycm9yJ1xuICAgIHwgJ1N5bnRheEVycm9yJ1xuICAgIHwgJ1R5cGVFcnJvcidcbiAgICB8ICdVUklFcnJvcidcbikge1xuICByZXR1cm4gKHZhbHVlOiB7IG1lc3NhZ2U6IHN0cmluZzsgc3RhY2s/OiBzdHJpbmc7IGNhdXNlPzogdW5rbm93biB9KSA9PiB7XG4gICAgY29uc3Qgb3B0cyA9ICdjYXVzZScgaW4gdmFsdWUgPyB7IGNhdXNlOiB2YWx1ZS5jYXVzZSB9IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IEN0b3IgPSAoZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtuYW1lXSBhc1xuICAgICAgfCBFcnJvckNvbnN0cnVjdG9yXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZXJyb3I6IEVycm9yO1xuICAgIGlmICh0eXBlb2YgQ3RvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IgPSBuZXcgQ3Rvcih2YWx1ZS5tZXNzYWdlLCBvcHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgcGF0aDogbm8gYnVpbHQtaW4gc3ViY2xhc3MgYXZhaWxhYmxlIChleG90aWMgZW52KS4gQ29uc3RydWN0XG4gICAgICAvLyBhIHBsYWluIEVycm9yIHdpdGggdGhlIHJpZ2h0IGBuYW1lYCBhbmQgY29weSBgY2F1c2VgIG1hbnVhbGx5IHNpbmNlXG4gICAgICAvLyB0aGUgYmFzZSBFcnJvciBjb25zdHJ1Y3RvciBpcyB3aGF0IHdlIGFjdHVhbGx5IGNhbGxlZC5cbiAgICAgIGVycm9yID0gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IodmFsdWUubWVzc2FnZSwgb3B0cyksIHsgbmFtZSB9KTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGVycm9yLnN0YWNrID0gdmFsdWUuc3RhY2s7XG4gICAgcmV0dXJuIGVycm9yO1xuICB9O1xufVxuXG4vKipcbiAqIEdldCB0aGUgd2ViLXNwZWNpZmljIHJldml2ZXJzIGZvciBoeWRyYXRpbmcgc2VyaWFsaXplZCBkYXRhLlxuICpcbiAqIFVzZXMgYGF0b2IoKWAgZm9yIGJhc2U2NCBkZWNvZGluZyAobm8gTm9kZS5qcyBCdWZmZXIgZGVwZW5kZW5jeSkuXG4gKiBBbGwgdHlwZXMgYXJlIHJldml2ZWQgYXMgcmVhbCBpbnN0YW5jZXMgKERhdGUsIE1hcCwgU2V0LCBVUkwsXG4gKiBVUkxTZWFyY2hQYXJhbXMsIEhlYWRlcnMsIEVycm9yLCBldGMuKS5cbiAqXG4gKiBOT1RFOiB0aGlzIHNldCBtdXN0IG1pcnJvciB0aGUga2V5cyBpbiBgU2VyaWFsaXphYmxlU3BlY2lhbGAgKHNlZVxuICogYEB3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24vdHlwZXNgKS4gQW55IHJlZHVjZXIga2V5IGFkZGVkIG9uIHRoZVxuICogc2VyaWFsaXphdGlvbiBzaWRlIHRoYXQgaXNuJ3QgY292ZXJlZCBoZXJlIHdpbGwgY2F1c2UgYGRldmFsdWUudW5mbGF0dGVuYFxuICogdG8gdGhyb3cgYFVua25vd24gdHlwZSBYYCwgd2hpY2ggYGh5ZHJhdGVSZXNvdXJjZUlPYCBzd2FsbG93cyBhbmRcbiAqIHN1cmZhY2VzIGFzIGEgXCJGYWlsZWQgdG8gbG9hZCByZXNvdXJjZSBkZXRhaWxzXCIgYmFubmVyIGluIHRoZSBvMTF5IFVJLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2ViUmV2aXZlcnMoKTogUmV2aXZlcnMge1xuICBmdW5jdGlvbiByZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZTogc3RyaW5nKTogQXJyYXlCdWZmZXIge1xuICAgIHJldHVybiBiYXNlNjRUb0FycmF5QnVmZmVyKHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLy8gTzExeS1zcGVjaWZpYyByZXZpdmVycyAoc3RyZWFtcywgc3RlcCBmdW5jdGlvbnMg4oaSIGRpc3BsYXkgb2JqZWN0cykuXG4gICAgLy8gU3ByZWFkIEZJUlNUIHNvIHdlYi1zcGVjaWZpYyBvdmVycmlkZXMgYmVsb3cgdGFrZSBwcmVjZWRlbmNlLlxuICAgIC4uLm9ic2VydmFiaWxpdHlSZXZpdmVycyxcblxuICAgIC8vIEJpbmFyeSB0eXBlc1xuICAgIEFycmF5QnVmZmVyOiByZXZpdmVBcnJheUJ1ZmZlcixcbiAgICBCaWdJbnQ6ICh2YWx1ZTogc3RyaW5nKSA9PiBCaWdJbnQodmFsdWUpLFxuICAgIEJpZ0ludDY0QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PlxuICAgICAgbmV3IEJpZ0ludDY0QXJyYXkocmV2aXZlQXJyYXlCdWZmZXIodmFsdWUpKSxcbiAgICBCaWdVaW50NjRBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+XG4gICAgICBuZXcgQmlnVWludDY0QXJyYXkocmV2aXZlQXJyYXlCdWZmZXIodmFsdWUpKSxcbiAgICBEYXRlOiAodmFsdWUpID0+IG5ldyBEYXRlKHZhbHVlKSxcblxuICAgIC8vIEVycm9yIGZhbWlseS4gVGhlIHJlZHVjZXIgc2lkZSAoc2VlXG4gICAgLy8gYHBhY2thZ2VzL2NvcmUvc3JjL3NlcmlhbGl6YXRpb24vcmVkdWNlcnMvY29tbW9uLnRzYCkgZW1pdHMgYSB0YWdnZWRcbiAgICAvLyBlbnRyeSBmb3IgZWFjaCBidWlsdC1pbiBFcnJvciBzdWJjbGFzcyBwbHVzIHRoZSB3b3JrZmxvdy1zcGVjaWZpY1xuICAgIC8vIGBGYXRhbEVycm9yYCAvIGBSZXRyeWFibGVFcnJvcmAgLyBgSG9va0NvbmZsaWN0RXJyb3JgIC9cbiAgICAvLyBgUnVudGltZURlY3J5cHRpb25FcnJvcmAgYW5kIGBBZ2dyZWdhdGVFcnJvcmAuIFdpdGhvdXRcbiAgICAvLyBtYXRjaGluZyByZXZpdmVycyBoZXJlLCBgZGV2YWx1ZS51bmZsYXR0ZW5gIHRocm93cyBcIlVua25vd24gdHlwZSBYXCIsXG4gICAgLy8gd2hpY2ggc3VyZmFjZXMgaW4gdGhlIHdlYiBvMTF5IFVJIGFzIFwiRmFpbGVkIHRvIGxvYWQgcmVzb3VyY2VcbiAgICAvLyBkZXRhaWxzOiBVbmtub3duIHR5cGUgRmF0YWxFcnJvclwiLlxuICAgIEVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG9wdHMgPSAnY2F1c2UnIGluIHZhbHVlID8geyBjYXVzZTogdmFsdWUuY2F1c2UgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UsIG9wdHMpO1xuICAgICAgZXJyb3IubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZXJyb3Iuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIEV2YWxFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdFdmFsRXJyb3InKSxcbiAgICBSYW5nZUVycm9yOiBtYWtlV2ViRXJyb3JTdWJjbGFzc1Jldml2ZXIoJ1JhbmdlRXJyb3InKSxcbiAgICBSZWZlcmVuY2VFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdSZWZlcmVuY2VFcnJvcicpLFxuICAgIFN5bnRheEVycm9yOiBtYWtlV2ViRXJyb3JTdWJjbGFzc1Jldml2ZXIoJ1N5bnRheEVycm9yJyksXG4gICAgVHlwZUVycm9yOiBtYWtlV2ViRXJyb3JTdWJjbGFzc1Jldml2ZXIoJ1R5cGVFcnJvcicpLFxuICAgIFVSSUVycm9yOiBtYWtlV2ViRXJyb3JTdWJjbGFzc1Jldml2ZXIoJ1VSSUVycm9yJyksXG4gICAgQWdncmVnYXRlRXJyb3I6ICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgb3B0cyA9ICdjYXVzZScgaW4gdmFsdWUgPyB7IGNhdXNlOiB2YWx1ZS5jYXVzZSB9IDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgQ3RvciA9IChcbiAgICAgICAgZ2xvYmFsVGhpcyBhcyB7IEFnZ3JlZ2F0ZUVycm9yPzogQWdncmVnYXRlRXJyb3JDb25zdHJ1Y3RvciB9XG4gICAgICApLkFnZ3JlZ2F0ZUVycm9yO1xuICAgICAgY29uc3QgZXJyb3IgPVxuICAgICAgICB0eXBlb2YgQ3RvciA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgID8gbmV3IEN0b3IodmFsdWUuZXJyb3JzLCB2YWx1ZS5tZXNzYWdlLCBvcHRzKVxuICAgICAgICAgIDogT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IodmFsdWUubWVzc2FnZSwgb3B0cyksIHtcbiAgICAgICAgICAgICAgbmFtZTogJ0FnZ3JlZ2F0ZUVycm9yJyxcbiAgICAgICAgICAgICAgZXJyb3JzOiB2YWx1ZS5lcnJvcnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgIGlmICh2YWx1ZS5zdGFjayAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0sXG4gICAgLy8gYEZhdGFsRXJyb3JgIGFuZCBgUmV0cnlhYmxlRXJyb3JgIGFyZSBub3QgYnVpbHQtaW4gYnJvd3NlciBnbG9iYWxzLFxuICAgIC8vIHNvIHdlIGNhbid0IHJlc29sdmUgYSBjb25zdHJ1Y3RvciBmcm9tIGdsb2JhbFRoaXMuIFRoZSB3ZWIgbzExeSBVSVxuICAgIC8vIGRvZXNuJ3QgbmVlZCBgaW5zdGFuY2VvZiBGYXRhbEVycm9yYCB0byBwYXNzIChubyB1c2VyIGNvZGUgcnVuc1xuICAgIC8vIGhlcmUpLiBUaGUgd2ViIG8xMXkgVUkgbmVlZHMgYG5hbWVgLCBgbWVzc2FnZWAsIGBzdGFja2AsIGFuZCBhbnkgZXh0cmFcbiAgICAvLyBlbnVtZXJhYmxlIGZpZWxkcyB0byByZW5kZXIuIENvbnN0cnVjdCBhIHBsYWluIGBFcnJvcmAgd2l0aCBgbmFtZWBcbiAgICAvLyBzZXQ7IE9iamVjdEluc3BlY3RvciByZWFkcyBgY29uc3RydWN0b3IubmFtZWAgZm9yIHRoZSBkaXNwbGF5ZWRcbiAgICAvLyBjbGFzcyBsYWJlbCwgYnV0IHdlIGRvbid0IGhhdmUgdGhlIHJlYWwgY2xhc3MsIHNvIHdlIGVtaXQgYSB0YWdnZWRcbiAgICAvLyBFcnJvciB3aG9zZSBgbmFtZWAgZmllbGQgY2FycmllcyB0aGUgY2xhc3MgaWRlbnRpdHkuIFRoaXMgbWF0Y2hlc1xuICAgIC8vIGhvdyB0aGUgZXhpc3RpbmcgYmFzZSBgRXJyb3JgIHJldml2ZXIgcHJlc2VudHMgdW5rbm93biBzdWJjbGFzc2VzLlxuICAgIEZhdGFsRXJyb3I6ICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgb3B0cyA9ICdjYXVzZScgaW4gdmFsdWUgPyB7IGNhdXNlOiB2YWx1ZS5jYXVzZSB9IDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IodmFsdWUubWVzc2FnZSwgb3B0cyk7XG4gICAgICBlcnJvci5uYW1lID0gJ0ZhdGFsRXJyb3InO1xuICAgICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGVycm9yLnN0YWNrID0gdmFsdWUuc3RhY2s7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSxcbiAgICBIb29rQ29uZmxpY3RFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBvcHRzID0gJ2NhdXNlJyBpbiB2YWx1ZSA/IHsgY2F1c2U6IHZhbHVlLmNhdXNlIH0gOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcih2YWx1ZS5tZXNzYWdlLCBvcHRzKSBhcyBFcnJvciAmIHtcbiAgICAgICAgdG9rZW4/OiBzdHJpbmc7XG4gICAgICAgIGNvbmZsaWN0aW5nUnVuSWQ/OiBzdHJpbmc7XG4gICAgICB9O1xuICAgICAgZXJyb3IubmFtZSA9ICdIb29rQ29uZmxpY3RFcnJvcic7XG4gICAgICBlcnJvci50b2tlbiA9IHZhbHVlLnRva2VuO1xuICAgICAgaWYgKHZhbHVlLmNvbmZsaWN0aW5nUnVuSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlcnJvci5jb25mbGljdGluZ1J1bklkID0gdmFsdWUuY29uZmxpY3RpbmdSdW5JZDtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZS5zdGFjayAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0sXG4gICAgUmV0cnlhYmxlRXJyb3I6ICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgb3B0cyA9ICdjYXVzZScgaW4gdmFsdWUgPyB7IGNhdXNlOiB2YWx1ZS5jYXVzZSB9IDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IodmFsdWUubWVzc2FnZSwgb3B0cykgYXMgRXJyb3IgJiB7XG4gICAgICAgIHJldHJ5QWZ0ZXI/OiBEYXRlO1xuICAgICAgfTtcbiAgICAgIGVycm9yLm5hbWUgPSAnUmV0cnlhYmxlRXJyb3InO1xuICAgICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGVycm9yLnN0YWNrID0gdmFsdWUuc3RhY2s7XG4gICAgICAvLyBgcmV0cnlBZnRlcmAgaXMgc2VyaWFsaXplZCBhcyBhbiBlcG9jaCBtcyBudW1iZXIgKHNlZSB0aGUgcnVudGltZVxuICAgICAgLy8gUmV0cnlhYmxlRXJyb3IgcmVkdWNlciBmb3IgdGhlIHJhdGlvbmFsZSBhcm91bmQgcmVhbG0tc2FmZXR5KS5cbiAgICAgIC8vIFJlaHlkcmF0ZSBhcyBhIERhdGUgc28gbzExeSBjb25zdW1lcnMgY2FuIHJlbmRlciBpdCBkaXJlY3RseS5cbiAgICAgIC8vIEd1YXJkIGFnYWluc3QgcGF5bG9hZHMgZnJvbSBvbGRlciBydW50aW1lIHZlcnNpb25zIHRoYXQgcHJlZGF0ZVxuICAgICAgLy8gdGhlIGZpZWxkOiB3aXRob3V0IHRoaXMgY2hlY2ssIGBuZXcgRGF0ZSh1bmRlZmluZWQpYCB3b3VsZFxuICAgICAgLy8gcHJvZHVjZSBhbiBJbnZhbGlkIERhdGUgcmF0aGVyIHRoYW4gb21pdHRpbmcgdGhlIHByb3BlcnR5LlxuICAgICAgaWYgKHZhbHVlLnJldHJ5QWZ0ZXIgIT0gbnVsbCkge1xuICAgICAgICBlcnJvci5yZXRyeUFmdGVyID0gbmV3IERhdGUodmFsdWUucmV0cnlBZnRlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSxcbiAgICBSdW50aW1lRGVjcnlwdGlvbkVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG9wdHMgPSAnY2F1c2UnIGluIHZhbHVlID8geyBjYXVzZTogdmFsdWUuY2F1c2UgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UsIG9wdHMpIGFzIEVycm9yICYge1xuICAgICAgICBjb250ZXh0PzogdW5rbm93bjtcbiAgICAgIH07XG4gICAgICBlcnJvci5uYW1lID0gJ1J1bnRpbWVEZWNyeXB0aW9uRXJyb3InO1xuICAgICAgaWYgKHZhbHVlLmNvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlcnJvci5jb250ZXh0ID0gdmFsdWUuY29udGV4dDtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZS5zdGFjayAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0sXG4gICAgU3RyZWFtRXJyb3I6ICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgb3B0cyA9ICdjYXVzZScgaW4gdmFsdWUgPyB7IGNhdXNlOiB2YWx1ZS5jYXVzZSB9IDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IodmFsdWUubWVzc2FnZSwgb3B0cykgYXMgRXJyb3IgJiB7XG4gICAgICAgIHN0YXR1cz86IG51bWJlcjtcbiAgICAgICAgdXJsPzogc3RyaW5nO1xuICAgICAgfTtcbiAgICAgIGVycm9yLm5hbWUgPSAnU3RyZWFtRXJyb3InO1xuICAgICAgaWYgKHZhbHVlLnN0YXR1cyAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGF0dXMgPSB2YWx1ZS5zdGF0dXM7XG4gICAgICBpZiAodmFsdWUudXJsICE9PSB1bmRlZmluZWQpIGVycm9yLnVybCA9IHZhbHVlLnVybDtcbiAgICAgIGlmICh2YWx1ZS5zdGFjayAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0sXG4gICAgRE9NRXhjZXB0aW9uOiAodmFsdWUpID0+IHtcbiAgICAgIC8vIE1vZGVybiBicm93c2VycyBhbmQgTm9kZSAxOCsgZXhwb3NlIGBET01FeGNlcHRpb25gIG9uIGdsb2JhbFRoaXMuXG4gICAgICAvLyBgQWJvcnRDb250cm9sbGVyLmFib3J0KClgIHdpdGggbm8gYXJndW1lbnQgc3ludGhlc2l6ZXMgb25lIGFzIHRoZVxuICAgICAgLy8gc2lnbmFsJ3MgcmVhc29uLCBzbyB0aGlzIGlzIGEgY29tbW9uIHBheWxvYWQgZm9yIGFueSBhYm9ydGVkIHN0ZXAuXG4gICAgICBjb25zdCBHID0gZ2xvYmFsVGhpcyBhcyB7IERPTUV4Y2VwdGlvbj86IHR5cGVvZiBET01FeGNlcHRpb24gfTtcbiAgICAgIGlmICh0eXBlb2YgRy5ET01FeGNlcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgZSA9IG5ldyBHLkRPTUV4Y2VwdGlvbih2YWx1ZS5tZXNzYWdlLCB2YWx1ZS5uYW1lKTtcbiAgICAgICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGUuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgICAgaWYgKCdjYXVzZScgaW4gdmFsdWUpIChlIGFzIHsgY2F1c2U/OiB1bmtub3duIH0pLmNhdXNlID0gdmFsdWUuY2F1c2U7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfVxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IodmFsdWUubWVzc2FnZSk7XG4gICAgICBlcnJvci5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgIGlmICh2YWx1ZS5zdGFjayAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgICAgaWYgKCdjYXVzZScgaW4gdmFsdWUpIHtcbiAgICAgICAgKGVycm9yIGFzIEVycm9yICYgeyBjYXVzZT86IHVua25vd24gfSkuY2F1c2UgPSB2YWx1ZS5jYXVzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIEZsb2F0MzJBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+IG5ldyBGbG9hdDMyQXJyYXkocmV2aXZlQXJyYXlCdWZmZXIodmFsdWUpKSxcbiAgICBGbG9hdDY0QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PiBuZXcgRmxvYXQ2NEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgSW50OEFycmF5OiAodmFsdWU6IHN0cmluZykgPT4gbmV3IEludDhBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSkpLFxuICAgIEludDE2QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PiBuZXcgSW50MTZBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSkpLFxuICAgIEludDMyQXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PiBuZXcgSW50MzJBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSkpLFxuICAgIE1hcDogKHZhbHVlKSA9PiBuZXcgTWFwKHZhbHVlKSxcbiAgICBSZWdFeHA6ICh2YWx1ZSkgPT4gbmV3IFJlZ0V4cCh2YWx1ZS5zb3VyY2UsIHZhbHVlLmZsYWdzKSxcbiAgICBTZXQ6ICh2YWx1ZSkgPT4gbmV3IFNldCh2YWx1ZSksXG4gICAgVWludDhBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+IG5ldyBVaW50OEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgVWludDhDbGFtcGVkQXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PlxuICAgICAgbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgVWludDE2QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PiBuZXcgVWludDE2QXJyYXkocmV2aXZlQXJyYXlCdWZmZXIodmFsdWUpKSxcbiAgICBVaW50MzJBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+IG5ldyBVaW50MzJBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSkpLFxuXG4gICAgSGVhZGVyczogKHZhbHVlKSA9PiBuZXcgSGVhZGVycyh2YWx1ZSksXG4gICAgUmVxdWVzdDogKHZhbHVlKSA9PiB7XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L3VzZUFycm93RnVuY3Rpb246IGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGVcbiAgICAgIGNvbnN0IGN0b3IgPSB7IFJlcXVlc3Q6IGZ1bmN0aW9uICgpIHt9IH0uUmVxdWVzdCE7XG4gICAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKGN0b3IucHJvdG90eXBlKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqLCB7XG4gICAgICAgIG1ldGhvZDogdmFsdWUubWV0aG9kLFxuICAgICAgICB1cmw6IHZhbHVlLnVybCxcbiAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnModmFsdWUuaGVhZGVycyksXG4gICAgICAgIGJvZHk6IHZhbHVlLmJvZHksXG4gICAgICAgIGR1cGxleDogdmFsdWUuZHVwbGV4LFxuICAgICAgICAuLi4odmFsdWUucmVzcG9uc2VXcml0YWJsZVxuICAgICAgICAgID8geyByZXNwb25zZVdyaXRhYmxlOiB2YWx1ZS5yZXNwb25zZVdyaXRhYmxlIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIFJlc3BvbnNlOiAodmFsdWUpID0+IHtcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvdXNlQXJyb3dGdW5jdGlvbjogYXJyb3cgZnVuY3Rpb25zIGhhdmUgbm8gLnByb3RvdHlwZVxuICAgICAgY29uc3QgY3RvciA9IHsgUmVzcG9uc2U6IGZ1bmN0aW9uICgpIHt9IH0uUmVzcG9uc2UhO1xuICAgICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShjdG9yLnByb3RvdHlwZSk7XG4gICAgICBPYmplY3QuYXNzaWduKG9iaiwge1xuICAgICAgICBzdGF0dXM6IHZhbHVlLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogdmFsdWUuc3RhdHVzVGV4dCxcbiAgICAgICAgdXJsOiB2YWx1ZS51cmwsXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHZhbHVlLmhlYWRlcnMpLFxuICAgICAgICBib2R5OiB2YWx1ZS5ib2R5LFxuICAgICAgICByZWRpcmVjdGVkOiB2YWx1ZS5yZWRpcmVjdGVkLFxuICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAgVVJMOiAodmFsdWUpID0+IG5ldyBVUkwodmFsdWUpLFxuICAgIFVSTFNlYXJjaFBhcmFtczogKHZhbHVlKSA9PiBuZXcgVVJMU2VhcmNoUGFyYW1zKHZhbHVlID09PSAnLicgPyAnJyA6IHZhbHVlKSxcblxuICAgIC8vIFdlYi1zcGVjaWZpYyBvdmVycmlkZXMgZm9yIGNsYXNzIGluc3RhbmNlcy5cbiAgICAvLyBDcmVhdGUgb2JqZWN0cyB3aXRoIGEgZHluYW1pY2FsbHktbmFtZWQgY29uc3RydWN0b3Igc28gdGhhdFxuICAgIC8vIHRoZSBkYXRhIGluc3BlY3RvciBzaG93cyB0aGUgY2xhc3MgbmFtZSAoaXQgcmVhZHMgY29uc3RydWN0b3IubmFtZSkuXG4gICAgQ2xhc3M6ICh2YWx1ZSkgPT4gYDxjbGFzczoke2V4dHJhY3RDbGFzc05hbWUodmFsdWUuY2xhc3NJZCl9PmAsXG4gICAgSW5zdGFuY2U6ICh2YWx1ZSkgPT4ge1xuICAgICAgLy8gUnVuIGluc3RhbmNlcyBhcmUgcmVuZGVyZWQgYXMgY2xpY2thYmxlIFJ1blJlZiBiYWRnZXNcbiAgICAgIGNvbnN0IHJ1blJlZiA9IHNlcmlhbGl6ZWRJbnN0YW5jZVRvUmVmKHZhbHVlKTtcbiAgICAgIGlmIChpc1J1blJlZihydW5SZWYpKSB7XG4gICAgICAgIHJldHVybiBydW5SZWY7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSBleHRyYWN0Q2xhc3NOYW1lKHZhbHVlLmNsYXNzSWQpO1xuICAgICAgY29uc3QgZGF0YSA9IHZhbHVlLmRhdGE7XG4gICAgICBjb25zdCBwcm9wcyA9XG4gICAgICAgIGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8geyAuLi5kYXRhIH0gOiB7IHZhbHVlOiBkYXRhIH07XG4gICAgICAvLyBDcmVhdGUgYSBjb25zdHJ1Y3RvciB3aXRoIHRoZSByaWdodCBuYW1lIHVzaW5nIGNvbXB1dGVkIHByb3BlcnR5XG4gICAgICAvLyBzbyB0aGUgZGF0YSBpbnNwZWN0b3IncyBgb2JqZWN0LmNvbnN0cnVjdG9yLm5hbWVgIHNob3dzIHRoZSBjbGFzcyBuYW1lLlxuICAgICAgLy8gTXVzdCB1c2UgYGZ1bmN0aW9uYCAobm90IGFycm93KSBiZWNhdXNlIGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGUuXG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L3VzZUFycm93RnVuY3Rpb246IGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGVcbiAgICAgIGNvbnN0IGN0b3IgPSB7IFtjbGFzc05hbWVdOiBmdW5jdGlvbiAoKSB7fSB9W2NsYXNzTmFtZV0hO1xuICAgICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShjdG9yLnByb3RvdHlwZSk7XG4gICAgICBPYmplY3QuYXNzaWduKG9iaiwgcHJvcHMpO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFByZS1idWlsdCB3ZWIgcmV2aXZlcnMgKGNhY2hlZCBmb3IgcGVyZm9ybWFuY2UpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubGV0IGNhY2hlZFJldml2ZXJzOiBSZXZpdmVycyB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBnZXRSZXZpdmVycygpOiBSZXZpdmVycyB7XG4gIGlmICghY2FjaGVkUmV2aXZlcnMpIHtcbiAgICBjYWNoZWRSZXZpdmVycyA9IGdldFdlYlJldml2ZXJzKCk7XG4gIH1cbiAgcmV0dXJuIGNhY2hlZFJldml2ZXJzO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpYyBBUElcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEh5ZHJhdGUgdGhlIHNlcmlhbGl6ZWQgZGF0YSBmaWVsZHMgb2YgYSByZXNvdXJjZSBmb3Igd2ViIGRpc3BsYXkuXG4gKlxuICogVXNlcyBicm93c2VyLXNhZmUgcmV2aXZlcnMgKGF0b2IgZm9yIGJhc2U2NCwgQ2xhc3NJbnN0YW5jZVJlZiBmb3JcbiAqIGN1c3RvbSBjbGFzc2VzLCBTdHJlYW1SZWYgZm9yIHN0cmVhbXMpLiBDYWxsIHRoaXMgb24gZGF0YSByZWNlaXZlZFxuICogZnJvbSB0aGUgc2VydmVyIGJlZm9yZSBwYXNzaW5nIGl0IHRvIFVJIGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoeWRyYXRlUmVzb3VyY2VJTzxUPihyZXNvdXJjZTogVCk6IFQge1xuICBjb25zdCBoeWRyYXRlZCA9IGh5ZHJhdGVSZXNvdXJjZUlPR2VuZXJpYyhcbiAgICByZXNvdXJjZSBhcyBhbnksXG4gICAgZ2V0UmV2aXZlcnMoKVxuICApIGFzIFQ7XG4gIHJldHVybiByZXBsYWNlRW5jcnlwdGVkQW5kRXhwaXJlZFdpdGhNYXJrZXJzKGh5ZHJhdGVkKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFbmNyeXB0ZWQgZGF0YSBkaXNwbGF5IG1hcmtlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgRU5DUllQVEVEX0RJU1BMQVlfTkFNRSA9ICdFbmNyeXB0ZWQnO1xuXG4vKipcbiAqIENyZWF0ZSBhIGRpc3BsYXktZnJpZW5kbHkgb2JqZWN0IGZvciBlbmNyeXB0ZWQgZGF0YS5cbiAqXG4gKiBVc2VzIHRoZSBzYW1lIG5hbWVkLWNvbnN0cnVjdG9yIHRyaWNrIGFzIHRoZSBJbnN0YW5jZSByZXZpdmVyIHNvIHRoYXRcbiAqIE9iamVjdEluc3BlY3RvciByZW5kZXJzIHRoZSBjb25zdHJ1Y3RvciBuYW1lIChcIvCflJIgRW5jcnlwdGVkXCIpIHdpdGggbm9cbiAqIGV4cGFuZGFibGUgY2hpbGRyZW4uIFRoZSBvcmlnaW5hbCBlbmNyeXB0ZWQgYnl0ZXMgYXJlIHN0b3JlZCBpbiBhXG4gKiBub24tZW51bWVyYWJsZSBwcm9wZXJ0eSBmb3IgbGF0ZXIgZGVjcnlwdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRW5jcnlwdGVkTWFya2VyKGRhdGE6IFVpbnQ4QXJyYXkpOiBvYmplY3Qge1xuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L3VzZUFycm93RnVuY3Rpb246IGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGVcbiAgY29uc3QgY3RvciA9IHsgW0VOQ1JZUFRFRF9ESVNQTEFZX05BTUVdOiBmdW5jdGlvbiAoKSB7fSB9W1xuICAgIEVOQ1JZUFRFRF9ESVNQTEFZX05BTUVcbiAgXSE7XG4gIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUoY3Rvci5wcm90b3R5cGUpO1xuICAvLyBTdG9yZSBvcmlnaW5hbCBieXRlcyBmb3IgZGVjcnlwdGlvbiwgYnV0IG5vbi1lbnVtZXJhYmxlIHNvXG4gIC8vIE9iamVjdEluc3BlY3RvciBkb2Vzbid0IHNob3cgdGhlbSBhcyBjaGlsZHJlblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAnX19lbmNyeXB0ZWREYXRhJywge1xuICAgIHZhbHVlOiBkYXRhLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gIH0pO1xuICByZXR1cm4gb2JqO1xufVxuXG4vKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBlbmNyeXB0ZWQgZGlzcGxheSBtYXJrZXIgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgIHZhbHVlLmNvbnN0cnVjdG9yPy5uYW1lID09PSBFTkNSWVBURURfRElTUExBWV9OQU1FXG4gICk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhwaXJlZCBkYXRhIGRpc3BsYXkgbWFya2Vyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBFWFBJUkVEX0RJU1BMQVlfTkFNRSA9ICdFeHBpcmVkIERhdGEnO1xuXG4vKipcbiAqIENyZWF0ZSBhIGRpc3BsYXktZnJpZW5kbHkgb2JqZWN0IGZvciBleHBpcmVkIGRhdGEuXG4gKlxuICogVXNlcyB0aGUgc2FtZSBuYW1lZC1jb25zdHJ1Y3RvciB0cmljayBhcyB0aGUgZW5jcnlwdGVkIG1hcmtlciBzbyB0aGF0XG4gKiBPYmplY3RJbnNwZWN0b3IgcmVuZGVycyB0aGUgY29uc3RydWN0b3IgbmFtZSAoXCJFeHBpcmVkIERhdGFcIikgd2l0aCBub1xuICogZXhwYW5kYWJsZSBjaGlsZHJlbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRXhwaXJlZE1hcmtlcigpOiBvYmplY3Qge1xuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L3VzZUFycm93RnVuY3Rpb246IGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGVcbiAgY29uc3QgY3RvciA9IHsgW0VYUElSRURfRElTUExBWV9OQU1FXTogZnVuY3Rpb24gKCkge30gfVtcbiAgICBFWFBJUkVEX0RJU1BMQVlfTkFNRVxuICBdITtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoY3Rvci5wcm90b3R5cGUpO1xufVxuXG4vKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBleHBpcmVkIGRhdGEgZGlzcGxheSBtYXJrZXIgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0V4cGlyZWRNYXJrZXIodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICB2YWx1ZS5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gRVhQSVJFRF9ESVNQTEFZX05BTUVcbiAgKTtcbn1cblxuLyoqIFJlcGxhY2UgYSBzaW5nbGUgZmllbGQgdmFsdWUgd2l0aCBhIGRpc3BsYXkgbWFya2VyIGlmIGl0J3MgZW5jcnlwdGVkIG9yIGV4cGlyZWQuICovXG5mdW5jdGlvbiB0b0Rpc3BsYXlNYXJrZXIodmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKGlzRW5jcnlwdGVkRGF0YSh2YWx1ZSkpIHJldHVybiBjcmVhdGVFbmNyeXB0ZWRNYXJrZXIodmFsdWUgYXMgVWludDhBcnJheSk7XG4gIGlmIChpc0V4cGlyZWRTdHViKHZhbHVlKSkgcmV0dXJuIGNyZWF0ZUV4cGlyZWRNYXJrZXIoKTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFBvc3QtcHJvY2VzcyBoeWRyYXRlZCByZXNvdXJjZSBkYXRhOiByZXBsYWNlIGVuY3J5cHRlZCBVaW50OEFycmF5IHZhbHVlc1xuICogYW5kIGV4cGlyZWQgc3R1YnMgd2l0aCBkaXNwbGF5LWZyaWVuZGx5IG1hcmtlciBvYmplY3RzIGluIGtub3duIGRhdGEgZmllbGRzLlxuICovXG5mdW5jdGlvbiByZXBsYWNlRW5jcnlwdGVkQW5kRXhwaXJlZFdpdGhNYXJrZXJzPFQ+KHJlc291cmNlOiBUKTogVCB7XG4gIGlmICghcmVzb3VyY2UgfHwgdHlwZW9mIHJlc291cmNlICE9PSAnb2JqZWN0JykgcmV0dXJuIHJlc291cmNlO1xuICBjb25zdCByID0gcmVzb3VyY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uciB9O1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIFsnaW5wdXQnLCAnb3V0cHV0JywgJ21ldGFkYXRhJywgJ2Vycm9yJ10pIHtcbiAgICByZXN1bHRba2V5XSA9IHRvRGlzcGxheU1hcmtlcihyZXN1bHRba2V5XSk7XG4gIH1cblxuICBpZiAocmVzdWx0LmV2ZW50RGF0YSAmJiB0eXBlb2YgcmVzdWx0LmV2ZW50RGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBldmVudFR5cGUgPVxuICAgICAgdHlwZW9mIHJlc3VsdC5ldmVudFR5cGUgPT09ICdzdHJpbmcnID8gcmVzdWx0LmV2ZW50VHlwZSA6ICcnO1xuICAgIGNvbnN0IHJlZktleXMgPSBnZXRFdmVudERhdGFSZWZGaWVsZHMoZXZlbnRUeXBlKTtcbiAgICBjb25zdCBlZCA9IHsgLi4uKHJlc3VsdC5ldmVudERhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIH07XG4gICAgZm9yIChjb25zdCBrZXkgb2YgcmVmS2V5cykge1xuICAgICAgaWYgKGtleSBpbiBlZCkge1xuICAgICAgICBlZFtrZXldID0gdG9EaXNwbGF5TWFya2VyKGVkW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuZXZlbnREYXRhID0gZWQ7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIFQ7XG59XG5cbi8qKlxuICogSHlkcmF0ZSByZXNvdXJjZSBkYXRhIHdpdGggZGVjcnlwdGlvbiBzdXBwb3J0LlxuICpcbiAqIFdoZW4gYSBrZXkgaXMgcHJvdmlkZWQsIGVuY3J5cHRlZCBmaWVsZHMgYXJlIGRlY3J5cHRlZCBiZWZvcmUgaHlkcmF0aW9uLlxuICogVGhpcyBpcyB0aGUgYXN5bmMgdmVyc2lvbiB1c2VkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFwiRGVjcnlwdFwiIGluIHRoZSB3ZWIgVUkuXG4gKlxuICogSGFuZGxlcyBib3RoIHRvcC1sZXZlbCBmaWVsZHMgKGlucHV0LCBvdXRwdXQsIG1ldGFkYXRhKSBhbmQgbmVzdGVkIGV2ZW50RGF0YVxuICogcGF5bG9hZCBmaWVsZHMgZm9yIHRoYXQgZXZlbnQgdHlwZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGVSZXNvdXJjZUlPV2l0aEtleTxUPihcbiAgcmVzb3VyY2U6IFQsXG4gIGtleTogVWludDhBcnJheVxuKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBoeWRyYXRlUmVzb3VyY2VJT0FzeW5jKHJlc291cmNlLCBrZXkpO1xufVxuXG4vKipcbiAqIEFzeW5jIGh5ZHJhdGlvbiBmb3Igd2ViIGRpc3BsYXkuXG4gKlxuICogVGhpcyBmb2xsb3dzIHRoZSBzYW1lIHJlc291cmNlLWZpZWxkIG1hcHBpbmcgYXMge0BsaW5rIGh5ZHJhdGVSZXNvdXJjZUlPfSxcbiAqIGJ1dCBjYW4gYWxzbyBpbmZsYXRlIGNvbXByZXNzZWQgYnJvd3NlciBwYXlsb2FkcyB0aHJvdWdoIHRoZSByZWdpc3RlcmVkXG4gKiB6c3RkIFdBU00gZGVjb2Rlci4gV2hlbiBhIGtleSBpcyBwcm92aWRlZCwgZW5jcnlwdGVkIGZpZWxkcyBhcmUgZGVjcnlwdGVkXG4gKiBmaXJzdCBhbmQgdGhlbiBpbmZsYXRlZC9oeWRyYXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGVSZXNvdXJjZUlPQXN5bmM8VD4oXG4gIHJlc291cmNlOiBULFxuICBrZXk/OiBVaW50OEFycmF5XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgeyBoeWRyYXRlRGF0YVdpdGhLZXksIGRlcml2ZVJ1blBheWxvYWRLZXlzIH0gPSBhd2FpdCBpbXBvcnQoXG4gICAgJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24tZm9ybWF0J1xuICApO1xuICAvLyBQYXlsb2FkcyBtYXkgYmUgenN0ZC1jb21wcmVzc2VkICh0aGUgV2ViIERlY29tcHJlc3Npb25TdHJlYW0gaGFzIG5vIHpzdGQpO1xuICAvLyByZWdpc3RlciB0aGUgV0FTTS1iYWNrZWQgYnJvd3NlciBkZWNvZGVyIGJlZm9yZSBoeWRyYXRpbmcuIElkZW1wb3RlbnQgYW5kXG4gIC8vIGxhenk6IHRoZSBXQVNNIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBhIHpzdGQgcGF5bG9hZCBpcyBhY3R1YWxseSBkZWNvZGVkLlxuICBjb25zdCB7IGVuc3VyZVpzdGREZWNvZGVyUmVnaXN0ZXJlZCB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICcuL3pzdGQtYnJvd3Nlci1kZWNvZGVyLmpzJ1xuICApO1xuICBlbnN1cmVac3RkRGVjb2RlclJlZ2lzdGVyZWQoKTtcbiAgLy8gUmVzb2x2ZSB0aGUgKmZ1bGwqIGtleSBjYXBhYmlsaXR5OiBhIHJ1bidzXG4gIC8vIGV2ZW50IGxvZyBjYW4gY29udGFpbiBzZWFsZWQgKCdlbmNwJykgcGF5bG9hZHMgdGhhdCBhbm90aGVyIHJ1biB3cm90ZSB0b1xuICAvLyBpdCAoYSBjcm9zcy1kZXBsb3ltZW50IGhvb2sgcmVzdW1wdGlvbiwgc2F5KSwgYW5kIG9wZW5pbmcgdGhvc2UgbmVlZHMgdGhlXG4gIC8vIHJ1bidzIFgyNTUxOSBzY2FsYXIgaW4gYWRkaXRpb24gdG8gaXRzIEFFUyBrZXkuIEJvdGggZGVyaXZlIGZyb20gdGhlIHNhbWVcbiAgLy8gMzIgYnl0ZXMgdGhlIGtleS1yZXRyaWV2YWwgZW5kcG9pbnQgcmV0dXJucy5cbiAgY29uc3QgY3J5cHRvS2V5ID0ga2V5ID8gYXdhaXQgZGVyaXZlUnVuUGF5bG9hZEtleXMoa2V5KSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgcmV2aXZlcnMgPSBnZXRSZXZpdmVycygpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGVGaWVsZCh2YWx1ZTogdW5rbm93bik6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIC8vIEFscmVhZHktaHlkcmF0ZWQ6IGVuY3J5cHRlZCBtYXJrZXIgd2l0aCBzdG9yZWQgYnl0ZXNcbiAgICBpZiAoaXNFbmNyeXB0ZWRNYXJrZXIodmFsdWUpKSB7XG4gICAgICBjb25zdCByYXcgPSAodmFsdWUgYXMgYW55KS5fX2VuY3J5cHRlZERhdGEgYXMgVWludDhBcnJheTtcbiAgICAgIHJldHVybiBjcnlwdG9LZXkgPyBoeWRyYXRlRGF0YVdpdGhLZXkocmF3LCByZXZpdmVycywgY3J5cHRvS2V5KSA6IHZhbHVlO1xuICAgIH1cbiAgICAvLyBSYXcgVWludDhBcnJheTogbWF5IGJlIGVuY3J5cHRlZCwgY29tcHJlc3NlZCwgb3IgcGxhaW4gZGV2YWx1ZS5cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICByZXR1cm4gaHlkcmF0ZURhdGFXaXRoS2V5KHZhbHVlLCByZXZpdmVycywgY3J5cHRvS2V5KTtcbiAgICB9XG4gICAgLy8gTm90IHNlcmlhbGl6ZWQsIHNvIHJldHVybiBhcy1pcy5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBjb25zdCByID0gcmVzb3VyY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uciB9O1xuXG4gIC8vIERlY3J5cHQgKyBoeWRyYXRlIHRvcC1sZXZlbCBzZXJpYWxpemVkIGZpZWxkcyAocnVucywgc3RlcHMsIGhvb2tzKVxuICBmb3IgKGNvbnN0IGZpZWxkIG9mIFsnaW5wdXQnLCAnb3V0cHV0JywgJ21ldGFkYXRhJywgJ2Vycm9yJ10pIHtcbiAgICBpZiAoZmllbGQgaW4gcmVzdWx0KSB7XG4gICAgICByZXN1bHRbZmllbGRdID0gYXdhaXQgaHlkcmF0ZUZpZWxkKHJlc3VsdFtmaWVsZF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEh5ZHJhdGUgZXZlbnREYXRhIHN1YmZpZWxkcyAoZXZlbnRzKVxuICBpZiAocmVzdWx0LmV2ZW50RGF0YSAmJiB0eXBlb2YgcmVzdWx0LmV2ZW50RGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBldmVudFR5cGUgPVxuICAgICAgdHlwZW9mIHJlc3VsdC5ldmVudFR5cGUgPT09ICdzdHJpbmcnID8gcmVzdWx0LmV2ZW50VHlwZSA6ICcnO1xuICAgIGNvbnN0IHJlZktleXMgPSBnZXRFdmVudERhdGFSZWZGaWVsZHMoZXZlbnRUeXBlKTtcbiAgICBjb25zdCBldmVudERhdGEgPSB7IC4uLihyZXN1bHQuZXZlbnREYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB9O1xuICAgIGZvciAoY29uc3QgZmllbGQgb2YgcmVmS2V5cykge1xuICAgICAgaWYgKGZpZWxkIGluIGV2ZW50RGF0YSkge1xuICAgICAgICBldmVudERhdGFbZmllbGRdID0gYXdhaXQgaHlkcmF0ZUZpZWxkKGV2ZW50RGF0YVtmaWVsZF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuZXZlbnREYXRhID0gZXZlbnREYXRhO1xuICB9XG5cbiAgcmV0dXJuIHJlcGxhY2VFbmNyeXB0ZWRBbmRFeHBpcmVkV2l0aE1hcmtlcnMocmVzdWx0IGFzIFQpO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBoeWRyYXRlZCByZXNvdXJjZSAoZXZlbnQsIHN0ZXAsIHJ1biwgZXRjLikgY29udGFpbnMgYW55XG4gKiBlbmNyeXB0ZWQgZGlzcGxheSBtYXJrZXJzLiBJbnNwZWN0cyB0aGUgc3RhbmRhcmQgdG9wLWxldmVsIGZpZWxkc1xuICogKGBpbnB1dGAsIGBvdXRwdXRgLCBgZXJyb3JgLCBgbWV0YWRhdGFgKSBhcyB3ZWxsIGFzIHRoZSBldmVudC10eXBlLXNwZWNpZmljXG4gKiBgZXZlbnREYXRhYCByZWYgZmllbGRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzRW5jcnlwdGVkRmllbGRzKHJlc291cmNlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICghcmVzb3VyY2UgfHwgdHlwZW9mIHJlc291cmNlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCByID0gcmVzb3VyY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgWydpbnB1dCcsICdvdXRwdXQnLCAnbWV0YWRhdGEnLCAnZXJyb3InXSkge1xuICAgIGlmIChpc0VuY3J5cHRlZE1hcmtlcihyW2tleV0pKSByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChyLmV2ZW50RGF0YSAmJiB0eXBlb2Ygci5ldmVudERhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgZXZlbnRUeXBlID0gdHlwZW9mIHIuZXZlbnRUeXBlID09PSAnc3RyaW5nJyA/IHIuZXZlbnRUeXBlIDogJyc7XG4gICAgY29uc3QgcmVmS2V5cyA9IGdldEV2ZW50RGF0YVJlZkZpZWxkcyhldmVudFR5cGUpO1xuICAgIGNvbnN0IGVkID0gci5ldmVudERhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZm9yIChjb25zdCBrZXkgb2YgcmVmS2V5cykge1xuICAgICAgaWYgKGtleSBpbiBlZCAmJiBpc0VuY3J5cHRlZE1hcmtlcihlZFtrZXldKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl19
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* a fully-formed Trace ready for the trace viewer.
|
|
7
7
|
*/
|
|
8
8
|
import { type Event, type WorkflowRun } from '@workflow/world';
|
|
9
|
+
import { type GetStepAttributes } from '../components/workflow-traces/trace-span-construction';
|
|
9
10
|
import type { Span } from './trace-types';
|
|
10
11
|
/**
|
|
11
12
|
* Events that belong to the run root span rather than a child entity span.
|
|
@@ -53,7 +54,8 @@ export declare function buildTrace(run: WorkflowRun, events: Event[], now: Date,
|
|
|
53
54
|
* from the only copy the caller was given, and dropping the wrong one moves
|
|
54
55
|
* a span. See {@link findDuplicateEventIds}.
|
|
55
56
|
*/
|
|
56
|
-
{ isCompleteHistory }?: {
|
|
57
|
+
{ isCompleteHistory, getStepAttributes, }?: {
|
|
57
58
|
isCompleteHistory?: boolean;
|
|
59
|
+
getStepAttributes?: GetStepAttributes;
|
|
58
60
|
}): TraceWithMeta;
|
|
59
61
|
//# sourceMappingURL=trace-builder.d.ts.map
|