angular-three 2.0.0-beta.302 → 2.0.0-beta.304
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.
|
@@ -225,12 +225,19 @@ export class NgtRenderer {
|
|
|
225
225
|
this.appendChild(parent, newChild);
|
|
226
226
|
}
|
|
227
227
|
removeChild(parent, oldChild, isHostElement) {
|
|
228
|
-
if (parent
|
|
229
|
-
parent = (
|
|
230
|
-
|
|
228
|
+
if (parent == null) {
|
|
229
|
+
parent = (untracked(() => getLocalState(oldChild)?.parent) ||
|
|
230
|
+
oldChild.__ngt_renderer__[1 /* NgtRendererClassId.parent */]);
|
|
231
231
|
}
|
|
232
|
-
const pRS = parent.__ngt_renderer__;
|
|
233
232
|
const cRS = oldChild.__ngt_renderer__;
|
|
233
|
+
// if parent is still falsy, we don't know what to do with the parent.
|
|
234
|
+
// we'll just remove the child and destroy it
|
|
235
|
+
if (parent == null && cRS?.[0 /* NgtRendererClassId.type */] !== 'three') {
|
|
236
|
+
removeThreeChild(oldChild, undefined, true);
|
|
237
|
+
this.destroyInternal(oldChild, undefined);
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
const pRS = parent.__ngt_renderer__;
|
|
234
241
|
if ((!cRS || !pRS) &&
|
|
235
242
|
parent instanceof Element &&
|
|
236
243
|
(oldChild instanceof Element || oldChild instanceof Text || oldChild instanceof Comment)) {
|
|
@@ -244,7 +251,7 @@ export class NgtRenderer {
|
|
|
244
251
|
return;
|
|
245
252
|
}
|
|
246
253
|
if (pRS[0 /* NgtRendererClassId.type */] === 'three' && cRS[0 /* NgtRendererClassId.type */] === 'three') {
|
|
247
|
-
removeThreeChild(
|
|
254
|
+
removeThreeChild(oldChild, parent, true);
|
|
248
255
|
this.destroyInternal(oldChild, parent);
|
|
249
256
|
return;
|
|
250
257
|
}
|
|
@@ -435,12 +442,12 @@ export class NgtRenderer {
|
|
|
435
442
|
for (const renderChild of rS[2 /* NgtRendererClassId.children */] || []) {
|
|
436
443
|
if (renderChild.__ngt_renderer__?.[0 /* NgtRendererClassId.type */] === 'three' && parent) {
|
|
437
444
|
if (parent.__ngt_renderer__?.[0 /* NgtRendererClassId.type */] === 'three') {
|
|
438
|
-
removeThreeChild(
|
|
445
|
+
removeThreeChild(renderChild, parent, true);
|
|
439
446
|
continue;
|
|
440
447
|
}
|
|
441
448
|
const closestInstance = getClosestParentWithInstance(parent);
|
|
442
449
|
if (closestInstance) {
|
|
443
|
-
removeThreeChild(
|
|
450
|
+
removeThreeChild(renderChild, closestInstance, true);
|
|
444
451
|
}
|
|
445
452
|
}
|
|
446
453
|
this.destroyInternal(renderChild, parent);
|
|
@@ -558,4 +565,4 @@ export function provideNgtRenderer(store) {
|
|
|
558
565
|
}
|
|
559
566
|
export { extend } from './catalogue';
|
|
560
567
|
export { HTML, ROUTED_SCENE } from './constants';
|
|
561
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yZW5kZXJlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNOLFVBQVUsRUFFVixnQkFBZ0IsRUFFaEIsWUFBWSxFQUNaLE1BQU0sRUFDTix3QkFBd0IsRUFDeEIsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRSxPQUFPLEVBQXFCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsNEJBQTRCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEgsT0FBTyxFQUdOLFFBQVEsRUFDUixVQUFVLEVBQ1YsNEJBQTRCLEVBQzVCLEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxHQUNULE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUduSCxNQUFNLE9BQU8sa0JBQWtCO0lBRC9CO1FBRVMsNEJBQXVC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QUMzQixDQUFDO0NBQ0Q7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsS0FBK0I7SUFDakUsTUFBTSxTQUFTLEdBQUc7UUFDakIsa0JBQWtCO1FBQ2xCLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRTtRQUM5RCxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0tBQ3pCLENBQUM7SUFFRixPQUFPLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcblx0SW5qZWN0YWJsZSxcblx0UmVuZGVyZXIyLFxuXHRSZW5kZXJlckZhY3RvcnkyLFxuXHRSZW5kZXJlclR5cGUyLFxuXHRnZXREZWJ1Z05vZGUsXG5cdGluamVjdCxcblx0bWFrZUVudmlyb25tZW50UHJvdmlkZXJzLFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0QXJncyB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYXJncyc7XG5pbXBvcnQgeyBnZXRMb2NhbFN0YXRlLCBwcmVwYXJlIH0gZnJvbSAnLi4vaW5zdGFuY2UnO1xuaW1wb3J0IHsgTkdUX1NUT1JFLCBpbmplY3RTdG9yZSwgcHJvdmlkZVN0b3JlIH0gZnJvbSAnLi4vc3RvcmUnO1xuaW1wb3J0IHsgTmd0QW55UmVjb3JkLCBOZ3RJbnN0YW5jZU5vZGUsIE5ndExvY2FsU3RhdGUsIE5ndFN0YXRlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgYXBwbHlQcm9wcyB9IGZyb20gJy4uL3V0aWxzL2FwcGx5LXByb3BzJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgTmd0U2lnbmFsU3RvcmUsIHNpZ25hbFN0b3JlIH0gZnJvbSAnLi4vdXRpbHMvc2lnbmFsLXN0b3JlJztcbmltcG9ydCB7IE5ndEFueUNvbnN0cnVjdG9yLCBpbmplY3RDYXRhbG9ndWUgfSBmcm9tICcuL2NhdGFsb2d1ZSc7XG5pbXBvcnQgeyBIVE1MLCBST1VURURfU0NFTkUsIFNQRUNJQUxfRE9NX1RBRywgU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVCwgU1BFQ0lBTF9QUk9QRVJUSUVTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcblx0Tmd0UmVuZGVyZXJOb2RlLFxuXHROZ3RSZW5kZXJlclN0YXRlLFxuXHRhZGRDaGlsZCxcblx0Y3JlYXRlTm9kZSxcblx0Z2V0Q2xvc2VzdFBhcmVudFdpdGhJbnN0YW5jZSxcblx0aXNET00sXG5cdHJlbW92ZUNoaWxkLFxuXHRzZXRQYXJlbnQsXG59IGZyb20gJy4vc3RhdGUnO1xuaW1wb3J0IHsgTmd0UmVuZGVyZXJDbGFzc0lkLCBhdHRhY2hUaHJlZUNoaWxkLCBrZWJhYlRvUGFzY2FsLCBwcm9jZXNzVGhyZWVFdmVudCwgcmVtb3ZlVGhyZWVDaGlsZCB9IGZyb20gJy4vdXRpbHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd0UmVuZGVyZXJGYWN0b3J5IGltcGxlbWVudHMgUmVuZGVyZXJGYWN0b3J5MiB7XG5cdHByaXZhdGUgZGVsZWdhdGVSZW5kZXJlckZhY3RvcnkgPSBpbmplY3QoUmVuZGVyZXJGYWN0b3J5MiwgeyBza2lwU2VsZjogdHJ1ZSB9KTtcblx0cHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cdHByaXZhdGUgY2F0YWxvZ3VlID0gaW5qZWN0Q2F0YWxvZ3VlKCk7XG5cdHByaXZhdGUgcm9vdFN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblxuXHRwcml2YXRlIHBvcnRhbENvbW1lbnRzTm9kZXM6IEFycmF5PE5ndFJlbmRlcmVyTm9kZT4gPSBbXTtcblx0cHJpdmF0ZSByZW5kZXJlck1hcCA9IG5ldyBNYXA8c3RyaW5nLCBSZW5kZXJlcjI+KCk7XG5cdHByaXZhdGUgcm91dGVkU2V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cblx0Y3JlYXRlUmVuZGVyZXIoaG9zdEVsZW1lbnQ6IGFueSwgdHlwZTogUmVuZGVyZXJUeXBlMiB8IG51bGwpOiBSZW5kZXJlcjIge1xuXHRcdGNvbnN0IGRlbGVnYXRlUmVuZGVyZXIgPSB0aGlzLmRlbGVnYXRlUmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGhvc3RFbGVtZW50LCB0eXBlKTtcblxuXHRcdGlmICghdHlwZSkgcmV0dXJuIGRlbGVnYXRlUmVuZGVyZXI7XG5cblx0XHQvLyBOT1RFOiBtaWdodCBuZWVkIHRvIHJldmlzaXQgdGhpc1xuXHRcdGlmICgodHlwZSBhcyBOZ3RBbnlSZWNvcmQpWyd0eXBlJ11bSFRNTF0pIHtcblx0XHRcdHRoaXMucmVuZGVyZXJNYXAuc2V0KHR5cGUuaWQsIGRlbGVnYXRlUmVuZGVyZXIpO1xuXHRcdFx0cmV0dXJuIGRlbGVnYXRlUmVuZGVyZXI7XG5cdFx0fVxuXG5cdFx0aWYgKCh0eXBlIGFzIE5ndEFueVJlY29yZClbJ3R5cGUnXVtST1VURURfU0NFTkVdKSB7XG5cdFx0XHR0aGlzLnJvdXRlZFNldC5hZGQodHlwZS5pZCk7XG5cdFx0fVxuXG5cdFx0bGV0IHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlck1hcC5nZXQodHlwZS5pZCk7XG5cdFx0aWYgKCFyZW5kZXJlcikge1xuXHRcdFx0dGhpcy5yZW5kZXJlck1hcC5zZXQoXG5cdFx0XHRcdHR5cGUuaWQsXG5cdFx0XHRcdChyZW5kZXJlciA9IG5ldyBOZ3RSZW5kZXJlcihcblx0XHRcdFx0XHRkZWxlZ2F0ZVJlbmRlcmVyLFxuXHRcdFx0XHRcdHRoaXMucm9vdFN0b3JlLFxuXHRcdFx0XHRcdHRoaXMuZG9jdW1lbnQsXG5cdFx0XHRcdFx0dGhpcy5wb3J0YWxDb21tZW50c05vZGVzLFxuXHRcdFx0XHRcdHRoaXMuY2F0YWxvZ3VlLFxuXHRcdFx0XHRcdC8vIHNldHRpbmcgcm9vdCBzY2VuZSBpZiB0aGVyZSdzIG5vIHJvdXRlZCBzY2VuZSBPUiB0aGlzIGNvbXBvbmVudCBpcyB0aGUgcm91dGVkIFNjZW5lXG5cdFx0XHRcdFx0IWhvc3RFbGVtZW50ICYmICh0aGlzLnJvdXRlZFNldC5zaXplID09PSAwIHx8IHRoaXMucm91dGVkU2V0Lmhhcyh0eXBlLmlkKSksXG5cdFx0XHRcdCkpLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlbmRlcmVyO1xuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyBOZ3RSZW5kZXJlciBpbXBsZW1lbnRzIFJlbmRlcmVyMiB7XG5cdHByaXZhdGUgYXJnc0NvbW1lbnROb2RlczogQXJyYXk8Tmd0UmVuZGVyZXJOb2RlPiA9IFtdO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgZGVsZWdhdGU6IFJlbmRlcmVyMixcblx0XHRwcml2YXRlIHJvb3RTdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+LFxuXHRcdHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxuXHRcdHByaXZhdGUgcG9ydGFsQ29tbWVudHNOb2RlczogQXJyYXk8Tmd0UmVuZGVyZXJOb2RlPixcblx0XHRwcml2YXRlIGNhdGFsb2d1ZTogUmVjb3JkPHN0cmluZywgTmd0QW55Q29uc3RydWN0b3I+LFxuXHRcdHByaXZhdGUgaXNSb290ID0gdHJ1ZSxcblx0KSB7fVxuXG5cdGNyZWF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudChuYW1lLCBuYW1lc3BhY2UpO1xuXG5cdFx0Ly8gaWYgdGhlcmUncyBuYW1lc3BhY2UsIHdlIGRvbid0IGRvIGFueXRoaW5nXG5cdFx0aWYgKG5hbWVzcGFjZSkge1xuXHRcdFx0cmV0dXJuIGNyZWF0ZU5vZGUoJ2RvbScsIGVsZW1lbnQsIHRoaXMuZG9jdW1lbnQpO1xuXHRcdH1cblxuXHRcdC8vIG9uIGZpcnN0IHBhc3MsIHdlIHJldHVybiB0aGUgUm9vdCBTY2VuZSBhcyB0aGUgcm9vdCBub2RlXG5cdFx0aWYgKHRoaXMuaXNSb290KSB7XG5cdFx0XHR0aGlzLmlzUm9vdCA9IGZhbHNlO1xuXHRcdFx0Y29uc3Qgbm9kZSA9IGNyZWF0ZU5vZGUoJ3RocmVlJywgdGhpcy5yb290U3RvcmUuc25hcHNob3Quc2NlbmUsIHRoaXMuZG9jdW1lbnQpO1xuXHRcdFx0bm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gKCkgPT4gZ2V0RGVidWdOb2RlKGVsZW1lbnQpPy5pbmplY3Rvcjtcblx0XHRcdHJldHVybiBub2RlO1xuXHRcdH1cblxuXHRcdGlmIChuYW1lID09PSBTUEVDSUFMX0RPTV9UQUcuTkdUX1BPUlRBTCkge1xuXHRcdFx0cmV0dXJuIGNyZWF0ZU5vZGUoJ3BvcnRhbCcsIGVsZW1lbnQsIHRoaXMuZG9jdW1lbnQpO1xuXHRcdH1cblxuXHRcdGlmIChuYW1lID09PSBTUEVDSUFMX0RPTV9UQUcuTkdUX1ZBTFVFKSB7XG5cdFx0XHRjb25zdCBpbnN0YW5jZVN0b3JlID0gc2lnbmFsU3RvcmUoeyBwYXJlbnQ6IG51bGwsIG9iamVjdHM6IFtdLCBub25PYmplY3RzOiBbXSB9KTtcblx0XHRcdHJldHVybiBjcmVhdGVOb2RlKFxuXHRcdFx0XHQndGhyZWUnLFxuXHRcdFx0XHRPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdHsgX19uZ3RfcmVuZGVyZXJfXzogeyByYXdWYWx1ZTogdW5kZWZpbmVkIH0gfSxcblx0XHRcdFx0XHQvLyBOT1RFOiB3ZSBhc3NpZ24gdGhpcyBtYW51YWxseSB0byBhIHJhdyB2YWx1ZSBub2RlXG5cdFx0XHRcdFx0Ly8gYmVjYXVzZSB3ZSBzYXkgaXQgaXMgYSAndGhyZWUnIG5vZGUgYnV0IHdlJ3JlIG5vdCB1c2luZyBwcmVwYXJlKClcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRfX25ndF9fOiB7XG5cdFx0XHRcdFx0XHRcdGlzUmF3OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbnN0YW5jZVN0b3JlLFxuXHRcdFx0XHRcdFx0XHRzZXRQYXJlbnQocGFyZW50OiBOZ3RJbnN0YW5jZU5vZGUpIHtcblx0XHRcdFx0XHRcdFx0XHRpbnN0YW5jZVN0b3JlLnVwZGF0ZSh7IHBhcmVudCB9KTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0KSxcblx0XHRcdFx0dGhpcy5kb2N1bWVudCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgW2luamVjdGVkQXJnc10gPSBbdGhpcy5nZXROZ3RBcmdzKCk/LnZhbHVlIHx8IFtdXTtcblxuXHRcdGlmIChuYW1lID09PSBTUEVDSUFMX0RPTV9UQUcuTkdUX1BSSU1JVElWRSkge1xuXHRcdFx0aWYgKCFpbmplY3RlZEFyZ3NbMF0pIHRocm93IG5ldyBFcnJvcihgW05HVF0gbmd0LXByaW1pdGl2ZSB3aXRob3V0IGFyZ3MgaXMgaW52YWxpZGApO1xuXHRcdFx0Y29uc3Qgb2JqZWN0ID0gaW5qZWN0ZWRBcmdzWzBdO1xuXHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUob2JqZWN0KTtcblx0XHRcdGlmICghbG9jYWxTdGF0ZSkge1xuXHRcdFx0XHQvLyBOT1RFOiBpZiBhbiBvYmplY3QgaXNuJ3QgYWxyZWFkeSBcInByZXBhcmVkXCIsIHdlIHByZXBhcmUgaXRcblx0XHRcdFx0cHJlcGFyZShvYmplY3QsIHsgc3RvcmU6IHRoaXMucm9vdFN0b3JlLCBwcmltaXRpdmU6IHRydWUgfSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY3JlYXRlTm9kZSgndGhyZWUnLCBvYmplY3QsIHRoaXMuZG9jdW1lbnQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRocmVlTmFtZSA9IGtlYmFiVG9QYXNjYWwobmFtZS5zdGFydHNXaXRoKCduZ3QtJykgPyBuYW1lLnNsaWNlKDQpIDogbmFtZSk7XG5cdFx0Y29uc3QgdGhyZWVUYXJnZXQgPSB0aGlzLmNhdGFsb2d1ZVt0aHJlZU5hbWVdO1xuXG5cdFx0Ly8gd2UgaGF2ZSB0aGUgVEhSRUUgY29uc3RydWN0b3IgaGVyZSwgaGFuZGxlIGl0XG5cdFx0aWYgKHRocmVlVGFyZ2V0KSB7XG5cdFx0XHRjb25zdCBpbnN0YW5jZSA9IHByZXBhcmUobmV3IHRocmVlVGFyZ2V0KC4uLmluamVjdGVkQXJncyksIHsgc3RvcmU6IHRoaXMucm9vdFN0b3JlIH0pO1xuXHRcdFx0Y29uc3Qgbm9kZSA9IGNyZWF0ZU5vZGUoJ3RocmVlJywgaW5zdGFuY2UsIHRoaXMuZG9jdW1lbnQpO1xuXHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoaW5zdGFuY2UpIGFzIE5ndExvY2FsU3RhdGU7XG5cblx0XHRcdC8vIGF1dG8tYXR0YWNoIGZvciBnZW9tZXRyeSBhbmQgbWF0ZXJpYWxcblx0XHRcdGlmIChpcy5nZW9tZXRyeShpbnN0YW5jZSkpIHtcblx0XHRcdFx0bG9jYWxTdGF0ZS5hdHRhY2ggPSBbJ2dlb21ldHJ5J107XG5cdFx0XHR9IGVsc2UgaWYgKGlzLm1hdGVyaWFsKGluc3RhbmNlKSkge1xuXHRcdFx0XHRsb2NhbFN0YXRlLmF0dGFjaCA9IFsnbWF0ZXJpYWwnXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNyZWF0ZU5vZGUoJ2RvbScsIGVsZW1lbnQsIHRoaXMuZG9jdW1lbnQpO1xuXHR9XG5cblx0Y3JlYXRlQ29tbWVudCh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgY29tbWVudCA9IHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh2YWx1ZSk7XG5cblx0XHQvLyBOT1RFOiB3ZSBhdHRhY2ggYW4gYXJyb3cgZnVuY3Rpb24gdG8gdGhlIENvbW1lbnQgbm9kZVxuXHRcdC8vIEluIG91ciBkaXJlY3RpdmVzLCB3ZSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHRoZW4gc3RhcnQgdHJhY2tpbmcgdGhlIFJlbmRlcmVyTm9kZVxuXHRcdC8vIHRoaXMgaXMgZG9uZSB0byBsaW1pdCB0aGUgYW1vdW50IG9mIE5vZGVzIHdlIG5lZWQgdG8gcHJvY2VzcyBmb3IgZ2V0Q3JlYXRpb25TdGF0ZVxuXHRcdGNvbW1lbnRbU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVF0gPSAobm9kZTogTmd0UmVuZGVyZXJOb2RlIHwgJ2FyZ3MnKSA9PiB7XG5cdFx0XHRpZiAobm9kZSA9PT0gJ2FyZ3MnKSB7XG5cdFx0XHRcdHRoaXMuYXJnc0NvbW1lbnROb2Rlcy5wdXNoKGNvbW1lbnQpO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0dGhpcy5wb3J0YWxDb21tZW50c05vZGVzLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHJldHVybiBjcmVhdGVOb2RlKCdjb21tZW50JywgY29tbWVudCwgdGhpcy5kb2N1bWVudCk7XG5cdH1cblxuXHRhcHBlbmRDaGlsZChwYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSwgbmV3Q2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSk6IHZvaWQge1xuXHRcdGNvbnN0IHBSUyA9IHBhcmVudC5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdGNvbnN0IGNSUyA9IG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX187XG5cblx0XHRpZiAoXG5cdFx0XHRwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnZG9tJyAmJlxuXHRcdFx0KG5ld0NoaWxkIGluc3RhbmNlb2YgVGV4dCB8fCBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnZG9tJylcblx0XHQpIHtcblx0XHRcdGFkZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXG5cdFx0XHRpZiAobmV3Q2hpbGRbJ19fbmd0X2RvbV9wYXJlbnRfXyddICYmIG5ld0NoaWxkWydfX25ndF9kb21fcGFyZW50X18nXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdHRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQobmV3Q2hpbGRbJ19fbmd0X2RvbV9wYXJlbnRfXyddLCBuZXdDaGlsZCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcblx0XHRcdGlmIChjUlMpIHtcblx0XHRcdFx0c2V0UGFyZW50KG5ld0NoaWxkLCBwYXJlbnQpO1xuXHRcdFx0XHRpZiAodGhpcy5zaG91bGRGaW5kR3JhbmRwYXJlbnRJbnN0YW5jZShwUlMsIGNSUywgbmV3Q2hpbGQpKSB7XG5cdFx0XHRcdFx0Ly8gd2UnbGwgdHJ5IHRvIGdldCB0aGUgZ3JhbmRwYXJlbnQgaW5zdGFuY2UgaGVyZSBzbyB0aGF0IHdlIGNhbiBydW4gYXBwZW5kQ2hpbGQgd2l0aCBib3RoIGluc3RhbmNlc1xuXHRcdFx0XHRcdGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlID0gZ2V0Q2xvc2VzdFBhcmVudFdpdGhJbnN0YW5jZShwYXJlbnQpO1xuXHRcdFx0XHRcdGlmIChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSkgdGhpcy5hcHBlbmRDaGlsZChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSwgbmV3Q2hpbGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoY1JTPy5bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tbWVudCcpIHtcblx0XHRcdHNldFBhcmVudChuZXdDaGlsZCwgcGFyZW50KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRzZXRQYXJlbnQobmV3Q2hpbGQsIHBhcmVudCk7XG5cdFx0YWRkQ2hpbGQocGFyZW50LCBuZXdDaGlsZCk7XG5cblx0XHQvLyBpZiBuZXcgY2hpbGQgaXMgYSBwb3J0YWxcblx0XHRpZiAoY1JTPy5bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAncG9ydGFsJykge1xuXHRcdFx0aWYgKCFjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHRoaXMucHJvY2Vzc1BvcnRhbENvbnRhaW5lcihuZXdDaGlsZCk7XG5cdFx0XHRpZiAoY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdKSB7XG5cdFx0XHRcdHRoaXMuYXBwZW5kQ2hpbGQocGFyZW50LCBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGlmIHBhcmVudCBpcyBhIHBvcnRhbFxuXHRcdGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAncG9ydGFsJykge1xuXHRcdFx0aWYgKCFwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHRoaXMucHJvY2Vzc1BvcnRhbENvbnRhaW5lcihwYXJlbnQpO1xuXG5cdFx0XHRpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdKSB7XG5cdFx0XHRcdHRoaXMuYXBwZW5kQ2hpbGQocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdLCBuZXdDaGlsZCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gaWYgYm90aCBhcmUgdGhyZWUgaW5zdGFuY2VzLCBzdHJhaWdodGZvcndhcmQgY2FzZVxuXHRcdGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmIGNSUz8uW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuXHRcdFx0Y29uc3QgY0xTID0gZ2V0TG9jYWxTdGF0ZShuZXdDaGlsZCk7XG5cblx0XHRcdC8vIGlmIGNoaWxkIGFscmVhZHkgYXR0YWNoZWQgdG8gYSBwYXJlbnQsIHNraXBcblx0XHRcdGlmIChjTFM/Lmluc3RhbmNlU3RvcmU/LmdldCgncGFyZW50JykpIHJldHVybjtcblx0XHRcdGlmIChwYXJlbnQgPT09IG5ld0NoaWxkKSByZXR1cm47XG5cblx0XHRcdC8vIGF0dGFjaCBUSFJFRSBjaGlsZFxuXHRcdFx0YXR0YWNoVGhyZWVDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBpZiBvbmx5IHRoZSBwYXJlbnQgaXMgdGhlIFRIUkVFIGluc3RhbmNlXG5cdFx0aWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdGZvciAoY29uc3QgcmVuZGVyQ2hpbGQgb2YgY1JTPy5bTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXSB8fCBbXSkge1xuXHRcdFx0XHR0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgcmVuZGVyQ2hpbGQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLnNob3VsZEZpbmRHcmFuZHBhcmVudEluc3RhbmNlKHBSUywgY1JTLCBuZXdDaGlsZCkpIHtcblx0XHRcdC8vIHdlJ2xsIHRyeSB0byBnZXQgdGhlIGdyYW5kcGFyZW50IGluc3RhbmNlIGhlcmUgc28gdGhhdCB3ZSBjYW4gcnVuIGFwcGVuZENoaWxkIHdpdGggYm90aCBpbnN0YW5jZXNcblx0XHRcdGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlID0gZ2V0Q2xvc2VzdFBhcmVudFdpdGhJbnN0YW5jZShwYXJlbnQpO1xuXHRcdFx0aWYgKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlKSB0aGlzLmFwcGVuZENoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBuZXdDaGlsZCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cblx0aW5zZXJ0QmVmb3JlKFxuXHRcdHBhcmVudDogTmd0UmVuZGVyZXJOb2RlLFxuXHRcdG5ld0NoaWxkOiBOZ3RSZW5kZXJlck5vZGUsXG5cdFx0Ly8gVE9ETzogd2UgbWlnaHQgbmVlZCB0aGVzZT9cblx0XHQvLyBfcmVmQ2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSxcblx0XHQvLyBfaXNNb3ZlPzogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0KTogdm9pZCB7XG5cdFx0Ly8gTk9URTogbm90IHN1cmUgd2h5IHRoaXMgaXMgaGVyZS4gaW52ZXN0aWdhdGUgd2hlbiB3ZSBoYXZlIHRpbWVcblx0XHQvLyBpZiAocGFyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgKG5ld0NoaWxkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgbmV3Q2hpbGQgaW5zdGFuY2VvZiBUZXh0KSkge1xuXHRcdC8vIFx0cmV0dXJuIHRoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQocGFyZW50LCBuZXdDaGlsZCk7XG5cdFx0Ly8gfVxuXG5cdFx0aWYgKHBhcmVudCA9PSBudWxsIHx8ICFwYXJlbnQuX19uZ3RfcmVuZGVyZXJfXyB8fCBwYXJlbnQgPT09IG5ld0NoaWxkKSByZXR1cm47XG5cdFx0dGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcblx0fVxuXG5cdHJlbW92ZUNoaWxkKHBhcmVudDogTmd0UmVuZGVyZXJOb2RlLCBvbGRDaGlsZDogTmd0UmVuZGVyZXJOb2RlLCBpc0hvc3RFbGVtZW50PzogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGlmIChwYXJlbnQgPT09IG51bGwpIHtcblx0XHRcdHBhcmVudCA9IChvbGRDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdIHx8XG5cdFx0XHRcdHVudHJhY2tlZCgoKSA9PiBnZXRMb2NhbFN0YXRlKG9sZENoaWxkKT8ucGFyZW50KSkgYXMgTmd0UmVuZGVyZXJOb2RlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBSUyA9IHBhcmVudC5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdGNvbnN0IGNSUyA9IG9sZENoaWxkLl9fbmd0X3JlbmRlcmVyX187XG5cblx0XHRpZiAoXG5cdFx0XHQoIWNSUyB8fCAhcFJTKSAmJlxuXHRcdFx0cGFyZW50IGluc3RhbmNlb2YgRWxlbWVudCAmJlxuXHRcdFx0KG9sZENoaWxkIGluc3RhbmNlb2YgRWxlbWVudCB8fCBvbGRDaGlsZCBpbnN0YW5jZW9mIFRleHQgfHwgb2xkQ2hpbGQgaW5zdGFuY2VvZiBDb21tZW50KVxuXHRcdCkge1xuXHRcdFx0dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDaGlsZChwYXJlbnQsIG9sZENoaWxkKTtcblx0XHRcdHRoaXMuZGVzdHJveUludGVybmFsKG9sZENoaWxkLCBwYXJlbnQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnZG9tJyAmJiAoIXBSUyB8fCBwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnZG9tJykpIHtcblx0XHRcdHRoaXMuZGVsZWdhdGUucmVtb3ZlQ2hpbGQocGFyZW50LCBvbGRDaGlsZCk7XG5cdFx0XHR0aGlzLmRlc3Ryb3lJbnRlcm5hbChvbGRDaGlsZCwgcGFyZW50KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRyZW1vdmVUaHJlZUNoaWxkKHBhcmVudCwgb2xkQ2hpbGQsIHRydWUpO1xuXHRcdFx0dGhpcy5kZXN0cm95SW50ZXJuYWwob2xkQ2hpbGQsIHBhcmVudCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0cFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcgJiZcblx0XHRcdHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXT8uX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZSdcblx0XHQpIHtcblx0XHRcdHRoaXMucmVtb3ZlQ2hpbGQocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdLCBvbGRDaGlsZCwgaXNIb3N0RWxlbWVudCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdHRoaXMuZGVzdHJveUludGVybmFsKG9sZENoaWxkLCBwYXJlbnQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlID0gZ2V0Q2xvc2VzdFBhcmVudFdpdGhJbnN0YW5jZShwYXJlbnQpO1xuXHRcdGlmIChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSkgdGhpcy5yZW1vdmVDaGlsZChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSwgb2xkQ2hpbGQsIGlzSG9zdEVsZW1lbnQpO1xuXHRcdHRoaXMuZGVzdHJveUludGVybmFsKG9sZENoaWxkLCBjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSBhcyBOZ3RSZW5kZXJlck5vZGUpO1xuXHR9XG5cblx0cGFyZW50Tm9kZShub2RlOiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0XHRjb25zdCByUyA9IG5vZGUuX19uZ3RfcmVuZGVyZXJfXztcblx0XHRpZiAoclM/LltOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSkgcmV0dXJuIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuXHRcdHJldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUobm9kZSk7XG5cdH1cblxuXHRwcml2YXRlIHNldEF0dHJpYnV0ZUludGVybmFsKFxuXHRcdGVsOiBOZ3RSZW5kZXJlck5vZGUsXG5cdFx0bmFtZTogc3RyaW5nLFxuXHRcdHZhbHVlOiBzdHJpbmcsXG5cdFx0X25hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHJTID0gZWwuX19uZ3RfcmVuZGVyZXJfXztcblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHJldHVybiBmYWxzZTtcblxuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuUkVOREVSX1BSSU9SSVRZKSB7XG5cdFx0XHRcdC8vIE5PVEU6IHByaW9yaXR5IG5lZWRzIHRvIGJlIHNldCBhcyBhbiBhdHRyaWJ1dGUgc3RyaW5nIHNvIHRoYXQgdGhleSBjYW4gYmUgc2V0IGFzIGVhcmx5IGFzIHBvc3NpYmxlXG5cdFx0XHRcdC8vIHdlIGNvbnZlcnQgdGhhdCBzdHJpbmcgdG8gYSBudW1iZXIuIGlmIGl0J3MgaW52YWxpZCwgZGVmYXVsdCAwXG5cdFx0XHRcdGxldCBwcmlvcml0eSA9IE51bWJlcih2YWx1ZSk7XG5cdFx0XHRcdGlmIChpc05hTihwcmlvcml0eSkpIHtcblx0XHRcdFx0XHRwcmlvcml0eSA9IDA7XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKGBbTkdUXSBcInByaW9yaXR5XCIgaXMgYW4gaW52YWxpZCBudW1iZXIsIGRlZmF1bHQgdG8gMGApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGVsKTtcblx0XHRcdFx0aWYgKGxvY2FsU3RhdGUpIGxvY2FsU3RhdGUucHJpb3JpdHkgPSBwcmlvcml0eTtcblx0XHRcdH0gZWxzZSBpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLkFUVEFDSCkge1xuXHRcdFx0XHQvLyBOT1RFOiBoYW5kbGUgYXR0YWNoIGFzIHN0cmluZ1xuXHRcdFx0XHRjb25zdCBwYXRocyA9IHZhbHVlLnNwbGl0KCcuJyk7XG5cdFx0XHRcdGlmIChwYXRocy5sZW5ndGgpIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShlbCk7XG5cdFx0XHRcdFx0aWYgKGxvY2FsU3RhdGUpIGxvY2FsU3RhdGUuYXR0YWNoID0gcGF0aHM7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLlJBV19WQUxVRSkge1xuXHRcdFx0XHQvLyBOT1RFOiBjb2VyY2lvblxuXHRcdFx0XHRsZXQgbWF5YmVDb2VyY2VkOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuID0gdmFsdWU7XG5cdFx0XHRcdGlmIChtYXliZUNvZXJjZWQgPT09ICcnIHx8IG1heWJlQ29lcmNlZCA9PT0gJ3RydWUnIHx8IG1heWJlQ29lcmNlZCA9PT0gJ2ZhbHNlJykge1xuXHRcdFx0XHRcdG1heWJlQ29lcmNlZCA9IG1heWJlQ29lcmNlZCA9PT0gJ3RydWUnIHx8IG1heWJlQ29lcmNlZCA9PT0gJyc7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWlzTmFOKE51bWJlcihtYXliZUNvZXJjZWQpKSkge1xuXHRcdFx0XHRcdG1heWJlQ29lcmNlZCA9IE51bWJlcihtYXliZUNvZXJjZWQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5yYXdWYWx1ZV0gPSBtYXliZUNvZXJjZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhcHBseVByb3BzKGVsLCB7IFtuYW1lXTogdmFsdWUgfSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHNldEF0dHJpYnV0ZShlbDogTmd0UmVuZGVyZXJOb2RlLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCB1c2VEZWxlZ2F0ZSA9IHRoaXMuc2V0QXR0cmlidXRlSW50ZXJuYWwoZWwsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2UpO1xuXG5cdFx0aWYgKHVzZURlbGVnYXRlKSB7XG5cdFx0XHR0aGlzLmRlbGVnYXRlLnNldEF0dHJpYnV0ZShlbCwgbmFtZSwgdmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdHJlbW92ZUF0dHJpYnV0ZShlbDogTmd0UmVuZGVyZXJOb2RlLCBuYW1lOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCB1c2VEZWxlZ2F0ZSA9IHRoaXMuc2V0QXR0cmlidXRlSW50ZXJuYWwoZWwsIG5hbWUsIHVuZGVmaW5lZCEsIG5hbWVzcGFjZSk7XG5cblx0XHRpZiAodXNlRGVsZWdhdGUpIHtcblx0XHRcdHRoaXMuZGVsZWdhdGUucmVtb3ZlQXR0cmlidXRlKGVsLCBuYW1lLCBuYW1lc3BhY2UpO1xuXHRcdH1cblx0fVxuXG5cdHNldFByb3BlcnR5KGVsOiBOZ3RSZW5kZXJlck5vZGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuXHRcdGNvbnN0IHJTID0gZWwuX19uZ3RfcmVuZGVyZXJfXztcblx0XHRpZiAoIXJTIHx8IHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSByZXR1cm47XG5cblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLlBBUkFNRVRFUlMpIHtcblx0XHRcdFx0Ly8gTk9URTogc2hvcnQtY3V0IGZvciBudWxsIHJheWNhc3QgdG8gcHJldmVudCB1cHN0cmVhbSBmcm9tIGNyZWF0aW5nIGEgbnVsbFJheWNhc3QgcHJvcGVydHlcblx0XHRcdFx0aWYgKCdyYXljYXN0JyBpbiB2YWx1ZSAmJiB2YWx1ZVsncmF5Y2FzdCddID09PSBudWxsKSB7XG5cdFx0XHRcdFx0dmFsdWVbJ3JheWNhc3QnXSA9ICgpID0+IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0YXBwbHlQcm9wcyhlbCwgdmFsdWUpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGVsKTtcblx0XHRcdGNvbnN0IHBhcmVudCA9IGxvY2FsU3RhdGU/Lmluc3RhbmNlU3RvcmUuZ2V0KCdwYXJlbnQnKSB8fCByU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcblxuXHRcdFx0Ly8gW3Jhd1ZhbHVlXVxuXHRcdFx0aWYgKGxvY2FsU3RhdGU/LmlzUmF3ICYmIG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5SQVdfVkFMVUUpIHtcblx0XHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLnJhd1ZhbHVlXSA9IHZhbHVlO1xuXHRcdFx0XHRpZiAocGFyZW50KSBhdHRhY2hUaHJlZUNoaWxkKHBhcmVudCwgZWwpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFthdHRhY2hdXG5cdFx0XHRpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLkFUVEFDSCkge1xuXHRcdFx0XHRpZiAobG9jYWxTdGF0ZSlcblx0XHRcdFx0XHRsb2NhbFN0YXRlLmF0dGFjaCA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG5cdFx0XHRcdFx0XHQ/IHZhbHVlLm1hcCgodikgPT4gdi50b1N0cmluZygpKVxuXHRcdFx0XHRcdFx0OiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbidcblx0XHRcdFx0XHRcdFx0PyB2YWx1ZVxuXHRcdFx0XHRcdFx0XHQ6IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcblx0XHRcdFx0XHRcdFx0XHQ/IHZhbHVlLnNwbGl0KCcuJylcblx0XHRcdFx0XHRcdFx0XHQ6IFt2YWx1ZV07XG5cdFx0XHRcdGlmIChwYXJlbnQpIGF0dGFjaFRocmVlQ2hpbGQocGFyZW50LCBlbCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTk9URTogc2hvcnQtY3V0IGZvciBudWxsIHJheWNhc3QgdG8gcHJldmVudCB1cHN0cmVhbSBmcm9tIGNyZWF0aW5nIGEgbnVsbFJheWNhc3QgcHJvcGVydHlcblx0XHRcdGlmIChuYW1lID09PSAncmF5Y2FzdCcgJiYgdmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0dmFsdWUgPSAoKSA9PiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRhcHBseVByb3BzKGVsLCB7IFtuYW1lXTogdmFsdWUgfSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkoZWwsIG5hbWUsIHZhbHVlKTtcblx0fVxuXG5cdGxpc3Rlbih0YXJnZXQ6IE5ndFJlbmRlcmVyTm9kZSwgZXZlbnROYW1lOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZlbnQ6IGFueSkgPT4gYm9vbGVhbiB8IHZvaWQpOiAoKSA9PiB2b2lkIHtcblx0XHRjb25zdCByUyA9IHRhcmdldC5fX25ndF9yZW5kZXJlcl9fO1xuXG5cdFx0Ly8gaWYgdGhlIHRhcmdldCBkb2Vzbid0IGhhdmUgX19uZ3RfcmVuZGVyZXJfXywgd2UgZGVsZWdhdGVcblx0XHQvLyBpZiB0YXJnZXQgaXMgRE9NIG5vZGUsIHdlIGRlbGVnYXRlXG5cdFx0aWYgKCFyUyB8fCBpc0RPTSh0YXJnZXQpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4odGFyZ2V0LCBldmVudE5hbWUsIGNhbGxiYWNrKTtcblx0XHR9XG5cblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRjb25zdCBpbnN0YW5jZSA9IHRhcmdldDtcblx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKTtcblx0XHRcdGNvbnN0IHByaW9yaXR5ID0gbG9jYWxTdGF0ZT8ucHJpb3JpdHkgPz8gMDtcblx0XHRcdHJldHVybiBwcm9jZXNzVGhyZWVFdmVudChpbnN0YW5jZSwgcHJpb3JpdHksIGV2ZW50TmFtZSwgY2FsbGJhY2spO1xuXHRcdH1cblxuXHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgLSB3ZSBrbm93IHRoYXQgdGFyZ2V0IGlzIG5vdCBET00gbm9kZVxuXHRcdGlmICh0YXJnZXQgPT09IHRoaXMucm9vdFN0b3JlLnNuYXBzaG90LnNjZW5lKSB7XG5cdFx0XHRsZXQgW2RvbVRhcmdldCwgZXZlbnRdID0gZXZlbnROYW1lLnNwbGl0KCc6Jyk7XG5cdFx0XHRpZiAoZXZlbnQgPT0gbnVsbCkge1xuXHRcdFx0XHRldmVudCA9IGRvbVRhcmdldDtcblx0XHRcdFx0ZG9tVGFyZ2V0ID0gJyc7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBldmVudFRhcmdldCA9XG5cdFx0XHRcdGRvbVRhcmdldCA9PT0gJ3dpbmRvdydcblx0XHRcdFx0XHQ/ICh0YXJnZXQgYXMgTmd0QW55UmVjb3JkKVsnb3duZXJEb2N1bWVudCddWydkZWZhdWx0VmlldyddXG5cdFx0XHRcdFx0OiAodGFyZ2V0IGFzIE5ndEFueVJlY29yZClbJ293bmVyRG9jdW1lbnQnXTtcblx0XHRcdHJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3RlbihldmVudFRhcmdldCwgZXZlbnQsIGNhbGxiYWNrKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKCkgPT4ge307XG5cdH1cblxuXHRwcml2YXRlIGRlc3Ryb3lJbnRlcm5hbChub2RlOiBOZ3RSZW5kZXJlck5vZGUsIHBhcmVudD86IE5ndFJlbmRlcmVyTm9kZSkge1xuXHRcdGNvbnN0IHJTID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdGlmICghclMgfHwgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHJldHVybjtcblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShub2RlKTtcblx0XHRcdGlmIChsb2NhbFN0YXRlPy5pbnN0YW5jZVN0b3JlKSB7XG5cdFx0XHRcdGxvY2FsU3RhdGUuaW5zdGFuY2VTdG9yZS5nZXQoJ29iamVjdHMnKS5mb3JFYWNoKChvYmopID0+IHRoaXMuZGVzdHJveUludGVybmFsKG9iaiwgcGFyZW50KSk7XG5cdFx0XHRcdGxvY2FsU3RhdGUuaW5zdGFuY2VTdG9yZS5nZXQoJ25vbk9iamVjdHMnKS5mb3JFYWNoKChvYmopID0+IHRoaXMuZGVzdHJveUludGVybmFsKG9iaiwgcGFyZW50KSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsb2NhbFN0YXRlPy5vblVwZGF0ZSkgZGVsZXRlIGxvY2FsU3RhdGUub25VcGRhdGU7XG5cdFx0XHRpZiAobG9jYWxTdGF0ZT8ub25BdHRhY2gpIGRlbGV0ZSBsb2NhbFN0YXRlLm9uQXR0YWNoO1xuXG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnb2JqZWN0cyddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ25vbk9iamVjdHMnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydwYXJlbnQnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydhZGQnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydyZW1vdmUnXTtcblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydzdG9yZSddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ2hhbmRsZXJzJ107XG5cblx0XHRcdGlmICghbG9jYWxTdGF0ZT8ucHJpbWl0aXZlKSB7XG5cdFx0XHRcdGRlbGV0ZSAobm9kZSBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ107XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG5cdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSA9IG51bGwhO1xuXHRcdFx0ZGVsZXRlIChub2RlIGFzIE5ndEFueVJlY29yZClbU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVF07XG5cdFx0XHR0aGlzLnJlbW92ZUNvbW1lbnROb2RlKG5vZGUsIHRoaXMuYXJnc0NvbW1lbnROb2Rlcyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gbnVsbCE7XG5cdFx0XHR0aGlzLnJlbW92ZUNvbW1lbnROb2RlKG5vZGUsIHRoaXMucG9ydGFsQ29tbWVudHNOb2Rlcyk7XG5cdFx0fVxuXG5cdFx0Ly8gbnVsbGlmeSBwYXJlbnRcblx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSA9IG51bGw7XG5cdFx0Zm9yIChjb25zdCByZW5kZXJDaGlsZCBvZiByU1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dIHx8IFtdKSB7XG5cdFx0XHRpZiAocmVuZGVyQ2hpbGQuX19uZ3RfcmVuZGVyZXJfXz8uW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJiBwYXJlbnQpIHtcblx0XHRcdFx0aWYgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fPy5bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRcdFx0cmVtb3ZlVGhyZWVDaGlsZChwYXJlbnQsIHJlbmRlckNoaWxkLCB0cnVlKTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGNsb3Nlc3RJbnN0YW5jZSA9IGdldENsb3Nlc3RQYXJlbnRXaXRoSW5zdGFuY2UocGFyZW50KTtcblx0XHRcdFx0aWYgKGNsb3Nlc3RJbnN0YW5jZSkge1xuXHRcdFx0XHRcdHJlbW92ZVRocmVlQ2hpbGQoY2xvc2VzdEluc3RhbmNlLCByZW5kZXJDaGlsZCwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuZGVzdHJveUludGVybmFsKHJlbmRlckNoaWxkLCBwYXJlbnQpO1xuXHRcdH1cblxuXHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0gPSBbXTtcblx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSA9IHRydWU7XG5cdFx0aWYgKHBhcmVudCkge1xuXHRcdFx0cmVtb3ZlQ2hpbGQocGFyZW50LCBub2RlKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlbW92ZUNvbW1lbnROb2RlKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgbm9kZXM6IE5ndFJlbmRlcmVyTm9kZVtdKSB7XG5cdFx0Y29uc3QgaW5kZXggPSBub2Rlcy5maW5kSW5kZXgoKGNvbW1lbnQpID0+IGNvbW1lbnQgPT09IG5vZGUpO1xuXHRcdGlmIChpbmRleCA+IC0xKSB7XG5cdFx0XHRub2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcHJvY2Vzc1BvcnRhbENvbnRhaW5lcihwb3J0YWw6IE5ndFJlbmRlcmVyTm9kZSkge1xuXHRcdGNvbnN0IGluamVjdG9yID0gcG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0/LigpO1xuXHRcdGlmICghaW5qZWN0b3IpIHJldHVybjtcblxuXHRcdGNvbnN0IHBvcnRhbFN0b3JlID0gaW5qZWN0b3IuZ2V0KE5HVF9TVE9SRSwgbnVsbCk7XG5cdFx0aWYgKCFwb3J0YWxTdG9yZSkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgcG9ydGFsQ29udGFpbmVyID0gcG9ydGFsU3RvcmUuZ2V0KCdzY2VuZScpO1xuXHRcdGlmICghcG9ydGFsQ29udGFpbmVyKSByZXR1cm47XG5cblx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShwb3J0YWxDb250YWluZXIpO1xuXHRcdGlmIChsb2NhbFN0YXRlKSB7XG5cdFx0XHRsb2NhbFN0YXRlLnN0b3JlID0gcG9ydGFsU3RvcmU7XG5cdFx0fVxuXG5cdFx0cG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0gPSBjcmVhdGVOb2RlKCd0aHJlZScsIHBvcnRhbENvbnRhaW5lciwgdGhpcy5kb2N1bWVudCk7XG5cdH1cblxuXHRwcml2YXRlIHNob3VsZEZpbmRHcmFuZHBhcmVudEluc3RhbmNlKHBSUzogTmd0UmVuZGVyZXJTdGF0ZSwgY1JTOiBOZ3RSZW5kZXJlclN0YXRlLCBjaGlsZDogTmd0UmVuZGVyZXJOb2RlKSB7XG5cdFx0Y29uc3QgcFR5cGUgPSBwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdO1xuXHRcdGNvbnN0IGNUeXBlID0gY1JTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXTtcblxuXHRcdGNvbnN0IGNMUyA9IGdldExvY2FsU3RhdGUoY2hpbGQpO1xuXHRcdC8vIGlmIGNoaWxkIGlzIHRocmVlIGJ1dCBoYXZlbid0IGJlZW4gYXR0YWNoZWQgdG8gYSBwYXJlbnQgeWV0XG5cdFx0Y29uc3QgaXNEYW5nbGluZ1RocmVlQ2hpbGQgPSBjVHlwZSA9PT0gJ3RocmVlJyAmJiAhY0xTPy5pbnN0YW5jZVN0b3JlPy5nZXQoJ3BhcmVudCcpO1xuXHRcdC8vIG9yIGJvdGggcGFyZW50IGFuZCBjaGlsZCBhcmUgRE9NIGVsZW1lbnRzXG5cdFx0Ly8gb3IgdGhleSBhcmUgY29tcG91bmQgQU5EIGhhdmVuJ3QgaGFkIGEgVEhSRUUgaW5zdGFuY2UgeWV0XG5cdFx0Y29uc3QgaXNQYXJlbnRTdGlsbERPTSA9IHBUeXBlID09PSAnZG9tJztcblx0XHRjb25zdCBpc0NoaWxkU3RpbGxET00gPSBjVHlwZSA9PT0gJ2RvbSc7XG5cblx0XHRyZXR1cm4gaXNEYW5nbGluZ1RocmVlQ2hpbGQgfHwgKGlzUGFyZW50U3RpbGxET00gJiYgaXNDaGlsZFN0aWxsRE9NKSB8fCBpc1BhcmVudFN0aWxsRE9NO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXROZ3RBcmdzKCkge1xuXHRcdGxldCBkaXJlY3RpdmU6IE5ndEFyZ3MgfCB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBkZXN0cm95ZWQgPSBbXTtcblxuXHRcdGxldCBpID0gdGhpcy5hcmdzQ29tbWVudE5vZGVzLmxlbmd0aCAtIDE7XG5cdFx0d2hpbGUgKGkgPj0gMCkge1xuXHRcdFx0Y29uc3QgY29tbWVudCA9IHRoaXMuYXJnc0NvbW1lbnROb2Rlc1tpXTtcblx0XHRcdGlmIChjb21tZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHtcblx0XHRcdFx0ZGVzdHJveWVkLnB1c2goaSk7XG5cdFx0XHRcdGktLTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpbmplY3RvciA9IGNvbW1lbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSgpO1xuXHRcdFx0aWYgKCFpbmplY3Rvcikge1xuXHRcdFx0XHRpLS07XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaW5zdGFuY2UgPSBpbmplY3Rvci5nZXQoTmd0QXJncywgbnVsbCk7XG5cdFx0XHRpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UudmFsaWRhdGUoKSkge1xuXHRcdFx0XHRkaXJlY3RpdmUgPSBpbnN0YW5jZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGktLTtcblx0XHR9XG5cblx0XHRkZXN0cm95ZWQuZm9yRWFjaCgoaW5kZXgpID0+IHtcblx0XHRcdHRoaXMuYXJnc0NvbW1lbnROb2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGRpcmVjdGl2ZTtcblx0fVxuXG5cdHByaXZhdGUgdHJ5R2V0UG9ydGFsU3RvcmUoKSB7XG5cdFx0bGV0IHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGVzdHJveWVkID0gW107XG5cdFx0Ly8gd2Ugb25seSBjYXJlIGFib3V0IHRoZSBwb3J0YWwgc3RhdGVzIGJlY2F1c2UgTmd0U3RvcmUgb25seSBkaWZmZXJzIHBlciBQb3J0YWxcblx0XHRsZXQgaSA9IHRoaXMucG9ydGFsQ29tbWVudHNOb2Rlcy5sZW5ndGggLSAxO1xuXHRcdHdoaWxlIChpID49IDApIHtcblx0XHRcdC8vIGxvb3AgdGhyb3VnaCB0aGUgcG9ydGFsIHN0YXRlIGJhY2t3YXJkcyB0byBmaW5kIHRoZSBjbG9zZXN0IE5ndFN0b3JlXG5cdFx0XHRjb25zdCBwb3J0YWwgPSB0aGlzLnBvcnRhbENvbW1lbnRzTm9kZXNbaV07XG5cdFx0XHRpZiAocG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHtcblx0XHRcdFx0ZGVzdHJveWVkLnB1c2goaSk7XG5cdFx0XHRcdGktLTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGluamVjdG9yID0gcG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0oKTtcblx0XHRcdGlmICghaW5qZWN0b3IpIHtcblx0XHRcdFx0aS0tO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluc3RhbmNlID0gaW5qZWN0b3IuZ2V0KE5HVF9TVE9SRSwgbnVsbCk7XG5cdFx0XHQvLyBvbmx5IHRoZSBpbnN0YW5jZSB3aXRoIHByZXZpb3VzUm9vdCBzaG91bGQgcGFzc1xuXHRcdFx0aWYgKGluc3RhbmNlICYmIGluc3RhbmNlLmdldCgncHJldmlvdXNSb290JykpIHtcblx0XHRcdFx0c3RvcmUgPSBpbnN0YW5jZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpLS07XG5cdFx0fVxuXG5cdFx0ZGVzdHJveWVkLmZvckVhY2goKGluZGV4KSA9PiB7XG5cdFx0XHR0aGlzLnBvcnRhbENvbW1lbnRzTm9kZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBzdG9yZSB8fCB0aGlzLnJvb3RTdG9yZTtcblx0fVxuXG5cdGNyZWF0ZVRleHQgPSB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0ZGVzdHJveSA9IHRoaXMuZGVsZWdhdGUuZGVzdHJveS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRkZXN0cm95Tm9kZTogKChub2RlOiBhbnkpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cdHNlbGVjdFJvb3RFbGVtZW50ID0gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudC5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRuZXh0U2libGluZyA9IHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0YWRkQ2xhc3MgPSB0aGlzLmRlbGVnYXRlLmFkZENsYXNzLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdHJlbW92ZUNsYXNzID0gdGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcy5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRzZXRTdHlsZSA9IHRoaXMuZGVsZWdhdGUuc2V0U3R5bGUuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0cmVtb3ZlU3R5bGUgPSB0aGlzLmRlbGVnYXRlLnJlbW92ZVN0eWxlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdHNldFZhbHVlID0gdGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRnZXQgZGF0YSgpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcblx0XHRyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kYXRhO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTmd0UmVuZGVyZXIoc3RvcmU6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPikge1xuXHRjb25zdCBwcm92aWRlcnMgPSBbXG5cdFx0Tmd0UmVuZGVyZXJGYWN0b3J5LFxuXHRcdHsgcHJvdmlkZTogUmVuZGVyZXJGYWN0b3J5MiwgdXNlRXhpc3Rpbmc6IE5ndFJlbmRlcmVyRmFjdG9yeSB9LFxuXHRcdHByb3ZpZGVTdG9yZSgoKSA9PiBzdG9yZSksXG5cdF07XG5cblx0cmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhwcm92aWRlcnMpO1xufVxuXG5leHBvcnQgeyBleHRlbmQgfSBmcm9tICcuL2NhdGFsb2d1ZSc7XG5leHBvcnQgeyBIVE1MLCBST1VURURfU0NFTkUgfSBmcm9tICcuL2NvbnN0YW50cyc7XG4iXX0=
|
|
568
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yZW5kZXJlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUNOLFVBQVUsRUFFVixnQkFBZ0IsRUFFaEIsWUFBWSxFQUNaLE1BQU0sRUFDTix3QkFBd0IsRUFDeEIsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRSxPQUFPLEVBQXFCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsNEJBQTRCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEgsT0FBTyxFQUdOLFFBQVEsRUFDUixVQUFVLEVBQ1YsNEJBQTRCLEVBQzVCLEtBQUssRUFDTCxXQUFXLEVBQ1gsU0FBUyxHQUNULE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUduSCxNQUFNLE9BQU8sa0JBQWtCO0lBRC9CO1FBRVMsNEJBQXVC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TyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFZRCxJQUFJLElBQUk7UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQzNCLENBQUM7Q0FDRDtBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUErQjtJQUNqRSxNQUFNLFNBQVMsR0FBRztRQUNqQixrQkFBa0I7UUFDbEIsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFO1FBQzlELFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7S0FDekIsQ0FBQztJQUVGLE9BQU8sd0JBQXdCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuXHRJbmplY3RhYmxlLFxuXHRSZW5kZXJlcjIsXG5cdFJlbmRlcmVyRmFjdG9yeTIsXG5cdFJlbmRlcmVyVHlwZTIsXG5cdGdldERlYnVnTm9kZSxcblx0aW5qZWN0LFxuXHRtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMsXG5cdHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RBcmdzIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9hcmdzJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUsIHByZXBhcmUgfSBmcm9tICcuLi9pbnN0YW5jZSc7XG5pbXBvcnQgeyBOR1RfU1RPUkUsIGluamVjdFN0b3JlLCBwcm92aWRlU3RvcmUgfSBmcm9tICcuLi9zdG9yZSc7XG5pbXBvcnQgeyBOZ3RBbnlSZWNvcmQsIE5ndEluc3RhbmNlTm9kZSwgTmd0TG9jYWxTdGF0ZSwgTmd0U3RhdGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBhcHBseVByb3BzIH0gZnJvbSAnLi4vdXRpbHMvYXBwbHktcHJvcHMnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi91dGlscy9pcyc7XG5pbXBvcnQgeyBOZ3RTaWduYWxTdG9yZSwgc2lnbmFsU3RvcmUgfSBmcm9tICcuLi91dGlscy9zaWduYWwtc3RvcmUnO1xuaW1wb3J0IHsgTmd0QW55Q29uc3RydWN0b3IsIGluamVjdENhdGFsb2d1ZSB9IGZyb20gJy4vY2F0YWxvZ3VlJztcbmltcG9ydCB7IEhUTUwsIFJPVVRFRF9TQ0VORSwgU1BFQ0lBTF9ET01fVEFHLCBTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5ULCBTUEVDSUFMX1BST1BFUlRJRVMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuXHROZ3RSZW5kZXJlck5vZGUsXG5cdE5ndFJlbmRlcmVyU3RhdGUsXG5cdGFkZENoaWxkLFxuXHRjcmVhdGVOb2RlLFxuXHRnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlLFxuXHRpc0RPTSxcblx0cmVtb3ZlQ2hpbGQsXG5cdHNldFBhcmVudCxcbn0gZnJvbSAnLi9zdGF0ZSc7XG5pbXBvcnQgeyBOZ3RSZW5kZXJlckNsYXNzSWQsIGF0dGFjaFRocmVlQ2hpbGQsIGtlYmFiVG9QYXNjYWwsIHByb2Nlc3NUaHJlZUV2ZW50LCByZW1vdmVUaHJlZUNoaWxkIH0gZnJvbSAnLi91dGlscyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ3RSZW5kZXJlckZhY3RvcnkgaW1wbGVtZW50cyBSZW5kZXJlckZhY3RvcnkyIHtcblx0cHJpdmF0ZSBkZWxlZ2F0ZVJlbmRlcmVyRmFjdG9yeSA9IGluamVjdChSZW5kZXJlckZhY3RvcnkyLCB7IHNraXBTZWxmOiB0cnVlIH0pO1xuXHRwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblx0cHJpdmF0ZSBjYXRhbG9ndWUgPSBpbmplY3RDYXRhbG9ndWUoKTtcblx0cHJpdmF0ZSByb290U3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXG5cdHByaXZhdGUgcG9ydGFsQ29tbWVudHNOb2RlczogQXJyYXk8Tmd0UmVuZGVyZXJOb2RlPiA9IFtdO1xuXHRwcml2YXRlIHJlbmRlcmVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIFJlbmRlcmVyMj4oKTtcblx0cHJpdmF0ZSByb3V0ZWRTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuXHRjcmVhdGVSZW5kZXJlcihob3N0RWxlbWVudDogYW55LCB0eXBlOiBSZW5kZXJlclR5cGUyIHwgbnVsbCk6IFJlbmRlcmVyMiB7XG5cdFx0Y29uc3QgZGVsZWdhdGVSZW5kZXJlciA9IHRoaXMuZGVsZWdhdGVSZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIoaG9zdEVsZW1lbnQsIHR5cGUpO1xuXG5cdFx0aWYgKCF0eXBlKSByZXR1cm4gZGVsZWdhdGVSZW5kZXJlcjtcblxuXHRcdC8vIE5PVEU6IG1pZ2h0IG5lZWQgdG8gcmV2aXNpdCB0aGlzXG5cdFx0aWYgKCh0eXBlIGFzIE5ndEFueVJlY29yZClbJ3R5cGUnXVtIVE1MXSkge1xuXHRcdFx0dGhpcy5yZW5kZXJlck1hcC5zZXQodHlwZS5pZCwgZGVsZWdhdGVSZW5kZXJlcik7XG5cdFx0XHRyZXR1cm4gZGVsZWdhdGVSZW5kZXJlcjtcblx0XHR9XG5cblx0XHRpZiAoKHR5cGUgYXMgTmd0QW55UmVjb3JkKVsndHlwZSddW1JPVVRFRF9TQ0VORV0pIHtcblx0XHRcdHRoaXMucm91dGVkU2V0LmFkZCh0eXBlLmlkKTtcblx0XHR9XG5cblx0XHRsZXQgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyTWFwLmdldCh0eXBlLmlkKTtcblx0XHRpZiAoIXJlbmRlcmVyKSB7XG5cdFx0XHR0aGlzLnJlbmRlcmVyTWFwLnNldChcblx0XHRcdFx0dHlwZS5pZCxcblx0XHRcdFx0KHJlbmRlcmVyID0gbmV3IE5ndFJlbmRlcmVyKFxuXHRcdFx0XHRcdGRlbGVnYXRlUmVuZGVyZXIsXG5cdFx0XHRcdFx0dGhpcy5yb290U3RvcmUsXG5cdFx0XHRcdFx0dGhpcy5kb2N1bWVudCxcblx0XHRcdFx0XHR0aGlzLnBvcnRhbENvbW1lbnRzTm9kZXMsXG5cdFx0XHRcdFx0dGhpcy5jYXRhbG9ndWUsXG5cdFx0XHRcdFx0Ly8gc2V0dGluZyByb290IHNjZW5lIGlmIHRoZXJlJ3Mgbm8gcm91dGVkIHNjZW5lIE9SIHRoaXMgY29tcG9uZW50IGlzIHRoZSByb3V0ZWQgU2NlbmVcblx0XHRcdFx0XHQhaG9zdEVsZW1lbnQgJiYgKHRoaXMucm91dGVkU2V0LnNpemUgPT09IDAgfHwgdGhpcy5yb3V0ZWRTZXQuaGFzKHR5cGUuaWQpKSxcblx0XHRcdFx0KSksXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVuZGVyZXI7XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyIGltcGxlbWVudHMgUmVuZGVyZXIyIHtcblx0cHJpdmF0ZSBhcmdzQ29tbWVudE5vZGVzOiBBcnJheTxOZ3RSZW5kZXJlck5vZGU+ID0gW107XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSBkZWxlZ2F0ZTogUmVuZGVyZXIyLFxuXHRcdHByaXZhdGUgcm9vdFN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4sXG5cdFx0cHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG5cdFx0cHJpdmF0ZSBwb3J0YWxDb21tZW50c05vZGVzOiBBcnJheTxOZ3RSZW5kZXJlck5vZGU+LFxuXHRcdHByaXZhdGUgY2F0YWxvZ3VlOiBSZWNvcmQ8c3RyaW5nLCBOZ3RBbnlDb25zdHJ1Y3Rvcj4sXG5cdFx0cHJpdmF0ZSBpc1Jvb3QgPSB0cnVlLFxuXHQpIHt9XG5cblx0Y3JlYXRlRWxlbWVudChuYW1lOiBzdHJpbmcsIG5hbWVzcGFjZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBlbGVtZW50ID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KG5hbWUsIG5hbWVzcGFjZSk7XG5cblx0XHQvLyBpZiB0aGVyZSdzIG5hbWVzcGFjZSwgd2UgZG9uJ3QgZG8gYW55dGhpbmdcblx0XHRpZiAobmFtZXNwYWNlKSB7XG5cdFx0XHRyZXR1cm4gY3JlYXRlTm9kZSgnZG9tJywgZWxlbWVudCwgdGhpcy5kb2N1bWVudCk7XG5cdFx0fVxuXG5cdFx0Ly8gb24gZmlyc3QgcGFzcywgd2UgcmV0dXJuIHRoZSBSb290IFNjZW5lIGFzIHRoZSByb290IG5vZGVcblx0XHRpZiAodGhpcy5pc1Jvb3QpIHtcblx0XHRcdHRoaXMuaXNSb290ID0gZmFsc2U7XG5cdFx0XHRjb25zdCBub2RlID0gY3JlYXRlTm9kZSgndGhyZWUnLCB0aGlzLnJvb3RTdG9yZS5zbmFwc2hvdC5zY2VuZSwgdGhpcy5kb2N1bWVudCk7XG5cdFx0XHRub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSAoKSA9PiBnZXREZWJ1Z05vZGUoZWxlbWVudCk/LmluamVjdG9yO1xuXHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0fVxuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfUE9SVEFMKSB7XG5cdFx0XHRyZXR1cm4gY3JlYXRlTm9kZSgncG9ydGFsJywgZWxlbWVudCwgdGhpcy5kb2N1bWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfVkFMVUUpIHtcblx0XHRcdGNvbnN0IGluc3RhbmNlU3RvcmUgPSBzaWduYWxTdG9yZSh7IHBhcmVudDogbnVsbCwgb2JqZWN0czogW10sIG5vbk9iamVjdHM6IFtdIH0pO1xuXHRcdFx0cmV0dXJuIGNyZWF0ZU5vZGUoXG5cdFx0XHRcdCd0aHJlZScsXG5cdFx0XHRcdE9iamVjdC5hc3NpZ24oXG5cdFx0XHRcdFx0eyBfX25ndF9yZW5kZXJlcl9fOiB7IHJhd1ZhbHVlOiB1bmRlZmluZWQgfSB9LFxuXHRcdFx0XHRcdC8vIE5PVEU6IHdlIGFzc2lnbiB0aGlzIG1hbnVhbGx5IHRvIGEgcmF3IHZhbHVlIG5vZGVcblx0XHRcdFx0XHQvLyBiZWNhdXNlIHdlIHNheSBpdCBpcyBhICd0aHJlZScgbm9kZSBidXQgd2UncmUgbm90IHVzaW5nIHByZXBhcmUoKVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdF9fbmd0X186IHtcblx0XHRcdFx0XHRcdFx0aXNSYXc6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluc3RhbmNlU3RvcmUsXG5cdFx0XHRcdFx0XHRcdHNldFBhcmVudChwYXJlbnQ6IE5ndEluc3RhbmNlTm9kZSkge1xuXHRcdFx0XHRcdFx0XHRcdGluc3RhbmNlU3RvcmUudXBkYXRlKHsgcGFyZW50IH0pO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0aGlzLmRvY3VtZW50LFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBbaW5qZWN0ZWRBcmdzXSA9IFt0aGlzLmdldE5ndEFyZ3MoKT8udmFsdWUgfHwgW11dO1xuXG5cdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfRE9NX1RBRy5OR1RfUFJJTUlUSVZFKSB7XG5cdFx0XHRpZiAoIWluamVjdGVkQXJnc1swXSkgdGhyb3cgbmV3IEVycm9yKGBbTkdUXSBuZ3QtcHJpbWl0aXZlIHdpdGhvdXQgYXJncyBpcyBpbnZhbGlkYCk7XG5cdFx0XHRjb25zdCBvYmplY3QgPSBpbmplY3RlZEFyZ3NbMF07XG5cdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShvYmplY3QpO1xuXHRcdFx0aWYgKCFsb2NhbFN0YXRlKSB7XG5cdFx0XHRcdC8vIE5PVEU6IGlmIGFuIG9iamVjdCBpc24ndCBhbHJlYWR5IFwicHJlcGFyZWRcIiwgd2UgcHJlcGFyZSBpdFxuXHRcdFx0XHRwcmVwYXJlKG9iamVjdCwgeyBzdG9yZTogdGhpcy5yb290U3RvcmUsIHByaW1pdGl2ZTogdHJ1ZSB9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjcmVhdGVOb2RlKCd0aHJlZScsIG9iamVjdCwgdGhpcy5kb2N1bWVudCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdGhyZWVOYW1lID0ga2ViYWJUb1Bhc2NhbChuYW1lLnN0YXJ0c1dpdGgoJ25ndC0nKSA/IG5hbWUuc2xpY2UoNCkgOiBuYW1lKTtcblx0XHRjb25zdCB0aHJlZVRhcmdldCA9IHRoaXMuY2F0YWxvZ3VlW3RocmVlTmFtZV07XG5cblx0XHQvLyB3ZSBoYXZlIHRoZSBUSFJFRSBjb25zdHJ1Y3RvciBoZXJlLCBoYW5kbGUgaXRcblx0XHRpZiAodGhyZWVUYXJnZXQpIHtcblx0XHRcdGNvbnN0IGluc3RhbmNlID0gcHJlcGFyZShuZXcgdGhyZWVUYXJnZXQoLi4uaW5qZWN0ZWRBcmdzKSwgeyBzdG9yZTogdGhpcy5yb290U3RvcmUgfSk7XG5cdFx0XHRjb25zdCBub2RlID0gY3JlYXRlTm9kZSgndGhyZWUnLCBpbnN0YW5jZSwgdGhpcy5kb2N1bWVudCk7XG5cdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSkgYXMgTmd0TG9jYWxTdGF0ZTtcblxuXHRcdFx0Ly8gYXV0by1hdHRhY2ggZm9yIGdlb21ldHJ5IGFuZCBtYXRlcmlhbFxuXHRcdFx0aWYgKGlzLmdlb21ldHJ5KGluc3RhbmNlKSkge1xuXHRcdFx0XHRsb2NhbFN0YXRlLmF0dGFjaCA9IFsnZ2VvbWV0cnknXTtcblx0XHRcdH0gZWxzZSBpZiAoaXMubWF0ZXJpYWwoaW5zdGFuY2UpKSB7XG5cdFx0XHRcdGxvY2FsU3RhdGUuYXR0YWNoID0gWydtYXRlcmlhbCddO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbm9kZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY3JlYXRlTm9kZSgnZG9tJywgZWxlbWVudCwgdGhpcy5kb2N1bWVudCk7XG5cdH1cblxuXHRjcmVhdGVDb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcblx0XHRjb25zdCBjb21tZW50ID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHZhbHVlKTtcblxuXHRcdC8vIE5PVEU6IHdlIGF0dGFjaCBhbiBhcnJvdyBmdW5jdGlvbiB0byB0aGUgQ29tbWVudCBub2RlXG5cdFx0Ly8gSW4gb3VyIGRpcmVjdGl2ZXMsIHdlIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gdGhlbiBzdGFydCB0cmFja2luZyB0aGUgUmVuZGVyZXJOb2RlXG5cdFx0Ly8gdGhpcyBpcyBkb25lIHRvIGxpbWl0IHRoZSBhbW91bnQgb2YgTm9kZXMgd2UgbmVlZCB0byBwcm9jZXNzIGZvciBnZXRDcmVhdGlvblN0YXRlXG5cdFx0Y29tbWVudFtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXSA9IChub2RlOiBOZ3RSZW5kZXJlck5vZGUgfCAnYXJncycpID0+IHtcblx0XHRcdGlmIChub2RlID09PSAnYXJncycpIHtcblx0XHRcdFx0dGhpcy5hcmdzQ29tbWVudE5vZGVzLnB1c2goY29tbWVudCk7XG5cdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHR0aGlzLnBvcnRhbENvbW1lbnRzTm9kZXMucHVzaChub2RlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0cmV0dXJuIGNyZWF0ZU5vZGUoJ2NvbW1lbnQnLCBjb21tZW50LCB0aGlzLmRvY3VtZW50KTtcblx0fVxuXG5cdGFwcGVuZENoaWxkKHBhcmVudDogTmd0UmVuZGVyZXJOb2RlLCBuZXdDaGlsZDogTmd0UmVuZGVyZXJOb2RlKTogdm9pZCB7XG5cdFx0Y29uc3QgcFJTID0gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX187XG5cdFx0Y29uc3QgY1JTID0gbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfXztcblxuXHRcdGlmIChcblx0XHRcdHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nICYmXG5cdFx0XHQobmV3Q2hpbGQgaW5zdGFuY2VvZiBUZXh0IHx8IGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nKVxuXHRcdCkge1xuXHRcdFx0YWRkQ2hpbGQocGFyZW50LCBuZXdDaGlsZCk7XG5cblx0XHRcdGlmIChuZXdDaGlsZFsnX19uZ3RfZG9tX3BhcmVudF9fJ10gJiYgbmV3Q2hpbGRbJ19fbmd0X2RvbV9wYXJlbnRfXyddIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZChuZXdDaGlsZFsnX19uZ3RfZG9tX3BhcmVudF9fJ10sIG5ld0NoaWxkKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXHRcdFx0aWYgKGNSUykge1xuXHRcdFx0XHRzZXRQYXJlbnQobmV3Q2hpbGQsIHBhcmVudCk7XG5cdFx0XHRcdGlmICh0aGlzLnNob3VsZEZpbmRHcmFuZHBhcmVudEluc3RhbmNlKHBSUywgY1JTLCBuZXdDaGlsZCkpIHtcblx0XHRcdFx0XHQvLyB3ZSdsbCB0cnkgdG8gZ2V0IHRoZSBncmFuZHBhcmVudCBpbnN0YW5jZSBoZXJlIHNvIHRoYXQgd2UgY2FuIHJ1biBhcHBlbmRDaGlsZCB3aXRoIGJvdGggaW5zdGFuY2VzXG5cdFx0XHRcdFx0Y29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSBnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG5cdFx0XHRcdFx0aWYgKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlKSB0aGlzLmFwcGVuZENoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBuZXdDaGlsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjUlM/LltOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21tZW50Jykge1xuXHRcdFx0c2V0UGFyZW50KG5ld0NoaWxkLCBwYXJlbnQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHNldFBhcmVudChuZXdDaGlsZCwgcGFyZW50KTtcblx0XHRhZGRDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcblxuXHRcdC8vIGlmIG5ldyBjaGlsZCBpcyBhIHBvcnRhbFxuXHRcdGlmIChjUlM/LltOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG5cdFx0XHRpZiAoIWNSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSkgdGhpcy5wcm9jZXNzUG9ydGFsQ29udGFpbmVyKG5ld0NoaWxkKTtcblx0XHRcdGlmIChjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcblx0XHRcdFx0dGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gaWYgcGFyZW50IGlzIGEgcG9ydGFsXG5cdFx0aWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG5cdFx0XHRpZiAoIXBSU1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSkgdGhpcy5wcm9jZXNzUG9ydGFsQ29udGFpbmVyKHBhcmVudCk7XG5cblx0XHRcdGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcblx0XHRcdFx0dGhpcy5hcHBlbmRDaGlsZChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0sIG5ld0NoaWxkKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBpZiBib3RoIGFyZSB0aHJlZSBpbnN0YW5jZXMsIHN0cmFpZ2h0Zm9yd2FyZCBjYXNlXG5cdFx0aWYgKHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiYgY1JTPy5bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnKSB7XG5cdFx0XHRjb25zdCBjTFMgPSBnZXRMb2NhbFN0YXRlKG5ld0NoaWxkKTtcblxuXHRcdFx0Ly8gaWYgY2hpbGQgYWxyZWFkeSBhdHRhY2hlZCB0byBhIHBhcmVudCwgc2tpcFxuXHRcdFx0aWYgKGNMUz8uaW5zdGFuY2VTdG9yZT8uZ2V0KCdwYXJlbnQnKSkgcmV0dXJuO1xuXHRcdFx0aWYgKHBhcmVudCA9PT0gbmV3Q2hpbGQpIHJldHVybjtcblxuXHRcdFx0Ly8gYXR0YWNoIFRIUkVFIGNoaWxkXG5cdFx0XHRhdHRhY2hUaHJlZUNoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGlmIG9ubHkgdGhlIHBhcmVudCBpcyB0aGUgVEhSRUUgaW5zdGFuY2Vcblx0XHRpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuXHRcdFx0Zm9yIChjb25zdCByZW5kZXJDaGlsZCBvZiBjUlM/LltOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dIHx8IFtdKSB7XG5cdFx0XHRcdHRoaXMuYXBwZW5kQ2hpbGQocGFyZW50LCByZW5kZXJDaGlsZCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2hvdWxkRmluZEdyYW5kcGFyZW50SW5zdGFuY2UocFJTLCBjUlMsIG5ld0NoaWxkKSkge1xuXHRcdFx0Ly8gd2UnbGwgdHJ5IHRvIGdldCB0aGUgZ3JhbmRwYXJlbnQgaW5zdGFuY2UgaGVyZSBzbyB0aGF0IHdlIGNhbiBydW4gYXBwZW5kQ2hpbGQgd2l0aCBib3RoIGluc3RhbmNlc1xuXHRcdFx0Y29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSBnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG5cdFx0XHRpZiAoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UpIHRoaXMuYXBwZW5kQ2hpbGQoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UsIG5ld0NoaWxkKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH1cblxuXHRpbnNlcnRCZWZvcmUoXG5cdFx0cGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsXG5cdFx0bmV3Q2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSxcblx0XHQvLyBUT0RPOiB3ZSBtaWdodCBuZWVkIHRoZXNlP1xuXHRcdC8vIF9yZWZDaGlsZDogTmd0UmVuZGVyZXJOb2RlLFxuXHRcdC8vIF9pc01vdmU/OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHQpOiB2b2lkIHtcblx0XHQvLyBOT1RFOiBub3Qgc3VyZSB3aHkgdGhpcyBpcyBoZXJlLiBpbnZlc3RpZ2F0ZSB3aGVuIHdlIGhhdmUgdGltZVxuXHRcdC8vIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiAobmV3Q2hpbGQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBuZXdDaGlsZCBpbnN0YW5jZW9mIFRleHQpKSB7XG5cdFx0Ly8gXHRyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcblx0XHQvLyB9XG5cblx0XHRpZiAocGFyZW50ID09IG51bGwgfHwgIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fIHx8IHBhcmVudCA9PT0gbmV3Q2hpbGQpIHJldHVybjtcblx0XHR0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXHR9XG5cblx0cmVtb3ZlQ2hpbGQocGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsIG9sZENoaWxkOiBOZ3RSZW5kZXJlck5vZGUsIGlzSG9zdEVsZW1lbnQ/OiBib29sZWFuIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0aWYgKHBhcmVudCA9PSBudWxsKSB7XG5cdFx0XHRwYXJlbnQgPSAodW50cmFja2VkKCgpID0+IGdldExvY2FsU3RhdGUob2xkQ2hpbGQpPy5wYXJlbnQpIHx8XG5cdFx0XHRcdG9sZENoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0pIGFzIE5ndFJlbmRlcmVyTm9kZTtcblx0XHR9XG5cblx0XHRjb25zdCBjUlMgPSBvbGRDaGlsZC5fX25ndF9yZW5kZXJlcl9fO1xuXG5cdFx0Ly8gaWYgcGFyZW50IGlzIHN0aWxsIGZhbHN5LCB3ZSBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCB0aGUgcGFyZW50LlxuXHRcdC8vIHdlJ2xsIGp1c3QgcmVtb3ZlIHRoZSBjaGlsZCBhbmQgZGVzdHJveSBpdFxuXHRcdGlmIChwYXJlbnQgPT0gbnVsbCAmJiBjUlM/LltOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gIT09ICd0aHJlZScpIHtcblx0XHRcdHJlbW92ZVRocmVlQ2hpbGQob2xkQ2hpbGQsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0XHR0aGlzLmRlc3Ryb3lJbnRlcm5hbChvbGRDaGlsZCwgdW5kZWZpbmVkKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBwUlMgPSBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfXztcblxuXHRcdGlmIChcblx0XHRcdCghY1JTIHx8ICFwUlMpICYmXG5cdFx0XHRwYXJlbnQgaW5zdGFuY2VvZiBFbGVtZW50ICYmXG5cdFx0XHQob2xkQ2hpbGQgaW5zdGFuY2VvZiBFbGVtZW50IHx8IG9sZENoaWxkIGluc3RhbmNlb2YgVGV4dCB8fCBvbGRDaGlsZCBpbnN0YW5jZW9mIENvbW1lbnQpXG5cdFx0KSB7XG5cdFx0XHR0aGlzLmRlbGVnYXRlLnJlbW92ZUNoaWxkKHBhcmVudCwgb2xkQ2hpbGQpO1xuXHRcdFx0dGhpcy5kZXN0cm95SW50ZXJuYWwob2xkQ2hpbGQsIHBhcmVudCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nICYmICghcFJTIHx8IHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nKSkge1xuXHRcdFx0dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDaGlsZChwYXJlbnQsIG9sZENoaWxkKTtcblx0XHRcdHRoaXMuZGVzdHJveUludGVybmFsKG9sZENoaWxkLCBwYXJlbnQpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmIGNSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdHJlbW92ZVRocmVlQ2hpbGQob2xkQ2hpbGQsIHBhcmVudCwgdHJ1ZSk7XG5cdFx0XHR0aGlzLmRlc3Ryb3lJbnRlcm5hbChvbGRDaGlsZCwgcGFyZW50KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAncG9ydGFsJyAmJlxuXHRcdFx0cFJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdPy5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJ1xuXHRcdCkge1xuXHRcdFx0dGhpcy5yZW1vdmVDaGlsZChwUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0sIG9sZENoaWxkLCBpc0hvc3RFbGVtZW50KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAocFJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuXHRcdFx0dGhpcy5kZXN0cm95SW50ZXJuYWwob2xkQ2hpbGQsIHBhcmVudCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSBnZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG5cdFx0aWYgKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlKSB0aGlzLnJlbW92ZUNoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBvbGRDaGlsZCwgaXNIb3N0RWxlbWVudCk7XG5cdFx0dGhpcy5kZXN0cm95SW50ZXJuYWwob2xkQ2hpbGQsIGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlIGFzIE5ndFJlbmRlcmVyTm9kZSk7XG5cdH1cblxuXHRwYXJlbnROb2RlKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSkge1xuXHRcdGNvbnN0IHJTID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdGlmIChyUz8uW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdKSByZXR1cm4gclNbTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF07XG5cdFx0cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShub2RlKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0QXR0cmlidXRlSW50ZXJuYWwoXG5cdFx0ZWw6IE5ndFJlbmRlcmVyTm9kZSxcblx0XHRuYW1lOiBzdHJpbmcsXG5cdFx0dmFsdWU6IHN0cmluZyxcblx0XHRfbmFtZXNwYWNlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgclMgPSBlbC5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0aWYgKHJTW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuXHRcdFx0aWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5SRU5ERVJfUFJJT1JJVFkpIHtcblx0XHRcdFx0Ly8gTk9URTogcHJpb3JpdHkgbmVlZHMgdG8gYmUgc2V0IGFzIGFuIGF0dHJpYnV0ZSBzdHJpbmcgc28gdGhhdCB0aGV5IGNhbiBiZSBzZXQgYXMgZWFybHkgYXMgcG9zc2libGVcblx0XHRcdFx0Ly8gd2UgY29udmVydCB0aGF0IHN0cmluZyB0byBhIG51bWJlci4gaWYgaXQncyBpbnZhbGlkLCBkZWZhdWx0IDBcblx0XHRcdFx0bGV0IHByaW9yaXR5ID0gTnVtYmVyKHZhbHVlKTtcblx0XHRcdFx0aWYgKGlzTmFOKHByaW9yaXR5KSkge1xuXHRcdFx0XHRcdHByaW9yaXR5ID0gMDtcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oYFtOR1RdIFwicHJpb3JpdHlcIiBpcyBhbiBpbnZhbGlkIG51bWJlciwgZGVmYXVsdCB0byAwYCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoZWwpO1xuXHRcdFx0XHRpZiAobG9jYWxTdGF0ZSkgbG9jYWxTdGF0ZS5wcmlvcml0eSA9IHByaW9yaXR5O1xuXHRcdFx0fSBlbHNlIGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuQVRUQUNIKSB7XG5cdFx0XHRcdC8vIE5PVEU6IGhhbmRsZSBhdHRhY2ggYXMgc3RyaW5nXG5cdFx0XHRcdGNvbnN0IHBhdGhzID0gdmFsdWUuc3BsaXQoJy4nKTtcblx0XHRcdFx0aWYgKHBhdGhzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGVsKTtcblx0XHRcdFx0XHRpZiAobG9jYWxTdGF0ZSkgbG9jYWxTdGF0ZS5hdHRhY2ggPSBwYXRocztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuUkFXX1ZBTFVFKSB7XG5cdFx0XHRcdC8vIE5PVEU6IGNvZXJjaW9uXG5cdFx0XHRcdGxldCBtYXliZUNvZXJjZWQ6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gPSB2YWx1ZTtcblx0XHRcdFx0aWYgKG1heWJlQ29lcmNlZCA9PT0gJycgfHwgbWF5YmVDb2VyY2VkID09PSAndHJ1ZScgfHwgbWF5YmVDb2VyY2VkID09PSAnZmFsc2UnKSB7XG5cdFx0XHRcdFx0bWF5YmVDb2VyY2VkID0gbWF5YmVDb2VyY2VkID09PSAndHJ1ZScgfHwgbWF5YmVDb2VyY2VkID09PSAnJztcblx0XHRcdFx0fSBlbHNlIGlmICghaXNOYU4oTnVtYmVyKG1heWJlQ29lcmNlZCkpKSB7XG5cdFx0XHRcdFx0bWF5YmVDb2VyY2VkID0gTnVtYmVyKG1heWJlQ29lcmNlZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLnJhd1ZhbHVlXSA9IG1heWJlQ29lcmNlZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFwcGx5UHJvcHMoZWwsIHsgW25hbWVdOiB2YWx1ZSB9KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0c2V0QXR0cmlidXRlKGVsOiBOZ3RSZW5kZXJlck5vZGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGNvbnN0IHVzZURlbGVnYXRlID0gdGhpcy5zZXRBdHRyaWJ1dGVJbnRlcm5hbChlbCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSk7XG5cblx0XHRpZiAodXNlRGVsZWdhdGUpIHtcblx0XHRcdHRoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKGVsLCBuYW1lLCB2YWx1ZSk7XG5cdFx0fVxuXHR9XG5cblx0cmVtb3ZlQXR0cmlidXRlKGVsOiBOZ3RSZW5kZXJlck5vZGUsIG5hbWU6IHN0cmluZywgbmFtZXNwYWNlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGNvbnN0IHVzZURlbGVnYXRlID0gdGhpcy5zZXRBdHRyaWJ1dGVJbnRlcm5hbChlbCwgbmFtZSwgdW5kZWZpbmVkISwgbmFtZXNwYWNlKTtcblxuXHRcdGlmICh1c2VEZWxlZ2F0ZSkge1xuXHRcdFx0dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUoZWwsIG5hbWUsIG5hbWVzcGFjZSk7XG5cdFx0fVxuXHR9XG5cblx0c2V0UHJvcGVydHkoZWw6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG5cdFx0Y29uc3QgclMgPSBlbC5fX25ndF9yZW5kZXJlcl9fO1xuXHRcdGlmICghclMgfHwgclNbTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHJldHVybjtcblxuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuUEFSQU1FVEVSUykge1xuXHRcdFx0XHQvLyBOT1RFOiBzaG9ydC1jdXQgZm9yIG51bGwgcmF5Y2FzdCB0byBwcmV2ZW50IHVwc3RyZWFtIGZyb20gY3JlYXRpbmcgYSBudWxsUmF5Y2FzdCBwcm9wZXJ0eVxuXHRcdFx0XHRpZiAoJ3JheWNhc3QnIGluIHZhbHVlICYmIHZhbHVlWydyYXljYXN0J10gPT09IG51bGwpIHtcblx0XHRcdFx0XHR2YWx1ZVsncmF5Y2FzdCddID0gKCkgPT4gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRhcHBseVByb3BzKGVsLCB2YWx1ZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoZWwpO1xuXHRcdFx0Y29uc3QgcGFyZW50ID0gbG9jYWxTdGF0ZT8uaW5zdGFuY2VTdG9yZS5nZXQoJ3BhcmVudCcpIHx8IHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdO1xuXG5cdFx0XHQvLyBbcmF3VmFsdWVdXG5cdFx0XHRpZiAobG9jYWxTdGF0ZT8uaXNSYXcgJiYgbmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLlJBV19WQUxVRSkge1xuXHRcdFx0XHRyU1tOZ3RSZW5kZXJlckNsYXNzSWQucmF3VmFsdWVdID0gdmFsdWU7XG5cdFx0XHRcdGlmIChwYXJlbnQpIGF0dGFjaFRocmVlQ2hpbGQocGFyZW50LCBlbCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gW2F0dGFjaF1cblx0XHRcdGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuQVRUQUNIKSB7XG5cdFx0XHRcdGlmIChsb2NhbFN0YXRlKVxuXHRcdFx0XHRcdGxvY2FsU3RhdGUuYXR0YWNoID0gQXJyYXkuaXNBcnJheSh2YWx1ZSlcblx0XHRcdFx0XHRcdD8gdmFsdWUubWFwKCh2KSA9PiB2LnRvU3RyaW5nKCkpXG5cdFx0XHRcdFx0XHQ6IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdFx0XHRcdFx0XHQ/IHZhbHVlXG5cdFx0XHRcdFx0XHRcdDogdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xuXHRcdFx0XHRcdFx0XHRcdD8gdmFsdWUuc3BsaXQoJy4nKVxuXHRcdFx0XHRcdFx0XHRcdDogW3ZhbHVlXTtcblx0XHRcdFx0aWYgKHBhcmVudCkgYXR0YWNoVGhyZWVDaGlsZChwYXJlbnQsIGVsKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOT1RFOiBzaG9ydC1jdXQgZm9yIG51bGwgcmF5Y2FzdCB0byBwcmV2ZW50IHVwc3RyZWFtIGZyb20gY3JlYXRpbmcgYSBudWxsUmF5Y2FzdCBwcm9wZXJ0eVxuXHRcdFx0aWYgKG5hbWUgPT09ICdyYXljYXN0JyAmJiB2YWx1ZSA9PT0gbnVsbCkge1xuXHRcdFx0XHR2YWx1ZSA9ICgpID0+IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGFwcGx5UHJvcHMoZWwsIHsgW25hbWVdOiB2YWx1ZSB9KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eShlbCwgbmFtZSwgdmFsdWUpO1xuXHR9XG5cblx0bGlzdGVuKHRhcmdldDogTmd0UmVuZGVyZXJOb2RlLCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IChldmVudDogYW55KSA9PiBib29sZWFuIHwgdm9pZCk6ICgpID0+IHZvaWQge1xuXHRcdGNvbnN0IHJTID0gdGFyZ2V0Ll9fbmd0X3JlbmRlcmVyX187XG5cblx0XHQvLyBpZiB0aGUgdGFyZ2V0IGRvZXNuJ3QgaGF2ZSBfX25ndF9yZW5kZXJlcl9fLCB3ZSBkZWxlZ2F0ZVxuXHRcdC8vIGlmIHRhcmdldCBpcyBET00gbm9kZSwgd2UgZGVsZWdhdGVcblx0XHRpZiAoIXJTIHx8IGlzRE9NKHRhcmdldCkpIHtcblx0XHRcdHJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0YXJnZXQsIGV2ZW50TmFtZSwgY2FsbGJhY2spO1xuXHRcdH1cblxuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdGNvbnN0IGluc3RhbmNlID0gdGFyZ2V0O1xuXHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoaW5zdGFuY2UpO1xuXHRcdFx0Y29uc3QgcHJpb3JpdHkgPSBsb2NhbFN0YXRlPy5wcmlvcml0eSA/PyAwO1xuXHRcdFx0cmV0dXJuIHByb2Nlc3NUaHJlZUV2ZW50KGluc3RhbmNlLCBwcmlvcml0eSwgZXZlbnROYW1lLCBjYWxsYmFjayk7XG5cdFx0fVxuXG5cdFx0Ly8gQHRzLWV4cGVjdC1lcnJvciAtIHdlIGtub3cgdGhhdCB0YXJnZXQgaXMgbm90IERPTSBub2RlXG5cdFx0aWYgKHRhcmdldCA9PT0gdGhpcy5yb290U3RvcmUuc25hcHNob3Quc2NlbmUpIHtcblx0XHRcdGxldCBbZG9tVGFyZ2V0LCBldmVudF0gPSBldmVudE5hbWUuc3BsaXQoJzonKTtcblx0XHRcdGlmIChldmVudCA9PSBudWxsKSB7XG5cdFx0XHRcdGV2ZW50ID0gZG9tVGFyZ2V0O1xuXHRcdFx0XHRkb21UYXJnZXQgPSAnJztcblx0XHRcdH1cblx0XHRcdGNvbnN0IGV2ZW50VGFyZ2V0ID1cblx0XHRcdFx0ZG9tVGFyZ2V0ID09PSAnd2luZG93J1xuXHRcdFx0XHRcdD8gKHRhcmdldCBhcyBOZ3RBbnlSZWNvcmQpWydvd25lckRvY3VtZW50J11bJ2RlZmF1bHRWaWV3J11cblx0XHRcdFx0XHQ6ICh0YXJnZXQgYXMgTmd0QW55UmVjb3JkKVsnb3duZXJEb2N1bWVudCddO1xuXHRcdFx0cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKGV2ZW50VGFyZ2V0LCBldmVudCwgY2FsbGJhY2spO1xuXHRcdH1cblxuXHRcdHJldHVybiAoKSA9PiB7fTtcblx0fVxuXG5cdHByaXZhdGUgZGVzdHJveUludGVybmFsKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgcGFyZW50PzogTmd0UmVuZGVyZXJOb2RlKSB7XG5cdFx0Y29uc3QgclMgPSBub2RlLl9fbmd0X3JlbmRlcmVyX187XG5cdFx0aWYgKCFyUyB8fCByU1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkgcmV0dXJuO1xuXHRcdGlmIChyU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKG5vZGUpO1xuXHRcdFx0aWYgKGxvY2FsU3RhdGU/Lmluc3RhbmNlU3RvcmUpIHtcblx0XHRcdFx0bG9jYWxTdGF0ZS5pbnN0YW5jZVN0b3JlLmdldCgnb2JqZWN0cycpLmZvckVhY2goKG9iaikgPT4gdGhpcy5kZXN0cm95SW50ZXJuYWwob2JqLCBwYXJlbnQpKTtcblx0XHRcdFx0bG9jYWxTdGF0ZS5pbnN0YW5jZVN0b3JlLmdldCgnbm9uT2JqZWN0cycpLmZvckVhY2goKG9iaikgPT4gdGhpcy5kZXN0cm95SW50ZXJuYWwob2JqLCBwYXJlbnQpKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGxvY2FsU3RhdGU/Lm9uVXBkYXRlKSBkZWxldGUgbG9jYWxTdGF0ZS5vblVwZGF0ZTtcblx0XHRcdGlmIChsb2NhbFN0YXRlPy5vbkF0dGFjaCkgZGVsZXRlIGxvY2FsU3RhdGUub25BdHRhY2g7XG5cblx0XHRcdGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydvYmplY3RzJ107XG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnbm9uT2JqZWN0cyddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ3BhcmVudCddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ2FkZCddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ3JlbW92ZSddO1xuXHRcdFx0ZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ3N0b3JlJ107XG5cdFx0XHRkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnaGFuZGxlcnMnXTtcblxuXHRcdFx0aWYgKCFsb2NhbFN0YXRlPy5wcmltaXRpdmUpIHtcblx0XHRcdFx0ZGVsZXRlIChub2RlIGFzIE5ndEFueVJlY29yZClbJ19fbmd0X18nXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tbWVudCcpIHtcblx0XHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gbnVsbCE7XG5cdFx0XHRkZWxldGUgKG5vZGUgYXMgTmd0QW55UmVjb3JkKVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXTtcblx0XHRcdHRoaXMucmVtb3ZlQ29tbWVudE5vZGUobm9kZSwgdGhpcy5hcmdzQ29tbWVudE5vZGVzKTtcblx0XHR9XG5cblx0XHRpZiAoclNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAncG9ydGFsJykge1xuXHRcdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSBudWxsITtcblx0XHRcdHRoaXMucmVtb3ZlQ29tbWVudE5vZGUobm9kZSwgdGhpcy5wb3J0YWxDb21tZW50c05vZGVzKTtcblx0XHR9XG5cblx0XHQvLyBudWxsaWZ5IHBhcmVudFxuXHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdID0gbnVsbDtcblx0XHRmb3IgKGNvbnN0IHJlbmRlckNoaWxkIG9mIHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0gfHwgW10pIHtcblx0XHRcdGlmIChyZW5kZXJDaGlsZC5fX25ndF9yZW5kZXJlcl9fPy5bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmIHBhcmVudCkge1xuXHRcdFx0XHRpZiAocGFyZW50Ll9fbmd0X3JlbmRlcmVyX18/LltOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcblx0XHRcdFx0XHRyZW1vdmVUaHJlZUNoaWxkKHJlbmRlckNoaWxkLCBwYXJlbnQsIHRydWUpO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgY2xvc2VzdEluc3RhbmNlID0gZ2V0Q2xvc2VzdFBhcmVudFdpdGhJbnN0YW5jZShwYXJlbnQpO1xuXHRcdFx0XHRpZiAoY2xvc2VzdEluc3RhbmNlKSB7XG5cdFx0XHRcdFx0cmVtb3ZlVGhyZWVDaGlsZChyZW5kZXJDaGlsZCwgY2xvc2VzdEluc3RhbmNlLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5kZXN0cm95SW50ZXJuYWwocmVuZGVyQ2hpbGQsIHBhcmVudCk7XG5cdFx0fVxuXG5cdFx0clNbTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXSA9IFtdO1xuXHRcdHJTW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdID0gdHJ1ZTtcblx0XHRpZiAocGFyZW50KSB7XG5cdFx0XHRyZW1vdmVDaGlsZChwYXJlbnQsIG5vZGUpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcmVtb3ZlQ29tbWVudE5vZGUobm9kZTogTmd0UmVuZGVyZXJOb2RlLCBub2RlczogTmd0UmVuZGVyZXJOb2RlW10pIHtcblx0XHRjb25zdCBpbmRleCA9IG5vZGVzLmZpbmRJbmRleCgoY29tbWVudCkgPT4gY29tbWVudCA9PT0gbm9kZSk7XG5cdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdG5vZGVzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBwcm9jZXNzUG9ydGFsQ29udGFpbmVyKHBvcnRhbDogTmd0UmVuZGVyZXJOb2RlKSB7XG5cdFx0Y29uc3QgaW5qZWN0b3IgPSBwb3J0YWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XT8uKCk7XG5cdFx0aWYgKCFpbmplY3RvcikgcmV0dXJuO1xuXG5cdFx0Y29uc3QgcG9ydGFsU3RvcmUgPSBpbmplY3Rvci5nZXQoTkdUX1NUT1JFLCBudWxsKTtcblx0XHRpZiAoIXBvcnRhbFN0b3JlKSByZXR1cm47XG5cblx0XHRjb25zdCBwb3J0YWxDb250YWluZXIgPSBwb3J0YWxTdG9yZS5nZXQoJ3NjZW5lJyk7XG5cdFx0aWYgKCFwb3J0YWxDb250YWluZXIpIHJldHVybjtcblxuXHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKHBvcnRhbENvbnRhaW5lcik7XG5cdFx0aWYgKGxvY2FsU3RhdGUpIHtcblx0XHRcdGxvY2FsU3RhdGUuc3RvcmUgPSBwb3J0YWxTdG9yZTtcblx0XHR9XG5cblx0XHRwb3J0YWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSA9IGNyZWF0ZU5vZGUoJ3RocmVlJywgcG9ydGFsQ29udGFpbmVyLCB0aGlzLmRvY3VtZW50KTtcblx0fVxuXG5cdHByaXZhdGUgc2hvdWxkRmluZEdyYW5kcGFyZW50SW5zdGFuY2UocFJTOiBOZ3RSZW5kZXJlclN0YXRlLCBjUlM6IE5ndFJlbmRlcmVyU3RhdGUsIGNoaWxkOiBOZ3RSZW5kZXJlck5vZGUpIHtcblx0XHRjb25zdCBwVHlwZSA9IHBSU1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV07XG5cdFx0Y29uc3QgY1R5cGUgPSBjUlNbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdO1xuXG5cdFx0Y29uc3QgY0xTID0gZ2V0TG9jYWxTdGF0ZShjaGlsZCk7XG5cdFx0Ly8gaWYgY2hpbGQgaXMgdGhyZWUgYnV0IGhhdmVuJ3QgYmVlbiBhdHRhY2hlZCB0byBhIHBhcmVudCB5ZXRcblx0XHRjb25zdCBpc0RhbmdsaW5nVGhyZWVDaGlsZCA9IGNUeXBlID09PSAndGhyZWUnICYmICFjTFM/Lmluc3RhbmNlU3RvcmU/LmdldCgncGFyZW50Jyk7XG5cdFx0Ly8gb3IgYm90aCBwYXJlbnQgYW5kIGNoaWxkIGFyZSBET00gZWxlbWVudHNcblx0XHQvLyBvciB0aGV5IGFyZSBjb21wb3VuZCBBTkQgaGF2ZW4ndCBoYWQgYSBUSFJFRSBpbnN0YW5jZSB5ZXRcblx0XHRjb25zdCBpc1BhcmVudFN0aWxsRE9NID0gcFR5cGUgPT09ICdkb20nO1xuXHRcdGNvbnN0IGlzQ2hpbGRTdGlsbERPTSA9IGNUeXBlID09PSAnZG9tJztcblxuXHRcdHJldHVybiBpc0RhbmdsaW5nVGhyZWVDaGlsZCB8fCAoaXNQYXJlbnRTdGlsbERPTSAmJiBpc0NoaWxkU3RpbGxET00pIHx8IGlzUGFyZW50U3RpbGxET007XG5cdH1cblxuXHRwcml2YXRlIGdldE5ndEFyZ3MoKSB7XG5cdFx0bGV0IGRpcmVjdGl2ZTogTmd0QXJncyB8IHVuZGVmaW5lZDtcblxuXHRcdGNvbnN0IGRlc3Ryb3llZCA9IFtdO1xuXG5cdFx0bGV0IGkgPSB0aGlzLmFyZ3NDb21tZW50Tm9kZXMubGVuZ3RoIC0gMTtcblx0XHR3aGlsZSAoaSA+PSAwKSB7XG5cdFx0XHRjb25zdCBjb21tZW50ID0gdGhpcy5hcmdzQ29tbWVudE5vZGVzW2ldO1xuXHRcdFx0aWYgKGNvbW1lbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkge1xuXHRcdFx0XHRkZXN0cm95ZWQucHVzaChpKTtcblx0XHRcdFx0aS0tO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGluamVjdG9yID0gY29tbWVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldKCk7XG5cdFx0XHRpZiAoIWluamVjdG9yKSB7XG5cdFx0XHRcdGktLTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpbnN0YW5jZSA9IGluamVjdG9yLmdldChOZ3RBcmdzLCBudWxsKTtcblx0XHRcdGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS52YWxpZGF0ZSgpKSB7XG5cdFx0XHRcdGRpcmVjdGl2ZSA9IGluc3RhbmNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0aS0tO1xuXHRcdH1cblxuXHRcdGRlc3Ryb3llZC5mb3JFYWNoKChpbmRleCkgPT4ge1xuXHRcdFx0dGhpcy5hcmdzQ29tbWVudE5vZGVzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gZGlyZWN0aXZlO1xuXHR9XG5cblx0cHJpdmF0ZSB0cnlHZXRQb3J0YWxTdG9yZSgpIHtcblx0XHRsZXQgc3RvcmU6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBkZXN0cm95ZWQgPSBbXTtcblx0XHQvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIHBvcnRhbCBzdGF0ZXMgYmVjYXVzZSBOZ3RTdG9yZSBvbmx5IGRpZmZlcnMgcGVyIFBvcnRhbFxuXHRcdGxldCBpID0gdGhpcy5wb3J0YWxDb21tZW50c05vZGVzLmxlbmd0aCAtIDE7XG5cdFx0d2hpbGUgKGkgPj0gMCkge1xuXHRcdFx0Ly8gbG9vcCB0aHJvdWdoIHRoZSBwb3J0YWwgc3RhdGUgYmFja3dhcmRzIHRvIGZpbmQgdGhlIGNsb3Nlc3QgTmd0U3RvcmVcblx0XHRcdGNvbnN0IHBvcnRhbCA9IHRoaXMucG9ydGFsQ29tbWVudHNOb2Rlc1tpXTtcblx0XHRcdGlmIChwb3J0YWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuZGVzdHJveWVkXSkge1xuXHRcdFx0XHRkZXN0cm95ZWQucHVzaChpKTtcblx0XHRcdFx0aS0tO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgaW5qZWN0b3IgPSBwb3J0YWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSgpO1xuXHRcdFx0aWYgKCFpbmplY3Rvcikge1xuXHRcdFx0XHRpLS07XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaW5zdGFuY2UgPSBpbmplY3Rvci5nZXQoTkdUX1NUT1JFLCBudWxsKTtcblx0XHRcdC8vIG9ubHkgdGhlIGluc3RhbmNlIHdpdGggcHJldmlvdXNSb290IHNob3VsZCBwYXNzXG5cdFx0XHRpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuZ2V0KCdwcmV2aW91c1Jvb3QnKSkge1xuXHRcdFx0XHRzdG9yZSA9IGluc3RhbmNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGktLTtcblx0XHR9XG5cblx0XHRkZXN0cm95ZWQuZm9yRWFjaCgoaW5kZXgpID0+IHtcblx0XHRcdHRoaXMucG9ydGFsQ29tbWVudHNOb2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHN0b3JlIHx8IHRoaXMucm9vdFN0b3JlO1xuXHR9XG5cblx0Y3JlYXRlVGV4dCA9IHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dC5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRkZXN0cm95ID0gdGhpcy5kZWxlZ2F0ZS5kZXN0cm95LmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdGRlc3Ryb3lOb2RlOiAoKG5vZGU6IGFueSkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblx0c2VsZWN0Um9vdEVsZW1lbnQgPSB0aGlzLmRlbGVnYXRlLnNlbGVjdFJvb3RFbGVtZW50LmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdG5leHRTaWJsaW5nID0gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZy5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRhZGRDbGFzcyA9IHRoaXMuZGVsZWdhdGUuYWRkQ2xhc3MuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0cmVtb3ZlQ2xhc3MgPSB0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdHNldFN0eWxlID0gdGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZS5iaW5kKHRoaXMuZGVsZWdhdGUpO1xuXHRyZW1vdmVTdHlsZSA9IHRoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUuYmluZCh0aGlzLmRlbGVnYXRlKTtcblx0c2V0VmFsdWUgPSB0aGlzLmRlbGVnYXRlLnNldFZhbHVlLmJpbmQodGhpcy5kZWxlZ2F0ZSk7XG5cdGdldCBkYXRhKCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuXHRcdHJldHVybiB0aGlzLmRlbGVnYXRlLmRhdGE7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVOZ3RSZW5kZXJlcihzdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+KSB7XG5cdGNvbnN0IHByb3ZpZGVycyA9IFtcblx0XHROZ3RSZW5kZXJlckZhY3RvcnksXG5cdFx0eyBwcm92aWRlOiBSZW5kZXJlckZhY3RvcnkyLCB1c2VFeGlzdGluZzogTmd0UmVuZGVyZXJGYWN0b3J5IH0sXG5cdFx0cHJvdmlkZVN0b3JlKCgpID0+IHN0b3JlKSxcblx0XTtcblxuXHRyZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKHByb3ZpZGVycyk7XG59XG5cbmV4cG9ydCB7IGV4dGVuZCB9IGZyb20gJy4vY2F0YWxvZ3VlJztcbmV4cG9ydCB7IEhUTUwsIFJPVVRFRF9TQ0VORSB9IGZyb20gJy4vY29uc3RhbnRzJztcbiJdfQ==
|
|
@@ -97,7 +97,7 @@ export function attachThreeChild(parent, child) {
|
|
|
97
97
|
invalidateInstance(child);
|
|
98
98
|
invalidateInstance(parent);
|
|
99
99
|
}
|
|
100
|
-
export function removeThreeChild(
|
|
100
|
+
export function removeThreeChild(child, parent, dispose) {
|
|
101
101
|
const pLS = getLocalState(parent);
|
|
102
102
|
const cLS = getLocalState(child);
|
|
103
103
|
// clear parent ref
|
|
@@ -105,14 +105,16 @@ export function removeThreeChild(parent, child, dispose) {
|
|
|
105
105
|
// remove child from parent
|
|
106
106
|
pLS?.remove(child, 'objects');
|
|
107
107
|
pLS?.remove(child, 'nonObjects');
|
|
108
|
-
if (
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
parent.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
108
|
+
if (parent) {
|
|
109
|
+
if (cLS?.attach) {
|
|
110
|
+
detach(parent, child, cLS.attach);
|
|
111
|
+
}
|
|
112
|
+
else if (is.object3D(parent) && is.object3D(child)) {
|
|
113
|
+
parent.remove(child);
|
|
114
|
+
const store = cLS?.store || pLS?.store;
|
|
115
|
+
if (store)
|
|
116
|
+
removeInteractivity(store, child);
|
|
117
|
+
}
|
|
116
118
|
}
|
|
117
119
|
const isPrimitive = cLS?.primitive;
|
|
118
120
|
if (!isPrimitive) {
|
|
@@ -123,11 +125,13 @@ export function removeThreeChild(parent, child, dispose) {
|
|
|
123
125
|
if (!isPrimitive && child['dispose'] && !is.scene(child)) {
|
|
124
126
|
queueMicrotask(() => child['dispose']());
|
|
125
127
|
}
|
|
126
|
-
|
|
128
|
+
if (parent) {
|
|
129
|
+
invalidateInstance(parent);
|
|
130
|
+
}
|
|
127
131
|
}
|
|
128
132
|
function removeThreeRecursive(array, parent, dispose) {
|
|
129
133
|
if (array)
|
|
130
|
-
[...array].forEach((child) => removeThreeChild(
|
|
134
|
+
[...array].forEach((child) => removeThreeChild(child, parent, dispose));
|
|
131
135
|
}
|
|
132
136
|
export function processThreeEvent(instance, priority, eventName, callback) {
|
|
133
137
|
const lS = getLocalState(instance);
|
|
@@ -190,4 +194,4 @@ export function processThreeEvent(instance, priority, eventName, callback) {
|
|
|
190
194
|
}
|
|
191
195
|
};
|
|
192
196
|
}
|
|
193
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yZW5kZXJlci91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBYTdDLE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBVztJQUN4QyxJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMscUJBQXFCO0lBRTNDLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNuQixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQywrQkFBK0I7SUFFMUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDbEIsY0FBYyxHQUFHLElBQUksQ0FBQztZQUN0QixTQUFTO1FBQ1YsQ0FBQztRQUVELFNBQVMsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hELGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJ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QyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNGLENBQUMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJlbW92ZUludGVyYWN0aXZpdHkgfSBmcm9tICcuLi9ldmVudHMnO1xuaW1wb3J0IHsgZ2V0TG9jYWxTdGF0ZSwgaW52YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSAnLi4vaW5zdGFuY2UnO1xuaW1wb3J0IHsgTmd0SW5zdGFuY2VOb2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgYXR0YWNoLCBkZXRhY2ggfSBmcm9tICcuLi91dGlscy9hdHRhY2gnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi91dGlscy9pcyc7XG5pbXBvcnQgeyBTUEVDSUFMX0VWRU5UUyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLy8gQGludGVybmFsXG5leHBvcnQgY29uc3QgZW51bSBOZ3RSZW5kZXJlckNsYXNzSWQge1xuXHR0eXBlLFxuXHRwYXJlbnQsXG5cdGNoaWxkcmVuLFxuXHRkZXN0cm95ZWQsXG5cdHJhd1ZhbHVlLFxuXHRwb3J0YWxDb250YWluZXIsXG5cdGluamVjdG9yRmFjdG9yeSxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGtlYmFiVG9QYXNjYWwoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRpZiAoIXN0cikgcmV0dXJuIHN0cjsgLy8gSGFuZGxlIGVtcHR5IGlucHV0XG5cblx0bGV0IHBhc2NhbFN0ciA9ICcnO1xuXHRsZXQgY2FwaXRhbGl6ZU5leHQgPSB0cnVlOyAvLyBGbGFnIHRvIHRyYWNrIGNhcGl0YWxpemF0aW9uXG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBjaGFyID0gc3RyW2ldO1xuXHRcdGlmIChjaGFyID09PSAnLScpIHtcblx0XHRcdGNhcGl0YWxpemVOZXh0ID0gdHJ1ZTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHBhc2NhbFN0ciArPSBjYXBpdGFsaXplTmV4dCA/IGNoYXIudG9VcHBlckNhc2UoKSA6IGNoYXI7XG5cdFx0Y2FwaXRhbGl6ZU5leHQgPSBmYWxzZTtcblx0fVxuXG5cdHJldHVybiBwYXNjYWxTdHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hUaHJlZUNoaWxkKHBhcmVudDogTmd0SW5zdGFuY2VOb2RlLCBjaGlsZDogTmd0SW5zdGFuY2VOb2RlKSB7XG5cdGNvbnN0IHBMUyA9IGdldExvY2FsU3RhdGUocGFyZW50KTtcblx0Y29uc3QgY0xTID0gZ2V0TG9jYWxTdGF0ZShjaGlsZCk7XG5cblx0aWYgKCFwTFMgfHwgIWNMUykge1xuXHRcdHRocm93IG5ldyBFcnJvcihgW05HVF0gVEhSRUUgaW5zdGFuY2VzIG5lZWQgdG8gYmUgcHJlcGFyZWQgd2l0aCBsb2NhbCBzdGF0ZS5gKTtcblx0fVxuXG5cdC8vIHdoZXRoZXIgdGhlIGNoaWxkIGlzIGFkZGVkIHRvIHRoZSBwYXJlbnQgd2l0aCBwYXJlbnQuYWRkKClcblx0bGV0IGFkZGVkID0gZmFsc2U7XG5cblx0Ly8gYXNzaWduIHN0b3JlIG9uIGNoaWxkIGlmIG5vdCBhbHJlYWR5IGV4aXN0XG5cdC8vIG9yIGNoaWxkIHN0b3JlIGlzIG5vdCB0aGUgc2FtZSBhcyBwYXJlbnQgc3RvcmVcblx0Ly8gb3IgY2hpbGQgc3RvcmUgaXMgdGhlIHBhcmVudCBvZiBwYXJlbnQgc3RvcmVcblx0aWYgKCFjTFMuc3RvcmUgfHwgY0xTLnN0b3JlICE9PSBwTFMuc3RvcmUgfHwgY0xTLnN0b3JlID09PSBwTFMuc3RvcmUuZ2V0KCdwcmV2aW91c1Jvb3QnKSkge1xuXHRcdGNMUy5zdG9yZSA9IHBMUy5zdG9yZTtcblx0XHRjb25zdCBncmFuZGNoaWxkcmVuID0gW1xuXHRcdFx0Li4uKGNMUy5vYmplY3RzID8gdW50cmFja2VkKGNMUy5vYmplY3RzKSA6IFtdKSxcblx0XHRcdC4uLihjTFMubm9uT2JqZWN0cyA/IHVudHJhY2tlZChjTFMubm9uT2JqZWN0cykgOiBbXSksXG5cdFx0XTtcblx0XHRmb3IgKGNvbnN0IGdyYW5kY2hpbGQgb2YgZ3JhbmRjaGlsZHJlbikge1xuXHRcdFx0Y29uc3QgZ3JhbmRDaGlsZExTID0gZ2V0TG9jYWxTdGF0ZShncmFuZGNoaWxkKTtcblx0XHRcdGlmICghZ3JhbmRDaGlsZExTKSBjb250aW51ZTtcblx0XHRcdGdyYW5kQ2hpbGRMUy5zdG9yZSA9IGNMUy5zdG9yZTtcblx0XHR9XG5cdH1cblxuXHRpZiAoY0xTLmF0dGFjaCkge1xuXHRcdGNvbnN0IGF0dGFjaFByb3AgPSBjTFMuYXR0YWNoO1xuXG5cdFx0aWYgKHR5cGVvZiBhdHRhY2hQcm9wID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjb25zdCBhdHRhY2hDbGVhblVwID0gYXR0YWNoUHJvcChwYXJlbnQsIGNoaWxkLCBjTFMuc3RvcmUpO1xuXHRcdFx0aWYgKGF0dGFjaENsZWFuVXApIGNMUy5wcmV2aW91c0F0dGFjaCA9IGF0dGFjaENsZWFuVXA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHdlIHNraXAgYXR0YWNoIG5vbmUgaWYgc2V0IGV4cGxpY2l0bHlcblx0XHRcdGlmIChhdHRhY2hQcm9wWzBdID09PSAnbm9uZScpIHtcblx0XHRcdFx0aW52YWxpZGF0ZUluc3RhbmNlKGNoaWxkKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBoYW5kbGUgbWF0ZXJpYWwgYXJyYXlcblx0XHRcdGlmIChcblx0XHRcdFx0YXR0YWNoUHJvcFswXSA9PT0gJ21hdGVyaWFsJyAmJlxuXHRcdFx0XHRhdHRhY2hQcm9wWzFdICYmXG5cdFx0XHRcdHR5cGVvZiBOdW1iZXIoYXR0YWNoUHJvcFsxXSkgPT09ICdudW1iZXInICYmXG5cdFx0XHRcdGlzLm1hdGVyaWFsKGNoaWxkKSAmJlxuXHRcdFx0XHQhQXJyYXkuaXNBcnJheShwYXJlbnRbJ21hdGVyaWFsJ10pXG5cdFx0XHQpIHtcblx0XHRcdFx0cGFyZW50WydtYXRlcmlhbCddID0gW107XG5cdFx0XHR9XG5cblx0XHRcdC8vIGF0dGFjaFxuXHRcdFx0aWYgKGNMUy5pc1Jhdykge1xuXHRcdFx0XHRpZiAoY0xTLmluc3RhbmNlU3RvcmUuZ2V0KCdwYXJlbnQnKSAhPT0gcGFyZW50KSB7XG5cdFx0XHRcdFx0Y0xTLnNldFBhcmVudChwYXJlbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGF0IHRoaXMgcG9pbnQgd2UgZG9uJ3QgaGF2ZSByYXdWYWx1ZSB5ZXQsIHNvIHdlIGJhaWwgYW5kIHdhaXQgdW50aWwgdGhlIFJlbmRlcmVyIHJlY2FsbHMgYXR0YWNoXG5cdFx0XHRcdGlmIChjaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5yYXdWYWx1ZV0gPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXHRcdFx0XHRhdHRhY2gocGFyZW50LCBjaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5yYXdWYWx1ZV0sIGF0dGFjaFByb3AsIHRydWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YXR0YWNoKHBhcmVudCwgY2hpbGQsIGF0dGFjaFByb3ApO1xuXHRcdFx0fVxuXHRcdFx0Ly8gc2F2ZSB2YWx1ZVxuXHRcdFx0Y0xTLnByZXZpb3VzQXR0YWNoID0gYXR0YWNoUHJvcC5yZWR1Y2UoKHZhbHVlLCBwcm9wZXJ0eSkgPT4gdmFsdWVbcHJvcGVydHldLCBwYXJlbnQpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChpcy5vYmplY3QzRChwYXJlbnQpICYmIGlzLm9iamVjdDNEKGNoaWxkKSkge1xuXHRcdHBhcmVudC5hZGQoY2hpbGQpO1xuXHRcdGFkZGVkID0gdHJ1ZTtcblx0fVxuXG5cdHBMUy5hZGQoY2hpbGQsIGFkZGVkID8gJ29iamVjdHMnIDogJ25vbk9iamVjdHMnKTtcblxuXHRpZiAoY0xTLnBhcmVudCAmJiB1bnRyYWNrZWQoY0xTLnBhcmVudCkgIT09IHBhcmVudCkge1xuXHRcdGNMUy5zZXRQYXJlbnQocGFyZW50KTtcblx0fVxuXG5cdC8vIE5PVEU6IHRoaXMgZG9lcyBub3QgbWVhbiB0aGF0IHRoZSBjaGlsZCBpcyBhY3R1YWxseSBhdHRhY2hlZCB0byB0aGUgcGFyZW50IG9uIHRoZSBzY2VuZWdyYXBoLlxuXHQvLyAgYSBjaGlsZCBvbiB0aGUgQW5ndWxhciB0ZW1wbGF0ZSBjYW4gYWxzbyBlbWl0IG9uQXR0YWNoXG5cdGlmIChjTFMub25BdHRhY2gpIGNMUy5vbkF0dGFjaCh7IHBhcmVudCwgbm9kZTogY2hpbGQgfSk7XG5cblx0aW52YWxpZGF0ZUluc3RhbmNlKGNoaWxkKTtcblx0aW52YWxpZGF0ZUluc3RhbmNlKHBhcmVudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVUaHJlZUNoaWxkKHBhcmVudDogTmd0SW5zdGFuY2VOb2RlLCBjaGlsZDogTmd0SW5zdGFuY2VOb2RlLCBkaXNwb3NlPzogYm9vbGVhbikge1xuXHRjb25zdCBwTFMgPSBnZXRMb2NhbFN0YXRlKHBhcmVudCk7XG5cdGNvbnN0IGNMUyA9IGdldExvY2FsU3RhdGUoY2hpbGQpO1xuXG5cdC8vIGNsZWFyIHBhcmVudCByZWZcblx0Y0xTPy5zZXRQYXJlbnQobnVsbCk7XG5cblx0Ly8gcmVtb3ZlIGNoaWxkIGZyb20gcGFyZW50XG5cdHBMUz8ucmVtb3ZlKGNoaWxkLCAnb2JqZWN0cycpO1xuXHRwTFM/LnJlbW92ZShjaGlsZCwgJ25vbk9iamVjdHMnKTtcblxuXHRpZiAoY0xTPy5hdHRhY2gpIHtcblx0XHRkZXRhY2gocGFyZW50LCBjaGlsZCwgY0xTLmF0dGFjaCk7XG5cdH0gZWxzZSBpZiAoaXMub2JqZWN0M0QocGFyZW50KSAmJiBpcy5vYmplY3QzRChjaGlsZCkpIHtcblx0XHRwYXJlbnQucmVtb3ZlKGNoaWxkKTtcblx0XHRjb25zdCBzdG9yZSA9IGNMUz8uc3RvcmUgfHwgcExTPy5zdG9yZTtcblx0XHRpZiAoc3RvcmUpIHJlbW92ZUludGVyYWN0aXZpdHkoc3RvcmUsIGNoaWxkKTtcblx0fVxuXG5cdGNvbnN0IGlzUHJpbWl0aXZlID0gY0xTPy5wcmltaXRpdmU7XG5cdGlmICghaXNQcmltaXRpdmUpIHtcblx0XHRyZW1vdmVUaHJlZVJlY3Vyc2l2ZShjTFM/Lmluc3RhbmNlU3RvcmUuZ2V0KCdvYmplY3RzJykgfHwgW10sIGNoaWxkLCAhIWRpc3Bvc2UpO1xuXHRcdHJlbW92ZVRocmVlUmVjdXJzaXZlKGNoaWxkLmNoaWxkcmVuLCBjaGlsZCwgISFkaXNwb3NlKTtcblx0fVxuXG5cdC8vIGRpc3Bvc2Vcblx0aWYgKCFpc1ByaW1pdGl2ZSAmJiBjaGlsZFsnZGlzcG9zZSddICYmICFpcy5zY2VuZShjaGlsZCkpIHtcblx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiBjaGlsZFsnZGlzcG9zZSddKCkpO1xuXHR9XG5cblx0aW52YWxpZGF0ZUluc3RhbmNlKHBhcmVudCk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVRocmVlUmVjdXJzaXZlKGFycmF5OiBOZ3RJbnN0YW5jZU5vZGVbXSwgcGFyZW50OiBOZ3RJbnN0YW5jZU5vZGUsIGRpc3Bvc2U6IGJvb2xlYW4pIHtcblx0aWYgKGFycmF5KSBbLi4uYXJyYXldLmZvckVhY2goKGNoaWxkKSA9PiByZW1vdmVUaHJlZUNoaWxkKHBhcmVudCwgY2hpbGQsIGRpc3Bvc2UpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NUaHJlZUV2ZW50KFxuXHRpbnN0YW5jZTogTmd0SW5zdGFuY2VOb2RlLFxuXHRwcmlvcml0eTogbnVtYmVyLFxuXHRldmVudE5hbWU6IHN0cmluZyxcblx0Y2FsbGJhY2s6IChldmVudDogYW55KSA9PiB2b2lkLFxuKTogKCkgPT4gdm9pZCB7XG5cdGNvbnN0IGxTID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSk7XG5cdGlmICghbFMpIHtcblx0XHRjb25zb2xlLndhcm4oJ1tOR1RdIGluc3RhbmNlIGhhcyBub3QgYmVlbiBwcmVwYXJlZCB5ZXQuJyk7XG5cdFx0cmV0dXJuICgpID0+IHt9O1xuXHR9XG5cblx0aWYgKGV2ZW50TmFtZSA9PT0gU1BFQ0lBTF9FVkVOVFMuQkVGT1JFX1JFTkRFUikge1xuXHRcdHJldHVybiBsUy5zdG9yZVxuXHRcdFx0LmdldCgnaW50ZXJuYWwnKVxuXHRcdFx0LnN1YnNjcmliZSgoc3RhdGUpID0+IGNhbGxiYWNrKHsgc3RhdGUsIG9iamVjdDogaW5zdGFuY2UgfSksIHByaW9yaXR5IHx8IGxTLnByaW9yaXR5IHx8IDApO1xuXHR9XG5cblx0aWYgKGV2ZW50TmFtZSA9PT0gU1BFQ0lBTF9FVkVOVFMuQVRUQUNIRUQpIHtcblx0XHRsUy5vbkF0dGFjaCA9IGNhbGxiYWNrO1xuXHRcdGlmICh1bnRyYWNrZWQobFMucGFyZW50KSkge1xuXHRcdFx0bFMub25BdHRhY2goeyBwYXJlbnQ6IHVudHJhY2tlZChsUy5wYXJlbnQpLCBub2RlOiBpbnN0YW5jZSB9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0bFMub25BdHRhY2ggPSB1bmRlZmluZWQ7XG5cdFx0fTtcblx0fVxuXG5cdGlmIChldmVudE5hbWUgPT09IFNQRUNJQUxfRVZFTlRTLlVQREFURUQpIHtcblx0XHRsUy5vblVwZGF0ZSA9IGNhbGxiYWNrO1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRsUy5vblVwZGF0ZSA9IHVuZGVmaW5lZDtcblx0XHR9O1xuXHR9XG5cblx0aWYgKCFsUy5oYW5kbGVycykgbFMuaGFuZGxlcnMgPSB7fTtcblxuXHQvLyB0cnkgdG8gZ2V0IHRoZSBwcmV2aW91cyBoYW5kbGVyLiBjb21wb3VuZCBtaWdodCBoYXZlIG9uZSwgdGhlIFRIUkVFIG9iamVjdCBtaWdodCBhbHNvIGhhdmUgb25lIHdpdGggdGhlIHNhbWUgbmFtZVxuXHRjb25zdCBwcmV2aW91c0hhbmRsZXIgPSBsUy5oYW5kbGVyc1tldmVudE5hbWUgYXMga2V5b2YgdHlwZW9mIGxTLmhhbmRsZXJzXTtcblx0Ly8gcmVhZGp1c3QgdGhlIGNhbGxiYWNrXG5cdGNvbnN0IHVwZGF0ZWRDYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID0gKGV2ZW50KSA9PiB7XG5cdFx0aWYgKHByZXZpb3VzSGFuZGxlcikgcHJldmlvdXNIYW5kbGVyKGV2ZW50KTtcblx0XHRjYWxsYmFjayhldmVudCk7XG5cdH07XG5cblx0T2JqZWN0LmFzc2lnbihsUy5oYW5kbGVycywgeyBbZXZlbnROYW1lXTogdXBkYXRlZENhbGxiYWNrIH0pO1xuXG5cdC8vIGluY3JlbWVudCB0aGUgY291bnQgZXZlcnl0aW1lXG5cdGxTLmV2ZW50Q291bnQgKz0gMTtcblx0Ly8gYnV0IG9ubHkgYWRkIHRoZSBpbnN0YW5jZSAodGFyZ2V0KSB0byB0aGUgaW50ZXJhY3Rpb24gYXJyYXkgKHNvIHRoYXQgaXQgaXMgaGFuZGxlZCBieSB0aGUgRXZlbnRNYW5hZ2VyIHdpdGggUmF5Y2FzdClcblx0Ly8gdGhlIGZpcnN0IHRpbWUgZXZlbnRDb3VudCBpcyBpbmNyZW1lbnRlZFxuXHRpZiAobFMuZXZlbnRDb3VudCA9PT0gMSAmJiBpbnN0YW5jZVsncmF5Y2FzdCddKSB7XG5cdFx0bGV0IHJvb3QgPSBsUy5zdG9yZTtcblx0XHR3aGlsZSAocm9vdC5nZXQoJ3ByZXZpb3VzUm9vdCcpKSB7XG5cdFx0XHRyb290ID0gcm9vdC5nZXQoJ3ByZXZpb3VzUm9vdCcpITtcblx0XHR9XG5cblx0XHRjb25zdCBpbnRlcmFjdGlvbnMgPSByb290LmdldCgnaW50ZXJuYWwnLCAnaW50ZXJhY3Rpb24nKSB8fCBbXTtcblx0XHRpbnRlcmFjdGlvbnMucHVzaChpbnN0YW5jZSk7XG5cdH1cblxuXHQvLyBjbGVhbiB1cCB0aGUgZXZlbnQgbGlzdGVuZXIgYnkgcmVtb3ZpbmcgdGhlIHRhcmdldCBmcm9tIHRoZSBpbnRlcmFjdGlvbiBhcnJheVxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGNvbnN0IGxTID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSk7XG5cdFx0aWYgKGxTKSB7XG5cdFx0XHRsUy5ldmVudENvdW50IC09IDE7XG5cdFx0XHRjb25zdCBpbnRlcmFjdGlvbnMgPSBsUy5zdG9yZS5nZXQoJ2ludGVybmFsJywgJ2ludGVyYWN0aW9uJykgfHwgW107XG5cdFx0XHRjb25zdCBpbmRleCA9IGludGVyYWN0aW9ucy5maW5kSW5kZXgoKG9iaikgPT4gb2JqLnV1aWQgPT09IGluc3RhbmNlLnV1aWQpO1xuXHRcdFx0aWYgKGluZGV4ID49IDApIGludGVyYWN0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdH1cblx0fTtcbn1cbiJdfQ==
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yZW5kZXJlci91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBYTdDLE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBVztJQUN4QyxJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMscUJBQXFCO0lBRTNDLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNuQixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQywrQkFBK0I7SUFFMUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDbEIsY0FBYyxHQUFHLElBQUksQ0FBQztZQUN0QixTQUFTO1FBQ1YsQ0FBQztRQUVELFNBQVMsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hELGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJ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LENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUUsSUFBSSxLQUFLLElBQUksQ0FBQztnQkFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0YsQ0FBQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcmVtb3ZlSW50ZXJhY3Rpdml0eSB9IGZyb20gJy4uL2V2ZW50cyc7XG5pbXBvcnQgeyBnZXRMb2NhbFN0YXRlLCBpbnZhbGlkYXRlSW5zdGFuY2UgfSBmcm9tICcuLi9pbnN0YW5jZSc7XG5pbXBvcnQgeyBOZ3RJbnN0YW5jZU5vZGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBhdHRhY2gsIGRldGFjaCB9IGZyb20gJy4uL3V0aWxzL2F0dGFjaCc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWxzL2lzJztcbmltcG9ydCB7IFNQRUNJQUxfRVZFTlRTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vLyBAaW50ZXJuYWxcbmV4cG9ydCBjb25zdCBlbnVtIE5ndFJlbmRlcmVyQ2xhc3NJZCB7XG5cdHR5cGUsXG5cdHBhcmVudCxcblx0Y2hpbGRyZW4sXG5cdGRlc3Ryb3llZCxcblx0cmF3VmFsdWUsXG5cdHBvcnRhbENvbnRhaW5lcixcblx0aW5qZWN0b3JGYWN0b3J5LFxufVxuXG5leHBvcnQgZnVuY3Rpb24ga2ViYWJUb1Bhc2NhbChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG5cdGlmICghc3RyKSByZXR1cm4gc3RyOyAvLyBIYW5kbGUgZW1wdHkgaW5wdXRcblxuXHRsZXQgcGFzY2FsU3RyID0gJyc7XG5cdGxldCBjYXBpdGFsaXplTmV4dCA9IHRydWU7IC8vIEZsYWcgdG8gdHJhY2sgY2FwaXRhbGl6YXRpb25cblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGNoYXIgPSBzdHJbaV07XG5cdFx0aWYgKGNoYXIgPT09ICctJykge1xuXHRcdFx0Y2FwaXRhbGl6ZU5leHQgPSB0cnVlO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0cGFzY2FsU3RyICs9IGNhcGl0YWxpemVOZXh0ID8gY2hhci50b1VwcGVyQ2FzZSgpIDogY2hhcjtcblx0XHRjYXBpdGFsaXplTmV4dCA9IGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHBhc2NhbFN0cjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaFRocmVlQ2hpbGQocGFyZW50OiBOZ3RJbnN0YW5jZU5vZGUsIGNoaWxkOiBOZ3RJbnN0YW5jZU5vZGUpIHtcblx0Y29uc3QgcExTID0gZ2V0TG9jYWxTdGF0ZShwYXJlbnQpO1xuXHRjb25zdCBjTFMgPSBnZXRMb2NhbFN0YXRlKGNoaWxkKTtcblxuXHRpZiAoIXBMUyB8fCAhY0xTKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBbTkdUXSBUSFJFRSBpbnN0YW5jZXMgbmVlZCB0byBiZSBwcmVwYXJlZCB3aXRoIGxvY2FsIHN0YXRlLmApO1xuXHR9XG5cblx0Ly8gd2hldGhlciB0aGUgY2hpbGQgaXMgYWRkZWQgdG8gdGhlIHBhcmVudCB3aXRoIHBhcmVudC5hZGQoKVxuXHRsZXQgYWRkZWQgPSBmYWxzZTtcblxuXHQvLyBhc3NpZ24gc3RvcmUgb24gY2hpbGQgaWYgbm90IGFscmVhZHkgZXhpc3Rcblx0Ly8gb3IgY2hpbGQgc3RvcmUgaXMgbm90IHRoZSBzYW1lIGFzIHBhcmVudCBzdG9yZVxuXHQvLyBvciBjaGlsZCBzdG9yZSBpcyB0aGUgcGFyZW50IG9mIHBhcmVudCBzdG9yZVxuXHRpZiAoIWNMUy5zdG9yZSB8fCBjTFMuc3RvcmUgIT09IHBMUy5zdG9yZSB8fCBjTFMuc3RvcmUgPT09IHBMUy5zdG9yZS5nZXQoJ3ByZXZpb3VzUm9vdCcpKSB7XG5cdFx0Y0xTLnN0b3JlID0gcExTLnN0b3JlO1xuXHRcdGNvbnN0IGdyYW5kY2hpbGRyZW4gPSBbXG5cdFx0XHQuLi4oY0xTLm9iamVjdHMgPyB1bnRyYWNrZWQoY0xTLm9iamVjdHMpIDogW10pLFxuXHRcdFx0Li4uKGNMUy5ub25PYmplY3RzID8gdW50cmFja2VkKGNMUy5ub25PYmplY3RzKSA6IFtdKSxcblx0XHRdO1xuXHRcdGZvciAoY29uc3QgZ3JhbmRjaGlsZCBvZiBncmFuZGNoaWxkcmVuKSB7XG5cdFx0XHRjb25zdCBncmFuZENoaWxkTFMgPSBnZXRMb2NhbFN0YXRlKGdyYW5kY2hpbGQpO1xuXHRcdFx0aWYgKCFncmFuZENoaWxkTFMpIGNvbnRpbnVlO1xuXHRcdFx0Z3JhbmRDaGlsZExTLnN0b3JlID0gY0xTLnN0b3JlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChjTFMuYXR0YWNoKSB7XG5cdFx0Y29uc3QgYXR0YWNoUHJvcCA9IGNMUy5hdHRhY2g7XG5cblx0XHRpZiAodHlwZW9mIGF0dGFjaFByb3AgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNvbnN0IGF0dGFjaENsZWFuVXAgPSBhdHRhY2hQcm9wKHBhcmVudCwgY2hpbGQsIGNMUy5zdG9yZSk7XG5cdFx0XHRpZiAoYXR0YWNoQ2xlYW5VcCkgY0xTLnByZXZpb3VzQXR0YWNoID0gYXR0YWNoQ2xlYW5VcDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gd2Ugc2tpcCBhdHRhY2ggbm9uZSBpZiBzZXQgZXhwbGljaXRseVxuXHRcdFx0aWYgKGF0dGFjaFByb3BbMF0gPT09ICdub25lJykge1xuXHRcdFx0XHRpbnZhbGlkYXRlSW5zdGFuY2UoY2hpbGQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIGhhbmRsZSBtYXRlcmlhbCBhcnJheVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRhdHRhY2hQcm9wWzBdID09PSAnbWF0ZXJpYWwnICYmXG5cdFx0XHRcdGF0dGFjaFByb3BbMV0gJiZcblx0XHRcdFx0dHlwZW9mIE51bWJlcihhdHRhY2hQcm9wWzFdKSA9PT0gJ251bWJlcicgJiZcblx0XHRcdFx0aXMubWF0ZXJpYWwoY2hpbGQpICYmXG5cdFx0XHRcdCFBcnJheS5pc0FycmF5KHBhcmVudFsnbWF0ZXJpYWwnXSlcblx0XHRcdCkge1xuXHRcdFx0XHRwYXJlbnRbJ21hdGVyaWFsJ10gPSBbXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYXR0YWNoXG5cdFx0XHRpZiAoY0xTLmlzUmF3KSB7XG5cdFx0XHRcdGlmIChjTFMuaW5zdGFuY2VTdG9yZS5nZXQoJ3BhcmVudCcpICE9PSBwYXJlbnQpIHtcblx0XHRcdFx0XHRjTFMuc2V0UGFyZW50KHBhcmVudCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gYXQgdGhpcyBwb2ludCB3ZSBkb24ndCBoYXZlIHJhd1ZhbHVlIHlldCwgc28gd2UgYmFpbCBhbmQgd2FpdCB1bnRpbCB0aGUgUmVuZGVyZXIgcmVjYWxscyBhdHRhY2hcblx0XHRcdFx0aWYgKGNoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnJhd1ZhbHVlXSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cdFx0XHRcdGF0dGFjaChwYXJlbnQsIGNoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnJhd1ZhbHVlXSwgYXR0YWNoUHJvcCwgdHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhdHRhY2gocGFyZW50LCBjaGlsZCwgYXR0YWNoUHJvcCk7XG5cdFx0XHR9XG5cdFx0XHQvLyBzYXZlIHZhbHVlXG5cdFx0XHRjTFMucHJldmlvdXNBdHRhY2ggPSBhdHRhY2hQcm9wLnJlZHVjZSgodmFsdWUsIHByb3BlcnR5KSA9PiB2YWx1ZVtwcm9wZXJ0eV0sIHBhcmVudCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzLm9iamVjdDNEKHBhcmVudCkgJiYgaXMub2JqZWN0M0QoY2hpbGQpKSB7XG5cdFx0cGFyZW50LmFkZChjaGlsZCk7XG5cdFx0YWRkZWQgPSB0cnVlO1xuXHR9XG5cblx0cExTLmFkZChjaGlsZCwgYWRkZWQgPyAnb2JqZWN0cycgOiAnbm9uT2JqZWN0cycpO1xuXG5cdGlmIChjTFMucGFyZW50ICYmIHVudHJhY2tlZChjTFMucGFyZW50KSAhPT0gcGFyZW50KSB7XG5cdFx0Y0xTLnNldFBhcmVudChwYXJlbnQpO1xuXHR9XG5cblx0Ly8gTk9URTogdGhpcyBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlIGNoaWxkIGlzIGFjdHVhbGx5IGF0dGFjaGVkIHRvIHRoZSBwYXJlbnQgb24gdGhlIHNjZW5lZ3JhcGguXG5cdC8vICBhIGNoaWxkIG9uIHRoZSBBbmd1bGFyIHRlbXBsYXRlIGNhbiBhbHNvIGVtaXQgb25BdHRhY2hcblx0aWYgKGNMUy5vbkF0dGFjaCkgY0xTLm9uQXR0YWNoKHsgcGFyZW50LCBub2RlOiBjaGlsZCB9KTtcblxuXHRpbnZhbGlkYXRlSW5zdGFuY2UoY2hpbGQpO1xuXHRpbnZhbGlkYXRlSW5zdGFuY2UocGFyZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVRocmVlQ2hpbGQoY2hpbGQ6IE5ndEluc3RhbmNlTm9kZSwgcGFyZW50PzogTmd0SW5zdGFuY2VOb2RlLCBkaXNwb3NlPzogYm9vbGVhbikge1xuXHRjb25zdCBwTFMgPSBnZXRMb2NhbFN0YXRlKHBhcmVudCk7XG5cdGNvbnN0IGNMUyA9IGdldExvY2FsU3RhdGUoY2hpbGQpO1xuXG5cdC8vIGNsZWFyIHBhcmVudCByZWZcblx0Y0xTPy5zZXRQYXJlbnQobnVsbCk7XG5cblx0Ly8gcmVtb3ZlIGNoaWxkIGZyb20gcGFyZW50XG5cdHBMUz8ucmVtb3ZlKGNoaWxkLCAnb2JqZWN0cycpO1xuXHRwTFM/LnJlbW92ZShjaGlsZCwgJ25vbk9iamVjdHMnKTtcblxuXHRpZiAocGFyZW50KSB7XG5cdFx0aWYgKGNMUz8uYXR0YWNoKSB7XG5cdFx0XHRkZXRhY2gocGFyZW50LCBjaGlsZCwgY0xTLmF0dGFjaCk7XG5cdFx0fSBlbHNlIGlmIChpcy5vYmplY3QzRChwYXJlbnQpICYmIGlzLm9iamVjdDNEKGNoaWxkKSkge1xuXHRcdFx0cGFyZW50LnJlbW92ZShjaGlsZCk7XG5cdFx0XHRjb25zdCBzdG9yZSA9IGNMUz8uc3RvcmUgfHwgcExTPy5zdG9yZTtcblx0XHRcdGlmIChzdG9yZSkgcmVtb3ZlSW50ZXJhY3Rpdml0eShzdG9yZSwgY2hpbGQpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGlzUHJpbWl0aXZlID0gY0xTPy5wcmltaXRpdmU7XG5cdGlmICghaXNQcmltaXRpdmUpIHtcblx0XHRyZW1vdmVUaHJlZVJlY3Vyc2l2ZShjTFM/Lmluc3RhbmNlU3RvcmUuZ2V0KCdvYmplY3RzJykgfHwgW10sIGNoaWxkLCAhIWRpc3Bvc2UpO1xuXHRcdHJlbW92ZVRocmVlUmVjdXJzaXZlKGNoaWxkLmNoaWxkcmVuLCBjaGlsZCwgISFkaXNwb3NlKTtcblx0fVxuXG5cdC8vIGRpc3Bvc2Vcblx0aWYgKCFpc1ByaW1pdGl2ZSAmJiBjaGlsZFsnZGlzcG9zZSddICYmICFpcy5zY2VuZShjaGlsZCkpIHtcblx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiBjaGlsZFsnZGlzcG9zZSddKCkpO1xuXHR9XG5cblx0aWYgKHBhcmVudCkge1xuXHRcdGludmFsaWRhdGVJbnN0YW5jZShwYXJlbnQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVRocmVlUmVjdXJzaXZlKGFycmF5OiBOZ3RJbnN0YW5jZU5vZGVbXSwgcGFyZW50OiBOZ3RJbnN0YW5jZU5vZGUsIGRpc3Bvc2U6IGJvb2xlYW4pIHtcblx0aWYgKGFycmF5KSBbLi4uYXJyYXldLmZvckVhY2goKGNoaWxkKSA9PiByZW1vdmVUaHJlZUNoaWxkKGNoaWxkLCBwYXJlbnQsIGRpc3Bvc2UpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NUaHJlZUV2ZW50KFxuXHRpbnN0YW5jZTogTmd0SW5zdGFuY2VOb2RlLFxuXHRwcmlvcml0eTogbnVtYmVyLFxuXHRldmVudE5hbWU6IHN0cmluZyxcblx0Y2FsbGJhY2s6IChldmVudDogYW55KSA9PiB2b2lkLFxuKTogKCkgPT4gdm9pZCB7XG5cdGNvbnN0IGxTID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSk7XG5cdGlmICghbFMpIHtcblx0XHRjb25zb2xlLndhcm4oJ1tOR1RdIGluc3RhbmNlIGhhcyBub3QgYmVlbiBwcmVwYXJlZCB5ZXQuJyk7XG5cdFx0cmV0dXJuICgpID0+IHt9O1xuXHR9XG5cblx0aWYgKGV2ZW50TmFtZSA9PT0gU1BFQ0lBTF9FVkVOVFMuQkVGT1JFX1JFTkRFUikge1xuXHRcdHJldHVybiBsUy5zdG9yZVxuXHRcdFx0LmdldCgnaW50ZXJuYWwnKVxuXHRcdFx0LnN1YnNjcmliZSgoc3RhdGUpID0+IGNhbGxiYWNrKHsgc3RhdGUsIG9iamVjdDogaW5zdGFuY2UgfSksIHByaW9yaXR5IHx8IGxTLnByaW9yaXR5IHx8IDApO1xuXHR9XG5cblx0aWYgKGV2ZW50TmFtZSA9PT0gU1BFQ0lBTF9FVkVOVFMuQVRUQUNIRUQpIHtcblx0XHRsUy5vbkF0dGFjaCA9IGNhbGxiYWNrO1xuXHRcdGlmICh1bnRyYWNrZWQobFMucGFyZW50KSkge1xuXHRcdFx0bFMub25BdHRhY2goeyBwYXJlbnQ6IHVudHJhY2tlZChsUy5wYXJlbnQpLCBub2RlOiBpbnN0YW5jZSB9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0bFMub25BdHRhY2ggPSB1bmRlZmluZWQ7XG5cdFx0fTtcblx0fVxuXG5cdGlmIChldmVudE5hbWUgPT09IFNQRUNJQUxfRVZFTlRTLlVQREFURUQpIHtcblx0XHRsUy5vblVwZGF0ZSA9IGNhbGxiYWNrO1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRsUy5vblVwZGF0ZSA9IHVuZGVmaW5lZDtcblx0XHR9O1xuXHR9XG5cblx0aWYgKCFsUy5oYW5kbGVycykgbFMuaGFuZGxlcnMgPSB7fTtcblxuXHQvLyB0cnkgdG8gZ2V0IHRoZSBwcmV2aW91cyBoYW5kbGVyLiBjb21wb3VuZCBtaWdodCBoYXZlIG9uZSwgdGhlIFRIUkVFIG9iamVjdCBtaWdodCBhbHNvIGhhdmUgb25lIHdpdGggdGhlIHNhbWUgbmFtZVxuXHRjb25zdCBwcmV2aW91c0hhbmRsZXIgPSBsUy5oYW5kbGVyc1tldmVudE5hbWUgYXMga2V5b2YgdHlwZW9mIGxTLmhhbmRsZXJzXTtcblx0Ly8gcmVhZGp1c3QgdGhlIGNhbGxiYWNrXG5cdGNvbnN0IHVwZGF0ZWRDYWxsYmFjazogdHlwZW9mIGNhbGxiYWNrID0gKGV2ZW50KSA9PiB7XG5cdFx0aWYgKHByZXZpb3VzSGFuZGxlcikgcHJldmlvdXNIYW5kbGVyKGV2ZW50KTtcblx0XHRjYWxsYmFjayhldmVudCk7XG5cdH07XG5cblx0T2JqZWN0LmFzc2lnbihsUy5oYW5kbGVycywgeyBbZXZlbnROYW1lXTogdXBkYXRlZENhbGxiYWNrIH0pO1xuXG5cdC8vIGluY3JlbWVudCB0aGUgY291bnQgZXZlcnl0aW1lXG5cdGxTLmV2ZW50Q291bnQgKz0gMTtcblx0Ly8gYnV0IG9ubHkgYWRkIHRoZSBpbnN0YW5jZSAodGFyZ2V0KSB0byB0aGUgaW50ZXJhY3Rpb24gYXJyYXkgKHNvIHRoYXQgaXQgaXMgaGFuZGxlZCBieSB0aGUgRXZlbnRNYW5hZ2VyIHdpdGggUmF5Y2FzdClcblx0Ly8gdGhlIGZpcnN0IHRpbWUgZXZlbnRDb3VudCBpcyBpbmNyZW1lbnRlZFxuXHRpZiAobFMuZXZlbnRDb3VudCA9PT0gMSAmJiBpbnN0YW5jZVsncmF5Y2FzdCddKSB7XG5cdFx0bGV0IHJvb3QgPSBsUy5zdG9yZTtcblx0XHR3aGlsZSAocm9vdC5nZXQoJ3ByZXZpb3VzUm9vdCcpKSB7XG5cdFx0XHRyb290ID0gcm9vdC5nZXQoJ3ByZXZpb3VzUm9vdCcpITtcblx0XHR9XG5cblx0XHRjb25zdCBpbnRlcmFjdGlvbnMgPSByb290LmdldCgnaW50ZXJuYWwnLCAnaW50ZXJhY3Rpb24nKSB8fCBbXTtcblx0XHRpbnRlcmFjdGlvbnMucHVzaChpbnN0YW5jZSk7XG5cdH1cblxuXHQvLyBjbGVhbiB1cCB0aGUgZXZlbnQgbGlzdGVuZXIgYnkgcmVtb3ZpbmcgdGhlIHRhcmdldCBmcm9tIHRoZSBpbnRlcmFjdGlvbiBhcnJheVxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGNvbnN0IGxTID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSk7XG5cdFx0aWYgKGxTKSB7XG5cdFx0XHRsUy5ldmVudENvdW50IC09IDE7XG5cdFx0XHRjb25zdCBpbnRlcmFjdGlvbnMgPSBsUy5zdG9yZS5nZXQoJ2ludGVybmFsJywgJ2ludGVyYWN0aW9uJykgfHwgW107XG5cdFx0XHRjb25zdCBpbmRleCA9IGludGVyYWN0aW9ucy5maW5kSW5kZXgoKG9iaikgPT4gb2JqLnV1aWQgPT09IGluc3RhbmNlLnV1aWQpO1xuXHRcdFx0aWYgKGluZGV4ID49IDApIGludGVyYWN0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdH1cblx0fTtcbn1cbiJdfQ==
|
|
@@ -1427,7 +1427,7 @@ function attachThreeChild(parent, child) {
|
|
|
1427
1427
|
invalidateInstance(child);
|
|
1428
1428
|
invalidateInstance(parent);
|
|
1429
1429
|
}
|
|
1430
|
-
function removeThreeChild(
|
|
1430
|
+
function removeThreeChild(child, parent, dispose) {
|
|
1431
1431
|
const pLS = getLocalState(parent);
|
|
1432
1432
|
const cLS = getLocalState(child);
|
|
1433
1433
|
// clear parent ref
|
|
@@ -1435,14 +1435,16 @@ function removeThreeChild(parent, child, dispose) {
|
|
|
1435
1435
|
// remove child from parent
|
|
1436
1436
|
pLS?.remove(child, 'objects');
|
|
1437
1437
|
pLS?.remove(child, 'nonObjects');
|
|
1438
|
-
if (
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
parent.
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1438
|
+
if (parent) {
|
|
1439
|
+
if (cLS?.attach) {
|
|
1440
|
+
detach(parent, child, cLS.attach);
|
|
1441
|
+
}
|
|
1442
|
+
else if (is.object3D(parent) && is.object3D(child)) {
|
|
1443
|
+
parent.remove(child);
|
|
1444
|
+
const store = cLS?.store || pLS?.store;
|
|
1445
|
+
if (store)
|
|
1446
|
+
removeInteractivity(store, child);
|
|
1447
|
+
}
|
|
1446
1448
|
}
|
|
1447
1449
|
const isPrimitive = cLS?.primitive;
|
|
1448
1450
|
if (!isPrimitive) {
|
|
@@ -1453,11 +1455,13 @@ function removeThreeChild(parent, child, dispose) {
|
|
|
1453
1455
|
if (!isPrimitive && child['dispose'] && !is.scene(child)) {
|
|
1454
1456
|
queueMicrotask(() => child['dispose']());
|
|
1455
1457
|
}
|
|
1456
|
-
|
|
1458
|
+
if (parent) {
|
|
1459
|
+
invalidateInstance(parent);
|
|
1460
|
+
}
|
|
1457
1461
|
}
|
|
1458
1462
|
function removeThreeRecursive(array, parent, dispose) {
|
|
1459
1463
|
if (array)
|
|
1460
|
-
[...array].forEach((child) => removeThreeChild(
|
|
1464
|
+
[...array].forEach((child) => removeThreeChild(child, parent, dispose));
|
|
1461
1465
|
}
|
|
1462
1466
|
function processThreeEvent(instance, priority, eventName, callback) {
|
|
1463
1467
|
const lS = getLocalState(instance);
|
|
@@ -1735,12 +1739,19 @@ class NgtRenderer {
|
|
|
1735
1739
|
this.appendChild(parent, newChild);
|
|
1736
1740
|
}
|
|
1737
1741
|
removeChild(parent, oldChild, isHostElement) {
|
|
1738
|
-
if (parent
|
|
1739
|
-
parent = (
|
|
1740
|
-
|
|
1742
|
+
if (parent == null) {
|
|
1743
|
+
parent = (untracked(() => getLocalState(oldChild)?.parent) ||
|
|
1744
|
+
oldChild.__ngt_renderer__[1 /* NgtRendererClassId.parent */]);
|
|
1741
1745
|
}
|
|
1742
|
-
const pRS = parent.__ngt_renderer__;
|
|
1743
1746
|
const cRS = oldChild.__ngt_renderer__;
|
|
1747
|
+
// if parent is still falsy, we don't know what to do with the parent.
|
|
1748
|
+
// we'll just remove the child and destroy it
|
|
1749
|
+
if (parent == null && cRS?.[0 /* NgtRendererClassId.type */] !== 'three') {
|
|
1750
|
+
removeThreeChild(oldChild, undefined, true);
|
|
1751
|
+
this.destroyInternal(oldChild, undefined);
|
|
1752
|
+
return;
|
|
1753
|
+
}
|
|
1754
|
+
const pRS = parent.__ngt_renderer__;
|
|
1744
1755
|
if ((!cRS || !pRS) &&
|
|
1745
1756
|
parent instanceof Element &&
|
|
1746
1757
|
(oldChild instanceof Element || oldChild instanceof Text || oldChild instanceof Comment)) {
|
|
@@ -1754,7 +1765,7 @@ class NgtRenderer {
|
|
|
1754
1765
|
return;
|
|
1755
1766
|
}
|
|
1756
1767
|
if (pRS[0 /* NgtRendererClassId.type */] === 'three' && cRS[0 /* NgtRendererClassId.type */] === 'three') {
|
|
1757
|
-
removeThreeChild(
|
|
1768
|
+
removeThreeChild(oldChild, parent, true);
|
|
1758
1769
|
this.destroyInternal(oldChild, parent);
|
|
1759
1770
|
return;
|
|
1760
1771
|
}
|
|
@@ -1945,12 +1956,12 @@ class NgtRenderer {
|
|
|
1945
1956
|
for (const renderChild of rS[2 /* NgtRendererClassId.children */] || []) {
|
|
1946
1957
|
if (renderChild.__ngt_renderer__?.[0 /* NgtRendererClassId.type */] === 'three' && parent) {
|
|
1947
1958
|
if (parent.__ngt_renderer__?.[0 /* NgtRendererClassId.type */] === 'three') {
|
|
1948
|
-
removeThreeChild(
|
|
1959
|
+
removeThreeChild(renderChild, parent, true);
|
|
1949
1960
|
continue;
|
|
1950
1961
|
}
|
|
1951
1962
|
const closestInstance = getClosestParentWithInstance(parent);
|
|
1952
1963
|
if (closestInstance) {
|
|
1953
|
-
removeThreeChild(
|
|
1964
|
+
removeThreeChild(renderChild, closestInstance, true);
|
|
1954
1965
|
}
|
|
1955
1966
|
}
|
|
1956
1967
|
this.destroyInternal(renderChild, parent);
|