angular-three 2.0.0-beta.36 → 2.0.0-beta.38

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.
@@ -86,8 +86,8 @@ export function createEvents(store) {
86
86
  .flatMap(handleRaycast)
87
87
  // Sort by event priority and distance
88
88
  .sort((a, b) => {
89
- const aState = getLocalState(a.object).store.get();
90
- const bState = getLocalState(b.object).store.get();
89
+ const aState = getLocalState(a.object).store?.get();
90
+ const bState = getLocalState(b.object).store?.get();
91
91
  if (!aState || !bState)
92
92
  return a.distance - b.distance;
93
93
  return bState.events.priority - aState.events.priority || a.distance - b.distance;
@@ -356,4 +356,4 @@ export function createEvents(store) {
356
356
  }
357
357
  return { handlePointer };
358
358
  }
359
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQTBGdEM7OztHQUdHO0FBQ0gsU0FBUyw2QkFBNkIsQ0FDckMsV0FBc0UsRUFDdEUsR0FBbUIsRUFDbkIsUUFBc0QsRUFDdEQsU0FBaUI7SUFFakIsTUFBTSxXQUFXLEdBQXdDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0UsSUFBSSxXQUFXLEVBQUU7UUFDaEIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQix5REFBeUQ7UUFDekQsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUN4QixXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlCLFdBQVcsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDcEQ7S0FDRDtBQUNGLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBK0IsRUFBRSxNQUFzQjtJQUMxRixNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2pDLHVEQUF1RDtJQUN2RCxRQUFRLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDeEUsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFB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LENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDL0UsQ0FBQzs0QkFDRix1QkFBdUI7NEJBQ3ZCLE9BQU8sQ0FBQyxJQUFtQyxDQUFDLENBQUM7eUJBQzdDO3FCQUNEO3lCQUFNO3dCQUNOLDZHQUE2Rzt3QkFDN0csSUFBSSxZQUFZLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7NEJBQy9ELGFBQWEsQ0FDWixLQUFLLEVBQ0wsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDL0UsQ0FBQzt5QkFDRjtxQkFDRDtpQkFDRDtZQUNGLENBQUM7WUFFRCxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBnZXRMb2NhbFN0YXRlIH0gZnJvbSAnLi9pbnN0YW5jZSc7XG5pbXBvcnQgdHlwZSB7IE5ndFN0YXRlIH0gZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgdHlwZSB7IE5ndEFueVJlY29yZCwgTmd0UHJvcGVydGllcyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgbWFrZUlkIH0gZnJvbSAnLi91dGlscy9tYWtlJztcbmltcG9ydCB0eXBlIHsgTmd0U2lnbmFsU3RvcmUgfSBmcm9tICcuL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0SW50ZXJzZWN0aW9uIGV4dGVuZHMgVEhSRUUuSW50ZXJzZWN0aW9uIHtcblx0LyoqIFRoZSBldmVudCBzb3VyY2UgKHRoZSBvYmplY3Qgd2hpY2ggcmVnaXN0ZXJlZCB0aGUgaGFuZGxlcikgKi9cblx0ZXZlbnRPYmplY3Q6IFRIUkVFLk9iamVjdDNEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndEludGVyc2VjdGlvbkV2ZW50PFRTb3VyY2VFdmVudD4gZXh0ZW5kcyBOZ3RJbnRlcnNlY3Rpb24ge1xuXHQvKiogVGhlIGV2ZW50IHNvdXJjZSAodGhlIG9iamVjdCB3aGljaCByZWdpc3RlcmVkIHRoZSBoYW5kbGVyKSAqL1xuXHRldmVudE9iamVjdDogVEhSRUUuT2JqZWN0M0Q7XG5cdC8qKiBBbiBhcnJheSBvZiBpbnRlcnNlY3Rpb25zICovXG5cdGludGVyc2VjdGlvbnM6IE5ndEludGVyc2VjdGlvbltdO1xuXHQvKiogdmVjMy5zZXQocG9pbnRlci54LCBwb2ludGVyLnksIDApLnVucHJvamVjdChjYW1lcmEpICovXG5cdHVucHJvamVjdGVkUG9pbnQ6IFRIUkVFLlZlY3RvcjM7XG5cdC8qKiBOb3JtYWxpemVkIGV2ZW50IGNvb3JkaW5hdGVzICovXG5cdHBvaW50ZXI6IFRIUkVFLlZlY3RvcjI7XG5cdC8qKiBEZWx0YSBiZXR3ZWVuIGZpcnN0IGNsaWNrIGFuZCB0aGlzIGV2ZW50ICovXG5cdGRlbHRhOiBudW1iZXI7XG5cdC8qKiBUaGUgcmF5IHRoYXQgcGllcmNlZCBpdCAqL1xuXHRyYXk6IFRIUkVFLlJheTtcblx0LyoqIFRoZSBjYW1lcmEgdGhhdCB3YXMgdXNlZCBieSB0aGUgcmF5Y2FzdGVyICovXG5cdGNhbWVyYTogTmd0Q2FtZXJhO1xuXHQvKiogc3RvcFByb3BhZ2F0aW9uIHdpbGwgc3RvcCB1bmRlcmx5aW5nIGhhbmRsZXJzIGZyb20gZmlyaW5nICovXG5cdHN0b3BQcm9wYWdhdGlvbjogKCkgPT4gdm9pZDtcblx0LyoqIFRoZSBvcmlnaW5hbCBob3N0IGV2ZW50ICovXG5cdG5hdGl2ZUV2ZW50OiBUU291cmNlRXZlbnQ7XG5cdC8qKiBJZiB0aGUgZXZlbnQgd2FzIHN0b3BwZWQgYnkgY2FsbGluZyBzdG9wUHJvcGFnYXRpb24gKi9cblx0c3RvcHBlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgTmd0Q2FtZXJhID0gVEhSRUUuT3J0aG9ncmFwaGljQ2FtZXJhIHwgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmE7XG5leHBvcnQgdHlwZSBOZ3RUaHJlZUV2ZW50PFRFdmVudD4gPSBOZ3RJbnRlcnNlY3Rpb25FdmVudDxURXZlbnQ+ICYgTmd0UHJvcGVydGllczxURXZlbnQ+O1xuZXhwb3J0IHR5cGUgTmd0RG9tRXZlbnQgPSBQb2ludGVyRXZlbnQgfCBNb3VzZUV2ZW50IHwgV2hlZWxFdmVudDtcblxuZXhwb3J0IHR5cGUgTmd0RXZlbnRIYW5kbGVycyA9IHtcblx0Y2xpY2s/OiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8TW91c2VFdmVudD4pID0+IHZvaWQ7XG5cdGNvbnRleHRtZW51PzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+KSA9PiB2b2lkO1xuXHRkYmxjbGljaz86IChldmVudDogTmd0VGhyZWVFdmVudDxNb3VzZUV2ZW50PikgPT4gdm9pZDtcblx0cG9pbnRlcnVwPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG5cdHBvaW50ZXJkb3duPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG5cdHBvaW50ZXJvdmVyPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG5cdHBvaW50ZXJvdXQ/OiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50PikgPT4gdm9pZDtcblx0cG9pbnRlcmVudGVyPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG5cdHBvaW50ZXJsZWF2ZT86IChldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSA9PiB2b2lkO1xuXHRwb2ludGVybW92ZT86IChldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSA9PiB2b2lkO1xuXHRwb2ludGVybWlzc2VkPzogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuXHRwb2ludGVyY2FuY2VsPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG5cdHdoZWVsPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFdoZWVsRXZlbnQ+KSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0RXZlbnRzID0ge1xuXHRbVEV2ZW50IGluIGtleW9mIE5ndEV2ZW50SGFuZGxlcnNdLT86IEV2ZW50TGlzdGVuZXI7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RGaWx0ZXJGdW5jdGlvbiA9IChpdGVtczogVEhSRUUuSW50ZXJzZWN0aW9uW10sIHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4pID0+IFRIUkVFLkludGVyc2VjdGlvbltdO1xuZXhwb3J0IHR5cGUgTmd0Q29tcHV0ZUZ1bmN0aW9uID0gKFxuXHRldmVudDogTmd0RG9tRXZlbnQsXG5cdHJvb3Q6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPixcblx0cHJldmlvdXM6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPiB8IG51bGwsXG4pID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0RXZlbnRNYW5hZ2VyPFRUYXJnZXQ+IHtcblx0LyoqIERldGVybWluZXMgaWYgdGhlIGV2ZW50IGxheWVyIGlzIGFjdGl2ZSAqL1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHQvKiogRXZlbnQgbGF5ZXIgcHJpb3JpdHksIGhpZ2hlciBwcmlvcml0aXplZCBsYXllcnMgY29tZSBmaXJzdCBhbmQgbWF5IHN0b3AoLXByb3BhZ2F0ZSkgbG93ZXIgbGF5ZXIgICovXG5cdHByaW9yaXR5OiBudW1iZXI7XG5cdC8qKiBUaGUgY29tcHV0ZSBmdW5jdGlvbiBuZWVkcyB0byBzZXQgdXAgdGhlIHJheWNhc3RlciBhbmQgYW4geHktIHBvaW50ZXIgICovXG5cdGNvbXB1dGU/OiBOZ3RDb21wdXRlRnVuY3Rpb247XG5cdC8qKiBUaGUgZmlsdGVyIGNhbiByZS1vcmRlciBvciByZS1zdHJ1Y3R1cmUgdGhlIGludGVyc2VjdGlvbnMgICovXG5cdGZpbHRlcj86IE5ndEZpbHRlckZ1bmN0aW9uO1xuXHQvKiogVGhlIHRhcmdldCBub2RlIHRoZSBldmVudCBsYXllciBpcyB0aWVkIHRvICovXG5cdGNvbm5lY3RlZD86IFRUYXJnZXQ7XG5cdC8qKiBBbGwgdGhlIHBvaW50ZXIgZXZlbnQgaGFuZGxlcnMgdGhyb3VnaCB3aGljaCB0aGUgaG9zdCBmb3J3YXJkcyBuYXRpdmUgZXZlbnRzICovXG5cdGhhbmRsZXJzPzogTmd0RXZlbnRzO1xuXHQvKiogQWxsb3dzIHJlLWNvbm5lY3RpbmcgdG8gYW5vdGhlciB0YXJnZXQgKi9cblx0Y29ubmVjdD86ICh0YXJnZXQ6IFRUYXJnZXQpID0+IHZvaWQ7XG5cdC8qKiBSZW1vdmVzIGFsbCBleGlzdGluZyBldmVudHMgaGFuZGxlcnMgZnJvbSB0aGUgdGFyZ2V0ICovXG5cdGRpc2Nvbm5lY3Q/OiAoKSA9PiB2b2lkO1xuXHQvKiogVHJpZ2dlcnMgYSBvblBvaW50ZXJNb3ZlIHdpdGggdGhlIGxhc3Qga25vd24gZXZlbnQuIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBlbmFibGUgcmF5Y2FzdGluZyB3aXRob3V0XG5cdCAqICBleHBsaWNpdCB1c2VyIGludGVyYWN0aW9uLCBmb3IgaW5zdGFuY2Ugd2hlbiB0aGUgY2FtZXJhIG1vdmVzIGEgaG92ZXJhYmxlIG9iamVjdCB1bmRlcm5lYXRoIHRoZSBjdXJzb3IuXG5cdCAqL1xuXHR1cGRhdGU/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndFBvaW50ZXJDYXB0dXJlVGFyZ2V0IHtcblx0aW50ZXJzZWN0aW9uOiBOZ3RJbnRlcnNlY3Rpb247XG5cdHRhcmdldDogRWxlbWVudDtcbn1cblxuLyoqXG4gKiBSZWxlYXNlIHBvaW50ZXIgY2FwdHVyZXMuXG4gKiBUaGlzIGlzIGNhbGxlZCBieSByZWxlYXNlUG9pbnRlckNhcHR1cmUgaW4gdGhlIEFQSSwgYW5kIHdoZW4gYW4gb2JqZWN0IGlzIHJlbW92ZWQuXG4gKi9cbmZ1bmN0aW9uIHJlbGVhc2VJbnRlcm5hbFBvaW50ZXJDYXB0dXJlKFxuXHRjYXB0dXJlZE1hcDogTWFwPG51bWJlciwgTWFwPFRIUkVFLk9iamVjdDNELCBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldD4+LFxuXHRvYmo6IFRIUkVFLk9iamVjdDNELFxuXHRjYXB0dXJlczogTWFwPFRIUkVFLk9iamVjdDNELCBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldD4sXG5cdHBvaW50ZXJJZDogbnVtYmVyLFxuKTogdm9pZCB7XG5cdGNvbnN0IGNhcHR1cmVEYXRhOiBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldCB8IHVuZGVmaW5lZCA9IGNhcHR1cmVzLmdldChvYmopO1xuXHRpZiAoY2FwdHVyZURhdGEpIHtcblx0XHRjYXB0dXJlcy5kZWxldGUob2JqKTtcblx0XHQvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBjYXB0dXJpbmcgb2JqZWN0IGZvciB0aGlzIHBvaW50ZXJcblx0XHRpZiAoY2FwdHVyZXMuc2l6ZSA9PT0gMCkge1xuXHRcdFx0Y2FwdHVyZWRNYXAuZGVsZXRlKHBvaW50ZXJJZCk7XG5cdFx0XHRjYXB0dXJlRGF0YS50YXJnZXQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKHBvaW50ZXJJZCk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVJbnRlcmFjdGl2aXR5KHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4sIG9iamVjdDogVEhSRUUuT2JqZWN0M0QpIHtcblx0Y29uc3QgeyBpbnRlcm5hbCB9ID0gc3RvcmUuZ2V0KCk7XG5cdC8vIFJlbW92ZXMgZXZlcnkgdHJhY2Ugb2YgYW4gb2JqZWN0IGZyb20gdGhlIGRhdGEgc3RvcmVcblx0aW50ZXJuYWwuaW50ZXJhY3Rpb24gPSBpbnRlcm5hbC5pbnRlcmFjdGlvbi5maWx0ZXIoKG8pID0+IG8gIT09IG9iamVjdCk7XG5cdGludGVybmFsLmluaXRpYWxIaXRzID0gaW50ZXJuYWwuaW5pdGlhbEhpdHMuZmlsdGVyKChvKSA9PiBvICE9PSBvYmplY3QpO1xuXHRpbnRlcm5hbC5ob3ZlcmVkLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcblx0XHRpZiAodmFsdWUuZXZlbnRPYmplY3QgPT09IG9iamVjdCB8fCB2YWx1ZS5vYmplY3QgPT09IG9iamVjdCkge1xuXHRcdFx0Ly8gQ2xlYXIgb3V0IGludGVyc2VjdHMsIHRoZXkgYXJlIG91dGRhdGVkIGJ5IG5vd1xuXHRcdFx0aW50ZXJuYWwuaG92ZXJlZC5kZWxldGUoa2V5KTtcblx0XHR9XG5cdH0pO1xuXHRpbnRlcm5hbC5jYXB0dXJlZE1hcC5mb3JFYWNoKChjYXB0dXJlcywgcG9pbnRlcklkKSA9PiB7XG5cdFx0cmVsZWFzZUludGVybmFsUG9pbnRlckNhcHR1cmUoaW50ZXJuYWwuY2FwdHVyZWRNYXAsIG9iamVjdCwgY2FwdHVyZXMsIHBvaW50ZXJJZCk7XG5cdH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXZlbnRzKHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4pIHtcblx0LyoqIENhbGN1bGF0ZXMgZGVsdGEgKi9cblx0ZnVuY3Rpb24gY2FsY3VsYXRlRGlzdGFuY2UoZXZlbnQ6IE5ndERvbUV2ZW50KSB7XG5cdFx0Y29uc3QgaW50ZXJuYWwgPSBzdG9yZS5nZXQoJ2ludGVybmFsJyk7XG5cdFx0Y29uc3QgZHggPSBldmVudC5vZmZzZXRYIC0gaW50ZXJuYWwuaW5pdGlhbENsaWNrWzBdO1xuXHRcdGNvbnN0IGR5ID0gZXZlbnQub2Zmc2V0WSAtIGludGVybmFsLmluaXRpYWxDbGlja1sxXTtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpKTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRydWUgaWYgYW4gaW5zdGFuY2UgaGFzIGEgdmFsaWQgcG9pbnRlci1ldmVudCByZWdpc3RlcmVkLCB0aGlzIGV4Y2x1ZGVzIHNjcm9sbCwgY2xpY2tzIGV0YyAqL1xuXHRmdW5jdGlvbiBmaWx0ZXJQb2ludGVyRXZlbnRzKG9iamVjdHM6IFRIUkVFLk9iamVjdDNEW10pIHtcblx0XHRyZXR1cm4gb2JqZWN0cy5maWx0ZXIoKG9iaikgPT5cblx0XHRcdFsnbW92ZScsICdvdmVyJywgJ2VudGVyJywgJ291dCcsICdsZWF2ZSddLnNvbWUoKG5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnROYW1lID0gYHBvaW50ZXIke25hbWV9YCBhcyBrZXlvZiBOZ3RFdmVudEhhbmRsZXJzO1xuXHRcdFx0XHRyZXR1cm4gZ2V0TG9jYWxTdGF0ZShvYmopLmhhbmRsZXJzPy5bZXZlbnROYW1lXTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cblxuXHRmdW5jdGlvbiBpbnRlcnNlY3QoZXZlbnQ6IE5ndERvbUV2ZW50LCBmaWx0ZXI/OiAob2JqZWN0czogVEhSRUUuT2JqZWN0M0RbXSkgPT4gVEhSRUUuT2JqZWN0M0RbXSkge1xuXHRcdGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0KCk7XG5cdFx0Y29uc3QgZHVwbGljYXRlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGNvbnN0IGludGVyc2VjdGlvbnM6IE5ndEludGVyc2VjdGlvbltdID0gW107XG5cdFx0Ly8gQWxsb3cgY2FsbGVycyB0byBlbGltaW5hdGUgZXZlbnQgb2JqZWN0c1xuXHRcdGNvbnN0IGV2ZW50c09iamVjdHMgPSBmaWx0ZXIgPyBmaWx0ZXIoc3RhdGUuaW50ZXJuYWwuaW50ZXJhY3Rpb24pIDogc3RhdGUuaW50ZXJuYWwuaW50ZXJhY3Rpb247XG5cdFx0Ly8gUmVzZXQgYWxsIHJheWNhc3RlciBjYW1lcmFzIHRvIHVuZGVmaW5lZFxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZXZlbnRzT2JqZWN0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3Qgc3RhdGUgPSBnZXRMb2NhbFN0YXRlKGV2ZW50c09iamVjdHNbaV0pLnN0b3JlLmdldCgpO1xuXHRcdFx0aWYgKHN0YXRlKSB7XG5cdFx0XHRcdHN0YXRlLnJheWNhc3Rlci5jYW1lcmEgPSB1bmRlZmluZWQhO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghc3RhdGUucHJldmlvdXNSb290KSB7XG5cdFx0XHQvLyBNYWtlIHN1cmUgcm9vdC1sZXZlbCBwb2ludGVyIGFuZCByYXkgYXJlIHNldCB1cFxuXHRcdFx0c3RhdGUuZXZlbnRzLmNvbXB1dGU/LihldmVudCwgc3RvcmUsIG51bGwpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhhbmRsZVJheWNhc3Qob2JqOiBUSFJFRS5PYmplY3QzRCkge1xuXHRcdFx0Y29uc3Qgb2JqTG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUob2JqKTtcblx0XHRcdGNvbnN0IG9ialN0b3JlID0gb2JqTG9jYWxTdGF0ZS5zdG9yZTtcblx0XHRcdGNvbnN0IG9ialN0YXRlID0gb2JqU3RvcmU/LmdldCgpO1xuXHRcdFx0Ly8gU2tpcCBldmVudCBoYW5kbGluZyB3aGVuIG5vRXZlbnRzIGlzIHNldCwgb3Igd2hlbiB0aGUgcmF5Y2FzdGVycyBjYW1lcmEgaXMgbnVsbFxuXHRcdFx0aWYgKCFvYmpTdGF0ZSB8fCAhb2JqU3RhdGUuZXZlbnRzLmVuYWJsZWQgfHwgb2JqU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuXG5cdFx0XHQvLyBXaGVuIHRoZSBjYW1lcmEgaXMgdW5kZWZpbmVkIHdlIGhhdmUgdG8gY2FsbCB0aGUgZXZlbnQgbGF5ZXJzIHVwZGF0ZSBmdW5jdGlvblxuXHRcdFx0aWYgKG9ialN0YXRlLnJheWNhc3Rlci5jYW1lcmEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRvYmpTdGF0ZS5ldmVudHMuY29tcHV0ZT8uKGV2ZW50LCBvYmpTdG9yZSwgb2JqU3RhdGUucHJldmlvdXNSb290KTtcblx0XHRcdFx0Ly8gSWYgdGhlIGNhbWVyYSBpcyBzdGlsbCB1bmRlZmluZWQgd2UgaGF2ZSB0byBza2lwIHRoaXMgbGF5ZXIgZW50aXJlbHlcblx0XHRcdFx0aWYgKG9ialN0YXRlLnJheWNhc3Rlci5jYW1lcmEgPT09IHVuZGVmaW5lZCkgb2JqU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSA9IG51bGwhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbnRlcnNlY3Qgb2JqZWN0IGJ5IG9iamVjdFxuXHRcdFx0cmV0dXJuIG9ialN0YXRlLnJheWNhc3Rlci5jYW1lcmEgPyBvYmpTdGF0ZS5yYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0KG9iaiwgdHJ1ZSkgOiBbXTtcblx0XHR9XG5cblx0XHQvLyBDb2xsZWN0IGV2ZW50c1xuXHRcdGxldCBoaXRzOiBUSFJFRS5JbnRlcnNlY3Rpb248VEhSRUUuT2JqZWN0M0Q+W10gPSBldmVudHNPYmplY3RzXG5cdFx0XHQvLyBJbnRlcnNlY3Qgb2JqZWN0c1xuXHRcdFx0LmZsYXRNYXAoaGFuZGxlUmF5Y2FzdClcblx0XHRcdC8vIFNvcnQgYnkgZXZlbnQgcHJpb3JpdHkgYW5kIGRpc3RhbmNlXG5cdFx0XHQuc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0XHRjb25zdCBhU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGEub2JqZWN0KS5zdG9yZS5nZXQoKTtcblx0XHRcdFx0Y29uc3QgYlN0YXRlID0gZ2V0TG9jYWxTdGF0ZShiLm9iamVjdCkuc3RvcmUuZ2V0KCk7XG5cdFx0XHRcdGlmICghYVN0YXRlIHx8ICFiU3RhdGUpIHJldHVybiBhLmRpc3RhbmNlIC0gYi5kaXN0YW5jZTtcblx0XHRcdFx0cmV0dXJuIGJTdGF0ZS5ldmVudHMucHJpb3JpdHkgLSBhU3RhdGUuZXZlbnRzLnByaW9yaXR5IHx8IGEuZGlzdGFuY2UgLSBiLmRpc3RhbmNlO1xuXHRcdFx0fSlcblx0XHRcdC8vIEZpbHRlciBvdXQgZHVwbGljYXRlc1xuXHRcdFx0LmZpbHRlcigoaXRlbSkgPT4ge1xuXHRcdFx0XHRjb25zdCBpZCA9IG1ha2VJZChpdGVtIGFzIE5ndEludGVyc2VjdGlvbik7XG5cdFx0XHRcdGlmIChkdXBsaWNhdGVzLmhhcyhpZCkpIHJldHVybiBmYWxzZTtcblx0XHRcdFx0ZHVwbGljYXRlcy5hZGQoaWQpO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL21yZG9vYi90aHJlZS5qcy9pc3N1ZXMvMTYwMzFcblx0XHQvLyBBbGxvdyBjdXN0b20gdXNlcmxhbmQgaW50ZXJzZWN0IHNvcnQgb3JkZXIsIHRoaXMgbGlrZWx5IG9ubHkgbWFrZXMgc2Vuc2Ugb24gdGhlIHJvb3QgZmlsdGVyXG5cdFx0aWYgKHN0YXRlLmV2ZW50cy5maWx0ZXIpIGhpdHMgPSBzdGF0ZS5ldmVudHMuZmlsdGVyKGhpdHMsIHN0b3JlKTtcblxuXHRcdC8vIEJ1YmJsZSB1cCB0aGUgZXZlbnRzLCBmaW5kIHRoZSBldmVudCBzb3VyY2UgKGV2ZW50T2JqZWN0KVxuXHRcdGZvciAoY29uc3QgaGl0IG9mIGhpdHMpIHtcblx0XHRcdGxldCBldmVudE9iamVjdDogVEhSRUUuT2JqZWN0M0QgfCBudWxsID0gaGl0Lm9iamVjdDtcblx0XHRcdC8vIGJ1YmJsZSBldmVudCB1cFxuXHRcdFx0d2hpbGUgKGV2ZW50T2JqZWN0KSB7XG5cdFx0XHRcdGlmIChnZXRMb2NhbFN0YXRlKGV2ZW50T2JqZWN0KS5ldmVudENvdW50KSB7XG5cdFx0XHRcdFx0aW50ZXJzZWN0aW9ucy5wdXNoKHsgLi4uaGl0LCBldmVudE9iamVjdCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRldmVudE9iamVjdCA9IGV2ZW50T2JqZWN0LnBhcmVudDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgaW50ZXJhY3Rpb24gaXMgY2FwdHVyZWQsIG1ha2UgYWxsIGNhcHR1cmluZyB0YXJnZXRzIHBhcnQgb2YgdGhlIGludGVyc2VjdC5cblx0XHRpZiAoJ3BvaW50ZXJJZCcgaW4gZXZlbnQgJiYgc3RhdGUuaW50ZXJuYWwuY2FwdHVyZWRNYXAuaGFzKGV2ZW50LnBvaW50ZXJJZCkpIHtcblx0XHRcdGZvciAobGV0IGNhcHR1cmVEYXRhIG9mIHN0YXRlLmludGVybmFsLmNhcHR1cmVkTWFwLmdldChldmVudC5wb2ludGVySWQpIS52YWx1ZXMoKSkge1xuXHRcdFx0XHRpZiAoIWR1cGxpY2F0ZXMuaGFzKG1ha2VJZChjYXB0dXJlRGF0YS5pbnRlcnNlY3Rpb24pKSkgaW50ZXJzZWN0aW9ucy5wdXNoKGNhcHR1cmVEYXRhLmludGVyc2VjdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBpbnRlcnNlY3Rpb25zO1xuXHR9XG5cblx0LyoqICBIYW5kbGVzIGludGVyc2VjdGlvbnMgYnkgZm9yd2FyZGluZyB0aGVtIHRvIGhhbmRsZXJzICovXG5cdGZ1bmN0aW9uIGhhbmRsZUludGVyc2VjdHMoXG5cdFx0aW50ZXJzZWN0aW9uczogTmd0SW50ZXJzZWN0aW9uW10sXG5cdFx0ZXZlbnQ6IE5ndERvbUV2ZW50LFxuXHRcdGRlbHRhOiBudW1iZXIsXG5cdFx0Y2FsbGJhY2s6IChldmVudDogTmd0VGhyZWVFdmVudDxOZ3REb21FdmVudD4pID0+IHZvaWQsXG5cdCkge1xuXHRcdGNvbnN0IHJvb3RTdGF0ZSA9IHN0b3JlLmdldCgpO1xuXG5cdFx0Ly8gSWYgYW55dGhpbmcgaGFzIGJlZW4gZm91bmQsIGZvcndhcmQgaXQgdG8gdGhlIGV2ZW50IGxpc3RlbmVyc1xuXHRcdGlmIChpbnRlcnNlY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IHsgc3RvcHBlZDogZmFsc2UgfTtcblx0XHRcdGZvciAoY29uc3QgaGl0IG9mIGludGVyc2VjdGlvbnMpIHtcblx0XHRcdFx0Y29uc3Qgc3RhdGUgPSBnZXRMb2NhbFN0YXRlKGhpdC5vYmplY3QpLnN0b3JlPy5nZXQoKSB8fCByb290U3RhdGU7XG5cdFx0XHRcdGNvbnN0IHsgcmF5Y2FzdGVyLCBwb2ludGVyLCBjYW1lcmEsIGludGVybmFsIH0gPSBzdGF0ZTtcblx0XHRcdFx0Y29uc3QgdW5wcm9qZWN0ZWRQb2ludCA9IG5ldyBUSFJFRS5WZWN0b3IzKHBvaW50ZXIueCwgcG9pbnRlci55LCAwKS51bnByb2plY3QoY2FtZXJhKTtcblx0XHRcdFx0Y29uc3QgaGFzUG9pbnRlckNhcHR1cmUgPSAoaWQ6IG51bWJlcikgPT4gaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KGlkKT8uaGFzKGhpdC5ldmVudE9iamVjdCkgPz8gZmFsc2U7XG5cblx0XHRcdFx0Y29uc3Qgc2V0UG9pbnRlckNhcHR1cmUgPSAoaWQ6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNhcHR1cmVEYXRhID0geyBpbnRlcnNlY3Rpb246IGhpdCwgdGFyZ2V0OiBldmVudC50YXJnZXQgYXMgRWxlbWVudCB9O1xuXHRcdFx0XHRcdGlmIChpbnRlcm5hbC5jYXB0dXJlZE1hcC5oYXMoaWQpKSB7XG5cdFx0XHRcdFx0XHQvLyBpZiB0aGUgcG9pbnRlcklkIHdhcyBwcmV2aW91c2x5IGNhcHR1cmVkLCB3ZSBhZGQgdGhlIGhpdCB0byB0aGVcblx0XHRcdFx0XHRcdC8vIGV2ZW50IGNhcHR1cmVkTWFwLlxuXHRcdFx0XHRcdFx0aW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KGlkKSEuc2V0KGhpdC5ldmVudE9iamVjdCwgY2FwdHVyZURhdGEpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBpZiB0aGUgcG9pbnRlcklkIHdhcyBub3QgcHJldmlvdXNseSBjYXB0dXJlZCwgd2UgY3JlYXRlIGEgbWFwXG5cdFx0XHRcdFx0XHQvLyBjb250YWluaW5nIHRoZSBoaXRPYmplY3QsIGFuZCB0aGUgaGl0LiBoaXRPYmplY3QgaXMgdXNlZCBmb3Jcblx0XHRcdFx0XHRcdC8vIGZhc3RlciBhY2Nlc3MuXG5cdFx0XHRcdFx0XHRpbnRlcm5hbC5jYXB0dXJlZE1hcC5zZXQoaWQsIG5ldyBNYXAoW1toaXQuZXZlbnRPYmplY3QsIGNhcHR1cmVEYXRhXV0pKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gQ2FsbCB0aGUgb3JpZ2luYWwgZXZlbnQgbm93XG5cdFx0XHRcdFx0KGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5zZXRQb2ludGVyQ2FwdHVyZShpZCk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uc3QgcmVsZWFzZVBvaW50ZXJDYXB0dXJlID0gKGlkOiBudW1iZXIpID0+IHtcblx0XHRcdFx0XHRjb25zdCBjYXB0dXJlcyA9IGludGVybmFsLmNhcHR1cmVkTWFwLmdldChpZCk7XG5cdFx0XHRcdFx0aWYgKGNhcHR1cmVzKSB7XG5cdFx0XHRcdFx0XHRyZWxlYXNlSW50ZXJuYWxQb2ludGVyQ2FwdHVyZShpbnRlcm5hbC5jYXB0dXJlZE1hcCwgaGl0LmV2ZW50T2JqZWN0LCBjYXB0dXJlcywgaWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBBZGQgbmF0aXZlIGV2ZW50IHByb3BzXG5cdFx0XHRcdGNvbnN0IGV4dHJhY3RFdmVudFByb3BzOiBhbnkgPSB7fTtcblx0XHRcdFx0Ly8gVGhpcyBpdGVyYXRlcyBvdmVyIHRoZSBldmVudCdzIHByb3BlcnRpZXMgaW5jbHVkaW5nIHRoZSBpbmhlcml0ZWQgb25lcy4gTmF0aXZlIFBvaW50ZXJFdmVudHMgaGF2ZSBtb3N0IG9mIHRoZWlyIHByb3BzIGFzIGdldHRlcnMgd2hpY2ggYXJlIGluaGVyaXRlZCwgYnV0IHBvbHlmaWxsZWQgUG9pbnRlckV2ZW50cyBoYXZlIHRoZW0gYWxsIGFzIHRoZWlyIG93biBwcm9wZXJ0aWVzIChpLmUuIG5vdCBpbmhlcml0ZWQpLiBXZSBjYW4ndCB1c2UgT2JqZWN0LmtleXMoKSBvciBPYmplY3QuZW50cmllcygpIGFzIHRoZXkgb25seSByZXR1cm4gXCJvd25cIiBwcm9wZXJ0aWVzOyBub3IgT2JqZWN0LmdldFByb3RvdHlwZU9mKGV2ZW50KSBhcyB0aGF0ICpkb2Vzbid0KiByZXR1cm4gXCJvd25cIiBwcm9wZXJ0aWVzLCBvbmx5IGluaGVyaXRlZCBvbmVzLlxuXHRcdFx0XHRmb3IgKGxldCBwcm9wIGluIGV2ZW50KSB7XG5cdFx0XHRcdFx0bGV0IHByb3BlcnR5ID0gZXZlbnRbcHJvcCBhcyBrZXlvZiBOZ3REb21FdmVudF07XG5cdFx0XHRcdFx0Ly8gT25seSBjb3B5IG92ZXIgYXRvbWljcywgbGVhdmUgZnVuY3Rpb25zIGFsb25lIGFzIHRoZXNlIHNob3VsZCBiZVxuXHRcdFx0XHRcdC8vIGNhbGxlZCBhcyBldmVudC5uYXRpdmVFdmVudC5mbigpXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBwcm9wZXJ0eSAhPT0gJ2Z1bmN0aW9uJykgZXh0cmFjdEV2ZW50UHJvcHNbcHJvcF0gPSBwcm9wZXJ0eTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHJheWNhc3RFdmVudDogTmd0VGhyZWVFdmVudDxOZ3REb21FdmVudD4gPSB7XG5cdFx0XHRcdFx0Li4uaGl0LFxuXHRcdFx0XHRcdC4uLmV4dHJhY3RFdmVudFByb3BzLFxuXHRcdFx0XHRcdHBvaW50ZXIsXG5cdFx0XHRcdFx0aW50ZXJzZWN0aW9ucyxcblx0XHRcdFx0XHRzdG9wcGVkOiBsb2NhbFN0YXRlLnN0b3BwZWQsXG5cdFx0XHRcdFx0ZGVsdGEsXG5cdFx0XHRcdFx0dW5wcm9qZWN0ZWRQb2ludCxcblx0XHRcdFx0XHRyYXk6IHJheWNhc3Rlci5yYXksXG5cdFx0XHRcdFx0Y2FtZXJhLFxuXHRcdFx0XHRcdC8vIEhpamFjayBzdG9wUHJvcGFnYXRpb24sIHdoaWNoIGp1c3Qgc2V0cyBhIGZsYWdcblx0XHRcdFx0XHRzdG9wUHJvcGFnYXRpb24oKSB7XG5cdFx0XHRcdFx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vcG1uZHJzL3JlYWN0LXRocmVlLWZpYmVyL2lzc3Vlcy81OTZcblx0XHRcdFx0XHRcdC8vIEV2ZW50cyBhcmUgbm90IGFsbG93ZWQgdG8gc3RvcCBwcm9wYWdhdGlvbiBpZiB0aGUgcG9pbnRlciBoYXMgYmVlbiBjYXB0dXJlZFxuXHRcdFx0XHRcdFx0Y29uc3QgY2FwdHVyZXNGb3JQb2ludGVyID0gJ3BvaW50ZXJJZCcgaW4gZXZlbnQgJiYgaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KGV2ZW50LnBvaW50ZXJJZCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIG9ubHkgYXV0aG9yaXplIHN0b3BQcm9wYWdhdGlvbi4uLlxuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHQvLyAuLi5pZiB0aGlzIHBvaW50ZXIgaGFzbid0IGJlZW4gY2FwdHVyZWRcblx0XHRcdFx0XHRcdFx0IWNhcHR1cmVzRm9yUG9pbnRlciB8fFxuXHRcdFx0XHRcdFx0XHQvLyAuLi4gb3IgaWYgdGhlIGhpdCBvYmplY3QgaXMgY2FwdHVyaW5nIHRoZSBwb2ludGVyXG5cdFx0XHRcdFx0XHRcdGNhcHR1cmVzRm9yUG9pbnRlci5oYXMoaGl0LmV2ZW50T2JqZWN0KVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdHJheWNhc3RFdmVudC5zdG9wcGVkID0gbG9jYWxTdGF0ZS5zdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0Ly8gUHJvcGFnYXRpb24gaXMgc3RvcHBlZCwgcmVtb3ZlIGFsbCBvdGhlciBob3ZlciByZWNvcmRzXG5cdFx0XHRcdFx0XHRcdC8vIEFuIGV2ZW50IGhhbmRsZXIgaXMgb25seSBhbGxvd2VkIHRvIGZsdXNoIG90aGVyIGhhbmRsZXJzIGlmIGl0IGlzIGhvdmVyZWQgaXRzZWxmXG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5ob3ZlcmVkLnNpemUgJiZcblx0XHRcdFx0XHRcdFx0XHRBcnJheS5mcm9tKGludGVybmFsLmhvdmVyZWQudmFsdWVzKCkpLmZpbmQoKGkpID0+IGkuZXZlbnRPYmplY3QgPT09IGhpdC5ldmVudE9iamVjdClcblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gT2JqZWN0cyBjYW5ub3QgZmx1c2ggb3V0IGhpZ2hlciB1cCBvYmplY3RzIHRoYXQgaGF2ZSBhbHJlYWR5IGNhdWdodCB0aGUgZXZlbnRcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBoaWdoZXIgPSBpbnRlcnNlY3Rpb25zLnNsaWNlKDAsIGludGVyc2VjdGlvbnMuaW5kZXhPZihoaXQpKTtcblx0XHRcdFx0XHRcdFx0XHRjYW5jZWxQb2ludGVyKFsuLi5oaWdoZXIsIGhpdF0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQvLyB0aGVyZSBzaG91bGQgYmUgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRhcmdldCBhbmQgY3VycmVudFRhcmdldFxuXHRcdFx0XHRcdHRhcmdldDogeyBoYXNQb2ludGVyQ2FwdHVyZSwgc2V0UG9pbnRlckNhcHR1cmUsIHJlbGVhc2VQb2ludGVyQ2FwdHVyZSB9LFxuXHRcdFx0XHRcdGN1cnJlbnRUYXJnZXQ6IHsgaGFzUG9pbnRlckNhcHR1cmUsIHNldFBvaW50ZXJDYXB0dXJlLCByZWxlYXNlUG9pbnRlckNhcHR1cmUgfSxcblx0XHRcdFx0XHRuYXRpdmVFdmVudDogZXZlbnQsXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gQ2FsbCBzdWJzY3JpYmVyc1xuXHRcdFx0XHRjYWxsYmFjayhyYXljYXN0RXZlbnQpO1xuXHRcdFx0XHQvLyBFdmVudCBidWJibGluZyBtYXkgYmUgaW50ZXJydXB0ZWQgYnkgc3RvcFByb3BhZ2F0aW9uXG5cdFx0XHRcdGlmIChsb2NhbFN0YXRlLnN0b3BwZWQgPT09IHRydWUpIGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gaW50ZXJzZWN0aW9ucztcblx0fVxuXG5cdGZ1bmN0aW9uIGNhbmNlbFBvaW50ZXIoaW50ZXJzZWN0aW9uczogTmd0SW50ZXJzZWN0aW9uW10pIHtcblx0XHRjb25zdCBpbnRlcm5hbCA9IHN0b3JlLmdldCgnaW50ZXJuYWwnKTtcblx0XHRmb3IgKGNvbnN0IGhvdmVyZWRPYmogb2YgaW50ZXJuYWwuaG92ZXJlZC52YWx1ZXMoKSkge1xuXHRcdFx0Ly8gV2hlbiBubyBvYmplY3RzIHdlcmUgaGl0IG9yIHRoZSB0aGUgaG92ZXJlZCBvYmplY3Qgd2Fzbid0IGZvdW5kIHVuZGVybmVhdGggdGhlIGN1cnNvclxuXHRcdFx0Ly8gd2UgY2FsbCBvblBvaW50ZXJPdXQgYW5kIGRlbGV0ZSB0aGUgb2JqZWN0IGZyb20gdGhlIGhvdmVyZWQtZWxlbWVudHMgbWFwXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCFpbnRlcnNlY3Rpb25zLmxlbmd0aCB8fFxuXHRcdFx0XHQhaW50ZXJzZWN0aW9ucy5maW5kKFxuXHRcdFx0XHRcdChoaXQpID0+XG5cdFx0XHRcdFx0XHRoaXQub2JqZWN0ID09PSBob3ZlcmVkT2JqLm9iamVjdCAmJlxuXHRcdFx0XHRcdFx0aGl0LmluZGV4ID09PSBob3ZlcmVkT2JqLmluZGV4ICYmXG5cdFx0XHRcdFx0XHRoaXQuaW5zdGFuY2VJZCA9PT0gaG92ZXJlZE9iai5pbnN0YW5jZUlkLFxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgZXZlbnRPYmplY3QgPSBob3ZlcmVkT2JqLmV2ZW50T2JqZWN0O1xuXHRcdFx0XHRjb25zdCBpbnN0YW5jZSA9IGdldExvY2FsU3RhdGUoZXZlbnRPYmplY3QpO1xuXHRcdFx0XHRjb25zdCBoYW5kbGVycyA9IGluc3RhbmNlPy5oYW5kbGVycztcblx0XHRcdFx0aW50ZXJuYWwuaG92ZXJlZC5kZWxldGUobWFrZUlkKGhvdmVyZWRPYmopKTtcblx0XHRcdFx0aWYgKGluc3RhbmNlPy5ldmVudENvdW50KSB7XG5cdFx0XHRcdFx0Ly8gQ2xlYXIgb3V0IGludGVyc2VjdHMsIHRoZXkgYXJlIG91dGRhdGVkIGJ5IG5vd1xuXHRcdFx0XHRcdGNvbnN0IGRhdGEgPSB7IC4uLmhvdmVyZWRPYmosIGludGVyc2VjdGlvbnMgfTtcblx0XHRcdFx0XHRoYW5kbGVycz8ucG9pbnRlcm91dD8uKGRhdGEgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KTtcblx0XHRcdFx0XHRoYW5kbGVycz8ucG9pbnRlcmxlYXZlPy4oZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gcG9pbnRlck1pc3NlZChldmVudDogTW91c2VFdmVudCwgb2JqZWN0czogVEhSRUUuT2JqZWN0M0RbXSkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgaW5zdGFuY2UgPSBnZXRMb2NhbFN0YXRlKG9iamVjdHNbaV0pO1xuXHRcdFx0aW5zdGFuY2U/LmhhbmRsZXJzLnBvaW50ZXJtaXNzZWQ/LihldmVudCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gaGFuZGxlUG9pbnRlcihuYW1lOiBzdHJpbmcpIHtcblx0XHQvLyBEZWFsIHdpdGggY2FuY2VsYXRpb25cblx0XHRzd2l0Y2ggKG5hbWUpIHtcblx0XHRcdGNhc2UgJ3BvaW50ZXJsZWF2ZSc6XG5cdFx0XHRjYXNlICdwb2ludGVyY2FuY2VsJzpcblx0XHRcdFx0cmV0dXJuICgpID0+IGNhbmNlbFBvaW50ZXIoW10pO1xuXHRcdFx0Y2FzZSAnbG9zdHBvaW50ZXJjYXB0dXJlJzpcblx0XHRcdFx0cmV0dXJuIChldmVudDogTmd0RG9tRXZlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCB7IGludGVybmFsIH0gPSBzdG9yZS5nZXQoKTtcblx0XHRcdFx0XHRpZiAoJ3BvaW50ZXJJZCcgaW4gZXZlbnQgJiYgaW50ZXJuYWwuY2FwdHVyZWRNYXAuaGFzKGV2ZW50LnBvaW50ZXJJZCkpIHtcblx0XHRcdFx0XHRcdC8vIElmIHRoZSBvYmplY3QgZXZlbnQgaW50ZXJmYWNlIGhhZCBvbkxvc3RQb2ludGVyQ2FwdHVyZSwgd2UnZCBjYWxsIGl0IGhlcmUgb24gZXZlcnlcblx0XHRcdFx0XHRcdC8vIG9iamVjdCB0aGF0J3MgZ2V0dGluZyByZW1vdmVkLlxuXHRcdFx0XHRcdFx0aW50ZXJuYWwuY2FwdHVyZWRNYXAuZGVsZXRlKGV2ZW50LnBvaW50ZXJJZCk7XG5cdFx0XHRcdFx0XHRjYW5jZWxQb2ludGVyKFtdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gQW55IG90aGVyIHBvaW50ZXIgZ29lcyBoZXJlIC4uLlxuXHRcdHJldHVybiBmdW5jdGlvbiBoYW5kbGVFdmVudChldmVudDogTmd0RG9tRXZlbnQpIHtcblx0XHRcdGNvbnN0IHBvaW50ZXJNaXNzZWQkID0gKHN0b3JlIGFzIE5ndEFueVJlY29yZClbJ3BvaW50ZXJNaXNzZWQkJ107XG5cdFx0XHRjb25zdCBpbnRlcm5hbCA9IHN0b3JlLmdldCgnaW50ZXJuYWwnKTtcblxuXHRcdFx0Ly8gcHJlcGFyZVJheShldmVudClcblx0XHRcdGludGVybmFsLmxhc3RFdmVudC5uYXRpdmVFbGVtZW50ID0gZXZlbnQ7XG5cblx0XHRcdC8vIEdldCBmcmVzaCBpbnRlcnNlY3RzXG5cdFx0XHRjb25zdCBpc1BvaW50ZXJNb3ZlID0gbmFtZSA9PT0gJ3BvaW50ZXJtb3ZlJztcblx0XHRcdGNvbnN0IGlzQ2xpY2tFdmVudCA9IG5hbWUgPT09ICdjbGljaycgfHwgbmFtZSA9PT0gJ2NvbnRleHRtZW51JyB8fCBuYW1lID09PSAnZGJsY2xpY2snO1xuXHRcdFx0Y29uc3QgZmlsdGVyID0gaXNQb2ludGVyTW92ZSA/IGZpbHRlclBvaW50ZXJFdmVudHMgOiB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBoaXRzID0gaW50ZXJzZWN0KGV2ZW50LCBmaWx0ZXIpO1xuXHRcdFx0Y29uc3QgZGVsdGEgPSBpc0NsaWNrRXZlbnQgPyBjYWxjdWxhdGVEaXN0YW5jZShldmVudCkgOiAwO1xuXG5cdFx0XHQvLyBTYXZlIGluaXRpYWwgY29vcmRpbmF0ZXMgb24gcG9pbnRlci1kb3duXG5cdFx0XHRpZiAobmFtZSA9PT0gJ3BvaW50ZXJkb3duJykge1xuXHRcdFx0XHRpbnRlcm5hbC5pbml0aWFsQ2xpY2sgPSBbZXZlbnQub2Zmc2V0WCwgZXZlbnQub2Zmc2V0WV07XG5cdFx0XHRcdGludGVybmFsLmluaXRpYWxIaXRzID0gaGl0cy5tYXAoKGhpdCkgPT4gaGl0LmV2ZW50T2JqZWN0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBjbGljayB5aWVsZHMgbm8gcmVzdWx0cywgcGFzcyBpdCBiYWNrIHRvIHRoZSB1c2VyIGFzIGEgbWlzc1xuXHRcdFx0Ly8gTWlzc2VkIGV2ZW50cyBoYXZlIHRvIGNvbWUgZmlyc3QgaW4gb3JkZXIgdG8gZXN0YWJsaXNoIHVzZXItbGFuZCBzaWRlLWVmZmVjdCBjbGVhbiB1cFxuXHRcdFx0aWYgKGlzQ2xpY2tFdmVudCAmJiAhaGl0cy5sZW5ndGgpIHtcblx0XHRcdFx0aWYgKGRlbHRhIDw9IDIpIHtcblx0XHRcdFx0XHRwb2ludGVyTWlzc2VkKGV2ZW50LCBpbnRlcm5hbC5pbnRlcmFjdGlvbik7XG5cdFx0XHRcdFx0cG9pbnRlck1pc3NlZCQubmV4dChldmVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBjYXJlIG9mIHVuaG92ZXJcblx0XHRcdGlmIChpc1BvaW50ZXJNb3ZlKSBjYW5jZWxQb2ludGVyKGhpdHMpO1xuXG5cdFx0XHRmdW5jdGlvbiBvbkludGVyc2VjdChkYXRhOiBOZ3RUaHJlZUV2ZW50PE5ndERvbUV2ZW50Pikge1xuXHRcdFx0XHRjb25zdCBldmVudE9iamVjdCA9IGRhdGEuZXZlbnRPYmplY3Q7XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlID0gZ2V0TG9jYWxTdGF0ZShldmVudE9iamVjdCk7XG5cdFx0XHRcdGNvbnN0IGhhbmRsZXJzID0gaW5zdGFuY2U/LmhhbmRsZXJzO1xuXG5cdFx0XHRcdC8vIENoZWNrIHByZXNlbmNlIG9mIGhhbmRsZXJzXG5cdFx0XHRcdGlmICghaW5zdGFuY2U/LmV2ZW50Q291bnQpIHJldHVybjtcblxuXHRcdFx0XHQvKlxuICAgICAgICBNQVlCRSBUT0RPLCBERUxFVEUgSUYgTk9UOlxuICAgICAgICAgIENoZWNrIGlmIHRoZSBvYmplY3QgaXMgY2FwdHVyZWQsIGNhcHR1cmVkIGV2ZW50cyBzaG91bGQgbm90IGhhdmUgaW50ZXJzZWN0cyBydW5uaW5nIGluIHBhcmFsbGVsXG4gICAgICAgICAgQnV0IHdvdWxkbid0IGl0IGJlIGJldHRlciB0byBqdXN0IHJlcGxhY2UgY2FwdHVyZWRNYXAgd2l0aCBhIHNpbmdsZSBlbnRyeT9cbiAgICAgICAgICBBbHNvLCBhcmUgd2UgT0sgd2l0aCBzdHJhaWdodCB1cCBtYWtpbmcgcGlja2luZyB1cCBtdWx0aXBsZSBvYmplY3RzIGltcG9zc2libGU/XG5cbiAgICAgICAgY29uc3QgcG9pbnRlcklkID0gKGRhdGEgYXMgVGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KS5wb2ludGVySWRcbiAgICAgICAgaWYgKHBvaW50ZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgY2FwdHVyZWRNZXNoU2V0ID0gaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KHBvaW50ZXJJZClcbiAgICAgICAgICBpZiAoY2FwdHVyZWRNZXNoU2V0KSB7XG4gICAgICAgICAgICBjb25zdCBjYXB0dXJlZCA9IGNhcHR1cmVkTWVzaFNldC5nZXQoZXZlbnRPYmplY3QpXG4gICAgICAgICAgICBpZiAoY2FwdHVyZWQgJiYgY2FwdHVyZWQubG9jYWxTdGF0ZS5zdG9wcGVkKSByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH0qL1xuXG5cdFx0XHRcdGlmIChpc1BvaW50ZXJNb3ZlKSB7XG5cdFx0XHRcdFx0Ly8gTW92ZSBldmVudCAuLi5cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRoYW5kbGVycz8ucG9pbnRlcm92ZXIgfHxcblx0XHRcdFx0XHRcdGhhbmRsZXJzPy5wb2ludGVyZW50ZXIgfHxcblx0XHRcdFx0XHRcdGhhbmRsZXJzPy5wb2ludGVyb3V0IHx8XG5cdFx0XHRcdFx0XHRoYW5kbGVycz8ucG9pbnRlcmxlYXZlXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHQvLyBXaGVuIGVudGVyIG9yIG91dCBpcyBwcmVzZW50IHRha2UgY2FyZSBvZiBob3Zlci1zdGF0ZVxuXHRcdFx0XHRcdFx0Y29uc3QgaWQgPSBtYWtlSWQoZGF0YSk7XG5cdFx0XHRcdFx0XHRjb25zdCBob3ZlcmVkSXRlbSA9IGludGVybmFsLmhvdmVyZWQuZ2V0KGlkKTtcblx0XHRcdFx0XHRcdGlmICghaG92ZXJlZEl0ZW0pIHtcblx0XHRcdFx0XHRcdFx0Ly8gSWYgdGhlIG9iamVjdCB3YXNuJ3QgcHJldmlvdXNseSBob3ZlcmVkLCBib29rIGl0IGFuZCBjYWxsIGl0cyBoYW5kbGVyXG5cdFx0XHRcdFx0XHRcdGludGVybmFsLmhvdmVyZWQuc2V0KGlkLCBkYXRhKTtcblx0XHRcdFx0XHRcdFx0aGFuZGxlcnMucG9pbnRlcm92ZXI/LihkYXRhIGFzIE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pik7XG5cdFx0XHRcdFx0XHRcdGhhbmRsZXJzLnBvaW50ZXJlbnRlcj8uKGRhdGEgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaG92ZXJlZEl0ZW0uc3RvcHBlZCkge1xuXHRcdFx0XHRcdFx0XHQvLyBJZiB0aGUgb2JqZWN0IHdhcyBwcmV2aW91c2x5IGhvdmVyZWQgYW5kIHN0b3BwZWQsIHdlIHNob3VsZG4ndCBhbGxvdyBvdGhlciBpdGVtcyB0byBwcm9jZWVkXG5cdFx0XHRcdFx0XHRcdGRhdGEuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIENhbGwgbW91c2UgbW92ZVxuXHRcdFx0XHRcdGhhbmRsZXJzPy5wb2ludGVybW92ZT8uKGRhdGEgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBBbGwgb3RoZXIgZXZlbnRzIC4uLlxuXHRcdFx0XHRcdGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVycz8uW25hbWUgYXMga2V5b2YgTmd0RXZlbnRIYW5kbGVyc10gYXMgKFxuXHRcdFx0XHRcdFx0ZXZlbnQ6IE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pixcblx0XHRcdFx0XHQpID0+IHZvaWQ7XG5cdFx0XHRcdFx0aWYgKGhhbmRsZXIpIHtcblx0XHRcdFx0XHRcdC8vIEZvcndhcmQgYWxsIGV2ZW50cyBiYWNrIHRvIHRoZWlyIHJlc3BlY3RpdmUgaGFuZGxlcnMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGNsaWNrIGV2ZW50cyxcblx0XHRcdFx0XHRcdC8vIHdoaWNoIG11c3QgdXNlIHRoZSBpbml0aWFsIHRhcmdldFxuXHRcdFx0XHRcdFx0aWYgKCFpc0NsaWNrRXZlbnQgfHwgaW50ZXJuYWwuaW5pdGlhbEhpdHMuaW5jbHVkZXMoZXZlbnRPYmplY3QpKSB7XG5cdFx0XHRcdFx0XHRcdC8vIE1pc3NlZCBldmVudHMgaGF2ZSB0byBjb21lIGZpcnN0XG5cdFx0XHRcdFx0XHRcdHBvaW50ZXJNaXNzZWQoXG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0XHRcdFx0aW50ZXJuYWwuaW50ZXJhY3Rpb24uZmlsdGVyKChvYmplY3QpID0+ICFpbnRlcm5hbC5pbml0aWFsSGl0cy5pbmNsdWRlcyhvYmplY3QpKSxcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0Ly8gTm93IGNhbGwgdGhlIGhhbmRsZXJcblx0XHRcdFx0XHRcdFx0aGFuZGxlcihkYXRhIGFzIE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFRyaWdnZXIgb25Qb2ludGVyTWlzc2VkIG9uIGFsbCBlbGVtZW50cyB0aGF0IGhhdmUgcG9pbnRlciBvdmVyL291dCBoYW5kbGVycywgYnV0IG5vdCBjbGljayBhbmQgd2VyZW4ndCBoaXRcblx0XHRcdFx0XHRcdGlmIChpc0NsaWNrRXZlbnQgJiYgaW50ZXJuYWwuaW5pdGlhbEhpdHMuaW5jbHVkZXMoZXZlbnRPYmplY3QpKSB7XG5cdFx0XHRcdFx0XHRcdHBvaW50ZXJNaXNzZWQoXG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0XHRcdFx0aW50ZXJuYWwuaW50ZXJhY3Rpb24uZmlsdGVyKChvYmplY3QpID0+ICFpbnRlcm5hbC5pbml0aWFsSGl0cy5pbmNsdWRlcyhvYmplY3QpKSxcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aGFuZGxlSW50ZXJzZWN0cyhoaXRzLCBldmVudCwgZGVsdGEsIG9uSW50ZXJzZWN0KTtcblx0XHR9O1xuXHR9XG5cblx0cmV0dXJuIHsgaGFuZGxlUG9pbnRlciB9O1xufVxuIl19
359
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQTBGdEM7OztHQUdHO0FBQ0gsU0FBUyw2QkFBNkIsQ0FDckMsV0FBc0UsRUFDdEUsR0FBbUIsRUFDbkIsUUFBc0QsRUFDdEQsU0FBaUI7SUFFakIsTUFBTSxXQUFXLEdBQXdDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0UsSUFBSSxXQUFXLEVBQUU7UUFDaEIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQix5REFBeUQ7UUFDekQsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUN4QixXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlCLFdBQVcsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDcEQ7S0FDRDtBQUNGLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBK0IsRUFBRSxNQUFzQjtJQUMxRixNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2pDLHVEQUF1RDtJQUN2RCxRQUFRLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDeEUsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFB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LENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDL0UsQ0FBQzs0QkFDRix1QkFBdUI7NEJBQ3ZCLE9BQU8sQ0FBQyxJQUFtQyxDQUFDLENBQUM7eUJBQzdDO3FCQUNEO3lCQUFNO3dCQUNOLDZHQUE2Rzt3QkFDN0csSUFBSSxZQUFZLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7NEJBQy9ELGFBQWEsQ0FDWixLQUFLLEVBQ0wsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDL0UsQ0FBQzt5QkFDRjtxQkFDRDtpQkFDRDtZQUNGLENBQUM7WUFFRCxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBnZXRMb2NhbFN0YXRlIH0gZnJvbSAnLi9pbnN0YW5jZSc7XG5pbXBvcnQgdHlwZSB7IE5ndFN0YXRlIH0gZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgdHlwZSB7IE5ndEFueVJlY29yZCwgTmd0UHJvcGVydGllcyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgbWFrZUlkIH0gZnJvbSAnLi91dGlscy9tYWtlJztcbmltcG9ydCB0eXBlIHsgTmd0U2lnbmFsU3RvcmUgfSBmcm9tICcuL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0SW50ZXJzZWN0aW9uIGV4dGVuZHMgVEhSRUUuSW50ZXJzZWN0aW9uIHtcblx0LyoqIFRoZSBldmVudCBzb3VyY2UgKHRoZSBvYmplY3Qgd2hpY2ggcmVnaXN0ZXJlZCB0aGUgaGFuZGxlcikgKi9cblx0ZXZlbnRPYmplY3Q6IFRIUkVFLk9iamVjdDNEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndEludGVyc2VjdGlvbkV2ZW50PFRTb3VyY2VFdmVudD4gZXh0ZW5kcyBOZ3RJbnRlcnNlY3Rpb24ge1xuXHQvKiogVGhlIGV2ZW50IHNvdXJjZSAodGhlIG9iamVjdCB3aGljaCByZWdpc3RlcmVkIHRoZSBoYW5kbGVyKSAqL1xuXHRldmVudE9iamVjdDogVEhSRUUuT2JqZWN0M0Q7XG5cdC8qKiBBbiBhcnJheSBvZiBpbnRlcnNlY3Rpb25zICovXG5cdGludGVyc2VjdGlvbnM6IE5ndEludGVyc2VjdGlvbltdO1xuXHQvKiogdmVjMy5zZXQocG9pbnRlci54LCBwb2ludGVyLnksIDApLnVucHJvamVjdChjYW1lcmEpICovXG5cdHVucHJvamVjdGVkUG9pbnQ6IFRIUkVFLlZlY3RvcjM7XG5cdC8qKiBOb3JtYWxpemVkIGV2ZW50IGNvb3JkaW5hdGVzICovXG5cdHBvaW50ZXI6IFRIUkVFLlZlY3RvcjI7XG5cdC8qKiBEZWx0YSBiZXR3ZWVuIGZpcnN0IGNsaWNrIGFuZCB0aGlzIGV2ZW50ICovXG5cdGRlbHRhOiBudW1iZXI7XG5cdC8qKiBUaGUgcmF5IHRoYXQgcGllcmNlZCBpdCAqL1xuXHRyYXk6IFRIUkVFLlJheTtcblx0LyoqIFRoZSBjYW1lcmEgdGhhdCB3YXMgdXNlZCBieSB0aGUgcmF5Y2FzdGVyICovXG5cdGNhbWVyYTogTmd0Q2FtZXJhO1xuXHQvKiogc3RvcFByb3BhZ2F0aW9uIHdpbGwgc3RvcCB1bmRlcmx5aW5nIGhhbmRsZXJzIGZyb20gZmlyaW5nICovXG5cdHN0b3BQcm9wYWdhdGlvbjogKCkgPT4gdm9pZDtcblx0LyoqIFRoZSBvcmlnaW5hbCBob3N0IGV2ZW50ICovXG5cdG5hdGl2ZUV2ZW50OiBUU291cmNlRXZlbnQ7XG5cdC8qKiBJZiB0aGUgZXZlbnQgd2FzIHN0b3BwZWQgYnkgY2FsbGluZyBzdG9wUHJvcGFnYXRpb24gKi9cblx0c3RvcHBlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgTmd0Q2FtZXJhID0gVEhSRUUuT3J0aG9ncmFwaGljQ2FtZXJhIHwgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmE7XG5leHBvcnQgdHlwZSBOZ3RUaHJlZUV2ZW50PFRFdmVudD4gPSBOZ3RJbnRlcnNlY3Rpb25FdmVudDxURXZlbnQ+ICYgTmd0UHJvcGVydGllczxURXZlbnQ+O1xuZXhwb3J0IHR5cGUgTmd0RG9tRXZlbnQgPSBQb2ludGVyRXZlbnQgfCBNb3VzZUV2ZW50IHwgV2hlZWxFdmVudDtcblxuZXhwb3J0IHR5cGUgTmd0RXZlbnRIYW5kbGVycyA9IHtcblx0Y2xpY2s/OiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8TW91c2VFdmVudD4pID0+IHZvaWQ7XG5cdGNvbnRleHRtZW51PzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+KSA9PiB2b2lkO1xuXHRkYmxjbGljaz86IChldmVudDogTmd0VGhyZWVFdmVudDxNb3VzZUV2ZW50PikgPT4gdm9pZDtcblx0cG9pbnRlcnVwPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG5cdHBvaW50ZXJkb3duPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG5cdHBvaW50ZXJvdmVyPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG5cdHBvaW50ZXJvdXQ/OiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50PikgPT4gdm9pZDtcblx0cG9pbnRlcmVudGVyPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG5cdHBvaW50ZXJsZWF2ZT86IChldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSA9PiB2b2lkO1xuXHRwb2ludGVybW92ZT86IChldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSA9PiB2b2lkO1xuXHRwb2ludGVybWlzc2VkPzogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuXHRwb2ludGVyY2FuY2VsPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG5cdHdoZWVsPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFdoZWVsRXZlbnQ+KSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0RXZlbnRzID0ge1xuXHRbVEV2ZW50IGluIGtleW9mIE5ndEV2ZW50SGFuZGxlcnNdLT86IEV2ZW50TGlzdGVuZXI7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RGaWx0ZXJGdW5jdGlvbiA9IChpdGVtczogVEhSRUUuSW50ZXJzZWN0aW9uW10sIHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4pID0+IFRIUkVFLkludGVyc2VjdGlvbltdO1xuZXhwb3J0IHR5cGUgTmd0Q29tcHV0ZUZ1bmN0aW9uID0gKFxuXHRldmVudDogTmd0RG9tRXZlbnQsXG5cdHJvb3Q6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPixcblx0cHJldmlvdXM6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPiB8IG51bGwsXG4pID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0RXZlbnRNYW5hZ2VyPFRUYXJnZXQ+IHtcblx0LyoqIERldGVybWluZXMgaWYgdGhlIGV2ZW50IGxheWVyIGlzIGFjdGl2ZSAqL1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHQvKiogRXZlbnQgbGF5ZXIgcHJpb3JpdHksIGhpZ2hlciBwcmlvcml0aXplZCBsYXllcnMgY29tZSBmaXJzdCBhbmQgbWF5IHN0b3AoLXByb3BhZ2F0ZSkgbG93ZXIgbGF5ZXIgICovXG5cdHByaW9yaXR5OiBudW1iZXI7XG5cdC8qKiBUaGUgY29tcHV0ZSBmdW5jdGlvbiBuZWVkcyB0byBzZXQgdXAgdGhlIHJheWNhc3RlciBhbmQgYW4geHktIHBvaW50ZXIgICovXG5cdGNvbXB1dGU/OiBOZ3RDb21wdXRlRnVuY3Rpb247XG5cdC8qKiBUaGUgZmlsdGVyIGNhbiByZS1vcmRlciBvciByZS1zdHJ1Y3R1cmUgdGhlIGludGVyc2VjdGlvbnMgICovXG5cdGZpbHRlcj86IE5ndEZpbHRlckZ1bmN0aW9uO1xuXHQvKiogVGhlIHRhcmdldCBub2RlIHRoZSBldmVudCBsYXllciBpcyB0aWVkIHRvICovXG5cdGNvbm5lY3RlZD86IFRUYXJnZXQ7XG5cdC8qKiBBbGwgdGhlIHBvaW50ZXIgZXZlbnQgaGFuZGxlcnMgdGhyb3VnaCB3aGljaCB0aGUgaG9zdCBmb3J3YXJkcyBuYXRpdmUgZXZlbnRzICovXG5cdGhhbmRsZXJzPzogTmd0RXZlbnRzO1xuXHQvKiogQWxsb3dzIHJlLWNvbm5lY3RpbmcgdG8gYW5vdGhlciB0YXJnZXQgKi9cblx0Y29ubmVjdD86ICh0YXJnZXQ6IFRUYXJnZXQpID0+IHZvaWQ7XG5cdC8qKiBSZW1vdmVzIGFsbCBleGlzdGluZyBldmVudHMgaGFuZGxlcnMgZnJvbSB0aGUgdGFyZ2V0ICovXG5cdGRpc2Nvbm5lY3Q/OiAoKSA9PiB2b2lkO1xuXHQvKiogVHJpZ2dlcnMgYSBvblBvaW50ZXJNb3ZlIHdpdGggdGhlIGxhc3Qga25vd24gZXZlbnQuIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBlbmFibGUgcmF5Y2FzdGluZyB3aXRob3V0XG5cdCAqICBleHBsaWNpdCB1c2VyIGludGVyYWN0aW9uLCBmb3IgaW5zdGFuY2Ugd2hlbiB0aGUgY2FtZXJhIG1vdmVzIGEgaG92ZXJhYmxlIG9iamVjdCB1bmRlcm5lYXRoIHRoZSBjdXJzb3IuXG5cdCAqL1xuXHR1cGRhdGU/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndFBvaW50ZXJDYXB0dXJlVGFyZ2V0IHtcblx0aW50ZXJzZWN0aW9uOiBOZ3RJbnRlcnNlY3Rpb247XG5cdHRhcmdldDogRWxlbWVudDtcbn1cblxuLyoqXG4gKiBSZWxlYXNlIHBvaW50ZXIgY2FwdHVyZXMuXG4gKiBUaGlzIGlzIGNhbGxlZCBieSByZWxlYXNlUG9pbnRlckNhcHR1cmUgaW4gdGhlIEFQSSwgYW5kIHdoZW4gYW4gb2JqZWN0IGlzIHJlbW92ZWQuXG4gKi9cbmZ1bmN0aW9uIHJlbGVhc2VJbnRlcm5hbFBvaW50ZXJDYXB0dXJlKFxuXHRjYXB0dXJlZE1hcDogTWFwPG51bWJlciwgTWFwPFRIUkVFLk9iamVjdDNELCBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldD4+LFxuXHRvYmo6IFRIUkVFLk9iamVjdDNELFxuXHRjYXB0dXJlczogTWFwPFRIUkVFLk9iamVjdDNELCBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldD4sXG5cdHBvaW50ZXJJZDogbnVtYmVyLFxuKTogdm9pZCB7XG5cdGNvbnN0IGNhcHR1cmVEYXRhOiBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldCB8IHVuZGVmaW5lZCA9IGNhcHR1cmVzLmdldChvYmopO1xuXHRpZiAoY2FwdHVyZURhdGEpIHtcblx0XHRjYXB0dXJlcy5kZWxldGUob2JqKTtcblx0XHQvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBjYXB0dXJpbmcgb2JqZWN0IGZvciB0aGlzIHBvaW50ZXJcblx0XHRpZiAoY2FwdHVyZXMuc2l6ZSA9PT0gMCkge1xuXHRcdFx0Y2FwdHVyZWRNYXAuZGVsZXRlKHBvaW50ZXJJZCk7XG5cdFx0XHRjYXB0dXJlRGF0YS50YXJnZXQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKHBvaW50ZXJJZCk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVJbnRlcmFjdGl2aXR5KHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4sIG9iamVjdDogVEhSRUUuT2JqZWN0M0QpIHtcblx0Y29uc3QgeyBpbnRlcm5hbCB9ID0gc3RvcmUuZ2V0KCk7XG5cdC8vIFJlbW92ZXMgZXZlcnkgdHJhY2Ugb2YgYW4gb2JqZWN0IGZyb20gdGhlIGRhdGEgc3RvcmVcblx0aW50ZXJuYWwuaW50ZXJhY3Rpb24gPSBpbnRlcm5hbC5pbnRlcmFjdGlvbi5maWx0ZXIoKG8pID0+IG8gIT09IG9iamVjdCk7XG5cdGludGVybmFsLmluaXRpYWxIaXRzID0gaW50ZXJuYWwuaW5pdGlhbEhpdHMuZmlsdGVyKChvKSA9PiBvICE9PSBvYmplY3QpO1xuXHRpbnRlcm5hbC5ob3ZlcmVkLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcblx0XHRpZiAodmFsdWUuZXZlbnRPYmplY3QgPT09IG9iamVjdCB8fCB2YWx1ZS5vYmplY3QgPT09IG9iamVjdCkge1xuXHRcdFx0Ly8gQ2xlYXIgb3V0IGludGVyc2VjdHMsIHRoZXkgYXJlIG91dGRhdGVkIGJ5IG5vd1xuXHRcdFx0aW50ZXJuYWwuaG92ZXJlZC5kZWxldGUoa2V5KTtcblx0XHR9XG5cdH0pO1xuXHRpbnRlcm5hbC5jYXB0dXJlZE1hcC5mb3JFYWNoKChjYXB0dXJlcywgcG9pbnRlcklkKSA9PiB7XG5cdFx0cmVsZWFzZUludGVybmFsUG9pbnRlckNhcHR1cmUoaW50ZXJuYWwuY2FwdHVyZWRNYXAsIG9iamVjdCwgY2FwdHVyZXMsIHBvaW50ZXJJZCk7XG5cdH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXZlbnRzKHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4pIHtcblx0LyoqIENhbGN1bGF0ZXMgZGVsdGEgKi9cblx0ZnVuY3Rpb24gY2FsY3VsYXRlRGlzdGFuY2UoZXZlbnQ6IE5ndERvbUV2ZW50KSB7XG5cdFx0Y29uc3QgaW50ZXJuYWwgPSBzdG9yZS5nZXQoJ2ludGVybmFsJyk7XG5cdFx0Y29uc3QgZHggPSBldmVudC5vZmZzZXRYIC0gaW50ZXJuYWwuaW5pdGlhbENsaWNrWzBdO1xuXHRcdGNvbnN0IGR5ID0gZXZlbnQub2Zmc2V0WSAtIGludGVybmFsLmluaXRpYWxDbGlja1sxXTtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpKTtcblx0fVxuXG5cdC8qKiBSZXR1cm5zIHRydWUgaWYgYW4gaW5zdGFuY2UgaGFzIGEgdmFsaWQgcG9pbnRlci1ldmVudCByZWdpc3RlcmVkLCB0aGlzIGV4Y2x1ZGVzIHNjcm9sbCwgY2xpY2tzIGV0YyAqL1xuXHRmdW5jdGlvbiBmaWx0ZXJQb2ludGVyRXZlbnRzKG9iamVjdHM6IFRIUkVFLk9iamVjdDNEW10pIHtcblx0XHRyZXR1cm4gb2JqZWN0cy5maWx0ZXIoKG9iaikgPT5cblx0XHRcdFsnbW92ZScsICdvdmVyJywgJ2VudGVyJywgJ291dCcsICdsZWF2ZSddLnNvbWUoKG5hbWUpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnROYW1lID0gYHBvaW50ZXIke25hbWV9YCBhcyBrZXlvZiBOZ3RFdmVudEhhbmRsZXJzO1xuXHRcdFx0XHRyZXR1cm4gZ2V0TG9jYWxTdGF0ZShvYmopLmhhbmRsZXJzPy5bZXZlbnROYW1lXTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cblxuXHRmdW5jdGlvbiBpbnRlcnNlY3QoZXZlbnQ6IE5ndERvbUV2ZW50LCBmaWx0ZXI/OiAob2JqZWN0czogVEhSRUUuT2JqZWN0M0RbXSkgPT4gVEhSRUUuT2JqZWN0M0RbXSkge1xuXHRcdGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0KCk7XG5cdFx0Y29uc3QgZHVwbGljYXRlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRcdGNvbnN0IGludGVyc2VjdGlvbnM6IE5ndEludGVyc2VjdGlvbltdID0gW107XG5cdFx0Ly8gQWxsb3cgY2FsbGVycyB0byBlbGltaW5hdGUgZXZlbnQgb2JqZWN0c1xuXHRcdGNvbnN0IGV2ZW50c09iamVjdHMgPSBmaWx0ZXIgPyBmaWx0ZXIoc3RhdGUuaW50ZXJuYWwuaW50ZXJhY3Rpb24pIDogc3RhdGUuaW50ZXJuYWwuaW50ZXJhY3Rpb247XG5cdFx0Ly8gUmVzZXQgYWxsIHJheWNhc3RlciBjYW1lcmFzIHRvIHVuZGVmaW5lZFxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZXZlbnRzT2JqZWN0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3Qgc3RhdGUgPSBnZXRMb2NhbFN0YXRlKGV2ZW50c09iamVjdHNbaV0pLnN0b3JlLmdldCgpO1xuXHRcdFx0aWYgKHN0YXRlKSB7XG5cdFx0XHRcdHN0YXRlLnJheWNhc3Rlci5jYW1lcmEgPSB1bmRlZmluZWQhO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghc3RhdGUucHJldmlvdXNSb290KSB7XG5cdFx0XHQvLyBNYWtlIHN1cmUgcm9vdC1sZXZlbCBwb2ludGVyIGFuZCByYXkgYXJlIHNldCB1cFxuXHRcdFx0c3RhdGUuZXZlbnRzLmNvbXB1dGU/LihldmVudCwgc3RvcmUsIG51bGwpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGhhbmRsZVJheWNhc3Qob2JqOiBUSFJFRS5PYmplY3QzRCkge1xuXHRcdFx0Y29uc3Qgb2JqTG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUob2JqKTtcblx0XHRcdGNvbnN0IG9ialN0b3JlID0gb2JqTG9jYWxTdGF0ZS5zdG9yZTtcblx0XHRcdGNvbnN0IG9ialN0YXRlID0gb2JqU3RvcmU/LmdldCgpO1xuXHRcdFx0Ly8gU2tpcCBldmVudCBoYW5kbGluZyB3aGVuIG5vRXZlbnRzIGlzIHNldCwgb3Igd2hlbiB0aGUgcmF5Y2FzdGVycyBjYW1lcmEgaXMgbnVsbFxuXHRcdFx0aWYgKCFvYmpTdGF0ZSB8fCAhb2JqU3RhdGUuZXZlbnRzLmVuYWJsZWQgfHwgb2JqU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuXG5cdFx0XHQvLyBXaGVuIHRoZSBjYW1lcmEgaXMgdW5kZWZpbmVkIHdlIGhhdmUgdG8gY2FsbCB0aGUgZXZlbnQgbGF5ZXJzIHVwZGF0ZSBmdW5jdGlvblxuXHRcdFx0aWYgKG9ialN0YXRlLnJheWNhc3Rlci5jYW1lcmEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRvYmpTdGF0ZS5ldmVudHMuY29tcHV0ZT8uKGV2ZW50LCBvYmpTdG9yZSwgb2JqU3RhdGUucHJldmlvdXNSb290KTtcblx0XHRcdFx0Ly8gSWYgdGhlIGNhbWVyYSBpcyBzdGlsbCB1bmRlZmluZWQgd2UgaGF2ZSB0byBza2lwIHRoaXMgbGF5ZXIgZW50aXJlbHlcblx0XHRcdFx0aWYgKG9ialN0YXRlLnJheWNhc3Rlci5jYW1lcmEgPT09IHVuZGVmaW5lZCkgb2JqU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSA9IG51bGwhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJbnRlcnNlY3Qgb2JqZWN0IGJ5IG9iamVjdFxuXHRcdFx0cmV0dXJuIG9ialN0YXRlLnJheWNhc3Rlci5jYW1lcmEgPyBvYmpTdGF0ZS5yYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0KG9iaiwgdHJ1ZSkgOiBbXTtcblx0XHR9XG5cblx0XHQvLyBDb2xsZWN0IGV2ZW50c1xuXHRcdGxldCBoaXRzOiBUSFJFRS5JbnRlcnNlY3Rpb248VEhSRUUuT2JqZWN0M0Q+W10gPSBldmVudHNPYmplY3RzXG5cdFx0XHQvLyBJbnRlcnNlY3Qgb2JqZWN0c1xuXHRcdFx0LmZsYXRNYXAoaGFuZGxlUmF5Y2FzdClcblx0XHRcdC8vIFNvcnQgYnkgZXZlbnQgcHJpb3JpdHkgYW5kIGRpc3RhbmNlXG5cdFx0XHQuc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0XHRjb25zdCBhU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGEub2JqZWN0KS5zdG9yZT8uZ2V0KCk7XG5cdFx0XHRcdGNvbnN0IGJTdGF0ZSA9IGdldExvY2FsU3RhdGUoYi5vYmplY3QpLnN0b3JlPy5nZXQoKTtcblx0XHRcdFx0aWYgKCFhU3RhdGUgfHwgIWJTdGF0ZSkgcmV0dXJuIGEuZGlzdGFuY2UgLSBiLmRpc3RhbmNlO1xuXHRcdFx0XHRyZXR1cm4gYlN0YXRlLmV2ZW50cy5wcmlvcml0eSAtIGFTdGF0ZS5ldmVudHMucHJpb3JpdHkgfHwgYS5kaXN0YW5jZSAtIGIuZGlzdGFuY2U7XG5cdFx0XHR9KVxuXHRcdFx0Ly8gRmlsdGVyIG91dCBkdXBsaWNhdGVzXG5cdFx0XHQuZmlsdGVyKChpdGVtKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGlkID0gbWFrZUlkKGl0ZW0gYXMgTmd0SW50ZXJzZWN0aW9uKTtcblx0XHRcdFx0aWYgKGR1cGxpY2F0ZXMuaGFzKGlkKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRkdXBsaWNhdGVzLmFkZChpZCk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSk7XG5cblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vbXJkb29iL3RocmVlLmpzL2lzc3Vlcy8xNjAzMVxuXHRcdC8vIEFsbG93IGN1c3RvbSB1c2VybGFuZCBpbnRlcnNlY3Qgc29ydCBvcmRlciwgdGhpcyBsaWtlbHkgb25seSBtYWtlcyBzZW5zZSBvbiB0aGUgcm9vdCBmaWx0ZXJcblx0XHRpZiAoc3RhdGUuZXZlbnRzLmZpbHRlcikgaGl0cyA9IHN0YXRlLmV2ZW50cy5maWx0ZXIoaGl0cywgc3RvcmUpO1xuXG5cdFx0Ly8gQnViYmxlIHVwIHRoZSBldmVudHMsIGZpbmQgdGhlIGV2ZW50IHNvdXJjZSAoZXZlbnRPYmplY3QpXG5cdFx0Zm9yIChjb25zdCBoaXQgb2YgaGl0cykge1xuXHRcdFx0bGV0IGV2ZW50T2JqZWN0OiBUSFJFRS5PYmplY3QzRCB8IG51bGwgPSBoaXQub2JqZWN0O1xuXHRcdFx0Ly8gYnViYmxlIGV2ZW50IHVwXG5cdFx0XHR3aGlsZSAoZXZlbnRPYmplY3QpIHtcblx0XHRcdFx0aWYgKGdldExvY2FsU3RhdGUoZXZlbnRPYmplY3QpLmV2ZW50Q291bnQpIHtcblx0XHRcdFx0XHRpbnRlcnNlY3Rpb25zLnB1c2goeyAuLi5oaXQsIGV2ZW50T2JqZWN0IH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGV2ZW50T2JqZWN0ID0gZXZlbnRPYmplY3QucGFyZW50O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHRoZSBpbnRlcmFjdGlvbiBpcyBjYXB0dXJlZCwgbWFrZSBhbGwgY2FwdHVyaW5nIHRhcmdldHMgcGFydCBvZiB0aGUgaW50ZXJzZWN0LlxuXHRcdGlmICgncG9pbnRlcklkJyBpbiBldmVudCAmJiBzdGF0ZS5pbnRlcm5hbC5jYXB0dXJlZE1hcC5oYXMoZXZlbnQucG9pbnRlcklkKSkge1xuXHRcdFx0Zm9yIChsZXQgY2FwdHVyZURhdGEgb2Ygc3RhdGUuaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KGV2ZW50LnBvaW50ZXJJZCkhLnZhbHVlcygpKSB7XG5cdFx0XHRcdGlmICghZHVwbGljYXRlcy5oYXMobWFrZUlkKGNhcHR1cmVEYXRhLmludGVyc2VjdGlvbikpKSBpbnRlcnNlY3Rpb25zLnB1c2goY2FwdHVyZURhdGEuaW50ZXJzZWN0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGludGVyc2VjdGlvbnM7XG5cdH1cblxuXHQvKiogIEhhbmRsZXMgaW50ZXJzZWN0aW9ucyBieSBmb3J3YXJkaW5nIHRoZW0gdG8gaGFuZGxlcnMgKi9cblx0ZnVuY3Rpb24gaGFuZGxlSW50ZXJzZWN0cyhcblx0XHRpbnRlcnNlY3Rpb25zOiBOZ3RJbnRlcnNlY3Rpb25bXSxcblx0XHRldmVudDogTmd0RG9tRXZlbnQsXG5cdFx0ZGVsdGE6IG51bWJlcixcblx0XHRjYWxsYmFjazogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PE5ndERvbUV2ZW50PikgPT4gdm9pZCxcblx0KSB7XG5cdFx0Y29uc3Qgcm9vdFN0YXRlID0gc3RvcmUuZ2V0KCk7XG5cblx0XHQvLyBJZiBhbnl0aGluZyBoYXMgYmVlbiBmb3VuZCwgZm9yd2FyZCBpdCB0byB0aGUgZXZlbnQgbGlzdGVuZXJzXG5cdFx0aWYgKGludGVyc2VjdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBsb2NhbFN0YXRlID0geyBzdG9wcGVkOiBmYWxzZSB9O1xuXHRcdFx0Zm9yIChjb25zdCBoaXQgb2YgaW50ZXJzZWN0aW9ucykge1xuXHRcdFx0XHRjb25zdCBzdGF0ZSA9IGdldExvY2FsU3RhdGUoaGl0Lm9iamVjdCkuc3RvcmU/LmdldCgpIHx8IHJvb3RTdGF0ZTtcblx0XHRcdFx0Y29uc3QgeyByYXljYXN0ZXIsIHBvaW50ZXIsIGNhbWVyYSwgaW50ZXJuYWwgfSA9IHN0YXRlO1xuXHRcdFx0XHRjb25zdCB1bnByb2plY3RlZFBvaW50ID0gbmV3IFRIUkVFLlZlY3RvcjMocG9pbnRlci54LCBwb2ludGVyLnksIDApLnVucHJvamVjdChjYW1lcmEpO1xuXHRcdFx0XHRjb25zdCBoYXNQb2ludGVyQ2FwdHVyZSA9IChpZDogbnVtYmVyKSA9PiBpbnRlcm5hbC5jYXB0dXJlZE1hcC5nZXQoaWQpPy5oYXMoaGl0LmV2ZW50T2JqZWN0KSA/PyBmYWxzZTtcblxuXHRcdFx0XHRjb25zdCBzZXRQb2ludGVyQ2FwdHVyZSA9IChpZDogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY2FwdHVyZURhdGEgPSB7IGludGVyc2VjdGlvbjogaGl0LCB0YXJnZXQ6IGV2ZW50LnRhcmdldCBhcyBFbGVtZW50IH07XG5cdFx0XHRcdFx0aWYgKGludGVybmFsLmNhcHR1cmVkTWFwLmhhcyhpZCkpIHtcblx0XHRcdFx0XHRcdC8vIGlmIHRoZSBwb2ludGVySWQgd2FzIHByZXZpb3VzbHkgY2FwdHVyZWQsIHdlIGFkZCB0aGUgaGl0IHRvIHRoZVxuXHRcdFx0XHRcdFx0Ly8gZXZlbnQgY2FwdHVyZWRNYXAuXG5cdFx0XHRcdFx0XHRpbnRlcm5hbC5jYXB0dXJlZE1hcC5nZXQoaWQpIS5zZXQoaGl0LmV2ZW50T2JqZWN0LCBjYXB0dXJlRGF0YSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIGlmIHRoZSBwb2ludGVySWQgd2FzIG5vdCBwcmV2aW91c2x5IGNhcHR1cmVkLCB3ZSBjcmVhdGUgYSBtYXBcblx0XHRcdFx0XHRcdC8vIGNvbnRhaW5pbmcgdGhlIGhpdE9iamVjdCwgYW5kIHRoZSBoaXQuIGhpdE9iamVjdCBpcyB1c2VkIGZvclxuXHRcdFx0XHRcdFx0Ly8gZmFzdGVyIGFjY2Vzcy5cblx0XHRcdFx0XHRcdGludGVybmFsLmNhcHR1cmVkTWFwLnNldChpZCwgbmV3IE1hcChbW2hpdC5ldmVudE9iamVjdCwgY2FwdHVyZURhdGFdXSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBDYWxsIHRoZSBvcmlnaW5hbCBldmVudCBub3dcblx0XHRcdFx0XHQoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLnNldFBvaW50ZXJDYXB0dXJlKGlkKTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCByZWxlYXNlUG9pbnRlckNhcHR1cmUgPSAoaWQ6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGNhcHR1cmVzID0gaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KGlkKTtcblx0XHRcdFx0XHRpZiAoY2FwdHVyZXMpIHtcblx0XHRcdFx0XHRcdHJlbGVhc2VJbnRlcm5hbFBvaW50ZXJDYXB0dXJlKGludGVybmFsLmNhcHR1cmVkTWFwLCBoaXQuZXZlbnRPYmplY3QsIGNhcHR1cmVzLCBpZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIEFkZCBuYXRpdmUgZXZlbnQgcHJvcHNcblx0XHRcdFx0Y29uc3QgZXh0cmFjdEV2ZW50UHJvcHM6IGFueSA9IHt9O1xuXHRcdFx0XHQvLyBUaGlzIGl0ZXJhdGVzIG92ZXIgdGhlIGV2ZW50J3MgcHJvcGVydGllcyBpbmNsdWRpbmcgdGhlIGluaGVyaXRlZCBvbmVzLiBOYXRpdmUgUG9pbnRlckV2ZW50cyBoYXZlIG1vc3Qgb2YgdGhlaXIgcHJvcHMgYXMgZ2V0dGVycyB3aGljaCBhcmUgaW5oZXJpdGVkLCBidXQgcG9seWZpbGxlZCBQb2ludGVyRXZlbnRzIGhhdmUgdGhlbSBhbGwgYXMgdGhlaXIgb3duIHByb3BlcnRpZXMgKGkuZS4gbm90IGluaGVyaXRlZCkuIFdlIGNhbid0IHVzZSBPYmplY3Qua2V5cygpIG9yIE9iamVjdC5lbnRyaWVzKCkgYXMgdGhleSBvbmx5IHJldHVybiBcIm93blwiIHByb3BlcnRpZXM7IG5vciBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZXZlbnQpIGFzIHRoYXQgKmRvZXNuJ3QqIHJldHVybiBcIm93blwiIHByb3BlcnRpZXMsIG9ubHkgaW5oZXJpdGVkIG9uZXMuXG5cdFx0XHRcdGZvciAobGV0IHByb3AgaW4gZXZlbnQpIHtcblx0XHRcdFx0XHRsZXQgcHJvcGVydHkgPSBldmVudFtwcm9wIGFzIGtleW9mIE5ndERvbUV2ZW50XTtcblx0XHRcdFx0XHQvLyBPbmx5IGNvcHkgb3ZlciBhdG9taWNzLCBsZWF2ZSBmdW5jdGlvbnMgYWxvbmUgYXMgdGhlc2Ugc2hvdWxkIGJlXG5cdFx0XHRcdFx0Ly8gY2FsbGVkIGFzIGV2ZW50Lm5hdGl2ZUV2ZW50LmZuKClcblx0XHRcdFx0XHRpZiAodHlwZW9mIHByb3BlcnR5ICE9PSAnZnVuY3Rpb24nKSBleHRyYWN0RXZlbnRQcm9wc1twcm9wXSA9IHByb3BlcnR5O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcmF5Y2FzdEV2ZW50OiBOZ3RUaHJlZUV2ZW50PE5ndERvbUV2ZW50PiA9IHtcblx0XHRcdFx0XHQuLi5oaXQsXG5cdFx0XHRcdFx0Li4uZXh0cmFjdEV2ZW50UHJvcHMsXG5cdFx0XHRcdFx0cG9pbnRlcixcblx0XHRcdFx0XHRpbnRlcnNlY3Rpb25zLFxuXHRcdFx0XHRcdHN0b3BwZWQ6IGxvY2FsU3RhdGUuc3RvcHBlZCxcblx0XHRcdFx0XHRkZWx0YSxcblx0XHRcdFx0XHR1bnByb2plY3RlZFBvaW50LFxuXHRcdFx0XHRcdHJheTogcmF5Y2FzdGVyLnJheSxcblx0XHRcdFx0XHRjYW1lcmEsXG5cdFx0XHRcdFx0Ly8gSGlqYWNrIHN0b3BQcm9wYWdhdGlvbiwgd2hpY2gganVzdCBzZXRzIGEgZmxhZ1xuXHRcdFx0XHRcdHN0b3BQcm9wYWdhdGlvbigpIHtcblx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbW5kcnMvcmVhY3QtdGhyZWUtZmliZXIvaXNzdWVzLzU5NlxuXHRcdFx0XHRcdFx0Ly8gRXZlbnRzIGFyZSBub3QgYWxsb3dlZCB0byBzdG9wIHByb3BhZ2F0aW9uIGlmIHRoZSBwb2ludGVyIGhhcyBiZWVuIGNhcHR1cmVkXG5cdFx0XHRcdFx0XHRjb25zdCBjYXB0dXJlc0ZvclBvaW50ZXIgPSAncG9pbnRlcklkJyBpbiBldmVudCAmJiBpbnRlcm5hbC5jYXB0dXJlZE1hcC5nZXQoZXZlbnQucG9pbnRlcklkKTtcblxuXHRcdFx0XHRcdFx0Ly8gV2Ugb25seSBhdXRob3JpemUgc3RvcFByb3BhZ2F0aW9uLi4uXG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmlmIHRoaXMgcG9pbnRlciBoYXNuJ3QgYmVlbiBjYXB0dXJlZFxuXHRcdFx0XHRcdFx0XHQhY2FwdHVyZXNGb3JQb2ludGVyIHx8XG5cdFx0XHRcdFx0XHRcdC8vIC4uLiBvciBpZiB0aGUgaGl0IG9iamVjdCBpcyBjYXB0dXJpbmcgdGhlIHBvaW50ZXJcblx0XHRcdFx0XHRcdFx0Y2FwdHVyZXNGb3JQb2ludGVyLmhhcyhoaXQuZXZlbnRPYmplY3QpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0cmF5Y2FzdEV2ZW50LnN0b3BwZWQgPSBsb2NhbFN0YXRlLnN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHQvLyBQcm9wYWdhdGlvbiBpcyBzdG9wcGVkLCByZW1vdmUgYWxsIG90aGVyIGhvdmVyIHJlY29yZHNcblx0XHRcdFx0XHRcdFx0Ly8gQW4gZXZlbnQgaGFuZGxlciBpcyBvbmx5IGFsbG93ZWQgdG8gZmx1c2ggb3RoZXIgaGFuZGxlcnMgaWYgaXQgaXMgaG92ZXJlZCBpdHNlbGZcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdGludGVybmFsLmhvdmVyZWQuc2l6ZSAmJlxuXHRcdFx0XHRcdFx0XHRcdEFycmF5LmZyb20oaW50ZXJuYWwuaG92ZXJlZC52YWx1ZXMoKSkuZmluZCgoaSkgPT4gaS5ldmVudE9iamVjdCA9PT0gaGl0LmV2ZW50T2JqZWN0KVxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBPYmplY3RzIGNhbm5vdCBmbHVzaCBvdXQgaGlnaGVyIHVwIG9iamVjdHMgdGhhdCBoYXZlIGFscmVhZHkgY2F1Z2h0IHRoZSBldmVudFxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGhpZ2hlciA9IGludGVyc2VjdGlvbnMuc2xpY2UoMCwgaW50ZXJzZWN0aW9ucy5pbmRleE9mKGhpdCkpO1xuXHRcdFx0XHRcdFx0XHRcdGNhbmNlbFBvaW50ZXIoWy4uLmhpZ2hlciwgaGl0XSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdC8vIHRoZXJlIHNob3VsZCBiZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gdGFyZ2V0IGFuZCBjdXJyZW50VGFyZ2V0XG5cdFx0XHRcdFx0dGFyZ2V0OiB7IGhhc1BvaW50ZXJDYXB0dXJlLCBzZXRQb2ludGVyQ2FwdHVyZSwgcmVsZWFzZVBvaW50ZXJDYXB0dXJlIH0sXG5cdFx0XHRcdFx0Y3VycmVudFRhcmdldDogeyBoYXNQb2ludGVyQ2FwdHVyZSwgc2V0UG9pbnRlckNhcHR1cmUsIHJlbGVhc2VQb2ludGVyQ2FwdHVyZSB9LFxuXHRcdFx0XHRcdG5hdGl2ZUV2ZW50OiBldmVudCxcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBDYWxsIHN1YnNjcmliZXJzXG5cdFx0XHRcdGNhbGxiYWNrKHJheWNhc3RFdmVudCk7XG5cdFx0XHRcdC8vIEV2ZW50IGJ1YmJsaW5nIG1heSBiZSBpbnRlcnJ1cHRlZCBieSBzdG9wUHJvcGFnYXRpb25cblx0XHRcdFx0aWYgKGxvY2FsU3RhdGUuc3RvcHBlZCA9PT0gdHJ1ZSkgYnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBpbnRlcnNlY3Rpb25zO1xuXHR9XG5cblx0ZnVuY3Rpb24gY2FuY2VsUG9pbnRlcihpbnRlcnNlY3Rpb25zOiBOZ3RJbnRlcnNlY3Rpb25bXSkge1xuXHRcdGNvbnN0IGludGVybmFsID0gc3RvcmUuZ2V0KCdpbnRlcm5hbCcpO1xuXHRcdGZvciAoY29uc3QgaG92ZXJlZE9iaiBvZiBpbnRlcm5hbC5ob3ZlcmVkLnZhbHVlcygpKSB7XG5cdFx0XHQvLyBXaGVuIG5vIG9iamVjdHMgd2VyZSBoaXQgb3IgdGhlIHRoZSBob3ZlcmVkIG9iamVjdCB3YXNuJ3QgZm91bmQgdW5kZXJuZWF0aCB0aGUgY3Vyc29yXG5cdFx0XHQvLyB3ZSBjYWxsIG9uUG9pbnRlck91dCBhbmQgZGVsZXRlIHRoZSBvYmplY3QgZnJvbSB0aGUgaG92ZXJlZC1lbGVtZW50cyBtYXBcblx0XHRcdGlmIChcblx0XHRcdFx0IWludGVyc2VjdGlvbnMubGVuZ3RoIHx8XG5cdFx0XHRcdCFpbnRlcnNlY3Rpb25zLmZpbmQoXG5cdFx0XHRcdFx0KGhpdCkgPT5cblx0XHRcdFx0XHRcdGhpdC5vYmplY3QgPT09IGhvdmVyZWRPYmoub2JqZWN0ICYmXG5cdFx0XHRcdFx0XHRoaXQuaW5kZXggPT09IGhvdmVyZWRPYmouaW5kZXggJiZcblx0XHRcdFx0XHRcdGhpdC5pbnN0YW5jZUlkID09PSBob3ZlcmVkT2JqLmluc3RhbmNlSWQsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBldmVudE9iamVjdCA9IGhvdmVyZWRPYmouZXZlbnRPYmplY3Q7XG5cdFx0XHRcdGNvbnN0IGluc3RhbmNlID0gZ2V0TG9jYWxTdGF0ZShldmVudE9iamVjdCk7XG5cdFx0XHRcdGNvbnN0IGhhbmRsZXJzID0gaW5zdGFuY2U/LmhhbmRsZXJzO1xuXHRcdFx0XHRpbnRlcm5hbC5ob3ZlcmVkLmRlbGV0ZShtYWtlSWQoaG92ZXJlZE9iaikpO1xuXHRcdFx0XHRpZiAoaW5zdGFuY2U/LmV2ZW50Q291bnQpIHtcblx0XHRcdFx0XHQvLyBDbGVhciBvdXQgaW50ZXJzZWN0cywgdGhleSBhcmUgb3V0ZGF0ZWQgYnkgbm93XG5cdFx0XHRcdFx0Y29uc3QgZGF0YSA9IHsgLi4uaG92ZXJlZE9iaiwgaW50ZXJzZWN0aW9ucyB9O1xuXHRcdFx0XHRcdGhhbmRsZXJzPy5wb2ludGVyb3V0Py4oZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuXHRcdFx0XHRcdGhhbmRsZXJzPy5wb2ludGVybGVhdmU/LihkYXRhIGFzIE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBwb2ludGVyTWlzc2VkKGV2ZW50OiBNb3VzZUV2ZW50LCBvYmplY3RzOiBUSFJFRS5PYmplY3QzRFtdKSB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBpbnN0YW5jZSA9IGdldExvY2FsU3RhdGUob2JqZWN0c1tpXSk7XG5cdFx0XHRpbnN0YW5jZT8uaGFuZGxlcnMucG9pbnRlcm1pc3NlZD8uKGV2ZW50KTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBoYW5kbGVQb2ludGVyKG5hbWU6IHN0cmluZykge1xuXHRcdC8vIERlYWwgd2l0aCBjYW5jZWxhdGlvblxuXHRcdHN3aXRjaCAobmFtZSkge1xuXHRcdFx0Y2FzZSAncG9pbnRlcmxlYXZlJzpcblx0XHRcdGNhc2UgJ3BvaW50ZXJjYW5jZWwnOlxuXHRcdFx0XHRyZXR1cm4gKCkgPT4gY2FuY2VsUG9pbnRlcihbXSk7XG5cdFx0XHRjYXNlICdsb3N0cG9pbnRlcmNhcHR1cmUnOlxuXHRcdFx0XHRyZXR1cm4gKGV2ZW50OiBOZ3REb21FdmVudCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHsgaW50ZXJuYWwgfSA9IHN0b3JlLmdldCgpO1xuXHRcdFx0XHRcdGlmICgncG9pbnRlcklkJyBpbiBldmVudCAmJiBpbnRlcm5hbC5jYXB0dXJlZE1hcC5oYXMoZXZlbnQucG9pbnRlcklkKSkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIG9iamVjdCBldmVudCBpbnRlcmZhY2UgaGFkIG9uTG9zdFBvaW50ZXJDYXB0dXJlLCB3ZSdkIGNhbGwgaXQgaGVyZSBvbiBldmVyeVxuXHRcdFx0XHRcdFx0Ly8gb2JqZWN0IHRoYXQncyBnZXR0aW5nIHJlbW92ZWQuXG5cdFx0XHRcdFx0XHRpbnRlcm5hbC5jYXB0dXJlZE1hcC5kZWxldGUoZXZlbnQucG9pbnRlcklkKTtcblx0XHRcdFx0XHRcdGNhbmNlbFBvaW50ZXIoW10pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBBbnkgb3RoZXIgcG9pbnRlciBnb2VzIGhlcmUgLi4uXG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGhhbmRsZUV2ZW50KGV2ZW50OiBOZ3REb21FdmVudCkge1xuXHRcdFx0Y29uc3QgcG9pbnRlck1pc3NlZCQgPSAoc3RvcmUgYXMgTmd0QW55UmVjb3JkKVsncG9pbnRlck1pc3NlZCQnXTtcblx0XHRcdGNvbnN0IGludGVybmFsID0gc3RvcmUuZ2V0KCdpbnRlcm5hbCcpO1xuXG5cdFx0XHQvLyBwcmVwYXJlUmF5KGV2ZW50KVxuXHRcdFx0aW50ZXJuYWwubGFzdEV2ZW50Lm5hdGl2ZUVsZW1lbnQgPSBldmVudDtcblxuXHRcdFx0Ly8gR2V0IGZyZXNoIGludGVyc2VjdHNcblx0XHRcdGNvbnN0IGlzUG9pbnRlck1vdmUgPSBuYW1lID09PSAncG9pbnRlcm1vdmUnO1xuXHRcdFx0Y29uc3QgaXNDbGlja0V2ZW50ID0gbmFtZSA9PT0gJ2NsaWNrJyB8fCBuYW1lID09PSAnY29udGV4dG1lbnUnIHx8IG5hbWUgPT09ICdkYmxjbGljayc7XG5cdFx0XHRjb25zdCBmaWx0ZXIgPSBpc1BvaW50ZXJNb3ZlID8gZmlsdGVyUG9pbnRlckV2ZW50cyA6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGhpdHMgPSBpbnRlcnNlY3QoZXZlbnQsIGZpbHRlcik7XG5cdFx0XHRjb25zdCBkZWx0YSA9IGlzQ2xpY2tFdmVudCA/IGNhbGN1bGF0ZURpc3RhbmNlKGV2ZW50KSA6IDA7XG5cblx0XHRcdC8vIFNhdmUgaW5pdGlhbCBjb29yZGluYXRlcyBvbiBwb2ludGVyLWRvd25cblx0XHRcdGlmIChuYW1lID09PSAncG9pbnRlcmRvd24nKSB7XG5cdFx0XHRcdGludGVybmFsLmluaXRpYWxDbGljayA9IFtldmVudC5vZmZzZXRYLCBldmVudC5vZmZzZXRZXTtcblx0XHRcdFx0aW50ZXJuYWwuaW5pdGlhbEhpdHMgPSBoaXRzLm1hcCgoaGl0KSA9PiBoaXQuZXZlbnRPYmplY3QpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIGNsaWNrIHlpZWxkcyBubyByZXN1bHRzLCBwYXNzIGl0IGJhY2sgdG8gdGhlIHVzZXIgYXMgYSBtaXNzXG5cdFx0XHQvLyBNaXNzZWQgZXZlbnRzIGhhdmUgdG8gY29tZSBmaXJzdCBpbiBvcmRlciB0byBlc3RhYmxpc2ggdXNlci1sYW5kIHNpZGUtZWZmZWN0IGNsZWFuIHVwXG5cdFx0XHRpZiAoaXNDbGlja0V2ZW50ICYmICFoaXRzLmxlbmd0aCkge1xuXHRcdFx0XHRpZiAoZGVsdGEgPD0gMikge1xuXHRcdFx0XHRcdHBvaW50ZXJNaXNzZWQoZXZlbnQsIGludGVybmFsLmludGVyYWN0aW9uKTtcblx0XHRcdFx0XHRwb2ludGVyTWlzc2VkJC5uZXh0KGV2ZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUYWtlIGNhcmUgb2YgdW5ob3ZlclxuXHRcdFx0aWYgKGlzUG9pbnRlck1vdmUpIGNhbmNlbFBvaW50ZXIoaGl0cyk7XG5cblx0XHRcdGZ1bmN0aW9uIG9uSW50ZXJzZWN0KGRhdGE6IE5ndFRocmVlRXZlbnQ8Tmd0RG9tRXZlbnQ+KSB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50T2JqZWN0ID0gZGF0YS5ldmVudE9iamVjdDtcblx0XHRcdFx0Y29uc3QgaW5zdGFuY2UgPSBnZXRMb2NhbFN0YXRlKGV2ZW50T2JqZWN0KTtcblx0XHRcdFx0Y29uc3QgaGFuZGxlcnMgPSBpbnN0YW5jZT8uaGFuZGxlcnM7XG5cblx0XHRcdFx0Ly8gQ2hlY2sgcHJlc2VuY2Ugb2YgaGFuZGxlcnNcblx0XHRcdFx0aWYgKCFpbnN0YW5jZT8uZXZlbnRDb3VudCkgcmV0dXJuO1xuXG5cdFx0XHRcdC8qXG4gICAgICAgIE1BWUJFIFRPRE8sIERFTEVURSBJRiBOT1Q6XG4gICAgICAgICAgQ2hlY2sgaWYgdGhlIG9iamVjdCBpcyBjYXB0dXJlZCwgY2FwdHVyZWQgZXZlbnRzIHNob3VsZCBub3QgaGF2ZSBpbnRlcnNlY3RzIHJ1bm5pbmcgaW4gcGFyYWxsZWxcbiAgICAgICAgICBCdXQgd291bGRuJ3QgaXQgYmUgYmV0dGVyIHRvIGp1c3QgcmVwbGFjZSBjYXB0dXJlZE1hcCB3aXRoIGEgc2luZ2xlIGVudHJ5P1xuICAgICAgICAgIEFsc28sIGFyZSB3ZSBPSyB3aXRoIHN0cmFpZ2h0IHVwIG1ha2luZyBwaWNraW5nIHVwIG11bHRpcGxlIG9iamVjdHMgaW1wb3NzaWJsZT9cblxuICAgICAgICBjb25zdCBwb2ludGVySWQgPSAoZGF0YSBhcyBUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pLnBvaW50ZXJJZFxuICAgICAgICBpZiAocG9pbnRlcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBjYXB0dXJlZE1lc2hTZXQgPSBpbnRlcm5hbC5jYXB0dXJlZE1hcC5nZXQocG9pbnRlcklkKVxuICAgICAgICAgIGlmIChjYXB0dXJlZE1lc2hTZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhcHR1cmVkID0gY2FwdHVyZWRNZXNoU2V0LmdldChldmVudE9iamVjdClcbiAgICAgICAgICAgIGlmIChjYXB0dXJlZCAmJiBjYXB0dXJlZC5sb2NhbFN0YXRlLnN0b3BwZWQpIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfSovXG5cblx0XHRcdFx0aWYgKGlzUG9pbnRlck1vdmUpIHtcblx0XHRcdFx0XHQvLyBNb3ZlIGV2ZW50IC4uLlxuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGhhbmRsZXJzPy5wb2ludGVyb3ZlciB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlcnM/LnBvaW50ZXJlbnRlciB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlcnM/LnBvaW50ZXJvdXQgfHxcblx0XHRcdFx0XHRcdGhhbmRsZXJzPy5wb2ludGVybGVhdmVcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdC8vIFdoZW4gZW50ZXIgb3Igb3V0IGlzIHByZXNlbnQgdGFrZSBjYXJlIG9mIGhvdmVyLXN0YXRlXG5cdFx0XHRcdFx0XHRjb25zdCBpZCA9IG1ha2VJZChkYXRhKTtcblx0XHRcdFx0XHRcdGNvbnN0IGhvdmVyZWRJdGVtID0gaW50ZXJuYWwuaG92ZXJlZC5nZXQoaWQpO1xuXHRcdFx0XHRcdFx0aWYgKCFob3ZlcmVkSXRlbSkge1xuXHRcdFx0XHRcdFx0XHQvLyBJZiB0aGUgb2JqZWN0IHdhc24ndCBwcmV2aW91c2x5IGhvdmVyZWQsIGJvb2sgaXQgYW5kIGNhbGwgaXRzIGhhbmRsZXJcblx0XHRcdFx0XHRcdFx0aW50ZXJuYWwuaG92ZXJlZC5zZXQoaWQsIGRhdGEpO1xuXHRcdFx0XHRcdFx0XHRoYW5kbGVycy5wb2ludGVyb3Zlcj8uKGRhdGEgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KTtcblx0XHRcdFx0XHRcdFx0aGFuZGxlcnMucG9pbnRlcmVudGVyPy4oZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChob3ZlcmVkSXRlbS5zdG9wcGVkKSB7XG5cdFx0XHRcdFx0XHRcdC8vIElmIHRoZSBvYmplY3Qgd2FzIHByZXZpb3VzbHkgaG92ZXJlZCBhbmQgc3RvcHBlZCwgd2Ugc2hvdWxkbid0IGFsbG93IG90aGVyIGl0ZW1zIHRvIHByb2NlZWRcblx0XHRcdFx0XHRcdFx0ZGF0YS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gQ2FsbCBtb3VzZSBtb3ZlXG5cdFx0XHRcdFx0aGFuZGxlcnM/LnBvaW50ZXJtb3ZlPy4oZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIEFsbCBvdGhlciBldmVudHMgLi4uXG5cdFx0XHRcdFx0Y29uc3QgaGFuZGxlciA9IGhhbmRsZXJzPy5bbmFtZSBhcyBrZXlvZiBOZ3RFdmVudEhhbmRsZXJzXSBhcyAoXG5cdFx0XHRcdFx0XHRldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+LFxuXHRcdFx0XHRcdCkgPT4gdm9pZDtcblx0XHRcdFx0XHRpZiAoaGFuZGxlcikge1xuXHRcdFx0XHRcdFx0Ly8gRm9yd2FyZCBhbGwgZXZlbnRzIGJhY2sgdG8gdGhlaXIgcmVzcGVjdGl2ZSBoYW5kbGVycyB3aXRoIHRoZSBleGNlcHRpb24gb2YgY2xpY2sgZXZlbnRzLFxuXHRcdFx0XHRcdFx0Ly8gd2hpY2ggbXVzdCB1c2UgdGhlIGluaXRpYWwgdGFyZ2V0XG5cdFx0XHRcdFx0XHRpZiAoIWlzQ2xpY2tFdmVudCB8fCBpbnRlcm5hbC5pbml0aWFsSGl0cy5pbmNsdWRlcyhldmVudE9iamVjdCkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gTWlzc2VkIGV2ZW50cyBoYXZlIHRvIGNvbWUgZmlyc3Rcblx0XHRcdFx0XHRcdFx0cG9pbnRlck1pc3NlZChcblx0XHRcdFx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5pbnRlcmFjdGlvbi5maWx0ZXIoKG9iamVjdCkgPT4gIWludGVybmFsLmluaXRpYWxIaXRzLmluY2x1ZGVzKG9iamVjdCkpLFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHQvLyBOb3cgY2FsbCB0aGUgaGFuZGxlclxuXHRcdFx0XHRcdFx0XHRoYW5kbGVyKGRhdGEgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gVHJpZ2dlciBvblBvaW50ZXJNaXNzZWQgb24gYWxsIGVsZW1lbnRzIHRoYXQgaGF2ZSBwb2ludGVyIG92ZXIvb3V0IGhhbmRsZXJzLCBidXQgbm90IGNsaWNrIGFuZCB3ZXJlbid0IGhpdFxuXHRcdFx0XHRcdFx0aWYgKGlzQ2xpY2tFdmVudCAmJiBpbnRlcm5hbC5pbml0aWFsSGl0cy5pbmNsdWRlcyhldmVudE9iamVjdCkpIHtcblx0XHRcdFx0XHRcdFx0cG9pbnRlck1pc3NlZChcblx0XHRcdFx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5pbnRlcmFjdGlvbi5maWx0ZXIoKG9iamVjdCkgPT4gIWludGVybmFsLmluaXRpYWxIaXRzLmluY2x1ZGVzKG9iamVjdCkpLFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRoYW5kbGVJbnRlcnNlY3RzKGhpdHMsIGV2ZW50LCBkZWx0YSwgb25JbnRlcnNlY3QpO1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4geyBoYW5kbGVQb2ludGVyIH07XG59XG4iXX0=
@@ -5,15 +5,15 @@ import { is } from './utils/is';
5
5
  export function injectNgtRef(initial = null, injector) {
6
6
  injector = assertInjector(injectNgtRef, injector);
7
7
  const ref = is.ref(initial) ? initial : new ElementRef(initial);
8
- const signalRef = signal(ref.nativeElement);
9
- const readonlySignal = signalRef.asReadonly();
10
- const cached = new Map();
8
+ const refSignal = signal(ref.nativeElement);
9
+ const readonlyRef = refSignal.asReadonly();
10
+ const computedCached = new Map();
11
11
  return runInInjectionContext(injector, () => {
12
- inject(DestroyRef).onDestroy(() => void cached.clear());
12
+ inject(DestroyRef).onDestroy(() => void computedCached.clear());
13
13
  const children = (type = 'objects') => {
14
- if (!cached.has(type)) {
15
- cached.set(type, computed(() => {
16
- const instance = readonlySignal();
14
+ if (!computedCached.has(type)) {
15
+ computedCached.set(type, computed(() => {
16
+ const instance = readonlyRef();
17
17
  if (!instance)
18
18
  return [];
19
19
  const localState = getLocalState(instance);
@@ -26,23 +26,23 @@ export function injectNgtRef(initial = null, injector) {
26
26
  return [...localState.objects(), ...localState.nonObjects()];
27
27
  }));
28
28
  }
29
- return cached.get(type);
29
+ return computedCached.get(type);
30
30
  };
31
31
  Object.defineProperties(ref, {
32
32
  nativeElement: {
33
33
  set: (newElement) => {
34
34
  untracked(() => {
35
- if (newElement !== signalRef()) {
36
- signalRef.set(newElement);
35
+ if (newElement !== refSignal()) {
36
+ refSignal.set(newElement);
37
37
  }
38
38
  });
39
39
  },
40
- get: readonlySignal,
40
+ get: readonlyRef,
41
41
  },
42
- untracked: { get: () => untracked(readonlySignal) },
42
+ untracked: { get: () => untracked(readonlyRef) },
43
43
  children: { get: () => children },
44
44
  });
45
45
  return ref;
46
46
  });
47
47
  }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixVQUFVLEVBQ1YsVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEVBQ04scUJBQXFCLEVBQ3JCLE1BQU0sRUFDTixTQUFTLEdBR1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQXdCLE1BQU0sWUFBWSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFXaEMsTUFBTSxVQUFVLFlBQVksQ0FDM0IsVUFBMkMsSUFBSyxFQUNoRCxRQUFtQjtJQUVuQixRQUFRLEdBQUcsY0FBYyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNsRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLE9BQW1CLENBQUMsQ0FBQztJQUM1RSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRXpCLE9BQU8scUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUMzQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFeEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUEwQyxTQUFTLEVBQUUsRUFBRTtZQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdEIsTUFBTSxDQUFDLEdBQUcsQ0FDVCxJQUFJLEVBQ0osUUFBUSxDQUFDLEdBQUcsRUFBRTtvQkFDYixNQUFNLFFBQVEsR0FBRyxjQUFjLEVBQUUsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLFFBQVE7d0JBQUUsT0FBTyxFQUFFLENBQUM7b0JBQ3pCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVTt3QkFBRSxPQUFPLEVBQUUsQ0FBQztvQkFDN0QsSUFBSSxJQUFJLEtBQUssU0FBUzt3QkFBRSxPQUFPLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDcEQsSUFBSSxJQUFJLEtBQUssWUFBWTt3QkFBRSxPQUFPLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDMUQsT0FBTyxDQUFDLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBQzlELENBQUMsQ0FBQyxDQUNGLENBQUM7YUFDRjtZQUNELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUUsQ0FBQztRQUMxQixDQUFDLENBQUM7UUFFRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFO1lBQzVCLGFBQWEsRUFBRTtnQkFDZCxHQUFHLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRTtvQkFDbkIsU0FBUyxDQUFDLEdBQUcsRUFBRTt3QkFDZCxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUUsRUFBRTs0QkFDL0IsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQzt5QkFDMUI7b0JBQ0YsQ0FBQyxDQUFDLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxHQUFHLEVBQUUsY0FBYzthQUNuQjtZQUNELFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDbkQsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRTtTQUNqQyxDQUFDLENBQUM7UUFFSCxPQUFPLEdBQStCLENBQUM7SUFDeEMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0RGVzdHJveVJlZixcblx0RWxlbWVudFJlZixcblx0Y29tcHV0ZWQsXG5cdGluamVjdCxcblx0cnVuSW5JbmplY3Rpb25Db250ZXh0LFxuXHRzaWduYWwsXG5cdHVudHJhY2tlZCxcblx0dHlwZSBJbmplY3Rvcixcblx0dHlwZSBTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgeyBnZXRMb2NhbFN0YXRlLCB0eXBlIE5ndEluc3RhbmNlTm9kZSB9IGZyb20gJy4vaW5zdGFuY2UnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuL3V0aWxzL2lzJztcblxuZXhwb3J0IHR5cGUgTmd0SW5qZWN0ZWRSZWY8VEVsZW1lbnQ+ID0gRWxlbWVudFJlZjxURWxlbWVudD4gJiB7XG5cdC8qIGNvbnN1bWVycyBzaG91bGQgdXNlIHRoaXMgZm9yIGxpc3RlbnRpbmcgdG8gY2hpbGRyZW4gY2hhbmdlcyBvbiB0aGlzIHJlZiAqL1xuXHRjaGlsZHJlbjogKHR5cGU/OiAnb2JqZWN0cycgfCAnbm9uT2JqZWN0cycgfCAnYm90aCcpID0+IFNpZ25hbDxOZ3RJbnN0YW5jZU5vZGVbXT47XG5cdC8qIGNvbnN1bWVycyBzaG91bGQgdXNlIHRoaXMgdG8gcmVhZCB0aGUgcmVmIGN1cnJlbnQgdmFsdWUgd2l0aG91dCByZWdpc3RlcmluZyB0aGUgc2lnbmFsICovXG5cdHVudHJhY2tlZDogVEVsZW1lbnQ7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RSZWY8VEVsZW1lbnQ+ID0gVEVsZW1lbnQgfCBOZ3RJbmplY3RlZFJlZjxURWxlbWVudD47XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3ROZ3RSZWY8VEVsZW1lbnQ+KFxuXHRpbml0aWFsOiBFbGVtZW50UmVmPFRFbGVtZW50PiB8IFRFbGVtZW50ID0gbnVsbCEsXG5cdGluamVjdG9yPzogSW5qZWN0b3IsXG4pOiBOZ3RJbmplY3RlZFJlZjxURWxlbWVudD4ge1xuXHRpbmplY3RvciA9IGFzc2VydEluamVjdG9yKGluamVjdE5ndFJlZiwgaW5qZWN0b3IpO1xuXHRjb25zdCByZWYgPSBpcy5yZWYoaW5pdGlhbCkgPyBpbml0aWFsIDogbmV3IEVsZW1lbnRSZWYoaW5pdGlhbCBhcyBURWxlbWVudCk7XG5cdGNvbnN0IHNpZ25hbFJlZiA9IHNpZ25hbChyZWYubmF0aXZlRWxlbWVudCk7XG5cdGNvbnN0IHJlYWRvbmx5U2lnbmFsID0gc2lnbmFsUmVmLmFzUmVhZG9ubHkoKTtcblx0Y29uc3QgY2FjaGVkID0gbmV3IE1hcCgpO1xuXG5cdHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHZvaWQgY2FjaGVkLmNsZWFyKCkpO1xuXG5cdFx0Y29uc3QgY2hpbGRyZW4gPSAodHlwZTogJ29iamVjdHMnIHwgJ25vbk9iamVjdHMnIHwgJ2JvdGgnID0gJ29iamVjdHMnKSA9PiB7XG5cdFx0XHRpZiAoIWNhY2hlZC5oYXModHlwZSkpIHtcblx0XHRcdFx0Y2FjaGVkLnNldChcblx0XHRcdFx0XHR0eXBlLFxuXHRcdFx0XHRcdGNvbXB1dGVkKCgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGluc3RhbmNlID0gcmVhZG9ubHlTaWduYWwoKTtcblx0XHRcdFx0XHRcdGlmICghaW5zdGFuY2UpIHJldHVybiBbXTtcblx0XHRcdFx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKTtcblx0XHRcdFx0XHRcdGlmICghbG9jYWxTdGF0ZS5vYmplY3RzIHx8ICFsb2NhbFN0YXRlLm5vbk9iamVjdHMpIHJldHVybiBbXTtcblx0XHRcdFx0XHRcdGlmICh0eXBlID09PSAnb2JqZWN0cycpIHJldHVybiBsb2NhbFN0YXRlLm9iamVjdHMoKTtcblx0XHRcdFx0XHRcdGlmICh0eXBlID09PSAnbm9uT2JqZWN0cycpIHJldHVybiBsb2NhbFN0YXRlLm5vbk9iamVjdHMoKTtcblx0XHRcdFx0XHRcdHJldHVybiBbLi4ubG9jYWxTdGF0ZS5vYmplY3RzKCksIC4uLmxvY2FsU3RhdGUubm9uT2JqZWN0cygpXTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjYWNoZWQuZ2V0KHR5cGUpITtcblx0XHR9O1xuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocmVmLCB7XG5cdFx0XHRuYXRpdmVFbGVtZW50OiB7XG5cdFx0XHRcdHNldDogKG5ld0VsZW1lbnQpID0+IHtcblx0XHRcdFx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKG5ld0VsZW1lbnQgIT09IHNpZ25hbFJlZigpKSB7XG5cdFx0XHRcdFx0XHRcdHNpZ25hbFJlZi5zZXQobmV3RWxlbWVudCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGdldDogcmVhZG9ubHlTaWduYWwsXG5cdFx0XHR9LFxuXHRcdFx0dW50cmFja2VkOiB7IGdldDogKCkgPT4gdW50cmFja2VkKHJlYWRvbmx5U2lnbmFsKSB9LFxuXHRcdFx0Y2hpbGRyZW46IHsgZ2V0OiAoKSA9PiBjaGlsZHJlbiB9LFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHJlZiBhcyBOZ3RJbmplY3RlZFJlZjxURWxlbWVudD47XG5cdH0pO1xufVxuIl19
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixVQUFVLEVBQ1YsVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEVBQ04scUJBQXFCLEVBQ3JCLE1BQU0sRUFDTixTQUFTLEdBR1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQXdCLE1BQU0sWUFBWSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFXaEMsTUFBTSxVQUFVLFlBQVksQ0FDM0IsVUFBMkMsSUFBSyxFQUNoRCxRQUFtQjtJQUVuQixRQUFRLEdBQUcsY0FBYyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNsRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLE9BQW1CLENBQUMsQ0FBQztJQUM1RSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMzQyxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRWpDLE9BQU8scUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUMzQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFaEUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUEwQyxTQUFTLEVBQUUsRUFBRTtZQUN4RSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDOUIsY0FBYyxDQUFDLEdBQUcsQ0FDakIsSUFBSSxFQUNKLFFBQVEsQ0FBQyxHQUFHLEVBQUU7b0JBQ2IsTUFBTSxRQUFRLEdBQUcsV0FBVyxFQUFFLENBQUM7b0JBQy9CLElBQUksQ0FBQyxRQUFRO3dCQUFFLE9BQU8sRUFBRSxDQUFDO29CQUN6QixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVU7d0JBQUUsT0FBTyxFQUFFLENBQUM7b0JBQzdELElBQUksSUFBSSxLQUFLLFNBQVM7d0JBQUUsT0FBTyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3BELElBQUksSUFBSSxLQUFLLFlBQVk7d0JBQUUsT0FBTyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQzFELE9BQU8sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RCxDQUFDLENBQUMsQ0FDRixDQUFDO2FBQ0Y7WUFDRCxPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRTtZQUM1QixhQUFhLEVBQUU7Z0JBQ2QsR0FBRyxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUU7b0JBQ25CLFNBQVMsQ0FBQyxHQUFHLEVBQUU7d0JBQ2QsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLEVBQUU7NEJBQy9CLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7eUJBQzFCO29CQUNGLENBQUMsQ0FBQyxDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsR0FBRyxFQUFFLFdBQVc7YUFDaEI7WUFDRCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ2hELFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUU7U0FDakMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxHQUErQixDQUFDO0lBQ3hDLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdERlc3Ryb3lSZWYsXG5cdEVsZW1lbnRSZWYsXG5cdGNvbXB1dGVkLFxuXHRpbmplY3QsXG5cdHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcblx0c2lnbmFsLFxuXHR1bnRyYWNrZWQsXG5cdHR5cGUgSW5qZWN0b3IsXG5cdHR5cGUgU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgZ2V0TG9jYWxTdGF0ZSwgdHlwZSBOZ3RJbnN0YW5jZU5vZGUgfSBmcm9tICcuL2luc3RhbmNlJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi91dGlscy9pcyc7XG5cbmV4cG9ydCB0eXBlIE5ndEluamVjdGVkUmVmPFRFbGVtZW50PiA9IEVsZW1lbnRSZWY8VEVsZW1lbnQ+ICYge1xuXHQvKiBjb25zdW1lcnMgc2hvdWxkIHVzZSB0aGlzIGZvciBsaXN0ZW50aW5nIHRvIGNoaWxkcmVuIGNoYW5nZXMgb24gdGhpcyByZWYgKi9cblx0Y2hpbGRyZW46ICh0eXBlPzogJ29iamVjdHMnIHwgJ25vbk9iamVjdHMnIHwgJ2JvdGgnKSA9PiBTaWduYWw8Tmd0SW5zdGFuY2VOb2RlW10+O1xuXHQvKiBjb25zdW1lcnMgc2hvdWxkIHVzZSB0aGlzIHRvIHJlYWQgdGhlIHJlZiBjdXJyZW50IHZhbHVlIHdpdGhvdXQgcmVnaXN0ZXJpbmcgdGhlIHNpZ25hbCAqL1xuXHR1bnRyYWNrZWQ6IFRFbGVtZW50O1xufTtcblxuZXhwb3J0IHR5cGUgTmd0UmVmPFRFbGVtZW50PiA9IFRFbGVtZW50IHwgTmd0SW5qZWN0ZWRSZWY8VEVsZW1lbnQ+O1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Tmd0UmVmPFRFbGVtZW50Pihcblx0aW5pdGlhbDogRWxlbWVudFJlZjxURWxlbWVudD4gfCBURWxlbWVudCA9IG51bGwhLFxuXHRpbmplY3Rvcj86IEluamVjdG9yLFxuKTogTmd0SW5qZWN0ZWRSZWY8VEVsZW1lbnQ+IHtcblx0aW5qZWN0b3IgPSBhc3NlcnRJbmplY3RvcihpbmplY3ROZ3RSZWYsIGluamVjdG9yKTtcblx0Y29uc3QgcmVmID0gaXMucmVmKGluaXRpYWwpID8gaW5pdGlhbCA6IG5ldyBFbGVtZW50UmVmKGluaXRpYWwgYXMgVEVsZW1lbnQpO1xuXHRjb25zdCByZWZTaWduYWwgPSBzaWduYWwocmVmLm5hdGl2ZUVsZW1lbnQpO1xuXHRjb25zdCByZWFkb25seVJlZiA9IHJlZlNpZ25hbC5hc1JlYWRvbmx5KCk7XG5cdGNvbnN0IGNvbXB1dGVkQ2FjaGVkID0gbmV3IE1hcCgpO1xuXG5cdHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHZvaWQgY29tcHV0ZWRDYWNoZWQuY2xlYXIoKSk7XG5cblx0XHRjb25zdCBjaGlsZHJlbiA9ICh0eXBlOiAnb2JqZWN0cycgfCAnbm9uT2JqZWN0cycgfCAnYm90aCcgPSAnb2JqZWN0cycpID0+IHtcblx0XHRcdGlmICghY29tcHV0ZWRDYWNoZWQuaGFzKHR5cGUpKSB7XG5cdFx0XHRcdGNvbXB1dGVkQ2FjaGVkLnNldChcblx0XHRcdFx0XHR0eXBlLFxuXHRcdFx0XHRcdGNvbXB1dGVkKCgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGluc3RhbmNlID0gcmVhZG9ubHlSZWYoKTtcblx0XHRcdFx0XHRcdGlmICghaW5zdGFuY2UpIHJldHVybiBbXTtcblx0XHRcdFx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKTtcblx0XHRcdFx0XHRcdGlmICghbG9jYWxTdGF0ZS5vYmplY3RzIHx8ICFsb2NhbFN0YXRlLm5vbk9iamVjdHMpIHJldHVybiBbXTtcblx0XHRcdFx0XHRcdGlmICh0eXBlID09PSAnb2JqZWN0cycpIHJldHVybiBsb2NhbFN0YXRlLm9iamVjdHMoKTtcblx0XHRcdFx0XHRcdGlmICh0eXBlID09PSAnbm9uT2JqZWN0cycpIHJldHVybiBsb2NhbFN0YXRlLm5vbk9iamVjdHMoKTtcblx0XHRcdFx0XHRcdHJldHVybiBbLi4ubG9jYWxTdGF0ZS5vYmplY3RzKCksIC4uLmxvY2FsU3RhdGUubm9uT2JqZWN0cygpXTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBjb21wdXRlZENhY2hlZC5nZXQodHlwZSkhO1xuXHRcdH07XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyhyZWYsIHtcblx0XHRcdG5hdGl2ZUVsZW1lbnQ6IHtcblx0XHRcdFx0c2V0OiAobmV3RWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAobmV3RWxlbWVudCAhPT0gcmVmU2lnbmFsKCkpIHtcblx0XHRcdFx0XHRcdFx0cmVmU2lnbmFsLnNldChuZXdFbGVtZW50KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSxcblx0XHRcdFx0Z2V0OiByZWFkb25seVJlZixcblx0XHRcdH0sXG5cdFx0XHR1bnRyYWNrZWQ6IHsgZ2V0OiAoKSA9PiB1bnRyYWNrZWQocmVhZG9ubHlSZWYpIH0sXG5cdFx0XHRjaGlsZHJlbjogeyBnZXQ6ICgpID0+IGNoaWxkcmVuIH0sXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcmVmIGFzIE5ndEluamVjdGVkUmVmPFRFbGVtZW50Pjtcblx0fSk7XG59XG4iXX0=
@@ -1102,8 +1102,8 @@ function createEvents(store) {
1102
1102
  .flatMap(handleRaycast)
1103
1103
  // Sort by event priority and distance
1104
1104
  .sort((a, b) => {
1105
- const aState = getLocalState(a.object).store.get();
1106
- const bState = getLocalState(b.object).store.get();
1105
+ const aState = getLocalState(a.object).store?.get();
1106
+ const bState = getLocalState(b.object).store?.get();
1107
1107
  if (!aState || !bState)
1108
1108
  return a.distance - b.distance;
1109
1109
  return bState.events.priority - aState.events.priority || a.distance - b.distance;
@@ -2935,15 +2935,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImpor
2935
2935
  function injectNgtRef(initial = null, injector) {
2936
2936
  injector = assertInjector(injectNgtRef, injector);
2937
2937
  const ref = is.ref(initial) ? initial : new ElementRef(initial);
2938
- const signalRef = signal(ref.nativeElement);
2939
- const readonlySignal = signalRef.asReadonly();
2940
- const cached = new Map();
2938
+ const refSignal = signal(ref.nativeElement);
2939
+ const readonlyRef = refSignal.asReadonly();
2940
+ const computedCached = new Map();
2941
2941
  return runInInjectionContext(injector, () => {
2942
- inject(DestroyRef).onDestroy(() => void cached.clear());
2942
+ inject(DestroyRef).onDestroy(() => void computedCached.clear());
2943
2943
  const children = (type = 'objects') => {
2944
- if (!cached.has(type)) {
2945
- cached.set(type, computed(() => {
2946
- const instance = readonlySignal();
2944
+ if (!computedCached.has(type)) {
2945
+ computedCached.set(type, computed(() => {
2946
+ const instance = readonlyRef();
2947
2947
  if (!instance)
2948
2948
  return [];
2949
2949
  const localState = getLocalState(instance);
@@ -2956,20 +2956,20 @@ function injectNgtRef(initial = null, injector) {
2956
2956
  return [...localState.objects(), ...localState.nonObjects()];
2957
2957
  }));
2958
2958
  }
2959
- return cached.get(type);
2959
+ return computedCached.get(type);
2960
2960
  };
2961
2961
  Object.defineProperties(ref, {
2962
2962
  nativeElement: {
2963
2963
  set: (newElement) => {
2964
2964
  untracked(() => {
2965
- if (newElement !== signalRef()) {
2966
- signalRef.set(newElement);
2965
+ if (newElement !== refSignal()) {
2966
+ refSignal.set(newElement);
2967
2967
  }
2968
2968
  });
2969
2969
  },
2970
- get: readonlySignal,
2970
+ get: readonlyRef,
2971
2971
  },
2972
- untracked: { get: () => untracked(readonlySignal) },
2972
+ untracked: { get: () => untracked(readonlyRef) },
2973
2973
  children: { get: () => children },
2974
2974
  });
2975
2975
  return ref;