footprintjs 10.1.0 → 10.2.0
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/CLAUDE.md +18 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/attempt/category.d.ts +6 -0
- package/dist/esm/lib/attempt/category.js +26 -2
- package/dist/esm/lib/attempt/runner.d.ts +3 -1
- package/dist/esm/lib/attempt/runner.js +26 -6
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +36 -6
- package/dist/esm/lib/engine/handlers/DeciderHandler.js +9 -5
- package/dist/esm/lib/engine/handlers/SelectorHandler.js +6 -5
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +5 -2
- package/dist/esm/lib/engine/handlers/commitStage.d.ts +7 -0
- package/dist/esm/lib/engine/handlers/commitStage.js +22 -4
- package/dist/esm/lib/engine/handlers/stageError.d.ts +2 -0
- package/dist/esm/lib/engine/handlers/stageError.js +13 -1
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.d.ts +2 -1
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +6 -2
- package/dist/esm/lib/engine/narrative/types.d.ts +4 -1
- package/dist/esm/lib/engine/narrative/types.js +1 -1
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +14 -6
- package/dist/esm/lib/errors/terminalFailure.d.ts +29 -0
- package/dist/esm/lib/errors/terminalFailure.js +60 -0
- package/dist/esm/lib/memory/StageContext.d.ts +14 -0
- package/dist/esm/lib/memory/StageContext.js +32 -1
- package/dist/esm/lib/memory/attention.d.ts +26 -0
- package/dist/esm/lib/memory/attention.js +171 -0
- package/dist/esm/lib/memory/frameTypes.d.ts +8 -0
- package/dist/esm/lib/memory/frameTypes.js +1 -1
- package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +14 -0
- package/dist/esm/lib/recorder/ControlDepRecorder.js +18 -1
- package/dist/esm/lib/runner/FlowChartExecutor.d.ts +4 -0
- package/dist/esm/lib/runner/FlowChartExecutor.js +163 -127
- package/dist/index.js +1 -1
- package/dist/lib/attempt/category.js +27 -2
- package/dist/lib/attempt/runner.js +25 -5
- package/dist/lib/engine/handlers/ChildrenExecutor.js +36 -6
- package/dist/lib/engine/handlers/DeciderHandler.js +7 -3
- package/dist/lib/engine/handlers/SelectorHandler.js +4 -3
- package/dist/lib/engine/handlers/SubflowExecutor.js +5 -2
- package/dist/lib/engine/handlers/commitStage.js +24 -5
- package/dist/lib/engine/handlers/stageError.js +15 -2
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +6 -2
- package/dist/lib/engine/narrative/types.js +1 -1
- package/dist/lib/engine/traversal/FlowchartTraverser.js +12 -4
- package/dist/lib/errors/terminalFailure.js +64 -0
- package/dist/lib/memory/StageContext.js +32 -1
- package/dist/lib/memory/attention.js +175 -0
- package/dist/lib/memory/frameTypes.js +1 -1
- package/dist/lib/recorder/ControlDepRecorder.js +18 -1
- package/dist/lib/runner/FlowChartExecutor.js +163 -127
- package/dist/types/index.d.ts +2 -0
- package/dist/types/lib/attempt/category.d.ts +6 -0
- package/dist/types/lib/attempt/runner.d.ts +3 -1
- package/dist/types/lib/engine/handlers/commitStage.d.ts +7 -0
- package/dist/types/lib/engine/handlers/stageError.d.ts +2 -0
- package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +2 -1
- package/dist/types/lib/engine/narrative/types.d.ts +4 -1
- package/dist/types/lib/errors/terminalFailure.d.ts +29 -0
- package/dist/types/lib/memory/StageContext.d.ts +14 -0
- package/dist/types/lib/memory/attention.d.ts +26 -0
- package/dist/types/lib/memory/frameTypes.d.ts +8 -0
- package/dist/types/lib/recorder/ControlDepRecorder.d.ts +14 -0
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +4 -0
- package/package.json +6 -6
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** Engine-owned attention is collected with retained facts; snapshots only copy this bounded projection. */
|
|
2
|
+
import type { Attention } from 'foottrace';
|
|
3
|
+
import type { AttemptRecord, AttemptSummary } from '../attempt/types.js';
|
|
4
|
+
/** One execution's ownership, pending summary, marks and omission accounting stay in this helper. */
|
|
5
|
+
export declare class StageAttention {
|
|
6
|
+
private marks?;
|
|
7
|
+
private omitted;
|
|
8
|
+
private retryPossible;
|
|
9
|
+
private summary?;
|
|
10
|
+
private terminal?;
|
|
11
|
+
/** A new execution starts fresh; an attempt discard never calls this. No collection is reconstructed. */
|
|
12
|
+
begin(): void;
|
|
13
|
+
/** Called only after the frame retained this attempt. Raw error, target and decision payloads are never read. */
|
|
14
|
+
recordAttempt(record: AttemptRecord, owner: string): void;
|
|
15
|
+
recordSummary(summary: AttemptSummary): void;
|
|
16
|
+
/** A summary-only cut wait has no phantom final attempt; use its actual retained summary. */
|
|
17
|
+
private projectSummary;
|
|
18
|
+
/** Only the explicit retained stage-error path calls this; a diagnostic value never classifies itself. */
|
|
19
|
+
stageFailed(errors: unknown): void;
|
|
20
|
+
attemptDropped(): void;
|
|
21
|
+
/** Keep only bounded exact references; one slot is reserved to disclose omissions. */
|
|
22
|
+
append(attention: Attention): void;
|
|
23
|
+
missing(): void;
|
|
24
|
+
/** Copy already collected bounded marks, never an attempt array, diagnostic bag or execution tree. */
|
|
25
|
+
snapshot(): readonly Attention[];
|
|
26
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { buildAttemptId, parseAttemptId } from 'foottrace';
|
|
2
|
+
const MAX_MARKS = 32;
|
|
3
|
+
const MAX_REFERENCES = 16;
|
|
4
|
+
const MAX_REFERENCE_LENGTH = 512;
|
|
5
|
+
const STOPPED_REASONS = new Set(['exhausted', 'declined', 'no-time-left']);
|
|
6
|
+
const MISSING_ATTENTION = Object.freeze({
|
|
7
|
+
kind: 'not-collected',
|
|
8
|
+
reason: 'EVIDENCE_NOT_COLLECTED',
|
|
9
|
+
evidence: Object.freeze([]),
|
|
10
|
+
});
|
|
11
|
+
function validReference(reference) {
|
|
12
|
+
return (typeof reference === 'string' &&
|
|
13
|
+
reference.length > 0 &&
|
|
14
|
+
reference.length <= MAX_REFERENCE_LENGTH &&
|
|
15
|
+
// eslint-disable-next-line no-control-regex -- Match the shared Foottrace evidence-reference boundary.
|
|
16
|
+
!/[\u0000-\u001f\u007f-\u009f]/.test(reference));
|
|
17
|
+
}
|
|
18
|
+
/** Reuse the one attempt grammar, including nested call addresses; never shorten an unaddressable proof. */
|
|
19
|
+
function attemptReference(record, owner) {
|
|
20
|
+
if (typeof record.series !== 'string' ||
|
|
21
|
+
!Number.isSafeInteger(record.attempt) ||
|
|
22
|
+
record.attempt < 1 ||
|
|
23
|
+
record.series.length + String(record.attempt).length + 1 > MAX_REFERENCE_LENGTH)
|
|
24
|
+
return undefined;
|
|
25
|
+
try {
|
|
26
|
+
const candidate = record.series + '@' + record.attempt;
|
|
27
|
+
const parts = parseAttemptId(candidate);
|
|
28
|
+
if (!parts ||
|
|
29
|
+
parts.runtimeStageId !== owner ||
|
|
30
|
+
(record.kind === 'stage' ? parts.call !== undefined : parts.call === undefined))
|
|
31
|
+
return undefined;
|
|
32
|
+
const canonical = buildAttemptId(parts.runtimeStageId, parts.attempt, parts.call);
|
|
33
|
+
return canonical === candidate && validReference(canonical) ? canonical : undefined;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** One execution's ownership, pending summary, marks and omission accounting stay in this helper. */
|
|
40
|
+
export class StageAttention {
|
|
41
|
+
marks;
|
|
42
|
+
omitted = false;
|
|
43
|
+
retryPossible = false;
|
|
44
|
+
summary;
|
|
45
|
+
terminal;
|
|
46
|
+
/** A new execution starts fresh; an attempt discard never calls this. No collection is reconstructed. */
|
|
47
|
+
begin() {
|
|
48
|
+
this.marks = undefined;
|
|
49
|
+
this.omitted = false;
|
|
50
|
+
this.retryPossible = false;
|
|
51
|
+
this.summary = undefined;
|
|
52
|
+
this.terminal = undefined;
|
|
53
|
+
}
|
|
54
|
+
/** Called only after the frame retained this attempt. Raw error, target and decision payloads are never read. */
|
|
55
|
+
recordAttempt(record, owner) {
|
|
56
|
+
const reference = attemptReference(record, owner);
|
|
57
|
+
if (record.kind === 'stage' && record.series === owner) {
|
|
58
|
+
if (record.retryLoop === undefined && (record.of ?? 1) > 1)
|
|
59
|
+
this.retryPossible = true;
|
|
60
|
+
if (reference && record.next !== 'retry') {
|
|
61
|
+
this.terminal = { next: record.next, reason: record.reason, effect: record.effect, evidence: reference };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// The runner calls recordSummary before its final attempt. Finish that pending projection now too.
|
|
65
|
+
this.projectSummary();
|
|
66
|
+
const add = (kind, reason) => {
|
|
67
|
+
if (reference)
|
|
68
|
+
this.append({ kind, reason, evidence: [reference] });
|
|
69
|
+
else
|
|
70
|
+
this.missing();
|
|
71
|
+
};
|
|
72
|
+
if (record.effect === 'unknown')
|
|
73
|
+
add('unknown-effect', 'UNKNOWN_EFFECT_RECORDED');
|
|
74
|
+
if (record.outcome === 'timeout')
|
|
75
|
+
add('timeout', 'TIMEOUT_RECORDED');
|
|
76
|
+
// An SDK's suggested next/reason is not its actual policy; only a later ordinal proves its retry.
|
|
77
|
+
const observed = record.kind === 'observed';
|
|
78
|
+
if ((!observed && record.next === 'retry') || record.attempt > 1)
|
|
79
|
+
add('retried', 'RETRY_RECORDED');
|
|
80
|
+
if (!observed &&
|
|
81
|
+
record.next === 'stop' &&
|
|
82
|
+
STOPPED_REASONS.has(record.reason) &&
|
|
83
|
+
(record.of ?? 1) > 1 &&
|
|
84
|
+
record.retryLoop === undefined)
|
|
85
|
+
add('gave-up', 'RETRY_STOP_RECORDED');
|
|
86
|
+
}
|
|
87
|
+
recordSummary(summary) {
|
|
88
|
+
this.summary = summary;
|
|
89
|
+
this.projectSummary();
|
|
90
|
+
}
|
|
91
|
+
/** A summary-only cut wait has no phantom final attempt; use its actual retained summary. */
|
|
92
|
+
projectSummary() {
|
|
93
|
+
const last = this.summary?.last;
|
|
94
|
+
if (!last)
|
|
95
|
+
return;
|
|
96
|
+
const terminal = this.terminal;
|
|
97
|
+
const matching = terminal?.next === last.next && terminal.reason === last.reason;
|
|
98
|
+
const add = (kind, reason, proof) => {
|
|
99
|
+
const reference = proof ?? 'attemptSummary';
|
|
100
|
+
const key = kind + ':' + reason;
|
|
101
|
+
const marks = this.marks;
|
|
102
|
+
const previous = marks?.get(key);
|
|
103
|
+
if (proof && marks && previous?.evidence.includes('attemptSummary')) {
|
|
104
|
+
marks.set(key, { ...previous, evidence: previous.evidence.filter((item) => item !== 'attemptSummary') });
|
|
105
|
+
}
|
|
106
|
+
this.append({ kind, reason, evidence: [reference] });
|
|
107
|
+
};
|
|
108
|
+
if (last.effect === 'unknown')
|
|
109
|
+
add('unknown-effect', 'UNKNOWN_EFFECT_RECORDED', matching && terminal.effect === 'unknown' ? terminal.evidence : undefined);
|
|
110
|
+
if (this.retryPossible && last.next === 'stop' && STOPPED_REASONS.has(last.reason))
|
|
111
|
+
add('gave-up', 'RETRY_STOP_RECORDED', matching ? terminal.evidence : undefined);
|
|
112
|
+
}
|
|
113
|
+
/** Only the explicit retained stage-error path calls this; a diagnostic value never classifies itself. */
|
|
114
|
+
stageFailed(errors) {
|
|
115
|
+
try {
|
|
116
|
+
const descriptor = errors && typeof errors === 'object'
|
|
117
|
+
? Object.getOwnPropertyDescriptor(errors, 'stageExecutionError')
|
|
118
|
+
: undefined;
|
|
119
|
+
if (descriptor && Object.hasOwn(descriptor, 'value')) {
|
|
120
|
+
this.append({ kind: 'error', reason: 'ERROR_RECORDED', evidence: ['errors:stageExecutionError'] });
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
/* A malformed evidence bag is unavailable, never another stage failure. */
|
|
126
|
+
}
|
|
127
|
+
this.missing();
|
|
128
|
+
}
|
|
129
|
+
attemptDropped() {
|
|
130
|
+
this.append({ kind: 'not-collected', reason: 'EVIDENCE_NOT_COLLECTED', evidence: ['attemptsDropped'] });
|
|
131
|
+
}
|
|
132
|
+
/** Keep only bounded exact references; one slot is reserved to disclose omissions. */
|
|
133
|
+
append(attention) {
|
|
134
|
+
const key = attention.kind + ':' + attention.reason;
|
|
135
|
+
const previous = this.marks?.get(key);
|
|
136
|
+
const references = [...(previous?.evidence ?? [])];
|
|
137
|
+
for (const reference of attention.evidence) {
|
|
138
|
+
if (!validReference(reference)) {
|
|
139
|
+
this.omitted = true;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
if (references.includes(reference))
|
|
143
|
+
continue;
|
|
144
|
+
if (references.length >= MAX_REFERENCES) {
|
|
145
|
+
this.omitted = true;
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
references.push(reference);
|
|
149
|
+
}
|
|
150
|
+
if (attention.kind !== 'not-collected' && references.length === 0) {
|
|
151
|
+
this.omitted = true;
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
if (!previous && (this.marks?.size ?? 0) >= MAX_MARKS - 1) {
|
|
155
|
+
this.omitted = true;
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
(this.marks ??= new Map()).set(key, { kind: attention.kind, reason: attention.reason, evidence: references });
|
|
159
|
+
}
|
|
160
|
+
missing() {
|
|
161
|
+
this.omitted = true;
|
|
162
|
+
}
|
|
163
|
+
/** Copy already collected bounded marks, never an attempt array, diagnostic bag or execution tree. */
|
|
164
|
+
snapshot() {
|
|
165
|
+
const result = [...(this.marks?.values() ?? [])].map((attention) => Object.freeze({ ...attention, evidence: Object.freeze([...attention.evidence]) }));
|
|
166
|
+
if (this.omitted && !result.some((attention) => attention.kind === 'not-collected'))
|
|
167
|
+
result.push(MISSING_ATTENTION);
|
|
168
|
+
return Object.freeze(result);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZW50aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvYXR0ZW50aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSTNELE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNyQixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDMUIsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDakMsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7QUFDM0UsTUFBTSxpQkFBaUIsR0FBYyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2pELElBQUksRUFBRSxlQUFlO0lBQ3JCLE1BQU0sRUFBRSx3QkFBd0I7SUFDaEMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQzVCLENBQUMsQ0FBQztBQUVILFNBQVMsY0FBYyxDQUFDLFNBQWtCO0lBQ3hDLE9BQU8sQ0FDTCxPQUFPLFNBQVMsS0FBSyxRQUFRO1FBQzdCLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUNwQixTQUFTLENBQUMsTUFBTSxJQUFJLG9CQUFvQjtRQUN4Qyx1R0FBdUc7UUFDdkcsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQ2hELENBQUM7QUFDSixDQUFDO0FBRUQsNEdBQTRHO0FBQzVHLFNBQVMsZ0JBQWdCLENBQUMsTUFBcUIsRUFBRSxLQUFhO0lBQzVELElBQ0UsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFFBQVE7UUFDakMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDckMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDO1FBQ2xCLE1BQU0sQ0FBQyxNQUFN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LFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2hILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVELHNHQUFzRztJQUN0RyxRQUFRO1FBQ04sTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQ2pFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNsRixDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUM7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDcEgsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBFbmdpbmUtb3duZWQgYXR0ZW50aW9uIGlzIGNvbGxlY3RlZCB3aXRoIHJldGFpbmVkIGZhY3RzOyBzbmFwc2hvdHMgb25seSBjb3B5IHRoaXMgYm91bmRlZCBwcm9qZWN0aW9uLiAqL1xuaW1wb3J0IHR5cGUgeyBBdHRlbnRpb24gfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHsgYnVpbGRBdHRlbXB0SWQsIHBhcnNlQXR0ZW1wdElkIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuaW1wb3J0IHR5cGUgeyBBdHRlbXB0UmVjb3JkLCBBdHRlbXB0U3VtbWFyeSB9IGZyb20gJy4uL2F0dGVtcHQvdHlwZXMuanMnO1xuXG5jb25zdCBNQVhfTUFSS1MgPSAzMjtcbmNvbnN0IE1BWF9SRUZFUkVOQ0VTID0gMTY7XG5jb25zdCBNQVhfUkVGRVJFTkNFX0xFTkdUSCA9IDUxMjtcbmNvbnN0IFNUT1BQRURfUkVBU09OUyA9IG5ldyBTZXQoWydleGhhdXN0ZWQnLCAnZGVjbGluZWQnLCAnbm8tdGltZS1sZWZ0J10pO1xuY29uc3QgTUlTU0lOR19BVFRFTlRJT046IEF0dGVudGlvbiA9IE9iamVjdC5mcmVlemUoe1xuICBraW5kOiAnbm90LWNvbGxlY3RlZCcsXG4gIHJlYXNvbjogJ0VWSURFTkNFX05PVF9DT0xMRUNURUQnLFxuICBldmlkZW5jZTogT2JqZWN0LmZyZWV6ZShbXSksXG59KTtcblxuZnVuY3Rpb24gdmFsaWRSZWZlcmVuY2UocmVmZXJlbmNlOiB1bmtub3duKTogcmVmZXJlbmNlIGlzIHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHJlZmVyZW5jZSA9PT0gJ3N0cmluZycgJiZcbiAgICByZWZlcmVuY2UubGVuZ3RoID4gMCAmJlxuICAgIHJlZmVyZW5jZS5sZW5ndGggPD0gTUFYX1JFRkVSRU5DRV9MRU5HVEggJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleCAtLSBNYXRjaCB0aGUgc2hhcmVkIEZvb3R0cmFjZSBldmlkZW5jZS1yZWZlcmVuY2UgYm91bmRhcnkuXG4gICAgIS9bXFx1MDAwMC1cXHUwMDFmXFx1MDA3Zi1cXHUwMDlmXS8udGVzdChyZWZlcmVuY2UpXG4gICk7XG59XG5cbi8qKiBSZXVzZSB0aGUgb25lIGF0dGVtcHQgZ3JhbW1hciwgaW5jbHVkaW5nIG5lc3RlZCBjYWxsIGFkZHJlc3NlczsgbmV2ZXIgc2hvcnRlbiBhbiB1bmFkZHJlc3NhYmxlIHByb29mLiAqL1xuZnVuY3Rpb24gYXR0ZW1wdFJlZmVyZW5jZShyZWNvcmQ6IEF0dGVtcHRSZWNvcmQsIG93bmVyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoXG4gICAgdHlwZW9mIHJlY29yZC5zZXJpZXMgIT09ICdzdHJpbmcnIHx8XG4gICAgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHJlY29yZC5hdHRlbXB0KSB8fFxuICAgIHJlY29yZC5hdHRlbXB0IDwgMSB8fFxuICAgIHJlY29yZC5zZXJpZXMubGVuZ3RoICsgU3RyaW5nKHJlY29yZC5hdHRlbXB0KS5sZW5ndGggKyAxID4gTUFYX1JFRkVSRU5DRV9MRU5HVEhcbiAgKVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gcmVjb3JkLnNlcmllcyArICdAJyArIHJlY29yZC5hdHRlbXB0O1xuICAgIGNvbnN0IHBhcnRzID0gcGFyc2VBdHRlbXB0SWQoY2FuZGlkYXRlKTtcbiAgICBpZiAoXG4gICAgICAhcGFydHMgfHxcbiAgICAgIHBhcnRzLnJ1bnRpbWVTdGFnZUlkICE9PSBvd25lciB8fFxuICAgICAgKHJlY29yZC5raW5kID09PSAnc3RhZ2UnID8gcGFydHMuY2FsbCAhPT0gdW5kZWZpbmVkIDogcGFydHMuY2FsbCA9PT0gdW5kZWZpbmVkKVxuICAgIClcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgY2Fub25pY2FsID0gYnVpbGRBdHRlbXB0SWQocGFydHMucnVudGltZVN0YWdlSWQsIHBhcnRzLmF0dGVtcHQsIHBhcnRzLmNhbGwpO1xuICAgIHJldHVybiBjYW5vbmljYWwgPT09IGNhbmRpZGF0ZSAmJiB2YWxpZFJlZmVyZW5jZShjYW5vbmljYWwpID8gY2Fub25pY2FsIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbnR5cGUgVGVybWluYWxQcm9vZiA9IFBpY2s8QXR0ZW1wdFJlY29yZCwgJ25leHQnIHwgJ3JlYXNvbicgfCAnZWZmZWN0Jz4gJiB7IHJlYWRvbmx5IGV2aWRlbmNlOiBzdHJpbmcgfTtcblxuLyoqIE9uZSBleGVjdXRpb24ncyBvd25lcnNoaXAsIHBlbmRpbmcgc3VtbWFyeSwgbWFya3MgYW5kIG9taXNzaW9uIGFjY291bnRpbmcgc3RheSBpbiB0aGlzIGhlbHBlci4gKi9cbmV4cG9ydCBjbGFzcyBTdGFnZUF0dGVudGlvbiB7XG4gIHByaXZhdGUgbWFya3M/OiBNYXA8c3RyaW5nLCBBdHRlbnRpb24+O1xuICBwcml2YXRlIG9taXR0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZXRyeVBvc3NpYmxlID0gZmFsc2U7XG4gIHByaXZhdGUgc3VtbWFyeT86IEF0dGVtcHRTdW1tYXJ5O1xuICBwcml2YXRlIHRlcm1pbmFsPzogVGVybWluYWxQcm9vZjtcblxuICAvKiogQSBuZXcgZXhlY3V0aW9uIHN0YXJ0cyBmcmVzaDsgYW4gYXR0ZW1wdCBkaXNjYXJkIG5ldmVyIGNhbGxzIHRoaXMuIE5vIGNvbGxlY3Rpb24gaXMgcmVjb25zdHJ1Y3RlZC4gKi9cbiAgYmVnaW4oKTogdm9pZCB7XG4gICAgdGhpcy5tYXJrcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9taXR0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJldHJ5UG9zc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLnN1bW1hcnkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50ZXJtaW5hbCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBDYWxsZWQgb25seSBhZnRlciB0aGUgZnJhbWUgcmV0YWluZWQgdGhpcyBhdHRlbXB0LiBSYXcgZXJyb3IsIHRhcmdldCBhbmQgZGVjaXNpb24gcGF5bG9hZHMgYXJlIG5ldmVyIHJlYWQuICovXG4gIHJlY29yZEF0dGVtcHQocmVjb3JkOiBBdHRlbXB0UmVjb3JkLCBvd25lcjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gYXR0ZW1wdFJlZmVyZW5jZShyZWNvcmQsIG93bmVyKTtcbiAgICBpZiAocmVjb3JkLmtpbmQgPT09ICdzdGFnZScgJiYgcmVjb3JkLnNlcmllcyA9PT0gb3duZXIpIHtcbiAgICAgIGlmIChyZWNvcmQucmV0cnlMb29wID09PSB1bmRlZmluZWQgJiYgKHJlY29yZC5vZiA/PyAxKSA+IDEpIHRoaXMucmV0cnlQb3NzaWJsZSA9IHRydWU7XG4gICAgICBpZiAocmVmZXJlbmNlICYmIHJlY29yZC5uZXh0ICE9PSAncmV0cnknKSB7XG4gICAgICAgIHRoaXMudGVybWluYWwgPSB7IG5leHQ6IHJlY29yZC5uZXh0LCByZWFzb246IHJlY29yZC5yZWFzb24sIGVmZmVjdDogcmVjb3JkLmVmZmVjdCwgZXZpZGVuY2U6IHJlZmVyZW5jZSB9O1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBUaGUgcnVubmVyIGNhbGxzIHJlY29yZFN1bW1hcnkgYmVmb3JlIGl0cyBmaW5hbCBhdHRlbXB0LiBGaW5pc2ggdGhhdCBwZW5kaW5nIHByb2plY3Rpb24gbm93IHRvby5cbiAgICB0aGlzLnByb2plY3RTdW1tYXJ5KCk7XG4gICAgY29uc3QgYWRkID0gKGtpbmQ6IEF0dGVudGlvblsna2luZCddLCByZWFzb246IEF0dGVudGlvblsncmVhc29uJ10pID0+IHtcbiAgICAgIGlmIChyZWZlcmVuY2UpIHRoaXMuYXBwZW5kKHsga2luZCwgcmVhc29uLCBldmlkZW5jZTogW3JlZmVyZW5jZV0gfSk7XG4gICAgICBlbHNlIHRoaXMubWlzc2luZygpO1xuICAgIH07XG4gICAgaWYgKHJlY29yZC5lZmZlY3QgPT09ICd1bmtub3duJykgYWRkKCd1bmtub3duLWVmZmVjdCcsICdVTktOT1dOX0VGRkVDVF9SRUNPUkRFRCcpO1xuICAgIGlmIChyZWNvcmQub3V0Y29tZSA9PT0gJ3RpbWVvdXQnKSBhZGQoJ3RpbWVvdXQnLCAnVElNRU9VVF9SRUNPUkRFRCcpO1xuICAgIC8vIEFuIFNESydzIHN1Z2dlc3RlZCBuZXh0L3JlYXNvbiBpcyBub3QgaXRzIGFjdHVhbCBwb2xpY3k7IG9ubHkgYSBsYXRlciBvcmRpbmFsIHByb3ZlcyBpdHMgcmV0cnkuXG4gICAgY29uc3Qgb2JzZXJ2ZWQgPSByZWNvcmQua2luZCA9PT0gJ29ic2VydmVkJztcbiAgICBpZiAoKCFvYnNlcnZlZCAmJiByZWNvcmQubmV4dCA9PT0gJ3JldHJ5JykgfHwgcmVjb3JkLmF0dGVtcHQgPiAxKSBhZGQoJ3JldHJpZWQnLCAnUkVUUllfUkVDT1JERUQnKTtcbiAgICBpZiAoXG4gICAgICAhb2JzZXJ2ZWQgJiZcbiAgICAgIHJlY29yZC5uZXh0ID09PSAnc3RvcCcgJiZcbiAgICAgIFNUT1BQRURfUkVBU09OUy5oYXMocmVjb3JkLnJlYXNvbikgJiZcbiAgICAgIChyZWNvcmQub2YgPz8gMSkgPiAxICYmXG4gICAgICByZWNvcmQucmV0cnlMb29wID09PSB1bmRlZmluZWRcbiAgICApXG4gICAgICBhZGQoJ2dhdmUtdXAnLCAnUkVUUllfU1RPUF9SRUNPUkRFRCcpO1xuICB9XG5cbiAgcmVjb3JkU3VtbWFyeShzdW1tYXJ5OiBBdHRlbXB0U3VtbWFyeSk6IHZvaWQge1xuICAgIHRoaXMuc3VtbWFyeSA9IHN1bW1hcnk7XG4gICAgdGhpcy5wcm9qZWN0U3VtbWFyeSgpO1xuICB9XG5cbiAgLyoqIEEgc3VtbWFyeS1vbmx5IGN1dCB3YWl0IGhhcyBubyBwaGFudG9tIGZpbmFsIGF0dGVtcHQ7IHVzZSBpdHMgYWN0dWFsIHJldGFpbmVkIHN1bW1hcnkuICovXG4gIHByaXZhdGUgcHJvamVjdFN1bW1hcnkoKTogdm9pZCB7XG4gICAgY29uc3QgbGFzdCA9IHRoaXMuc3VtbWFyeT8ubGFzdDtcbiAgICBpZiAoIWxhc3QpIHJldHVybjtcbiAgICBjb25zdCB0ZXJtaW5hbCA9IHRoaXMudGVybWluYWw7XG4gICAgY29uc3QgbWF0Y2hpbmcgPSB0ZXJtaW5hbD8ubmV4dCA9PT0gbGFzdC5uZXh0ICYmIHRlcm1pbmFsLnJlYXNvbiA9PT0gbGFzdC5yZWFzb247XG4gICAgY29uc3QgYWRkID0gKGtpbmQ6IEF0dGVudGlvblsna2luZCddLCByZWFzb246IEF0dGVudGlvblsncmVhc29uJ10sIHByb29mPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCByZWZlcmVuY2UgPSBwcm9vZiA/PyAnYXR0ZW1wdFN1bW1hcnknO1xuICAgICAgY29uc3Qga2V5ID0ga2luZCArICc6JyArIHJlYXNvbjtcbiAgICAgIGNvbnN0IG1hcmtzID0gdGhpcy5tYXJrcztcbiAgICAgIGNvbnN0IHByZXZpb3VzID0gbWFya3M/LmdldChrZXkpO1xuICAgICAgaWYgKHByb29mICYmIG1hcmtzICYmIHByZXZpb3VzPy5ldmlkZW5jZS5pbmNsdWRlcygnYXR0ZW1wdFN1bW1hcnknKSkge1xuICAgICAgICBtYXJrcy5zZXQoa2V5LCB7IC4uLnByZXZpb3VzLCBldmlkZW5jZTogcHJldmlvdXMuZXZpZGVuY2UuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSAnYXR0ZW1wdFN1bW1hcnknKSB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwZW5kKHsga2luZCwgcmVhc29uLCBldmlkZW5jZTogW3JlZmVyZW5jZV0gfSk7XG4gICAgfTtcbiAgICBpZiAobGFzdC5lZmZlY3QgPT09ICd1bmtub3duJylcbiAgICAgIGFkZChcbiAgICAgICAgJ3Vua25vd24tZWZmZWN0JyxcbiAgICAgICAgJ1VOS05PV05fRUZGRUNUX1JFQ09SREVEJyxcbiAgICAgICAgbWF0Y2hpbmcgJiYgdGVybWluYWwuZWZmZWN0ID09PSAndW5rbm93bicgPyB0ZXJtaW5hbC5ldmlkZW5jZSA6IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgaWYgKHRoaXMucmV0cnlQb3NzaWJsZSAmJiBsYXN0Lm5leHQgPT09ICdzdG9wJyAmJiBTVE9QUEVEX1JFQVNPTlMuaGFzKGxhc3QucmVhc29uKSlcbiAgICAgIGFkZCgnZ2F2ZS11cCcsICdSRVRSWV9TVE9QX1JFQ09SREVEJywgbWF0Y2hpbmcgPyB0ZXJtaW5hbC5ldmlkZW5jZSA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKiogT25seSB0aGUgZXhwbGljaXQgcmV0YWluZWQgc3RhZ2UtZXJyb3IgcGF0aCBjYWxscyB0aGlzOyBhIGRpYWdub3N0aWMgdmFsdWUgbmV2ZXIgY2xhc3NpZmllcyBpdHNlbGYuICovXG4gIHN0YWdlRmFpbGVkKGVycm9yczogdW5rbm93bik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZXNjcmlwdG9yID1cbiAgICAgICAgZXJyb3JzICYmIHR5cGVvZiBlcnJvcnMgPT09ICdvYmplY3QnXG4gICAgICAgICAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGVycm9ycywgJ3N0YWdlRXhlY3V0aW9uRXJyb3InKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgT2JqZWN0Lmhhc093bihkZXNjcmlwdG9yLCAndmFsdWUnKSkge1xuICAgICAgICB0aGlzLmFwcGVuZCh7IGtpbmQ6ICdlcnJvcicsIHJlYXNvbjogJ0VSUk9SX1JFQ09SREVEJywgZXZpZGVuY2U6IFsnZXJyb3JzOnN0YWdlRXhlY3V0aW9uRXJyb3InXSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLyogQSBtYWxmb3JtZWQgZXZpZGVuY2UgYmFnIGlzIHVuYXZhaWxhYmxlLCBuZXZlciBhbm90aGVyIHN0YWdlIGZhaWx1cmUuICovXG4gICAgfVxuICAgIHRoaXMubWlzc2luZygpO1xuICB9XG5cbiAgYXR0ZW1wdERyb3BwZWQoKTogdm9pZCB7XG4gICAgdGhpcy5hcHBlbmQoeyBraW5kOiAnbm90LWNvbGxlY3RlZCcsIHJlYXNvbjogJ0VWSURFTkNFX05PVF9DT0xMRUNURUQnLCBldmlkZW5jZTogWydhdHRlbXB0c0Ryb3BwZWQnXSB9KTtcbiAgfVxuXG4gIC8qKiBLZWVwIG9ubHkgYm91bmRlZCBleGFjdCByZWZlcmVuY2VzOyBvbmUgc2xvdCBpcyByZXNlcnZlZCB0byBkaXNjbG9zZSBvbWlzc2lvbnMuICovXG4gIGFwcGVuZChhdHRlbnRpb246IEF0dGVudGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IGF0dGVudGlvbi5raW5kICsgJzonICsgYXR0ZW50aW9uLnJlYXNvbjtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubWFya3M/LmdldChrZXkpO1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBbLi4uKHByZXZpb3VzPy5ldmlkZW5jZSA/PyBbXSldO1xuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIGF0dGVudGlvbi5ldmlkZW5jZSkge1xuICAgICAgaWYgKCF2YWxpZFJlZmVyZW5jZShyZWZlcmVuY2UpKSB7XG4gICAgICAgIHRoaXMub21pdHRlZCA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlZmVyZW5jZXMuaW5jbHVkZXMocmVmZXJlbmNlKSkgY29udGludWU7XG4gICAgICBpZiAocmVmZXJlbmNlcy5sZW5ndGggPj0gTUFYX1JFRkVSRU5DRVMpIHtcbiAgICAgICAgdGhpcy5vbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZWZlcmVuY2VzLnB1c2gocmVmZXJlbmNlKTtcbiAgICB9XG4gICAgaWYgKGF0dGVudGlvbi5raW5kICE9PSAnbm90LWNvbGxlY3RlZCcgJiYgcmVmZXJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMub21pdHRlZCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghcHJldmlvdXMgJiYgKHRoaXMubWFya3M/LnNpemUgPz8gMCkgPj0gTUFYX01BUktTIC0gMSkge1xuICAgICAgdGhpcy5vbWl0dGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKHRoaXMubWFya3MgPz89IG5ldyBNYXAoKSkuc2V0KGtleSwgeyBraW5kOiBhdHRlbnRpb24ua2luZCwgcmVhc29uOiBhdHRlbnRpb24ucmVhc29uLCBldmlkZW5jZTogcmVmZXJlbmNlcyB9KTtcbiAgfVxuXG4gIG1pc3NpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5vbWl0dGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBDb3B5IGFscmVhZHkgY29sbGVjdGVkIGJvdW5kZWQgbWFya3MsIG5ldmVyIGFuIGF0dGVtcHQgYXJyYXksIGRpYWdub3N0aWMgYmFnIG9yIGV4ZWN1dGlvbiB0cmVlLiAqL1xuICBzbmFwc2hvdCgpOiByZWFkb25seSBBdHRlbnRpb25bXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gWy4uLih0aGlzLm1hcmtzPy52YWx1ZXMoKSA/PyBbXSldLm1hcCgoYXR0ZW50aW9uKSA9PlxuICAgICAgT2JqZWN0LmZyZWV6ZSh7IC4uLmF0dGVudGlvbiwgZXZpZGVuY2U6IE9iamVjdC5mcmVlemUoWy4uLmF0dGVudGlvbi5ldmlkZW5jZV0pIH0pLFxuICAgICk7XG4gICAgaWYgKHRoaXMub21pdHRlZCAmJiAhcmVzdWx0LnNvbWUoKGF0dGVudGlvbikgPT4gYXR0ZW50aW9uLmtpbmQgPT09ICdub3QtY29sbGVjdGVkJykpIHJlc3VsdC5wdXNoKE1JU1NJTkdfQVRURU5USU9OKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShyZXN1bHQpO1xuICB9XG59XG4iXX0=
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* A `StageSnapshot` is an `ExecutionTree` (`types.ts`), the shape the record's readers walk:
|
|
13
13
|
* `commitStops`, `tagStops` and `keysReadFromExecutionTree` take one.
|
|
14
14
|
*/
|
|
15
|
+
import type { Attention } from 'foottrace';
|
|
15
16
|
import type { AttemptRecord, AttemptSummary, LateWrite } from '../attempt/types.js';
|
|
16
17
|
import type { RetentionPolicy } from '../capture/policies.js';
|
|
17
18
|
/** Types of control flow decisions captured by the execution engine. */
|
|
@@ -123,6 +124,13 @@ export type StageSnapshot = {
|
|
|
123
124
|
* there were none.
|
|
124
125
|
*/
|
|
125
126
|
lateWrites?: readonly LateWrite[];
|
|
127
|
+
/**
|
|
128
|
+
* Fixed-reason marks collected as this execution runs. Absent when no fact needs attention.
|
|
129
|
+
* Attempt evidence uses canonical Foottrace attempt IDs. Summary-only and stage-error proof resolves within THIS node
|
|
130
|
+
* through attemptSummary, errors:stageExecutionError or attemptsDropped. Quality marks are read-time recorder work.
|
|
131
|
+
* Marks retain no error text, values, targets or idempotency keys; omitted proof is disclosed as not-collected.
|
|
132
|
+
*/
|
|
133
|
+
attention?: readonly Attention[];
|
|
126
134
|
next?: StageSnapshot;
|
|
127
135
|
children?: StageSnapshot[];
|
|
128
136
|
};
|
|
@@ -13,4 +13,4 @@
|
|
|
13
13
|
* `commitStops`, `tagStops` and `keysReadFromExecutionTree` take one.
|
|
14
14
|
*/
|
|
15
15
|
export {};
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWVUeXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2ZyYW1lVHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZnJhbWVUeXBlcy50cyDigJQgdGhlIHR5cGVzIG9mIHRoZSBlbmdpbmUncyBmcmFtZSAoTDQpOiB3aGF0IG9uZSBzdGFnZSBpbnNpZGUgYSBydW4gcmVwb3J0cy5cbiAqXG4gKiBJdHMgc25hcHNob3QgKGBTdGFnZVNuYXBzaG90YCwgb25lIG5vZGUgb2YgdGhlIGV4ZWN1dGlvbiB0cmVlKSwgaXRzIGZsb3cgbWVzc2FnZXNcbiAqIChgRmxvd01lc3NhZ2VgLCBgRmxvd0NvbnRyb2xUeXBlYCkgYW5kIHRoZSB0d28gcmV0ZW50aW9uIGRpYWxzIHRoYXQgc2hhcGUgd2hhdCB0aGUgc25hcHNob3RcbiAqIGtlZXBzIChgUmVhZFRyYWNraW5nTW9kZWAsIGBXcml0ZVRyYWNraW5nTW9kZWAsIG92ZXIgYGNhcHR1cmUvYCdzIGBSZXRlbnRpb25Qb2xpY3lgKS4gVGhleSBsaXZlZFxuICogaW4gdGhlIHJlY29yZCdzIGB0eXBlcy50c2AgdW50aWwgQzY7IHRoZSByZWNvcmQgbmFtZXMgbm90aGluZyBvdXRzaWRlIGl0c2VsZiBub3dcbiAqIChgUkVDT1JEX0ZJTEVTYCwgc2NyaXB0cy9sYXllcmluZy5jb25maWcuY2pzKSwgc28gdGhleSBzaXQgYmVzaWRlIHRoZSBmcmFtZSB0aGF0IHdyaXRlcyB0aGVtLlxuICpcbiAqIEEgcmV0cmllZCBzdGFnZSdzIG5vZGUgYWxzbyBjYXJyaWVzIGl0cyBhdHRlbXB0cyAoYGF0dGVtcHRzYCwgYGF0dGVtcHRTdW1tYXJ5YCDigJQgdGhlIGF0dGVtcHQgbGVhZidzIHR5cGVzLCBMMCkuXG4gKlxuICogQSBgU3RhZ2VTbmFwc2hvdGAgaXMgYW4gYEV4ZWN1dGlvblRyZWVgIChgdHlwZXMudHNgKSwgdGhlIHNoYXBlIHRoZSByZWNvcmQncyByZWFkZXJzIHdhbGs6XG4gKiBgY29tbWl0U3RvcHNgLCBgdGFnU3RvcHNgIGFuZCBga2V5c1JlYWRGcm9tRXhlY3V0aW9uVHJlZWAgdGFrZSBvbmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBdHRlbXB0UmVjb3JkLCBBdHRlbXB0U3VtbWFyeSwgTGF0ZVdyaXRlIH0gZnJvbSAnLi4vYXR0ZW1wdC90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSB9IGZyb20gJy4uL2NhcHR1cmUvcG9saWNpZXMuanMnO1xuXG4vLyDilIDilIAgRmxvdyBDb250cm9sIE5hcnJhdGl2ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFR5cGVzIG9mIGNvbnRyb2wgZmxvdyBkZWNpc2lvbnMgY2FwdHVyZWQgYnkgdGhlIGV4ZWN1dGlvbiBlbmdpbmUuICovXG5leHBvcnQgdHlwZSBGbG93Q29udHJvbFR5cGUgPSAnbmV4dCcgfCAnYnJhbmNoJyB8ICdjaGlsZHJlbicgfCAnc2VsZWN0ZWQnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuXG4vKiogQSBzaW5nbGUgZmxvdyBjb250cm9sIG5hcnJhdGl2ZSBlbnRyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd01lc3NhZ2Uge1xuICB0eXBlOiBGbG93Q29udHJvbFR5cGU7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHRhcmdldFN0YWdlPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIHJhdGlvbmFsZT86IHN0cmluZztcbiAgY291bnQ/OiBudW1iZXI7XG4gIGl0ZXJhdGlvbj86IG51bWJlcjtcbiAgdGltZXN0YW1wPzogbnVtYmVyO1xufVxuXG4vLyDilIDilIAgUmVhZCAvIFdyaXRlIFRyYWNraW5nICgjMTQsICMxM2MtQSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vL1xuLy8gVGhlIHBvbGljeSBmYW1pbHkgYW5kIG1hcmtlciBzaGFwZXMgYXJlIG93bmVkIGJ5IGBjYXB0dXJlL2AgKHNoYXJlZCB3aXRoXG4vLyB0aGUgZGVmZXJyZWQtb2JzZXJ2ZXIgY2FwdHVyZSB0aWVyKS5cblxuLyoqXG4gKiBQb2xpY3kgZm9yIGhvdyB0cmFja2VkIHJlYWRzIGFyZSByZWNvcmRlZCBpbnRvIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgLlxuICpcbiAqIC0gYCdmdWxsJ2AgKGRlZmF1bHQpIOKAlCBldmVyeSB0cmFja2VkIHJlYWQgYHN0cnVjdHVyZWRDbG9uZWBzIHRoZSB2YWx1ZSBpbnRvXG4gKiAgIHRoZSBzdGFnZSdzIHJlYWQgdmlldy4gQnl0ZS1pZGVudGljYWwgdG8gdGhlIGhpc3RvcmljYWwgYmVoYXZpb3I7IHRoaXMgaXNcbiAqICAgd2hhdCBzbmFwc2hvdCBjb25zdW1lcnMgKGxlbnMsIGFnZW50Zm9vdHByaW50KSBzZWUgdG9kYXkuXG4gKiAtIGAnc3VtbWFyeSdgIOKAlCByZWFkcyByZWNvcmQgYSBjaGVhcCB7QGxpbmsgUmVhZFN1bW1hcnlNYXJrZXJ9ICh0eXBlICsgc2l6ZVxuICogICBwcm94eSArIHNob3J0IHByZXZpZXcpIGluc3RlYWQgb2YgdGhlIGNsb25lZCB2YWx1ZS4gTygxKS1pc2ggcGVyIHJlYWQg4oCUXG4gKiAgIG5vIHZhbHVlIGNsb25lLCBubyBzZXJpYWxpemF0aW9uIG9mIGxhcmdlIG9iamVjdHMuXG4gKiAtIGAnb2ZmJ2Ag4oCUIHJlYWRzIGFyZSBub3QgcmVjb3JkZWQgYXQgYWxsOyBgc3RhZ2VSZWFkc2AgaXMgYWJzZW50IGZyb20gdGhlXG4gKiAgIHNuYXBzaG90LiBaZXJvIHBlci1yZWFkIGNvc3QuIFZhbHVlcyBhcmUgc3RpbGwgcmVhZGFibGUsIGFuZCB0aGVcbiAqICAgYFNjb3BlUmVjb3JkZXIub25SZWFkYCBldmVudCBzdGlsbCBmaXJlcyAoaXQgcGFzc2VzIHRoZSBsaXZlIHJlZmVyZW5jZSBhbmRcbiAqICAgbmV2ZXIgY2xvbmVkKSDigJQgc28gbmFycmF0aXZlIG91dHB1dCBpcyBpZGVudGljYWwgaW4gZXZlcnkgbW9kZS4gVGhlIHBvbGljeVxuICogICBzY29wZXMgT05MWSB0aGUgc25hcHNob3QncyBgc3RhZ2VSZWFkc2AgcGF5bG9hZC5cbiAqXG4gKiBTZXQgdmlhIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgcmVhZFRyYWNraW5nIH0pYCBvclxuICogYGV4ZWN1dG9yLnNldFJlYWRUcmFja2luZyhtb2RlKWAgKGJlZm9yZSBgcnVuKClgKS5cbiAqXG4gKiBBbGlhcyBvZiB0aGUgc2hhcmVkIHtAbGluayBSZXRlbnRpb25Qb2xpY3l9IGZhbWlseSAoIzEzYy1BKSDigJQga2VwdCBhcyB0aGVcbiAqIHNoaXBwZWQgcHVibGljIG5hbWUgZm9yIHRoZSByZWFkIGRpYWwuXG4gKi9cbmV4cG9ydCB0eXBlIFJlYWRUcmFja2luZ01vZGUgPSBSZXRlbnRpb25Qb2xpY3k7XG5cbi8qKlxuICogUG9saWN5IGZvciBob3cgdHJhY2tlZCB3cml0ZXMgYXJlIHJlY29yZGVkIGludG8gYFN0YWdlU25hcHNob3Quc3RhZ2VXcml0ZXNgXG4gKiAoIzEzYy1BKSDigJQgdGhlIHNpYmxpbmcgb2Yge0BsaW5rIFJlYWRUcmFja2luZ01vZGV9LlxuICpcbiAqIC0gYCdmdWxsJ2AgKGRlZmF1bHQpIOKAlCBldmVyeSB0cmFja2VkIHdyaXRlIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB0aGUgdmFsdWUgaW50b1xuICogICB0aGUgc3RhZ2UncyB3cml0ZSB2aWV3LiBCeXRlLWlkZW50aWNhbCB0byB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvci5cbiAqIC0gYCdzdW1tYXJ5J2Ag4oCUIHdyaXRlcyByZWNvcmQgYSBjaGVhcCB7QGxpbmsgV3JpdGVTdW1tYXJ5TWFya2VyfSBpbnN0ZWFkIG9mXG4gKiAgIHRoZSBjbG9uZWQgdmFsdWUuXG4gKiAtIGAnb2ZmJ2Ag4oCUIHdyaXRlcyBhcmUgbm90IHJlY29yZGVkIGF0IGFsbDsgYHN0YWdlV3JpdGVzYCBpcyBhYnNlbnQgZnJvbSB0aGVcbiAqICAgc25hcHNob3QuIFRoZSB3cml0ZXMgdGhlbXNlbHZlcyBzdGlsbCBjb21taXQgdG8gc2hhcmVkIHN0YXRlIGFuZCBzdGlsbFxuICogICBhcHBlYXIgaW4gdGhlIGNvbW1pdCBsb2cg4oCUIG9ubHkgdGhlIHBlci1zdGFnZSBzbmFwc2hvdCBib29ra2VlcGluZyAoYW5kXG4gKiAgIHRoZXJlZm9yZSB0aGUgY29tbWl0IG9ic2VydmVyJ3MgbXV0YXRpb25zIHBheWxvYWQpIGlzIGFmZmVjdGVkLiAoVGhlXG4gKiAgIGNvbW1pdCBsb2cncyBvd24gdmFsdWUgZW5jb2RpbmcgaGFzIGl0cyBvd24gbG9zc2xlc3MgZGlhbCDigJRcbiAqICAge0BsaW5rIENvbW1pdFZhbHVlc01vZGV9LCAjMTNjLUIuKVxuICpcbiAqIFNldCB2aWEgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyB3cml0ZVRyYWNraW5nIH0pYCBvclxuICogYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIChiZWZvcmUgYHJ1bigpYCkuIFNlZVxuICogYEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9ucy53cml0ZVRyYWNraW5nYCBmb3IgdGhlIGZ1bGwgb2JzZXJ2YWJsZS1jb25zZXF1ZW5jZVxuICogY29udHJhY3QgKG9uQ29tbWl0IHBheWxvYWQsIHJlZGFjdGlvbiBwcmVjZWRlbmNlLCB3aGF0IGlzIE9VVCBvZiBzY29wZSkuXG4gKi9cbmV4cG9ydCB0eXBlIFdyaXRlVHJhY2tpbmdNb2RlID0gUmV0ZW50aW9uUG9saWN5O1xuXG4vLyDilIDilIAgU3RhZ2UgU25hcHNob3Qg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBTZXJpYWxpc2FibGUgcmVwcmVzZW50YXRpb24gb2YgYSBzdGFnZSdzIHN0YXRlIChmb3IgZGVidWdnaW5nIC8gdmlzdWFsaXNhdGlvbikuICovXG5leHBvcnQgdHlwZSBTdGFnZVNuYXBzaG90ID0ge1xuICBpZDogc3RyaW5nO1xuICAvKiogVW5pcXVlIHBlci1leGVjdXRpb24tc3RlcCBpZGVudGlmaWVyLiBGb3JtYXQ6IFtzdWJmbG93UGF0aC9dc3RhZ2VJZCNleGVjdXRpb25JbmRleCAqL1xuICBydW50aW1lU3RhZ2VJZD86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhpcyBzdGFnZSBkb2VzIChmcm9tIGJ1aWxkZXIpLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFN1YmZsb3cgaWRlbnRpZmllciDigJQgcHJlc2VudCB3aGVuIHRoaXMgc3RhZ2UgaXMgYSBzdWJmbG93IGVudHJ5IHBvaW50LiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIGlzRGVjaWRlcj86IGJvb2xlYW47XG4gIGlzRm9yaz86IGJvb2xlYW47XG4gIC8qKiBVc2VyLWxldmVsIHdyaXRlcyBtYWRlIGJ5IHRoaXMgc3RhZ2UgKHByZS1uYW1lc3BhY2Uga2V5cyDihpIgdmFsdWVzKS5cbiAgICogIFNoYXBlIGRlcGVuZHMgb24ge0BsaW5rIFdyaXRlVHJhY2tpbmdNb2RlfTogY2xvbmVkIHZhbHVlcyB1bmRlciBgJ2Z1bGwnYFxuICAgKiAgKGRlZmF1bHQpLCB7QGxpbmsgV3JpdGVTdW1tYXJ5TWFya2VyfXMgdW5kZXIgYCdzdW1tYXJ5J2AsIGFic2VudCB1bmRlclxuICAgKiAgYCdvZmYnYC4gUmVkYWN0ZWQgd3JpdGVzIHNob3cgYCdbUkVEQUNURURdJ2AgcmVnYXJkbGVzcyBvZiBtb2RlLiAqL1xuICBzdGFnZVdyaXRlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogVXNlci1sZXZlbCByZWFkcyBtYWRlIGJ5IHRoaXMgc3RhZ2UgKHByZS1uYW1lc3BhY2Uga2V5cyDihpIgdmFsdWVzIGF0IHJlYWRcbiAgICogIHRpbWUpLiBTaGFwZSBkZXBlbmRzIG9uIHtAbGluayBSZWFkVHJhY2tpbmdNb2RlfTogY2xvbmVkIHZhbHVlcyB1bmRlclxuICAgKiAgYCdmdWxsJ2AgKGRlZmF1bHQpLCB7QGxpbmsgUmVhZFN1bW1hcnlNYXJrZXJ9cyB1bmRlciBgJ3N1bW1hcnknYCwgYWJzZW50XG4gICAqICB1bmRlciBgJ29mZidgLiAqL1xuICBzdGFnZVJlYWRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGxvZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBlcnJvcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBtZXRyaWNzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXZhbHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBmbG93TWVzc2FnZXM/OiBGbG93TWVzc2FnZVtdO1xuICAvKipcbiAgICogRXZlcnkgYXR0ZW1wdCBvZiB0aGlzIGV4ZWN1dGlvbiwgaW4gb3JkZXIg4oCUIHdoZW4gaXQgc3RhcnRlZCwgaG93IGxvbmcgaXQgdG9vaywgaG93IGl0IGVuZGVkLCBhbmQgdGhlXG4gICAqIHJldHJ5LW9yLXN0b3AgZGVjaXNpb24gdGhhdCBmb2xsb3dlZCAoYEF0dGVtcHRSZWNvcmRgKTogdGhlIHN0YWdlJ3Mgb3duIHVuZGVyIGl0cyByZXRyeSBwb2xpY3ksIGEgYHRpbWVvdXRNc2BcbiAgICogb3IgYSBydW4gZGVhZGxpbmUgKDEwLjEsIGBraW5kOiAnc3RhZ2UnYCksIGFuZCB0aG9zZSBvZiB0aGUgY2FsbHMgaXQgbWFkZSB0aHJvdWdoIGBzY29wZS4kY2FsbGAgYW5kIHRoZVxuICAgKiBvdXRzaWRlIGF0dGVtcHRzIGl0IHJlcG9ydGVkIHRocm91Z2ggYG9ic2VydmVkKClgIChQMiwgYGtpbmQ6ICdjYWxsJ2AgLyBgJ29ic2VydmVkJ2AsIHRoZSBmaXJzdCAxMDAwIOKAlFxuICAgKiBgU3RhZ2VDb250ZXh0IMK3IE1BWF9DQUxMX1JFQ09SRFNgKS4gQWJzZW50IHdoZW4gdGhlcmUgYXJlIG5vbmUuIFRoZSBjb21taXQgbG9nIG5ldmVyIGNhcnJpZXMgYXR0ZW1wdHM6IGFcbiAgICogcmV0cmllZCBzdGFnZSBpcyBzdGlsbCBPTkUgYnVuZGxlLlxuICAgKi9cbiAgYXR0ZW1wdHM/OiByZWFkb25seSBBdHRlbXB0UmVjb3JkW107XG4gIC8qKlxuICAgKiBDYWxsIGFuZCBvYnNlcnZlZCBhdHRlbXB0IHJlY29yZHMgdGhpcyBleGVjdXRpb24gbWFkZSBwYXN0IHRoZSBmaXJzdCAxMDAwIOKAlCBjb3VudGVkLCBub3Qga2VwdCAoZWFjaCBzdGlsbFxuICAgKiBmaXJlZCBgb25BdHRlbXB0YCkuIEFic2VudCB3aGVuIG5vbmUgd2VyZSBkcm9wcGVkLlxuICAgKi9cbiAgYXR0ZW1wdHNEcm9wcGVkPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHNlcmllcyBhdCBhIGdsYW5jZSDigJQgY291bnRzIHBlciBvdXRjb21lLCBhbmQgaG93IGl0IGVuZGVkLiBTdGFtcGVkIHdoZW4gdGhlIHNlcmllcyBlbmRzOiBhYnNlbnQgd2hpbGUgaXRcbiAgICogaXMgc3RpbGwgcnVubmluZyAoYSBzbmFwc2hvdCB0YWtlbiBtaWQtc3RhZ2UpIGFuZCB3aXRob3V0IGEgcG9saWN5LlxuICAgKi9cbiAgYXR0ZW1wdFN1bW1hcnk/OiBBdHRlbXB0U3VtbWFyeTtcbiAgLyoqXG4gICAqIFdyaXRlcyAoYW5kIGVtaXRzKSBhbiBhdHRlbXB0IHRyaWVkIEFGVEVSIGl0IGhhZCBlbmRlZCDigJQgdGltZWQgb3V0LCBhYm9ydGVkIG9yIGZhaWxlZCDigJQgaW4gdGhlIG9yZGVyIHRoZXkgY2FtZVxuICAgKiAoUDFiKS4gRWFjaCB3YXMgZHJvcHBlZCBhdCB0aGUgc2NvcGUsIHNvIG5vbmUgcmVhY2hlZCB0aGUgc3RhZ2UncyBidWZmZXIsIGl0cyBjb21taXQgb3IgYSByZWNvcmRlcjsgdGhpcyBpc1xuICAgKiB0aGUgcmVjb3JkIHRoYXQgdGhleSB3ZXJlIHRyaWVkIOKAlCB0aGUgZmlyc3QgMTAwIChgTUFYX0xBVEVfV1JJVEVTYCkuIEFuIGFiYW5kb25lZCBmdW5jdGlvbiBjYW4ga2VlcCBydW5uaW5nXG4gICAqIGFmdGVyIHRoZSBydW4gZW5kZWQsIHNvIHRoZSBsaXN0IGNhbiBncm93IGFmdGVyIGEgc25hcHNob3Qgd2FzIHRha2VuLiBOYW1lcyBvbmx5LCBuZXZlciB2YWx1ZXMuIEFic2VudCB3aGVuXG4gICAqIHRoZXJlIHdlcmUgbm9uZS5cbiAgICovXG4gIGxhdGVXcml0ZXM/OiByZWFkb25seSBMYXRlV3JpdGVbXTtcbiAgbmV4dD86IFN0YWdlU25hcHNob3Q7XG4gIGNoaWxkcmVuPzogU3RhZ2VTbmFwc2hvdFtdO1xufTtcbiJdfQ==
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWVUeXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2ZyYW1lVHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZnJhbWVUeXBlcy50cyDigJQgdGhlIHR5cGVzIG9mIHRoZSBlbmdpbmUncyBmcmFtZSAoTDQpOiB3aGF0IG9uZSBzdGFnZSBpbnNpZGUgYSBydW4gcmVwb3J0cy5cbiAqXG4gKiBJdHMgc25hcHNob3QgKGBTdGFnZVNuYXBzaG90YCwgb25lIG5vZGUgb2YgdGhlIGV4ZWN1dGlvbiB0cmVlKSwgaXRzIGZsb3cgbWVzc2FnZXNcbiAqIChgRmxvd01lc3NhZ2VgLCBgRmxvd0NvbnRyb2xUeXBlYCkgYW5kIHRoZSB0d28gcmV0ZW50aW9uIGRpYWxzIHRoYXQgc2hhcGUgd2hhdCB0aGUgc25hcHNob3RcbiAqIGtlZXBzIChgUmVhZFRyYWNraW5nTW9kZWAsIGBXcml0ZVRyYWNraW5nTW9kZWAsIG92ZXIgYGNhcHR1cmUvYCdzIGBSZXRlbnRpb25Qb2xpY3lgKS4gVGhleSBsaXZlZFxuICogaW4gdGhlIHJlY29yZCdzIGB0eXBlcy50c2AgdW50aWwgQzY7IHRoZSByZWNvcmQgbmFtZXMgbm90aGluZyBvdXRzaWRlIGl0c2VsZiBub3dcbiAqIChgUkVDT1JEX0ZJTEVTYCwgc2NyaXB0cy9sYXllcmluZy5jb25maWcuY2pzKSwgc28gdGhleSBzaXQgYmVzaWRlIHRoZSBmcmFtZSB0aGF0IHdyaXRlcyB0aGVtLlxuICpcbiAqIEEgcmV0cmllZCBzdGFnZSdzIG5vZGUgYWxzbyBjYXJyaWVzIGl0cyBhdHRlbXB0cyAoYGF0dGVtcHRzYCwgYGF0dGVtcHRTdW1tYXJ5YCDigJQgdGhlIGF0dGVtcHQgbGVhZidzIHR5cGVzLCBMMCkuXG4gKlxuICogQSBgU3RhZ2VTbmFwc2hvdGAgaXMgYW4gYEV4ZWN1dGlvblRyZWVgIChgdHlwZXMudHNgKSwgdGhlIHNoYXBlIHRoZSByZWNvcmQncyByZWFkZXJzIHdhbGs6XG4gKiBgY29tbWl0U3RvcHNgLCBgdGFnU3RvcHNgIGFuZCBga2V5c1JlYWRGcm9tRXhlY3V0aW9uVHJlZWAgdGFrZSBvbmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBdHRlbnRpb24gfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgdHlwZSB7IEF0dGVtcHRSZWNvcmQsIEF0dGVtcHRTdW1tYXJ5LCBMYXRlV3JpdGUgfSBmcm9tICcuLi9hdHRlbXB0L3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmV0ZW50aW9uUG9saWN5IH0gZnJvbSAnLi4vY2FwdHVyZS9wb2xpY2llcy5qcyc7XG5cbi8vIOKUgOKUgCBGbG93IENvbnRyb2wgTmFycmF0aXZlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogVHlwZXMgb2YgY29udHJvbCBmbG93IGRlY2lzaW9ucyBjYXB0dXJlZCBieSB0aGUgZXhlY3V0aW9uIGVuZ2luZS4gKi9cbmV4cG9ydCB0eXBlIEZsb3dDb250cm9sVHlwZSA9ICduZXh0JyB8ICdicmFuY2gnIHwgJ2NoaWxkcmVuJyB8ICdzZWxlY3RlZCcgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG5cbi8qKiBBIHNpbmdsZSBmbG93IGNvbnRyb2wgbmFycmF0aXZlIGVudHJ5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93TWVzc2FnZSB7XG4gIHR5cGU6IEZsb3dDb250cm9sVHlwZTtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgdGFyZ2V0U3RhZ2U/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgcmF0aW9uYWxlPzogc3RyaW5nO1xuICBjb3VudD86IG51bWJlcjtcbiAgaXRlcmF0aW9uPzogbnVtYmVyO1xuICB0aW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgCBSZWFkIC8gV3JpdGUgVHJhY2tpbmcgKCMxNCwgIzEzYy1BKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vXG4vLyBUaGUgcG9saWN5IGZhbWlseSBhbmQgbWFya2VyIHNoYXBlcyBhcmUgb3duZWQgYnkgYGNhcHR1cmUvYCAoc2hhcmVkIHdpdGhcbi8vIHRoZSBkZWZlcnJlZC1vYnNlcnZlciBjYXB0dXJlIHRpZXIpLlxuXG4vKipcbiAqIFBvbGljeSBmb3IgaG93IHRyYWNrZWQgcmVhZHMgYXJlIHJlY29yZGVkIGludG8gYFN0YWdlU25hcHNob3Quc3RhZ2VSZWFkc2AuXG4gKlxuICogLSBgJ2Z1bGwnYCAoZGVmYXVsdCkg4oCUIGV2ZXJ5IHRyYWNrZWQgcmVhZCBgc3RydWN0dXJlZENsb25lYHMgdGhlIHZhbHVlIGludG9cbiAqICAgdGhlIHN0YWdlJ3MgcmVhZCB2aWV3LiBCeXRlLWlkZW50aWNhbCB0byB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvcjsgdGhpcyBpc1xuICogICB3aGF0IHNuYXBzaG90IGNvbnN1bWVycyAobGVucywgYWdlbnRmb290cHJpbnQpIHNlZSB0b2RheS5cbiAqIC0gYCdzdW1tYXJ5J2Ag4oCUIHJlYWRzIHJlY29yZCBhIGNoZWFwIHtAbGluayBSZWFkU3VtbWFyeU1hcmtlcn0gKHR5cGUgKyBzaXplXG4gKiAgIHByb3h5ICsgc2hvcnQgcHJldmlldykgaW5zdGVhZCBvZiB0aGUgY2xvbmVkIHZhbHVlLiBPKDEpLWlzaCBwZXIgcmVhZCDigJRcbiAqICAgbm8gdmFsdWUgY2xvbmUsIG5vIHNlcmlhbGl6YXRpb24gb2YgbGFyZ2Ugb2JqZWN0cy5cbiAqIC0gYCdvZmYnYCDigJQgcmVhZHMgYXJlIG5vdCByZWNvcmRlZCBhdCBhbGw7IGBzdGFnZVJlYWRzYCBpcyBhYnNlbnQgZnJvbSB0aGVcbiAqICAgc25hcHNob3QuIFplcm8gcGVyLXJlYWQgY29zdC4gVmFsdWVzIGFyZSBzdGlsbCByZWFkYWJsZSwgYW5kIHRoZVxuICogICBgU2NvcGVSZWNvcmRlci5vblJlYWRgIGV2ZW50IHN0aWxsIGZpcmVzIChpdCBwYXNzZXMgdGhlIGxpdmUgcmVmZXJlbmNlIGFuZFxuICogICBuZXZlciBjbG9uZWQpIOKAlCBzbyBuYXJyYXRpdmUgb3V0cHV0IGlzIGlkZW50aWNhbCBpbiBldmVyeSBtb2RlLiBUaGUgcG9saWN5XG4gKiAgIHNjb3BlcyBPTkxZIHRoZSBzbmFwc2hvdCdzIGBzdGFnZVJlYWRzYCBwYXlsb2FkLlxuICpcbiAqIFNldCB2aWEgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyByZWFkVHJhY2tpbmcgfSlgIG9yXG4gKiBgZXhlY3V0b3Iuc2V0UmVhZFRyYWNraW5nKG1vZGUpYCAoYmVmb3JlIGBydW4oKWApLlxuICpcbiAqIEFsaWFzIG9mIHRoZSBzaGFyZWQge0BsaW5rIFJldGVudGlvblBvbGljeX0gZmFtaWx5ICgjMTNjLUEpIOKAlCBrZXB0IGFzIHRoZVxuICogc2hpcHBlZCBwdWJsaWMgbmFtZSBmb3IgdGhlIHJlYWQgZGlhbC5cbiAqL1xuZXhwb3J0IHR5cGUgUmVhZFRyYWNraW5nTW9kZSA9IFJldGVudGlvblBvbGljeTtcblxuLyoqXG4gKiBQb2xpY3kgZm9yIGhvdyB0cmFja2VkIHdyaXRlcyBhcmUgcmVjb3JkZWQgaW50byBgU3RhZ2VTbmFwc2hvdC5zdGFnZVdyaXRlc2BcbiAqICgjMTNjLUEpIOKAlCB0aGUgc2libGluZyBvZiB7QGxpbmsgUmVhZFRyYWNraW5nTW9kZX0uXG4gKlxuICogLSBgJ2Z1bGwnYCAoZGVmYXVsdCkg4oCUIGV2ZXJ5IHRyYWNrZWQgd3JpdGUgYHN0cnVjdHVyZWRDbG9uZWBzIHRoZSB2YWx1ZSBpbnRvXG4gKiAgIHRoZSBzdGFnZSdzIHdyaXRlIHZpZXcuIEJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yLlxuICogLSBgJ3N1bW1hcnknYCDigJQgd3JpdGVzIHJlY29yZCBhIGNoZWFwIHtAbGluayBXcml0ZVN1bW1hcnlNYXJrZXJ9IGluc3RlYWQgb2ZcbiAqICAgdGhlIGNsb25lZCB2YWx1ZS5cbiAqIC0gYCdvZmYnYCDigJQgd3JpdGVzIGFyZSBub3QgcmVjb3JkZWQgYXQgYWxsOyBgc3RhZ2VXcml0ZXNgIGlzIGFic2VudCBmcm9tIHRoZVxuICogICBzbmFwc2hvdC4gVGhlIHdyaXRlcyB0aGVtc2VsdmVzIHN0aWxsIGNvbW1pdCB0byBzaGFyZWQgc3RhdGUgYW5kIHN0aWxsXG4gKiAgIGFwcGVhciBpbiB0aGUgY29tbWl0IGxvZyDigJQgb25seSB0aGUgcGVyLXN0YWdlIHNuYXBzaG90IGJvb2trZWVwaW5nIChhbmRcbiAqICAgdGhlcmVmb3JlIHRoZSBjb21taXQgb2JzZXJ2ZXIncyBtdXRhdGlvbnMgcGF5bG9hZCkgaXMgYWZmZWN0ZWQuIChUaGVcbiAqICAgY29tbWl0IGxvZydzIG93biB2YWx1ZSBlbmNvZGluZyBoYXMgaXRzIG93biBsb3NzbGVzcyBkaWFsIOKAlFxuICogICB7QGxpbmsgQ29tbWl0VmFsdWVzTW9kZX0sICMxM2MtQi4pXG4gKlxuICogU2V0IHZpYSBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IHdyaXRlVHJhY2tpbmcgfSlgIG9yXG4gKiBgZXhlY3V0b3Iuc2V0V3JpdGVUcmFja2luZyhtb2RlKWAgKGJlZm9yZSBgcnVuKClgKS4gU2VlXG4gKiBgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zLndyaXRlVHJhY2tpbmdgIGZvciB0aGUgZnVsbCBvYnNlcnZhYmxlLWNvbnNlcXVlbmNlXG4gKiBjb250cmFjdCAob25Db21taXQgcGF5bG9hZCwgcmVkYWN0aW9uIHByZWNlZGVuY2UsIHdoYXQgaXMgT1VUIG9mIHNjb3BlKS5cbiAqL1xuZXhwb3J0IHR5cGUgV3JpdGVUcmFja2luZ01vZGUgPSBSZXRlbnRpb25Qb2xpY3k7XG5cbi8vIOKUgOKUgCBTdGFnZSBTbmFwc2hvdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFNlcmlhbGlzYWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIHN0YWdlJ3Mgc3RhdGUgKGZvciBkZWJ1Z2dpbmcgLyB2aXN1YWxpc2F0aW9uKS4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlU25hcHNob3QgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBVbmlxdWUgcGVyLWV4ZWN1dGlvbi1zdGVwIGlkZW50aWZpZXIuIEZvcm1hdDogW3N1YmZsb3dQYXRoL11zdGFnZUlkI2V4ZWN1dGlvbkluZGV4ICovXG4gIHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGlzIHN0YWdlIGRvZXMgKGZyb20gYnVpbGRlcikuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIOKAlCBwcmVzZW50IHdoZW4gdGhpcyBzdGFnZSBpcyBhIHN1YmZsb3cgZW50cnkgcG9pbnQuICovXG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgaXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaXNGb3JrPzogYm9vbGVhbjtcbiAgLyoqIFVzZXItbGV2ZWwgd3JpdGVzIG1hZGUgYnkgdGhpcyBzdGFnZSAocHJlLW5hbWVzcGFjZSBrZXlzIOKGkiB2YWx1ZXMpLlxuICAgKiAgU2hhcGUgZGVwZW5kcyBvbiB7QGxpbmsgV3JpdGVUcmFja2luZ01vZGV9OiBjbG9uZWQgdmFsdWVzIHVuZGVyIGAnZnVsbCdgXG4gICAqICAoZGVmYXVsdCksIHtAbGluayBXcml0ZVN1bW1hcnlNYXJrZXJ9cyB1bmRlciBgJ3N1bW1hcnknYCwgYWJzZW50IHVuZGVyXG4gICAqICBgJ29mZidgLiBSZWRhY3RlZCB3cml0ZXMgc2hvdyBgJ1tSRURBQ1RFRF0nYCByZWdhcmRsZXNzIG9mIG1vZGUuICovXG4gIHN0YWdlV3JpdGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBVc2VyLWxldmVsIHJlYWRzIG1hZGUgYnkgdGhpcyBzdGFnZSAocHJlLW5hbWVzcGFjZSBrZXlzIOKGkiB2YWx1ZXMgYXQgcmVhZFxuICAgKiAgdGltZSkuIFNoYXBlIGRlcGVuZHMgb24ge0BsaW5rIFJlYWRUcmFja2luZ01vZGV9OiBjbG9uZWQgdmFsdWVzIHVuZGVyXG4gICAqICBgJ2Z1bGwnYCAoZGVmYXVsdCksIHtAbGluayBSZWFkU3VtbWFyeU1hcmtlcn1zIHVuZGVyIGAnc3VtbWFyeSdgLCBhYnNlbnRcbiAgICogIHVuZGVyIGAnb2ZmJ2AuICovXG4gIHN0YWdlUmVhZHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbG9nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGVycm9yczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIG1ldHJpY3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBldmFsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZsb3dNZXNzYWdlcz86IEZsb3dNZXNzYWdlW107XG4gIC8qKlxuICAgKiBFdmVyeSBhdHRlbXB0IG9mIHRoaXMgZXhlY3V0aW9uLCBpbiBvcmRlciDigJQgd2hlbiBpdCBzdGFydGVkLCBob3cgbG9uZyBpdCB0b29rLCBob3cgaXQgZW5kZWQsIGFuZCB0aGVcbiAgICogcmV0cnktb3Itc3RvcCBkZWNpc2lvbiB0aGF0IGZvbGxvd2VkIChgQXR0ZW1wdFJlY29yZGApOiB0aGUgc3RhZ2UncyBvd24gdW5kZXIgaXRzIHJldHJ5IHBvbGljeSwgYSBgdGltZW91dE1zYFxuICAgKiBvciBhIHJ1biBkZWFkbGluZSAoMTAuMSwgYGtpbmQ6ICdzdGFnZSdgKSwgYW5kIHRob3NlIG9mIHRoZSBjYWxscyBpdCBtYWRlIHRocm91Z2ggYHNjb3BlLiRjYWxsYCBhbmQgdGhlXG4gICAqIG91dHNpZGUgYXR0ZW1wdHMgaXQgcmVwb3J0ZWQgdGhyb3VnaCBgb2JzZXJ2ZWQoKWAgKFAyLCBga2luZDogJ2NhbGwnYCAvIGAnb2JzZXJ2ZWQnYCwgdGhlIGZpcnN0IDEwMDAg4oCUXG4gICAqIGBTdGFnZUNvbnRleHQgwrcgTUFYX0NBTExfUkVDT1JEU2ApLiBBYnNlbnQgd2hlbiB0aGVyZSBhcmUgbm9uZS4gVGhlIGNvbW1pdCBsb2cgbmV2ZXIgY2FycmllcyBhdHRlbXB0czogYVxuICAgKiByZXRyaWVkIHN0YWdlIGlzIHN0aWxsIE9ORSBidW5kbGUuXG4gICAqL1xuICBhdHRlbXB0cz86IHJlYWRvbmx5IEF0dGVtcHRSZWNvcmRbXTtcbiAgLyoqXG4gICAqIENhbGwgYW5kIG9ic2VydmVkIGF0dGVtcHQgcmVjb3JkcyB0aGlzIGV4ZWN1dGlvbiBtYWRlIHBhc3QgdGhlIGZpcnN0IDEwMDAg4oCUIGNvdW50ZWQsIG5vdCBrZXB0IChlYWNoIHN0aWxsXG4gICAqIGZpcmVkIGBvbkF0dGVtcHRgKS4gQWJzZW50IHdoZW4gbm9uZSB3ZXJlIGRyb3BwZWQuXG4gICAqL1xuICBhdHRlbXB0c0Ryb3BwZWQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgc2VyaWVzIGF0IGEgZ2xhbmNlIOKAlCBjb3VudHMgcGVyIG91dGNvbWUsIGFuZCBob3cgaXQgZW5kZWQuIFN0YW1wZWQgd2hlbiB0aGUgc2VyaWVzIGVuZHM6IGFic2VudCB3aGlsZSBpdFxuICAgKiBpcyBzdGlsbCBydW5uaW5nIChhIHNuYXBzaG90IHRha2VuIG1pZC1zdGFnZSkgYW5kIHdpdGhvdXQgYSBwb2xpY3kuXG4gICAqL1xuICBhdHRlbXB0U3VtbWFyeT86IEF0dGVtcHRTdW1tYXJ5O1xuICAvKipcbiAgICogV3JpdGVzIChhbmQgZW1pdHMpIGFuIGF0dGVtcHQgdHJpZWQgQUZURVIgaXQgaGFkIGVuZGVkIOKAlCB0aW1lZCBvdXQsIGFib3J0ZWQgb3IgZmFpbGVkIOKAlCBpbiB0aGUgb3JkZXIgdGhleSBjYW1lXG4gICAqIChQMWIpLiBFYWNoIHdhcyBkcm9wcGVkIGF0IHRoZSBzY29wZSwgc28gbm9uZSByZWFjaGVkIHRoZSBzdGFnZSdzIGJ1ZmZlciwgaXRzIGNvbW1pdCBvciBhIHJlY29yZGVyOyB0aGlzIGlzXG4gICAqIHRoZSByZWNvcmQgdGhhdCB0aGV5IHdlcmUgdHJpZWQg4oCUIHRoZSBmaXJzdCAxMDAgKGBNQVhfTEFURV9XUklURVNgKS4gQW4gYWJhbmRvbmVkIGZ1bmN0aW9uIGNhbiBrZWVwIHJ1bm5pbmdcbiAgICogYWZ0ZXIgdGhlIHJ1biBlbmRlZCwgc28gdGhlIGxpc3QgY2FuIGdyb3cgYWZ0ZXIgYSBzbmFwc2hvdCB3YXMgdGFrZW4uIE5hbWVzIG9ubHksIG5ldmVyIHZhbHVlcy4gQWJzZW50IHdoZW5cbiAgICogdGhlcmUgd2VyZSBub25lLlxuICAgKi9cbiAgbGF0ZVdyaXRlcz86IHJlYWRvbmx5IExhdGVXcml0ZVtdO1xuICAvKipcbiAgICogRml4ZWQtcmVhc29uIG1hcmtzIGNvbGxlY3RlZCBhcyB0aGlzIGV4ZWN1dGlvbiBydW5zLiBBYnNlbnQgd2hlbiBubyBmYWN0IG5lZWRzIGF0dGVudGlvbi5cbiAgICogQXR0ZW1wdCBldmlkZW5jZSB1c2VzIGNhbm9uaWNhbCBGb290dHJhY2UgYXR0ZW1wdCBJRHMuIFN1bW1hcnktb25seSBhbmQgc3RhZ2UtZXJyb3IgcHJvb2YgcmVzb2x2ZXMgd2l0aGluIFRISVMgbm9kZVxuICAgKiB0aHJvdWdoIGF0dGVtcHRTdW1tYXJ5LCBlcnJvcnM6c3RhZ2VFeGVjdXRpb25FcnJvciBvciBhdHRlbXB0c0Ryb3BwZWQuIFF1YWxpdHkgbWFya3MgYXJlIHJlYWQtdGltZSByZWNvcmRlciB3b3JrLlxuICAgKiBNYXJrcyByZXRhaW4gbm8gZXJyb3IgdGV4dCwgdmFsdWVzLCB0YXJnZXRzIG9yIGlkZW1wb3RlbmN5IGtleXM7IG9taXR0ZWQgcHJvb2YgaXMgZGlzY2xvc2VkIGFzIG5vdC1jb2xsZWN0ZWQuXG4gICAqL1xuICBhdHRlbnRpb24/OiByZWFkb25seSBBdHRlbnRpb25bXTtcbiAgbmV4dD86IFN0YWdlU25hcHNob3Q7XG4gIGNoaWxkcmVuPzogU3RhZ2VTbmFwc2hvdFtdO1xufTtcbiJdfQ==
|
|
@@ -140,6 +140,20 @@ export declare class ControlDepRecorder implements FlowRecorder {
|
|
|
140
140
|
getAttemptStop(runtimeStageId: string): ControlDecisionRecord | undefined;
|
|
141
141
|
/** All decisions recorded for the current run, in event order — deciders, selectors and attempt stops. */
|
|
142
142
|
getDecisions(): ControlDecisionRecord[];
|
|
143
|
+
/**
|
|
144
|
+
* Current-run control evidence for the native snapshot. Project only the
|
|
145
|
+
* stage identities collected during traversal; never walk the execution tree.
|
|
146
|
+
* Parentless roots cannot have a governing control edge.
|
|
147
|
+
*/
|
|
148
|
+
toSnapshot(): {
|
|
149
|
+
name: string;
|
|
150
|
+
data: {
|
|
151
|
+
decisions: ControlDecisionRecord[];
|
|
152
|
+
controlDeps: {
|
|
153
|
+
[k: string]: ControlDependency;
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
};
|
|
143
157
|
/** Reset all state (also happens automatically on runId change). */
|
|
144
158
|
clear(): void;
|
|
145
159
|
/** Convention 4: a new runId means a new run — reset transient state. */
|
|
@@ -206,6 +206,23 @@ export class ControlDepRecorder {
|
|
|
206
206
|
getDecisions() {
|
|
207
207
|
return [...this.decisions.values()];
|
|
208
208
|
}
|
|
209
|
+
/**
|
|
210
|
+
* Current-run control evidence for the native snapshot. Project only the
|
|
211
|
+
* stage identities collected during traversal; never walk the execution tree.
|
|
212
|
+
* Parentless roots cannot have a governing control edge.
|
|
213
|
+
*/
|
|
214
|
+
toSnapshot() {
|
|
215
|
+
const dependencies = [];
|
|
216
|
+
for (const runtimeStageId of this.parentOf.keys()) {
|
|
217
|
+
const dependency = this.lookup(runtimeStageId);
|
|
218
|
+
if (dependency)
|
|
219
|
+
dependencies.push([runtimeStageId, dependency]);
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
name: 'control-dependencies',
|
|
223
|
+
data: { decisions: this.getDecisions(), controlDeps: Object.fromEntries(dependencies) },
|
|
224
|
+
};
|
|
225
|
+
}
|
|
209
226
|
/** Reset all state (also happens automatically on runId change). */
|
|
210
227
|
clear() {
|
|
211
228
|
this.parentOf.clear();
|
|
@@ -257,4 +274,4 @@ function matchedRuleLabel(evidence) {
|
|
|
257
274
|
const rule = evidence.rules.find((r) => r.matched && r.branch === evidence.chosen) ?? evidence.rules.find((r) => r.matched);
|
|
258
275
|
return rule?.label;
|
|
259
276
|
}
|
|
260
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbERlcFJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9Db250cm9sRGVwUmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUVHO0FBYUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBb0NyRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFFakI7O0dBRUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsVUFBcUMsRUFBRTtJQUN4RSxPQUFPLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ3BCLEVBQUUsQ0FBUztJQUVwQiwwRUFBMEU7SUFDekQsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ3RELDJEQUEyRDtJQUMxQyxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7SUFDdEUsc0VBQXNFO0lBQ3JELHFCQUFxQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ25FLGlFQUFpRTtJQUN6RCxPQUFPLEdBQXNCLEVBQUUsQ0FBQztJQUN4Qyx1RUFBdUU7SUFDdEQsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDbkQsZ0VBQWdFO0lBQ3hELFNBQVMsQ0FBVTtJQUUzQixZQUFZLFVBQXFDLEVBQUU7UUFDakQsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxJQUFJLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFRCx5RUFBeUU7SUFFekUsVUFBVSxDQUFDLEtBQXdCO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0Is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OztHQUdHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxRQUFzQztJQUM5RCxJQUFJLENBQUMsUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2hDLE1BQU0sSUFBSSxHQUNSLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakgsT0FBTyxJQUFJLEVBQUUsS0FBSyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRyb2xEZXBSZWNvcmRlciDigJQgY29udHJvbC1kZXBlbmRlbmNlIHRyYWNraW5nIGZyb20gZmxvdyBldmVudHMgKFJGQy0wMDMgRDUpLlxuICpcbiAqIFRoZSBnYXAgdGhpcyBmaWxsczpcbiAqICAgVGhlIGJhY2t0cmFja2VyJ3MgYGNvbnRyb2xEZXBzYCBvcHRpb24gKEQzKSBuZWVkcyBhIGBDb250cm9sRGVwTG9va3VwYDpcbiAqICAgXCJ3aGljaCBkZWNpZGVyIGV4ZWN1dGlvbiBhbGxvd2VkIHRoaXMgc3RhZ2UgdG8gcnVuP1wiIFRoZSBlbmdpbmUga25vd3NcbiAqICAgdGhpcyBkdXJpbmcgdHJhdmVyc2FsIGJ1dCB0aGUgY29tbWl0IGxvZyBkb2Vzbid0IHJlY29yZCBpdCDigJQgY29udHJvbFxuICogICBmbG93IGlzIGEgRmxvd1JlY29yZGVyIGNvbmNlcm4uIFRoaXMgcmVjb3JkZXIgaXMgdGhlIHN0YW5kYXJkIHByb2R1Y2VyOlxuICogICBvbmUgc3Vic2NyaXB0aW9uLCBvbmUgbG9va3VwLCBwbHVnIGl0IHN0cmFpZ2h0IGludG8gYGNhdXNhbENoYWluYC5cbiAqXG4gKiBIb3cgaXQgd29ya3Mg4oCUIHR3byBjb3JyZWxhdGlvbiBzdHJ1Y3R1cmVzIGJ1aWx0IGR1cmluZyB0cmF2ZXJzYWw6XG4gKlxuICogICAxLiBgcGFyZW50T2ZgIOKAlCB0aGUgcnVudGltZSBhbmNlc3RvciBjaGFpbiwgZnJvbSBldmVyeSBzdGFnZSBldmVudCdzXG4gKiAgICAgIGB0cmF2ZXJzYWxDb250ZXh0LnBhcmVudFJ1bnRpbWVTdGFnZUlkYCAoUkZDLTAwMyBEMSkuIENyb3NzZXNcbiAqICAgICAgc3ViZmxvdyBib3VuZGFyaWVzOyBsb29wIHJlLWVudHJpZXMgc3RheSB1bmFtYmlndW91cyBiZWNhdXNlXG4gKiAgICAgIHJ1bnRpbWUgaWRzIGRpZmZlciBwZXIgaXRlcmF0aW9uLlxuICpcbiAqICAgMi4gYGJyYW5jaEVudHJ5VG9EZWNpc2lvbmAg4oCUIG9uIGBvbkRlY2lzaW9uYC9gb25TZWxlY3RlZGAgdGhlIGRlY2lzaW9uXG4gKiAgICAgIGlzIHJlY29yZGVkIGFzIFBFTkRJTkc7IHRoZSBuZXh0IHN0YWdlKHMpIGV4ZWN1dGVkIHdob3NlXG4gKiAgICAgIGBwYXJlbnRSdW50aW1lU3RhZ2VJZGAgSVMgdGhlIGRlY2lkZXIncyBydW50aW1lU3RhZ2VJZCBhcmUgaXRzXG4gKiAgICAgIGJyYW5jaCBlbnRyaWVzICgxIGZvciBhIGRlY2lkZXIsIE4gPSBzZWxlY3RlZC5sZW5ndGggZm9yIGFcbiAqICAgICAgc2VsZWN0b3IpLiBDb3JyZWxhdGlvbiBpcyBieSBwYXJlbnQtaWQgKyBjb3VudCwgTk9UIGJ5IHN0YWdlIG5hbWUg4oCUXG4gKiAgICAgIHN1YmZsb3ctbW91bnQgZXZlbnRzIGNhcnJ5IHBhdGgtcHJlZml4ZWQgaW5uZXItcm9vdCBuYW1lcyB0aGF0XG4gKiAgICAgIGRvbid0IG1hdGNoIGBGbG93RGVjaXNpb25FdmVudC5jaG9zZW5gLCBhbmQgc2VsZWN0b3JzIGVtaXQgYVxuICogICAgICBzeW50aGV0aWMgZm9yayBldmVudCBzaGFyaW5nIHRoZSBzZWxlY3RvcidzIG93biBydW50aW1lU3RhZ2VJZFxuICogICAgICAoZXhjbHVkZWQgdmlhIHRoZSBzZWxmLWlkIGd1YXJkKS4gQSBicmFuY2ggdGhhdCBUSFJPV1MgYmVmb3JlXG4gKiAgICAgIGNvbXBsZXRpbmcgY29uc3VtZXMgaXRzIHNsb3QgdmlhIGBvbkVycm9yYCwgc28gdGhlIHBvc3QtZmFuLW91dFxuICogICAgICBjb252ZXJnZW5jZSBzdGFnZSBpcyBuZXZlciBtaXNhdHRyaWJ1dGVkIGFzIGEgYnJhbmNoIGVudHJ5LlxuICpcbiAqICAgMy4gYXR0ZW1wdCBzdG9wcyAoMTAuMSkg4oCUIGBvbkF0dGVtcHRgOiBhIHN0YWdlIHdob3NlIHJldHJ5IHNlcmllcyBTVE9QUEVEXG4gKiAgICAgIChpdCBnYXZlIHVwLCBvciBhIGxhdGVyIGF0dGVtcHQgcGF1c2VkIG9yIHdhcyBhYm9ydGVkOyB0aGUgc2hhcmVkXG4gKiAgICAgIHByZWRpY2F0ZSBgcmVjb3JkZXIvYXR0ZW1wdFNlcmllcy50cyDCtyBpc1JldHJ5RXZpZGVuY2VgKSBtYWRlIGEgZGVjaXNpb24gb2YgaXRzXG4gKiAgICAgIG93biDigJQgdGhlIHJldHJ5LW9yLXN0b3AgZGVjaXNpb24sIGluIHRoZSBzaGFwZSBgZGVjaWRlKClgIHByb2R1Y2VzLiBJdFxuICogICAgICBpcyByZWNvcmRlZCBiZXNpZGUgdGhlIGRlY2lkZXJzIGFzIGBraW5kOiAnYXR0ZW1wdC1zdG9wJ2BcbiAqICAgICAgKGBnZXREZWNpc2lvbnMoKWAsIGBnZXRBdHRlbXB0U3RvcChpZClgKSwgYGNob3NlbjogJ3N0b3AnYCwgdGhlIHN0b3BcbiAqICAgICAgcmVhc29uIGFzIGl0cyBgcnVsZUxhYmVsYC4gSXQgaXMgTk9UIGEgYnJhbmNoIGVudHJ5OiBhIGNvbnRyb2wgZWRnZSBpblxuICogICAgICBgY2F1c2FsQ2hhaW5gIGxpbmtzIGEgc3RhZ2UgdG8gQU5PVEhFUiBleGVjdXRpb24gdGhhdCBnb3Zlcm5lZCBpdCwgYW5kXG4gKiAgICAgIHRoZSBzdG9wIGdvdmVybnMgdGhlIHN0YWdlIGl0c2VsZiDigJQgc28gYGxvb2t1cGAgaXMgdW5jaGFuZ2VkLCBhbmQgYVxuICogICAgICByZWFkZXIgd2Fsa2luZyBhIGZhaWxlZCBzdGFnZSByZWFkcyB0aGUgc3RvcCBvZmYgaXRzIGRlY2lzaW9uIHJlY29yZC5cbiAqXG4gKiAgIGBsb29rdXAocnVudGltZVN0YWdlSWQpYCB0aGVuIHdhbGtzIHRoZSBhbmNlc3RvciBjaGFpbiBmcm9tIHRoZSBzdGFnZVxuICogICB1cHdhcmQ7IHRoZSBmaXJzdCBhbmNlc3RvciAob3IgdGhlIHN0YWdlIGl0c2VsZikgcmVnaXN0ZXJlZCBhcyBhXG4gKiAgIGJyYW5jaCBlbnRyeSB5aWVsZHMgaXRzIGdvdmVybmluZyBkZWNpZGVyIOKAlCB0aGUgTkVBUkVTVCBkZWNpc2lvbi5cbiAqICAgTmVzdGVkIGRlY2lzaW9ucyBjb21wb3NlIG5hdHVyYWxseTogdGhlIGJhY2t0cmFja2VyIGV4cGFuZHMgdGhlXG4gKiAgIGRlY2lkZXIgbm9kZSBhbmQgYXNrcyBhZ2Fpbi5cbiAqXG4gKiBDb252ZW50aW9uIDQ6IHN0YXRlIHJlc2V0cyB3aGVuIGB0cmF2ZXJzYWxDb250ZXh0LnJ1bklkYCBjaGFuZ2VzIOKAlCBlYWNoXG4gKiBydW4gKGFuZCBlYWNoIHJlc3VtZSwgd2hpY2ggbWludHMgYSBmcmVzaCBydW5JZCkgc3RhcnRzIGNsZWFuLiBDb250cm9sXG4gKiBjaGFpbnMgdGhlcmVmb3JlIGRvIE5PVCBzdXJ2aXZlIGEgcGF1c2UvcmVzdW1lIGJvdW5kYXJ5OiBwb3N0LXJlc3VtZVxuICogc3RhZ2VzIGNhbm5vdCByZXNvbHZlIHByZS1wYXVzZSBkZWNpc2lvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGNvbnRyb2xEZXBSZWNvcmRlciB9IGZyb20gJ2Zvb3RwcmludGpzL3RyYWNlJztcbmltcG9ydCB7IGNhdXNhbENoYWluIH0gZnJvbSAnZm9vdHRyYWNlJztcbiAqXG4gKiBjb25zdCBjdHJsID0gY29udHJvbERlcFJlY29yZGVyKCk7XG4gKiBleGVjdXRvci5hdHRhY2hDb21iaW5lZFJlY29yZGVyKGN0cmwpOyAvLyBhdXRvLXJvdXRlcyB0byBGbG93UmVjb3JkZXIgY2hhbm5lbFxuICpcbiAqIGF3YWl0IGV4ZWN1dG9yLnJ1bih7IGlucHV0IH0pO1xuICpcbiAqIGNvbnN0IGRhZyA9IGNhdXNhbENoYWluKGNvbW1pdExvZywgJ2FwcHJvdmUjMicsIGtleXNSZWFkLCB7XG4gKiAgIGNvbnRyb2xEZXBzOiBjdHJsLmFzTG9va3VwKCksXG4gKiB9KTtcbiAqIGBgYFxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29udHJvbERlcGVuZGVuY3ksIENvbnRyb2xEZXBMb29rdXAgfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgdHlwZSB7IERlY2lzaW9uRXZpZGVuY2UsIFNlbGVjdGlvbkV2aWRlbmNlIH0gZnJvbSAnLi4vZGVjaWRlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgRmxvd0F0dGVtcHRFdmVudCxcbiAgRmxvd0RlY2lzaW9uRXZlbnQsXG4gIEZsb3dFcnJvckV2ZW50LFxuICBGbG93UmVjb3JkZXIsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbn0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgeyBpc1JldHJ5RXZpZGVuY2UgfSBmcm9tICcuL2F0dGVtcHRTZXJpZXMuanMnO1xuXG4vKiogT25lIHJlY29yZGVkIGRlY2lzaW9uL3NlbGVjdGlvbiBldmVudCAoUkZDLTAwMyBENSkuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyb2xEZWNpc2lvblJlY29yZCB7XG4gIC8qKlxuICAgKiBgJ2F0dGVtcHQtc3RvcCdgIGZvciBhIHN0YWdlJ3Mgb3duIHJldHJ5LW9yLXN0b3AgZGVjaXNpb24gdGhhdCBTVE9QUEVEIGl0cyBzZXJpZXMgKDEwLjEpIOKAlCB0aGVuXG4gICAqIGBkZWNpZGVyUnVudGltZVN0YWdlSWRgIGlzIHRoZSBzdGFnZSdzIGV4ZWN1dGlvbiwgYGNob3NlbmAgaXMgYCdzdG9wJ2AsIGBldmlkZW5jZWAgdGhlIGF0dGVtcHQncyBkZWNpc2lvbiBhbmRcbiAgICogYHJ1bGVMYWJlbGAgdGhlIHN0b3AgcmVhc29uLiBBYnNlbnQgZm9yIGEgZGVjaWRlciAvIHNlbGVjdG9yLlxuICAgKi9cbiAga2luZD86ICdhdHRlbXB0LXN0b3AnO1xuICAvKiogcnVudGltZVN0YWdlSWQgb2YgdGhlIGRlY2lkZXIvc2VsZWN0b3IgZXhlY3V0aW9uIHN0ZXAuICovXG4gIGRlY2lkZXJSdW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICAvKiogQ2hvc2VuIGJyYW5jaCBkaXNwbGF5IG5hbWUgKGRlY2lkZXIpIG9yIHNlbGVjdGVkIG5hbWVzIChzZWxlY3RvcikuICovXG4gIGNob3Nlbjogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBTdHJ1Y3R1cmVkIGV2aWRlbmNlIGZyb20gZGVjaWRlKCkvc2VsZWN0KCksIHdoZW4gdGhlIHN0YWdlIHVzZWQgdGhlbS4gKi9cbiAgZXZpZGVuY2U/OiBEZWNpc2lvbkV2aWRlbmNlIHwgU2VsZWN0aW9uRXZpZGVuY2U7XG4gIC8qKlxuICAgKiBUaGUgZGVjaWRlKCkgcnVsZSBsYWJlbCB0aGF0IHByb2R1Y2VkIHRoZSBkZWNpc2lvbiAoZS5nLiAnR29vZCBjcmVkaXQnKS5cbiAgICogRGVjaWRlcnMgb25seSDigJQgYSBzZWxlY3RvciBwaWNrcyBOIGJyYW5jaGVzIGFuZCBubyBzaW5nbGUgbGFiZWxcbiAgICogYXR0cmlidXRlcyB0byBhbGwgb2YgdGhlbSAoaW5zcGVjdCBgZXZpZGVuY2VgIGluc3RlYWQpLlxuICAgKi9cbiAgcnVsZUxhYmVsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyb2xEZXBSZWNvcmRlck9wdGlvbnMge1xuICAvKiogUmVjb3JkZXIgaWQuIERlZmF1bHRzIHRvIGBjb250cm9sLWRlcHMtTmAgKGF1dG8taW5jcmVtZW50ZWQpLiAqL1xuICBpZD86IHN0cmluZztcbn1cblxuLyoqIEEgZGVjaXNpb24gYXdhaXRpbmcgYnJhbmNoLWVudHJ5IGNvcnJlbGF0aW9uLiAqL1xuaW50ZXJmYWNlIFBlbmRpbmdEZWNpc2lvbiB7XG4gIGRlY2lkZXJJZDogc3RyaW5nO1xuICAvKiogSG93IG1hbnkgYnJhbmNoIGVudHJpZXMgYXJlIHN0aWxsIGV4cGVjdGVkIChkZWNpZGVyOiAxLCBzZWxlY3RvcjogTikuICovXG4gIHJlbWFpbmluZzogbnVtYmVyO1xufVxuXG5sZXQgX2NvdW50ZXIgPSAwO1xuXG4vKipcbiAqIEZhY3Rvcnkg4oCUIG1hdGNoZXMgdGhlIGB0b3BvbG9neVJlY29yZGVyKClgIC8gYGluT3V0UmVjb3JkZXIoKWAgc3R5bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cm9sRGVwUmVjb3JkZXIob3B0aW9uczogQ29udHJvbERlcFJlY29yZGVyT3B0aW9ucyA9IHt9KTogQ29udHJvbERlcFJlY29yZGVyIHtcbiAgcmV0dXJuIG5ldyBDb250cm9sRGVwUmVjb3JkZXIob3B0aW9ucyk7XG59XG5cbi8qKlxuICogU3RhdGVmdWwgYWNjdW11bGF0b3IgdGhhdCB3YXRjaGVzIEZsb3dSZWNvcmRlciBldmVudHMgYW5kIGFuc3dlcnNcbiAqIFwid2hpY2ggZGVjaXNpb24gYWxsb3dlZCB0aGlzIHN0YWdlIHRvIHJ1bj9cIiBBdHRhY2ggdmlhXG4gKiBgZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihyZWNvcmRlcilgIChvciBgYXR0YWNoRmxvd1JlY29yZGVyYCkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb250cm9sRGVwUmVjb3JkZXIgaW1wbGVtZW50cyBGbG93UmVjb3JkZXIge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKiBSdW50aW1lIGFuY2VzdG9yIGNoYWluOiBydW50aW1lU3RhZ2VJZCDihpIgcGFyZW50UnVudGltZVN0YWdlSWQgKEQxKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnRPZiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIC8qKiBSZWNvcmRlZCBkZWNpc2lvbnMsIGtleWVkIGJ5IGRlY2lkZXIgcnVudGltZVN0YWdlSWQuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVjaXNpb25zID0gbmV3IE1hcDxzdHJpbmcsIENvbnRyb2xEZWNpc2lvblJlY29yZD4oKTtcbiAgLyoqIEJyYW5jaC1lbnRyeSBydW50aW1lU3RhZ2VJZCDihpIgZ292ZXJuaW5nIGRlY2lkZXIgcnVudGltZVN0YWdlSWQuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYnJhbmNoRW50cnlUb0RlY2lzaW9uID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgLyoqIERlY2lzaW9ucyB3aG9zZSBicmFuY2ggZW50cmllcyBoYXZlIG5vdCBhbGwgYmVlbiBzZWVuIHlldC4gKi9cbiAgcHJpdmF0ZSBwZW5kaW5nOiBQZW5kaW5nRGVjaXNpb25bXSA9IFtdO1xuICAvKiogU3RhZ2UgaWRzIHRoYXQgYWxyZWFkeSBjb25zdW1lZCBhIHBlbmRpbmcgc2xvdCAoZW50cnkgT1IgZXJyb3IpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnN1bWVkU2xvdHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgLyoqIENvbnZlbnRpb24gNCDigJQgcnVuSWQgb2YgdGhlIHJ1biBjdXJyZW50bHkgYmVpbmcgcmVjb3JkZWQuICovXG4gIHByaXZhdGUgbGFzdFJ1bklkPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbnRyb2xEZXBSZWNvcmRlck9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuaWQgPSBvcHRpb25zLmlkID8/IGBjb250cm9sLWRlcHMtJHsrK19jb3VudGVyfWA7XG4gIH1cblxuICAvLyDilIDilIAgRmxvd1JlY29yZGVyIGhvb2tzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uRGVjaXNpb24oZXZlbnQ6IEZsb3dEZWNpc2lvbkV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dDtcbiAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgIHRoaXMucmVzZXRJZk5ld1J1bihjdHgucnVuSWQpO1xuXG4gICAgY29uc3QgZGVjaWRlcklkID0gY3R4LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGNvbnN0IHJ1bGVMYWJlbCA9IG1hdGNoZWRSdWxlTGFiZWwoZXZlbnQuZXZpZGVuY2UpO1xuICAgIHRoaXMuZGVjaXNpb25zLnNldChkZWNpZGVySWQsIHtcbiAgICAgIGRlY2lkZXJSdW50aW1lU3RhZ2VJZDogZGVjaWRlcklkLFxuICAgICAgY2hvc2VuOiBldmVudC5jaG9zZW4sXG4gICAgICAuLi4oZXZlbnQuZXZpZGVuY2UgJiYgeyBldmlkZW5jZTogZXZlbnQuZXZpZGVuY2UgfSksXG4gICAgICAuLi4ocnVsZUxhYmVsICE9PSB1bmRlZmluZWQgJiYgeyBydWxlTGFiZWwgfSksXG4gICAgfSk7XG4gICAgdGhpcy5wZW5kaW5nLnB1c2goeyBkZWNpZGVySWQsIHJlbWFpbmluZzogMSB9KTtcbiAgfVxuXG4gIG9uQXR0ZW1wdChldmVudDogRmxvd0F0dGVtcHRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ7XG4gICAgY29uc3QgeyByZWNvcmQgfSA9IGV2ZW50O1xuICAgIGlmICghY3R4IHx8IHJlY29yZC5uZXh0ICE9PSAnc3RvcCcgfHwgIWlzUmV0cnlFdmlkZW5jZShyZWNvcmQpKSByZXR1cm47XG4gICAgdGhpcy5yZXNldElmTmV3UnVuKGN0eC5ydW5JZCk7XG4gICAgdGhpcy5kZWNpc2lvbnMuc2V0KHJlY29yZC5zZXJpZXMsIHtcbiAgICAgIGtpbmQ6ICdhdHRlbXB0LXN0b3AnLFxuICAgICAgZGVjaWRlclJ1bnRpbWVTdGFnZUlkOiByZWNvcmQuc2VyaWVzLFxuICAgICAgY2hvc2VuOiAnc3RvcCcsXG4gICAgICBldmlkZW5jZTogcmVjb3JkLmRlY2lzaW9uLFxuICAgICAgcnVsZUxhYmVsOiByZWNvcmQucmVhc29uLFxuICAgIH0pO1xuICB9XG5cbiAgb25TZWxlY3RlZChldmVudDogRmxvd1NlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHggPSBldmVudC50cmF2ZXJzYWxDb250ZXh0O1xuICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgdGhpcy5yZXNldElmTmV3UnVuKGN0eC5ydW5JZCk7XG4gICAgaWYgKGV2ZW50LnNlbGVjdGVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuOyAvLyBub3RoaW5nIHNlbGVjdGVkIOKGkiBub3RoaW5nIGdvdmVybmVkXG5cbiAgICBjb25zdCBkZWNpZGVySWQgPSBjdHgucnVudGltZVN0YWdlSWQ7XG4gICAgdGhpcy5kZWNpc2lvbnMuc2V0KGRlY2lkZXJJZCwge1xuICAgICAgZGVjaWRlclJ1bnRpbWVTdGFnZUlkOiBkZWNpZGVySWQsXG4gICAgICBjaG9zZW46IFsuLi5ldmVudC5zZWxlY3RlZF0sXG4gICAgICAuLi4oZXZlbnQuZXZpZGVuY2UgJiYgeyBldmlkZW5jZTogZXZlbnQuZXZpZGVuY2UgfSksXG4gICAgfSk7XG4gICAgdGhpcy5wZW5kaW5nLnB1c2goeyBkZWNpZGVySWQsIHJlbWFpbmluZzogZXZlbnQuc2VsZWN0ZWQubGVuZ3RoIH0pO1xuICB9XG5cbiAgb25TdGFnZUV4ZWN1dGVkKGV2ZW50OiBGbG93U3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ7XG4gICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICB0aGlzLnJlc2V0SWZOZXdSdW4oY3R4LnJ1bklkKTtcblxuICAgIGNvbnN0IHsgcnVudGltZVN0YWdlSWQsIHBhcmVudFJ1bnRpbWVTdGFnZUlkIH0gPSBjdHg7XG4gICAgaWYgKHBhcmVudFJ1bnRpbWVTdGFnZUlkKSB7XG4gICAgICB0aGlzLnBhcmVudE9mLnNldChydW50aW1lU3RhZ2VJZCwgcGFyZW50UnVudGltZVN0YWdlSWQpO1xuICAgICAgdGhpcy5jb25zdW1lUGVuZGluZ1Nsb3QocnVudGltZVN0YWdlSWQsIHBhcmVudFJ1bnRpbWVTdGFnZUlkLCAvKiByZWdpc3RlciAqLyB0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQSBicmFuY2ggdGhhdCB0aHJvd3MgbmV2ZXIgZmlyZXMgYG9uU3RhZ2VFeGVjdXRlZGAg4oCUIHdpdGhvdXQgdGhpcyBob29rXG4gICAqIGl0cyBwZW5kaW5nIHNsb3Qgd291bGQgbGVhayBhbmQgdGhlIHBvc3QtZmFuLW91dCBjb252ZXJnZW5jZSBzdGFnZVxuICAgKiAod2hvc2UgY29udGV4dCBhbHNvIGNoYWlucyB0byB0aGUgc2VsZWN0b3IpIHdvdWxkIGJlIG1pc2F0dHJpYnV0ZWQgYXNcbiAgICogYSBicmFuY2ggZW50cnkgdW5kZXIgYmVzdC1lZmZvcnQgKGBmYWlsRmFzdDogZmFsc2VgKSBmYW4tb3V0cy5cbiAgICovXG4gIG9uRXJyb3IoZXZlbnQ6IEZsb3dFcnJvckV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dDtcbiAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgIHRoaXMucmVzZXRJZk5ld1J1bihjdHgucnVuSWQpO1xuICAgIGlmIChjdHgucGFyZW50UnVudGltZVN0YWdlSWQpIHtcbiAgICAgIC8vIFJlY29yZCB0aGUgY2hhaW4gQU5EIGF0dHJpYnV0ZSB0aGUgZmFpbGVkIHN0YWdlIHRvIGl0cyBkZWNpc2lvbiDigJRcbiAgICAgIC8vIHRoZSBzdGFnZSBSQU4gKGFuZCBtYXkgaGF2ZSBjb21taXR0ZWQgcGFydGlhbCB3cml0ZXMpIGJlY2F1c2UgdGhlXG4gICAgICAvLyBkZWNpc2lvbiBjaG9zZSBpdDsgZmFpbGluZyBhZnRlcndhcmRzIGRvZXNuJ3QgdW5kbyB0aGUgZGVwZW5kZW5jeS5cbiAgICAgIHRoaXMucGFyZW50T2Yuc2V0KGN0eC5ydW50aW1lU3RhZ2VJZCwgY3R4LnBhcmVudFJ1bnRpbWVTdGFnZUlkKTtcbiAgICAgIHRoaXMuY29uc3VtZVBlbmRpbmdTbG90KGN0eC5ydW50aW1lU3RhZ2VJZCwgY3R4LnBhcmVudFJ1bnRpbWVTdGFnZUlkLCAvKiByZWdpc3RlciAqLyB0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgUXVlcmllcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgTkVBUkVTVCBnb3Zlcm5pbmcgZGVjaXNpb24gZm9yIGFuIGV4ZWN1dGlvbiBzdGVwOiB3YWxrcyB0aGVcbiAgICogcnVudGltZSBhbmNlc3RvciBjaGFpbiAodGhlIHN0ZXAgaXRzZWxmIGZpcnN0KSB1bnRpbCBpdCBoaXRzIGFcbiAgICogcmVnaXN0ZXJlZCBicmFuY2ggZW50cnkuIGB1bmRlZmluZWRgIHdoZW4gdGhlIHN0ZXAgaXMgbm90IGRvd25zdHJlYW0gb2ZcbiAgICogYW55IHJlY29yZGVkIGRlY2lzaW9uLlxuICAgKi9cbiAgbG9va3VwKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBDb250cm9sRGVwZW5kZW5jeSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGxldCBjdXI6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHJ1bnRpbWVTdGFnZUlkO1xuICAgIHdoaWxlIChjdXIgIT09IHVuZGVmaW5lZCAmJiAhc2Vlbi5oYXMoY3VyKSkge1xuICAgICAgc2Vlbi5hZGQoY3VyKTtcbiAgICAgIGNvbnN0IGRlY2lkZXJJZCA9IHRoaXMuYnJhbmNoRW50cnlUb0RlY2lzaW9uLmdldChjdXIpO1xuICAgICAgaWYgKGRlY2lkZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuZGVjaXNpb25zLmdldChkZWNpZGVySWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRlY2lkZXJJZCxcbiAgICAgICAgICAuLi4ocmVjb3JkPy5ydWxlTGFiZWwgIT09IHVuZGVmaW5lZCAmJiB7IGxhYmVsOiByZWNvcmQucnVsZUxhYmVsIH0pLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY3VyID0gdGhpcy5wYXJlbnRPZi5nZXQoY3VyKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBUaGUgbG9va3VwIGFzIGEgYmFyZSBmdW5jdGlvbiDigJQgcGx1ZyBpbnRvIGBjYXVzYWxDaGFpbiguLi4sIHsgY29udHJvbERlcHMgfSlgLiAqL1xuICBhc0xvb2t1cCgpOiBDb250cm9sRGVwTG9va3VwIHtcbiAgICByZXR1cm4gKHJ1bnRpbWVTdGFnZUlkKSA9PiB0aGlzLmxvb2t1cChydW50aW1lU3RhZ2VJZCk7XG4gIH1cblxuICAvKiogVGhlIGF0dGVtcHQtc3RvcCBkZWNpc2lvbiBvZiBhIHN0YWdlIGV4ZWN1dGlvbiB3aG9zZSByZXRyeSBzZXJpZXMgc3RvcHBlZCwgaWYgaXQgZGlkLiAqL1xuICBnZXRBdHRlbXB0U3RvcChydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogQ29udHJvbERlY2lzaW9uUmVjb3JkIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWNvcmQgPSB0aGlzLmRlY2lzaW9ucy5nZXQocnVudGltZVN0YWdlSWQpO1xuICAgIHJldHVybiByZWNvcmQ/LmtpbmQgPT09ICdhdHRlbXB0LXN0b3AnID8gcmVjb3JkIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIEFsbCBkZWNpc2lvbnMgcmVjb3JkZWQgZm9yIHRoZSBjdXJyZW50IHJ1biwgaW4gZXZlbnQgb3JkZXIg4oCUIGRlY2lkZXJzLCBzZWxlY3RvcnMgYW5kIGF0dGVtcHQgc3RvcHMuICovXG4gIGdldERlY2lzaW9ucygpOiBDb250cm9sRGVjaXNpb25SZWNvcmRbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmRlY2lzaW9ucy52YWx1ZXMoKV07XG4gIH1cblxuICAvKiogUmVzZXQgYWxsIHN0YXRlIChhbHNvIGhhcHBlbnMgYXV0b21hdGljYWxseSBvbiBydW5JZCBjaGFuZ2UpLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnBhcmVudE9mLmNsZWFyKCk7XG4gICAgdGhpcy5kZWNpc2lvbnMuY2xlYXIoKTtcbiAgICB0aGlzLmJyYW5jaEVudHJ5VG9EZWNpc2lvbi5jbGVhcigpO1xuICAgIHRoaXMucGVuZGluZyA9IFtdO1xuICAgIHRoaXMuY29uc3VtZWRTbG90cy5jbGVhcigpO1xuICB9XG5cbiAgLy8g4pSA4pSAIEludGVybmFscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogQ29udmVudGlvbiA0OiBhIG5ldyBydW5JZCBtZWFucyBhIG5ldyBydW4g4oCUIHJlc2V0IHRyYW5zaWVudCBzdGF0ZS4gKi9cbiAgcHJpdmF0ZSByZXNldElmTmV3UnVuKHJ1bklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAocnVuSWQgPT09IHRoaXMubGFzdFJ1bklkKSByZXR1cm47XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIHRoaXMubGFzdFJ1bklkID0gcnVuSWQ7XG4gIH1cblxuICAvKipcbiAgICogSWYgYHBhcmVudFJ1bnRpbWVTdGFnZUlkYCBpcyBhIGRlY2lkZXIgd2l0aCBhbiB1bm1hdGNoZWQgcGVuZGluZyBzbG90LFxuICAgKiBjb25zdW1lIG9uZS4gYHJlZ2lzdGVyYCBjb250cm9scyB3aGV0aGVyIHRoZSBzdGFnZSBpcyByZWNvcmRlZCBhcyBhXG4gICAqIGJyYW5jaCBlbnRyeSAoc3RhZ2UgZXhlY3V0ZWQvZXJyb3JlZCkg4oCUIGJvdGggcGF0aHMgY29uc3VtZSB0aGUgc2xvdCBzb1xuICAgKiBjb3VudHMgc3RheSBleGFjdCBldmVuIHdoZW4gYSBzdGFnZSBwcm9kdWNlcyBib3RoIGV2ZW50cy5cbiAgICovXG4gIHByaXZhdGUgY29uc3VtZVBlbmRpbmdTbG90KHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsIHBhcmVudFJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsIHJlZ2lzdGVyOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHJ1bnRpbWVTdGFnZUlkID09PSBwYXJlbnRSdW50aW1lU3RhZ2VJZCkgcmV0dXJuOyAvLyBzeW50aGV0aWMgc2VsZi1ldmVudHNcbiAgICBpZiAodGhpcy5jb25zdW1lZFNsb3RzLmhhcyhydW50aW1lU3RhZ2VJZCkpIHJldHVybjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wZW5kaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwID0gdGhpcy5wZW5kaW5nW2ldO1xuICAgICAgaWYgKHAuZGVjaWRlcklkICE9PSBwYXJlbnRSdW50aW1lU3RhZ2VJZCkgY29udGludWU7XG5cbiAgICAgIHRoaXMuY29uc3VtZWRTbG90cy5hZGQocnVudGltZVN0YWdlSWQpO1xuICAgICAgaWYgKHJlZ2lzdGVyKSB0aGlzLmJyYW5jaEVudHJ5VG9EZWNpc2lvbi5zZXQocnVudGltZVN0YWdlSWQsIHAuZGVjaWRlcklkKTtcbiAgICAgIHAucmVtYWluaW5nLS07XG4gICAgICBpZiAocC5yZW1haW5pbmcgPD0gMCkgdGhpcy5wZW5kaW5nLnNwbGljZShpLCAxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgZGVjaWRlKCkgcnVsZSBsYWJlbCB0aGF0IHByb2R1Y2VkIHRoZSBkZWNpc2lvbjogdGhlIG1hdGNoZWQgcnVsZVxuICogbWFwcGluZyB0byB0aGUgY2hvc2VuIGJyYW5jaCAoZmlyc3QgbWF0Y2hlZCBydWxlIGFzIGZhbGxiYWNrKS5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlZFJ1bGVMYWJlbChldmlkZW5jZTogRGVjaXNpb25FdmlkZW5jZSB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghZXZpZGVuY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJ1bGUgPVxuICAgIGV2aWRlbmNlLnJ1bGVzLmZpbmQoKHIpID0+IHIubWF0Y2hlZCAmJiByLmJyYW5jaCA9PT0gZXZpZGVuY2UuY2hvc2VuKSA/PyBldmlkZW5jZS5ydWxlcy5maW5kKChyKSA9PiByLm1hdGNoZWQpO1xuICByZXR1cm4gcnVsZT8ubGFiZWw7XG59XG4iXX0=
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbERlcFJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9Db250cm9sRGVwUmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUVHO0FBYUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBb0NyRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFFakI7O0dBRUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsVUFBcUMsRUFBRTtJQUN4RSxPQUFPLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ3BCLEVBQUUsQ0FBUztJQUVwQiwwRUFBMEU7SUFDekQsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ3RELDJEQUEyRDtJQUMxQyxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7SUFDdEUsc0VBQXNFO0lBQ3JELHFCQUFxQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ25FLGlFQUFpRTtJQUN6RCxPQUFPLEdBQXNCLEVBQUUsQ0FBQztJQUN4Qyx1RUFBdUU7SUFDdEQsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDbkQsZ0VBQWdFO0lBQ3hELFNBQVMsQ0FBVTtJQUUzQixZQUFZLFVBQXFDLEVBQUU7UUFDakQsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxJQUFJLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFRCx5RUFBeUU7SUFFekUsVUFBVSxDQUFDLEtBQXdCO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0Is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Q0FBQztZQUM3QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxDQUFDLFNBQVMsS0FBSyxvQkFBb0I7Z0JBQUUsU0FBUztZQUVuRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN2QyxJQUFJLFFBQVE7Z0JBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDO2dCQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRCxPQUFPO1FBQ1QsQ0FBQztJQUNILENBQUM7Q0FDRjtBQUVEOzs7R0FHRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsUUFBc0M7SUFDOUQsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNoQyxNQUFNLElBQUksR0FDUixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pILE9BQU8sSUFBSSxFQUFFLEtBQUssQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250cm9sRGVwUmVjb3JkZXIg4oCUIGNvbnRyb2wtZGVwZW5kZW5jZSB0cmFja2luZyBmcm9tIGZsb3cgZXZlbnRzIChSRkMtMDAzIEQ1KS5cbiAqXG4gKiBUaGUgZ2FwIHRoaXMgZmlsbHM6XG4gKiAgIFRoZSBiYWNrdHJhY2tlcidzIGBjb250cm9sRGVwc2Agb3B0aW9uIChEMykgbmVlZHMgYSBgQ29udHJvbERlcExvb2t1cGA6XG4gKiAgIFwid2hpY2ggZGVjaWRlciBleGVjdXRpb24gYWxsb3dlZCB0aGlzIHN0YWdlIHRvIHJ1bj9cIiBUaGUgZW5naW5lIGtub3dzXG4gKiAgIHRoaXMgZHVyaW5nIHRyYXZlcnNhbCBidXQgdGhlIGNvbW1pdCBsb2cgZG9lc24ndCByZWNvcmQgaXQg4oCUIGNvbnRyb2xcbiAqICAgZmxvdyBpcyBhIEZsb3dSZWNvcmRlciBjb25jZXJuLiBUaGlzIHJlY29yZGVyIGlzIHRoZSBzdGFuZGFyZCBwcm9kdWNlcjpcbiAqICAgb25lIHN1YnNjcmlwdGlvbiwgb25lIGxvb2t1cCwgcGx1ZyBpdCBzdHJhaWdodCBpbnRvIGBjYXVzYWxDaGFpbmAuXG4gKlxuICogSG93IGl0IHdvcmtzIOKAlCB0d28gY29ycmVsYXRpb24gc3RydWN0dXJlcyBidWlsdCBkdXJpbmcgdHJhdmVyc2FsOlxuICpcbiAqICAgMS4gYHBhcmVudE9mYCDigJQgdGhlIHJ1bnRpbWUgYW5jZXN0b3IgY2hhaW4sIGZyb20gZXZlcnkgc3RhZ2UgZXZlbnQnc1xuICogICAgICBgdHJhdmVyc2FsQ29udGV4dC5wYXJlbnRSdW50aW1lU3RhZ2VJZGAgKFJGQy0wMDMgRDEpLiBDcm9zc2VzXG4gKiAgICAgIHN1YmZsb3cgYm91bmRhcmllczsgbG9vcCByZS1lbnRyaWVzIHN0YXkgdW5hbWJpZ3VvdXMgYmVjYXVzZVxuICogICAgICBydW50aW1lIGlkcyBkaWZmZXIgcGVyIGl0ZXJhdGlvbi5cbiAqXG4gKiAgIDIuIGBicmFuY2hFbnRyeVRvRGVjaXNpb25gIOKAlCBvbiBgb25EZWNpc2lvbmAvYG9uU2VsZWN0ZWRgIHRoZSBkZWNpc2lvblxuICogICAgICBpcyByZWNvcmRlZCBhcyBQRU5ESU5HOyB0aGUgbmV4dCBzdGFnZShzKSBleGVjdXRlZCB3aG9zZVxuICogICAgICBgcGFyZW50UnVudGltZVN0YWdlSWRgIElTIHRoZSBkZWNpZGVyJ3MgcnVudGltZVN0YWdlSWQgYXJlIGl0c1xuICogICAgICBicmFuY2ggZW50cmllcyAoMSBmb3IgYSBkZWNpZGVyLCBOID0gc2VsZWN0ZWQubGVuZ3RoIGZvciBhXG4gKiAgICAgIHNlbGVjdG9yKS4gQ29ycmVsYXRpb24gaXMgYnkgcGFyZW50LWlkICsgY291bnQsIE5PVCBieSBzdGFnZSBuYW1lIOKAlFxuICogICAgICBzdWJmbG93LW1vdW50IGV2ZW50cyBjYXJyeSBwYXRoLXByZWZpeGVkIGlubmVyLXJvb3QgbmFtZXMgdGhhdFxuICogICAgICBkb24ndCBtYXRjaCBgRmxvd0RlY2lzaW9uRXZlbnQuY2hvc2VuYCwgYW5kIHNlbGVjdG9ycyBlbWl0IGFcbiAqICAgICAgc3ludGhldGljIGZvcmsgZXZlbnQgc2hhcmluZyB0aGUgc2VsZWN0b3IncyBvd24gcnVudGltZVN0YWdlSWRcbiAqICAgICAgKGV4Y2x1ZGVkIHZpYSB0aGUgc2VsZi1pZCBndWFyZCkuIEEgYnJhbmNoIHRoYXQgVEhST1dTIGJlZm9yZVxuICogICAgICBjb21wbGV0aW5nIGNvbnN1bWVzIGl0cyBzbG90IHZpYSBgb25FcnJvcmAsIHNvIHRoZSBwb3N0LWZhbi1vdXRcbiAqICAgICAgY29udmVyZ2VuY2Ugc3RhZ2UgaXMgbmV2ZXIgbWlzYXR0cmlidXRlZCBhcyBhIGJyYW5jaCBlbnRyeS5cbiAqXG4gKiAgIDMuIGF0dGVtcHQgc3RvcHMgKDEwLjEpIOKAlCBgb25BdHRlbXB0YDogYSBzdGFnZSB3aG9zZSByZXRyeSBzZXJpZXMgU1RPUFBFRFxuICogICAgICAoaXQgZ2F2ZSB1cCwgb3IgYSBsYXRlciBhdHRlbXB0IHBhdXNlZCBvciB3YXMgYWJvcnRlZDsgdGhlIHNoYXJlZFxuICogICAgICBwcmVkaWNhdGUgYHJlY29yZGVyL2F0dGVtcHRTZXJpZXMudHMgwrcgaXNSZXRyeUV2aWRlbmNlYCkgbWFkZSBhIGRlY2lzaW9uIG9mIGl0c1xuICogICAgICBvd24g4oCUIHRoZSByZXRyeS1vci1zdG9wIGRlY2lzaW9uLCBpbiB0aGUgc2hhcGUgYGRlY2lkZSgpYCBwcm9kdWNlcy4gSXRcbiAqICAgICAgaXMgcmVjb3JkZWQgYmVzaWRlIHRoZSBkZWNpZGVycyBhcyBga2luZDogJ2F0dGVtcHQtc3RvcCdgXG4gKiAgICAgIChgZ2V0RGVjaXNpb25zKClgLCBgZ2V0QXR0ZW1wdFN0b3AoaWQpYCksIGBjaG9zZW46ICdzdG9wJ2AsIHRoZSBzdG9wXG4gKiAgICAgIHJlYXNvbiBhcyBpdHMgYHJ1bGVMYWJlbGAuIEl0IGlzIE5PVCBhIGJyYW5jaCBlbnRyeTogYSBjb250cm9sIGVkZ2UgaW5cbiAqICAgICAgYGNhdXNhbENoYWluYCBsaW5rcyBhIHN0YWdlIHRvIEFOT1RIRVIgZXhlY3V0aW9uIHRoYXQgZ292ZXJuZWQgaXQsIGFuZFxuICogICAgICB0aGUgc3RvcCBnb3Zlcm5zIHRoZSBzdGFnZSBpdHNlbGYg4oCUIHNvIGBsb29rdXBgIGlzIHVuY2hhbmdlZCwgYW5kIGFcbiAqICAgICAgcmVhZGVyIHdhbGtpbmcgYSBmYWlsZWQgc3RhZ2UgcmVhZHMgdGhlIHN0b3Agb2ZmIGl0cyBkZWNpc2lvbiByZWNvcmQuXG4gKlxuICogICBgbG9va3VwKHJ1bnRpbWVTdGFnZUlkKWAgdGhlbiB3YWxrcyB0aGUgYW5jZXN0b3IgY2hhaW4gZnJvbSB0aGUgc3RhZ2VcbiAqICAgdXB3YXJkOyB0aGUgZmlyc3QgYW5jZXN0b3IgKG9yIHRoZSBzdGFnZSBpdHNlbGYpIHJlZ2lzdGVyZWQgYXMgYVxuICogICBicmFuY2ggZW50cnkgeWllbGRzIGl0cyBnb3Zlcm5pbmcgZGVjaWRlciDigJQgdGhlIE5FQVJFU1QgZGVjaXNpb24uXG4gKiAgIE5lc3RlZCBkZWNpc2lvbnMgY29tcG9zZSBuYXR1cmFsbHk6IHRoZSBiYWNrdHJhY2tlciBleHBhbmRzIHRoZVxuICogICBkZWNpZGVyIG5vZGUgYW5kIGFza3MgYWdhaW4uXG4gKlxuICogQ29udmVudGlvbiA0OiBzdGF0ZSByZXNldHMgd2hlbiBgdHJhdmVyc2FsQ29udGV4dC5ydW5JZGAgY2hhbmdlcyDigJQgZWFjaFxuICogcnVuIChhbmQgZWFjaCByZXN1bWUsIHdoaWNoIG1pbnRzIGEgZnJlc2ggcnVuSWQpIHN0YXJ0cyBjbGVhbi4gQ29udHJvbFxuICogY2hhaW5zIHRoZXJlZm9yZSBkbyBOT1Qgc3Vydml2ZSBhIHBhdXNlL3Jlc3VtZSBib3VuZGFyeTogcG9zdC1yZXN1bWVcbiAqIHN0YWdlcyBjYW5ub3QgcmVzb2x2ZSBwcmUtcGF1c2UgZGVjaXNpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBjb250cm9sRGVwUmVjb3JkZXIgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG5pbXBvcnQgeyBjYXVzYWxDaGFpbiB9IGZyb20gJ2Zvb3R0cmFjZSc7XG4gKlxuICogY29uc3QgY3RybCA9IGNvbnRyb2xEZXBSZWNvcmRlcigpO1xuICogZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihjdHJsKTsgLy8gYXV0by1yb3V0ZXMgdG8gRmxvd1JlY29yZGVyIGNoYW5uZWxcbiAqXG4gKiBhd2FpdCBleGVjdXRvci5ydW4oeyBpbnB1dCB9KTtcbiAqXG4gKiBjb25zdCBkYWcgPSBjYXVzYWxDaGFpbihjb21taXRMb2csICdhcHByb3ZlIzInLCBrZXlzUmVhZCwge1xuICogICBjb250cm9sRGVwczogY3RybC5hc0xvb2t1cCgpLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbnRyb2xEZXBlbmRlbmN5LCBDb250cm9sRGVwTG9va3VwIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuaW1wb3J0IHR5cGUgeyBEZWNpc2lvbkV2aWRlbmNlLCBTZWxlY3Rpb25FdmlkZW5jZSB9IGZyb20gJy4uL2RlY2lkZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZsb3dBdHRlbXB0RXZlbnQsXG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG59IGZyb20gJy4uL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHsgaXNSZXRyeUV2aWRlbmNlIH0gZnJvbSAnLi9hdHRlbXB0U2VyaWVzLmpzJztcblxuLyoqIE9uZSByZWNvcmRlZCBkZWNpc2lvbi9zZWxlY3Rpb24gZXZlbnQgKFJGQy0wMDMgRDUpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250cm9sRGVjaXNpb25SZWNvcmQge1xuICAvKipcbiAgICogYCdhdHRlbXB0LXN0b3AnYCBmb3IgYSBzdGFnZSdzIG93biByZXRyeS1vci1zdG9wIGRlY2lzaW9uIHRoYXQgU1RPUFBFRCBpdHMgc2VyaWVzICgxMC4xKSDigJQgdGhlblxuICAgKiBgZGVjaWRlclJ1bnRpbWVTdGFnZUlkYCBpcyB0aGUgc3RhZ2UncyBleGVjdXRpb24sIGBjaG9zZW5gIGlzIGAnc3RvcCdgLCBgZXZpZGVuY2VgIHRoZSBhdHRlbXB0J3MgZGVjaXNpb24gYW5kXG4gICAqIGBydWxlTGFiZWxgIHRoZSBzdG9wIHJlYXNvbi4gQWJzZW50IGZvciBhIGRlY2lkZXIgLyBzZWxlY3Rvci5cbiAgICovXG4gIGtpbmQ/OiAnYXR0ZW1wdC1zdG9wJztcbiAgLyoqIHJ1bnRpbWVTdGFnZUlkIG9mIHRoZSBkZWNpZGVyL3NlbGVjdG9yIGV4ZWN1dGlvbiBzdGVwLiAqL1xuICBkZWNpZGVyUnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIENob3NlbiBicmFuY2ggZGlzcGxheSBuYW1lIChkZWNpZGVyKSBvciBzZWxlY3RlZCBuYW1lcyAoc2VsZWN0b3IpLiAqL1xuICBjaG9zZW46IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogU3RydWN0dXJlZCBldmlkZW5jZSBmcm9tIGRlY2lkZSgpL3NlbGVjdCgpLCB3aGVuIHRoZSBzdGFnZSB1c2VkIHRoZW0uICovXG4gIGV2aWRlbmNlPzogRGVjaXNpb25FdmlkZW5jZSB8IFNlbGVjdGlvbkV2aWRlbmNlO1xuICAvKipcbiAgICogVGhlIGRlY2lkZSgpIHJ1bGUgbGFiZWwgdGhhdCBwcm9kdWNlZCB0aGUgZGVjaXNpb24gKGUuZy4gJ0dvb2QgY3JlZGl0JykuXG4gICAqIERlY2lkZXJzIG9ubHkg4oCUIGEgc2VsZWN0b3IgcGlja3MgTiBicmFuY2hlcyBhbmQgbm8gc2luZ2xlIGxhYmVsXG4gICAqIGF0dHJpYnV0ZXMgdG8gYWxsIG9mIHRoZW0gKGluc3BlY3QgYGV2aWRlbmNlYCBpbnN0ZWFkKS5cbiAgICovXG4gIHJ1bGVMYWJlbD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250cm9sRGVwUmVjb3JkZXJPcHRpb25zIHtcbiAgLyoqIFJlY29yZGVyIGlkLiBEZWZhdWx0cyB0byBgY29udHJvbC1kZXBzLU5gIChhdXRvLWluY3JlbWVudGVkKS4gKi9cbiAgaWQ/OiBzdHJpbmc7XG59XG5cbi8qKiBBIGRlY2lzaW9uIGF3YWl0aW5nIGJyYW5jaC1lbnRyeSBjb3JyZWxhdGlvbi4gKi9cbmludGVyZmFjZSBQZW5kaW5nRGVjaXNpb24ge1xuICBkZWNpZGVySWQ6IHN0cmluZztcbiAgLyoqIEhvdyBtYW55IGJyYW5jaCBlbnRyaWVzIGFyZSBzdGlsbCBleHBlY3RlZCAoZGVjaWRlcjogMSwgc2VsZWN0b3I6IE4pLiAqL1xuICByZW1haW5pbmc6IG51bWJlcjtcbn1cblxubGV0IF9jb3VudGVyID0gMDtcblxuLyoqXG4gKiBGYWN0b3J5IOKAlCBtYXRjaGVzIHRoZSBgdG9wb2xvZ3lSZWNvcmRlcigpYCAvIGBpbk91dFJlY29yZGVyKClgIHN0eWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udHJvbERlcFJlY29yZGVyKG9wdGlvbnM6IENvbnRyb2xEZXBSZWNvcmRlck9wdGlvbnMgPSB7fSk6IENvbnRyb2xEZXBSZWNvcmRlciB7XG4gIHJldHVybiBuZXcgQ29udHJvbERlcFJlY29yZGVyKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFN0YXRlZnVsIGFjY3VtdWxhdG9yIHRoYXQgd2F0Y2hlcyBGbG93UmVjb3JkZXIgZXZlbnRzIGFuZCBhbnN3ZXJzXG4gKiBcIndoaWNoIGRlY2lzaW9uIGFsbG93ZWQgdGhpcyBzdGFnZSB0byBydW4/XCIgQXR0YWNoIHZpYVxuICogYGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIocmVjb3JkZXIpYCAob3IgYGF0dGFjaEZsb3dSZWNvcmRlcmApLlxuICovXG5leHBvcnQgY2xhc3MgQ29udHJvbERlcFJlY29yZGVyIGltcGxlbWVudHMgRmxvd1JlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKiogUnVudGltZSBhbmNlc3RvciBjaGFpbjogcnVudGltZVN0YWdlSWQg4oaSIHBhcmVudFJ1bnRpbWVTdGFnZUlkIChEMSkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50T2YgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAvKiogUmVjb3JkZWQgZGVjaXNpb25zLCBrZXllZCBieSBkZWNpZGVyIHJ1bnRpbWVTdGFnZUlkLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGRlY2lzaW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBDb250cm9sRGVjaXNpb25SZWNvcmQ+KCk7XG4gIC8qKiBCcmFuY2gtZW50cnkgcnVudGltZVN0YWdlSWQg4oaSIGdvdmVybmluZyBkZWNpZGVyIHJ1bnRpbWVTdGFnZUlkLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGJyYW5jaEVudHJ5VG9EZWNpc2lvbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIC8qKiBEZWNpc2lvbnMgd2hvc2UgYnJhbmNoIGVudHJpZXMgaGF2ZSBub3QgYWxsIGJlZW4gc2VlbiB5ZXQuICovXG4gIHByaXZhdGUgcGVuZGluZzogUGVuZGluZ0RlY2lzaW9uW10gPSBbXTtcbiAgLyoqIFN0YWdlIGlkcyB0aGF0IGFscmVhZHkgY29uc3VtZWQgYSBwZW5kaW5nIHNsb3QgKGVudHJ5IE9SIGVycm9yKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjb25zdW1lZFNsb3RzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIC8qKiBDb252ZW50aW9uIDQg4oCUIHJ1bklkIG9mIHRoZSBydW4gY3VycmVudGx5IGJlaW5nIHJlY29yZGVkLiAqL1xuICBwcml2YXRlIGxhc3RSdW5JZD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBDb250cm9sRGVwUmVjb3JkZXJPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZCA/PyBgY29udHJvbC1kZXBzLSR7KytfY291bnRlcn1gO1xuICB9XG5cbiAgLy8g4pSA4pSAIEZsb3dSZWNvcmRlciBob29rcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBvbkRlY2lzaW9uKGV2ZW50OiBGbG93RGVjaXNpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ7XG4gICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICB0aGlzLnJlc2V0SWZOZXdSdW4oY3R4LnJ1bklkKTtcblxuICAgIGNvbnN0IGRlY2lkZXJJZCA9IGN0eC5ydW50aW1lU3RhZ2VJZDtcbiAgICBjb25zdCBydWxlTGFiZWwgPSBtYXRjaGVkUnVsZUxhYmVsKGV2ZW50LmV2aWRlbmNlKTtcbiAgICB0aGlzLmRlY2lzaW9ucy5zZXQoZGVjaWRlcklkLCB7XG4gICAgICBkZWNpZGVyUnVudGltZVN0YWdlSWQ6IGRlY2lkZXJJZCxcbiAgICAgIGNob3NlbjogZXZlbnQuY2hvc2VuLFxuICAgICAgLi4uKGV2ZW50LmV2aWRlbmNlICYmIHsgZXZpZGVuY2U6IGV2ZW50LmV2aWRlbmNlIH0pLFxuICAgICAgLi4uKHJ1bGVMYWJlbCAhPT0gdW5kZWZpbmVkICYmIHsgcnVsZUxhYmVsIH0pLFxuICAgIH0pO1xuICAgIHRoaXMucGVuZGluZy5wdXNoKHsgZGVjaWRlcklkLCByZW1haW5pbmc6IDEgfSk7XG4gIH1cblxuICBvbkF0dGVtcHQoZXZlbnQ6IEZsb3dBdHRlbXB0RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHggPSBldmVudC50cmF2ZXJzYWxDb250ZXh0O1xuICAgIGNvbnN0IHsgcmVjb3JkIH0gPSBldmVudDtcbiAgICBpZiAoIWN0eCB8fCByZWNvcmQubmV4dCAhPT0gJ3N0b3AnIHx8ICFpc1JldHJ5RXZpZGVuY2UocmVjb3JkKSkgcmV0dXJuO1xuICAgIHRoaXMucmVzZXRJZk5ld1J1bihjdHgucnVuSWQpO1xuICAgIHRoaXMuZGVjaXNpb25zLnNldChyZWNvcmQuc2VyaWVzLCB7XG4gICAgICBraW5kOiAnYXR0ZW1wdC1zdG9wJyxcbiAgICAgIGRlY2lkZXJSdW50aW1lU3RhZ2VJZDogcmVjb3JkLnNlcmllcyxcbiAgICAgIGNob3NlbjogJ3N0b3AnLFxuICAgICAgZXZpZGVuY2U6IHJlY29yZC5kZWNpc2lvbixcbiAgICAgIHJ1bGVMYWJlbDogcmVjb3JkLnJlYXNvbixcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWQoZXZlbnQ6IEZsb3dTZWxlY3RlZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dDtcbiAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgIHRoaXMucmVzZXRJZk5ld1J1bihjdHgucnVuSWQpO1xuICAgIGlmIChldmVudC5zZWxlY3RlZC5sZW5ndGggPT09IDApIHJldHVybjsgLy8gbm90aGluZyBzZWxlY3RlZCDihpIgbm90aGluZyBnb3Zlcm5lZFxuXG4gICAgY29uc3QgZGVjaWRlcklkID0gY3R4LnJ1bnRpbWVTdGFnZUlkO1xuICAgIHRoaXMuZGVjaXNpb25zLnNldChkZWNpZGVySWQsIHtcbiAgICAgIGRlY2lkZXJSdW50aW1lU3RhZ2VJZDogZGVjaWRlcklkLFxuICAgICAgY2hvc2VuOiBbLi4uZXZlbnQuc2VsZWN0ZWRdLFxuICAgICAgLi4uKGV2ZW50LmV2aWRlbmNlICYmIHsgZXZpZGVuY2U6IGV2ZW50LmV2aWRlbmNlIH0pLFxuICAgIH0pO1xuICAgIHRoaXMucGVuZGluZy5wdXNoKHsgZGVjaWRlcklkLCByZW1haW5pbmc6IGV2ZW50LnNlbGVjdGVkLmxlbmd0aCB9KTtcbiAgfVxuXG4gIG9uU3RhZ2VFeGVjdXRlZChldmVudDogRmxvd1N0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHggPSBldmVudC50cmF2ZXJzYWxDb250ZXh0O1xuICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgdGhpcy5yZXNldElmTmV3UnVuKGN0eC5ydW5JZCk7XG5cbiAgICBjb25zdCB7IHJ1bnRpbWVTdGFnZUlkLCBwYXJlbnRSdW50aW1lU3RhZ2VJZCB9ID0gY3R4O1xuICAgIGlmIChwYXJlbnRSdW50aW1lU3RhZ2VJZCkge1xuICAgICAgdGhpcy5wYXJlbnRPZi5zZXQocnVudGltZVN0YWdlSWQsIHBhcmVudFJ1bnRpbWVTdGFnZUlkKTtcbiAgICAgIHRoaXMuY29uc3VtZVBlbmRpbmdTbG90KHJ1bnRpbWVTdGFnZUlkLCBwYXJlbnRSdW50aW1lU3RhZ2VJZCwgLyogcmVnaXN0ZXIgKi8gdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgYnJhbmNoIHRoYXQgdGhyb3dzIG5ldmVyIGZpcmVzIGBvblN0YWdlRXhlY3V0ZWRgIOKAlCB3aXRob3V0IHRoaXMgaG9va1xuICAgKiBpdHMgcGVuZGluZyBzbG90IHdvdWxkIGxlYWsgYW5kIHRoZSBwb3N0LWZhbi1vdXQgY29udmVyZ2VuY2Ugc3RhZ2VcbiAgICogKHdob3NlIGNvbnRleHQgYWxzbyBjaGFpbnMgdG8gdGhlIHNlbGVjdG9yKSB3b3VsZCBiZSBtaXNhdHRyaWJ1dGVkIGFzXG4gICAqIGEgYnJhbmNoIGVudHJ5IHVuZGVyIGJlc3QtZWZmb3J0IChgZmFpbEZhc3Q6IGZhbHNlYCkgZmFuLW91dHMuXG4gICAqL1xuICBvbkVycm9yKGV2ZW50OiBGbG93RXJyb3JFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ7XG4gICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICB0aGlzLnJlc2V0SWZOZXdSdW4oY3R4LnJ1bklkKTtcbiAgICBpZiAoY3R4LnBhcmVudFJ1bnRpbWVTdGFnZUlkKSB7XG4gICAgICAvLyBSZWNvcmQgdGhlIGNoYWluIEFORCBhdHRyaWJ1dGUgdGhlIGZhaWxlZCBzdGFnZSB0byBpdHMgZGVjaXNpb24g4oCUXG4gICAgICAvLyB0aGUgc3RhZ2UgUkFOIChhbmQgbWF5IGhhdmUgY29tbWl0dGVkIHBhcnRpYWwgd3JpdGVzKSBiZWNhdXNlIHRoZVxuICAgICAgLy8gZGVjaXNpb24gY2hvc2UgaXQ7IGZhaWxpbmcgYWZ0ZXJ3YXJkcyBkb2Vzbid0IHVuZG8gdGhlIGRlcGVuZGVuY3kuXG4gICAgICB0aGlzLnBhcmVudE9mLnNldChjdHgucnVudGltZVN0YWdlSWQsIGN0eC5wYXJlbnRSdW50aW1lU3RhZ2VJZCk7XG4gICAgICB0aGlzLmNvbnN1bWVQZW5kaW5nU2xvdChjdHgucnVudGltZVN0YWdlSWQsIGN0eC5wYXJlbnRSdW50aW1lU3RhZ2VJZCwgLyogcmVnaXN0ZXIgKi8gdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIFF1ZXJpZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIE5FQVJFU1QgZ292ZXJuaW5nIGRlY2lzaW9uIGZvciBhbiBleGVjdXRpb24gc3RlcDogd2Fsa3MgdGhlXG4gICAqIHJ1bnRpbWUgYW5jZXN0b3IgY2hhaW4gKHRoZSBzdGVwIGl0c2VsZiBmaXJzdCkgdW50aWwgaXQgaGl0cyBhXG4gICAqIHJlZ2lzdGVyZWQgYnJhbmNoIGVudHJ5LiBgdW5kZWZpbmVkYCB3aGVuIHRoZSBzdGVwIGlzIG5vdCBkb3duc3RyZWFtIG9mXG4gICAqIGFueSByZWNvcmRlZCBkZWNpc2lvbi5cbiAgICovXG4gIGxvb2t1cChydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogQ29udHJvbERlcGVuZGVuY3kgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBsZXQgY3VyOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBydW50aW1lU3RhZ2VJZDtcbiAgICB3aGlsZSAoY3VyICE9PSB1bmRlZmluZWQgJiYgIXNlZW4uaGFzKGN1cikpIHtcbiAgICAgIHNlZW4uYWRkKGN1cik7XG4gICAgICBjb25zdCBkZWNpZGVySWQgPSB0aGlzLmJyYW5jaEVudHJ5VG9EZWNpc2lvbi5nZXQoY3VyKTtcbiAgICAgIGlmIChkZWNpZGVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSB0aGlzLmRlY2lzaW9ucy5nZXQoZGVjaWRlcklkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkZWNpZGVySWQsXG4gICAgICAgICAgLi4uKHJlY29yZD8ucnVsZUxhYmVsICE9PSB1bmRlZmluZWQgJiYgeyBsYWJlbDogcmVjb3JkLnJ1bGVMYWJlbCB9KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGN1ciA9IHRoaXMucGFyZW50T2YuZ2V0KGN1cik7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVGhlIGxvb2t1cCBhcyBhIGJhcmUgZnVuY3Rpb24g4oCUIHBsdWcgaW50byBgY2F1c2FsQ2hhaW4oLi4uLCB7IGNvbnRyb2xEZXBzIH0pYC4gKi9cbiAgYXNMb29rdXAoKTogQ29udHJvbERlcExvb2t1cCB7XG4gICAgcmV0dXJuIChydW50aW1lU3RhZ2VJZCkgPT4gdGhpcy5sb29rdXAocnVudGltZVN0YWdlSWQpO1xuICB9XG5cbiAgLyoqIFRoZSBhdHRlbXB0LXN0b3AgZGVjaXNpb24gb2YgYSBzdGFnZSBleGVjdXRpb24gd2hvc2UgcmV0cnkgc2VyaWVzIHN0b3BwZWQsIGlmIGl0IGRpZC4gKi9cbiAgZ2V0QXR0ZW1wdFN0b3AocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IENvbnRyb2xEZWNpc2lvblJlY29yZCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVjb3JkID0gdGhpcy5kZWNpc2lvbnMuZ2V0KHJ1bnRpbWVTdGFnZUlkKTtcbiAgICByZXR1cm4gcmVjb3JkPy5raW5kID09PSAnYXR0ZW1wdC1zdG9wJyA/IHJlY29yZCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBBbGwgZGVjaXNpb25zIHJlY29yZGVkIGZvciB0aGUgY3VycmVudCBydW4sIGluIGV2ZW50IG9yZGVyIOKAlCBkZWNpZGVycywgc2VsZWN0b3JzIGFuZCBhdHRlbXB0IHN0b3BzLiAqL1xuICBnZXREZWNpc2lvbnMoKTogQ29udHJvbERlY2lzaW9uUmVjb3JkW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5kZWNpc2lvbnMudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQtcnVuIGNvbnRyb2wgZXZpZGVuY2UgZm9yIHRoZSBuYXRpdmUgc25hcHNob3QuIFByb2plY3Qgb25seSB0aGVcbiAgICogc3RhZ2UgaWRlbnRpdGllcyBjb2xsZWN0ZWQgZHVyaW5nIHRyYXZlcnNhbDsgbmV2ZXIgd2FsayB0aGUgZXhlY3V0aW9uIHRyZWUuXG4gICAqIFBhcmVudGxlc3Mgcm9vdHMgY2Fubm90IGhhdmUgYSBnb3Zlcm5pbmcgY29udHJvbCBlZGdlLlxuICAgKi9cbiAgdG9TbmFwc2hvdCgpIHtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXM6IFtzdHJpbmcsIENvbnRyb2xEZXBlbmRlbmN5XVtdID0gW107XG4gICAgZm9yIChjb25zdCBydW50aW1lU3RhZ2VJZCBvZiB0aGlzLnBhcmVudE9mLmtleXMoKSkge1xuICAgICAgY29uc3QgZGVwZW5kZW5jeSA9IHRoaXMubG9va3VwKHJ1bnRpbWVTdGFnZUlkKTtcbiAgICAgIGlmIChkZXBlbmRlbmN5KSBkZXBlbmRlbmNpZXMucHVzaChbcnVudGltZVN0YWdlSWQsIGRlcGVuZGVuY3ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdjb250cm9sLWRlcGVuZGVuY2llcycsXG4gICAgICBkYXRhOiB7IGRlY2lzaW9uczogdGhpcy5nZXREZWNpc2lvbnMoKSwgY29udHJvbERlcHM6IE9iamVjdC5mcm9tRW50cmllcyhkZXBlbmRlbmNpZXMpIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBSZXNldCBhbGwgc3RhdGUgKGFsc28gaGFwcGVucyBhdXRvbWF0aWNhbGx5IG9uIHJ1bklkIGNoYW5nZSkuICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMucGFyZW50T2YuY2xlYXIoKTtcbiAgICB0aGlzLmRlY2lzaW9ucy5jbGVhcigpO1xuICAgIHRoaXMuYnJhbmNoRW50cnlUb0RlY2lzaW9uLmNsZWFyKCk7XG4gICAgdGhpcy5wZW5kaW5nID0gW107XG4gICAgdGhpcy5jb25zdW1lZFNsb3RzLmNsZWFyKCk7XG4gIH1cblxuICAvLyDilIDilIAgSW50ZXJuYWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBDb252ZW50aW9uIDQ6IGEgbmV3IHJ1bklkIG1lYW5zIGEgbmV3IHJ1biDigJQgcmVzZXQgdHJhbnNpZW50IHN0YXRlLiAqL1xuICBwcml2YXRlIHJlc2V0SWZOZXdSdW4ocnVuSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChydW5JZCA9PT0gdGhpcy5sYXN0UnVuSWQpIHJldHVybjtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy5sYXN0UnVuSWQgPSBydW5JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBgcGFyZW50UnVudGltZVN0YWdlSWRgIGlzIGEgZGVjaWRlciB3aXRoIGFuIHVubWF0Y2hlZCBwZW5kaW5nIHNsb3QsXG4gICAqIGNvbnN1bWUgb25lLiBgcmVnaXN0ZXJgIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHN0YWdlIGlzIHJlY29yZGVkIGFzIGFcbiAgICogYnJhbmNoIGVudHJ5IChzdGFnZSBleGVjdXRlZC9lcnJvcmVkKSDigJQgYm90aCBwYXRocyBjb25zdW1lIHRoZSBzbG90IHNvXG4gICAqIGNvdW50cyBzdGF5IGV4YWN0IGV2ZW4gd2hlbiBhIHN0YWdlIHByb2R1Y2VzIGJvdGggZXZlbnRzLlxuICAgKi9cbiAgcHJpdmF0ZSBjb25zdW1lUGVuZGluZ1Nsb3QocnVudGltZVN0YWdlSWQ6IHN0cmluZywgcGFyZW50UnVudGltZVN0YWdlSWQ6IHN0cmluZywgcmVnaXN0ZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAocnVudGltZVN0YWdlSWQgPT09IHBhcmVudFJ1bnRpbWVTdGFnZUlkKSByZXR1cm47IC8vIHN5bnRoZXRpYyBzZWxmLWV2ZW50c1xuICAgIGlmICh0aGlzLmNvbnN1bWVkU2xvdHMuaGFzKHJ1bnRpbWVTdGFnZUlkKSkgcmV0dXJuO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBlbmRpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHAgPSB0aGlzLnBlbmRpbmdbaV07XG4gICAgICBpZiAocC5kZWNpZGVySWQgIT09IHBhcmVudFJ1bnRpbWVTdGFnZUlkKSBjb250aW51ZTtcblxuICAgICAgdGhpcy5jb25zdW1lZFNsb3RzLmFkZChydW50aW1lU3RhZ2VJZCk7XG4gICAgICBpZiAocmVnaXN0ZXIpIHRoaXMuYnJhbmNoRW50cnlUb0RlY2lzaW9uLnNldChydW50aW1lU3RhZ2VJZCwgcC5kZWNpZGVySWQpO1xuICAgICAgcC5yZW1haW5pbmctLTtcbiAgICAgIGlmIChwLnJlbWFpbmluZyA8PSAwKSB0aGlzLnBlbmRpbmcuc3BsaWNlKGksIDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoZSBkZWNpZGUoKSBydWxlIGxhYmVsIHRoYXQgcHJvZHVjZWQgdGhlIGRlY2lzaW9uOiB0aGUgbWF0Y2hlZCBydWxlXG4gKiBtYXBwaW5nIHRvIHRoZSBjaG9zZW4gYnJhbmNoIChmaXJzdCBtYXRjaGVkIHJ1bGUgYXMgZmFsbGJhY2spLlxuICovXG5mdW5jdGlvbiBtYXRjaGVkUnVsZUxhYmVsKGV2aWRlbmNlOiBEZWNpc2lvbkV2aWRlbmNlIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFldmlkZW5jZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcnVsZSA9XG4gICAgZXZpZGVuY2UucnVsZXMuZmluZCgocikgPT4gci5tYXRjaGVkICYmIHIuYnJhbmNoID09PSBldmlkZW5jZS5jaG9zZW4pID8/IGV2aWRlbmNlLnJ1bGVzLmZpbmQoKHIpID0+IHIubWF0Y2hlZCk7XG4gIHJldHVybiBydWxlPy5sYWJlbDtcbn1cbiJdfQ==
|
|
@@ -28,6 +28,7 @@ import type { CombinedNarrativeEntry } from '../engine/narrative/narrativeTypes.
|
|
|
28
28
|
import type { ManifestEntry } from '../engine/narrative/recorders/ManifestFlowRecorder.js';
|
|
29
29
|
import type { FlowRecorder } from '../engine/narrative/types.js';
|
|
30
30
|
import { type ExecutorResult, type RunOptions, type ScopeFactory, type SerializedPipelineStructure, type StageNode, type SubflowResult } from '../engine/types.js';
|
|
31
|
+
import { type TerminalFailureContext } from '../errors/terminalFailure.js';
|
|
31
32
|
import type { ReadTrackingMode, WriteTrackingMode } from '../memory/frameTypes.js';
|
|
32
33
|
import type { FlowchartCheckpoint } from '../pause/types.js';
|
|
33
34
|
import type { CombinedRecorder } from '../recorder/CombinedRecorder.js';
|
|
@@ -64,6 +65,9 @@ export declare class FlowChartExecutor<TOut = any, TScope = any> {
|
|
|
64
65
|
* See docs/guides/execution-model.md.
|
|
65
66
|
*/
|
|
66
67
|
private _isExecuting;
|
|
68
|
+
private failureState;
|
|
69
|
+
/** Safe native context for the latest rejected leg; undefined before, during, after success or pause. */
|
|
70
|
+
getFailureContext(): TerminalFailureContext | undefined;
|
|
67
71
|
private readonly flowChartArgs;
|
|
68
72
|
/**
|
|
69
73
|
* The crash-safe record of the current run (10.1, P6) — the sink every log of the run writes to, its
|