@dcl/asset-packs 2.15.3 → 2.16.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.
@@ -0,0 +1,15 @@
1
+ import type { Entity, IEngine } from '@dcl/ecs';
2
+ import { type Composite } from '@dcl/ecs';
3
+ import { type EntityMap } from './mapping';
4
+ type CompositeComponent = Composite.Definition['components'][number];
5
+ type ComponentDataEntry = ReturnType<CompositeComponent['data']['get']>;
6
+ export declare function getJsonPayload<T = unknown>(componentData: ComponentDataEntry): T | undefined;
7
+ export declare function deepReplaceAssetPath(value: unknown, replacement: string): void;
8
+ export declare function substituteAssetPathInComposite(composite: Composite.Definition, compositeSrc: string): void;
9
+ export declare function stripComponents(composite: Composite.Definition): Composite.Definition;
10
+ type IdMap = Map<string, number>;
11
+ export declare function allocateIdsForSpawnedComponents(engine: IEngine, composite: Composite.Definition, spawnedEntityByCompositeId: Map<number, Entity>): IdMap;
12
+ export declare function remapTriggerReferences(engine: IEngine, spawnedEntities: Iterable<[Entity, number]>, ids: IdMap): void;
13
+ export declare function remapSyncComponentIds(engine: IEngine, spawnedEntities: Iterable<[Entity, number]>): void;
14
+ export declare function initializeComponentIdsFromComposite(engine: IEngine, composite: Composite.Definition, entityMap: EntityMap): void;
15
+ export {};
@@ -0,0 +1,223 @@
1
+ import { COMPONENTS_WITH_ID, getNextId } from './mapping';
2
+ import { getComponents } from './definitions';
3
+ import { getExplorerComponents } from './components';
4
+ const ASSET_PATH_TOKEN = '{assetPath}';
5
+ const SELF_REF = /^\{self:(.+)\}$/;
6
+ const CROSS_ENTITY_REF = /^\{(\d+):(.+)\}$/;
7
+ export function getJsonPayload(componentData) {
8
+ if (componentData?.data?.$case !== 'json')
9
+ return undefined;
10
+ return componentData.data.json;
11
+ }
12
+ function normalizePosix(p) {
13
+ const segments = p.split('/');
14
+ const out = [];
15
+ for (const seg of segments) {
16
+ if (seg === '' || seg === '.')
17
+ continue;
18
+ if (seg === '..') {
19
+ if (out.length === 0 || out[out.length - 1] === '..')
20
+ out.push('..');
21
+ else
22
+ out.pop();
23
+ continue;
24
+ }
25
+ out.push(seg);
26
+ }
27
+ const prefix = p.startsWith('/') ? '/' : '';
28
+ return prefix + out.join('/');
29
+ }
30
+ function containAssetPath(replacement, joined) {
31
+ const base = replacement === '' ? '.' : normalizePosix(replacement);
32
+ const normalized = normalizePosix(joined);
33
+ if (normalized === base)
34
+ return normalized;
35
+ if (normalized.startsWith(base + '/'))
36
+ return normalized;
37
+ return null;
38
+ }
39
+ function assetPathFrom(compositeSrc) {
40
+ const slash = compositeSrc.lastIndexOf('/');
41
+ return slash >= 0 ? compositeSrc.substring(0, slash) : '';
42
+ }
43
+ const JSON_WRAPPER_KEYS = new Set(['jsonPayload']);
44
+ export function deepReplaceAssetPath(value, replacement) {
45
+ if (value === null || typeof value !== 'object')
46
+ return;
47
+ const substitute = (raw) => {
48
+ const joined = raw.split(ASSET_PATH_TOKEN).join(replacement);
49
+ if (!joined.includes('/') && !joined.includes('\\'))
50
+ return joined;
51
+ const contained = containAssetPath(replacement, joined);
52
+ if (contained !== null)
53
+ return contained;
54
+ console.error(`[asset-packs] rejected {assetPath} substitution that escapes asset dir: ${JSON.stringify(raw)} -> ${JSON.stringify(joined)}`);
55
+ return replacement;
56
+ };
57
+ const substituteJsonWrapper = (raw) => {
58
+ const first = raw.charCodeAt(0);
59
+ if (first !== 0x7b && first !== 0x5b)
60
+ return null;
61
+ let parsed;
62
+ try {
63
+ parsed = JSON.parse(raw);
64
+ }
65
+ catch {
66
+ return null;
67
+ }
68
+ if (parsed === null || typeof parsed !== 'object')
69
+ return null;
70
+ deepReplaceAssetPath(parsed, replacement);
71
+ return JSON.stringify(parsed);
72
+ };
73
+ if (Array.isArray(value)) {
74
+ for (let i = 0; i < value.length; i++) {
75
+ const item = value[i];
76
+ if (typeof item === 'string') {
77
+ if (item.includes(ASSET_PATH_TOKEN)) {
78
+ value[i] = substitute(item);
79
+ }
80
+ }
81
+ else {
82
+ deepReplaceAssetPath(item, replacement);
83
+ }
84
+ }
85
+ return;
86
+ }
87
+ const obj = value;
88
+ for (const key of Object.keys(obj)) {
89
+ const item = obj[key];
90
+ if (typeof item === 'string') {
91
+ if (JSON_WRAPPER_KEYS.has(key) && item.includes(ASSET_PATH_TOKEN)) {
92
+ const next = substituteJsonWrapper(item);
93
+ if (next !== null) {
94
+ obj[key] = next;
95
+ continue;
96
+ }
97
+ }
98
+ if (item.includes(ASSET_PATH_TOKEN)) {
99
+ obj[key] = substitute(item);
100
+ }
101
+ }
102
+ else {
103
+ deepReplaceAssetPath(item, replacement);
104
+ }
105
+ }
106
+ }
107
+ export function substituteAssetPathInComposite(composite, compositeSrc) {
108
+ const replacement = assetPathFrom(compositeSrc);
109
+ for (const component of composite.components) {
110
+ for (const [, componentData] of component.data) {
111
+ const payload = getJsonPayload(componentData);
112
+ if (payload !== undefined)
113
+ deepReplaceAssetPath(payload, replacement);
114
+ }
115
+ }
116
+ }
117
+ const COMPONENTS_PREFIXES = ['inspector::'];
118
+ export function stripComponents(composite) {
119
+ const kept = composite.components.filter(c => !COMPONENTS_PREFIXES.some(prefix => c.name.startsWith(prefix)));
120
+ if (kept.length === composite.components.length)
121
+ return composite;
122
+ return { ...composite, components: kept };
123
+ }
124
+ function idKey(componentName, entityId) {
125
+ return `${componentName}:${entityId}`;
126
+ }
127
+ function parsePlaceholderRef(ref) {
128
+ const self = ref.match(SELF_REF);
129
+ if (self)
130
+ return { componentName: self[1] };
131
+ const cross = ref.match(CROSS_ENTITY_REF);
132
+ if (cross)
133
+ return { componentName: cross[2], entityId: Number(cross[1]) };
134
+ return null;
135
+ }
136
+ export function allocateIdsForSpawnedComponents(engine, composite, spawnedEntityByCompositeId) {
137
+ const ids = new Map();
138
+ for (const component of composite.components) {
139
+ if (!COMPONENTS_WITH_ID.includes(component.name))
140
+ continue;
141
+ const ComponentDef = engine.getComponentOrNull(component.name);
142
+ if (!ComponentDef)
143
+ continue;
144
+ for (const [compositeEntityId, componentData] of component.data) {
145
+ const payload = getJsonPayload(componentData);
146
+ if (!payload || `${payload.id}` !== '{self}')
147
+ continue;
148
+ const destEntity = spawnedEntityByCompositeId.get(compositeEntityId);
149
+ if (destEntity === undefined)
150
+ continue;
151
+ const newId = getNextId(engine);
152
+ ids.set(idKey(component.name, compositeEntityId), newId);
153
+ const live = ComponentDef.getMutableOrNull(destEntity);
154
+ if (live)
155
+ live.id = newId;
156
+ }
157
+ }
158
+ return ids;
159
+ }
160
+ export function remapTriggerReferences(engine, spawnedEntities, ids) {
161
+ const { Triggers } = getComponents(engine);
162
+ const resolve = (idRef, ownCompositeEntityId) => {
163
+ if (typeof idRef !== 'string')
164
+ return idRef;
165
+ const parsed = parsePlaceholderRef(idRef);
166
+ if (!parsed)
167
+ return idRef;
168
+ const lookupEntityId = parsed.entityId ?? ownCompositeEntityId;
169
+ return ids.get(idKey(parsed.componentName, lookupEntityId)) ?? idRef;
170
+ };
171
+ for (const [destEntity, compositeEntityId] of spawnedEntities) {
172
+ const triggers = Triggers.getMutableOrNull(destEntity);
173
+ if (!triggers)
174
+ continue;
175
+ for (const trigger of triggers.value) {
176
+ if (trigger.conditions) {
177
+ for (const condition of trigger.conditions) {
178
+ condition.id = resolve(condition.id, compositeEntityId);
179
+ }
180
+ }
181
+ for (const action of trigger.actions) {
182
+ action.id = resolve(action.id, compositeEntityId);
183
+ }
184
+ }
185
+ }
186
+ }
187
+ export function remapSyncComponentIds(engine, spawnedEntities) {
188
+ const { SyncComponents } = getExplorerComponents(engine);
189
+ for (const [destEntity] of spawnedEntities) {
190
+ const sync = SyncComponents.getOrNull(destEntity);
191
+ if (!sync || !Array.isArray(sync.componentIds))
192
+ continue;
193
+ let changed = false;
194
+ const resolved = sync.componentIds.reduce((acc, id) => {
195
+ if (typeof id === 'number') {
196
+ acc.push(id);
197
+ }
198
+ else if (typeof id === 'string') {
199
+ changed = true;
200
+ const component = engine.getComponentOrNull(id);
201
+ if (component)
202
+ acc.push(component.componentId);
203
+ else
204
+ console.error(`[asset-packs] SyncComponents references unknown component "${id}"`);
205
+ }
206
+ return acc;
207
+ }, []);
208
+ if (changed)
209
+ SyncComponents.createOrReplace(destEntity, { componentIds: resolved });
210
+ }
211
+ }
212
+ export function initializeComponentIdsFromComposite(engine, composite, entityMap) {
213
+ const spawnedEntityByCompositeId = new Map();
214
+ const inverse = [];
215
+ for (const [src, dst] of entityMap.entries()) {
216
+ spawnedEntityByCompositeId.set(src, dst);
217
+ inverse.push([dst, src]);
218
+ }
219
+ const ids = allocateIdsForSpawnedComponents(engine, composite, spawnedEntityByCompositeId);
220
+ remapTriggerReferences(engine, inverse, ids);
221
+ remapSyncComponentIds(engine, inverse);
222
+ }
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWNoaWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FkZC1jaGlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxQkEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBa0IsTUFBTSxXQUFXLENBQUM7QUFDMUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJckQsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7QUFDdkMsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUM7QUFDbkMsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQztBQWE1QyxNQUFNLFVBQVUsY0FBYyxDQUFjLGFBQWlDO0lBQzNFLElBQUksYUFBYSxFQUFFLElBQUksRUFBRSxLQUFLLEtBQUssTUFBTTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzVELE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFxQixDQUFDO0FBQ2xELENBQUM7QUFTRCxTQUFTLGNBQWMsQ0FBQyxDQUFTO0lBQy9CLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsTUFBTSxHQUFHLEdBQWEsRUFBRSxDQUFDO0lBQ3pCLEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDM0IsSUFBSSxHQUFHLEtBQUssRUFBRSxJQUFJLEdBQUcsS0FBSyxHQUFHO1lBQUUsU0FBUztRQUN4QyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNqQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUk7Z0JBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Z0JBQ2hFLEdBQUcsQ0FBQyxHQUFHLEVB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Q0FBQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQzdDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxHQUFhLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbkQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRywrQkFBK0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLDBCQUEwQixDQUFDLENBQUM7SUFDM0Ysc0JBQXNCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3QyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnVudGltZSBob29rcyBmb3IgYXNzZXQtcGFjayBjb21wb3NpdGVzIGxvYWRlZCBvbi1kZW1hbmQgKGkuZS4gdmlhIHRoZVxuICogU1BBV05fRU5USVRZIGFjdGlvbikuIENvdmVyczpcbiAqXG4gKiAgIDEuIGB7YXNzZXRQYXRofWAgc3Vic3RpdHV0aW9uIGF0IGNvbXBvc2l0ZS1sb2FkIHRpbWUsIHNvIG9uLWRpc2sgYXNzZXRcbiAqICAgICAgcGFja3MgY2FuIGtlZXAgdGhlaXIgcG9ydGFibGUgcGxhY2Vob2xkZXIgY29udmVudGlvbi5cbiAqICAgMi4gSUQgcHJlLWFsbG9jYXRpb24gKyBUcmlnZ2VyIHJlZmVyZW5jZSByZW1hcCBhdCBzcGF3biB0aW1lLCBzbyB0aGVcbiAqICAgICAgY29tcG9zaXRlJ3MgYHtzZWxmfWAgLyBge3NlbGY6Y29tcG9uZW50fWAgLyBge2VudGl0eTpjb21wb25lbnR9YFxuICogICAgICBwbGFjZWhvbGRlcnMgcmVzb2x2ZSB0byBsaXZlIG51bWVyaWMgSURzIGJlZm9yZSBpbml0QWN0aW9ucyAvXG4gKiAgICAgIGluaXRUcmlnZ2VycyBiaW5kIGhhbmRsZXJzLlxuICpcbiAqIEhlbHBlcnMgZXhwb3J0ZWQgaGVyZSAoYHN1YnN0aXR1dGVBc3NldFBhdGhJbkNvbXBvc2l0ZWAsXG4gKiBgYWxsb2NhdGVJZHNGb3JTcGF3bmVkQ29tcG9uZW50c2AsIGByZW1hcFRyaWdnZXJSZWZlcmVuY2VzYCwgYGRlZXBSZXBsYWNlQXNzZXRQYXRoYCxcbiAqIGBnZXRKc29uUGF5bG9hZGApIGFyZSB0aGUgY2Fub25pY2FsIGltcGxlbWVudGF0aW9ucyBvZiBhc3NldC1wYWNrIGNvbXBvc2l0ZVxuICogY29udmVudGlvbnMuIEluc3BlY3RvciBhZGQtYXNzZXQgYW5kIGNyZWF0ZS1jdXN0b20tYXNzZXQgb3BlcmF0aW9ucyBjb25zdW1lXG4gKiB0aGVtLiBNYXRlcmlhbC92aWRlb1RleHR1cmUgcGFyc2luZyBhbmQgTm9kZXMtdHJlZSB1cGRhdGVzIHN0YXkgaW5zcGVjdG9yLXNpZGVcbiAqIOKAlCB0aGV5IHRvdWNoIGVkaXRvci1zcGVjaWZpYyBydW50aW1lIHN0YXRlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRW50aXR5LCBJRW5naW5lIH0gZnJvbSAnQGRjbC9lY3MnO1xuaW1wb3J0IHsgdHlwZSBDb21wb3NpdGUgfSBmcm9tICdAZGNsL2Vjcyc7XG5pbXBvcnQgeyBDT01QT05FTlRTX1dJVEhfSUQsIGdldE5leHRJZCwgdHlwZSBFbnRpdHlNYXAgfSBmcm9tICcuL21hcHBpbmcnO1xuaW1wb3J0IHsgZ2V0Q29tcG9uZW50cyB9IGZyb20gJy4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHsgZ2V0RXhwbG9yZXJDb21wb25lbnRzIH0gZnJvbSAnLi9jb21wb25lbnRzJztcblxuLy8g4pSA4pSA4pSAIENvbnN0YW50cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuY29uc3QgQVNTRVRfUEFUSF9UT0tFTiA9ICd7YXNzZXRQYXRofSc7XG5jb25zdCBTRUxGX1JFRiA9IC9eXFx7c2VsZjooLispXFx9JC87XG5jb25zdCBDUk9TU19FTlRJVFlfUkVGID0gL15cXHsoXFxkKyk6KC4rKVxcfSQvO1xuXG4vLyDilIDilIDilIAgdHMtcHJvdG8gc2hhcGUgaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vXG4vLyBgQ29tcG9uZW50RGF0YWAgaXMgZ2VuZXJhdGVkIGJ5IHRzLXByb3RvIHdpdGggYSBkaXNjcmltaW5hdGVkIHVuaW9uOlxuLy8gICB7IGRhdGE6IHsgJGNhc2U6ICdqc29uJywganNvbjogVCB9IHwgeyAkY2FzZTogJ2JpbmFyeScsIGJpbmFyeTogVWludDhBcnJheSB9IHwgdW5kZWZpbmVkIH1cbi8vIEFsbCB0aHJlZSBydW50aW1lIGNvbmNlcm5zIGJlbG93IHJlYWQgdGhlIEpTT04tc2hhcGVkIHBheWxvYWQsIHNvIGV2ZXJ5XG4vLyBhY2Nlc3MgZ29lcyB0aHJvdWdoIGBnZXRKc29uUGF5bG9hZGAuIElmIHRoZSB1cHN0cmVhbSBzaGFwZSBjaGFuZ2VzLCB0aGlzXG4vLyBpcyB0aGUgc2luZ2xlIHVwZGF0ZSBwb2ludC5cblxudHlwZSBDb21wb3NpdGVDb21wb25lbnQgPSBDb21wb3NpdGUuRGVmaW5pdGlvblsnY29tcG9uZW50cyddW251bWJlcl07XG50eXBlIENvbXBvbmVudERhdGFFbnRyeSA9IFJldHVyblR5cGU8Q29tcG9zaXRlQ29tcG9uZW50WydkYXRhJ11bJ2dldCddPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEpzb25QYXlsb2FkPFQgPSB1bmtub3duPihjb21wb25lbnREYXRhOiBDb21wb25lbnREYXRhRW50cnkpOiBUIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNvbXBvbmVudERhdGE/LmRhdGE/LiRjYXNlICE9PSAnanNvbicpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBjb21wb25lbnREYXRhLmRhdGEuanNvbiBhcyBUIHwgdW5kZWZpbmVkO1xufVxuXG4vLyDilIDilIDilIAgYHthc3NldFBhdGh9YCBzdWJzdGl0dXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8vIElubGluZSBQT1NJWC1ub3JtYWxpemUuIFdlIGNhbid0IGltcG9ydCBgcGF0aGAgaGVyZTogYGFkZC1jaGlsZC50c2AgaXNcbi8vIGJ1bmRsZWQgaW50byBydW50aW1lIHNjZW5lcyAoc2FuZGJveGVkOyBubyBOb2RlKSwgYW5kIGBwYXRoLWJyb3dzZXJpZnlgXG4vLyBpcyBub3QgYSBkZXBlbmRlbmN5LiBUaGUgbm9ybWFsaXplciB3YWxrcyBzZWdtZW50cywgZHJvcHMgYC5gLCBwb3BzIG9uXG4vLyBgLi5gLCBhbmQgam9pbnMgd2l0aCBgL2Ag4oCUIG1hdGNoaW5nIGBwYXRoLnBvc2l4Lm5vcm1hbGl6ZWAgZm9yIHRoZVxuLy8gc3Vic3RyaW5nIHNoYXBlcyB3ZSBmZWVkIGl0LlxuZnVuY3Rpb24gbm9ybWFsaXplUG9zaXgocDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2VnbWVudHMgPSBwLnNwbGl0KCcvJyk7XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudHMpIHtcbiAgICBpZiAoc2VnID09PSAnJyB8fCBzZWcgPT09ICcuJykgY29udGludWU7XG4gICAgaWYgKHNlZyA9PT0gJy4uJykge1xuICAgICAgaWYgKG91dC5sZW5ndGggPT09IDAgfHwgb3V0W291dC5sZW5ndGggLSAxXSA9PT0gJy4uJykgb3V0LnB1c2goJy4uJyk7XG4gICAgICBlbHNlIG91dC5wb3AoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBvdXQucHVzaChzZWcpO1xuICB9XG4gIGNvbnN0IHByZWZpeCA9IHAuc3RhcnRzV2l0aCgnLycpID8gJy8nIDogJyc7XG4gIHJldHVybiBwcmVmaXggKyBvdXQuam9pbignLycpO1xufVxuXG4vLyBQYXRoLWNvbnRhaW5tZW50IGNob2tlcG9pbnQgZm9yIGB7YXNzZXRQYXRofWAgc3Vic3RpdHV0aW9uLiBHaXZlbiB0aGVcbi8vIHBvc3Qtc3Vic3RpdHV0aW9uIHBhdGggY2FuZGlkYXRlIGBqb2luZWRgIGFuZCB0aGUgYXNzZXQgZGlyZWN0b3J5XG4vLyBgcmVwbGFjZW1lbnRgLCByZXR1cm4gdGhlIG5vcm1hbGl6ZWQgYGpvaW5lZGAgaWYgYW5kIG9ubHkgaWZcbi8vIFBPU0lYLW5vcm1hbGl6YXRpb24ga2VlcHMgaXQgaW5zaWRlIGByZXBsYWNlbWVudGAgKGVxdWFsIHRvIGl0IG9yXG4vLyBwcmVmaXhlZCBieSBgcmVwbGFjZW1lbnQgKyAnLydgKS4gUmV0dXJucyBgbnVsbGAgZm9yIHRyYXZlcnNhbCBwYXlsb2Fkc1xuLy8gbGlrZSBge2Fzc2V0UGF0aH0vLi4vLi4vZXRjL3Bhc3N3ZGAuXG4vL1xuLy8gUmlza3ktQVBJIG5vdGU6IHRoaXMgaXMgdGhlIHNpbmdsZSBzZWN1cml0eSBwcmltaXRpdmUgZm9yIHRoZVxuLy8gYHthc3NldFBhdGh9YCB3YWxrZXIuIERvIG5vdCBzd2FwIGBub3JtYWxpemVQb3NpeGAgZm9yIGEgcmVnZXggYC4uYFxuLy8gYmxhY2tsaXN0IOKAlCB0aGF0IHJlamVjdHMgbGVnaXRpbWF0ZSBzaWJsaW5nIHBhdGhzLlxuZnVuY3Rpb24gY29udGFpbkFzc2V0UGF0aChyZXBsYWNlbWVudDogc3RyaW5nLCBqb2luZWQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAvLyBObyByZXBsYWNlbWVudCAoY29tcG9zaXRlU3JjIGhhZCBubyBgL2ApOiBhbnkgdHJhdmVyc2FsIGlzIHN1c3BpY2lvdXNcbiAgLy8gYmVjYXVzZSB0aGUgYXNzZXQgZGlyIGlzIHRoZSBpbXBsaWNpdCBjd2QuIEFwcGx5IHRoZSBzYW1lIGNvbnRhaW5tZW50XG4gIC8vIGxvZ2ljIGFnYWluc3QgYSBgLmAgYmFzZS5cbiAgY29uc3QgYmFzZSA9IHJlcGxhY2VtZW50ID09PSAnJyA/ICcuJyA6IG5vcm1hbGl6ZVBvc2l4KHJlcGxhY2VtZW50KTtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVBvc2l4KGpvaW5lZCk7XG4gIGlmIChub3JtYWxpemVkID09PSBiYXNlKSByZXR1cm4gbm9ybWFsaXplZDtcbiAgaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aChiYXNlICsgJy8nKSkgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBhc3NldFBhdGhGcm9tKGNvbXBvc2l0ZVNyYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2xhc2ggPSBjb21wb3NpdGVTcmMubGFzdEluZGV4T2YoJy8nKTtcbiAgcmV0dXJuIHNsYXNoID49IDAgPyBjb21wb3NpdGVTcmMuc3Vic3RyaW5nKDAsIHNsYXNoKSA6ICcnO1xufVxuXG4vLyBTdHJpbmdpZmllZC1KU09OIGNhcnJpZXIgY29udmVudGlvbi4gQXNzZXQtcGFja3MgQWN0aW9ucyBlbmNvZGUgdGhlaXJcbi8vIHBlci1hY3Rpb24gcGF5bG9hZCBhcyBhIEpTT04tZW5jb2RlZCBzdHJpbmcgb24gdGhlIGBqc29uUGF5bG9hZGAgZmllbGRcbi8vIChzZWUgYFJFU09VUkNFX0FDVElPTl9UWVBFU2AgaW4gaW5zcGVjdG9yL2NyZWF0ZS1jdXN0b20tYXNzZXQpLiBXaGVuIHRoZVxuLy8gd2Fsa2VyIGVuY291bnRlcnMgdGhpcyBmaWVsZCwgbmHDr3ZlIHN0cmluZy1sZXZlbCBzdWJzdGl0dXRpb24gd291bGQgdHJlYXRcbi8vIHRoZSB3aG9sZSBKU09OIGxpdGVyYWwgYXMgYSBwYXRoIGNhbmRpZGF0ZSBhbmQgYGNvbnRhaW5Bc3NldFBhdGhgIHdvdWxkXG4vLyByZWplY3QgaXQgKHRoZSBzdHJpbmcgc3RhcnRzIHdpdGggYHtgLCBub3QgdGhlIGFzc2V0IGRpciksIGNvbGxhcHNpbmcgdGhlXG4vLyBwYXlsb2FkIHRvIHRoZSBiYXJlIHJlcGxhY2VtZW50LiBQYXJzZSDihpIgcmVjdXJzZSDihpIgcmUtc2VyaWFsaXplIGtlZXBzIHRoZVxuLy8gY29udGFpbm1lbnQgY2hva2Vwb2ludCBpbnRhY3QgZm9yIHRoZSBhY3R1YWwgcGF0aCBmaWVsZHMgKmluc2lkZSogdGhlXG4vLyBwYXlsb2FkLlxuLy9cbi8vIElmIGEgZnV0dXJlIGNvbXBvbmVudCBpbnRyb2R1Y2VzIGEgZGlmZmVyZW50IHN0cmluZ2lmaWVkLUpTT04gd3JhcHBlciBrZXksXG4vLyBhZGQgdGhlIGtleSBoZXJlLiBOb24tYGpzb25QYXlsb2FkYCBzdHJpbmdzIGNvbnRpbnVlIHRvIGZsb3cgdGhyb3VnaCB0aGVcbi8vIHBsYWluIHBhdGgtc3Vic3RpdHV0aW9uIGJyYW5jaC5cbmNvbnN0IEpTT05fV1JBUFBFUl9LRVlTID0gbmV3IFNldChbJ2pzb25QYXlsb2FkJ10pO1xuXG4vKipcbiAqIFJlcGxhY2UgYHthc3NldFBhdGh9YCB3aXRoIGByZXBsYWNlbWVudGAgaW4gZXZlcnkgc3RyaW5nIHZhbHVlIHJlYWNoYWJsZVxuICogZnJvbSBgdmFsdWVgLCBpbmNsdWRpbmcgc3RyaW5ncyBuZXN0ZWQgaW5zaWRlIHN0cmluZ2lmaWVkIHBheWxvYWRzXG4gKiAoZS5nLiBgYXNzZXQtcGFja3M6OkFjdGlvbnNbaV0uanNvblBheWxvYWRgKS4gTXV0YXRlcyBpbiBwbGFjZS4gSWRlbXBvdGVudC5cbiAqXG4gKiBDb252ZW50aW9ucyBmb3IgZnV0dXJlIGNvbnRyaWJ1dG9ycyBhZGRpbmcgYHthc3NldFBhdGh9YC1iZWFyaW5nIGZpZWxkczpcbiAqICAgLSBQbGFpbiBwYXRoIHN0cmluZyBhdCBhbnkgZGVwdGg6IGp1c3Qgd29ya3MgKHN0cnVjdHVyYWwgcmVjdXJzaW9uKS5cbiAqICAgLSBTdHJpbmdpZmllZC1KU09OIHdyYXBwZXI6IG5hbWUgdGhlIGZpZWxkIGBqc29uUGF5bG9hZGAgKG9yIGV4dGVuZFxuICogICAgIGBKU09OX1dSQVBQRVJfS0VZU2AgYWJvdmUpLlxuICogICAtIEF2b2lkIGVtYmVkZGluZyBge2Fzc2V0UGF0aH1gIGluc2lkZSBsYXJnZXIgbm9uLXBhdGggc3RyaW5ncyAoVVJMcyB3aXRoXG4gKiAgICAgcXVlcnkgcGFyYW1ldGVycyBldGMuKSDigJQgdGhlIGNvbnRhaW5tZW50IGNoZWNrIHJlamVjdHMgdGhvc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwUmVwbGFjZUFzc2V0UGF0aCh2YWx1ZTogdW5rbm93biwgcmVwbGFjZW1lbnQ6IHN0cmluZyk6IHZvaWQge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuO1xuXG4gIGNvbnN0IHN1YnN0aXR1dGUgPSAocmF3OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGpvaW5lZCA9IHJhdy5zcGxpdChBU1NFVF9QQVRIX1RPS0VOKS5qb2luKHJlcGxhY2VtZW50KTtcbiAgICAvLyBTdHJpbmdzIHRoYXQgZG9uJ3QgY29udGFpbiBhbnkgcGF0aCBzZXBhcmF0b3IgYWZ0ZXIgc3Vic3RpdHV0aW9uXG4gICAgLy8gY2FuJ3QgdHJhdmVyc2Ug4oCUIHNraXAgdGhlIGNvbnRhaW5tZW50IGNoZWNrIGZvciBwZXJmIChlLmcuXG4gICAgLy8gcGxhY2Vob2xkZXJzIHVzZWQgYXMgbGFiZWxzKS5cbiAgICBpZiAoIWpvaW5lZC5pbmNsdWRlcygnLycpICYmICFqb2luZWQuaW5jbHVkZXMoJ1xcXFwnKSkgcmV0dXJuIGpvaW5lZDtcbiAgICBjb25zdCBjb250YWluZWQgPSBjb250YWluQXNzZXRQYXRoKHJlcGxhY2VtZW50LCBqb2luZWQpO1xuICAgIGlmIChjb250YWluZWQgIT09IG51bGwpIHJldHVybiBjb250YWluZWQ7XG4gICAgLy8gVHJhdmVyc2FsIGRldGVjdGVkLiBMb2cgb25jZSBhbmQgZmFsbCBiYWNrIHRvIGByZXBsYWNlbWVudGAgaXRzZWxmLFxuICAgIC8vIHdoaWNoIGlzIGF0IG1pbmltdW0gc3ludGFjdGljYWxseSBpbnNpZGUgdGhlIGFzc2V0IGRpci4gUmV0dXJuaW5nXG4gICAgLy8gdGhlIG9yaWdpbmFsIGByYXdgIHdvdWxkIGxlYXZlIHRoZSB1bnJlc29sdmVkIGB7YXNzZXRQYXRofWAgdG9rZW5cbiAgICAvLyBpbiB0aGUgb3V0cHV0LCBicmVha2luZyB0aGUgcnVudGltZSBtb3JlIHZpc2libHk7IHJldHVybmluZyB0aGVcbiAgICAvLyBiYXJlIGByZXBsYWNlbWVudGAgcmVzdWx0cyBpbiBhIDQwNC1vbi1sb2FkIHRoYXQncyBlYXNpZXIgdG8gZGVidWcuXG4gICAgLy8gVXNlIGBjb25zb2xlLmVycm9yYCAobm90IGB3YXJuYCk6IHRoZSBTREsgcnVudGltZSBgY29uc29sZWAgc2hpbVxuICAgIC8vIGV4cG9zZXMgb25seSBgbG9nYCBhbmQgYGVycm9yYC4gSW5zcGVjdG9yIC8gTm9kZSBjb25zdW1lcnMgc3RpbGxcbiAgICAvLyBzdXJmYWNlIHRoaXMgdGhyb3VnaCB0aGVpciBub3JtYWwgc3RkZXJyLlxuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgW2Fzc2V0LXBhY2tzXSByZWplY3RlZCB7YXNzZXRQYXRofSBzdWJzdGl0dXRpb24gdGhhdCBlc2NhcGVzIGFzc2V0IGRpcjogJHtKU09OLnN0cmluZ2lmeShyYXcpfSAtPiAke0pTT04uc3RyaW5naWZ5KGpvaW5lZCl9YCxcbiAgICApO1xuICAgIHJldHVybiByZXBsYWNlbWVudDtcbiAgfTtcblxuICAvLyBQYXJzZSBhIHN0cmluZ2lmaWVkLUpTT04gd3JhcHBlciwgcmVjdXJzZSBpbnRvIHRoZSBwYXJzZWQgdmFsdWUgd2l0aCB0aGVcbiAgLy8gc2FtZSBgcmVwbGFjZW1lbnRgLCBhbmQgcmUtc2VyaWFsaXplLiBSZXR1cm5zIHRoZSBuZXcgc3RyaW5nIG9uIHN1Y2Nlc3NcbiAgLy8gb3IgYG51bGxgIGlmIHRoZSB2YWx1ZSBpcyBub3QgYSBKU09OIG9iamVjdC9hcnJheSDigJQgY2FsbGVycyBmYWxsIGJhY2sgdG9cbiAgLy8gdGhlIHBsYWluIHBhdGgtc3Vic3RpdHV0aW9uIGJyYW5jaCBpbiB0aGF0IGNhc2UuXG4gIGNvbnN0IHN1YnN0aXR1dGVKc29uV3JhcHBlciA9IChyYXc6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICAgIC8vIENoZWFwIHNoYXBlIGNoZWNrIGJlZm9yZSBhdHRlbXB0aW5nIHBhcnNlIOKAlCBza2lwcyBwcmltaXRpdmVzLCBwYXRocyxcbiAgICAvLyBhbmQgbGFiZWxzIHRoYXQgaGFwcGVuIHRvIGxpdmUgdW5kZXIgYSBganNvblBheWxvYWRgIGtleS5cbiAgICBjb25zdCBmaXJzdCA9IHJhdy5jaGFyQ29kZUF0KDApO1xuICAgIGlmIChmaXJzdCAhPT0gMHg3YiAvKiAneycgKi8gJiYgZmlyc3QgIT09IDB4NWIgLyogJ1snICovKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICAgIHRyeSB7XG4gICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHBhcnNlZCA9PT0gbnVsbCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JykgcmV0dXJuIG51bGw7XG4gICAgZGVlcFJlcGxhY2VBc3NldFBhdGgocGFyc2VkLCByZXBsYWNlbWVudCk7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBhcnNlZCk7XG4gIH07XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IHZhbHVlW2ldO1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoaXRlbS5pbmNsdWRlcyhBU1NFVF9QQVRIX1RPS0VOKSkge1xuICAgICAgICAgIHZhbHVlW2ldID0gc3Vic3RpdHV0ZShpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVlcFJlcGxhY2VBc3NldFBhdGgoaXRlbSwgcmVwbGFjZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvYmogPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgIGNvbnN0IGl0ZW0gPSBvYmpba2V5XTtcbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoSlNPTl9XUkFQUEVSX0tFWVMuaGFzKGtleSkgJiYgaXRlbS5pbmNsdWRlcyhBU1NFVF9QQVRIX1RPS0VOKSkge1xuICAgICAgICBjb25zdCBuZXh0ID0gc3Vic3RpdHV0ZUpzb25XcmFwcGVyKGl0ZW0pO1xuICAgICAgICBpZiAobmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAgIG9ialtrZXldID0gbmV4dDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGl0ZW0uaW5jbHVkZXMoQVNTRVRfUEFUSF9UT0tFTikpIHtcbiAgICAgICAgb2JqW2tleV0gPSBzdWJzdGl0dXRlKGl0ZW0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWVwUmVwbGFjZUFzc2V0UGF0aChpdGVtLCByZXBsYWNlbWVudCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRlQXNzZXRQYXRoSW5Db21wb3NpdGUoXG4gIGNvbXBvc2l0ZTogQ29tcG9zaXRlLkRlZmluaXRpb24sXG4gIGNvbXBvc2l0ZVNyYzogc3RyaW5nLFxuKTogdm9pZCB7XG4gIGNvbnN0IHJlcGxhY2VtZW50ID0gYXNzZXRQYXRoRnJvbShjb21wb3NpdGVTcmMpO1xuICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb3NpdGUuY29tcG9uZW50cykge1xuICAgIGZvciAoY29uc3QgWywgY29tcG9uZW50RGF0YV0gb2YgY29tcG9uZW50LmRhdGEpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBnZXRKc29uUGF5bG9hZChjb21wb25lbnREYXRhKTtcbiAgICAgIGlmIChwYXlsb2FkICE9PSB1bmRlZmluZWQpIGRlZXBSZXBsYWNlQXNzZXRQYXRoKHBheWxvYWQsIHJlcGxhY2VtZW50KTtcbiAgICB9XG4gIH1cbn1cblxuLy8gQ29tcG9uZW50IG5hbWUgcHJlZml4ZXMgdG8gc3RyaXAgYmVmb3JlIGluc3RhbmNpbmcgYSBzcGF3bmVkIGNvbXBvc2l0ZS4gVG9kYXlcbi8vIHRoaXMgaXMgZWRpdG9yLW9ubHkgbWV0YWRhdGE6IHRoZSBJbnNwZWN0b3IgYmFrZXMgYGluc3BlY3Rvcjo6KmAgY29tcG9uZW50c1xuLy8gKENvbmZpZywgU2VsZWN0aW9uLCBOb2RlcywgSGlkZSwgTG9jaywg4oCmKSBpbnRvIGF1dGhvcmVkIGNvbXBvc2l0ZXMgZm9yIGl0cyBvd25cbi8vIHVzZS4gVGhleSBjYXJyeSBubyBganNvblNjaGVtYWAsIGFyZSByZWdpc3RlcmVkIG5vd2hlcmUgaW4gdGhlIHNjZW5lIHJ1bnRpbWUsXG4vLyBhbmQgYXJlIG1lYW5pbmdsZXNzIG9uY2UgZGVwbG95ZWQg4oCUIHNvIGBDb21wb3NpdGUuaW5zdGFuY2VgIHRocm93cyBvbiB0aGVtXG4vLyAoXCJyZWZlcmVuY2VzIHVuZGVmaW5lZCBjb21wb25lbnRcIikuIEFkZCBmdXJ0aGVyIHByZWZpeGVzIGhlcmUgaWYgbW9yZSBuZWVkXG4vLyBzdHJpcHBpbmcuXG5jb25zdCBDT01QT05FTlRTX1BSRUZJWEVTID0gWydpbnNwZWN0b3I6OiddO1xuXG4vKipcbiAqIFJldHVybiBhIGNvbXBvc2l0ZSB3aXRoIGV2ZXJ5IGNvbXBvbmVudCB3aG9zZSBuYW1lIG1hdGNoZXMgYVxuICogYENPTVBPTkVOVFNfUFJFRklYRVNgIGVudHJ5IHJlbW92ZWQuXG4gKlxuICogUHVyZTogcmV0dXJucyB0aGUgc2FtZSByZWZlcmVuY2Ugd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIHN0cmlwIChzbyBjYWxsZXJzIGNhblxuICogY2hlYXBseSBkZXRlY3QgYSBuby1vcCBhbmQgYXZvaWQgY29weWluZyksIG90aGVyd2lzZSBhIHNoYWxsb3cgY29weSB3aXRoIGFcbiAqIGZpbHRlcmVkIGBjb21wb25lbnRzYCBhcnJheS4gRW50aXRpZXMgYXJlIHVudG91Y2hlZCDigJQgb25seSB0aGUgc3RyaXBwZWRcbiAqIGNvbXBvbmVudHMgYXR0YWNoZWQgdG8gdGhlbSBhcmUgZHJvcHBlZCwgc28gZW50aXR5IG1hcHBpbmcgYW5kIElEIHJlbWFwIGFyZVxuICogdW5hZmZlY3RlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQ29tcG9uZW50cyhjb21wb3NpdGU6IENvbXBvc2l0ZS5EZWZpbml0aW9uKTogQ29tcG9zaXRlLkRlZmluaXRpb24ge1xuICBjb25zdCBrZXB0ID0gY29tcG9zaXRlLmNvbXBvbmVudHMuZmlsdGVyKFxuICAgIGMgPT4gIUNPTVBPTkVOVFNfUFJFRklYRVMuc29tZShwcmVmaXggPT4gYy5uYW1lLnN0YXJ0c1dpdGgocHJlZml4KSksXG4gICk7XG4gIGlmIChrZXB0Lmxlbmd0aCA9PT0gY29tcG9zaXRlLmNvbXBvbmVudHMubGVuZ3RoKSByZXR1cm4gY29tcG9zaXRlO1xuICByZXR1cm4geyAuLi5jb21wb3NpdGUsIGNvbXBvbmVudHM6IGtlcHQgfTtcbn1cblxuLy8g4pSA4pSA4pSAIElEIGFsbG9jYXRpb24gKyBUcmlnZ2VyIHJlZmVyZW5jZSByZW1hcCAoc3Bhd24tdGltZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbnR5cGUgSWRNYXAgPSBNYXA8c3RyaW5nLCBudW1iZXI+O1xuXG5mdW5jdGlvbiBpZEtleShjb21wb25lbnROYW1lOiBzdHJpbmcsIGVudGl0eUlkOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Y29tcG9uZW50TmFtZX06JHtlbnRpdHlJZH1gO1xufVxuXG5pbnRlcmZhY2UgUGFyc2VkUmVmIHtcbiAgY29tcG9uZW50TmFtZTogc3RyaW5nO1xuICBlbnRpdHlJZD86IG51bWJlcjsgLy8gdW5kZWZpbmVkIOKHkiByZXNvbHZlIGFnYWluc3QgdGhlIHJlZidzIG93biBlbnRpdHlcbn1cblxuZnVuY3Rpb24gcGFyc2VQbGFjZWhvbGRlclJlZihyZWY6IHN0cmluZyk6IFBhcnNlZFJlZiB8IG51bGwge1xuICBjb25zdCBzZWxmID0gcmVmLm1hdGNoKFNFTEZfUkVGKTtcbiAgaWYgKHNlbGYpIHJldHVybiB7IGNvbXBvbmVudE5hbWU6IHNlbGZbMV0gfTtcbiAgY29uc3QgY3Jvc3MgPSByZWYubWF0Y2goQ1JPU1NfRU5USVRZX1JFRik7XG4gIGlmIChjcm9zcykgcmV0dXJuIHsgY29tcG9uZW50TmFtZTogY3Jvc3NbMl0sIGVudGl0eUlkOiBOdW1iZXIoY3Jvc3NbMV0pIH07XG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBNaW5pbWFsIHN0cnVjdHVyYWwgc2hhcGUgd2UgbmVlZCBmcm9tIGFueSBpZC1iZWFyaW5nIGNvbXBvbmVudCBkZWZpbml0aW9uLlxuLy8gQWN0aW9ucyAvIFN0YXRlcyAvIENvdW50ZXIgYWxsIGV4cG9zZSBgZ2V0TXV0YWJsZU9yTnVsbChlbnRpdHkpYCByZXR1cm5pbmdcbi8vIGEgdmFsdWUgd2l0aCBgLmlkOiBudW1iZXJgLCBidXQgdGhlaXIgYHZhbHVlYCBmaWVsZCB0eXBlcyBkaXZlcmdlIChBY3Rpb25bXVxuLy8gdnMgc3RyaW5nW10gdnMgbnVtYmVyKSB3aGljaCBtYWtlcyB0aGVtIGluY29tcGF0aWJsZSBhcyBhIFJlY29yZCB2YWx1ZVxuLy8gdHlwZS4gV2Ugb25seSBldmVyIHJlYWQvd3JpdGUgYC5pZGAsIHNvIHRoaXMgbmFycm93IHNoYXBlIGlzIGVub3VnaC5cbnR5cGUgSWRNdXRhYmxlQ29tcG9uZW50ID0ge1xuICBnZXRNdXRhYmxlT3JOdWxsKGVudGl0eTogRW50aXR5KTogeyBpZD86IG51bWJlciB9IHwgbnVsbDtcbn07XG5cbi8qKlxuICogRm9yIGVhY2ggY29tcG9zaXRlIGNvbXBvbmVudCBsaXN0ZWQgaW4gQ09NUE9ORU5UU19XSVRIX0lEIHdob3NlIHBheWxvYWRcbiAqIGNhcnJpZXMgYGlkOiAne3NlbGZ9J2AsIGFsbG9jYXRlIGEgZnJlc2ggbnVtZXJpYyBJRCB2aWEgYGdldE5leHRJZGAsXG4gKiB3cml0ZSBpdCBvbnRvIHRoZSBsaXZlIHNwYXduZWQgY29tcG9uZW50LCBhbmQgcmV0dXJuIHRoZSBtYXBwaW5nIHNvXG4gKiBUcmlnZ2VyIHJlZmVyZW5jZXMgY2FuIGJlIHJlbWFwcGVkIGluIGEgc2Vjb25kIHBhc3MuXG4gKlxuICogVGhlIGVuZ2luZSBsb29rcyB1cCB0aGUgY29tcG9uZW50IGRlZmluaXRpb24gYnkgbmFtZSBkaXJlY3RseSDigJQgbm9cbiAqIHBhcmFsbGVsIGBuYW1lIOKGkiBjb21wb25lbnRgIHRhYmxlIHRvIG1haW50YWluLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsb2NhdGVJZHNGb3JTcGF3bmVkQ29tcG9uZW50cyhcbiAgZW5naW5lOiBJRW5naW5lLFxuICBjb21wb3NpdGU6IENvbXBvc2l0ZS5EZWZpbml0aW9uLFxuICBzcGF3bmVkRW50aXR5QnlDb21wb3NpdGVJZDogTWFwPG51bWJlciwgRW50aXR5Pixcbik6IElkTWFwIHtcbiAgY29uc3QgaWRzOiBJZE1hcCA9IG5ldyBNYXAoKTtcbiAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9zaXRlLmNvbXBvbmVudHMpIHtcbiAgICBpZiAoIUNPTVBPTkVOVFNfV0lUSF9JRC5pbmNsdWRlcyhjb21wb25lbnQubmFtZSkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IENvbXBvbmVudERlZiA9IGVuZ2luZS5nZXRDb21wb25lbnRPck51bGwoY29tcG9uZW50Lm5hbWUpIGFzIElkTXV0YWJsZUNvbXBvbmVudCB8IG51bGw7XG4gICAgaWYgKCFDb21wb25lbnREZWYpIGNvbnRpbnVlO1xuXG4gICAgZm9yIChjb25zdCBbY29tcG9zaXRlRW50aXR5SWQsIGNvbXBvbmVudERhdGFdIG9mIGNvbXBvbmVudC5kYXRhKSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gZ2V0SnNvblBheWxvYWQ8eyBpZD86IHVua25vd24gfT4oY29tcG9uZW50RGF0YSk7XG4gICAgICBpZiAoIXBheWxvYWQgfHwgYCR7cGF5bG9hZC5pZH1gICE9PSAne3NlbGZ9JykgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGRlc3RFbnRpdHkgPSBzcGF3bmVkRW50aXR5QnlDb21wb3NpdGVJZC5nZXQoY29tcG9zaXRlRW50aXR5SWQpO1xuICAgICAgaWYgKGRlc3RFbnRpdHkgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IG5ld0lkID0gZ2V0TmV4dElkKGVuZ2luZSk7XG4gICAgICBpZHMuc2V0KGlkS2V5KGNvbXBvbmVudC5uYW1lLCBjb21wb3NpdGVFbnRpdHlJZCksIG5ld0lkKTtcbiAgICAgIGNvbnN0IGxpdmUgPSBDb21wb25lbnREZWYuZ2V0TXV0YWJsZU9yTnVsbChkZXN0RW50aXR5KTtcbiAgICAgIGlmIChsaXZlKSBsaXZlLmlkID0gbmV3SWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBpZHM7XG59XG5cbi8qKlxuICogUmV3cml0ZSBUcmlnZ2VyIGBhY3Rpb25zW10uaWRgIGFuZCBgY29uZGl0aW9uc1tdLmlkYCBwbGFjZWhvbGRlciBzdHJpbmdzXG4gKiAoYHtzZWxmOkNvbXBvbmVudH1gIC8gYHtlbnRpdHk6Q29tcG9uZW50fWApIGludG8gdGhlIG51bWVyaWMgSURzIGFsbG9jYXRlZFxuICogaW4gdGhlIHByZXZpb3VzIHBhc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1hcFRyaWdnZXJSZWZlcmVuY2VzKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIHNwYXduZWRFbnRpdGllczogSXRlcmFibGU8W0VudGl0eSwgbnVtYmVyXT4sXG4gIGlkczogSWRNYXAsXG4pOiB2b2lkIHtcbiAgY29uc3QgeyBUcmlnZ2VycyB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpO1xuXG4gIGNvbnN0IHJlc29sdmUgPSAoaWRSZWY6IHVua25vd24sIG93bkNvbXBvc2l0ZUVudGl0eUlkOiBudW1iZXIpOiB1bmtub3duID0+IHtcbiAgICBpZiAodHlwZW9mIGlkUmVmICE9PSAnc3RyaW5nJykgcmV0dXJuIGlkUmVmO1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlUGxhY2Vob2xkZXJSZWYoaWRSZWYpO1xuICAgIGlmICghcGFyc2VkKSByZXR1cm4gaWRSZWY7XG4gICAgY29uc3QgbG9va3VwRW50aXR5SWQgPSBwYXJzZWQuZW50aXR5SWQgPz8gb3duQ29tcG9zaXRlRW50aXR5SWQ7XG4gICAgcmV0dXJuIGlkcy5nZXQoaWRLZXkocGFyc2VkLmNvbXBvbmVudE5hbWUsIGxvb2t1cEVudGl0eUlkKSkgPz8gaWRSZWY7XG4gIH07XG5cbiAgZm9yIChjb25zdCBbZGVzdEVudGl0eSwgY29tcG9zaXRlRW50aXR5SWRdIG9mIHNwYXduZWRFbnRpdGllcykge1xuICAgIGNvbnN0IHRyaWdnZXJzID0gVHJpZ2dlcnMuZ2V0TXV0YWJsZU9yTnVsbChkZXN0RW50aXR5KTtcbiAgICBpZiAoIXRyaWdnZXJzKSBjb250aW51ZTtcbiAgICBmb3IgKGNvbnN0IHRyaWdnZXIgb2YgdHJpZ2dlcnMudmFsdWUpIHtcbiAgICAgIGlmICh0cmlnZ2VyLmNvbmRpdGlvbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb25kaXRpb24gb2YgdHJpZ2dlci5jb25kaXRpb25zKSB7XG4gICAgICAgICAgKGNvbmRpdGlvbiBhcyB7IGlkOiB1bmtub3duIH0pLmlkID0gcmVzb2x2ZShjb25kaXRpb24uaWQsIGNvbXBvc2l0ZUVudGl0eUlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdHJpZ2dlci5hY3Rpb25zKSB7XG4gICAgICAgIChhY3Rpb24gYXMgeyBpZDogdW5rbm93biB9KS5pZCA9IHJlc29sdmUoYWN0aW9uLmlkLCBjb21wb3NpdGVFbnRpdHlJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmV3cml0ZSBgY29yZS1zY2hlbWE6OlN5bmMtQ29tcG9uZW50c2AuYGNvbXBvbmVudElkc2Agb24gdGhlIHNwYXduZWQgc3VidHJlZVxuICogZnJvbSBjb21wb25lbnQtKm5hbWUqIHBsYWNlaG9sZGVycyB0byB0aGUgbnVtZXJpYyBjb21wb25lbnQgaWRzIHRoZSBlbmdpbmVcbiAqIHNlcmlhbGl6ZXMuXG4gKlxuICogQXNzZXQtcGFjayBjb21wb3NpdGVzIHN0b3JlIHRoZXNlIGlkcyBhcyBwb3J0YWJsZSBuYW1lcyAoZS5nLlxuICogYFwiYXNzZXQtcGFja3M6OlN0YXRlc1wiYCkg4oCUIHRoZSBzYW1lIGNvbnZlbnRpb24gdGhlIEluc3BlY3RvciByZXNvbHZlcyB2aWFcbiAqIGBwYXJzZVN5bmNDb21wb25lbnRzYCB3aGVuIHBsYWNpbmcgYSBzbWFydCBpdGVtIGZyb20gdGhlIGNhdGFsb2cuIFRoZVxuICogU1BBV05fRU5USVRZIHBhdGggbG9hZHMgdGhlIGNvbXBvc2l0ZS5qc29uIGRpcmVjdGx5LCBzbyB3aXRob3V0IHRoaXMgcGFzcyB0aGVcbiAqIHJhdyBuYW1lcyByZWFjaCB0aGUgbGl2ZSBgU3luY0NvbXBvbmVudHNgIGNvbXBvbmVudCwgd2hvc2Ugc2NoZW1hIGlzXG4gKiBgQXJyYXkoSW50NjQpYDsgdGhlIENSRFQgc2VyaWFsaXplciB0aGVuIHRocm93c1xuICogYENhbm5vdCBjb252ZXJ0IDxuYW1lPiB0byBhIEJpZ0ludGAgZXZlcnkgdGljay5cbiAqXG4gKiBSdW5zIHBvc3QtaW5zdGFuY2UgKGFsb25nc2lkZSBgcmVtYXBUcmlnZ2VyUmVmZXJlbmNlc2ApIHNvIGV2ZXJ5IGNvbXBvbmVudFxuICogdGhlIGNvbXBvc2l0ZSByZWZlcmVuY2VzIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBhbmQgcmVzb2x2YWJsZSBieSBuYW1lLlxuICogTnVtZXJpYyBlbnRyaWVzIHBhc3MgdGhyb3VnaCB1bmNoYW5nZWQg4oCUIHNvbWUgcGFja3MgYWxyZWFkeSBzaGlwIHJlc29sdmVkXG4gKiBpZHMg4oCUIGFuZCB0aGUgd3JpdGUgaXMgc2tpcHBlZCBlbnRpcmVseSB3aGVuIG5vdGhpbmcgbmVlZGVkIHJlc29sdmluZywgdG9cbiAqIGF2b2lkIGEgcmVkdW5kYW50IENSRFQgdXBkYXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtYXBTeW5jQ29tcG9uZW50SWRzKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIHNwYXduZWRFbnRpdGllczogSXRlcmFibGU8W0VudGl0eSwgbnVtYmVyXT4sXG4pOiB2b2lkIHtcbiAgY29uc3QgeyBTeW5jQ29tcG9uZW50cyB9ID0gZ2V0RXhwbG9yZXJDb21wb25lbnRzKGVuZ2luZSk7XG4gIGZvciAoY29uc3QgW2Rlc3RFbnRpdHldIG9mIHNwYXduZWRFbnRpdGllcykge1xuICAgIGNvbnN0IHN5bmMgPSBTeW5jQ29tcG9uZW50cy5nZXRPck51bGwoZGVzdEVudGl0eSk7XG4gICAgaWYgKCFzeW5jIHx8ICFBcnJheS5pc0FycmF5KHN5bmMuY29tcG9uZW50SWRzKSkgY29udGludWU7XG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHJlc29sdmVkID0gKHN5bmMuY29tcG9uZW50SWRzIGFzIHVua25vd25bXSkucmVkdWNlPG51bWJlcltdPigoYWNjLCBpZCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgYWNjLnB1c2goaWQpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBlbmdpbmUuZ2V0Q29tcG9uZW50T3JOdWxsKGlkKTtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkgYWNjLnB1c2goY29tcG9uZW50LmNvbXBvbmVudElkKTtcbiAgICAgICAgZWxzZSBjb25zb2xlLmVycm9yKGBbYXNzZXQtcGFja3NdIFN5bmNDb21wb25lbnRzIHJlZmVyZW5jZXMgdW5rbm93biBjb21wb25lbnQgXCIke2lkfVwiYCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcblxuICAgIGlmIChjaGFuZ2VkKSBTeW5jQ29tcG9uZW50cy5jcmVhdGVPclJlcGxhY2UoZGVzdEVudGl0eSwgeyBjb21wb25lbnRJZHM6IHJlc29sdmVkIH0pO1xuICB9XG59XG5cbi8qKlxuICogQWZ0ZXIgYENvbXBvc2l0ZS5pbnN0YW5jZWAgc3Bhd25zIGEgc21hcnQtaXRlbSBzdWJ0cmVlLCByZXNvbHZlIGl0c1xuICogcGxhY2Vob2xkZXIgSURzIHNvIGhhbmRsZXJzIGNhbiBmaXJlOlxuICpcbiAqICAgMS4gQWxsb2NhdGUgZnJlc2ggbnVtZXJpYyBJRHMgZm9yIEFjdGlvbnMvU3RhdGVzL0NvdW50ZXIgY29tcG9uZW50cyB3aG9zZVxuICogICAgICBjb21wb3NpdGUtc2lkZSBpZCBpcyB0aGUgbGl0ZXJhbCBge3NlbGZ9YC5cbiAqICAgMi4gUmV3cml0ZSBUcmlnZ2VyIGBhY3Rpb25zW10uaWRgIC8gYGNvbmRpdGlvbnNbXS5pZGAgcGxhY2Vob2xkZXJzIHRvXG4gKiAgICAgIHBvaW50IGF0IHRoZSBuZXdseS1hbGxvY2F0ZWQgbnVtZXJpYyBJRHMuXG4gKiAgIDMuIFJlc29sdmUgYFN5bmNDb21wb25lbnRzLmNvbXBvbmVudElkc2AgY29tcG9uZW50LW5hbWUgcGxhY2Vob2xkZXJzIHRvXG4gKiAgICAgIHRoZWlyIG51bWVyaWMgY29tcG9uZW50IGlkcy5cbiAqXG4gKiBUaGUgY2FsbGVyIHN1cHBsaWVzIHRoZSBjb21wb3NpdGUtZW50aXR5IOKGkiBsaXZlLWVudGl0eSBtYXAgZGlyZWN0bHkgKHZpYVxuICogdGhlIGBFbnRpdHlNYXBgIHBvcHVsYXRlZCBieSBgRU1NX0RJUkVDVF9NQVBQSU5HYCkuIFdlIG5vIGxvbmdlciByZWFkIGl0XG4gKiBiYWNrIGZyb20gYENvbXBvc2l0ZVJvb3RgOiB0aGUgbmV3IFNESyBvbmx5IHdyaXRlcyB0aGF0IGNvbXBvbmVudCBmb3JcbiAqIGNvbXBvc2l0ZXMgY29udGFpbmluZyBuZXN0ZWQgY2hpbGRyZW4sIHNvIGxlYWYgY29tcG9zaXRlcyBoYXZlIG5vIHJvdyB0b1xuICogcmVhZC5cbiAqXG4gKiBNaXJyb3JzIHRoZSBpbnNwZWN0b3IncyBkcmFnLW4tZHJvcCBpbml0aWFsaXphdGlvbiBwYXNzOyBib3RoIHNob3VsZFxuICogZXZlbnR1YWxseSBjYWxsIHRoaXMgZnVuY3Rpb24gKHNlZSBUT0RPIGF0IHRvcCBvZiBmaWxlKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVDb21wb25lbnRJZHNGcm9tQ29tcG9zaXRlKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIGNvbXBvc2l0ZTogQ29tcG9zaXRlLkRlZmluaXRpb24sXG4gIGVudGl0eU1hcDogRW50aXR5TWFwLFxuKTogdm9pZCB7XG4gIGNvbnN0IHNwYXduZWRFbnRpdHlCeUNvbXBvc2l0ZUlkID0gbmV3IE1hcDxudW1iZXIsIEVudGl0eT4oKTtcbiAgY29uc3QgaW52ZXJzZTogW0VudGl0eSwgbnVtYmVyXVtdID0gW107XG4gIGZvciAoY29uc3QgW3NyYywgZHN0XSBvZiBlbnRpdHlNYXAuZW50cmllcygpKSB7XG4gICAgc3Bhd25lZEVudGl0eUJ5Q29tcG9zaXRlSWQuc2V0KHNyYyBhcyBudW1iZXIsIGRzdCk7XG4gICAgaW52ZXJzZS5wdXNoKFtkc3QsIHNyYyBhcyBudW1iZXJdKTtcbiAgfVxuXG4gIGNvbnN0IGlkcyA9IGFsbG9jYXRlSWRzRm9yU3Bhd25lZENvbXBvbmVudHMoZW5naW5lLCBjb21wb3NpdGUsIHNwYXduZWRFbnRpdHlCeUNvbXBvc2l0ZUlkKTtcbiAgcmVtYXBUcmlnZ2VyUmVmZXJlbmNlcyhlbmdpbmUsIGludmVyc2UsIGlkcyk7XG4gIHJlbWFwU3luY0NvbXBvbmVudElkcyhlbmdpbmUsIGludmVyc2UpO1xufVxuIl19
@@ -140,9 +140,9 @@ export function requestPresentationState() {
140
140
  }
141
141
  export async function consumePresentationMessages() {
142
142
  try {
143
- const response = await consumeMessages({ topic: PRESENTATION_TOPIC });
143
+ const { messages } = await consumeMessages({ topic: PRESENTATION_TOPIC });
144
144
  let latestState;
145
- for (const msg of response) {
145
+ for (const msg of messages) {
146
146
  try {
147
147
  const parsed = JSON.parse(msg.data);
148
148
  if (parsed.type === 'presentation:state') {
@@ -205,4 +205,4 @@ export function stopPresentation() {
205
205
  data: JSON.stringify({ type: 'presentation:stop' }),
206
206
  });
207
207
  }
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FkbWluLXRvb2xraXQtdWkvVmlkZW9Db250cm9sL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsZUFBZSxHQUNoQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJNUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNsQixVQUFVLEVBQUUseUNBQXlDLFNBQVMsRUFBRSxzQkFBc0I7SUFDdEYsaUJBQWlCLEVBQUUseUNBQXlDLFNBQVMsRUFBRSw0QkFBNEI7SUFDbkcsVUFBVSxFQUFFLHlDQUF5QyxTQUFTLEVBQUUsa0JBQWtCO0lBQ2xGLHNCQUFzQixFQUFFLHlDQUF5QyxTQUFTLEVBQUUsOEJBQThCO0lBQzFHLG1CQUFtQixFQUFFLCtDQUErQyxTQUFTLEVBQUUsZ0JBQWdCO0NBQ2hHLENBQUMsQ0FBQztBQW1CSCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVk7SUFDaEMsT0FBTyxlQUFlLENBQW9CLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDL0YsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCO0lBQ3JDLE9BQU8sZUFBZSxDQUNwQixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFDakUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQ3RCLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFB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QUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBnZXRBY3RpdmVWaWRlb1N0cmVhbXMsXG4gIHN1YnNjcmliZVRvVG9waWMsXG4gIHB1Ymxpc2hEYXRhLFxuICBjb25zdW1lTWVzc2FnZXMsXG59IGZyb20gJ35zeXN0ZW0vQ29tbXNBcGknO1xuaW1wb3J0IHsgZ2V0RG9tYWluLCB3cmFwU2lnbmVkRmV0Y2ggfSBmcm9tICcuLi9mZXRjaC11dGlscyc7XG5pbXBvcnQgdHlwZSB7IFJlc3VsdCB9IGZyb20gJy4uL2ZldGNoLXV0aWxzJztcbmltcG9ydCB0eXBlIHsgUHJlc2VudGF0aW9uU3RhdGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IFVSTFMgPSAoKSA9PiAoe1xuICBTVFJFQU1fS0VZOiBgaHR0cHM6Ly9jb21tcy1nYXRla2VlcGVyLmRlY2VudHJhbGFuZC4ke2dldERvbWFpbigpfS9zY2VuZS1zdHJlYW0tYWNjZXNzYCxcbiAgR0VUX0RDTF9DQVNUX0lORk86IGBodHRwczovL2NvbW1zLWdhdGVrZWVwZXIuZGVjZW50cmFsYW5kLiR7Z2V0RG9tYWluKCl9L2Nhc3QvZ2VuZXJhdGUtc3RyZWFtLWxpbmtgLFxuICBQUkVTRU5URVJTOiBgaHR0cHM6Ly9jb21tcy1nYXRla2VlcGVyLmRlY2VudHJhbGFuZC4ke2dldERvbWFpbigpfS9jYXN0L3ByZXNlbnRlcnNgLFxuICBQUkVTRU5UQVRJT05fQk9UX1RPS0VOOiBgaHR0cHM6Ly9jb21tcy1nYXRla2VlcGVyLmRlY2VudHJhbGFuZC4ke2dldERvbWFpbigpfS9jYXN0L3ByZXNlbnRhdGlvbi1ib3QtdG9rZW5gLFxuICBQUkVTRU5UQVRJT05fU0VSVkVSOiBgaHR0cHM6Ly9jYXN0LXByZXNlbnRlci1zZXJ2aWNlLmRlY2VudHJhbGFuZC4ke2dldERvbWFpbigpfS9wcmVzZW50YXRpb25zYCxcbn0pO1xuXG50eXBlIFN0cmVhbUtleVJlc3BvbnNlID0ge1xuICBzdHJlYW1pbmdVcmw6IHN0cmluZztcbiAgc3RyZWFtaW5nS2V5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogbnVtYmVyO1xuICBlbmRzQXQ6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIERjbENhc3RSZXNwb25zZSA9IHtcbiAgc3RyZWFtTGluazogc3RyaW5nO1xuICB3YXRjaGVyTGluazogc3RyaW5nO1xuICBzdHJlYW1pbmdLZXk6IHN0cmluZztcbiAgcGxhY2VJZDogc3RyaW5nO1xuICBwbGFjZU5hbWU6IHN0cmluZztcbiAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIGV4cGlyZXNJbkRheXM6IG51bWJlcjtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTdHJlYW1LZXkoKTogUHJvbWlzZTxSZXN1bHQ8U3RyZWFtS2V5UmVzcG9uc2UsIHN0cmluZz4+IHtcbiAgcmV0dXJuIHdyYXBTaWduZWRGZXRjaDxTdHJlYW1LZXlSZXNwb25zZT4oeyB1cmw6IFVSTFMoKS5TVFJFQU1fS0VZIH0sIHsgdG9DYW1lbENhc2U6IHRydWUgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVN0cmVhbUtleSgpOiBQcm9taXNlPFJlc3VsdDxTdHJlYW1LZXlSZXNwb25zZSwgc3RyaW5nPj4ge1xuICByZXR1cm4gd3JhcFNpZ25lZEZldGNoPFN0cmVhbUtleVJlc3BvbnNlPihcbiAgICB7IHVybDogVVJMUygpLlNUUkVBTV9LRVksIGluaXQ6IHsgbWV0aG9kOiAnUE9TVCcsIGhlYWRlcnM6IHt9IH0gfSxcbiAgICB7IHRvQ2FtZWxDYXNlOiB0cnVlIH0sXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXZva2VTdHJlYW1LZXkoKTogUHJvbWlzZTxSZXN1bHQ8U3RyZWFtS2V5UmVzcG9uc2UsIHN0cmluZz4+IHtcbiAgcmV0dXJuIHdyYXBTaWduZWRGZXRjaDxTdHJlYW1LZXlSZXNwb25zZT4oe1xuICAgIHVybDogVVJMUygpLlNUUkVBTV9LRVksXG4gICAgaW5pdDogeyBtZXRob2Q6ICdERUxFVEUnLCBoZWFkZXJzOiB7fSB9LFxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc2V0U3RyZWFtS2V5KCk6IFByb21pc2U8UmVzdWx0PFN0cmVhbUtleVJlc3BvbnNlLCBzdHJpbmc+PiB7XG4gIHJldHVybiB3cmFwU2lnbmVkRmV0Y2g8U3RyZWFtS2V5UmVzcG9uc2U+KFxuICAgIHsgdXJsOiBVUkxTKCkuU1RSRUFNX0tFWSwgaW5pdDogeyBtZXRob2Q6ICdQVVQnLCBoZWFkZXJzOiB7fSB9IH0sXG4gICAgeyB0b0NhbWVsQ2FzZTogdHJ1ZSB9LFxuICApO1xufVxuXG5leHBvcnQgdHlwZSBEY2xDYXN0VHJhY2tzUmVzcG9uc2UgPSB7XG4gIHBhcnRpY2lwYW50czoge1xuICAgIGlkZW50aXR5OiBzdHJpbmc7XG4gICAgdHJhY2tzOiB7XG4gICAgICBzaWQ6IHN0cmluZztcbiAgICAgIHR5cGU6ICdBVURJTycgfCAnVklERU8nO1xuICAgICAgc291cmNlOiAnTUlDUk9QSE9ORScgfCAnQ0FNRVJBJyB8ICdTQ1JFRU5fU0hBUkUnO1xuICAgIH1bXTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gIH1bXTtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREY2xDYXN0SW5mbygpOiBQcm9taXNlPFJlc3VsdDxEY2xDYXN0UmVzcG9uc2UsIHN0cmluZz4+IHtcbiAgcmV0dXJuIHdyYXBTaWduZWRGZXRjaDxEY2xDYXN0UmVzcG9uc2U+KHsgdXJsOiBVUkxTKCkuR0VUX0RDTF9DQVNUX0lORk8gfSwgeyB0b0NhbWVsQ2FzZTogdHJ1ZSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByZXNlbnRlcnMoKTogUHJvbWlzZTxSZXN1bHQ8c3RyaW5nW10sIHN0cmluZz4+IHtcbiAgcmV0dXJuIHdyYXBTaWduZWRGZXRjaDxzdHJpbmdbXT4oeyB1cmw6IFVSTFMoKS5QUkVTRU5URVJTIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvbW90ZVByZXNlbnRlcihhZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPFJlc3VsdDx2b2lkLCBzdHJpbmc+PiB7XG4gIHJldHVybiB3cmFwU2lnbmVkRmV0Y2g8dm9pZD4oe1xuICAgIHVybDogYCR7VVJMUygpLlBSRVNFTlRFUlN9LyR7YWRkcmVzc31gLFxuICAgIGluaXQ6IHsgbWV0aG9kOiAnUFVUJywgaGVhZGVyczoge30gfSxcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVQcmVzZW50ZXJSb2xlKHBsYXllckFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBbZXJyb3IsIHByZXNlbnRlcnNdID0gYXdhaXQgZ2V0UHJlc2VudGVycygpO1xuICBjb25zb2xlLmxvZyhcbiAgICAnW0RjbENhc3RdIGVuc3VyZVByZXNlbnRlclJvbGUgLSBlcnJvcjonLFxuICAgIGVycm9yLFxuICAgICdwcmVzZW50ZXJzOicsXG4gICAgSlNPTi5zdHJpbmdpZnkocHJlc2VudGVycyksXG4gICAgJ3BsYXllckFkZHJlc3M6JyxcbiAgICBwbGF5ZXJBZGRyZXNzLFxuICApO1xuICBpZiAoZXJyb3IgfHwgIXByZXNlbnRlcnMpIHJldHVybjtcblxuICBjb25zdCBhZGRyID0gcGxheWVyQWRkcmVzcy50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBpc1ByZXNlbnRlciA9IEFycmF5LmlzQXJyYXkocHJlc2VudGVycykgPyBwcmVzZW50ZXJzLmluY2x1ZGVzKGFkZHIpIDogZmFsc2U7XG4gIGNvbnNvbGUubG9nKCdbRGNsQ2FzdF0gaXNQcmVzZW50ZXI6JywgaXNQcmVzZW50ZXIsICdhZGRyOicsIGFkZHIpO1xuXG4gIGlmICghaXNQcmVzZW50ZXIpIHtcbiAgICBjb25zdCBbcHJvbW90ZUVycm9yXSA9IGF3YWl0IHByb21vdGVQcmVzZW50ZXIoYWRkcik7XG4gICAgY29uc29sZS5sb2coJ1tEY2xDYXN0XSBwcm9tb3RlUHJlc2VudGVyIHJlc3VsdCAtIGVycm9yOicsIHByb21vdGVFcnJvcik7XG4gIH1cbn1cblxudHlwZSBQcmVzZW50YXRpb25Cb3RUb2tlblJlc3BvbnNlID0ge1xuICB1cmw6IHN0cmluZztcbiAgdG9rZW46IHN0cmluZztcbiAgcm9vbUlkOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UHJlc2VudGF0aW9uQm90VG9rZW4oXG4gIHN0cmVhbWluZ0tleTogc3RyaW5nLFxuKTogUHJvbWlzZTxSZXN1bHQ8UHJlc2VudGF0aW9uQm90VG9rZW5SZXNwb25zZSwgc3RyaW5nPj4ge1xuICByZXR1cm4gd3JhcFNpZ25lZEZldGNoPFByZXNlbnRhdGlvbkJvdFRva2VuUmVzcG9uc2U+KFxuICAgIHtcbiAgICAgIHVybDogVVJMUygpLlBSRVNFTlRBVElPTl9CT1RfVE9LRU4sXG4gICAgICBpbml0OiB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBzdHJlYW1pbmdLZXkgfSksXG4gICAgICB9LFxuICAgIH0sXG4gICAgeyB0b0NhbWVsQ2FzZTogdHJ1ZSB9LFxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRQcmVzZW50YXRpb24oXG4gIHVybDogc3RyaW5nLFxuICBsaXZla2l0VG9rZW46IHN0cmluZyxcbiAgbGl2ZWtpdFVybDogc3RyaW5nLFxuKTogUHJvbWlzZTxSZXN1bHQ8dm9pZCwgc3RyaW5nPj4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goVVJMUygpLlBSRVNFTlRBVElPTl9TRVJWRVIsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHVybCwgbGl2ZWtpdFRva2VuLCBsaXZla2l0VXJsIH0pLFxuICAgIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICByZXR1cm4gW2JvZHkgfHwgJ0ZhaWxlZCB0byBzdGFydCBwcmVzZW50YXRpb24nLCBudWxsXTtcbiAgICB9XG4gICAgcmV0dXJuIFtudWxsLCB1bmRlZmluZWQgYXMgdW5rbm93biBhcyB2b2lkXTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gWyhlcnJvciBhcyBFcnJvcikubWVzc2FnZSA/PyAnRmFpbGVkIHRvIHN0YXJ0IHByZXNlbnRhdGlvbicsIG51bGxdO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEZsYXR0ZW5lZFRyYWNrID0ge1xuICBzaWQ6IHN0cmluZztcbiAgaWRlbnRpdHk6IHN0cmluZztcbiAgc291cmNlVHlwZTogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1c3RvbU5hbWU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFBhcnRpY2lwYW50ID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkZW50aXR5OiBzdHJpbmc7XG4gIHRyYWNrczogRmxhdHRlbmVkVHJhY2tbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBTT1VSQ0VfVFlQRV9MQUJFTFM6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XG4gIDE6ICdDYW1lcmEnLFxuICAyOiAnU2NyZWVuJyxcbiAgMzogJ1ByZXNlbnRhdGlvbicsXG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U291cmNlTGFiZWwgPSAoc291cmNlVHlwZTogbnVtYmVyKSA9PiBTT1VSQ0VfVFlQRV9MQUJFTFNbc291cmNlVHlwZV0gPz8gJ1Vua25vd24nO1xuXG5jb25zdCBQUkVTRU5UQVRJT05fVE9QSUMgPSAncHJlc2VudGF0aW9uJztcbmNvbnN0IFBSRVNFTlRBVElPTl9TT1VSQ0VfVFlQRSA9IDM7XG5jb25zdCBQUkVTRU5UQVRJT05fQk9UX1BSRUZJWCA9ICdwcmVzZW50YXRpb24tYm90JztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJlc2VudGF0aW9uQm90KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gbmFtZS5zdGFydHNXaXRoKFBSRVNFTlRBVElPTl9CT1RfUFJFRklYKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ByZXNlbnRhdGlvblRyYWNrKHRyYWNrczogRmxhdHRlbmVkVHJhY2tbXSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHJhY2tzLnNvbWUoXG4gICAgdHJhY2sgPT4gdHJhY2suc291cmNlVHlwZSA9PT0gUFJFU0VOVEFUSU9OX1NPVVJDRV9UWVBFIHx8IGlzUHJlc2VudGF0aW9uQm90KHRyYWNrLm5hbWUpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBUcmFja3NCeVBhcnRpY2lwYW50KHRyYWNrczogRmxhdHRlbmVkVHJhY2tbXSk6IFBhcnRpY2lwYW50W10ge1xuICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgUGFydGljaXBhbnQ+KCk7XG4gIGZvciAoY29uc3QgdHJhY2sgb2YgdHJhY2tzKSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBtYXAuZ2V0KHRyYWNrLm5hbWUpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgZXhpc3RpbmcudHJhY2tzLnB1c2godHJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXAuc2V0KHRyYWNrLm5hbWUsIHsgbmFtZTogdHJhY2submFtZSwgaWRlbnRpdHk6IHRyYWNrLmlkZW50aXR5LCB0cmFja3M6IFt0cmFja10gfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKG1hcC52YWx1ZXMoKSk7XG59XG5cbmZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChpc1ByZXNlbnRhdGlvbkJvdChuYW1lKSkgcmV0dXJuICdQcmVzZW50YXRpb24nO1xuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFjdGl2ZVN0cmVhbXMoKTogUHJvbWlzZTxGbGF0dGVuZWRUcmFja1tdIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHJ1bnRpbWVTdHJlYW1zID0gYXdhaXQgZ2V0QWN0aXZlVmlkZW9TdHJlYW1zKHt9KTtcbiAgaWYgKCFydW50aW1lU3RyZWFtcykgcmV0dXJuO1xuICByZXR1cm4gcnVudGltZVN0cmVhbXMuc3RyZWFtcy5tYXAoXG4gICAgKHN0cmVhbTogeyB0cmFja1NpZDogc3RyaW5nOyBpZGVudGl0eTogc3RyaW5nOyBzb3VyY2VUeXBlOiBudW1iZXI7IG5hbWU/OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgY29uc3QgcmF3TmFtZSA9IHN0cmVhbS5uYW1lID8/IHN0cmVhbS5pZGVudGl0eTtcbiAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gZ2V0RGlzcGxheU5hbWUocmF3TmFtZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzaWQ6IHN0cmVhbS50cmFja1NpZCxcbiAgICAgICAgaWRlbnRpdHk6IHN0cmVhbS5pZGVudGl0eSxcbiAgICAgICAgc291cmNlVHlwZTogc3RyZWFtLnNvdXJjZVR5cGUsXG4gICAgICAgIG5hbWU6IHJhd05hbWUsXG4gICAgICAgIGN1c3RvbU5hbWU6IGAke2Rpc3BsYXlOYW1lfSAtICR7Z2V0U291cmNlTGFiZWwoc3RyZWFtLnNvdXJjZVR5cGUpfWAsXG4gICAgICB9O1xuICAgIH0sXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJzY3JpYmVUb1ByZXNlbnRhdGlvblRvcGljKCk6IHZvaWQge1xuICBzdWJzY3JpYmVUb1RvcGljKHsgdG9waWM6IFBSRVNFTlRBVElPTl9UT1BJQyB9KVxuICAgIC50aGVuKCgpID0+IHtcbiAgICAgIC8vIFJlcXVlc3QgY3VycmVudCBzdGF0ZSBmcm9tIGJvdCBzbyBsYXRlIGpvaW5lcnMgZ2V0IHRoZSBwcmVzZW50YXRpb24gc3RhdGVcbiAgICAgIHJlcXVlc3RQcmVzZW50YXRpb25TdGF0ZSgpO1xuICAgIH0pXG4gICAgLmNhdGNoKCgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdbRGNsQ2FzdF0gRmFpbGVkIHRvIHN1YnNjcmliZSB0byBwcmVzZW50YXRpb24gdG9waWMnKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3RQcmVzZW50YXRpb25TdGF0ZSgpOiB2b2lkIHtcbiAgcHVibGlzaERhdGEoe1xuICAgIHRvcGljOiBQUkVTRU5UQVRJT05fVE9QSUMsXG4gICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAncHJlc2VudGF0aW9uOmdldC1zdGF0ZScgfSksXG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29uc3VtZVByZXNlbnRhdGlvbk1lc3NhZ2VzKCk6IFByb21pc2U8XG4gIFByZXNlbnRhdGlvblN0YXRlIHwgJ3N0b3BwZWQnIHwgdW5kZWZpbmVkXG4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNvbnN1bWVNZXNzYWdlcyh7IHRvcGljOiBQUkVTRU5UQVRJT05fVE9QSUMgfSk7XG5cbiAgICBsZXQgbGF0ZXN0U3RhdGU6IFByZXNlbnRhdGlvblN0YXRlIHwgJ3N0b3BwZWQnIHwgdW5kZWZpbmVkO1xuICAgIGZvciAoY29uc3QgbXNnIG9mIHJlc3BvbnNlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKG1zZy5kYXRhKTtcbiAgICAgICAgaWYgKHBhcnNlZC50eXBlID09PSAncHJlc2VudGF0aW9uOnN0YXRlJykge1xuICAgICAgICAgIGxhdGVzdFN0YXRlID0ge1xuICAgICAgICAgICAgaWQ6IHBhcnNlZC5pZCxcbiAgICAgICAgICAgIGZpbGVOYW1lOiBwYXJzZWQuZmlsZU5hbWUsXG4gICAgICAgICAgICBjdXJyZW50U2xpZGU6IHBhcnNlZC5jdXJyZW50U2xpZGUsXG4gICAgICAgICAgICBzbGlkZUNvdW50OiBwYXJzZWQuc2xpZGVDb3VudCxcbiAgICAgICAgICAgIGZpbGVUeXBlOiBwYXJzZWQuZmlsZVR5cGUsXG4gICAgICAgICAgICBzbGlkZVZpZGVvczogcGFyc2VkLnNsaWRlVmlkZW9zID8/IFtdLFxuICAgICAgICAgICAgdmlkZW9TdGF0ZTogcGFyc2VkLnZpZGVvU3RhdGUgPz8gJ2lkbGUnLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAocGFyc2VkLnR5cGUgPT09ICdwcmVzZW50YXRpb246c3RvcHBlZCcpIHtcbiAgICAgICAgICBsYXRlc3RTdGF0ZSA9ICdzdG9wcGVkJztcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIFNraXAgbWFsZm9ybWVkIGluZGl2aWR1YWwgbWVzc2FnZXNcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxhdGVzdFN0YXRlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIGNvbnN1bWVNZXNzYWdlcyBmYWlsZWQgb3Igb3V0ZXIgSlNPTiBwYXJzZSBmYWlsZWQg4oCUIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXh0U2xpZGUoKTogdm9pZCB7XG4gIHB1Ymxpc2hEYXRhKHtcbiAgICB0b3BpYzogUFJFU0VOVEFUSU9OX1RPUElDLFxuICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ3ByZXNlbnRhdGlvbjpuYXZpZ2F0ZScsIGFjdGlvbjogJ25leHQnIH0pLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXZTbGlkZSgpOiB2b2lkIHtcbiAgcHVibGlzaERhdGEoe1xuICAgIHRvcGljOiBQUkVTRU5UQVRJT05fVE9QSUMsXG4gICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAncHJlc2VudGF0aW9uOm5hdmlnYXRlJywgYWN0aW9uOiAncHJldicgfSksXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGxheVByZXNlbnRhdGlvblZpZGVvKHZpZGVvSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICBwdWJsaXNoRGF0YSh7XG4gICAgdG9waWM6IFBSRVNFTlRBVElPTl9UT1BJQyxcbiAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdwcmVzZW50YXRpb246dmlkZW86cGxheScsIHZpZGVvSW5kZXggfSksXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF1c2VQcmVzZW50YXRpb25WaWRlbygpOiB2b2lkIHtcbiAgcHVibGlzaERhdGEoe1xuICAgIHRvcGljOiBQUkVTRU5UQVRJT05fVE9QSUMsXG4gICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAncHJlc2VudGF0aW9uOnZpZGVvOnBhdXNlJyB9KSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wUHJlc2VudGF0aW9uVmlkZW8oKTogdm9pZCB7XG4gIHB1Ymxpc2hEYXRhKHtcbiAgICB0b3BpYzogUFJFU0VOVEFUSU9OX1RPUElDLFxuICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ3ByZXNlbnRhdGlvbjp2aWRlbzpzdG9wJyB9KSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wUHJlc2VudGF0aW9uKCk6IHZvaWQge1xuICBwdWJsaXNoRGF0YSh7XG4gICAgdG9waWM6IFBSRVNFTlRBVElPTl9UT1BJQyxcbiAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdwcmVzZW50YXRpb246c3RvcCcgfSksXG4gIH0pO1xufVxuIl19
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FkbWluLXRvb2xraXQtdWkvVmlkZW9Db250cm9sL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsZUFBZSxHQUNoQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJNUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNsQixVQUFVLEVBQUUseUNBQXlDLFNBQVMsRUFBRSxzQkFBc0I7SUFDdEYsaUJBQWlCLEVBQUUseUNBQXlDLFNBQVMsRUFBRSw0QkFBNEI7SUFDbkcsVUFBVSxFQUFFLHlDQUF5QyxTQUFTLEVBQUUsa0JBQWtCO0lBQ2xGLHNCQUFzQixFQUFFLHlDQUF5QyxTQUFTLEVBQUUsOEJBQThCO0lBQzFHLG1CQUFtQixFQUFFLCtDQUErQyxTQUFTLEVBQUUsZ0JBQWdCO0NBQ2hHLENBQUMsQ0FBQztBQW1CSCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVk7SUFDaEMsT0FBTyxlQUFlLENBQW9CLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDL0YsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsaUJBQWlCO0lBQ3JDLE9BQU8sZUFBZSxDQUNwQixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFDakUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQ3RCLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFB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QUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2V0QWN0aXZlVmlkZW9TdHJlYW1zLFxuICBzdWJzY3JpYmVUb1RvcGljLFxuICBwdWJsaXNoRGF0YSxcbiAgY29uc3VtZU1lc3NhZ2VzLFxufSBmcm9tICd+c3lzdGVtL0NvbW1zQXBpJztcbmltcG9ydCB7IGdldERvbWFpbiwgd3JhcFNpZ25lZEZldGNoIH0gZnJvbSAnLi4vZmV0Y2gtdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBSZXN1bHQgfSBmcm9tICcuLi9mZXRjaC11dGlscyc7XG5pbXBvcnQgdHlwZSB7IFByZXNlbnRhdGlvblN0YXRlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBVUkxTID0gKCkgPT4gKHtcbiAgU1RSRUFNX0tFWTogYGh0dHBzOi8vY29tbXMtZ2F0ZWtlZXBlci5kZWNlbnRyYWxhbmQuJHtnZXREb21haW4oKX0vc2NlbmUtc3RyZWFtLWFjY2Vzc2AsXG4gIEdFVF9EQ0xfQ0FTVF9JTkZPOiBgaHR0cHM6Ly9jb21tcy1nYXRla2VlcGVyLmRlY2VudHJhbGFuZC4ke2dldERvbWFpbigpfS9jYXN0L2dlbmVyYXRlLXN0cmVhbS1saW5rYCxcbiAgUFJFU0VOVEVSUzogYGh0dHBzOi8vY29tbXMtZ2F0ZWtlZXBlci5kZWNlbnRyYWxhbmQuJHtnZXREb21haW4oKX0vY2FzdC9wcmVzZW50ZXJzYCxcbiAgUFJFU0VOVEFUSU9OX0JPVF9UT0tFTjogYGh0dHBzOi8vY29tbXMtZ2F0ZWtlZXBlci5kZWNlbnRyYWxhbmQuJHtnZXREb21haW4oKX0vY2FzdC9wcmVzZW50YXRpb24tYm90LXRva2VuYCxcbiAgUFJFU0VOVEFUSU9OX1NFUlZFUjogYGh0dHBzOi8vY2FzdC1wcmVzZW50ZXItc2VydmljZS5kZWNlbnRyYWxhbmQuJHtnZXREb21haW4oKX0vcHJlc2VudGF0aW9uc2AsXG59KTtcblxudHlwZSBTdHJlYW1LZXlSZXNwb25zZSA9IHtcbiAgc3RyZWFtaW5nVXJsOiBzdHJpbmc7XG4gIHN0cmVhbWluZ0tleTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IG51bWJlcjtcbiAgZW5kc0F0OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBEY2xDYXN0UmVzcG9uc2UgPSB7XG4gIHN0cmVhbUxpbms6IHN0cmluZztcbiAgd2F0Y2hlckxpbms6IHN0cmluZztcbiAgc3RyZWFtaW5nS2V5OiBzdHJpbmc7XG4gIHBsYWNlSWQ6IHN0cmluZztcbiAgcGxhY2VOYW1lOiBzdHJpbmc7XG4gIGV4cGlyZXNBdDogbnVtYmVyO1xuICBleHBpcmVzSW5EYXlzOiBudW1iZXI7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U3RyZWFtS2V5KCk6IFByb21pc2U8UmVzdWx0PFN0cmVhbUtleVJlc3BvbnNlLCBzdHJpbmc+PiB7XG4gIHJldHVybiB3cmFwU2lnbmVkRmV0Y2g8U3RyZWFtS2V5UmVzcG9uc2U+KHsgdXJsOiBVUkxTKCkuU1RSRUFNX0tFWSB9LCB7IHRvQ2FtZWxDYXNlOiB0cnVlIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVTdHJlYW1LZXkoKTogUHJvbWlzZTxSZXN1bHQ8U3RyZWFtS2V5UmVzcG9uc2UsIHN0cmluZz4+IHtcbiAgcmV0dXJuIHdyYXBTaWduZWRGZXRjaDxTdHJlYW1LZXlSZXNwb25zZT4oXG4gICAgeyB1cmw6IFVSTFMoKS5TVFJFQU1fS0VZLCBpbml0OiB7IG1ldGhvZDogJ1BPU1QnLCBoZWFkZXJzOiB7fSB9IH0sXG4gICAgeyB0b0NhbWVsQ2FzZTogdHJ1ZSB9LFxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmV2b2tlU3RyZWFtS2V5KCk6IFByb21pc2U8UmVzdWx0PFN0cmVhbUtleVJlc3BvbnNlLCBzdHJpbmc+PiB7XG4gIHJldHVybiB3cmFwU2lnbmVkRmV0Y2g8U3RyZWFtS2V5UmVzcG9uc2U+KHtcbiAgICB1cmw6IFVSTFMoKS5TVFJFQU1fS0VZLFxuICAgIGluaXQ6IHsgbWV0aG9kOiAnREVMRVRFJywgaGVhZGVyczoge30gfSxcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNldFN0cmVhbUtleSgpOiBQcm9taXNlPFJlc3VsdDxTdHJlYW1LZXlSZXNwb25zZSwgc3RyaW5nPj4ge1xuICByZXR1cm4gd3JhcFNpZ25lZEZldGNoPFN0cmVhbUtleVJlc3BvbnNlPihcbiAgICB7IHVybDogVVJMUygpLlNUUkVBTV9LRVksIGluaXQ6IHsgbWV0aG9kOiAnUFVUJywgaGVhZGVyczoge30gfSB9LFxuICAgIHsgdG9DYW1lbENhc2U6IHRydWUgfSxcbiAgKTtcbn1cblxuZXhwb3J0IHR5cGUgRGNsQ2FzdFRyYWNrc1Jlc3BvbnNlID0ge1xuICBwYXJ0aWNpcGFudHM6IHtcbiAgICBpZGVudGl0eTogc3RyaW5nO1xuICAgIHRyYWNrczoge1xuICAgICAgc2lkOiBzdHJpbmc7XG4gICAgICB0eXBlOiAnQVVESU8nIHwgJ1ZJREVPJztcbiAgICAgIHNvdXJjZTogJ01JQ1JPUEhPTkUnIHwgJ0NBTUVSQScgfCAnU0NSRUVOX1NIQVJFJztcbiAgICB9W107XG4gICAgbmFtZTogc3RyaW5nO1xuICB9W107XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RGNsQ2FzdEluZm8oKTogUHJvbWlzZTxSZXN1bHQ8RGNsQ2FzdFJlc3BvbnNlLCBzdHJpbmc+PiB7XG4gIHJldHVybiB3cmFwU2lnbmVkRmV0Y2g8RGNsQ2FzdFJlc3BvbnNlPih7IHVybDogVVJMUygpLkdFVF9EQ0xfQ0FTVF9JTkZPIH0sIHsgdG9DYW1lbENhc2U6IHRydWUgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQcmVzZW50ZXJzKCk6IFByb21pc2U8UmVzdWx0PHN0cmluZ1tdLCBzdHJpbmc+PiB7XG4gIHJldHVybiB3cmFwU2lnbmVkRmV0Y2g8c3RyaW5nW10+KHsgdXJsOiBVUkxTKCkuUFJFU0VOVEVSUyB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb21vdGVQcmVzZW50ZXIoYWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxSZXN1bHQ8dm9pZCwgc3RyaW5nPj4ge1xuICByZXR1cm4gd3JhcFNpZ25lZEZldGNoPHZvaWQ+KHtcbiAgICB1cmw6IGAke1VSTFMoKS5QUkVTRU5URVJTfS8ke2FkZHJlc3N9YCxcbiAgICBpbml0OiB7IG1ldGhvZDogJ1BVVCcsIGhlYWRlcnM6IHt9IH0sXG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlUHJlc2VudGVyUm9sZShwbGF5ZXJBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgW2Vycm9yLCBwcmVzZW50ZXJzXSA9IGF3YWl0IGdldFByZXNlbnRlcnMoKTtcbiAgY29uc29sZS5sb2coXG4gICAgJ1tEY2xDYXN0XSBlbnN1cmVQcmVzZW50ZXJSb2xlIC0gZXJyb3I6JyxcbiAgICBlcnJvcixcbiAgICAncHJlc2VudGVyczonLFxuICAgIEpTT04uc3RyaW5naWZ5KHByZXNlbnRlcnMpLFxuICAgICdwbGF5ZXJBZGRyZXNzOicsXG4gICAgcGxheWVyQWRkcmVzcyxcbiAgKTtcbiAgaWYgKGVycm9yIHx8ICFwcmVzZW50ZXJzKSByZXR1cm47XG5cbiAgY29uc3QgYWRkciA9IHBsYXllckFkZHJlc3MudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgaXNQcmVzZW50ZXIgPSBBcnJheS5pc0FycmF5KHByZXNlbnRlcnMpID8gcHJlc2VudGVycy5pbmNsdWRlcyhhZGRyKSA6IGZhbHNlO1xuICBjb25zb2xlLmxvZygnW0RjbENhc3RdIGlzUHJlc2VudGVyOicsIGlzUHJlc2VudGVyLCAnYWRkcjonLCBhZGRyKTtcblxuICBpZiAoIWlzUHJlc2VudGVyKSB7XG4gICAgY29uc3QgW3Byb21vdGVFcnJvcl0gPSBhd2FpdCBwcm9tb3RlUHJlc2VudGVyKGFkZHIpO1xuICAgIGNvbnNvbGUubG9nKCdbRGNsQ2FzdF0gcHJvbW90ZVByZXNlbnRlciByZXN1bHQgLSBlcnJvcjonLCBwcm9tb3RlRXJyb3IpO1xuICB9XG59XG5cbnR5cGUgUHJlc2VudGF0aW9uQm90VG9rZW5SZXNwb25zZSA9IHtcbiAgdXJsOiBzdHJpbmc7XG4gIHRva2VuOiBzdHJpbmc7XG4gIHJvb21JZDogc3RyaW5nO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByZXNlbnRhdGlvbkJvdFRva2VuKFxuICBzdHJlYW1pbmdLZXk6IHN0cmluZyxcbik6IFByb21pc2U8UmVzdWx0PFByZXNlbnRhdGlvbkJvdFRva2VuUmVzcG9uc2UsIHN0cmluZz4+IHtcbiAgcmV0dXJuIHdyYXBTaWduZWRGZXRjaDxQcmVzZW50YXRpb25Cb3RUb2tlblJlc3BvbnNlPihcbiAgICB7XG4gICAgICB1cmw6IFVSTFMoKS5QUkVTRU5UQVRJT05fQk9UX1RPS0VOLFxuICAgICAgaW5pdDoge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgc3RyZWFtaW5nS2V5IH0pLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHsgdG9DYW1lbENhc2U6IHRydWUgfSxcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0YXJ0UHJlc2VudGF0aW9uKFxuICB1cmw6IHN0cmluZyxcbiAgbGl2ZWtpdFRva2VuOiBzdHJpbmcsXG4gIGxpdmVraXRVcmw6IHN0cmluZyxcbik6IFByb21pc2U8UmVzdWx0PHZvaWQsIHN0cmluZz4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFVSTFMoKS5QUkVTRU5UQVRJT05fU0VSVkVSLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyB1cmwsIGxpdmVraXRUb2tlbiwgbGl2ZWtpdFVybCB9KSxcbiAgICB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgcmV0dXJuIFtib2R5IHx8ICdGYWlsZWQgdG8gc3RhcnQgcHJlc2VudGF0aW9uJywgbnVsbF07XG4gICAgfVxuICAgIHJldHVybiBbbnVsbCwgdW5kZWZpbmVkIGFzIHVua25vd24gYXMgdm9pZF07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2UgPz8gJ0ZhaWxlZCB0byBzdGFydCBwcmVzZW50YXRpb24nLCBudWxsXTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBGbGF0dGVuZWRUcmFjayA9IHtcbiAgc2lkOiBzdHJpbmc7XG4gIGlkZW50aXR5OiBzdHJpbmc7XG4gIHNvdXJjZVR5cGU6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBjdXN0b21OYW1lOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBQYXJ0aWNpcGFudCA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZGVudGl0eTogc3RyaW5nO1xuICB0cmFja3M6IEZsYXR0ZW5lZFRyYWNrW107XG59O1xuXG5leHBvcnQgY29uc3QgU09VUkNFX1RZUEVfTEFCRUxTOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+ID0ge1xuICAxOiAnQ2FtZXJhJyxcbiAgMjogJ1NjcmVlbicsXG4gIDM6ICdQcmVzZW50YXRpb24nLFxufTtcblxuZXhwb3J0IGNvbnN0IGdldFNvdXJjZUxhYmVsID0gKHNvdXJjZVR5cGU6IG51bWJlcikgPT4gU09VUkNFX1RZUEVfTEFCRUxTW3NvdXJjZVR5cGVdID8/ICdVbmtub3duJztcblxuY29uc3QgUFJFU0VOVEFUSU9OX1RPUElDID0gJ3ByZXNlbnRhdGlvbic7XG5jb25zdCBQUkVTRU5UQVRJT05fU09VUkNFX1RZUEUgPSAzO1xuY29uc3QgUFJFU0VOVEFUSU9OX0JPVF9QUkVGSVggPSAncHJlc2VudGF0aW9uLWJvdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ByZXNlbnRhdGlvbkJvdChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIG5hbWUuc3RhcnRzV2l0aChQUkVTRU5UQVRJT05fQk9UX1BSRUZJWCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNQcmVzZW50YXRpb25UcmFjayh0cmFja3M6IEZsYXR0ZW5lZFRyYWNrW10pOiBib29sZWFuIHtcbiAgcmV0dXJuIHRyYWNrcy5zb21lKFxuICAgIHRyYWNrID0+IHRyYWNrLnNvdXJjZVR5cGUgPT09IFBSRVNFTlRBVElPTl9TT1VSQ0VfVFlQRSB8fCBpc1ByZXNlbnRhdGlvbkJvdCh0cmFjay5uYW1lKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwVHJhY2tzQnlQYXJ0aWNpcGFudCh0cmFja3M6IEZsYXR0ZW5lZFRyYWNrW10pOiBQYXJ0aWNpcGFudFtdIHtcbiAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIFBhcnRpY2lwYW50PigpO1xuICBmb3IgKGNvbnN0IHRyYWNrIG9mIHRyYWNrcykge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gbWFwLmdldCh0cmFjay5uYW1lKTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIGV4aXN0aW5nLnRyYWNrcy5wdXNoKHRyYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWFwLnNldCh0cmFjay5uYW1lLCB7IG5hbWU6IHRyYWNrLm5hbWUsIGlkZW50aXR5OiB0cmFjay5pZGVudGl0eSwgdHJhY2tzOiBbdHJhY2tdIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShtYXAudmFsdWVzKCkpO1xufVxuXG5mdW5jdGlvbiBnZXREaXNwbGF5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoaXNQcmVzZW50YXRpb25Cb3QobmFtZSkpIHJldHVybiAnUHJlc2VudGF0aW9uJztcbiAgcmV0dXJuIG5hbWU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBY3RpdmVTdHJlYW1zKCk6IFByb21pc2U8RmxhdHRlbmVkVHJhY2tbXSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBydW50aW1lU3RyZWFtcyA9IGF3YWl0IGdldEFjdGl2ZVZpZGVvU3RyZWFtcyh7fSk7XG4gIGlmICghcnVudGltZVN0cmVhbXMpIHJldHVybjtcbiAgcmV0dXJuIHJ1bnRpbWVTdHJlYW1zLnN0cmVhbXMubWFwKFxuICAgIChzdHJlYW06IHsgdHJhY2tTaWQ6IHN0cmluZzsgaWRlbnRpdHk6IHN0cmluZzsgc291cmNlVHlwZTogbnVtYmVyOyBuYW1lPzogc3RyaW5nIH0pID0+IHtcbiAgICAgIGNvbnN0IHJhd05hbWUgPSBzdHJlYW0ubmFtZSA/PyBzdHJlYW0uaWRlbnRpdHk7XG4gICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IGdldERpc3BsYXlOYW1lKHJhd05hbWUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2lkOiBzdHJlYW0udHJhY2tTaWQsXG4gICAgICAgIGlkZW50aXR5OiBzdHJlYW0uaWRlbnRpdHksXG4gICAgICAgIHNvdXJjZVR5cGU6IHN0cmVhbS5zb3VyY2VUeXBlLFxuICAgICAgICBuYW1lOiByYXdOYW1lLFxuICAgICAgICBjdXN0b21OYW1lOiBgJHtkaXNwbGF5TmFtZX0gLSAke2dldFNvdXJjZUxhYmVsKHN0cmVhbS5zb3VyY2VUeXBlKX1gLFxuICAgICAgfTtcbiAgICB9LFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Vic2NyaWJlVG9QcmVzZW50YXRpb25Ub3BpYygpOiB2b2lkIHtcbiAgc3Vic2NyaWJlVG9Ub3BpYyh7IHRvcGljOiBQUkVTRU5UQVRJT05fVE9QSUMgfSlcbiAgICAudGhlbigoKSA9PiB7XG4gICAgICAvLyBSZXF1ZXN0IGN1cnJlbnQgc3RhdGUgZnJvbSBib3Qgc28gbGF0ZSBqb2luZXJzIGdldCB0aGUgcHJlc2VudGF0aW9uIHN0YXRlXG4gICAgICByZXF1ZXN0UHJlc2VudGF0aW9uU3RhdGUoKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnW0RjbENhc3RdIEZhaWxlZCB0byBzdWJzY3JpYmUgdG8gcHJlc2VudGF0aW9uIHRvcGljJyk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0UHJlc2VudGF0aW9uU3RhdGUoKTogdm9pZCB7XG4gIHB1Ymxpc2hEYXRhKHtcbiAgICB0b3BpYzogUFJFU0VOVEFUSU9OX1RPUElDLFxuICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ3ByZXNlbnRhdGlvbjpnZXQtc3RhdGUnIH0pLFxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbnN1bWVQcmVzZW50YXRpb25NZXNzYWdlcygpOiBQcm9taXNlPFxuICBQcmVzZW50YXRpb25TdGF0ZSB8ICdzdG9wcGVkJyB8IHVuZGVmaW5lZFxuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBtZXNzYWdlcyB9ID0gYXdhaXQgY29uc3VtZU1lc3NhZ2VzKHsgdG9waWM6IFBSRVNFTlRBVElPTl9UT1BJQyB9KTtcblxuICAgIGxldCBsYXRlc3RTdGF0ZTogUHJlc2VudGF0aW9uU3RhdGUgfCAnc3RvcHBlZCcgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBtc2cgb2YgbWVzc2FnZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UobXNnLmRhdGEpO1xuICAgICAgICBpZiAocGFyc2VkLnR5cGUgPT09ICdwcmVzZW50YXRpb246c3RhdGUnKSB7XG4gICAgICAgICAgbGF0ZXN0U3RhdGUgPSB7XG4gICAgICAgICAgICBpZDogcGFyc2VkLmlkLFxuICAgICAgICAgICAgZmlsZU5hbWU6IHBhcnNlZC5maWxlTmFtZSxcbiAgICAgICAgICAgIGN1cnJlbnRTbGlkZTogcGFyc2VkLmN1cnJlbnRTbGlkZSxcbiAgICAgICAgICAgIHNsaWRlQ291bnQ6IHBhcnNlZC5zbGlkZUNvdW50LFxuICAgICAgICAgICAgZmlsZVR5cGU6IHBhcnNlZC5maWxlVHlwZSxcbiAgICAgICAgICAgIHNsaWRlVmlkZW9zOiBwYXJzZWQuc2xpZGVWaWRlb3MgPz8gW10sXG4gICAgICAgICAgICB2aWRlb1N0YXRlOiBwYXJzZWQudmlkZW9TdGF0ZSA/PyAnaWRsZScsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJzZWQudHlwZSA9PT0gJ3ByZXNlbnRhdGlvbjpzdG9wcGVkJykge1xuICAgICAgICAgIGxhdGVzdFN0YXRlID0gJ3N0b3BwZWQnO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gU2tpcCBtYWxmb3JtZWQgaW5kaXZpZHVhbCBtZXNzYWdlc1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGF0ZXN0U3RhdGU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gY29uc3VtZU1lc3NhZ2VzIGZhaWxlZCBvciBvdXRlciBKU09OIHBhcnNlIGZhaWxlZCDigJQgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5leHRTbGlkZSgpOiB2b2lkIHtcbiAgcHVibGlzaERhdGEoe1xuICAgIHRvcGljOiBQUkVTRU5UQVRJT05fVE9QSUMsXG4gICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAncHJlc2VudGF0aW9uOm5hdmlnYXRlJywgYWN0aW9uOiAnbmV4dCcgfSksXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJldlNsaWRlKCk6IHZvaWQge1xuICBwdWJsaXNoRGF0YSh7XG4gICAgdG9waWM6IFBSRVNFTlRBVElPTl9UT1BJQyxcbiAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdwcmVzZW50YXRpb246bmF2aWdhdGUnLCBhY3Rpb246ICdwcmV2JyB9KSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwbGF5UHJlc2VudGF0aW9uVmlkZW8odmlkZW9JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gIHB1Ymxpc2hEYXRhKHtcbiAgICB0b3BpYzogUFJFU0VOVEFUSU9OX1RPUElDLFxuICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ3ByZXNlbnRhdGlvbjp2aWRlbzpwbGF5JywgdmlkZW9JbmRleCB9KSxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXVzZVByZXNlbnRhdGlvblZpZGVvKCk6IHZvaWQge1xuICBwdWJsaXNoRGF0YSh7XG4gICAgdG9waWM6IFBSRVNFTlRBVElPTl9UT1BJQyxcbiAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdwcmVzZW50YXRpb246dmlkZW86cGF1c2UnIH0pLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BQcmVzZW50YXRpb25WaWRlbygpOiB2b2lkIHtcbiAgcHVibGlzaERhdGEoe1xuICAgIHRvcGljOiBQUkVTRU5UQVRJT05fVE9QSUMsXG4gICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAncHJlc2VudGF0aW9uOnZpZGVvOnN0b3AnIH0pLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0b3BQcmVzZW50YXRpb24oKTogdm9pZCB7XG4gIHB1Ymxpc2hEYXRhKHtcbiAgICB0b3BpYzogUFJFU0VOVEFUSU9OX1RPUElDLFxuICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHsgdHlwZTogJ3ByZXNlbnRhdGlvbjpzdG9wJyB9KSxcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ import type { Composite } from '@dcl/ecs';
2
+ export declare function wrapWithAssetPathSubstitution(base: Composite.Provider): Composite.Provider;
@@ -0,0 +1,20 @@
1
+ import { substituteAssetPathInComposite } from './add-child';
2
+ export function wrapWithAssetPathSubstitution(base) {
3
+ return {
4
+ schemas: base.schemas,
5
+ getCompositeOrNull(src) {
6
+ const resource = base.getCompositeOrNull(src);
7
+ if (resource)
8
+ substituteAssetPathInComposite(resource.composite, src);
9
+ return resource;
10
+ },
11
+ loadComposite: base.loadComposite
12
+ ? async (src) => {
13
+ const resource = await base.loadComposite(src);
14
+ substituteAssetPathInComposite(resource.composite, src);
15
+ return resource;
16
+ }
17
+ : undefined,
18
+ };
19
+ }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtcGFjay1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hc3NldC1wYWNrLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXNCQSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFN0QsTUFBTSxVQUFVLDZCQUE2QixDQUFDLElBQXdCO0lBQ3BFLE9BQU87UUFDTCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87UUFDckIsa0JBQWtCLENBQUMsR0FBVztZQUM1QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxRQUFRO2dCQUFFLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdEUsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUNELGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUMvQixDQUFDLENBQUMsS0FBSyxFQUFFLEdBQVcsRUFBRSxFQUFFO2dCQUNwQixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hELDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3hELE9BQU8sUUFBUSxDQUFDO1lBQ2xCLENBQUM7WUFDSCxDQUFDLENBQUMsU0FBUztLQUNkLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXcmFwIGEgYmFzZSBgQ29tcG9zaXRlLlByb3ZpZGVyYCBzbyBldmVyeSBjb21wb3NpdGUgaXQgcmV0dXJucyBoYXMgaXRzXG4gKiBge2Fzc2V0UGF0aH1gIHBsYWNlaG9sZGVycyByZXNvbHZlZCBpbiBwbGFjZSBiZWZvcmUgYmVpbmcgaGFuZGVkIHRvIHRoZSBlbmdpbmUuXG4gKlxuICogVGhpcyBge2Fzc2V0UGF0aH1gIHN1YnN0aXR1dGlvbiBpcyB0aGUgb25seSBjb21wb3NpdGUtcmVzb2x1dGlvbiBiZWhhdmlvclxuICogYXNzZXQtcGFja3MgYWRkcy4gQXNzZXQtcGFja3MgZG9uJ3QgYnVuZGxlIGNvbXBvc2l0ZXMgdGhlbXNlbHZlcyB0b2RheSAodGhleVxuICogc2hpcCBhcyBvbi1kaXNrIGFzc2V0IGRpcmVjdG9yaWVzIHRoZSBTREsgcHJvdmlkZXIgc2VydmVzKSwgYW5kIHRoZWlyIGNvbXBvbmVudFxuICogdHlwZXMgYXJlIHJlZ2lzdGVyZWQgZGlyZWN0bHkgdmlhIGBjcmVhdGVDb21wb25lbnRzKGVuZ2luZSlgIGF0IGluaXQg4oCUIG5vdFxuICogdGhyb3VnaCBhIHByb3ZpZGVyIGBzY2hlbWFzYCBhcnJheSDigJQgc28gdGhlcmUncyBubyBzZXBhcmF0ZSBhc3NldC1wYWNrIHByb3ZpZGVyXG4gKiB0byBjb21wb3NlIGluLiBUaGUgc2NlbmUgZW50cnlwb2ludCBzaW1wbHkgd3JhcHMgdGhlIFNESyBwcm92aWRlciB3aXRoIHRoaXMgYW5kXG4gKiByZS1yZWdpc3RlcnMgaXQuXG4gKlxuICogQXNzZXQtcGFjayBjb21wb3NpdGUgSlNPTiBvbiBkaXNrIHN0b3JlcyB0ZXh0dXJlIC8gR0xCIC8gYXVkaW8gcGF0aHMgYXNcbiAqIGB7YXNzZXRQYXRofS9yZWxhdGl2ZS9wYXRoLmV4dGAgc28gdGhleSdyZSBwb3J0YWJsZSBhY3Jvc3MgYXNzZXQtZGlyIGxheW91dHM7XG4gKiBzdWJzdGl0dXRpb24gcmV3cml0ZXMgdGhlbSB0byB0aGUgcmVzb2x2ZWQgcGF0aHMgdGhlIGVuZ2luZSBleHBlY3RzLlxuICpcbiAqIE11dGF0ZXMgdGhlIGNhY2hlZCByZXNvdXJjZSBpbiBwbGFjZTogdGhlIGJhc2UgcHJvdmlkZXIga2VlcHMgYSBzaW5nbGUgcmVzb3VyY2VcbiAqIGJ5IHJlZmVyZW5jZSBhbmQgd2UgbXV0YXRlIGl0IG9uIGZpcnN0IHJlc29sdXRpb24uIFN1YnN0aXR1dGlvbiBpcyBpZGVtcG90ZW50LFxuICogc28gYSByZS1yZXNvbHV0aW9uIGFmdGVyIGEgc2Vjb25kIGBnZXRDb21wb3NpdGVPck51bGwoc3JjKWAgaXMgYSBuby1vcC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvc2l0ZSB9IGZyb20gJ0BkY2wvZWNzJztcbmltcG9ydCB7IHN1YnN0aXR1dGVBc3NldFBhdGhJbkNvbXBvc2l0ZSB9IGZyb20gJy4vYWRkLWNoaWxkJztcblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBXaXRoQXNzZXRQYXRoU3Vic3RpdHV0aW9uKGJhc2U6IENvbXBvc2l0ZS5Qcm92aWRlcik6IENvbXBvc2l0ZS5Qcm92aWRlciB7XG4gIHJldHVybiB7XG4gICAgc2NoZW1hczogYmFzZS5zY2hlbWFzLFxuICAgIGdldENvbXBvc2l0ZU9yTnVsbChzcmM6IHN0cmluZykge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSBiYXNlLmdldENvbXBvc2l0ZU9yTnVsbChzcmMpO1xuICAgICAgaWYgKHJlc291cmNlKSBzdWJzdGl0dXRlQXNzZXRQYXRoSW5Db21wb3NpdGUocmVzb3VyY2UuY29tcG9zaXRlLCBzcmMpO1xuICAgICAgcmV0dXJuIHJlc291cmNlO1xuICAgIH0sXG4gICAgbG9hZENvbXBvc2l0ZTogYmFzZS5sb2FkQ29tcG9zaXRlXG4gICAgICA/IGFzeW5jIChzcmM6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc291cmNlID0gYXdhaXQgYmFzZS5sb2FkQ29tcG9zaXRlIShzcmMpO1xuICAgICAgICAgIHN1YnN0aXR1dGVBc3NldFBhdGhJbkNvbXBvc2l0ZShyZXNvdXJjZS5jb21wb3NpdGUsIHNyYyk7XG4gICAgICAgICAgcmV0dXJuIHJlc291cmNlO1xuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cbiJdfQ==