angular-three 2.0.0-beta.237 → 2.0.0-beta.238
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/esm2022/lib/portal.mjs +38 -26
- package/esm2022/lib/renderer/index.mjs +8 -1
- package/esm2022/lib/renderer/store.mjs +10 -1
- package/esm2022/lib/utils/before-render.mjs +12 -2
- package/fesm2022/angular-three.mjs +62 -23
- package/fesm2022/angular-three.mjs.map +1 -1
- package/lib/portal.d.ts +3 -1
- package/lib/utils/before-render.d.ts +4 -0
- package/package.json +1 -1
|
@@ -83,6 +83,11 @@ export class NgtRendererStore {
|
|
|
83
83
|
parent.__ngt_renderer__[7 /* NgtRendererClassId.compounded */].__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three') {
|
|
84
84
|
return parent.__ngt_renderer__[7 /* NgtRendererClassId.compounded */];
|
|
85
85
|
}
|
|
86
|
+
if (parent &&
|
|
87
|
+
parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'portal' &&
|
|
88
|
+
parent.__ngt_renderer__[13 /* NgtRendererClassId.portalContainer */]?.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three') {
|
|
89
|
+
return parent.__ngt_renderer__[13 /* NgtRendererClassId.portalContainer */];
|
|
90
|
+
}
|
|
86
91
|
while (parent && parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] !== 'three') {
|
|
87
92
|
parent = parent.__ngt_renderer__[13 /* NgtRendererClassId.portalContainer */]
|
|
88
93
|
? parent.__ngt_renderer__[13 /* NgtRendererClassId.portalContainer */]
|
|
@@ -342,6 +347,10 @@ export class NgtRendererStore {
|
|
|
342
347
|
rS[1 /* NgtRendererClassId.parent */] = null;
|
|
343
348
|
for (const renderChild of rS[3 /* NgtRendererClassId.children */] || []) {
|
|
344
349
|
if (renderChild.__ngt_renderer__?.[0 /* NgtRendererClassId.type */] === 'three' && parent) {
|
|
350
|
+
if (parent.__ngt_renderer__?.[0 /* NgtRendererClassId.type */] === 'three') {
|
|
351
|
+
removeThreeChild(parent, renderChild, true);
|
|
352
|
+
continue;
|
|
353
|
+
}
|
|
345
354
|
const closestInstance = this.getClosestParentWithInstance(parent);
|
|
346
355
|
if (closestInstance) {
|
|
347
356
|
removeThreeChild(closestInstance, renderChild, true);
|
|
@@ -427,4 +436,4 @@ export class NgtRendererStore {
|
|
|
427
436
|
return store || this.rootState.store;
|
|
428
437
|
}
|
|
429
438
|
}
|
|
430
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yZW5kZXJlci9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFrQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQW1CLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3RCxPQUFPLEVBQUUsU0FBUyxFQUFZLE1BQU0sVUFBVSxDQUFDO0FBRS9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWpDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRSxPQUFPLEVBQTZELGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXhILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFXLHFCQUFxQixDQUFDLENBQUM7QUFnQ3pGLE1BQU0sT0FBTyxnQkFBZ0I7SUFLNUIsWUFBb0IsU0FBK0I7UUFBL0IsY0FBUyxHQUFULFNBQVMsQ0FBc0I7UUFKM0MscUJBQWdCLEdBQTJCLEVBQUUsQ0FBQztRQUM5Qyx1QkFBa0IsR0FBMkIsRUFBRSxDQUFDO1FBQ2hELHdCQUFtQixHQUEyQixFQUFFLENBQUM7SUFFSCxDQUFDO0lBRXZELFVBQVUsQ0FBQyxJQUErQyxFQUFFLElBQWtCO1FBQzdFLE1BQU0sS0FBSyxHQUFHO1lBQ2IsSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1lBQ0osRUFBRTtZQUNGLEtBQUs7WUFDTCxTQUFVO1lBQ1YsU0FBVTtZQUNWLFNBQVU7WUFDVixTQUFVO1lBQ1YsU0FBVTtZQUNWLFNBQVU7WUFDVixTQUFVO1lBQ1YsU0FBVTtZQUNWLFNBQVU7WUFDVixTQUFVO1NBQ1UsQ0FBQztRQUV0QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFdEUsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDO1lBQUUsWUFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBRTVGLHVEQUF1RDtRQUN2RCwwQ0FBMEM7UUFDMUMsSUFBSSxLQUFLLGlDQUF5QixLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ2hELEtBQUssNkNBQW9DLEdBQUcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLFFBQVEsQ0FBQztRQUN4RixDQUFDO1FBRUQsSUFBSSxLQUFLLGlDQUF5QixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xELHdEQUF3RDtZQUN4RCx1RkFBdUY7WUFDdkYsb0ZBQW9GO1lBQ3BGLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsSUFBeUMsRUFBRSxFQUFFO2dCQUMxRixJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDMUMsQ0FBQztxQkFBTSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDNUMsQ0FBQztxQkFBTSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNyQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxDQUFDO1lBQ0YsQ0FBQyxDQUFDO1lBQ0YsT0FBTyxZQUFZLENBQUM7UUFDckIsQ0FBQztRQUVELElBQUksS0FBSyxpQ0FBeUIsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNuRCxLQUFLLHFDQUE2QixHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7WUFDL0MsS0FBSyx1Q0FBK0IsR0FBRyxLQUFLLHdDQUErQixHQUFHLEVBQUUsQ0FBQztZQUNqRixPQUFPLFlBQVksQ0FBQztRQUNyQixDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDckIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQWtCO1FBQ3ZCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sQ0FDTixDQUFDLEVBQUU7WUFDSCxDQUFDLEVBQUUsaUNBQXlCLEtBQUssVUFBVTtnQkFDMUMsQ0FBQyxJQUFJLFlBQVksT0FBTyxJQUFJLElBQUksWUFBWSxRQUFRLElBQUksSUFBSSxZQUFZLE1BQU0sQ0FBQyxDQUFDLENBQ2pGLENBQUM7SUFDSCxDQUFDO0lBRUQsNEJBQTRCLENBQUMsSUFBcUI7UUFDakQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixtQ0FBMkIsQ0FBQztRQUU5RCxJQUNDLE1BQU07WUFDTixNQUFNLENBQUMsZ0JBQWdCLGlDQUF5QixLQUFLLFVBQVU7WUFDL0QsTUFBTSxDQUFDLGdCQUFnQix1Q0FBK0I7WUFDdEQsTUFBTSxDQUFDLGdCQUFnQix1Q0FBK0IsQ0FBQyxnQkFBZ0IsaUNBQXlCLEtBQUssT0FBTyxFQUMzRyxDQUFDO1lBQ0YsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLHVDQUErQixDQUFDO1FBQy9ELENBQUM7UUFFRCxPQUFPLE1BQU0sSUFBSSxNQUFNLENBQUMsZ0JBQWdCLGlDQUF5QixLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQy9FLE1BQU0sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLDZDQUFvQztnQkFDbkUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsNkNBQW9DO2dCQUM3RCxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixtQ0FBMkIsQ0FBQztRQUN2RCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDZixDQUFDO0lBRUQsNEJBQTRCLENBQUMsSUFBcUI7UUFDakQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLDJDQUFtQyxFQUFFLENBQUM7WUFDOUQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLDJDQUFtQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLG1DQUEyQixDQUFDO1FBQzlELElBQ0MsTUFBTTtZQUNOLE1BQU0sQ0FBQyxnQkFBZ0IsaUNBQXlCLEtBQUssVUFBVTtZQUMvRCxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsdUNBQStCLEVBQ3RELENBQUM7WUFDRixPQUFPLE1BQU0sQ0FBQztRQUNmLENBQUM7UUFFRCxPQUNDLE1BQU07WUFDTixDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsaUNBQXlCLEtBQUssT0FBTztnQkFDNUQsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLDJDQUFtQztnQkFDM0QsTUFBTSxDQUFDLGdCQUFnQixpQ0FBeUIsS0FBSyxVQUFVLENBQUMsRUFDaEUsQ0FBQztZQUNGLE1BQU0sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLG1DQUEyQixDQUFDO1FBQzdELENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXpCLElBQ0MsTUFBTSxDQUFDLGdCQUFnQixpQ0FBeUIsS0FBSyxPQUFPO1lBQzVELE1BQU0sQ0FBQyxnQkFBZ0IsMkNBQW1DLEVBQ3pELENBQUM7WUFDRixPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsMkNBQW1DLENBQUM7UUFDbkUsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLHVDQUErQixFQUFFLENBQUM7WUFDN0QsT0FBTyxNQUFNLENBQUM7UUFDZixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQsc0JBQXNCLENBQUMsTUFBdUI7UUFDN0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGdCQUFnQiw2Q0FBb0MsRUFBRSxFQUFFLENBQUM7UUFDakYsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRXRCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUV6QixNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxlQUFlO1lBQUUsT0FBTztRQUU3QixNQUFNLENBQUMsZ0JBQWdCLDZDQUFvQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3pHLENBQUM7SUFFRCxnQkFBZ0I7UUFDZixPQUFPO1lBQ04sSUFBSSxDQUFDLHlCQUF5QixDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3hFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxvQkFBb0IsRUFBRSxTQUFTLENBQUMsRUFBRSxLQUFLLElBQUksSUFBSTtZQUM5RSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7U0FDZixDQUFDO0lBQ1osQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUFxQixFQUFFLE1BQXVCO1FBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLG1DQUEyQixFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLGdCQUFnQixtQ0FBMkIsR0FBRyxNQUFNLENBQUM7UUFDM0QsQ0FBQztJQUNGLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBcUIsRUFBRSxLQUFzQjtRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixxQ0FBNkIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6RSxJQUFJLENBQUMsZ0JBQWdCLHFDQUE2QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0YsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFxQixFQUFFLEtBQXNCO1FBQ3hELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxxQ0FBNkIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqRyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsZ0JBQWdCLHFDQUE2QixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNGLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBeUIsRUFBRSxRQUF5QjtRQUMvRCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7UUFFN0MsSUFBSSxVQUFVLElBQUksVUFBVSxtQ0FBMkIsRUFBRSxDQUFDO1lBQ3pELE1BQU0sUUFBUSxHQUFHLFVBQVUsbUNBQTJCLENBQUMsZ0JBQWdCLENBQUM7WUFDeEUsOERBQThEO1lBQzlELElBQUksUUFBUSxpQ0FBeUIsS0FBSyxVQUFVLElBQUksUUFBUSx1Q0FBK0IsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDOUcsT0FBTztZQUNSLENBQUM7UUFDRixDQUFDO1FBRUQsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1FBQ3JDLEVBQUUsdUNBQStCLEdBQUcsUUFBUSxDQUFDO1FBRTdDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLHVDQUErQixDQUFDLEVBQUUsQ0FBQztZQUNsRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRSx1Q0FBK0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFFRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSx3Q0FBK0IsQ0FBQyxFQUFFLENBQUM7WUFDbEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsd0NBQStCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBcUIsRUFBRSxFQUFjO1FBQ25ELElBQUksQ0FBQyxnQkFBZ0IscUNBQTZCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFxQixFQUFFLE9BQTJDLElBQUk7UUFDOUYsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ2pDLG9EQUFvRDtRQUNwRCxJQUFJLEVBQUUscUNBQTZCLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDM0MsRUFBRSxxQ0FBNkIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtnQkFDOUMsSUFBSSxFQUFFLGdDQUF3QixLQUFLLElBQUksRUFBRSxDQUFDO29CQUN6QyxFQUFFLDhCQUFzQixFQUFFLENBQUM7b0JBQzNCLEVBQUUscUNBQTZCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxDQUFDO1lBQ0YsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDO0lBQ0YsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFxQixFQUFFLElBQVksRUFBRSxLQUFhO1FBQ2hFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUNqQyxJQUFJLEVBQUUsc0NBQThCO1lBQUUsT0FBTztRQUM3QyxJQUFJLElBQUksS0FBSyxrQkFBa0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNqRCxxR0FBcUc7WUFDckcsaUVBQWlFO1lBQ2pFLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNyQixRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMscURBQXFELENBQUMsQ0FBQztZQUNyRSxDQUFDO1lBQ0QsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2hCLFVBQVUsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQ2hDLENBQUM7UUFDRixDQUFDO1FBRUQsSUFBSSxJQUFJLEtBQUssa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUMsNEdBQTRHO1lBQzVHLEVBQUUscUNBQTZCLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRSxJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUUsT0FBTztRQUNSLENBQUM7UUFFRCxJQUFJLElBQUksS0FBSyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QywrQkFBK0I7WUFDL0IsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUNoQixVQUFVLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDM0IsQ0FBQztZQUNGLENBQUM7WUFDRCxPQUFPO1FBQ1IsQ0FBQztRQUVELElBQUksSUFBSSxLQUFLLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzNDLGlCQUFpQjtZQUNqQixJQUFJLFlBQVksR0FBOEIsS0FBSyxDQUFDO1lBQ3BELElBQUksWUFBWSxLQUFLLEVBQUUsSUFBSSxZQUFZLEtBQUssTUFBTSxJQUFJLFlBQVksS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDaEYsWUFBWSxHQUFHLFlBQVksS0FBSyxNQUFNLElBQUksWUFBWSxLQUFLLEVBQUUsQ0FBQztZQUMvRCxDQUFDO2lCQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDekMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsRUFBRSxzQ0FBNkIsR0FBRyxZQUFZLENBQUM7WUFDL0MsT0FBTztRQUNSLENBQUM7UUFFRCxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBcUIsRUFBRSxJQUFZLEVBQUUsS0FBVTtRQUM1RCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDakMsSUFBSSxFQUFFLHNDQUE4QjtZQUFFLE9BQU87UUFFN0MsUUFBUTtRQUNSLElBQUksSUFBSSxLQUFLLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEQsRUFBRSxpQ0FBd0IsR0FBRyxLQUFLLENBQUM7WUFDbkMsS0FBSyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDM0IsT0FBTztRQUNSLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxtQ0FBMkIsQ0FBQztRQUV4RixhQUFhO1FBQ2IsSUFBSSxVQUFVLEVBQUUsS0FBSyxJQUFJLElBQUksS0FBSyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNoRSxFQUFFLHNDQUE2QixHQUFHLEtBQUssQ0FBQztZQUN4QyxJQUFJLE1BQU07Z0JBQUUsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzNDLE9BQU87UUFDUixDQUFDO1FBRUQsV0FBVztRQUNYLElBQUksSUFBSSxLQUFLLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hDLElBQUksVUFBVTtnQkFBRSxVQUFVLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDbEcsSUFBSSxNQUFNO2dCQUFFLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzQyxPQUFPO1FBQ1IsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLEVBQUUscUNBQTZCLENBQUM7UUFDakQsSUFDQyxRQUFRLEVBQUUsa0NBQTBCO1lBQ3BDLElBQUksSUFBSSxRQUFRLGtDQUEwQjtZQUMxQyxDQUFDLFFBQVEsdUNBQStCLEVBQ3ZDLENBQUM7WUFDRixLQUFLLEdBQUcsUUFBUSxrQ0FBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQXFCLEVBQUUsVUFBd0I7UUFDOUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ2pDLElBQUksRUFBRSxzQ0FBOEI7WUFBRSxPQUFPO1FBRTdDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELElBQUksU0FBUztRQUNaLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBcUIsRUFBRSxNQUF3QjtRQUN0RCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDakMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLHNDQUE4QjtZQUFFLE9BQU87UUFDcEQsSUFBSSxFQUFFLGlDQUF5QixLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzdDLEVBQUUscUNBQTZCLEdBQUcsU0FBVSxDQUFDO1lBQzdDLEVBQUUsMkNBQW1DLEdBQUcsU0FBVSxDQUFDO1lBRW5ELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QyxJQUFJLFVBQVUsRUFBRSxhQUFhLEVBQUUsQ0FBQztnQkFDL0IsVUFBVSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNwRixVQUFVLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDeEYsQ0FBQztZQUVELElBQUksVUFBVSxFQUFFLFdBQVc7Z0JBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMvRCxJQUFJLFVBQVUsRUFBRSxXQUFXO2dCQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7WUFFL0QsT0FBUSxVQUEyQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQy9DLE9BQVEsVUFBMkIsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNsRCxPQUFRLFVBQTJCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUMsT0FBUSxVQUEyQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ25ELE9BQVEsVUFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxPQUFRLFVBQTJCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUMsT0FBUSxVQUEyQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ25ELE9BQVEsVUFBMkIsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNuRCxPQUFRLFVBQTJCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0MsT0FBUSxVQUEyQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRWhELElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQzVCLE9BQVEsSUFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQyxDQUFDO1FBQ0YsQ0FBQztRQUVELElBQUksRUFBRSxpQ0FBeUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvQyxFQUFFLDZDQUFvQyxHQUFHLElBQUssQ0FBQztZQUMvQyxPQUFRLElBQXFCLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2dCQUMxRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7UUFDRixDQUFDO1FBRUQsSUFBSSxFQUFFLGlDQUF5QixLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlDLEVBQUUsNkNBQW9DLEdBQUcsSUFBSyxDQUFDO1lBQy9DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELElBQUksRUFBRSxpQ0FBeUIsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNoRCxFQUFFLHVDQUErQixHQUFHLFNBQVUsQ0FBQztZQUMvQyxFQUFFLHVDQUErQixHQUFHLElBQUssQ0FBQztZQUMxQyxFQUFFLHdDQUErQixHQUFHLElBQUssQ0FBQztZQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZDLEVBQUUscUNBQTZCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDeEMsRUFBRSxxQ0FBNkIsR0FBRyxJQUFLLENBQUM7UUFDekMsQ0FBQztRQUVELElBQUksRUFBRSxpQ0FBd0IsRUFBRSxDQUFDO1lBQ2hDLGNBQWM7WUFDZCxzREFBc0Q7WUFDdEQscUNBQXFDO1lBQ3JDLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtnQkFDMUIsRUFBRSxpQ0FBd0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUNoRCxFQUFFLGlDQUF3QixHQUFHLFNBQVUsQ0FBQztZQUN6QyxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUM7UUFFRCxpQkFBaUI7UUFDakIsRUFBRSxtQ0FBMkIsR0FBRyxJQUFJLENBQUM7UUFDckMsS0FBSyxNQUFNLFdBQVcsSUFBSSxFQUFFLHFDQUE2QixJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ2pFLElBQUksV0FBVyxDQUFDLGdCQUFnQixFQUFFLGlDQUF5QixLQUFLLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDbkYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsRSxJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUNyQixnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN0RCxDQUFDO1lBQ0YsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxFQUFFLHFDQUE2QixHQUFHLEVBQUUsQ0FBQztRQUNyQyxFQUFFLHNDQUE4QixHQUFHLElBQUksQ0FBQztRQUN4QyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNGLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxJQUFxQixFQUFFLEtBQXdCO1FBQ3hFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQztRQUM3RCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hCLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUVPLGlCQUFpQixDQUFDLElBQXFCLEVBQUUsR0FBVyxFQUFFLEtBQVU7UUFDdkUsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLFVBQVUsRUFBRSxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyx5QkFBeUIsQ0FDaEMsWUFBdUQsRUFDdkQsR0FBWTtRQUVaLElBQUksU0FBd0IsQ0FBQztRQUU3QixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFckIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDZixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLHNDQUE4QixFQUFFLENBQUM7Z0JBQzVELFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xCLENBQUMsRUFBRSxDQUFDO2dCQUNKLFNBQVM7WUFDVixDQUFDO1lBQ0QsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGdCQUFnQiw2Q0FBb0MsRUFBRSxDQUFDO1lBQ2hGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZixDQUFDLEVBQUUsQ0FBQztnQkFDSixTQUFTO1lBQ1YsQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pDLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO2dCQUNyQyxTQUFTLEdBQUcsUUFBUSxDQUFDO2dCQUNyQixNQUFNO1lBQ1AsQ0FBQztZQUVELENBQUMsRUFBRSxDQUFDO1FBQ0wsQ0FBQztRQUVELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sU0FBUyxDQUFDO0lBQ2xCLENBQUM7SUFFTyxpQkFBaUI7UUFDeEIsSUFBSSxLQUEyQyxDQUFDO1FBQ2hELE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNyQixnRkFBZ0Y7UUFDaEYsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDZix1RUFBdUU7WUFDdkUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNDLElBQUksTUFBTSxDQUFDLGdCQUFnQixzQ0FBOEIsRUFBRSxDQUFDO2dCQUMzRCxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixDQUFDLEVBQUUsQ0FBQztnQkFDSixTQUFTO1lBQ1YsQ0FBQztZQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsNkNBQW9DLEVBQUUsQ0FBQztZQUMvRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2YsQ0FBQyxFQUFFLENBQUM7Z0JBQ0osU0FBUztZQUNWLENBQUM7WUFDRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMvQyxrREFBa0Q7WUFDbEQsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxLQUFLLEdBQUcsUUFBUSxDQUFDO2dCQUNqQixNQUFNO1lBQ1AsQ0FBQztZQUNELENBQUMsRUFBRSxDQUFDO1FBQ0wsQ0FBQztRQUVELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0lBQ3RDLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBJbmplY3RvciwgVHlwZSwgZ2V0RGVidWdOb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RBcmdzIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9hcmdzJztcbmltcG9ydCB7IE5ndENvbW1vbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvY29tbW9uJztcbmltcG9ydCB7IE5ndFBhcmVudCB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvcGFyZW50JztcbmltcG9ydCB7IE5ndEluc3RhbmNlTm9kZSwgZ2V0TG9jYWxTdGF0ZSB9IGZyb20gJy4uL2luc3RhbmNlJztcbmltcG9ydCB7IE5ndFJlZiB9IGZyb20gJy4uL3JlZic7XG5pbXBvcnQgeyBOR1RfU1RPUkUsIE5ndFN0YXRlIH0gZnJvbSAnLi4vc3RvcmUnO1xuaW1wb3J0IHsgTmd0QW55UmVjb3JkIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgYXBwbHlQcm9wcyB9IGZyb20gJy4uL3V0aWxzL2FwcGx5LXByb3BzJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgTmd0U2lnbmFsU3RvcmUgfSBmcm9tICcuLi91dGlscy9zaWduYWwtc3RvcmUnO1xuaW1wb3J0IHsgU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVCwgU1BFQ0lBTF9QUk9QRVJUSUVTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTmd0Q29tcG91bmRDbGFzc0lkLCBOZ3RRdWV1ZU9wQ2xhc3NJZCwgTmd0UmVuZGVyZXJDbGFzc0lkLCBhdHRhY2hUaHJlZUNoaWxkLCByZW1vdmVUaHJlZUNoaWxkIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBOR1RfQ09NUE9VTkRfUFJFRklYRVMgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nW10+KCdOZ3RDb21wb3VuZFByZWZpeGVzJyk7XG5cbnR5cGUgTmd0UXVldWVPcCA9IFt0eXBlOiAnb3AnIHwgJ2NsZWFuVXAnLCBvcDogKCkgPT4gdm9pZCwgZG9uZT86IHRydWVdO1xuXG5leHBvcnQgdHlwZSBOZ3RSZW5kZXJlclN0YXRlID0gW1xuXHR0eXBlOiAndGhyZWUnIHwgJ2NvbXBvdW5kJyB8ICdwb3J0YWwnIHwgJ2NvbW1lbnQnIHwgJ2RvbScsXG5cdHBhcmVudDogTmd0UmVuZGVyZXJOb2RlIHwgbnVsbCxcblx0aW5qZWN0ZWRQYXJlbnQ6IE5ndFJlZjxOZ3RSZW5kZXJlck5vZGU+IHwgbnVsbCxcblx0Y2hpbGRyZW46IE5ndFJlbmRlcmVyTm9kZVtdLFxuXHRkZXN0cm95ZWQ6IGJvb2xlYW4sXG5cdGNvbXBvdW5kOiBbYXBwbHlGaXJzdDogYm9vbGVhbiwgcHJvcHM6IE5ndEFueVJlY29yZF0sXG5cdGNvbXBvdW5kUGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsXG5cdGNvbXBvdW5kZWQ6IE5ndFJlbmRlcmVyTm9kZSxcblx0cXVldWVPcHM6IFNldDxOZ3RRdWV1ZU9wPixcblx0YXR0cmlidXRlczogTmd0QW55UmVjb3JkLFxuXHRwcm9wZXJ0aWVzOiBOZ3RBbnlSZWNvcmQsXG5cdHJhd1ZhbHVlOiBhbnksXG5cdHJlZjogYW55LFxuXHRwb3J0YWxDb250YWluZXI6IE5ndFJlbmRlcmVyTm9kZSxcblx0aW5qZWN0b3JGYWN0b3J5OiAoKSA9PiBJbmplY3RvciB8IHVuZGVmaW5lZCxcbl07XG5cbmV4cG9ydCB0eXBlIE5ndFJlbmRlcmVyTm9kZSA9IHtcblx0X19uZ3RfcmVuZGVyZXJfXzogTmd0UmVuZGVyZXJTdGF0ZTtcbn07XG5cbnR5cGUgTmd0UmVuZGVyZXJSb290U3RhdGUgPSB7XG5cdHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT47XG5cdGNvbXBvdW5kUHJlZml4ZXM6IHN0cmluZ1tdO1xuXHRkb2N1bWVudDogRG9jdW1lbnQ7XG59O1xuXG5leHBvcnQgY2xhc3MgTmd0UmVuZGVyZXJTdG9yZSB7XG5cdHByaXZhdGUgYXJnc0NvbW1lbnROb2RlczogQXJyYXk8Tmd0UmVuZGVyZXJOb2RlPiA9IFtdO1xuXHRwcml2YXRlIHBhcmVudENvbW1lbnROb2RlczogQXJyYXk8Tmd0UmVuZGVyZXJOb2RlPiA9IFtdO1xuXHRwcml2YXRlIHBvcnRhbENvbW1lbnRzTm9kZXM6IEFycmF5PE5ndFJlbmRlcmVyTm9kZT4gPSBbXTtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHJvb3RTdGF0ZTogTmd0UmVuZGVyZXJSb290U3RhdGUpIHt9XG5cblx0Y3JlYXRlTm9kZSh0eXBlOiBOZ3RSZW5kZXJlclN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSwgbm9kZTogTmd0QW55UmVjb3JkKSB7XG5cdFx0Y29uc3Qgc3RhdGUgPSBbXG5cdFx0XHR0eXBlLFxuXHRcdFx0bnVsbCxcblx0XHRcdG51bGwsXG5cdFx0XHRbXSxcblx0XHRcdGZhbHNlLFxuXHRcdFx0dW5kZWZpbmVkISxcblx0XHRcdHVuZGVmaW5lZCEsXG5cdFx0XHR1bmRlZmluZWQhLFxuXHRcdFx0dW5kZWZpbmVkISxcblx0XHRcdHVuZGVmaW5lZCEsXG5cdFx0XHR1bmRlZmluZWQhLFxuXHRcdFx0dW5kZWZpbmVkISxcblx0XHRcdHVuZGVmaW5lZCEsXG5cdFx0XHR1bmRlZmluZWQhLFxuXHRcdFx0dW5kZWZpbmVkISxcblx0XHRdIGFzIE5ndFJlbmRlcmVyU3RhdGU7XG5cblx0XHRjb25zdCByZW5kZXJlck5vZGUgPSBPYmplY3QuYXNzaWduKG5vZGUsIHsgX19uZ3RfcmVuZGVyZXJfXzogc3RhdGUgfSk7XG5cblx0XHQvLyBOT1RFOiBhc3NpZ24gb3duZXJEb2N1bWVudCB0byBub2RlIHNvIHdlIGNhbiB1c2UgSG9zdExpc3RlbmVyIGluIENvbXBvbmVudFxuXHRcdGlmICghcmVuZGVyZXJOb2RlWydvd25lckRvY3VtZW50J10pIHJlbmRlcmVyTm9kZVsnb3duZXJEb2N1bWVudCddID0gdGhpcy5yb290U3RhdGUuZG9jdW1lbnQ7XG5cblx0XHQvLyBOT1RFOiBhc3NpZ24gaW5qZWN0b3JGYWN0b3J5IG9uIG5vbi10aHJlZSB0eXBlIHNpbmNlXG5cdFx0Ly8gcmVuZGVyZXJOb2RlIGlzIGFuIGluc3RhbmNlIG9mIERPTSBOb2RlXG5cdFx0aWYgKHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSAhPT0gJ3RocmVlJykge1xuXHRcdFx0c3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSAoKSA9PiBnZXREZWJ1Z05vZGUocmVuZGVyZXJOb2RlKT8uaW5qZWN0b3I7XG5cdFx0fVxuXG5cdFx0aWYgKHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG5cdFx0XHQvLyBOT1RFOiB3ZSBhdHRhY2ggYW4gYXJyb3cgZnVuY3Rpb24gdG8gdGhlIENvbW1lbnQgbm9kZVxuXHRcdFx0Ly8gSW4gb3VyIGRpcmVjdGl2ZXMsIHdlIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gdGhlbiBzdGFydCB0cmFja2luZyB0aGUgUmVuZGVyZXJOb2RlXG5cdFx0XHQvLyB0aGlzIGlzIGRvbmUgdG8gbGltaXQgdGhlIGFtb3VudCBvZiBOb2RlcyB3ZSBuZWVkIHRvIHByb2Nlc3MgZm9yIGdldENyZWF0aW9uU3RhdGVcblx0XHRcdHJlbmRlcmVyTm9kZVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXSA9IChub2RlOiBOZ3RSZW5kZXJlck5vZGUgfCAnYXJncycgfCAncGFyZW50JykgPT4ge1xuXHRcdFx0XHRpZiAobm9kZSA9PT0gJ2FyZ3MnKSB7XG5cdFx0XHRcdFx0dGhpcy5hcmdzQ29tbWVudE5vZGVzLnB1c2gocmVuZGVyZXJOb2RlKTtcblx0XHRcdFx0fSBlbHNlIGlmIChub2RlID09PSAncGFyZW50Jykge1xuXHRcdFx0XHRcdHRoaXMucGFyZW50Q29tbWVudE5vZGVzLnB1c2gocmVuZGVyZXJOb2RlKTtcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0aGlzLnBvcnRhbENvbW1lbnRzTm9kZXMucHVzaChub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdHJldHVybiByZW5kZXJlck5vZGU7XG5cdFx0fVxuXG5cdFx0aWYgKHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJykge1xuXHRcdFx0c3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnF1ZXVlT3BzXSA9IG5ldyBTZXQoKTtcblx0XHRcdHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5hdHRyaWJ1dGVzXSA9IHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5wcm9wZXJ0aWVzXSA9IHt9O1xuXHRcdFx0cmV0dXJuIHJlbmRlcmVyTm9kZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVuZGVyZXJOb2RlO1xuXHR9XG5cblx0aXNDb21wb3VuZChuYW1lOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGhpcy5yb290U3RhdGUuY29tcG91bmRQcmVmaXhlcy5zb21lKChwcmVmaXgpID0+IG5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKTtcblx0fVxuXG5cdGlzRE9NKG5vZGU6IE5ndEFueVJlY29yZCkge1xuXHRcdGNvbnN0IHJTID0gbm9kZVsnX19uZ3RfcmVuZGVyZXJfXyddO1xuXHRcdHJldHVybiAoXG5cdFx0XHQhclMgfHxcblx0XHRcdChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gIT09ICdjb21wb3VuZCcgJiZcblx0XHRcdFx0KG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCBub2RlIGluc3RhbmNlb2YgV2luZG93KSlcblx0XHQpO1xuXHR9XG5cblx0Z2V0Q2xvc2VzdFBhcmVudFdpdGhJbnN0YW5jZShub2RlOiBOZ3RSZW5kZXJlck5vZGUpOiBOZ3RSZW5kZXJlck5vZGUgfCBudWxsIHtcblx0XHRsZXQgcGFyZW50ID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuXG5cdFx0aWYgKFxuXHRcdFx0cGFyZW50ICYmXG5cdFx0XHRwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiZcblx0XHRcdHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSAmJlxuXHRcdFx0cGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdO1xuXHRcdH1cblxuXHRcdHdoaWxlIChwYXJlbnQgJiYgcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdICE9PSAndGhyZWUnKSB7XG5cdFx0XHRwYXJlbnQgPSBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXVxuXHRcdFx0XHQ/IHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdXG5cdFx0XHRcdDogcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBhcmVudDtcblx0fVxuXG5cdGdldENsb3Nlc3RQYXJlbnRXaXRoQ29tcG91bmQobm9kZTogTmd0UmVuZGVyZXJOb2RlKSB7XG5cdFx0aWYgKG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdKSB7XG5cdFx0XHRyZXR1cm4gbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZFBhcmVudF07XG5cdFx0fVxuXG5cdFx0bGV0IHBhcmVudCA9IG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcblx0XHRpZiAoXG5cdFx0XHRwYXJlbnQgJiZcblx0XHRcdHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJlxuXHRcdFx0IXBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHBhcmVudDtcblx0XHR9XG5cblx0XHR3aGlsZSAoXG5cdFx0XHRwYXJlbnQgJiZcblx0XHRcdChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgfHxcblx0XHRcdFx0IXBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZFBhcmVudF0gfHxcblx0XHRcdFx0cGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdICE9PSAnY29tcG91bmQnKVxuXHRcdCkge1xuXHRcdFx0cGFyZW50ID0gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF07XG5cdFx0fVxuXG5cdFx0aWYgKCFwYXJlbnQpIHJldHVybiBudWxsO1xuXG5cdFx0aWYgKFxuXHRcdFx0cGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmXG5cdFx0XHRwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XTtcblx0XHR9XG5cblx0XHRpZiAoIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkge1xuXHRcdFx0cmV0dXJuIHBhcmVudDtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHByb2Nlc3NQb3J0YWxDb250YWluZXIocG9ydGFsOiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0XHRjb25zdCBpbmplY3RvciA9IHBvcnRhbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldPy4oKTtcblx0XHRpZiAoIWluamVjdG9yKSByZXR1cm47XG5cblx0XHRjb25zdCBwb3J0YWxTdG9yZSA9IGluamVjdG9yLmdldChOR1RfU1RPUkUsIG51bGwpO1xuXHRcdGlmICghcG9ydGFsU3RvcmUpIHJldHVybjtcblxuXHRcdGNvbnN0IHBvcnRhbENvbnRhaW5lciA9IHBvcnRhbFN0b3JlLmdldCgnc2NlbmUnKTtcblx0XHRpZiAoIXBvcnRhbENvbnRhaW5lcikgcmV0dXJuO1xuXG5cdFx0cG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0gPSB0aGlzLmNyZWF0ZU5vZGUoJ3RocmVlJywgcG9ydGFsQ29udGFpbmVyKTtcblx0fVxuXG5cdGdldENyZWF0aW9uU3RhdGUoKSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHRoaXMuZmlyc3ROb25JbmplY3RlZERpcmVjdGl2ZSgnYXJnc0NvbW1lbnROb2RlcycsIE5ndEFyZ3MpPy52YWx1ZSB8fCBbXSxcblx0XHRcdHRoaXMuZmlyc3ROb25JbmplY3RlZERpcmVjdGl2ZSgncGFyZW50Q29tbWVudE5vZGVzJywgTmd0UGFyZW50KT8udmFsdWUgfHwgbnVsbCxcblx0XHRcdHRoaXMudHJ5R2V0UG9ydGFsU3RvcmUoKSxcblx0XHRdIGFzIGNvbnN0O1xuXHR9XG5cblx0c2V0UGFyZW50KG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgcGFyZW50OiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0XHRpZiAoIW5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSkge1xuXHRcdFx0bm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdID0gcGFyZW50O1xuXHRcdH1cblx0fVxuXG5cdGFkZENoaWxkKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgY2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSkge1xuXHRcdGlmICghbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0uaW5jbHVkZXMoY2hpbGQpKSB7XG5cdFx0XHRub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXS5wdXNoKGNoaWxkKTtcblx0XHR9XG5cdH1cblxuXHRyZW1vdmVDaGlsZChub2RlOiBOZ3RSZW5kZXJlck5vZGUsIGNoaWxkOiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0XHRjb25zdCBpbmRleCA9IG5vZGUuX19uZ3RfcmVuZGVyZXJfXz8uW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0uZmluZEluZGV4KChjKSA9PiBjaGlsZCA9PT0gYyk7XG5cdFx0aWYgKGluZGV4ID49IDApIHtcblx0XHRcdG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dLnNwbGljZShpbmRleCwgMSk7XG5cdFx0fVxuXHR9XG5cblx0c2V0Q29tcG91bmQoY29tcG91bmQ6IE5ndFJlbmRlcmVyTm9kZSwgaW5zdGFuY2U6IE5ndFJlbmRlcmVyTm9kZSkge1xuXHRcdGNvbnN0IGluc3RhbmNlUlMgPSBpbnN0YW5jZS5fX25ndF9yZW5kZXJlcl9fO1xuXG5cdFx0aWYgKGluc3RhbmNlUlMgJiYgaW5zdGFuY2VSU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSkge1xuXHRcdFx0Y29uc3QgcGFyZW50UlMgPSBpbnN0YW5jZVJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdLl9fbmd0X3JlbmRlcmVyX187XG5cdFx0XHQvLyBOT1RFOiBpZiBpbnN0YW5jZSBpcyBhbHJlYWR5IGNvbXBvdW5kZWQgYnkgaXRzIHBhcmVudC4gc2tpcFxuXHRcdFx0aWYgKHBhcmVudFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJiBwYXJlbnRSU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gPT09IGluc3RhbmNlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCByUyA9IGNvbXBvdW5kLl9fbmd0X3JlbmRlcmVyX187XG5cdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdID0gaW5zdGFuY2U7XG5cblx0XHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyU1tOZ3RSZW5kZXJlckNsYXNzSWQuYXR0cmlidXRlc10pKSB7XG5cdFx0XHR0aGlzLmFwcGx5QXR0cmlidXRlKGluc3RhbmNlLCBrZXksIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5hdHRyaWJ1dGVzXVtrZXldKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyU1tOZ3RSZW5kZXJlckNsYXNzSWQucHJvcGVydGllc10pKSB7XG5cdFx0XHR0aGlzLmFwcGx5UHJvcGVydHkoaW5zdGFuY2UsIGtleSwgclNbTmd0UmVuZGVyZXJDbGFzc0lkLnByb3BlcnRpZXNdW2tleV0pO1xuXHRcdH1cblxuXHRcdHRoaXMuZXhlY3V0ZU9wZXJhdGlvbihjb21wb3VuZCk7XG5cdH1cblxuXHRxdWV1ZU9wZXJhdGlvbihub2RlOiBOZ3RSZW5kZXJlck5vZGUsIG9wOiBOZ3RRdWV1ZU9wKSB7XG5cdFx0bm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5xdWV1ZU9wc10uYWRkKG9wKTtcblx0fVxuXG5cdHByaXZhdGUgZXhlY3V0ZU9wZXJhdGlvbihub2RlOiBOZ3RSZW5kZXJlck5vZGUsIHR5cGU6IE5ndFF1ZXVlT3BbTmd0UXVldWVPcENsYXNzSWQudHlwZV0gPSAnb3AnKSB7XG5cdFx0Y29uc3QgclMgPSBub2RlLl9fbmd0X3JlbmRlcmVyX187XG5cdFx0Ly8gVE9ETzogbWF5YmUgYW4gYXJyYXkgd2l0aCBwb3AoKSB3b3VsZCB3b3JrIGJldHRlclxuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdPy5zaXplKSB7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdLmZvckVhY2goKG9wKSA9PiB7XG5cdFx0XHRcdGlmIChvcFtOZ3RRdWV1ZU9wQ2xhc3NJZC50eXBlXSA9PT0gdHlwZSkge1xuXHRcdFx0XHRcdG9wW05ndFF1ZXVlT3BDbGFzc0lkLm9wXSgpO1xuXHRcdFx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5xdWV1ZU9wc10uZGVsZXRlKG9wKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0YXBwbHlBdHRyaWJ1dGUobm9kZTogTmd0UmVuZGVyZXJOb2RlLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcblx0XHRjb25zdCByUyA9IG5vZGUuX19uZ3RfcmVuZGVyZXJfXztcblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHJldHVybjtcblx0XHRpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLlJFTkRFUl9QUklPUklUWSkge1xuXHRcdFx0Ly8gTk9URTogcHJpb3JpdHkgbmVlZHMgdG8gYmUgc2V0IGFzIGFuIGF0dHJpYnV0ZSBzdHJpbmcgc28gdGhhdCB0aGV5IGNhbiBiZSBzZXQgYXMgZWFybHkgYXMgcG9zc2libGVcblx0XHRcdC8vIHdlIGNvbnZlcnQgdGhhdCBzdHJpbmcgdG8gYSBudW1iZXIuIGlmIGl0J3MgaW52YWxpZCwgZGVmYXVsdCAwXG5cdFx0XHRsZXQgcHJpb3JpdHkgPSBOdW1iZXIodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKHByaW9yaXR5KSkge1xuXHRcdFx0XHRwcmlvcml0eSA9IDA7XG5cdFx0XHRcdGNvbnNvbGUud2FybihgW05HVF0gXCJwcmlvcml0eVwiIGlzIGFuIGludmFsaWQgbnVtYmVyLCBkZWZhdWx0IHRvIDBgKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKG5vZGUpO1xuXHRcdFx0aWYgKGxvY2FsU3RhdGUpIHtcblx0XHRcdFx0bG9jYWxTdGF0ZS5wcmlvcml0eSA9IHByaW9yaXR5O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuQ09NUE9VTkQpIHtcblx0XHRcdC8vIE5PVEU6IHdlIHNldCB0aGUgY29tcG91bmQgcHJvcGVydHkgb24gaW5zdGFuY2Ugbm9kZSBub3cgc28gd2Uga25vdyB0aGF0IHRoaXMgaW5zdGFuY2UgaXMgYmVpbmcgY29tcG91bmRlZFxuXHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSA9IFt2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09ICdmaXJzdCcsIHt9XTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLkFUVEFDSCkge1xuXHRcdFx0Ly8gTk9URTogaGFuZGxlIGF0dGFjaCBhcyB0cmluZ1xuXHRcdFx0Y29uc3QgcGF0aHMgPSB2YWx1ZS5zcGxpdCgnLicpO1xuXHRcdFx0aWYgKHBhdGhzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShub2RlKTtcblx0XHRcdFx0aWYgKGxvY2FsU3RhdGUpIHtcblx0XHRcdFx0XHRsb2NhbFN0YXRlLmF0dGFjaCA9IHBhdGhzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5SQVdfVkFMVUUpIHtcblx0XHRcdC8vIE5PVEU6IGNvZXJjaW9uXG5cdFx0XHRsZXQgbWF5YmVDb2VyY2VkOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuID0gdmFsdWU7XG5cdFx0XHRpZiAobWF5YmVDb2VyY2VkID09PSAnJyB8fCBtYXliZUNvZXJjZWQgPT09ICd0cnVlJyB8fCBtYXliZUNvZXJjZWQgPT09ICdmYWxzZScpIHtcblx0XHRcdFx0bWF5YmVDb2VyY2VkID0gbWF5YmVDb2VyY2VkID09PSAndHJ1ZScgfHwgbWF5YmVDb2VyY2VkID09PSAnJztcblx0XHRcdH0gZWxzZSBpZiAoIWlzTmFOKE51bWJlcihtYXliZUNvZXJjZWQpKSkge1xuXHRcdFx0XHRtYXliZUNvZXJjZWQgPSBOdW1iZXIobWF5YmVDb2VyY2VkKTtcblx0XHRcdH1cblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5yYXdWYWx1ZV0gPSBtYXliZUNvZXJjZWQ7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0YXBwbHlQcm9wcyhub2RlLCB7IFtuYW1lXTogdmFsdWUgfSk7XG5cdFx0dGhpcy51cGRhdGVOYXRpdmVQcm9wcyhub2RlLCBuYW1lLCB2YWx1ZSk7XG5cdH1cblxuXHRhcHBseVByb3BlcnR5KG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG5cdFx0Y29uc3QgclMgPSBub2RlLl9fbmd0X3JlbmRlcmVyX187XG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSByZXR1cm47XG5cblx0XHQvLyBbcmVmXVxuXHRcdGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuUkVGICYmIGlzLnJlZih2YWx1ZSkpIHtcblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5yZWZdID0gdmFsdWU7XG5cdFx0XHR2YWx1ZS5uYXRpdmVFbGVtZW50ID0gbm9kZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShub2RlKTtcblx0XHRjb25zdCBwYXJlbnQgPSBsb2NhbFN0YXRlPy5pbnN0YW5jZVN0b3JlLmdldCgncGFyZW50JykgfHwgclNbTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF07XG5cblx0XHQvLyBbcmF3VmFsdWVdXG5cdFx0aWYgKGxvY2FsU3RhdGU/LmlzUmF3ICYmIG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5SQVdfVkFMVUUpIHtcblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5yYXdWYWx1ZV0gPSB2YWx1ZTtcblx0XHRcdGlmIChwYXJlbnQpIGF0dGFjaFRocmVlQ2hpbGQocGFyZW50LCBub2RlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBbYXR0YWNoXVxuXHRcdGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuQVRUQUNIKSB7XG5cdFx0XHRpZiAobG9jYWxTdGF0ZSkgbG9jYWxTdGF0ZS5hdHRhY2ggPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCgodikgPT4gdi50b1N0cmluZygpKSA6IHZhbHVlO1xuXHRcdFx0aWYgKHBhcmVudCkgYXR0YWNoVGhyZWVDaGlsZChwYXJlbnQsIG5vZGUpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbXBvdW5kID0gclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXTtcblx0XHRpZiAoXG5cdFx0XHRjb21wb3VuZD8uW05ndENvbXBvdW5kQ2xhc3NJZC5wcm9wc10gJiZcblx0XHRcdG5hbWUgaW4gY29tcG91bmRbTmd0Q29tcG91bmRDbGFzc0lkLnByb3BzXSAmJlxuXHRcdFx0IWNvbXBvdW5kW05ndENvbXBvdW5kQ2xhc3NJZC5hcHBseUZpcnN0XVxuXHRcdCkge1xuXHRcdFx0dmFsdWUgPSBjb21wb3VuZFtOZ3RDb21wb3VuZENsYXNzSWQucHJvcHNdW25hbWVdO1xuXHRcdH1cblxuXHRcdGFwcGx5UHJvcHMobm9kZSwgeyBbbmFtZV06IHZhbHVlIH0pO1xuXHRcdHRoaXMudXBkYXRlTmF0aXZlUHJvcHMobm9kZSwgbmFtZSwgdmFsdWUpO1xuXHR9XG5cblx0YXBwbHlQYXJhbWV0ZXJzKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgcGFyYW1ldGVyczogTmd0QW55UmVjb3JkKSB7XG5cdFx0Y29uc3QgclMgPSBub2RlLl9fbmd0X3JlbmRlcmVyX187XG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSByZXR1cm47XG5cblx0XHRhcHBseVByb3BzKG5vZGUsIHBhcmFtZXRlcnMpO1xuXHRcdHRoaXMudXBkYXRlTmF0aXZlUHJvcHMobm9kZSwgJ3BhcmFtZXRlcnMnLCBwYXJhbWV0ZXJzKTtcblx0fVxuXG5cdGdldCByb290U2NlbmUoKSB7XG5cdFx0cmV0dXJuIHRoaXMucm9vdFN0YXRlLnN0b3JlLmdldCgnc2NlbmUnKTtcblx0fVxuXG5cdGRlc3Ryb3kobm9kZTogTmd0UmVuZGVyZXJOb2RlLCBwYXJlbnQ/OiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0XHRjb25zdCByUyA9IG5vZGUuX19uZ3RfcmVuZGVyZXJfXztcblx0XHRpZiAoIXJTIHx8IHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSByZXR1cm47XG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuXHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXSA9IHVuZGVmaW5lZCE7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdID0gdW5kZWZpbmVkITtcblxuXHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUobm9kZSk7XG5cdFx0XHRpZiAobG9jYWxTdGF0ZT8uaW5zdGFuY2VTdG9yZSkge1xuXHRcdFx0XHRsb2NhbFN0YXRlLmluc3RhbmNlU3RvcmUuZ2V0KCdvYmplY3RzJykuZm9yRWFjaCgob2JqKSA9PiB0aGlzLmRlc3Ryb3kob2JqLCBwYXJlbnQpKTtcblx0XHRcdFx0bG9jYWxTdGF0ZS5pbnN0YW5jZVN0b3JlLmdldCgnbm9uT2JqZWN0cycpLmZvckVhY2goKG9iaikgPT4gdGhpcy5kZXN0cm95KG9iaiwgcGFyZW50KSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsb2NhbFN0YXRlPy5hZnRlclVwZGF0ZSkgbG9jYWxTdGF0ZS5hZnRlclVwZGF0ZS5jb21wbGV0ZSgpO1xuXHRcdFx0aWYgKGxvY2FsU3RhdGU/LmFmdGVyQXR0YWNoKSBsb2NhbFN0YXRlLmFmdGVyQXR0YWNoLmNvbXBsZXRlKCk7XG5cblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydvYmplY3RzJ107XG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnbm9uT2JqZWN0cyddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ3BhcmVudCddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ25hdGl2ZVByb3BzJ107XG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnYWRkJ107XG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsncmVtb3ZlJ107XG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnYWZ0ZXJVcGRhdGUnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydhZnRlckF0dGFjaCddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ3N0b3JlJ107XG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnaGFuZGxlcnMnXTtcblxuXHRcdFx0aWYgKCFsb2NhbFN0YXRlPy5wcmltaXRpdmUpIHtcblx0XHRcdFx0ZGVsZXRlIChub2RlIGFzIE5ndEFueVJlY29yZClbJ19fbmd0X18nXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tbWVudCcpIHtcblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gbnVsbCE7XG5cdFx0XHRkZWxldGUgKG5vZGUgYXMgTmd0QW55UmVjb3JkKVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXTtcblx0XHRcdGlmICghdGhpcy5yZW1vdmVDb21tZW50Tm9kZShub2RlLCB0aGlzLmFyZ3NDb21tZW50Tm9kZXMpKSB7XG5cdFx0XHRcdHRoaXMucmVtb3ZlQ29tbWVudE5vZGUobm9kZSwgdGhpcy5wYXJlbnRDb21tZW50Tm9kZXMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSA9IG51bGwhO1xuXHRcdFx0dGhpcy5yZW1vdmVDb21tZW50Tm9kZShub2RlLCB0aGlzLnBvcnRhbENvbW1lbnRzTm9kZXMpO1xuXHRcdH1cblxuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcpIHtcblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSA9IHVuZGVmaW5lZCE7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuYXR0cmlidXRlc10gPSBudWxsITtcblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wcm9wZXJ0aWVzXSA9IG51bGwhO1xuXHRcdFx0dGhpcy5leGVjdXRlT3BlcmF0aW9uKG5vZGUsICdjbGVhblVwJyk7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdLmNsZWFyKCk7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdID0gbnVsbCE7XG5cdFx0fVxuXG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5yZWZdKSB7XG5cdFx0XHQvLyBudWxsaWZ5IHJlZlxuXHRcdFx0Ly8gYnV0IHdlIGRvIGl0IGxhdGVyIHNvIHRoYXQgaXQgZG9lc24ndCBoaW5kZXIgcmVuZGVyXG5cdFx0XHQvLyBUT0RPOiB3aWxsIHRoaXMgY2F1c2UgbWVtb3J5IGxlYWs/XG5cdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucmVmXS5uYXRpdmVFbGVtZW50ID0gbnVsbDtcblx0XHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLnJlZl0gPSB1bmRlZmluZWQhO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gbnVsbGlmeSBwYXJlbnRcblx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSA9IG51bGw7XG5cdFx0Zm9yIChjb25zdCByZW5kZXJDaGlsZCBvZiByU1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dIHx8IFtdKSB7XG5cdFx0XHRpZiAocmVuZGVyQ2hpbGQuX19uZ3RfcmVuZGVyZXJfXz8uW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiBwYXJlbnQpIHtcblx0XHRcdFx0Y29uc3QgY2xvc2VzdEluc3RhbmNlID0gdGhpcy5nZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG5cdFx0XHRcdGlmIChjbG9zZXN0SW5zdGFuY2UpIHtcblx0XHRcdFx0XHRyZW1vdmVUaHJlZUNoaWxkKGNsb3Nlc3RJbnN0YW5jZSwgcmVuZGVyQ2hpbGQsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmRlc3Ryb3kocmVuZGVyQ2hpbGQsIHBhcmVudCk7XG5cdFx0fVxuXG5cdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXSA9IFtdO1xuXHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdID0gdHJ1ZTtcblx0XHRpZiAocGFyZW50KSB7XG5cdFx0XHR0aGlzLnJlbW92ZUNoaWxkKHBhcmVudCwgbm9kZSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSByZW1vdmVDb21tZW50Tm9kZShub2RlOiBOZ3RSZW5kZXJlck5vZGUsIG5vZGVzOiBOZ3RSZW5kZXJlck5vZGVbXSkge1xuXHRcdGNvbnN0IGluZGV4ID0gbm9kZXMuZmluZEluZGV4KChjb21tZW50KSA9PiBjb21tZW50ID09PSBub2RlKTtcblx0XHRpZiAoaW5kZXggPiAtMSkge1xuXHRcdFx0bm9kZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZU5hdGl2ZVByb3BzKG5vZGU6IE5ndEluc3RhbmNlTm9kZSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcblx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShub2RlKTtcblx0XHRsb2NhbFN0YXRlPy5zZXROYXRpdmVQcm9wcyhrZXksIHZhbHVlKTtcblx0fVxuXG5cdHByaXZhdGUgZmlyc3ROb25JbmplY3RlZERpcmVjdGl2ZTxUIGV4dGVuZHMgTmd0Q29tbW9uRGlyZWN0aXZlPGFueT4+KFxuXHRcdGxpc3RQcm9wZXJ0eTogJ2FyZ3NDb21tZW50Tm9kZXMnIHwgJ3BhcmVudENvbW1lbnROb2RlcycsXG5cdFx0ZGlyOiBUeXBlPFQ+LFxuXHQpIHtcblx0XHRsZXQgZGlyZWN0aXZlOiBUIHwgdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgZGVzdHJveWVkID0gW107XG5cblx0XHRsZXQgaSA9IHRoaXNbbGlzdFByb3BlcnR5XS5sZW5ndGggLSAxO1xuXHRcdHdoaWxlIChpID49IDApIHtcblx0XHRcdGNvbnN0IGNvbW1lbnQgPSB0aGlzW2xpc3RQcm9wZXJ0eV1baV07XG5cdFx0XHRpZiAoY29tbWVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSB7XG5cdFx0XHRcdGRlc3Ryb3llZC5wdXNoKGkpO1xuXHRcdFx0XHRpLS07XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaW5qZWN0b3IgPSBjb21tZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0oKTtcblx0XHRcdGlmICghaW5qZWN0b3IpIHtcblx0XHRcdFx0aS0tO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluc3RhbmNlID0gaW5qZWN0b3IuZ2V0KGRpciwgbnVsbCk7XG5cdFx0XHRpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UudmFsaWRhdGUoKSkge1xuXHRcdFx0XHRkaXJlY3RpdmUgPSBpbnN0YW5jZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGktLTtcblx0XHR9XG5cblx0XHRkZXN0cm95ZWQuZm9yRWFjaCgoaW5kZXgpID0+IHtcblx0XHRcdHRoaXNbbGlzdFByb3BlcnR5XS5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGRpcmVjdGl2ZTtcblx0fVxuXG5cdHByaXZhdGUgdHJ5R2V0UG9ydGFsU3RvcmUoKSB7XG5cdFx0bGV0IHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGVzdHJveWVkID0gW107XG5cdFx0Ly8gd2Ugb25seSBjYXJlIGFib3V0IHRoZSBwb3J0YWwgc3RhdGVzIGJlY2F1c2UgTmd0U3RvcmUgb25seSBkaWZmZXJzIHBlciBQb3J0YWxcblx0XHRsZXQgaSA9IHRoaXMucG9ydGFsQ29tbWVudHNOb2Rlcy5sZW5ndGggLSAxO1xuXHRcdHdoaWxlIChpID49IDApIHtcblx0XHRcdC8vIGxvb3AgdGhyb3VnaCB0aGUgcG9ydGFsIHN0YXRlIGJhY2t3YXJkcyB0byBmaW5kIHRoZSBjbG9zZXN0IE5ndFN0b3JlXG5cdFx0XHRjb25zdCBwb3J0YWwgPSB0aGlzLnBvcnRhbENvbW1lbnRzTm9kZXNbaV07XG5cdFx0XHRpZiAocG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHtcblx0XHRcdFx0ZGVzdHJveWVkLnB1c2goaSk7XG5cdFx0XHRcdGktLTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGluamVjdG9yID0gcG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0oKTtcblx0XHRcdGlmICghaW5qZWN0b3IpIHtcblx0XHRcdFx0aS0tO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluc3RhbmNlID0gaW5qZWN0b3IuZ2V0KE5HVF9TVE9SRSwgbnVsbCk7XG5cdFx0XHQvLyBvbmx5IHRoZSBpbnN0YW5jZSB3aXRoIHByZXZpb3VzUm9vdCBzaG91bGQgcGFzc1xuXHRcdFx0aWYgKGluc3RhbmNlICYmIGluc3RhbmNlLmdldCgncHJldmlvdXNSb290JykpIHtcblx0XHRcdFx0c3RvcmUgPSBpbnN0YW5jZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpLS07XG5cdFx0fVxuXG5cdFx0ZGVzdHJveWVkLmZvckVhY2goKGluZGV4KSA9PiB7XG5cdFx0XHR0aGlzLnBvcnRhbENvbW1lbnRzTm9kZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBzdG9yZSB8fCB0aGlzLnJvb3RTdGF0ZS5zdG9yZTtcblx0fVxufVxuIl19
|
|
439
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yZW5kZXJlci9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFrQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQW1CLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3RCxPQUFPLEVBQUUsU0FBUyxFQUFZLE1BQU0sVUFBVSxDQUFDO0FBRS9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWpDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRSxPQUFPLEVBQTZELGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXhILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFXLHFCQUFxQixDQUFDLENBQUM7QUFnQ3pGLE1BQU0sT0FBTyxnQkFBZ0I7SUFLNUIsWUFBb0IsU0FBK0I7UUFBL0IsY0FBUyxHQUFULFNBQVMsQ0FBc0I7UUFKM0MscUJBQWdCLEdBQTJCLEVBQUUsQ0FBQztRQUM5Qyx1QkFBa0IsR0FBMkIsRUFBRSxDQUFDO1FBQ2hELHdCQUFtQixHQUEyQixFQUFFLENBQUM7SUFFSCxDQUFDO0lBRXZELFVBQVUsQ0FBQyxJQUErQyxFQUFFLElBQWtCO1FBQzdFLE1BQU0sS0FBSyxHQUFHO1lBQ2IsSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1lBQ0osRUFBRTtZQUNGLEtBQUs7WUFDTCxTQUFVO1lB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dEMsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIEluamVjdG9yLCBUeXBlLCBnZXREZWJ1Z05vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEFyZ3MgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2FyZ3MnO1xuaW1wb3J0IHsgTmd0Q29tbW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jb21tb24nO1xuaW1wb3J0IHsgTmd0UGFyZW50IH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9wYXJlbnQnO1xuaW1wb3J0IHsgTmd0SW5zdGFuY2VOb2RlLCBnZXRMb2NhbFN0YXRlIH0gZnJvbSAnLi4vaW5zdGFuY2UnO1xuaW1wb3J0IHsgTmd0UmVmIH0gZnJvbSAnLi4vcmVmJztcbmltcG9ydCB7IE5HVF9TVE9SRSwgTmd0U3RhdGUgfSBmcm9tICcuLi9zdG9yZSc7XG5pbXBvcnQgeyBOZ3RBbnlSZWNvcmQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBhcHBseVByb3BzIH0gZnJvbSAnLi4vdXRpbHMvYXBwbHktcHJvcHMnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi91dGlscy9pcyc7XG5pbXBvcnQgeyBOZ3RTaWduYWxTdG9yZSB9IGZyb20gJy4uL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5pbXBvcnQgeyBTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5ULCBTUEVDSUFMX1BST1BFUlRJRVMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBOZ3RDb21wb3VuZENsYXNzSWQsIE5ndFF1ZXVlT3BDbGFzc0lkLCBOZ3RSZW5kZXJlckNsYXNzSWQsIGF0dGFjaFRocmVlQ2hpbGQsIHJlbW92ZVRocmVlQ2hpbGQgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IE5HVF9DT01QT1VORF9QUkVGSVhFUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmdbXT4oJ05ndENvbXBvdW5kUHJlZml4ZXMnKTtcblxudHlwZSBOZ3RRdWV1ZU9wID0gW3R5cGU6ICdvcCcgfCAnY2xlYW5VcCcsIG9wOiAoKSA9PiB2b2lkLCBkb25lPzogdHJ1ZV07XG5cbmV4cG9ydCB0eXBlIE5ndFJlbmRlcmVyU3RhdGUgPSBbXG5cdHR5cGU6ICd0aHJlZScgfCAnY29tcG91bmQnIHwgJ3BvcnRhbCcgfCAnY29tbWVudCcgfCAnZG9tJyxcblx0cGFyZW50OiBOZ3RSZW5kZXJlck5vZGUgfCBudWxsLFxuXHRpbmplY3RlZFBhcmVudDogTmd0UmVmPE5ndFJlbmRlcmVyTm9kZT4gfCBudWxsLFxuXHRjaGlsZHJlbjogTmd0UmVuZGVyZXJOb2RlW10sXG5cdGRlc3Ryb3llZDogYm9vbGVhbixcblx0Y29tcG91bmQ6IFthcHBseUZpcnN0OiBib29sZWFuLCBwcm9wczogTmd0QW55UmVjb3JkXSxcblx0Y29tcG91bmRQYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSxcblx0Y29tcG91bmRlZDogTmd0UmVuZGVyZXJOb2RlLFxuXHRxdWV1ZU9wczogU2V0PE5ndFF1ZXVlT3A+LFxuXHRhdHRyaWJ1dGVzOiBOZ3RBbnlSZWNvcmQsXG5cdHByb3BlcnRpZXM6IE5ndEFueVJlY29yZCxcblx0cmF3VmFsdWU6IGFueSxcblx0cmVmOiBhbnksXG5cdHBvcnRhbENvbnRhaW5lcjogTmd0UmVuZGVyZXJOb2RlLFxuXHRpbmplY3RvckZhY3Rvcnk6ICgpID0+IEluamVjdG9yIHwgdW5kZWZpbmVkLFxuXTtcblxuZXhwb3J0IHR5cGUgTmd0UmVuZGVyZXJOb2RlID0ge1xuXHRfX25ndF9yZW5kZXJlcl9fOiBOZ3RSZW5kZXJlclN0YXRlO1xufTtcblxudHlwZSBOZ3RSZW5kZXJlclJvb3RTdGF0ZSA9IHtcblx0c3RvcmU6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPjtcblx0Y29tcG91bmRQcmVmaXhlczogc3RyaW5nW107XG5cdGRvY3VtZW50OiBEb2N1bWVudDtcbn07XG5cbmV4cG9ydCBjbGFzcyBOZ3RSZW5kZXJlclN0b3JlIHtcblx0cHJpdmF0ZSBhcmdzQ29tbWVudE5vZGVzOiBBcnJheTxOZ3RSZW5kZXJlck5vZGU+ID0gW107XG5cdHByaXZhdGUgcGFyZW50Q29tbWVudE5vZGVzOiBBcnJheTxOZ3RSZW5kZXJlck5vZGU+ID0gW107XG5cdHByaXZhdGUgcG9ydGFsQ29tbWVudHNOb2RlczogQXJyYXk8Tmd0UmVuZGVyZXJOb2RlPiA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgcm9vdFN0YXRlOiBOZ3RSZW5kZXJlclJvb3RTdGF0ZSkge31cblxuXHRjcmVhdGVOb2RlKHR5cGU6IE5ndFJlbmRlcmVyU3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdLCBub2RlOiBOZ3RBbnlSZWNvcmQpIHtcblx0XHRjb25zdCBzdGF0ZSA9IFtcblx0XHRcdHR5cGUsXG5cdFx0XHRudWxsLFxuXHRcdFx0bnVsbCxcblx0XHRcdFtdLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHR1bmRlZmluZWQhLFxuXHRcdFx0dW5kZWZpbmVkISxcblx0XHRcdHVuZGVmaW5lZCEsXG5cdFx0XHR1bmRlZmluZWQhLFxuXHRcdFx0dW5kZWZpbmVkISxcblx0XHRcdHVuZGVmaW5lZCEsXG5cdFx0XHR1bmRlZmluZWQhLFxuXHRcdFx0dW5kZWZpbmVkISxcblx0XHRcdHVuZGVmaW5lZCEsXG5cdFx0XHR1bmRlZmluZWQhLFxuXHRcdF0gYXMgTmd0UmVuZGVyZXJTdGF0ZTtcblxuXHRcdGNvbnN0IHJlbmRlcmVyTm9kZSA9IE9iamVjdC5hc3NpZ24obm9kZSwgeyBfX25ndF9yZW5kZXJlcl9fOiBzdGF0ZSB9KTtcblxuXHRcdC8vIE5PVEU6IGFzc2lnbiBvd25lckRvY3VtZW50IHRvIG5vZGUgc28gd2UgY2FuIHVzZSBIb3N0TGlzdGVuZXIgaW4gQ29tcG9uZW50XG5cdFx0aWYgKCFyZW5kZXJlck5vZGVbJ293bmVyRG9jdW1lbnQnXSkgcmVuZGVyZXJOb2RlWydvd25lckRvY3VtZW50J10gPSB0aGlzLnJvb3RTdGF0ZS5kb2N1bWVudDtcblxuXHRcdC8vIE5PVEU6IGFzc2lnbiBpbmplY3RvckZhY3Rvcnkgb24gbm9uLXRocmVlIHR5cGUgc2luY2Vcblx0XHQvLyByZW5kZXJlck5vZGUgaXMgYW4gaW5zdGFuY2Ugb2YgRE9NIE5vZGVcblx0XHRpZiAoc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdICE9PSAndGhyZWUnKSB7XG5cdFx0XHRzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSA9ICgpID0+IGdldERlYnVnTm9kZShyZW5kZXJlck5vZGUpPy5pbmplY3Rvcjtcblx0XHR9XG5cblx0XHRpZiAoc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tbWVudCcpIHtcblx0XHRcdC8vIE5PVEU6IHdlIGF0dGFjaCBhbiBhcnJvdyBmdW5jdGlvbiB0byB0aGUgQ29tbWVudCBub2RlXG5cdFx0XHQvLyBJbiBvdXIgZGlyZWN0aXZlcywgd2UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiB0byB0aGVuIHN0YXJ0IHRyYWNraW5nIHRoZSBSZW5kZXJlck5vZGVcblx0XHRcdC8vIHRoaXMgaXMgZG9uZSB0byBsaW1pdCB0aGUgYW1vdW50IG9mIE5vZGVzIHdlIG5lZWQgdG8gcHJvY2VzcyBmb3IgZ2V0Q3JlYXRpb25TdGF0ZVxuXHRcdFx0cmVuZGVyZXJOb2RlW1NQRUNJQUxfSU5URVJOQUxfQUREX0NPTU1FTlRdID0gKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSB8ICdhcmdzJyB8ICdwYXJlbnQnKSA9PiB7XG5cdFx0XHRcdGlmIChub2RlID09PSAnYXJncycpIHtcblx0XHRcdFx0XHR0aGlzLmFyZ3NDb21tZW50Tm9kZXMucHVzaChyZW5kZXJlck5vZGUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG5vZGUgPT09ICdwYXJlbnQnKSB7XG5cdFx0XHRcdFx0dGhpcy5wYXJlbnRDb21tZW50Tm9kZXMucHVzaChyZW5kZXJlck5vZGUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdHRoaXMucG9ydGFsQ29tbWVudHNOb2Rlcy5wdXNoKG5vZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIHJlbmRlcmVyTm9kZTtcblx0XHR9XG5cblx0XHRpZiAoc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnKSB7XG5cdFx0XHRzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdID0gbmV3IFNldCgpO1xuXHRcdFx0c3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmF0dHJpYnV0ZXNdID0gc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnByb3BlcnRpZXNdID0ge307XG5cdFx0XHRyZXR1cm4gcmVuZGVyZXJOb2RlO1xuXHRcdH1cblxuXHRcdHJldHVybiByZW5kZXJlck5vZGU7XG5cdH1cblxuXHRpc0NvbXBvdW5kKG5hbWU6IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLnJvb3RTdGF0ZS5jb21wb3VuZFByZWZpeGVzLnNvbWUoKHByZWZpeCkgPT4gbmFtZS5zdGFydHNXaXRoKHByZWZpeCkpO1xuXHR9XG5cblx0aXNET00obm9kZTogTmd0QW55UmVjb3JkKSB7XG5cdFx0Y29uc3QgclMgPSBub2RlWydfX25ndF9yZW5kZXJlcl9fJ107XG5cdFx0cmV0dXJuIChcblx0XHRcdCFyUyB8fFxuXHRcdFx0KHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSAhPT0gJ2NvbXBvdW5kJyAmJlxuXHRcdFx0XHQobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIERvY3VtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBXaW5kb3cpKVxuXHRcdCk7XG5cdH1cblxuXHRnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSk6IE5ndFJlbmRlcmVyTm9kZSB8IG51bGwge1xuXHRcdGxldCBwYXJlbnQgPSBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF07XG5cblx0XHRpZiAoXG5cdFx0XHRwYXJlbnQgJiZcblx0XHRcdHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJyAmJlxuXHRcdFx0cGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdICYmXG5cdFx0XHRwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0uX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZSdcblx0XHQpIHtcblx0XHRcdHJldHVybiBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF07XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0cGFyZW50ICYmXG5cdFx0XHRwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnICYmXG5cdFx0XHRwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXT8uX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZSdcblx0XHQpIHtcblx0XHRcdHJldHVybiBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXTtcblx0XHR9XG5cblx0XHR3aGlsZSAocGFyZW50ICYmIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSAhPT0gJ3RocmVlJykge1xuXHRcdFx0cGFyZW50ID0gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl1cblx0XHRcdFx0PyBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXVxuXHRcdFx0XHQ6IHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuXHRcdH1cblxuXHRcdHJldHVybiBwYXJlbnQ7XG5cdH1cblxuXHRnZXRDbG9zZXN0UGFyZW50V2l0aENvbXBvdW5kKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSkge1xuXHRcdGlmIChub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XSkge1xuXHRcdFx0cmV0dXJuIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdO1xuXHRcdH1cblxuXHRcdGxldCBwYXJlbnQgPSBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF07XG5cdFx0aWYgKFxuXHRcdFx0cGFyZW50ICYmXG5cdFx0XHRwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiZcblx0XHRcdCFwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF1cblx0XHQpIHtcblx0XHRcdHJldHVybiBwYXJlbnQ7XG5cdFx0fVxuXG5cdFx0d2hpbGUgKFxuXHRcdFx0cGFyZW50ICYmXG5cdFx0XHQocGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnIHx8XG5cdFx0XHRcdCFwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdIHx8XG5cdFx0XHRcdHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSAhPT0gJ2NvbXBvdW5kJylcblx0XHQpIHtcblx0XHRcdHBhcmVudCA9IHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuXHRcdH1cblxuXHRcdGlmICghcGFyZW50KSByZXR1cm4gbnVsbDtcblxuXHRcdGlmIChcblx0XHRcdHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJlxuXHRcdFx0cGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZFBhcmVudF07XG5cdFx0fVxuXG5cdFx0aWYgKCFwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0pIHtcblx0XHRcdHJldHVybiBwYXJlbnQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRwcm9jZXNzUG9ydGFsQ29udGFpbmVyKHBvcnRhbDogTmd0UmVuZGVyZXJOb2RlKSB7XG5cdFx0Y29uc3QgaW5qZWN0b3IgPSBwb3J0YWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XT8uKCk7XG5cdFx0aWYgKCFpbmplY3RvcikgcmV0dXJuO1xuXG5cdFx0Y29uc3QgcG9ydGFsU3RvcmUgPSBpbmplY3Rvci5nZXQoTkdUX1NUT1JFLCBudWxsKTtcblx0XHRpZiAoIXBvcnRhbFN0b3JlKSByZXR1cm47XG5cblx0XHRjb25zdCBwb3J0YWxDb250YWluZXIgPSBwb3J0YWxTdG9yZS5nZXQoJ3NjZW5lJyk7XG5cdFx0aWYgKCFwb3J0YWxDb250YWluZXIpIHJldHVybjtcblxuXHRcdHBvcnRhbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdID0gdGhpcy5jcmVhdGVOb2RlKCd0aHJlZScsIHBvcnRhbENvbnRhaW5lcik7XG5cdH1cblxuXHRnZXRDcmVhdGlvblN0YXRlKCkge1xuXHRcdHJldHVybiBbXG5cdFx0XHR0aGlzLmZpcnN0Tm9uSW5qZWN0ZWREaXJlY3RpdmUoJ2FyZ3NDb21tZW50Tm9kZXMnLCBOZ3RBcmdzKT8udmFsdWUgfHwgW10sXG5cdFx0XHR0aGlzLmZpcnN0Tm9uSW5qZWN0ZWREaXJlY3RpdmUoJ3BhcmVudENvbW1lbnROb2RlcycsIE5ndFBhcmVudCk/LnZhbHVlIHx8IG51bGwsXG5cdFx0XHR0aGlzLnRyeUdldFBvcnRhbFN0b3JlKCksXG5cdFx0XSBhcyBjb25zdDtcblx0fVxuXG5cdHNldFBhcmVudChub2RlOiBOZ3RSZW5kZXJlck5vZGUsIHBhcmVudDogTmd0UmVuZGVyZXJOb2RlKSB7XG5cdFx0aWYgKCFub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0pIHtcblx0XHRcdG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSA9IHBhcmVudDtcblx0XHR9XG5cdH1cblxuXHRhZGRDaGlsZChub2RlOiBOZ3RSZW5kZXJlck5vZGUsIGNoaWxkOiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0XHRpZiAoIW5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dLmluY2x1ZGVzKGNoaWxkKSkge1xuXHRcdFx0bm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0ucHVzaChjaGlsZCk7XG5cdFx0fVxuXHR9XG5cblx0cmVtb3ZlQ2hpbGQobm9kZTogTmd0UmVuZGVyZXJOb2RlLCBjaGlsZDogTmd0UmVuZGVyZXJOb2RlKSB7XG5cdFx0Y29uc3QgaW5kZXggPSBub2RlLl9fbmd0X3JlbmRlcmVyX18/LltOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dLmZpbmRJbmRleCgoYykgPT4gY2hpbGQgPT09IGMpO1xuXHRcdGlmIChpbmRleCA+PSAwKSB7XG5cdFx0XHRub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXS5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdH1cblx0fVxuXG5cdHNldENvbXBvdW5kKGNvbXBvdW5kOiBOZ3RSZW5kZXJlck5vZGUsIGluc3RhbmNlOiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0XHRjb25zdCBpbnN0YW5jZVJTID0gaW5zdGFuY2UuX19uZ3RfcmVuZGVyZXJfXztcblxuXHRcdGlmIChpbnN0YW5jZVJTICYmIGluc3RhbmNlUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0pIHtcblx0XHRcdGNvbnN0IHBhcmVudFJTID0gaW5zdGFuY2VSU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XS5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdFx0Ly8gTk9URTogaWYgaW5zdGFuY2UgaXMgYWxyZWFkeSBjb21wb3VuZGVkIGJ5IGl0cyBwYXJlbnQuIHNraXBcblx0XHRcdGlmIChwYXJlbnRSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiYgcGFyZW50UlNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdID09PSBpbnN0YW5jZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgclMgPSBjb21wb3VuZC5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSA9IGluc3RhbmNlO1xuXG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoclNbTmd0UmVuZGVyZXJDbGFzc0lkLmF0dHJpYnV0ZXNdKSkge1xuXHRcdFx0dGhpcy5hcHBseUF0dHJpYnV0ZShpbnN0YW5jZSwga2V5LCByU1tOZ3RSZW5kZXJlckNsYXNzSWQuYXR0cmlidXRlc11ba2V5XSk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnByb3BlcnRpZXNdKSkge1xuXHRcdFx0dGhpcy5hcHBseVByb3BlcnR5KGluc3RhbmNlLCBrZXksIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wcm9wZXJ0aWVzXVtrZXldKTtcblx0XHR9XG5cblx0XHR0aGlzLmV4ZWN1dGVPcGVyYXRpb24oY29tcG91bmQpO1xuXHR9XG5cblx0cXVldWVPcGVyYXRpb24obm9kZTogTmd0UmVuZGVyZXJOb2RlLCBvcDogTmd0UXVldWVPcCkge1xuXHRcdG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdLmFkZChvcCk7XG5cdH1cblxuXHRwcml2YXRlIGV4ZWN1dGVPcGVyYXRpb24obm9kZTogTmd0UmVuZGVyZXJOb2RlLCB0eXBlOiBOZ3RRdWV1ZU9wW05ndFF1ZXVlT3BDbGFzc0lkLnR5cGVdID0gJ29wJykge1xuXHRcdGNvbnN0IHJTID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdC8vIFRPRE86IG1heWJlIGFuIGFycmF5IHdpdGggcG9wKCkgd291bGQgd29yayBiZXR0ZXJcblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnF1ZXVlT3BzXT8uc2l6ZSkge1xuXHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLnF1ZXVlT3BzXS5mb3JFYWNoKChvcCkgPT4ge1xuXHRcdFx0XHRpZiAob3BbTmd0UXVldWVPcENsYXNzSWQudHlwZV0gPT09IHR5cGUpIHtcblx0XHRcdFx0XHRvcFtOZ3RRdWV1ZU9wQ2xhc3NJZC5vcF0oKTtcblx0XHRcdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdLmRlbGV0ZShvcCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGFwcGx5QXR0cmlidXRlKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgclMgPSBub2RlLl9fbmd0X3JlbmRlcmVyX187XG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSByZXR1cm47XG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5SRU5ERVJfUFJJT1JJVFkpIHtcblx0XHRcdC8vIE5PVEU6IHByaW9yaXR5IG5lZWRzIHRvIGJlIHNldCBhcyBhbiBhdHRyaWJ1dGUgc3RyaW5nIHNvIHRoYXQgdGhleSBjYW4gYmUgc2V0IGFzIGVhcmx5IGFzIHBvc3NpYmxlXG5cdFx0XHQvLyB3ZSBjb252ZXJ0IHRoYXQgc3RyaW5nIHRvIGEgbnVtYmVyLiBpZiBpdCdzIGludmFsaWQsIGRlZmF1bHQgMFxuXHRcdFx0bGV0IHByaW9yaXR5ID0gTnVtYmVyKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihwcmlvcml0eSkpIHtcblx0XHRcdFx0cHJpb3JpdHkgPSAwO1xuXHRcdFx0XHRjb25zb2xlLndhcm4oYFtOR1RdIFwicHJpb3JpdHlcIiBpcyBhbiBpbnZhbGlkIG51bWJlciwgZGVmYXVsdCB0byAwYCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShub2RlKTtcblx0XHRcdGlmIChsb2NhbFN0YXRlKSB7XG5cdFx0XHRcdGxvY2FsU3RhdGUucHJpb3JpdHkgPSBwcmlvcml0eTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLkNPTVBPVU5EKSB7XG5cdFx0XHQvLyBOT1RFOiB3ZSBzZXQgdGhlIGNvbXBvdW5kIHByb3BlcnR5IG9uIGluc3RhbmNlIG5vZGUgbm93IHNvIHdlIGtub3cgdGhhdCB0aGlzIGluc3RhbmNlIGlzIGJlaW5nIGNvbXBvdW5kZWRcblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0gPSBbdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSAnZmlyc3QnLCB7fV07XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5BVFRBQ0gpIHtcblx0XHRcdC8vIE5PVEU6IGhhbmRsZSBhdHRhY2ggYXMgdHJpbmdcblx0XHRcdGNvbnN0IHBhdGhzID0gdmFsdWUuc3BsaXQoJy4nKTtcblx0XHRcdGlmIChwYXRocy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUobm9kZSk7XG5cdFx0XHRcdGlmIChsb2NhbFN0YXRlKSB7XG5cdFx0XHRcdFx0bG9jYWxTdGF0ZS5hdHRhY2ggPSBwYXRocztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuUkFXX1ZBTFVFKSB7XG5cdFx0XHQvLyBOT1RFOiBjb2VyY2lvblxuXHRcdFx0bGV0IG1heWJlQ29lcmNlZDogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiA9IHZhbHVlO1xuXHRcdFx0aWYgKG1heWJlQ29lcmNlZCA9PT0gJycgfHwgbWF5YmVDb2VyY2VkID09PSAndHJ1ZScgfHwgbWF5YmVDb2VyY2VkID09PSAnZmFsc2UnKSB7XG5cdFx0XHRcdG1heWJlQ29lcmNlZCA9IG1heWJlQ29lcmNlZCA9PT0gJ3RydWUnIHx8IG1heWJlQ29lcmNlZCA9PT0gJyc7XG5cdFx0XHR9IGVsc2UgaWYgKCFpc05hTihOdW1iZXIobWF5YmVDb2VyY2VkKSkpIHtcblx0XHRcdFx0bWF5YmVDb2VyY2VkID0gTnVtYmVyKG1heWJlQ29lcmNlZCk7XG5cdFx0XHR9XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucmF3VmFsdWVdID0gbWF5YmVDb2VyY2VkO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGFwcGx5UHJvcHMobm9kZSwgeyBbbmFtZV06IHZhbHVlIH0pO1xuXHRcdHRoaXMudXBkYXRlTmF0aXZlUHJvcHMobm9kZSwgbmFtZSwgdmFsdWUpO1xuXHR9XG5cblx0YXBwbHlQcm9wZXJ0eShub2RlOiBOZ3RSZW5kZXJlck5vZGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuXHRcdGNvbnN0IHJTID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkgcmV0dXJuO1xuXG5cdFx0Ly8gW3JlZl1cblx0XHRpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLlJFRiAmJiBpcy5yZWYodmFsdWUpKSB7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucmVmXSA9IHZhbHVlO1xuXHRcdFx0dmFsdWUubmF0aXZlRWxlbWVudCA9IG5vZGU7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUobm9kZSk7XG5cdFx0Y29uc3QgcGFyZW50ID0gbG9jYWxTdGF0ZT8uaW5zdGFuY2VTdG9yZS5nZXQoJ3BhcmVudCcpIHx8IHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuXG5cdFx0Ly8gW3Jhd1ZhbHVlXVxuXHRcdGlmIChsb2NhbFN0YXRlPy5pc1JhdyAmJiBuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuUkFXX1ZBTFVFKSB7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucmF3VmFsdWVdID0gdmFsdWU7XG5cdFx0XHRpZiAocGFyZW50KSBhdHRhY2hUaHJlZUNoaWxkKHBhcmVudCwgbm9kZSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gW2F0dGFjaF1cblx0XHRpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLkFUVEFDSCkge1xuXHRcdFx0aWYgKGxvY2FsU3RhdGUpIGxvY2FsU3RhdGUuYXR0YWNoID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAoKHYpID0+IHYudG9TdHJpbmcoKSkgOiB2YWx1ZTtcblx0XHRcdGlmIChwYXJlbnQpIGF0dGFjaFRocmVlQ2hpbGQocGFyZW50LCBub2RlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBjb21wb3VuZCA9IHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF07XG5cdFx0aWYgKFxuXHRcdFx0Y29tcG91bmQ/LltOZ3RDb21wb3VuZENsYXNzSWQucHJvcHNdICYmXG5cdFx0XHRuYW1lIGluIGNvbXBvdW5kW05ndENvbXBvdW5kQ2xhc3NJZC5wcm9wc10gJiZcblx0XHRcdCFjb21wb3VuZFtOZ3RDb21wb3VuZENsYXNzSWQuYXBwbHlGaXJzdF1cblx0XHQpIHtcblx0XHRcdHZhbHVlID0gY29tcG91bmRbTmd0Q29tcG91bmRDbGFzc0lkLnByb3BzXVtuYW1lXTtcblx0XHR9XG5cblx0XHRhcHBseVByb3BzKG5vZGUsIHsgW25hbWVdOiB2YWx1ZSB9KTtcblx0XHR0aGlzLnVwZGF0ZU5hdGl2ZVByb3BzKG5vZGUsIG5hbWUsIHZhbHVlKTtcblx0fVxuXG5cdGFwcGx5UGFyYW1ldGVycyhub2RlOiBOZ3RSZW5kZXJlck5vZGUsIHBhcmFtZXRlcnM6IE5ndEFueVJlY29yZCkge1xuXHRcdGNvbnN0IHJTID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkgcmV0dXJuO1xuXG5cdFx0YXBwbHlQcm9wcyhub2RlLCBwYXJhbWV0ZXJzKTtcblx0XHR0aGlzLnVwZGF0ZU5hdGl2ZVByb3BzKG5vZGUsICdwYXJhbWV0ZXJzJywgcGFyYW1ldGVycyk7XG5cdH1cblxuXHRnZXQgcm9vdFNjZW5lKCkge1xuXHRcdHJldHVybiB0aGlzLnJvb3RTdGF0ZS5zdG9yZS5nZXQoJ3NjZW5lJyk7XG5cdH1cblxuXHRkZXN0cm95KG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgcGFyZW50PzogTmd0UmVuZGVyZXJOb2RlKSB7XG5cdFx0Y29uc3QgclMgPSBub2RlLl9fbmd0X3JlbmRlcmVyX187XG5cdFx0aWYgKCFyUyB8fCByU1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkgcmV0dXJuO1xuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0gPSB1bmRlZmluZWQhO1xuXHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XSA9IHVuZGVmaW5lZCE7XG5cblx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKG5vZGUpO1xuXHRcdFx0aWYgKGxvY2FsU3RhdGU/Lmluc3RhbmNlU3RvcmUpIHtcblx0XHRcdFx0bG9jYWxTdGF0ZS5pbnN0YW5jZVN0b3JlLmdldCgnb2JqZWN0cycpLmZvckVhY2goKG9iaikgPT4gdGhpcy5kZXN0cm95KG9iaiwgcGFyZW50KSk7XG5cdFx0XHRcdGxvY2FsU3RhdGUuaW5zdGFuY2VTdG9yZS5nZXQoJ25vbk9iamVjdHMnKS5mb3JFYWNoKChvYmopID0+IHRoaXMuZGVzdHJveShvYmosIHBhcmVudCkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobG9jYWxTdGF0ZT8uYWZ0ZXJVcGRhdGUpIGxvY2FsU3RhdGUuYWZ0ZXJVcGRhdGUuY29tcGxldGUoKTtcblx0XHRcdGlmIChsb2NhbFN0YXRlPy5hZnRlckF0dGFjaCkgbG9jYWxTdGF0ZS5hZnRlckF0dGFjaC5jb21wbGV0ZSgpO1xuXG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnb2JqZWN0cyddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ25vbk9iamVjdHMnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydwYXJlbnQnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWyduYXRpdmVQcm9wcyddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ2FkZCddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ3JlbW92ZSddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ2FmdGVyVXBkYXRlJ107XG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnYWZ0ZXJBdHRhY2gnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydzdG9yZSddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ2hhbmRsZXJzJ107XG5cblx0XHRcdGlmICghbG9jYWxTdGF0ZT8ucHJpbWl0aXZlKSB7XG5cdFx0XHRcdGRlbGV0ZSAobm9kZSBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ107XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSA9IG51bGwhO1xuXHRcdFx0ZGVsZXRlIChub2RlIGFzIE5ndEFueVJlY29yZClbU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVF07XG5cdFx0XHRpZiAoIXRoaXMucmVtb3ZlQ29tbWVudE5vZGUobm9kZSwgdGhpcy5hcmdzQ29tbWVudE5vZGVzKSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUNvbW1lbnROb2RlKG5vZGUsIHRoaXMucGFyZW50Q29tbWVudE5vZGVzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAncG9ydGFsJykge1xuXHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSBudWxsITtcblx0XHRcdHRoaXMucmVtb3ZlQ29tbWVudE5vZGUobm9kZSwgdGhpcy5wb3J0YWxDb21tZW50c05vZGVzKTtcblx0XHR9XG5cblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnKSB7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gPSB1bmRlZmluZWQhO1xuXHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmF0dHJpYnV0ZXNdID0gbnVsbCE7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucHJvcGVydGllc10gPSBudWxsITtcblx0XHRcdHRoaXMuZXhlY3V0ZU9wZXJhdGlvbihub2RlLCAnY2xlYW5VcCcpO1xuXHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLnF1ZXVlT3BzXS5jbGVhcigpO1xuXHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLnF1ZXVlT3BzXSA9IG51bGwhO1xuXHRcdH1cblxuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQucmVmXSkge1xuXHRcdFx0Ly8gbnVsbGlmeSByZWZcblx0XHRcdC8vIGJ1dCB3ZSBkbyBpdCBsYXRlciBzbyB0aGF0IGl0IGRvZXNuJ3QgaGluZGVyIHJlbmRlclxuXHRcdFx0Ly8gVE9ETzogd2lsbCB0aGlzIGNhdXNlIG1lbW9yeSBsZWFrP1xuXHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLnJlZl0ubmF0aXZlRWxlbWVudCA9IG51bGw7XG5cdFx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5yZWZdID0gdW5kZWZpbmVkITtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8vIG51bGxpZnkgcGFyZW50XG5cdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0gPSBudWxsO1xuXHRcdGZvciAoY29uc3QgcmVuZGVyQ2hpbGQgb2YgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXSB8fCBbXSkge1xuXHRcdFx0aWYgKHJlbmRlckNoaWxkLl9fbmd0X3JlbmRlcmVyX18/LltOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiYgcGFyZW50KSB7XG5cdFx0XHRcdGlmIChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfXz8uW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuXHRcdFx0XHRcdHJlbW92ZVRocmVlQ2hpbGQocGFyZW50LCByZW5kZXJDaGlsZCwgdHJ1ZSk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBjbG9zZXN0SW5zdGFuY2UgPSB0aGlzLmdldENsb3Nlc3RQYXJlbnRXaXRoSW5zdGFuY2UocGFyZW50KTtcblx0XHRcdFx0aWYgKGNsb3Nlc3RJbnN0YW5jZSkge1xuXHRcdFx0XHRcdHJlbW92ZVRocmVlQ2hpbGQoY2xvc2VzdEluc3RhbmNlLCByZW5kZXJDaGlsZCwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuZGVzdHJveShyZW5kZXJDaGlsZCwgcGFyZW50KTtcblx0XHR9XG5cblx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dID0gW107XG5cdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0gPSB0cnVlO1xuXHRcdGlmIChwYXJlbnQpIHtcblx0XHRcdHRoaXMucmVtb3ZlQ2hpbGQocGFyZW50LCBub2RlKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlbW92ZUNvbW1lbnROb2RlKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgbm9kZXM6IE5ndFJlbmRlcmVyTm9kZVtdKSB7XG5cdFx0Y29uc3QgaW5kZXggPSBub2Rlcy5maW5kSW5kZXgoKGNvbW1lbnQpID0+IGNvbW1lbnQgPT09IG5vZGUpO1xuXHRcdGlmIChpbmRleCA+IC0xKSB7XG5cdFx0XHRub2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlTmF0aXZlUHJvcHMobm9kZTogTmd0SW5zdGFuY2VOb2RlLCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuXHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKG5vZGUpO1xuXHRcdGxvY2FsU3RhdGU/LnNldE5hdGl2ZVByb3BzKGtleSwgdmFsdWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBmaXJzdE5vbkluamVjdGVkRGlyZWN0aXZlPFQgZXh0ZW5kcyBOZ3RDb21tb25EaXJlY3RpdmU8YW55Pj4oXG5cdFx0bGlzdFByb3BlcnR5OiAnYXJnc0NvbW1lbnROb2RlcycgfCAncGFyZW50Q29tbWVudE5vZGVzJyxcblx0XHRkaXI6IFR5cGU8VD4sXG5cdCkge1xuXHRcdGxldCBkaXJlY3RpdmU6IFQgfCB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBkZXN0cm95ZWQgPSBbXTtcblxuXHRcdGxldCBpID0gdGhpc1tsaXN0UHJvcGVydHldLmxlbmd0aCAtIDE7XG5cdFx0d2hpbGUgKGkgPj0gMCkge1xuXHRcdFx0Y29uc3QgY29tbWVudCA9IHRoaXNbbGlzdFByb3BlcnR5XVtpXTtcblx0XHRcdGlmIChjb21tZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHtcblx0XHRcdFx0ZGVzdHJveWVkLnB1c2goaSk7XG5cdFx0XHRcdGktLTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpbmplY3RvciA9IGNvbW1lbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSgpO1xuXHRcdFx0aWYgKCFpbmplY3Rvcikge1xuXHRcdFx0XHRpLS07XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaW5zdGFuY2UgPSBpbmplY3Rvci5nZXQoZGlyLCBudWxsKTtcblx0XHRcdGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS52YWxpZGF0ZSgpKSB7XG5cdFx0XHRcdGRpcmVjdGl2ZSA9IGluc3RhbmNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0aS0tO1xuXHRcdH1cblxuXHRcdGRlc3Ryb3llZC5mb3JFYWNoKChpbmRleCkgPT4ge1xuXHRcdFx0dGhpc1tsaXN0UHJvcGVydHldLnNwbGljZShpbmRleCwgMSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gZGlyZWN0aXZlO1xuXHR9XG5cblx0cHJpdmF0ZSB0cnlHZXRQb3J0YWxTdG9yZSgpIHtcblx0XHRsZXQgc3RvcmU6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBkZXN0cm95ZWQgPSBbXTtcblx0XHQvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIHBvcnRhbCBzdGF0ZXMgYmVjYXVzZSBOZ3RTdG9yZSBvbmx5IGRpZmZlcnMgcGVyIFBvcnRhbFxuXHRcdGxldCBpID0gdGhpcy5wb3J0YWxDb21tZW50c05vZGVzLmxlbmd0aCAtIDE7XG5cdFx0d2hpbGUgKGkgPj0gMCkge1xuXHRcdFx0Ly8gbG9vcCB0aHJvdWdoIHRoZSBwb3J0YWwgc3RhdGUgYmFja3dhcmRzIHRvIGZpbmQgdGhlIGNsb3Nlc3QgTmd0U3RvcmVcblx0XHRcdGNvbnN0IHBvcnRhbCA9IHRoaXMucG9ydGFsQ29tbWVudHNOb2Rlc1tpXTtcblx0XHRcdGlmIChwb3J0YWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkge1xuXHRcdFx0XHRkZXN0cm95ZWQucHVzaChpKTtcblx0XHRcdFx0aS0tO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgaW5qZWN0b3IgPSBwb3J0YWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSgpO1xuXHRcdFx0aWYgKCFpbmplY3Rvcikge1xuXHRcdFx0XHRpLS07XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaW5zdGFuY2UgPSBpbmplY3Rvci5nZXQoTkdUX1NUT1JFLCBudWxsKTtcblx0XHRcdC8vIG9ubHkgdGhlIGluc3RhbmNlIHdpdGggcHJldmlvdXNSb290IHNob3VsZCBwYXNzXG5cdFx0XHRpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuZ2V0KCdwcmV2aW91c1Jvb3QnKSkge1xuXHRcdFx0XHRzdG9yZSA9IGluc3RhbmNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGktLTtcblx0XHR9XG5cblx0XHRkZXN0cm95ZWQuZm9yRWFjaCgoaW5kZXgpID0+IHtcblx0XHRcdHRoaXMucG9ydGFsQ29tbWVudHNOb2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHN0b3JlIHx8IHRoaXMucm9vdFN0YXRlLnN0b3JlO1xuXHR9XG59XG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DestroyRef, inject } from '@angular/core';
|
|
1
|
+
import { DestroyRef, Injector, afterNextRender, inject, signal } from '@angular/core';
|
|
2
2
|
import { assertInjector } from 'ngxtension/assert-injector';
|
|
3
3
|
import { injectNgtStore } from '../store';
|
|
4
4
|
export function injectBeforeRender(cb, { priority = 0, injector } = {}) {
|
|
@@ -9,4 +9,14 @@ export function injectBeforeRender(cb, { priority = 0, injector } = {}) {
|
|
|
9
9
|
return sub;
|
|
10
10
|
});
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
export function injectNextBeforeRender(cb, { priority = 0, injector } = {}) {
|
|
13
|
+
return assertInjector(injectNextBeforeRender, injector, () => {
|
|
14
|
+
const assertedInjector = inject(Injector);
|
|
15
|
+
const sub = signal(null);
|
|
16
|
+
afterNextRender(() => {
|
|
17
|
+
sub.set(injectBeforeRender(cb, { priority, injector: assertedInjector }));
|
|
18
|
+
});
|
|
19
|
+
return sub.asReadonly();
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVmb3JlLXJlbmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL2JlZm9yZS1yZW5kZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBeUIsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWpFLE1BQU0sVUFBVSxrQkFBa0IsQ0FDakMsRUFBcUMsRUFDckMsRUFBRSxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsS0FBaUQsRUFBRTtJQUUzRSxPQUFPLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ3hELE1BQU0sS0FBSyxHQUFHLGNBQWMsRUFBRSxDQUFDO1FBQy9CLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDL0MsT0FBTyxHQUFHLENBQUM7SUFDWixDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQ3JDLEVBQXFDLEVBQ3JDLEVBQUUsUUFBUSxHQUFHLENBQUMsRUFBRSxRQUFRLEtBQWlELEVBQUU7SUFFM0UsT0FBTyxjQUFjLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUM1RCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQStDLElBQUksQ0FBQyxDQUFDO1FBRXZFLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDekIsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgSW5qZWN0b3IsIGFmdGVyTmV4dFJlbmRlciwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgTmd0QmVmb3JlUmVuZGVyUmVjb3JkLCBpbmplY3ROZ3RTdG9yZSB9IGZyb20gJy4uL3N0b3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEJlZm9yZVJlbmRlcihcblx0Y2I6IE5ndEJlZm9yZVJlbmRlclJlY29yZFsnY2FsbGJhY2snXSxcblx0eyBwcmlvcml0eSA9IDAsIGluamVjdG9yIH06IHsgcHJpb3JpdHk/OiBudW1iZXI7IGluamVjdG9yPzogSW5qZWN0b3IgfSA9IHt9LFxuKSB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3RCZWZvcmVSZW5kZXIsIGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3Qgc3RvcmUgPSBpbmplY3ROZ3RTdG9yZSgpO1xuXHRcdGNvbnN0IHN1YiA9IHN0b3JlLmdldCgnaW50ZXJuYWwnKS5zdWJzY3JpYmUoY2IsIHByaW9yaXR5LCBzdG9yZSk7XG5cdFx0aW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB2b2lkIHN1YigpKTtcblx0XHRyZXR1cm4gc3ViO1xuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdE5leHRCZWZvcmVSZW5kZXIoXG5cdGNiOiBOZ3RCZWZvcmVSZW5kZXJSZWNvcmRbJ2NhbGxiYWNrJ10sXG5cdHsgcHJpb3JpdHkgPSAwLCBpbmplY3RvciB9OiB7IHByaW9yaXR5PzogbnVtYmVyOyBpbmplY3Rvcj86IEluamVjdG9yIH0gPSB7fSxcbikge1xuXHRyZXR1cm4gYXNzZXJ0SW5qZWN0b3IoaW5qZWN0TmV4dEJlZm9yZVJlbmRlciwgaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBhc3NlcnRlZEluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblx0XHRjb25zdCBzdWIgPSBzaWduYWw8UmV0dXJuVHlwZTx0eXBlb2YgaW5qZWN0QmVmb3JlUmVuZGVyPiB8IG51bGw+KG51bGwpO1xuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdHN1Yi5zZXQoaW5qZWN0QmVmb3JlUmVuZGVyKGNiLCB7IHByaW9yaXR5LCBpbmplY3RvcjogYXNzZXJ0ZWRJbmplY3RvciB9KSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gc3ViLmFzUmVhZG9ubHkoKTtcblx0fSk7XG59XG4iXX0=
|
|
@@ -1817,6 +1817,11 @@ class NgtRendererStore {
|
|
|
1817
1817
|
parent.__ngt_renderer__[7 /* NgtRendererClassId.compounded */].__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three') {
|
|
1818
1818
|
return parent.__ngt_renderer__[7 /* NgtRendererClassId.compounded */];
|
|
1819
1819
|
}
|
|
1820
|
+
if (parent &&
|
|
1821
|
+
parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'portal' &&
|
|
1822
|
+
parent.__ngt_renderer__[13 /* NgtRendererClassId.portalContainer */]?.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three') {
|
|
1823
|
+
return parent.__ngt_renderer__[13 /* NgtRendererClassId.portalContainer */];
|
|
1824
|
+
}
|
|
1820
1825
|
while (parent && parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] !== 'three') {
|
|
1821
1826
|
parent = parent.__ngt_renderer__[13 /* NgtRendererClassId.portalContainer */]
|
|
1822
1827
|
? parent.__ngt_renderer__[13 /* NgtRendererClassId.portalContainer */]
|
|
@@ -2076,6 +2081,10 @@ class NgtRendererStore {
|
|
|
2076
2081
|
rS[1 /* NgtRendererClassId.parent */] = null;
|
|
2077
2082
|
for (const renderChild of rS[3 /* NgtRendererClassId.children */] || []) {
|
|
2078
2083
|
if (renderChild.__ngt_renderer__?.[0 /* NgtRendererClassId.type */] === 'three' && parent) {
|
|
2084
|
+
if (parent.__ngt_renderer__?.[0 /* NgtRendererClassId.type */] === 'three') {
|
|
2085
|
+
removeThreeChild(parent, renderChild, true);
|
|
2086
|
+
continue;
|
|
2087
|
+
}
|
|
2079
2088
|
const closestInstance = this.getClosestParentWithInstance(parent);
|
|
2080
2089
|
if (closestInstance) {
|
|
2081
2090
|
removeThreeChild(closestInstance, renderChild, true);
|
|
@@ -2374,6 +2383,8 @@ class NgtRenderer {
|
|
|
2374
2383
|
// if child already attached to a parent, skip
|
|
2375
2384
|
if (cLS?.instanceStore?.get('parent'))
|
|
2376
2385
|
return;
|
|
2386
|
+
if (parent === newChild)
|
|
2387
|
+
return;
|
|
2377
2388
|
// attach THREE child
|
|
2378
2389
|
attachThreeChild(parent, newChild);
|
|
2379
2390
|
// here, we handle the special case of if the parent has a compoundParent, which means this child is part of a compound parent template
|
|
@@ -2453,6 +2464,11 @@ class NgtRenderer {
|
|
|
2453
2464
|
return;
|
|
2454
2465
|
}
|
|
2455
2466
|
}
|
|
2467
|
+
if (pRS[0 /* NgtRendererClassId.type */] === 'portal' &&
|
|
2468
|
+
pRS[13 /* NgtRendererClassId.portalContainer */]?.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three') {
|
|
2469
|
+
this.removeChild(pRS[13 /* NgtRendererClassId.portalContainer */], oldChild, isHostElement);
|
|
2470
|
+
return;
|
|
2471
|
+
}
|
|
2456
2472
|
if (pRS[0 /* NgtRendererClassId.type */] === 'three') {
|
|
2457
2473
|
this.store.destroy(oldChild, parent);
|
|
2458
2474
|
return;
|
|
@@ -2894,6 +2910,16 @@ function injectBeforeRender(cb, { priority = 0, injector } = {}) {
|
|
|
2894
2910
|
return sub;
|
|
2895
2911
|
});
|
|
2896
2912
|
}
|
|
2913
|
+
function injectNextBeforeRender(cb, { priority = 0, injector } = {}) {
|
|
2914
|
+
return assertInjector(injectNextBeforeRender, injector, () => {
|
|
2915
|
+
const assertedInjector = inject(Injector);
|
|
2916
|
+
const sub = signal(null);
|
|
2917
|
+
afterNextRender(() => {
|
|
2918
|
+
sub.set(injectBeforeRender(cb, { priority, injector: assertedInjector }));
|
|
2919
|
+
});
|
|
2920
|
+
return sub.asReadonly();
|
|
2921
|
+
});
|
|
2922
|
+
}
|
|
2897
2923
|
|
|
2898
2924
|
const privateKeys = [
|
|
2899
2925
|
'get',
|
|
@@ -2908,21 +2934,6 @@ const privateKeys = [
|
|
|
2908
2934
|
'size',
|
|
2909
2935
|
'viewport',
|
|
2910
2936
|
];
|
|
2911
|
-
const [, providePortalStore] = createInjectionToken((parentStore) => {
|
|
2912
|
-
const parentState = parentStore.snapshot;
|
|
2913
|
-
const pointer = new Vector2();
|
|
2914
|
-
const raycaster = new Raycaster();
|
|
2915
|
-
return signalStore(({ update }) => {
|
|
2916
|
-
return {
|
|
2917
|
-
...parentState,
|
|
2918
|
-
pointer,
|
|
2919
|
-
raycaster,
|
|
2920
|
-
previousRoot: parentStore,
|
|
2921
|
-
// Layers are allowed to override events
|
|
2922
|
-
setEvents: (events) => update((state) => ({ ...state, events: { ...state.events, ...events } })),
|
|
2923
|
-
};
|
|
2924
|
-
});
|
|
2925
|
-
}, { isRoot: false, token: NGT_STORE, deps: [[new SkipSelf(), NGT_STORE]] });
|
|
2926
2937
|
class NgtPortalBeforeRender {
|
|
2927
2938
|
constructor() {
|
|
2928
2939
|
this.portalStore = injectNgtStore();
|
|
@@ -2979,11 +2990,11 @@ class NgtPortalContent {
|
|
|
2979
2990
|
}
|
|
2980
2991
|
}
|
|
2981
2992
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtPortalContent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ViewContainerRef, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
2982
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.3", type: NgtPortalContent, isStandalone: true, selector: "ng-template[
|
|
2993
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.3", type: NgtPortalContent, isStandalone: true, selector: "ng-template[portalContent]", ngImport: i0 }); }
|
|
2983
2994
|
}
|
|
2984
2995
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtPortalContent, decorators: [{
|
|
2985
2996
|
type: Directive,
|
|
2986
|
-
args: [{ selector: 'ng-template[
|
|
2997
|
+
args: [{ selector: 'ng-template[portalContent]', standalone: true }]
|
|
2987
2998
|
}], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.ViewContainerRef, decorators: [{
|
|
2988
2999
|
type: SkipSelf
|
|
2989
3000
|
}] }] });
|
|
@@ -3004,14 +3015,39 @@ class NgtPortal {
|
|
|
3004
3015
|
this.renderAutoBeforeRender = computed(() => this.portalRendered() && this.autoRender());
|
|
3005
3016
|
this.parentScene = this.parentStore.get('scene');
|
|
3006
3017
|
this.parentCamera = this.parentStore.get('camera');
|
|
3018
|
+
this.raycaster = new Raycaster();
|
|
3019
|
+
this.pointer = new Vector2();
|
|
3007
3020
|
afterNextRender(() => {
|
|
3008
3021
|
const parentState = this.parentStore.snapshot;
|
|
3009
|
-
const [
|
|
3022
|
+
const [containerRef, state, autoRender, autoRenderPriority] = [
|
|
3023
|
+
this.container(),
|
|
3024
|
+
this.state(),
|
|
3025
|
+
this.autoRender(),
|
|
3026
|
+
this.autoRenderPriority(),
|
|
3027
|
+
];
|
|
3028
|
+
let stateFromInput = state;
|
|
3029
|
+
if (!stateFromInput && autoRender) {
|
|
3030
|
+
stateFromInput = { events: { priority: autoRenderPriority + 1 } };
|
|
3031
|
+
}
|
|
3032
|
+
const { events = {}, size = {}, ...rest } = stateFromInput || {};
|
|
3033
|
+
let container = is.ref(containerRef) ? containerRef.nativeElement : containerRef;
|
|
3034
|
+
if (!is.instance(container)) {
|
|
3035
|
+
container = prepare(container);
|
|
3036
|
+
}
|
|
3037
|
+
const localState = getLocalState(container);
|
|
3038
|
+
if (localState && !localState.store) {
|
|
3039
|
+
localState.store = this.portalStore;
|
|
3040
|
+
}
|
|
3010
3041
|
this.portalStore.update({
|
|
3011
|
-
|
|
3042
|
+
...parentState,
|
|
3043
|
+
scene: container,
|
|
3044
|
+
raycaster: this.raycaster,
|
|
3045
|
+
pointer: this.pointer,
|
|
3046
|
+
previousRoot: this.parentStore,
|
|
3012
3047
|
events: { ...parentState.events, ...events },
|
|
3013
3048
|
size: { ...parentState.size, ...size },
|
|
3014
3049
|
...rest,
|
|
3050
|
+
setEvents: (events) => this.portalStore.update((state) => ({ ...state, events: { ...state.events, ...events } })),
|
|
3015
3051
|
});
|
|
3016
3052
|
this.autoEffect(() => {
|
|
3017
3053
|
const previous = this.parentStore.state();
|
|
@@ -3020,7 +3056,10 @@ class NgtPortal {
|
|
|
3020
3056
|
untracked(() => {
|
|
3021
3057
|
const portalView = this.portalContentAnchor().createEmbeddedView(this.portalContentTemplate());
|
|
3022
3058
|
portalView.detectChanges();
|
|
3023
|
-
this.destroyRef.onDestroy(
|
|
3059
|
+
this.destroyRef.onDestroy(() => {
|
|
3060
|
+
portalView.destroy();
|
|
3061
|
+
console.log(this.portalStore.snapshot);
|
|
3062
|
+
});
|
|
3024
3063
|
});
|
|
3025
3064
|
this.portalRendered.set(true);
|
|
3026
3065
|
});
|
|
@@ -3053,7 +3092,7 @@ class NgtPortal {
|
|
|
3053
3092
|
};
|
|
3054
3093
|
}
|
|
3055
3094
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtPortal, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3056
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: NgtPortal, isStandalone: true, selector: "ngt-portal", inputs: { container: { classPropertyName: "container", publicName: "container", isSignal: true, isRequired: false, transformFunction: null }, camera: { classPropertyName: "camera", publicName: "camera", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, autoRender: { classPropertyName: "autoRender", publicName: "autoRender", isSignal: true, isRequired: false, transformFunction: null }, autoRenderPriority: { classPropertyName: "autoRenderPriority", publicName: "autoRenderPriority", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
3095
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: NgtPortal, isStandalone: true, selector: "ngt-portal", inputs: { container: { classPropertyName: "container", publicName: "container", isSignal: true, isRequired: false, transformFunction: null }, camera: { classPropertyName: "camera", publicName: "camera", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, autoRender: { classPropertyName: "autoRender", publicName: "autoRender", isSignal: true, isRequired: false, transformFunction: null }, autoRenderPriority: { classPropertyName: "autoRenderPriority", publicName: "autoRenderPriority", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideNgtStore(signalStore({}))], queries: [{ propertyName: "portalContentTemplate", first: true, predicate: NgtPortalContent, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "portalContentAnchor", first: true, predicate: ["portalContentAnchor"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
|
|
3057
3096
|
<ng-container #portalContentAnchor>
|
|
3058
3097
|
@if (renderAutoBeforeRender()) {
|
|
3059
3098
|
<ngt-portal-before-render
|
|
@@ -3082,7 +3121,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
|
|
|
3082
3121
|
</ng-container>
|
|
3083
3122
|
`,
|
|
3084
3123
|
imports: [NgtPortalBeforeRender],
|
|
3085
|
-
providers: [
|
|
3124
|
+
providers: [provideNgtStore(signalStore({}))],
|
|
3086
3125
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
3087
3126
|
}]
|
|
3088
3127
|
}], ctorParameters: () => [] });
|
|
@@ -3141,5 +3180,5 @@ function makeParameters(options, keysToExclude = []) {
|
|
|
3141
3180
|
* Generated bundle index. Do not edit.
|
|
3142
3181
|
*/
|
|
3143
3182
|
|
|
3144
|
-
export { HTML, NGT_STORE, NgtArgs, NgtCanvas, NgtPortal, NgtPortalContent, NgtRenderer, NgtRendererFactory, NgtRoutedScene, ROUTED_SCENE, addAfterEffect, addEffect, addTail, applyProps, checkNeedsUpdate, checkUpdate, createApiToken, createAttachFunction, extend, getLocalState, injectBeforeRender, injectLoader, injectNgtRef, injectNgtStore, invalidateInstance, is, makeCameraInstance, makeDpr, makeId, makeObjectGraph, makeParameters, makeRendererInstance, prepare, provideNgtRenderer, provideNgtStore, signalStore, updateCamera };
|
|
3183
|
+
export { HTML, NGT_STORE, NgtArgs, NgtCanvas, NgtPortal, NgtPortalContent, NgtRenderer, NgtRendererFactory, NgtRoutedScene, ROUTED_SCENE, addAfterEffect, addEffect, addTail, applyProps, checkNeedsUpdate, checkUpdate, createApiToken, createAttachFunction, extend, getLocalState, injectBeforeRender, injectLoader, injectNextBeforeRender, injectNgtRef, injectNgtStore, invalidateInstance, is, makeCameraInstance, makeDpr, makeId, makeObjectGraph, makeParameters, makeRendererInstance, prepare, provideNgtRenderer, provideNgtStore, signalStore, updateCamera };
|
|
3145
3184
|
//# sourceMappingURL=angular-three.mjs.map
|