@libs-ui/components-inputs-mention 0.2.356-4 → 0.2.356-40

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.
@@ -87,7 +87,7 @@ export class LibsUiComponentsInputsMentionDirective {
87
87
  }
88
88
  }
89
89
  addConfig(config) {
90
- const defaults = Object.assign({}, DEFAULT_CONFIG);
90
+ const defaults = { ...DEFAULT_CONFIG };
91
91
  const labelKey = config.labelKey || 'label';
92
92
  config = Object.assign(defaults, config);
93
93
  if (config.items && config.items.length > 0) {
@@ -296,7 +296,7 @@ export class LibsUiComponentsInputsMentionDirective {
296
296
  index: textBeforeCursor.lastIndexOf(key),
297
297
  };
298
298
  });
299
- const matchingCharacters = triggerChars.reduce((pre, current) => (pre && current && current.index > pre.index ? current : pre));
299
+ const matchingCharacters = triggerChars.reduce((pre, current) => (pre && current && current.index > pre.index ? current : pre), triggerChars[0]);
300
300
  if (matchingCharacters.index < 0) {
301
301
  this.stopSearch();
302
302
  return;
@@ -347,7 +347,7 @@ export class LibsUiComponentsInputsMentionDirective {
347
347
  const searchString = this.searchString();
348
348
  const searchList = this.searchList();
349
349
  // disabling the search relies on the async operation to do the filtering
350
- if (activeConfig && activeConfig.items && !activeConfig.disableSearch && !isNil(searchString) && activeConfig.labelKey && activeConfig.mentionFilter) {
350
+ if (activeConfig?.items && !activeConfig.disableSearch && !isNil(searchString) && activeConfig.labelKey && activeConfig.mentionFilter) {
351
351
  matches.push(...activeConfig.mentionFilter(searchString, activeConfig.items));
352
352
  }
353
353
  // update the search list
@@ -358,7 +358,7 @@ export class LibsUiComponentsInputsMentionDirective {
358
358
  searchList.hidden.set(!matches.length);
359
359
  searchList.activeIndex.set(0);
360
360
  searchList.scrollContent();
361
- this.outToggle.emit(matches.length ? true : false);
361
+ this.outToggle.emit(!!matches.length);
362
362
  }
363
363
  showSearchList(nativeElement) {
364
364
  let iframe = undefined;
@@ -383,12 +383,12 @@ export class LibsUiComponentsInputsMentionDirective {
383
383
  this.searchList()?.styleOff.set(this.mentionConfig()?.disableStyle || false);
384
384
  this.searchList()?.activeIndex.set(0);
385
385
  this.searchList()?.zIndex.set(this.mentionConfig()?.zIndex || 2500);
386
- this.searchList()?.isIframe.set(iframe ? true : false);
386
+ this.searchList()?.isIframe.set(!!iframe);
387
387
  this.searchList()?.listTemplate.set(this.mentionListTemplate());
388
388
  this.searchList()?.parentHandlerKeyDown.set(this.handlerKeydown.bind(this));
389
389
  this.searchList()?.position(nativeElement, iframe);
390
390
  if (firstTime && this.listComponentRef()) {
391
- this.iframeId.set(this.dynamicComponentService.addToBody(this.listComponentRef(), iframe ? true : false));
391
+ this.dynamicComponentService.addToBody(this.listComponentRef(), !!iframe);
392
392
  }
393
393
  }
394
394
  destroyListSearch() {
@@ -401,8 +401,8 @@ export class LibsUiComponentsInputsMentionDirective {
401
401
  const anchorNode = selection?.anchorNode;
402
402
  if (this.isEditor()) {
403
403
  const parentNode = anchorNode?.parentNode;
404
- if (parentNode && parentNode.getAttribute && parentNode.getAttribute('id')) {
405
- if (!parentNode.nextSibling || !parentNode.nextSibling.textContent?.length) {
404
+ if (parentNode?.getAttribute?.('id')) {
405
+ if (!parentNode.nextSibling?.textContent?.length) {
406
406
  parentNode?.parentNode?.insertBefore(empty, parentNode.nextSibling);
407
407
  }
408
408
  const range = document.createRange();
@@ -423,9 +423,8 @@ export class LibsUiComponentsInputsMentionDirective {
423
423
  nativeElement.appendChild(empty);
424
424
  return;
425
425
  }
426
- for (let i = 0; i < nativeElement.childNodes.length; i++) {
427
- const node = nativeElement.childNodes[i];
428
- if (anchorNode.nodeType === 3 && anchorNode === node && preNode && preNode.getAttribute && preNode.getAttribute('id') && (!anchorNode.textContent?.length || anchorNode.textContent.length === 1) && position === length) {
426
+ for (const node of Array.from(nativeElement.childNodes)) {
427
+ if (anchorNode.nodeType === 3 && anchorNode === node && preNode?.getAttribute?.('id') && (!anchorNode.textContent?.length || anchorNode.textContent.length === 1) && position === length) {
429
428
  nativeElement.appendChild(empty);
430
429
  break;
431
430
  }
@@ -435,12 +434,12 @@ export class LibsUiComponentsInputsMentionDirective {
435
434
  addNodeZeroWidthSpace(nativeElement = this.element.nativeElement) {
436
435
  const empty = document.createTextNode('\u200b');
437
436
  let preNode = null;
438
- for (let i = 0; i < nativeElement.childNodes.length; i++) {
439
- const node = nativeElement.childNodes[i];
440
- if (preNode && preNode.getAttribute && preNode.getAttribute('id') && node && node.getAttribute && node.getAttribute('id')) {
437
+ for (const node of Array.from(nativeElement.childNodes)) {
438
+ const typedNode = node;
439
+ if (preNode?.getAttribute?.('id') && typedNode?.getAttribute?.('id')) {
441
440
  nativeElement.insertBefore(empty, preNode.nextSibling);
442
441
  }
443
- preNode = node;
442
+ preNode = typedNode;
444
443
  }
445
444
  }
446
445
  insertMention(nativeElement, pos) {
@@ -504,4 +503,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
504
503
  standalone: true,
505
504
  }]
506
505
  }], ctorParameters: () => [] });
507
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL21lbnRpb24vc3JjL21lbnRpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQStCLFNBQVMsRUFBRSxVQUFVLEVBQTBCLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdKLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRS9KLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQU9uRixNQUFNLE9BQU8sc0NBQXNDO0lBQ2pELG1CQUFtQjtJQUNYLGdCQUFnQixHQUFHLE1BQU0sQ0FBdUUsU0FBUyxDQUFDLENBQUM7SUFDM0csV0FBVyxHQUFHLE1BQU0sQ0FBbUIsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELFlBQVksR0FBRyxNQUFNLENBQTZCLFNBQVMsQ0FB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QyxlQUFlLEVBQUUsQ0FBQyxFQUMvQixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQjt5QkFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksb0JBQW9CLEVBQUUsQ0FBQzs0QkFDekIsb0JBQW9CLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO3dCQUNoRCxDQUFDO29CQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0csQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBeGhCVSxzQ0FBc0M7NEZBQXRDLHNDQUFzQzs7NEZBQXRDLHNDQUFzQztrQkFMbEQsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSwwQ0FBMEM7b0JBQ3BELFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudFJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIFRlbXBsYXRlUmVmLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElFdmVudCwgVFlQRV9URU1QTEFURV9SRUYgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtZHluYW1pYy1jb21wb25lbnQnO1xuaW1wb3J0IHsgVXRpbHNLZXlDb2RlQ29uc3RhbnQsIGdldCwgaXNOaWwsIHV1aWQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgREVGQVVMVF9DT05GSUcsIGJ1aWxkVGVtcGxhdGUgfSBmcm9tICcuL2RlZmluZXMvdGVtcGxhdGUuZGVmaW5lJztcbmltcG9ydCB7IGdldENhcmV0UG9zaXRpb24sIGdldFRleHRCZWZvcmVDdXJzb3IsIGdldFZhbHVlLCBnZXRXaW5kb3dTZWxlY3Rpb24sIGluc2VydFRleHRBdENhcmV0LCBpbnNlcnRWYWx1ZSwgc2V0Q2FyZXRQb3NpdGlvbiB9IGZyb20gJy4vZGVmaW5lcy91dGlscy5kZWZpbmUnO1xuaW1wb3J0IHsgSU1lbnRpb25Db25maWcsIElNZW50aW9uRnVuY3Rpb25Db250cm9sRXZlbnQsIElNZW50aW9uSW5zZXJ0LCBJTm9kZUluc2VydCB9IGZyb20gJy4vaW50ZXJmYWNlcy9tZW50aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTWVudGlvbkxpc3RDb21wb25lbnQgfSBmcm9tICcuL2xpc3QvbGlzdC5jb21wb25lbnQnO1xuXG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbTGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25EaXJlY3RpdmVdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25EaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByaXZhdGUgbGlzdENvbXBvbmVudFJlZiA9IHNpZ25hbDxDb21wb25lbnRSZWY8TGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25MaXN0Q29tcG9uZW50PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBub2Rlc0luc2VydCA9IHNpZ25hbDxTZXQ8SU5vZGVJbnNlcnQ+PihuZXcgU2V0KCkpO1xuICBwcml2YXRlIGFjdGl2ZUNvbmZpZyA9IHNpZ25hbDxJTWVudGlvbkNvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSB0cmlnZ2VyQ2hhcnMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgSU1lbnRpb25Db25maWc+Pih7fSk7XG4gIHByaXZhdGUgc2VhcmNoU3RyaW5nID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXJ0UG9zID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBzdGFydE5vZGUgPSBzaWduYWw8YW55Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIHNlYXJjaExpc3QgPSBzaWduYWw8TGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25MaXN0Q29tcG9uZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHNlYXJjaGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgaWZyYW1lID0gc2lnbmFsPGFueT4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBsYXN0S2V5Q29kZSA9IHNpZ25hbDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgaXNFZGl0b3IgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGlmcmFtZUlkID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBlbGVtZW50ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnRTZXJ2aWNlID0gaW5qZWN0KExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vICNyZWdpb24gSU5QVVRcbiAgcmVhZG9ubHkgdGltZURlbGF5SW5pdCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigwLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IDAgfSk7XG4gIHJlYWRvbmx5IG1lbnRpb25Db25maWcgPSBpbnB1dDxJTWVudGlvbkNvbmZpZz4oKTtcbiAgcmVhZG9ubHkgbWVudGlvbkxpc3RUZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPFRZUEVfVEVNUExBVEVfUkVGPj4oKTtcblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRTZWFyY2hUZXJtID0gb3V0cHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgb3V0SXRlbVNlbGVjdGVkID0gb3V0cHV0PHVua25vd24+KCk7XG4gIHJlYWRvbmx5IG91dFRvZ2dsZSA9IG91dHB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBvdXRJbnNlcnRNZW50aW9uID0gb3V0cHV0PElNZW50aW9uSW5zZXJ0PigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbkNvbnRyb2wgPSBvdXRwdXQ8SU1lbnRpb25GdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgdGhpcy5tZW50aW9uQ29uZmlnKCk7XG4gICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy51cGRhdGVDb25maWcoKSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMubWVudGlvbkNvbmZpZygpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzQ29udGVudEVkaXRhYmxlID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKTtcbiAgICAgIHRoaXMuaXNFZGl0b3Iuc2V0KCFpc0NvbnRlbnRFZGl0YWJsZSk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gIXRoaXMuaXNFZGl0b3IoKSA/IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50IDogdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnFsLWVkaXRvcltjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdJyk7XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyS2V5ZG93bi5iaW5kKHRoaXMpKGV2ZW50LCBlbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoZXZlbnQ6IElucHV0RXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJJbnB1dC5iaW5kKHRoaXMpKGV2ZW50LCBlbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJCbHVyLmJpbmQodGhpcykoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJGb2N1cy5iaW5kKHRoaXMpKGV2ZW50LCBlbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLm91dEZ1bmN0aW9uQ29udHJvbC5lbWl0KHtcbiAgICAgICAgYWRkTWVudGlvbjogKCkgPT4ge1xuICAgICAgICAgIGluc2VydFRleHRBdENhcmV0KGVsZW1lbnQsIGAke3RoaXMubWVudGlvbkNvbmZpZygpPy50cmlnZ2VyQ2hhcn1gKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlcktleWRvd24oeyBrZXk6IHRoaXMubWVudGlvbkNvbmZpZygpPy50cmlnZ2VyQ2hhciwga2V5Q29kZTogVXRpbHNLZXlDb2RlQ29uc3RhbnQuQkFDS1NQQUNFLCBzaGlmdEtleTogdHJ1ZSwgaW5wdXRFdmVudDogdHJ1ZSB9LCBlbGVtZW50KTtcbiAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSwgdGhpcy50aW1lRGVsYXlJbml0KCkpO1xuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHByb3RlY3RlZCB1cGRhdGVDb25maWcoKSB7XG4gICAgY29uc3QgbWVudGlvbkNvbmZpZyA9IHRoaXMubWVudGlvbkNvbmZpZygpO1xuICAgIGlmICghbWVudGlvbkNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJDaGFycy5zZXQoe30pO1xuICAgIHRoaXMuYWRkQ29uZmlnKG1lbnRpb25Db25maWcpO1xuICAgIGlmIChtZW50aW9uQ29uZmlnLm1lbnRpb24pIHtcbiAgICAgIG1lbnRpb25Db25maWcubWVudGlvbi5mb3JFYWNoKChjb25maWcpID0+IHRoaXMuYWRkQ29uZmlnKGNvbmZpZykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkQ29uZmlnKGNvbmZpZzogSU1lbnRpb25Db25maWcpIHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHKTtcbiAgICBjb25zdCBsYWJlbEtleSA9IGNvbmZpZy5sYWJlbEtleSB8fCAnbGFiZWwnO1xuICAgIGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oZGVmYXVsdHMsIGNvbmZpZyk7XG4gICAgaWYgKGNvbmZpZy5pdGVtcyAmJiBjb25maWcuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcuaXRlbXNbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbmZpZy5pdGVtcy5mb3JFYWNoKChsYWJlbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9iamVjdDogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPj4gPSB7fTtcbiAgICAgICAgICBvYmplY3RbbGFiZWxLZXldID0gbGFiZWw7XG4gICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAobGFiZWxLZXkpIHtcbiAgICAgICAgLy8gcmVtb3ZlIGl0ZW1zIHdpdGhvdXQgYW4gbGFiZWxLZXkgKGFzIGl0J3MgcmVxdWlyZWQgdG8gZmlsdGVyIHRoZSBsaXN0KVxuICAgICAgICBjb25maWcuaXRlbXMgPSBjb25maWcuaXRlbXMuZmlsdGVyKChlKSA9PiBlW2xhYmVsS2V5XSk7XG4gICAgICAgIGlmICghY29uZmlnLmRpc2FibGVTb3J0KSB7XG4gICAgICAgICAgY29uZmlnLml0ZW1zLnNvcnQoKGEsIGIpID0+IChhW2xhYmVsS2V5XSB8fCAnJykubG9jYWxlQ29tcGFyZShiW2xhYmVsS2V5XSB8fCAnJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlckNoYXJzLnVwZGF0ZSgoaXRlbSkgPT4gKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBbY29uZmlnLnRyaWdnZXJDaGFyIHx8ICdAJ106IGNvbmZpZyxcbiAgICB9KSk7XG4gICAgaWYgKHRoaXMuYWN0aXZlQ29uZmlnKCkgJiYgdGhpcy5hY3RpdmVDb25maWcoKT8udHJpZ2dlckNoYXIgPT09IGNvbmZpZy50cmlnZ2VyQ2hhcikge1xuICAgICAgdGhpcy5hY3RpdmVDb25maWcuc2V0KGNvbmZpZyk7XG4gICAgICB0aGlzLnVwZGF0ZVNlYXJjaExpc3QoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0SWZyYW1lKGlmcmFtZTogSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICB0aGlzLmlmcmFtZS5zZXQoaWZyYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcEV2ZW50KGV2ZW50OiBFdmVudCkge1xuICAgIGlmIChnZXQ8dW5rbm93bj4oZXZlbnQsICd3YXNDbGljaycpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckJsdXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN0b3BFdmVudChldmVudCk7XG4gICAgICB0aGlzLnN0b3BTZWFyY2goKTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJJbnB1dChldmVudDogSW5wdXRFdmVudCwgbmF0aXZlRWxlbWVudDogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgY29uc3QgZGF0YSA9IGdldChldmVudCwgJ2RhdGEnKTtcbiAgICBpZiAodGhpcy5sYXN0S2V5Q29kZSgpID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5CVUZGRVJFRCAmJiBkYXRhKSB7XG4gICAgICBjb25zdCBrZXlDb2RlID0gZGF0YS5jaGFyQ29kZUF0KDApO1xuICAgICAgdGhpcy5oYW5kbGVyS2V5ZG93bih7IGtleUNvZGUsIGlucHV0RXZlbnQ6IHRydWUgfSwgbmF0aXZlRWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJLZXlkb3duKGV2ZW50OiBhbnksIG5hdGl2ZUVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk6IGFueSB7XG4gICAgdGhpcy5sYXN0S2V5Q29kZS5zZXQoZXZlbnQua2V5Q29kZSk7XG4gICAgaWYgKGV2ZW50LmlzQ29tcG9zaW5nIHx8IGV2ZW50LmtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkJVRkZFUkVEKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsOiBhbnkgPSBnZXRWYWx1ZShuYXRpdmVFbGVtZW50KTtcbiAgICBsZXQgcG9zOiBhbnkgPSBnZXRDYXJldFBvc2l0aW9uKG5hdGl2ZUVsZW1lbnQsIHRoaXMuaWZyYW1lKCkpO1xuICAgIGxldCBjaGFyUHJlc3NlZCA9IGV2ZW50LmtleTtcbiAgICBpZiAoIXRoaXMuaXNFZGl0b3IoKSkge1xuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkJBQ0tTUEFDRSkge1xuICAgICAgICB0aGlzLmFwcGVuZEVtcHR5VG9MYXN0Tm9kZShwb3MsIHZhbC5sZW5ndGgsIG5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFkZE5vZGVaZXJvV2lkdGhTcGFjZShuYXRpdmVFbGVtZW50KSwgMCk7XG4gICAgfVxuICAgIGlmICghY2hhclByZXNzZWQpIHtcbiAgICAgIGNvbnN0IGNoYXJDb2RlID0gZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZTtcbiAgICAgIGNoYXJQcmVzc2VkID0gU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKTtcbiAgICAgIGlmICghZXZlbnQuc2hpZnRLZXkgJiYgY2hhckNvZGUgPj0gNjUgJiYgY2hhckNvZGUgPD0gOTApIHtcbiAgICAgICAgY2hhclByZXNzZWQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlICsgMzIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuRU5URVIgJiYgZXZlbnQud2FzQ2xpY2sgJiYgcG9zIDwgKHRoaXMuc3RhcnRQb3MoKSB8fCAwKSkge1xuICAgICAgcG9zID0gdGhpcy5zdGFydE5vZGUoKS5sZW5ndGg7XG4gICAgICBzZXRDYXJldFBvc2l0aW9uKHRoaXMuc3RhcnROb2RlKCksIHBvcywgdGhpcy5pZnJhbWUoKSk7XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMudHJpZ2dlckNoYXJzKClbY2hhclByZXNzZWRdO1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgIHRoaXMuYWN0aXZlQ29uZmlnLnNldChjb25maWcpO1xuICAgICAgdGhpcy5zdGFydFBvcy5zZXQoZXZlbnQuaW5wdXRFdmVudCA/IHBvcyAtIDEgOiBwb3MpO1xuICAgICAgdGhpcy5zdGFydE5vZGUuc2V0KGdldFdpbmRvd1NlbGVjdGlvbih0aGlzLmlmcmFtZSgpKT8uYW5jaG9yTm9kZSk7XG4gICAgICB0aGlzLnNlYXJjaGluZy5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLnNlYXJjaFN0cmluZy5zZXQoJycpO1xuICAgICAgdGhpcy5zaG93U2VhcmNoTGlzdChuYXRpdmVFbGVtZW50KTtcbiAgICAgIHRoaXMudXBkYXRlU2VhcmNoTGlzdCgpO1xuICAgICAgaWYgKGNvbmZpZy5yZXR1cm5UcmlnZ2VyKSB7XG4gICAgICAgIHRoaXMub3V0U2VhcmNoVGVybS5lbWl0KGNvbmZpZy50cmlnZ2VyQ2hhcik7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBpdGVtU2V0IG9mIHRoaXMubm9kZXNJbnNlcnQoKSkge1xuICAgICAgICBpZiAoIW5hdGl2ZUVsZW1lbnQuY29udGFpbnMoaXRlbVNldC5lbGVtZW50U3BhbikpIHtcbiAgICAgICAgICBpdGVtU2V0LnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB0aGlzLm5vZGVzSW5zZXJ0KCkuZGVsZXRlKGl0ZW1TZXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0UG9zKCk7XG4gICAgaWYgKGlzTmlsKHN0YXJ0UG9zKSB8fCBzdGFydFBvcyA8IDAgfHwgIXRoaXMuc2VhcmNoaW5nKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoTGlzdCA9IHRoaXMuc2VhcmNoTGlzdCgpO1xuICAgIGlmIChwb3MgPD0gc3RhcnRQb3MpIHtcbiAgICAgIGlmIChzZWFyY2hMaXN0KSB7XG4gICAgICAgIHNlYXJjaExpc3QuaGlkZGVuLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LlNISUZUIHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgcG9zIDw9IHN0YXJ0UG9zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5hY3RpdmVDb25maWcoKT8uYWxsb3dTcGFjZSAmJiBldmVudC5rZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5TUEFDRSkge1xuICAgICAgdGhpcy5zdGFydFBvcy5zZXQoLTEpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuQkFDS1NQQUNFICYmIHBvcyA+IDApIHtcbiAgICAgIHBvcy0tO1xuICAgICAgaWYgKHBvcyA9PT0gdGhpcy5zdGFydFBvcygpKSB7XG4gICAgICAgIHRoaXMuc3RvcFNlYXJjaCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2VhcmNoTGlzdD8uaGlkZGVuKCkpIHtcbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5UQUIgfHwgZXZlbnQua2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuRU5URVIpIHtcbiAgICAgICAgdGhpcy5zdG9wU2VhcmNoKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFzZWFyY2hMaXN0Py5oaWRkZW4oKSAmJiB0aGlzLmFjdGl2ZUNvbmZpZygpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuVEFCIHx8IGV2ZW50LmtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkVOVEVSKSB7XG4gICAgICAgIHRoaXMuc3RvcEV2ZW50KGV2ZW50KTtcbiAgICAgICAgLy8gZW1pdCB0aGUgc2VsZWN0ZWQgbGlzdCBpdGVtXG4gICAgICAgIHRoaXMub3V0SXRlbVNlbGVjdGVkLmVtaXQoc2VhcmNoTGlzdD8uQWN0aXZlSXRlbSk7XG4gICAgICAgIC8vIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgc2VsZWN0ZWQgaXRlbSBiZWZvcmUgaW5zZXJ0aW5nIHRoZSB0ZXh0XG4gICAgICAgIHRoaXMuaW5zZXJ0TWVudGlvbihuYXRpdmVFbGVtZW50LCBwb3MpO1xuICAgICAgICAvLyBmaXJlIGlucHV0IGV2ZW50IHNvIGFuZ3VsYXIgYmluZGluZ3MgYXJlIHVwZGF0ZWRcbiAgICAgICAgaWYgKCdFdmVudCcgaW4gd2luZG93KSB7XG4gICAgICAgICAgLy8gdGhpcyBzZWVtcyBiYWNrd2FyZHMsIGJ1dCBmaXJlIHRoZSBldmVudCBmcm9tIHRoaXMgZWxlbWVudHMgbmF0aXZlRWxlbWVudCAobm90IHRoZVxuICAgICAgICAgIC8vIG9uZSBwcm92aWRlZCB0aGF0IG1heSBiZSBpbiBhbiBpZnJhbWUsIGFzIGl0IHdvbid0IGJlIHByb3BvZ2F0ZSlcbiAgICAgICAgICAvLyBDcmVhdGUgdGhlIGV2ZW50IHVzaW5nIHRoZSBtb2Rlcm4gRXZlbnQgY29uc3RydWN0b3JcbiAgICAgICAgICBjb25zdCBldnQgPSBuZXcgRXZlbnQodGhpcy5pZnJhbWUoKSA/ICdjaGFuZ2UnIDogJ2lucHV0Jywge1xuICAgICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBldmVudCBvbiB0aGUgbmF0aXZlIGVsZW1lbnRcbiAgICAgICAgICBuYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXJ0UG9zLnNldCgtMSk7XG4gICAgICAgIHRoaXMuc3RvcFNlYXJjaCgpO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkVTQ0FQRSkge1xuICAgICAgICB0aGlzLnN0b3BFdmVudChldmVudCk7XG4gICAgICAgIHRoaXMuc3RvcFNlYXJjaCgpO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5ET1dOX0FSUk9XKSB7XG4gICAgICAgIHRoaXMuc3RvcEV2ZW50KGV2ZW50KTtcbiAgICAgICAgc2VhcmNoTGlzdD8uYWN0aXZhdGVOZXh0SXRlbSgpO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5VUF9BUlJPVykge1xuICAgICAgICB0aGlzLnN0b3BFdmVudChldmVudCk7XG4gICAgICAgIHNlYXJjaExpc3Q/LmFjdGl2YXRlUHJldmlvdXNJdGVtKCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhclByZXNzZWQubGVuZ3RoICE9PSAxICYmIGV2ZW50LmtleUNvZGUgIT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkJBQ0tTUEFDRSkge1xuICAgICAgdGhpcy5zdG9wRXZlbnQoZXZlbnQpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5zZWFyY2hpbmcoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgbWVudGlvbiA9IHZhbC5zdWJzdHJpbmcoKHRoaXMuc3RhcnRQb3MoKSB8fCAwKSArIDEsIHBvcyk7XG5cbiAgICBpZiAoZXZlbnQua2V5Q29kZSAhPT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuQkFDS1NQQUNFICYmICFldmVudC5pbnB1dEV2ZW50KSB7XG4gICAgICBtZW50aW9uICs9IGNoYXJQcmVzc2VkO1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2hTdHJpbmcgPSBtZW50aW9uLnJlcGxhY2UoU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApLCAnICcpLnJlcGxhY2UoU3RyaW5nLmZyb21DaGFyQ29kZSgwKSwgJycpO1xuICAgIHRoaXMuc2VhcmNoU3RyaW5nLnNldChzZWFyY2hTdHJpbmcudHJpbSgpKTtcbiAgICBjb25zdCBsaW1pdFNwYWNlU2VhcmNoUXVlcnkgPSB0aGlzLmFjdGl2ZUNvbmZpZygpPy5saW1pdFNwYWNlU2VhcmNoUXVlcnk7XG4gICAgaWYgKGxpbWl0U3BhY2VTZWFyY2hRdWVyeSAmJiBzZWFyY2hTdHJpbmcuc3BsaXQoJyAnKS5sZW5ndGggLSAxID4gbGltaXRTcGFjZVNlYXJjaFF1ZXJ5KSB7XG4gICAgICB0aGlzLnNlYXJjaFN0cmluZy5zZXQoJycpO1xuICAgIH1cbiAgICBpZiAodGhpcy5hY3RpdmVDb25maWcoKT8ucmV0dXJuVHJpZ2dlcikge1xuICAgICAgY29uc3QgdHJpZ2dlckNoYXIgPSB0aGlzLnNlYXJjaFN0cmluZygpIHx8IGV2ZW50LmtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkJBQ0tTUEFDRSA/IHZhbC5zdWJzdHJpbmcodGhpcy5zdGFydFBvcygpLCAodGhpcy5zdGFydFBvcygpIHx8IDApICsgMSkgOiAnJztcblxuICAgICAgdGhpcy5vdXRTZWFyY2hUZXJtLmVtaXQodHJpZ2dlckNoYXIgKyB0aGlzLnNlYXJjaFN0cmluZygpKTtcbiAgICAgIHRoaXMudXBkYXRlU2VhcmNoTGlzdCgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3V0U2VhcmNoVGVybS5lbWl0KHRoaXMuc2VhcmNoU3RyaW5nKCkpO1xuICAgIHRoaXMudXBkYXRlU2VhcmNoTGlzdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJGb2N1cyhlPzogRXZlbnQsIG5hdGl2ZUVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgIGU/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IGdldFdpbmRvd1NlbGVjdGlvbih0aGlzLmlmcmFtZSgpKT8uYW5jaG9yTm9kZTtcblxuICAgICAgaWYgKG5vZGU/Lm5vZGVUeXBlICE9PSAzKSB7XG4gICAgICAgIHRoaXMuc3RvcFNlYXJjaCgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRleHRCZWZvcmVDdXJzb3IgPSBnZXRUZXh0QmVmb3JlQ3Vyc29yKCkgfHwgJyc7XG5cbiAgICAgIGNvbnN0IHRyaWdnZXJDaGFycyA9IE9iamVjdC5rZXlzKHRoaXMudHJpZ2dlckNoYXJzKCkpLm1hcCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICBjb25maWc6IHRoaXMudHJpZ2dlckNoYXJzKClba2V5XSxcbiAgICAgICAgICBpbmRleDogdGV4dEJlZm9yZUN1cnNvci5sYXN0SW5kZXhPZihrZXkpIGFzIG51bWJlcixcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbWF0Y2hpbmdDaGFyYWN0ZXJzID0gdHJpZ2dlckNoYXJzLnJlZHVjZSgocHJlLCBjdXJyZW50KSA9PiAocHJlICYmIGN1cnJlbnQgJiYgY3VycmVudC5pbmRleCA+IHByZS5pbmRleCA/IGN1cnJlbnQgOiBwcmUpKTtcblxuICAgICAgaWYgKG1hdGNoaW5nQ2hhcmFjdGVycy5pbmRleCA8IDApIHtcbiAgICAgICAgdGhpcy5zdG9wU2VhcmNoKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoID0gdGV4dEJlZm9yZUN1cnNvcj8uc3Vic3RyaW5nKG1hdGNoaW5nQ2hhcmFjdGVycy5pbmRleCwgdGV4dEJlZm9yZUN1cnNvci5sZW5ndGgpO1xuXG4gICAgICBpZiAoIXNlYXJjaCkge1xuICAgICAgICB0aGlzLnN0b3BTZWFyY2goKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBwb3MgPSBnZXRDYXJldFBvc2l0aW9uKG5hdGl2ZUVsZW1lbnQsIHRoaXMuaWZyYW1lKCkpO1xuXG4gICAgICB0aGlzLmFjdGl2ZUNvbmZpZy5zZXQobWF0Y2hpbmdDaGFyYWN0ZXJzLmNvbmZpZyk7XG4gICAgICB0aGlzLnN0YXJ0UG9zLnNldChwb3MgLSAodGV4dEJlZm9yZUN1cnNvci5sZW5ndGggLSBtYXRjaGluZ0NoYXJhY3RlcnMuaW5kZXgpKTtcbiAgICAgIHRoaXMuc2VhcmNoU3RyaW5nLnNldChzZWFyY2gucmVwbGFjZShtYXRjaGluZ0NoYXJhY3RlcnMua2V5LCAnJykpO1xuICAgICAgdGhpcy5zZWFyY2hpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5oYW5kbGVyS2V5ZG93bih7IGtleUNvZGU6ICcnLmNoYXJDb2RlQXQoMCksIGlucHV0RXZlbnQ6IGZhbHNlIH0sIG5hdGl2ZUVsZW1lbnQpO1xuICAgICAgY29uc3QgZGl2RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICBkaXZFbGVtZW50LnN0eWxlLndpZHRoID0gJ21heC1jb250ZW50JztcbiAgICAgIGRpdkVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgZGl2RWxlbWVudC5pbm5lclRleHQgPSBzZWFyY2g7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdkVsZW1lbnQpO1xuICAgICAgbGV0IGlmcmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmcmFtZSA9IHRoaXMubWVudGlvbkNvbmZpZygpPy5pZnJhbWUgPyAod2luZG93LnBhcmVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm1lbnRpb25Db25maWcoKT8uaWZyYW1lIGFzIHN0cmluZykgYXMgSFRNTElGcmFtZUVsZW1lbnQpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoTGlzdCA9IHRoaXMuc2VhcmNoTGlzdCgpO1xuICAgICAgaWYgKHNlYXJjaExpc3QpIHtcbiAgICAgICAgc2VhcmNoTGlzdC5wb3NpdGlvbihuYXRpdmVFbGVtZW50LCBpZnJhbWUsIGRpdkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xuICAgICAgfVxuICAgICAgZGl2RWxlbWVudC5yZW1vdmUoKTtcbiAgICAgIG5hdGl2ZUVsZW1lbnQubm9ybWFsaXplKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BTZWFyY2goKSB7XG4gICAgY29uc3Qgc2VhcmNoTGlzdCA9IHRoaXMuc2VhcmNoTGlzdCgpO1xuICAgIGlmIChzZWFyY2hMaXN0ICYmICFzZWFyY2hMaXN0LmhpZGRlbigpKSB7XG4gICAgICBzZWFyY2hMaXN0LmhpZGRlbi5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLm91dFRvZ2dsZS5lbWl0KGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVDb25maWcuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5zZWFyY2hpbmcuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VhcmNoTGlzdCgpIHtcbiAgICBjb25zdCBtYXRjaGVzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IGFjdGl2ZUNvbmZpZyA9IHRoaXMuYWN0aXZlQ29uZmlnKCk7XG4gICAgY29uc3Qgc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hTdHJpbmcoKTtcbiAgICBjb25zdCBzZWFyY2hMaXN0ID0gdGhpcy5zZWFyY2hMaXN0KCk7XG4gICAgLy8gZGlzYWJsaW5nIHRoZSBzZWFyY2ggcmVsaWVzIG9uIHRoZSBhc3luYyBvcGVyYXRpb24gdG8gZG8gdGhlIGZpbHRlcmluZ1xuICAgIGlmIChhY3RpdmVDb25maWcgJiYgYWN0aXZlQ29uZmlnLml0ZW1zICYmICFhY3RpdmVDb25maWcuZGlzYWJsZVNlYXJjaCAmJiAhaXNOaWwoc2VhcmNoU3RyaW5nKSAmJiBhY3RpdmVDb25maWcubGFiZWxLZXkgJiYgYWN0aXZlQ29uZmlnLm1lbnRpb25GaWx0ZXIpIHtcbiAgICAgIG1hdGNoZXMucHVzaCguLi4oYWN0aXZlQ29uZmlnLm1lbnRpb25GaWx0ZXIoc2VhcmNoU3RyaW5nLCBhY3RpdmVDb25maWcuaXRlbXMpIGFzIGFueSkpO1xuICAgIH1cbiAgICAvLyB1cGRhdGUgdGhlIHNlYXJjaCBsaXN0XG4gICAgaWYgKCFzZWFyY2hMaXN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNlYXJjaExpc3QuaXRlbXMuc2V0KG1hdGNoZXMpO1xuICAgIHNlYXJjaExpc3QuaGlkZGVuLnNldCghbWF0Y2hlcy5sZW5ndGgpO1xuICAgIHNlYXJjaExpc3QuYWN0aXZlSW5kZXguc2V0KDApO1xuICAgIHNlYXJjaExpc3Quc2Nyb2xsQ29udGVudCgpO1xuICAgIHRoaXMub3V0VG9nZ2xlLmVtaXQobWF0Y2hlcy5sZW5ndGggPyB0cnVlIDogZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93U2VhcmNoTGlzdChuYXRpdmVFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgbGV0IGlmcmFtZSA9IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtZW50aW9uQ29uZmlnID0gdGhpcy5tZW50aW9uQ29uZmlnKCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmcmFtZSA9IG1lbnRpb25Db25maWc/LmlmcmFtZSA/ICh3aW5kb3cucGFyZW50LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1lbnRpb25Db25maWc/LmlmcmFtZSBhcyBzdHJpbmcpIGFzIEhUTUxJRnJhbWVFbGVtZW50KSA6IHVuZGVmaW5lZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIH1cbiAgICBpZiAoIW1lbnRpb25Db25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRUb2dnbGUuZW1pdCh0cnVlKTtcbiAgICBsZXQgZmlyc3RUaW1lID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMubGlzdENvbXBvbmVudFJlZigpKSB7XG4gICAgICBmaXJzdFRpbWUgPSB0cnVlO1xuICAgICAgdGhpcy5saXN0Q29tcG9uZW50UmVmLnNldCh0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KExpYnNVaUNvbXBvbmVudHNJbnB1dHNNZW50aW9uTGlzdENvbXBvbmVudCkpO1xuICAgICAgdGhpcy5zZWFyY2hMaXN0LnNldCh0aGlzLmxpc3RDb21wb25lbnRSZWYoKT8uaW5zdGFuY2UpO1xuICAgIH1cbiAgICB0aGlzLnNlYXJjaExpc3QoKT8ubGFiZWxLZXkuc2V0KHRoaXMuYWN0aXZlQ29uZmlnKCk/LmxhYmVsS2V5IHx8ICcnKTtcbiAgICB0aGlzLnNlYXJjaExpc3QoKT8uc3R5bGVPZmYuc2V0KHRoaXMubWVudGlvbkNvbmZpZygpPy5kaXNhYmxlU3R5bGUgfHwgZmFsc2UpO1xuICAgIHRoaXMuc2VhcmNoTGlzdCgpPy5hY3RpdmVJbmRleC5zZXQoMCk7XG4gICAgdGhpcy5zZWFyY2hMaXN0KCk/LnpJbmRleC5zZXQodGhpcy5tZW50aW9uQ29uZmlnKCk/LnpJbmRleCB8fCAyNTAwKTtcbiAgICB0aGlzLnNlYXJjaExpc3QoKT8uaXNJZnJhbWUuc2V0KGlmcmFtZSA/IHRydWUgOiBmYWxzZSk7XG4gICAgdGhpcy5zZWFyY2hMaXN0KCk/Lmxpc3RUZW1wbGF0ZS5zZXQodGhpcy5tZW50aW9uTGlzdFRlbXBsYXRlKCkpO1xuICAgIHRoaXMuc2VhcmNoTGlzdCgpPy5wYXJlbnRIYW5kbGVyS2V5RG93bi5zZXQodGhpcy5oYW5kbGVyS2V5ZG93bi5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnNlYXJjaExpc3QoKT8ucG9zaXRpb24obmF0aXZlRWxlbWVudCwgaWZyYW1lKTtcbiAgICBpZiAoZmlyc3RUaW1lICYmIHRoaXMubGlzdENvbXBvbmVudFJlZigpKSB7XG4gICAgICB0aGlzLmlmcmFtZUlkLnNldCh0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmFkZFRvQm9keSh0aGlzLmxpc3RDb21wb25lbnRSZWYoKSwgaWZyYW1lID8gdHJ1ZSA6IGZhbHNlKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95TGlzdFNlYXJjaCgpIHtcbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLnJlbW92ZSh0aGlzLmxpc3RDb21wb25lbnRSZWYsIHRoaXMuaWZyYW1lSWQoKSk7XG4gICAgdGhpcy5saXN0Q29tcG9uZW50UmVmLnNldCh1bmRlZmluZWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFwcGVuZEVtcHR5VG9MYXN0Tm9kZShwb3NpdGlvbjogbnVtYmVyLCBsZW5ndGg6IG51bWJlciwgbmF0aXZlRWxlbWVudDogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgY29uc3QgZW1wdHkgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFx1MDBBMCcpO1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IGdldFdpbmRvd1NlbGVjdGlvbih0aGlzLmlmcmFtZSgpKTtcbiAgICBjb25zdCBhbmNob3JOb2RlID0gc2VsZWN0aW9uPy5hbmNob3JOb2RlO1xuXG4gICAgaWYgKHRoaXMuaXNFZGl0b3IoKSkge1xuICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IGFuY2hvck5vZGU/LnBhcmVudE5vZGUgYXMgRWxlbWVudDtcblxuICAgICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUgJiYgcGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ2lkJykpIHtcbiAgICAgICAgaWYgKCFwYXJlbnROb2RlLm5leHRTaWJsaW5nIHx8ICFwYXJlbnROb2RlLm5leHRTaWJsaW5nLnRleHRDb250ZW50Py5sZW5ndGgpIHtcbiAgICAgICAgICBwYXJlbnROb2RlPy5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoZW1wdHksIHBhcmVudE5vZGUubmV4dFNpYmxpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KHBhcmVudE5vZGUubmV4dFNpYmxpbmcgYXMgTm9kZSwgMCk7XG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgICAgICBzZWw/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBzZWw/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgcHJlTm9kZSA9IG51bGw7XG4gICAgY29uc3QgYW5jaG9yT2Zmc2V0ID0gc2VsZWN0aW9uPy5hbmNob3JPZmZzZXQ7XG5cbiAgICBpZiAoIWFuY2hvck5vZGUgfHwgIWFuY2hvck9mZnNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChhbmNob3JOb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICcjdGV4dCcpIHtcbiAgICAgIG5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZW1wdHkpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXRpdmVFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBuYXRpdmVFbGVtZW50LmNoaWxkTm9kZXNbaV07XG5cbiAgICAgIGlmIChhbmNob3JOb2RlLm5vZGVUeXBlID09PSAzICYmIGFuY2hvck5vZGUgPT09IG5vZGUgJiYgcHJlTm9kZSAmJiBwcmVOb2RlLmdldEF0dHJpYnV0ZSAmJiBwcmVOb2RlLmdldEF0dHJpYnV0ZSgnaWQnKSAmJiAoIWFuY2hvck5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCBhbmNob3JOb2RlLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gMSkgJiYgcG9zaXRpb24gPT09IGxlbmd0aCkge1xuICAgICAgICBuYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGVtcHR5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBwcmVOb2RlID0gbm9kZSBhcyBFbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhZGROb2RlWmVyb1dpZHRoU3BhY2UobmF0aXZlRWxlbWVudDogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgY29uc3QgZW1wdHkgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFx1MjAwYicpO1xuICAgIGxldCBwcmVOb2RlID0gbnVsbDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmF0aXZlRWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlOiBhbnkgPSBuYXRpdmVFbGVtZW50LmNoaWxkTm9kZXNbaV07XG5cbiAgICAgIGlmIChwcmVOb2RlICYmIHByZU5vZGUuZ2V0QXR0cmlidXRlICYmIHByZU5vZGUuZ2V0QXR0cmlidXRlKCdpZCcpICYmIG5vZGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoJ2lkJykpIHtcbiAgICAgICAgbmF0aXZlRWxlbWVudC5pbnNlcnRCZWZvcmUoZW1wdHksIHByZU5vZGUubmV4dFNpYmxpbmcpO1xuICAgICAgfVxuXG4gICAgICBwcmVOb2RlID0gbm9kZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluc2VydE1lbnRpb24obmF0aXZlRWxlbWVudDogSFRNTElucHV0RWxlbWVudCwgcG9zOiBudW1iZXIpIHtcbiAgICBjb25zdCBhY3RpdmVDb25maWcgPSB0aGlzLmFjdGl2ZUNvbmZpZygpO1xuICAgIGlmICghYWN0aXZlQ29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaExpc3QgPSB0aGlzLnNlYXJjaExpc3QoKTtcbiAgICBsZXQgdGV4dCA9ICcnO1xuICAgIGNvbnN0IGZlSWQgPSB1dWlkKCk7XG4gICAgY29uc3QgaWQgPSBzZWFyY2hMaXN0Py5BY3RpdmVJdGVtLmlkIHx8IHV1aWQoKTtcbiAgICBjb25zdCBpdGVtQWN0aXZlID0gc2VhcmNoTGlzdD8uQWN0aXZlSXRlbTtcbiAgICBjb25zdCB7IHRyaWdnZXJDaGFyLCBtZW50aW9uRXZlbnROYW1lLCBtZW50aW9uQWN0aW9uQnlFdmVudCB9ID0gYWN0aXZlQ29uZmlnO1xuXG4gICAgaWYgKGFjdGl2ZUNvbmZpZy5tZW50aW9uU2VsZWN0KSB7XG4gICAgICB0ZXh0ID0gYWN0aXZlQ29uZmlnLm1lbnRpb25TZWxlY3Qoc2VhcmNoTGlzdD8uQWN0aXZlSXRlbSwgYWN0aXZlQ29uZmlnLnRyaWdnZXJDaGFyKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzRWRpdG9yKCkpIHtcbiAgICAgIGxldCBzcGFuOiBIVE1MU3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdURVhUQVJFQScpO1xuXG4gICAgICBzcGFuLmlubmVyVGV4dCA9IHRleHQ7XG4gICAgICB0ZXh0ID0gc3Bhbi5pbm5lckhUTUw7XG4gICAgICBzcGFuLnJlbW92ZSgpO1xuICAgICAgdGV4dCA9IGJ1aWxkVGVtcGxhdGUodGV4dCwgaWQsIGZlSWQpO1xuICAgICAgc3BhbiA9IGluc2VydFZhbHVlKG5hdGl2ZUVsZW1lbnQsIHRoaXMuc3RhcnRQb3MoKSB8fCAwLCBwb3MsIHRleHQsIHRoaXMuaWZyYW1lKCkpIGFzIEhUTUxTcGFuRWxlbWVudDtcbiAgICAgIGlmIChzcGFuKSB7XG4gICAgICAgIGNvbnN0IGRhdGE6IElOb2RlSW5zZXJ0ID0ge1xuICAgICAgICAgIGVsZW1lbnRTcGFuOiBzcGFuLFxuICAgICAgICAgIHN1YnNjcmlwdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgIGl0ZW06IGl0ZW1BY3RpdmUsXG4gICAgICAgICAgdHJpZ2dlckNoYXI6IHRyaWdnZXJDaGFyLFxuICAgICAgICAgIG1hbnVhbEFkZDogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLm5vZGVzSW5zZXJ0KCkuYWRkKGRhdGEpO1xuICAgICAgICBpZiAobWVudGlvbkV2ZW50TmFtZSkge1xuICAgICAgICAgIGRhdGEuc3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50PElFdmVudD4oc3BhbiwgbWVudGlvbkV2ZW50TmFtZSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YXAoKGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCkpLFxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG1lbnRpb25BY3Rpb25CeUV2ZW50KSB7XG4gICAgICAgICAgICAgICAgbWVudGlvbkFjdGlvbkJ5RXZlbnQoaXRlbUFjdGl2ZSwgdHJpZ2dlckNoYXIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm91dEluc2VydE1lbnRpb24uZW1pdCh7IGRhdGE6IHsgaWQsIHZhbHVlOiB0ZXh0LCBmZUlkIH0sIGxlbmd0aEtleTogcG9zIC0gKHRoaXMuc3RhcnRQb3MoKSB8fCAwKSB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3lMaXN0U2VhcmNoKCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
506
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL21lbnRpb24vc3JjL21lbnRpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQStCLFNBQVMsRUFBRSxVQUFVLEVBQTBCLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdKLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRS9KLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQU9uRixNQUFNLE9BQU8sc0NBQXNDO0lBQ2pELG1CQUFtQjtJQUNGLGdCQUFnQixHQUFHLE1BQU0sQ0FBdUUsU0FBUyxDQUFDLENBQUM7SUFDM0csV0FBVyxHQUFHLE1BQU0sQ0FBbUIsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELFlBQVksR0FBRyxNQUFNLENBQTZCLFNBQVMsQ0FB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RSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRyxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0F0aEJVLHNDQUFzQzs0RkFBdEMsc0NBQXNDOzs0RkFBdEMsc0NBQXNDO2tCQUxsRCxTQUFTO21CQUFDO29CQUNULDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLDBDQUEwQztvQkFDcEQsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50UmVmLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgVGVtcGxhdGVSZWYsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUV2ZW50LCBUWVBFX1RFTVBMQVRFX1JFRiB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuaW1wb3J0IHsgTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICdAbGlicy11aS9zZXJ2aWNlcy1keW5hbWljLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBVdGlsc0tleUNvZGVDb25zdGFudCwgZ2V0LCBpc05pbCwgdXVpZCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFN1YmplY3QsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBERUZBVUxUX0NPTkZJRywgYnVpbGRUZW1wbGF0ZSB9IGZyb20gJy4vZGVmaW5lcy90ZW1wbGF0ZS5kZWZpbmUnO1xuaW1wb3J0IHsgZ2V0Q2FyZXRQb3NpdGlvbiwgZ2V0VGV4dEJlZm9yZUN1cnNvciwgZ2V0VmFsdWUsIGdldFdpbmRvd1NlbGVjdGlvbiwgaW5zZXJ0VGV4dEF0Q2FyZXQsIGluc2VydFZhbHVlLCBzZXRDYXJldFBvc2l0aW9uIH0gZnJvbSAnLi9kZWZpbmVzL3V0aWxzLmRlZmluZSc7XG5pbXBvcnQgeyBJTWVudGlvbkNvbmZpZywgSU1lbnRpb25GdW5jdGlvbkNvbnRyb2xFdmVudCwgSU1lbnRpb25JbnNlcnQsIElOb2RlSW5zZXJ0IH0gZnJvbSAnLi9pbnRlcmZhY2VzL21lbnRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNJbnB1dHNNZW50aW9uTGlzdENvbXBvbmVudCB9IGZyb20gJy4vbGlzdC9saXN0LmNvbXBvbmVudCc7XG5cbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tMaWJzVWlDb21wb25lbnRzSW5wdXRzTWVudGlvbkRpcmVjdGl2ZV0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTWVudGlvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0Q29tcG9uZW50UmVmID0gc2lnbmFsPENvbXBvbmVudFJlZjxMaWJzVWlDb21wb25lbnRzSW5wdXRzTWVudGlvbkxpc3RDb21wb25lbnQ+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IG5vZGVzSW5zZXJ0ID0gc2lnbmFsPFNldDxJTm9kZUluc2VydD4+KG5ldyBTZXQoKSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZlQ29uZmlnID0gc2lnbmFsPElNZW50aW9uQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyaWdnZXJDaGFycyA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBJTWVudGlvbkNvbmZpZz4+KHt9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZWFyY2hTdHJpbmcgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhcnRQb3MgPSBzaWduYWw8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0Tm9kZSA9IHNpZ25hbDxhbnk+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VhcmNoTGlzdCA9IHNpZ25hbDxMaWJzVWlDb21wb25lbnRzSW5wdXRzTWVudGlvbkxpc3RDb21wb25lbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VhcmNoaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpZnJhbWUgPSBzaWduYWw8YW55Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxhc3RLZXlDb2RlID0gc2lnbmFsPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpc0VkaXRvciA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaWZyYW1lSWQgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZHluYW1pY0NvbXBvbmVudFNlcnZpY2UgPSBpbmplY3QoTGlic1VpRHluYW1pY0NvbXBvbmVudFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICByZWFkb25seSB0aW1lRGVsYXlJbml0ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDAsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gMCB9KTtcbiAgcmVhZG9ubHkgbWVudGlvbkNvbmZpZyA9IGlucHV0PElNZW50aW9uQ29uZmlnPigpO1xuICByZWFkb25seSBtZW50aW9uTGlzdFRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8VFlQRV9URU1QTEFURV9SRUY+PigpO1xuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dFNlYXJjaFRlcm0gPSBvdXRwdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBvdXRJdGVtU2VsZWN0ZWQgPSBvdXRwdXQ8dW5rbm93bj4oKTtcbiAgcmVhZG9ubHkgb3V0VG9nZ2xlID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dEluc2VydE1lbnRpb24gPSBvdXRwdXQ8SU1lbnRpb25JbnNlcnQ+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uQ29udHJvbCA9IG91dHB1dDxJTWVudGlvbkZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICB0aGlzLm1lbnRpb25Db25maWcoKTtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLnVwZGF0ZUNvbmZpZygpKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5tZW50aW9uQ29uZmlnKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNDb250ZW50RWRpdGFibGUgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScpO1xuICAgICAgdGhpcy5pc0VkaXRvci5zZXQoIWlzQ29udGVudEVkaXRhYmxlKTtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSAhdGhpcy5pc0VkaXRvcigpID8gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgOiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucWwtZWRpdG9yW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nKTtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJLZXlkb3duLmJpbmQodGhpcykoZXZlbnQsIGVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIChldmVudDogSW5wdXRFdmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlcklucHV0LmJpbmQodGhpcykoZXZlbnQsIGVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlckJsdXIuYmluZCh0aGlzKShldmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlckZvY3VzLmJpbmQodGhpcykoZXZlbnQsIGVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3V0RnVuY3Rpb25Db250cm9sLmVtaXQoe1xuICAgICAgICBhZGRNZW50aW9uOiAoKSA9PiB7XG4gICAgICAgICAgaW5zZXJ0VGV4dEF0Q2FyZXQoZWxlbWVudCwgYCR7dGhpcy5tZW50aW9uQ29uZmlnKCk/LnRyaWdnZXJDaGFyfWApO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVyS2V5ZG93bih7IGtleTogdGhpcy5tZW50aW9uQ29uZmlnKCk/LnRyaWdnZXJDaGFyLCBrZXlDb2RlOiBVdGlsc0tleUNvZGVDb25zdGFudC5CQUNLU1BBQ0UsIHNoaWZ0S2V5OiB0cnVlLCBpbnB1dEV2ZW50OiB0cnVlIH0sIGVsZW1lbnQpO1xuICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LCB0aGlzLnRpbWVEZWxheUluaXQoKSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZUNvbmZpZygpIHtcbiAgICBjb25zdCBtZW50aW9uQ29uZmlnID0gdGhpcy5tZW50aW9uQ29uZmlnKCk7XG4gICAgaWYgKCFtZW50aW9uQ29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlckNoYXJzLnNldCh7fSk7XG4gICAgdGhpcy5hZGRDb25maWcobWVudGlvbkNvbmZpZyk7XG4gICAgaWYgKG1lbnRpb25Db25maWcubWVudGlvbikge1xuICAgICAgbWVudGlvbkNvbmZpZy5tZW50aW9uLmZvckVhY2goKGNvbmZpZykgPT4gdGhpcy5hZGRDb25maWcoY29uZmlnKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRDb25maWcoY29uZmlnOiBJTWVudGlvbkNvbmZpZykge1xuICAgIGNvbnN0IGRlZmF1bHRzID0geyAuLi5ERUZBVUxUX0NPTkZJRyB9O1xuICAgIGNvbnN0IGxhYmVsS2V5ID0gY29uZmlnLmxhYmVsS2V5IHx8ICdsYWJlbCc7XG4gICAgY29uZmlnID0gT2JqZWN0LmFzc2lnbihkZWZhdWx0cywgY29uZmlnKTtcbiAgICBpZiAoY29uZmlnLml0ZW1zICYmIGNvbmZpZy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZy5pdGVtc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uZmlnLml0ZW1zLmZvckVhY2goKGxhYmVsKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+PiA9IHt9O1xuICAgICAgICAgIG9iamVjdFtsYWJlbEtleV0gPSBsYWJlbDtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChsYWJlbEtleSkge1xuICAgICAgICAvLyByZW1vdmUgaXRlbXMgd2l0aG91dCBhbiBsYWJlbEtleSAoYXMgaXQncyByZXF1aXJlZCB0byBmaWx0ZXIgdGhlIGxpc3QpXG4gICAgICAgIGNvbmZpZy5pdGVtcyA9IGNvbmZpZy5pdGVtcy5maWx0ZXIoKGUpID0+IGVbbGFiZWxLZXldKTtcbiAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZVNvcnQpIHtcbiAgICAgICAgICBjb25maWcuaXRlbXMuc29ydCgoYSwgYikgPT4gKGFbbGFiZWxLZXldIHx8ICcnKS5sb2NhbGVDb21wYXJlKGJbbGFiZWxLZXldIHx8ICcnKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50cmlnZ2VyQ2hhcnMudXBkYXRlKChpdGVtKSA9PiAoe1xuICAgICAgLi4uaXRlbSxcbiAgICAgIFtjb25maWcudHJpZ2dlckNoYXIgfHwgJ0AnXTogY29uZmlnLFxuICAgIH0pKTtcbiAgICBpZiAodGhpcy5hY3RpdmVDb25maWcoKSAmJiB0aGlzLmFjdGl2ZUNvbmZpZygpPy50cmlnZ2VyQ2hhciA9PT0gY29uZmlnLnRyaWdnZXJDaGFyKSB7XG4gICAgICB0aGlzLmFjdGl2ZUNvbmZpZy5zZXQoY29uZmlnKTtcbiAgICAgIHRoaXMudXBkYXRlU2VhcmNoTGlzdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRJZnJhbWUoaWZyYW1lOiBIVE1MSUZyYW1lRWxlbWVudCkge1xuICAgIHRoaXMuaWZyYW1lLnNldChpZnJhbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wRXZlbnQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKGdldDx1bmtub3duPihldmVudCwgJ3dhc0NsaWNrJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQmx1cihldmVudDogRXZlbnQpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc3RvcEV2ZW50KGV2ZW50KTtcbiAgICAgIHRoaXMuc3RvcFNlYXJjaCgpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlcklucHV0KGV2ZW50OiBJbnB1dEV2ZW50LCBuYXRpdmVFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICBjb25zdCBkYXRhID0gZ2V0KGV2ZW50LCAnZGF0YScpO1xuICAgIGlmICh0aGlzLmxhc3RLZXlDb2RlKCkgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkJVRkZFUkVEICYmIGRhdGEpIHtcbiAgICAgIGNvbnN0IGtleUNvZGUgPSBkYXRhLmNoYXJDb2RlQXQoMCk7XG4gICAgICB0aGlzLmhhbmRsZXJLZXlkb3duKHsga2V5Q29kZSwgaW5wdXRFdmVudDogdHJ1ZSB9LCBuYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlcktleWRvd24oZXZlbnQ6IGFueSwgbmF0aXZlRWxlbWVudDogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTogYW55IHtcbiAgICB0aGlzLmxhc3RLZXlDb2RlLnNldChldmVudC5rZXlDb2RlKTtcbiAgICBpZiAoZXZlbnQuaXNDb21wb3NpbmcgfHwgZXZlbnQua2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuQlVGRkVSRUQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWw6IGFueSA9IGdldFZhbHVlKG5hdGl2ZUVsZW1lbnQpO1xuICAgIGxldCBwb3M6IGFueSA9IGdldENhcmV0UG9zaXRpb24obmF0aXZlRWxlbWVudCwgdGhpcy5pZnJhbWUoKSk7XG4gICAgbGV0IGNoYXJQcmVzc2VkID0gZXZlbnQua2V5O1xuICAgIGlmICghdGhpcy5pc0VkaXRvcigpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuQkFDS1NQQUNFKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kRW1wdHlUb0xhc3ROb2RlKHBvcywgdmFsLmxlbmd0aCwgbmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYWRkTm9kZVplcm9XaWR0aFNwYWNlKG5hdGl2ZUVsZW1lbnQpLCAwKTtcbiAgICB9XG4gICAgaWYgKCFjaGFyUHJlc3NlZCkge1xuICAgICAgY29uc3QgY2hhckNvZGUgPSBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlO1xuICAgICAgY2hhclByZXNzZWQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpO1xuICAgICAgaWYgKCFldmVudC5zaGlmdEtleSAmJiBjaGFyQ29kZSA+PSA2NSAmJiBjaGFyQ29kZSA8PSA5MCkge1xuICAgICAgICBjaGFyUHJlc3NlZCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUgKyAzMik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5FTlRFUiAmJiBldmVudC53YXNDbGljayAmJiBwb3MgPCAodGhpcy5zdGFydFBvcygpIHx8IDApKSB7XG4gICAgICBwb3MgPSB0aGlzLnN0YXJ0Tm9kZSgpLmxlbmd0aDtcbiAgICAgIHNldENhcmV0UG9zaXRpb24odGhpcy5zdGFydE5vZGUoKSwgcG9zLCB0aGlzLmlmcmFtZSgpKTtcbiAgICB9XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy50cmlnZ2VyQ2hhcnMoKVtjaGFyUHJlc3NlZF07XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgdGhpcy5hY3RpdmVDb25maWcuc2V0KGNvbmZpZyk7XG4gICAgICB0aGlzLnN0YXJ0UG9zLnNldChldmVudC5pbnB1dEV2ZW50ID8gcG9zIC0gMSA6IHBvcyk7XG4gICAgICB0aGlzLnN0YXJ0Tm9kZS5zZXQoZ2V0V2luZG93U2VsZWN0aW9uKHRoaXMuaWZyYW1lKCkpPy5hbmNob3JOb2RlKTtcbiAgICAgIHRoaXMuc2VhcmNoaW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuc2VhcmNoU3RyaW5nLnNldCgnJyk7XG4gICAgICB0aGlzLnNob3dTZWFyY2hMaXN0KG5hdGl2ZUVsZW1lbnQpO1xuICAgICAgdGhpcy51cGRhdGVTZWFyY2hMaXN0KCk7XG4gICAgICBpZiAoY29uZmlnLnJldHVyblRyaWdnZXIpIHtcbiAgICAgICAgdGhpcy5vdXRTZWFyY2hUZXJtLmVtaXQoY29uZmlnLnRyaWdnZXJDaGFyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW1TZXQgb2YgdGhpcy5ub2Rlc0luc2VydCgpKSB7XG4gICAgICAgIGlmICghbmF0aXZlRWxlbWVudC5jb250YWlucyhpdGVtU2V0LmVsZW1lbnRTcGFuKSkge1xuICAgICAgICAgIGl0ZW1TZXQuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIHRoaXMubm9kZXNJbnNlcnQoKS5kZWxldGUoaXRlbVNldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzdGFydFBvcyA9IHRoaXMuc3RhcnRQb3MoKTtcbiAgICBpZiAoaXNOaWwoc3RhcnRQb3MpIHx8IHN0YXJ0UG9zIDwgMCB8fCAhdGhpcy5zZWFyY2hpbmcoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2hMaXN0ID0gdGhpcy5zZWFyY2hMaXN0KCk7XG4gICAgaWYgKHBvcyA8PSBzdGFydFBvcykge1xuICAgICAgaWYgKHNlYXJjaExpc3QpIHtcbiAgICAgICAgc2VhcmNoTGlzdC5oaWRkZW4uc2V0KHRydWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuU0hJRlQgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBwb3MgPD0gc3RhcnRQb3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmFjdGl2ZUNvbmZpZygpPy5hbGxvd1NwYWNlICYmIGV2ZW50LmtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LlNQQUNFKSB7XG4gICAgICB0aGlzLnN0YXJ0UG9zLnNldCgtMSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5CQUNLU1BBQ0UgJiYgcG9zID4gMCkge1xuICAgICAgcG9zLS07XG4gICAgICBpZiAocG9zID09PSB0aGlzLnN0YXJ0UG9zKCkpIHtcbiAgICAgICAgdGhpcy5zdG9wU2VhcmNoKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzZWFyY2hMaXN0Py5oaWRkZW4oKSkge1xuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LlRBQiB8fCBldmVudC5rZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5FTlRFUikge1xuICAgICAgICB0aGlzLnN0b3BTZWFyY2goKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXNlYXJjaExpc3Q/LmhpZGRlbigpICYmIHRoaXMuYWN0aXZlQ29uZmlnKCkpIHtcbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBVdGlsc0tleUNvZGVDb25zdGFudC5UQUIgfHwgZXZlbnQua2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuRU5URVIpIHtcbiAgICAgICAgdGhpcy5zdG9wRXZlbnQoZXZlbnQpO1xuICAgICAgICAvLyBlbWl0IHRoZSBzZWxlY3RlZCBsaXN0IGl0ZW1cbiAgICAgICAgdGhpcy5vdXRJdGVtU2VsZWN0ZWQuZW1pdChzZWFyY2hMaXN0Py5BY3RpdmVJdGVtKTtcbiAgICAgICAgLy8gb3B0aW9uYWwgZnVuY3Rpb24gdG8gZm9ybWF0IHRoZSBzZWxlY3RlZCBpdGVtIGJlZm9yZSBpbnNlcnRpbmcgdGhlIHRleHRcbiAgICAgICAgdGhpcy5pbnNlcnRNZW50aW9uKG5hdGl2ZUVsZW1lbnQsIHBvcyk7XG4gICAgICAgIC8vIGZpcmUgaW5wdXQgZXZlbnQgc28gYW5ndWxhciBiaW5kaW5ncyBhcmUgdXBkYXRlZFxuICAgICAgICBpZiAoJ0V2ZW50JyBpbiB3aW5kb3cpIHtcbiAgICAgICAgICAvLyB0aGlzIHNlZW1zIGJhY2t3YXJkcywgYnV0IGZpcmUgdGhlIGV2ZW50IGZyb20gdGhpcyBlbGVtZW50cyBuYXRpdmVFbGVtZW50IChub3QgdGhlXG4gICAgICAgICAgLy8gb25lIHByb3ZpZGVkIHRoYXQgbWF5IGJlIGluIGFuIGlmcmFtZSwgYXMgaXQgd29uJ3QgYmUgcHJvcG9nYXRlKVxuICAgICAgICAgIC8vIENyZWF0ZSB0aGUgZXZlbnQgdXNpbmcgdGhlIG1vZGVybiBFdmVudCBjb25zdHJ1Y3RvclxuICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBFdmVudCh0aGlzLmlmcmFtZSgpID8gJ2NoYW5nZScgOiAnaW5wdXQnLCB7XG4gICAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgICAgY2FuY2VsYWJsZTogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV2ZW50IG9uIHRoZSBuYXRpdmUgZWxlbWVudFxuICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhcnRQb3Muc2V0KC0xKTtcbiAgICAgICAgdGhpcy5zdG9wU2VhcmNoKCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuRVNDQVBFKSB7XG4gICAgICAgIHRoaXMuc3RvcEV2ZW50KGV2ZW50KTtcbiAgICAgICAgdGhpcy5zdG9wU2VhcmNoKCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LkRPV05fQVJST1cpIHtcbiAgICAgICAgdGhpcy5zdG9wRXZlbnQoZXZlbnQpO1xuICAgICAgICBzZWFyY2hMaXN0Py5hY3RpdmF0ZU5leHRJdGVtKCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IFV0aWxzS2V5Q29kZUNvbnN0YW50LlVQX0FSUk9XKSB7XG4gICAgICAgIHRoaXMuc3RvcEV2ZW50KGV2ZW50KTtcbiAgICAgICAgc2VhcmNoTGlzdD8uYWN0aXZhdGVQcmV2aW91c0l0ZW0oKTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFyUHJlc3NlZC5sZW5ndGggIT09IDEgJiYgZXZlbnQua2V5Q29kZSAhPT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuQkFDS1NQQUNFKSB7XG4gICAgICB0aGlzLnN0b3BFdmVudChldmVudCk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNlYXJjaGluZygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBtZW50aW9uID0gdmFsLnN1YnN0cmluZygodGhpcy5zdGFydFBvcygpIHx8IDApICsgMSwgcG9zKTtcblxuICAgIGlmIChldmVudC5rZXlDb2RlICE9PSBVdGlsc0tleUNvZGVDb25zdGFudC5CQUNLU1BBQ0UgJiYgIWV2ZW50LmlucHV0RXZlbnQpIHtcbiAgICAgIG1lbnRpb24gKz0gY2hhclByZXNzZWQ7XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaFN0cmluZyA9IG1lbnRpb24ucmVwbGFjZShTdHJpbmcuZnJvbUNoYXJDb2RlKDE2MCksICcgJykucmVwbGFjZShTdHJpbmcuZnJvbUNoYXJDb2RlKDApLCAnJyk7XG4gICAgdGhpcy5zZWFyY2hTdHJpbmcuc2V0KHNlYXJjaFN0cmluZy50cmltKCkpO1xuICAgIGNvbnN0IGxpbWl0U3BhY2VTZWFyY2hRdWVyeSA9IHRoaXMuYWN0aXZlQ29uZmlnKCk/LmxpbWl0U3BhY2VTZWFyY2hRdWVyeTtcbiAgICBpZiAobGltaXRTcGFjZVNlYXJjaFF1ZXJ5ICYmIHNlYXJjaFN0cmluZy5zcGxpdCgnICcpLmxlbmd0aCAtIDEgPiBsaW1pdFNwYWNlU2VhcmNoUXVlcnkpIHtcbiAgICAgIHRoaXMuc2VhcmNoU3RyaW5nLnNldCgnJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmFjdGl2ZUNvbmZpZygpPy5yZXR1cm5UcmlnZ2VyKSB7XG4gICAgICBjb25zdCB0cmlnZ2VyQ2hhciA9IHRoaXMuc2VhcmNoU3RyaW5nKCkgfHwgZXZlbnQua2V5Q29kZSA9PT0gVXRpbHNLZXlDb2RlQ29uc3RhbnQuQkFDS1NQQUNFID8gdmFsLnN1YnN0cmluZyh0aGlzLnN0YXJ0UG9zKCksICh0aGlzLnN0YXJ0UG9zKCkgfHwgMCkgKyAxKSA6ICcnO1xuXG4gICAgICB0aGlzLm91dFNlYXJjaFRlcm0uZW1pdCh0cmlnZ2VyQ2hhciArIHRoaXMuc2VhcmNoU3RyaW5nKCkpO1xuICAgICAgdGhpcy51cGRhdGVTZWFyY2hMaXN0KCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRTZWFyY2hUZXJtLmVtaXQodGhpcy5zZWFyY2hTdHJpbmcoKSk7XG4gICAgdGhpcy51cGRhdGVTZWFyY2hMaXN0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZvY3VzKGU/OiBFdmVudCwgbmF0aXZlRWxlbWVudDogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgZT8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gZ2V0V2luZG93U2VsZWN0aW9uKHRoaXMuaWZyYW1lKCkpPy5hbmNob3JOb2RlO1xuXG4gICAgICBpZiAobm9kZT8ubm9kZVR5cGUgIT09IDMpIHtcbiAgICAgICAgdGhpcy5zdG9wU2VhcmNoKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdGV4dEJlZm9yZUN1cnNvciA9IGdldFRleHRCZWZvcmVDdXJzb3IoKSB8fCAnJztcblxuICAgICAgY29uc3QgdHJpZ2dlckNoYXJzID0gT2JqZWN0LmtleXModGhpcy50cmlnZ2VyQ2hhcnMoKSkubWFwKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIGNvbmZpZzogdGhpcy50cmlnZ2VyQ2hhcnMoKVtrZXldLFxuICAgICAgICAgIGluZGV4OiB0ZXh0QmVmb3JlQ3Vyc29yLmxhc3RJbmRleE9mKGtleSksXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG1hdGNoaW5nQ2hhcmFjdGVycyA9IHRyaWdnZXJDaGFycy5yZWR1Y2UoKHByZSwgY3VycmVudCkgPT4gKHByZSAmJiBjdXJyZW50ICYmIGN1cnJlbnQuaW5kZXggPiBwcmUuaW5kZXggPyBjdXJyZW50IDogcHJlKSwgdHJpZ2dlckNoYXJzWzBdKTtcblxuICAgICAgaWYgKG1hdGNoaW5nQ2hhcmFjdGVycy5pbmRleCA8IDApIHtcbiAgICAgICAgdGhpcy5zdG9wU2VhcmNoKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoID0gdGV4dEJlZm9yZUN1cnNvcj8uc3Vic3RyaW5nKG1hdGNoaW5nQ2hhcmFjdGVycy5pbmRleCwgdGV4dEJlZm9yZUN1cnNvci5sZW5ndGgpO1xuXG4gICAgICBpZiAoIXNlYXJjaCkge1xuICAgICAgICB0aGlzLnN0b3BTZWFyY2goKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBwb3MgPSBnZXRDYXJldFBvc2l0aW9uKG5hdGl2ZUVsZW1lbnQsIHRoaXMuaWZyYW1lKCkpO1xuXG4gICAgICB0aGlzLmFjdGl2ZUNvbmZpZy5zZXQobWF0Y2hpbmdDaGFyYWN0ZXJzLmNvbmZpZyk7XG4gICAgICB0aGlzLnN0YXJ0UG9zLnNldChwb3MgLSAodGV4dEJlZm9yZUN1cnNvci5sZW5ndGggLSBtYXRjaGluZ0NoYXJhY3RlcnMuaW5kZXgpKTtcbiAgICAgIHRoaXMuc2VhcmNoU3RyaW5nLnNldChzZWFyY2gucmVwbGFjZShtYXRjaGluZ0NoYXJhY3RlcnMua2V5LCAnJykpO1xuICAgICAgdGhpcy5zZWFyY2hpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5oYW5kbGVyS2V5ZG93bih7IGtleUNvZGU6ICcnLmNoYXJDb2RlQXQoMCksIGlucHV0RXZlbnQ6IGZhbHNlIH0sIG5hdGl2ZUVsZW1lbnQpO1xuICAgICAgY29uc3QgZGl2RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICBkaXZFbGVtZW50LnN0eWxlLndpZHRoID0gJ21heC1jb250ZW50JztcbiAgICAgIGRpdkVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgZGl2RWxlbWVudC5pbm5lclRleHQgPSBzZWFyY2g7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdkVsZW1lbnQpO1xuICAgICAgbGV0IGlmcmFtZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmcmFtZSA9IHRoaXMubWVudGlvbkNvbmZpZygpPy5pZnJhbWUgPyAod2luZG93LnBhcmVudC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm1lbnRpb25Db25maWcoKT8uaWZyYW1lIGFzIHN0cmluZykgYXMgSFRNTElGcmFtZUVsZW1lbnQpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoTGlzdCA9IHRoaXMuc2VhcmNoTGlzdCgpO1xuICAgICAgaWYgKHNlYXJjaExpc3QpIHtcbiAgICAgICAgc2VhcmNoTGlzdC5wb3NpdGlvbihuYXRpdmVFbGVtZW50LCBpZnJhbWUsIGRpdkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xuICAgICAgfVxuICAgICAgZGl2RWxlbWVudC5yZW1vdmUoKTtcbiAgICAgIG5hdGl2ZUVsZW1lbnQubm9ybWFsaXplKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BTZWFyY2goKSB7XG4gICAgY29uc3Qgc2VhcmNoTGlzdCA9IHRoaXMuc2VhcmNoTGlzdCgpO1xuICAgIGlmIChzZWFyY2hMaXN0ICYmICFzZWFyY2hMaXN0LmhpZGRlbigpKSB7XG4gICAgICBzZWFyY2hMaXN0LmhpZGRlbi5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLm91dFRvZ2dsZS5lbWl0KGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVDb25maWcuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5zZWFyY2hpbmcuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VhcmNoTGlzdCgpIHtcbiAgICBjb25zdCBtYXRjaGVzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IGFjdGl2ZUNvbmZpZyA9IHRoaXMuYWN0aXZlQ29uZmlnKCk7XG4gICAgY29uc3Qgc2VhcmNoU3RyaW5nID0gdGhpcy5zZWFyY2hTdHJpbmcoKTtcbiAgICBjb25zdCBzZWFyY2hMaXN0ID0gdGhpcy5zZWFyY2hMaXN0KCk7XG4gICAgLy8gZGlzYWJsaW5nIHRoZSBzZWFyY2ggcmVsaWVzIG9uIHRoZSBhc3luYyBvcGVyYXRpb24gdG8gZG8gdGhlIGZpbHRlcmluZ1xuICAgIGlmIChhY3RpdmVDb25maWc/Lml0ZW1zICYmICFhY3RpdmVDb25maWcuZGlzYWJsZVNlYXJjaCAmJiAhaXNOaWwoc2VhcmNoU3RyaW5nKSAmJiBhY3RpdmVDb25maWcubGFiZWxLZXkgJiYgYWN0aXZlQ29uZmlnLm1lbnRpb25GaWx0ZXIpIHtcbiAgICAgIG1hdGNoZXMucHVzaCguLi4oYWN0aXZlQ29uZmlnLm1lbnRpb25GaWx0ZXIoc2VhcmNoU3RyaW5nLCBhY3RpdmVDb25maWcuaXRlbXMpIGFzIGFueSkpO1xuICAgIH1cbiAgICAvLyB1cGRhdGUgdGhlIHNlYXJjaCBsaXN0XG4gICAgaWYgKCFzZWFyY2hMaXN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNlYXJjaExpc3QuaXRlbXMuc2V0KG1hdGNoZXMpO1xuICAgIHNlYXJjaExpc3QuaGlkZGVuLnNldCghbWF0Y2hlcy5sZW5ndGgpO1xuICAgIHNlYXJjaExpc3QuYWN0aXZlSW5kZXguc2V0KDApO1xuICAgIHNlYXJjaExpc3Quc2Nyb2xsQ29udGVudCgpO1xuICAgIHRoaXMub3V0VG9nZ2xlLmVtaXQoISFtYXRjaGVzLmxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIHNob3dTZWFyY2hMaXN0KG5hdGl2ZUVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgICBsZXQgaWZyYW1lID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IG1lbnRpb25Db25maWcgPSB0aGlzLm1lbnRpb25Db25maWcoKTtcbiAgICB0cnkge1xuICAgICAgaWZyYW1lID0gbWVudGlvbkNvbmZpZz8uaWZyYW1lID8gKHdpbmRvdy5wYXJlbnQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobWVudGlvbkNvbmZpZz8uaWZyYW1lIGFzIHN0cmluZykgYXMgSFRNTElGcmFtZUVsZW1lbnQpIDogdW5kZWZpbmVkO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgfVxuICAgIGlmICghbWVudGlvbkNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm91dFRvZ2dsZS5lbWl0KHRydWUpO1xuICAgIGxldCBmaXJzdFRpbWUgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5saXN0Q29tcG9uZW50UmVmKCkpIHtcbiAgICAgIGZpcnN0VGltZSA9IHRydWU7XG4gICAgICB0aGlzLmxpc3RDb21wb25lbnRSZWYuc2V0KHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGlic1VpQ29tcG9uZW50c0lucHV0c01lbnRpb25MaXN0Q29tcG9uZW50KSk7XG4gICAgICB0aGlzLnNlYXJjaExpc3Quc2V0KHRoaXMubGlzdENvbXBvbmVudFJlZigpPy5pbnN0YW5jZSk7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoTGlzdCgpPy5sYWJlbEtleS5zZXQodGhpcy5hY3RpdmVDb25maWcoKT8ubGFiZWxLZXkgfHwgJycpO1xuICAgIHRoaXMuc2VhcmNoTGlzdCgpPy5zdHlsZU9mZi5zZXQodGhpcy5tZW50aW9uQ29uZmlnKCk/LmRpc2FibGVTdHlsZSB8fCBmYWxzZSk7XG4gICAgdGhpcy5zZWFyY2hMaXN0KCk/LmFjdGl2ZUluZGV4LnNldCgwKTtcbiAgICB0aGlzLnNlYXJjaExpc3QoKT8uekluZGV4LnNldCh0aGlzLm1lbnRpb25Db25maWcoKT8uekluZGV4IHx8IDI1MDApO1xuICAgIHRoaXMuc2VhcmNoTGlzdCgpPy5pc0lmcmFtZS5zZXQoISFpZnJhbWUpO1xuICAgIHRoaXMuc2VhcmNoTGlzdCgpPy5saXN0VGVtcGxhdGUuc2V0KHRoaXMubWVudGlvbkxpc3RUZW1wbGF0ZSgpKTtcbiAgICB0aGlzLnNlYXJjaExpc3QoKT8ucGFyZW50SGFuZGxlcktleURvd24uc2V0KHRoaXMuaGFuZGxlcktleWRvd24uYmluZCh0aGlzKSk7XG4gICAgdGhpcy5zZWFyY2hMaXN0KCk/LnBvc2l0aW9uKG5hdGl2ZUVsZW1lbnQsIGlmcmFtZSk7XG4gICAgaWYgKGZpcnN0VGltZSAmJiB0aGlzLmxpc3RDb21wb25lbnRSZWYoKSkge1xuICAgICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5hZGRUb0JvZHkodGhpcy5saXN0Q29tcG9uZW50UmVmKCksICEhaWZyYW1lKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3lMaXN0U2VhcmNoKCkge1xuICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMubGlzdENvbXBvbmVudFJlZiwgdGhpcy5pZnJhbWVJZCgpKTtcbiAgICB0aGlzLmxpc3RDb21wb25lbnRSZWYuc2V0KHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBwZW5kRW1wdHlUb0xhc3ROb2RlKHBvc2l0aW9uOiBudW1iZXIsIGxlbmd0aDogbnVtYmVyLCBuYXRpdmVFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICBjb25zdCBlbXB0eSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdcXHUwMEEwJyk7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gZ2V0V2luZG93U2VsZWN0aW9uKHRoaXMuaWZyYW1lKCkpO1xuICAgIGNvbnN0IGFuY2hvck5vZGUgPSBzZWxlY3Rpb24/LmFuY2hvck5vZGU7XG5cbiAgICBpZiAodGhpcy5pc0VkaXRvcigpKSB7XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gYW5jaG9yTm9kZT8ucGFyZW50Tm9kZSBhcyBFbGVtZW50O1xuXG4gICAgICBpZiAocGFyZW50Tm9kZT8uZ2V0QXR0cmlidXRlPy4oJ2lkJykpIHtcbiAgICAgICAgaWYgKCFwYXJlbnROb2RlLm5leHRTaWJsaW5nPy50ZXh0Q29udGVudD8ubGVuZ3RoKSB7XG4gICAgICAgICAgcGFyZW50Tm9kZT8ucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKGVtcHR5LCBwYXJlbnROb2RlLm5leHRTaWJsaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblxuICAgICAgICByYW5nZS5zZXRTdGFydChwYXJlbnROb2RlLm5leHRTaWJsaW5nIGFzIE5vZGUsIDApO1xuICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICAgICAgc2VsPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgc2VsPy5hZGRSYW5nZShyYW5nZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHByZU5vZGUgPSBudWxsO1xuICAgIGNvbnN0IGFuY2hvck9mZnNldCA9IHNlbGVjdGlvbj8uYW5jaG9yT2Zmc2V0O1xuXG4gICAgaWYgKCFhbmNob3JOb2RlIHx8ICFhbmNob3JPZmZzZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYW5jaG9yTm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnI3RleHQnKSB7XG4gICAgICBuYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGVtcHR5KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBBcnJheS5mcm9tKG5hdGl2ZUVsZW1lbnQuY2hpbGROb2RlcykpIHtcbiAgICAgIGlmIChhbmNob3JOb2RlLm5vZGVUeXBlID09PSAzICYmIGFuY2hvck5vZGUgPT09IG5vZGUgJiYgcHJlTm9kZT8uZ2V0QXR0cmlidXRlPy4oJ2lkJykgJiYgKCFhbmNob3JOb2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgYW5jaG9yTm9kZS50ZXh0Q29udGVudC5sZW5ndGggPT09IDEpICYmIHBvc2l0aW9uID09PSBsZW5ndGgpIHtcbiAgICAgICAgbmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChlbXB0eSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJlTm9kZSA9IG5vZGUgYXMgRWxlbWVudDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkTm9kZVplcm9XaWR0aFNwYWNlKG5hdGl2ZUVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgIGNvbnN0IGVtcHR5ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTIwMGInKTtcbiAgICBsZXQgcHJlTm9kZSA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgQXJyYXkuZnJvbShuYXRpdmVFbGVtZW50LmNoaWxkTm9kZXMpKSB7XG4gICAgICBjb25zdCB0eXBlZE5vZGU6IGFueSA9IG5vZGU7XG5cbiAgICAgIGlmIChwcmVOb2RlPy5nZXRBdHRyaWJ1dGU/LignaWQnKSAmJiB0eXBlZE5vZGU/LmdldEF0dHJpYnV0ZT8uKCdpZCcpKSB7XG4gICAgICAgIG5hdGl2ZUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGVtcHR5LCBwcmVOb2RlLm5leHRTaWJsaW5nKTtcbiAgICAgIH1cblxuICAgICAgcHJlTm9kZSA9IHR5cGVkTm9kZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluc2VydE1lbnRpb24obmF0aXZlRWxlbWVudDogSFRNTElucHV0RWxlbWVudCwgcG9zOiBudW1iZXIpIHtcbiAgICBjb25zdCBhY3RpdmVDb25maWcgPSB0aGlzLmFjdGl2ZUNvbmZpZygpO1xuICAgIGlmICghYWN0aXZlQ29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaExpc3QgPSB0aGlzLnNlYXJjaExpc3QoKTtcbiAgICBsZXQgdGV4dCA9ICcnO1xuICAgIGNvbnN0IGZlSWQgPSB1dWlkKCk7XG4gICAgY29uc3QgaWQgPSBzZWFyY2hMaXN0Py5BY3RpdmVJdGVtLmlkIHx8IHV1aWQoKTtcbiAgICBjb25zdCBpdGVtQWN0aXZlID0gc2VhcmNoTGlzdD8uQWN0aXZlSXRlbTtcbiAgICBjb25zdCB7IHRyaWdnZXJDaGFyLCBtZW50aW9uRXZlbnROYW1lLCBtZW50aW9uQWN0aW9uQnlFdmVudCB9ID0gYWN0aXZlQ29uZmlnO1xuXG4gICAgaWYgKGFjdGl2ZUNvbmZpZy5tZW50aW9uU2VsZWN0KSB7XG4gICAgICB0ZXh0ID0gYWN0aXZlQ29uZmlnLm1lbnRpb25TZWxlY3Qoc2VhcmNoTGlzdD8uQWN0aXZlSXRlbSwgYWN0aXZlQ29uZmlnLnRyaWdnZXJDaGFyKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzRWRpdG9yKCkpIHtcbiAgICAgIGxldCBzcGFuOiBIVE1MU3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdURVhUQVJFQScpO1xuXG4gICAgICBzcGFuLmlubmVyVGV4dCA9IHRleHQ7XG4gICAgICB0ZXh0ID0gc3Bhbi5pbm5lckhUTUw7XG4gICAgICBzcGFuLnJlbW92ZSgpO1xuICAgICAgdGV4dCA9IGJ1aWxkVGVtcGxhdGUodGV4dCwgaWQsIGZlSWQpO1xuICAgICAgc3BhbiA9IGluc2VydFZhbHVlKG5hdGl2ZUVsZW1lbnQsIHRoaXMuc3RhcnRQb3MoKSB8fCAwLCBwb3MsIHRleHQsIHRoaXMuaWZyYW1lKCkpIGFzIEhUTUxTcGFuRWxlbWVudDtcbiAgICAgIGlmIChzcGFuKSB7XG4gICAgICAgIGNvbnN0IGRhdGE6IElOb2RlSW5zZXJ0ID0ge1xuICAgICAgICAgIGVsZW1lbnRTcGFuOiBzcGFuLFxuICAgICAgICAgIHN1YnNjcmlwdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgIGl0ZW06IGl0ZW1BY3RpdmUsXG4gICAgICAgICAgdHJpZ2dlckNoYXI6IHRyaWdnZXJDaGFyLFxuICAgICAgICAgIG1hbnVhbEFkZDogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLm5vZGVzSW5zZXJ0KCkuYWRkKGRhdGEpO1xuICAgICAgICBpZiAobWVudGlvbkV2ZW50TmFtZSkge1xuICAgICAgICAgIGRhdGEuc3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50PElFdmVudD4oc3BhbiwgbWVudGlvbkV2ZW50TmFtZSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YXAoKGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCkpLFxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG1lbnRpb25BY3Rpb25CeUV2ZW50KSB7XG4gICAgICAgICAgICAgICAgbWVudGlvbkFjdGlvbkJ5RXZlbnQoaXRlbUFjdGl2ZSwgdHJpZ2dlckNoYXIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm91dEluc2VydE1lbnRpb24uZW1pdCh7IGRhdGE6IHsgaWQsIHZhbHVlOiB0ZXh0LCBmZUlkIH0sIGxlbmd0aEtleTogcG9zIC0gKHRoaXMuc3RhcnRQb3MoKSB8fCAwKSB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3lMaXN0U2VhcmNoKCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -61,7 +61,7 @@ const insertValueToContentEditable = (start, end, text) => {
61
61
  return;
62
62
  }
63
63
  const sel = window.getSelection();
64
- if (!sel || !sel.anchorNode || !sel.getRangeAt || !sel.rangeCount) {
64
+ if (!sel?.anchorNode || !sel.getRangeAt || !sel.rangeCount) {
65
65
  return;
66
66
  }
67
67
  let range = sel.getRangeAt(0);
@@ -96,7 +96,7 @@ const insertValueToContentEditable = (start, end, text) => {
96
96
  };
97
97
  const getTextBeforeCursor = () => {
98
98
  const sel = window.getSelection();
99
- if (!sel || !sel.anchorNode) {
99
+ if (!sel?.anchorNode) {
100
100
  return undefined;
101
101
  }
102
102
  const range = sel.getRangeAt(0);
@@ -138,7 +138,7 @@ const getCaretPosition = (el, iframe) => {
138
138
  const val = el.value;
139
139
  return val.slice(0, el.selectionStart || undefined).length;
140
140
  }
141
- const selObj = getWindowSelection(iframe); //window.getSelection();
141
+ const selObj = getWindowSelection(iframe);
142
142
  if (selObj && selObj.rangeCount > 0) {
143
143
  const selRange = selObj.getRangeAt(0);
144
144
  const preCaretRange = selRange.cloneRange();
@@ -225,7 +225,7 @@ const localToRelativeCoordinates = (ctx, element, coordinates) => {
225
225
  }
226
226
  obj = element;
227
227
  iframe = ctx ? ctx.iframe : null;
228
- while ((obj !== getDocument(undefined)?.body || ctx.windowParent) && obj !== null) {
228
+ while ((obj !== getDocument()?.body || ctx.windowParent) && obj !== null) {
229
229
  if (ctx.parent !== null && ctx.parent === obj) {
230
230
  break;
231
231
  }
@@ -251,7 +251,6 @@ const setEndOfContentEditable = (contentEditableElement) => {
251
251
  selection?.removeAllRanges(); //remove any selections already made
252
252
  selection?.addRange(range); //make the range you have just created the visible selection
253
253
  }
254
- return;
255
254
  };
256
255
  const insertTextAtCaret = (element, text) => {
257
256
  if (window.getSelection) {
@@ -487,7 +486,6 @@ class LibsUiComponentsInputsMentionListComponent {
487
486
  }
488
487
  if (iframe) {
489
488
  const context = { iframe: iframe, parent: window.parent.document.body, windowParent: true };
490
- // const rect = iframe.getBoundingClientRect();
491
489
  const caretRelativeToView = getContentEditableCaretCoords(context);
492
490
  const doc = document.documentElement;
493
491
  const scrollLeft = (window.scrollX || doc.scrollLeft) - (doc.clientLeft || 0);
@@ -564,7 +562,7 @@ class LibsUiComponentsInputsMentionListComponent {
564
562
  scrollContent() {
565
563
  setTimeout(() => {
566
564
  const element = this.elementEl();
567
- if (element && element.nativeElement) {
565
+ if (element?.nativeElement) {
568
566
  element.nativeElement.scrollTop = 0;
569
567
  }
570
568
  });
@@ -574,7 +572,7 @@ class LibsUiComponentsInputsMentionListComponent {
574
572
  this.onDestroy.complete();
575
573
  }
576
574
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsMentionListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
577
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsInputsMentionListComponent, isStandalone: true, selector: "libs_ui-components-inputs-mention-list", inputs: { labelKey: { classPropertyName: "labelKey", publicName: "labelKey", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, isIframe: { classPropertyName: "isIframe", publicName: "isIframe", isSignal: true, isRequired: true, transformFunction: null }, defaultAvatar: { classPropertyName: "defaultAvatar", publicName: "defaultAvatar", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { labelKey: "labelKeyChange", zIndex: "zIndexChange", isIframe: "isIframeChange", defaultAvatar: "defaultAvatarChange" }, viewQueries: [{ propertyName: "elementEl", first: true, predicate: ["elementRef"], descendants: true, isSignal: true }, { propertyName: "itemsEl", predicate: ["itemRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n #elementRef\n class=\"libs-ui-mention-list\"\n [style.zIndex]=\"zIndex()\"\n [class.hidden]=\"hidden()\">\n @for (item of items(); track item) {\n <div\n #itemRef\n class=\"libs-ui-mention-list-item\"\n [class.libs-ui-mention-list-item-active]=\"$index === activeIndex()\"\n (mousedown)=\"handlerClick($event, $index)\"\n (mouseenter)=\"handleActiveItem($event, $index)\">\n @if (listTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"listTemplate()\"\n [ngTemplateOutletContext]=\"{ item: item, index: $index }\"></ng-container>\n } @else {\n <div class=\"px-[12px] py-[6px] flex items-center\">\n <libs_ui-components-avatar\n [size]=\"24\"\n [linkAvatar]=\"item.avatar\"\n [linkAvatarError]=\"defaultAvatar()\"\n [getLastTextAfterSpace]=\"true\"\n [textAvatar]=\"item.name\"\n [idGenColor]=\"item.id\" />\n <libs_ui-components-popover\n [classInclude]=\"'libs-ui-font-h5r'\"\n [type]=\"'text'\"\n [ignoreShowPopover]=\"true\"\n [config]=\"{ width: 250 }\">\n <!-- // ta.m \u1EA9n show tooltip v\u00EC ch\u01B0a x\u1EED l\u00FD \u0111c v\u1ECB tr\u00ED -->\n {{ item.name + ' (' + item.username + ')' }}\n </libs_ui-components-popover>\n </div>\n }\n </div>\n }\n</div>\n", styles: [".libs-ui-mention-list{position:absolute;top:-999px;left:-9999px;z-index:1202;float:left;width:315px;padding:4px 0;background-color:#fff;border:solid 1px #e6e8ed;border-radius:5px;max-height:190px;overflow:auto;box-shadow:0 2px 10px 1px #3333331a}.libs-ui-mention-list .libs-ui-mention-list-item{background:#fff;cursor:pointer}.libs-ui-mention-list .libs-ui-mention-list-item:hover,.libs-ui-mention-list .libs-ui-mention-list-item-active{background-color:var(--libs-ui-color-light-3, #f4f8ff)}\n"], dependencies: [{ kind: "component", type: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "classImageInclude", "zIndexPreviewImage", "clickPreviewImage", "idGenColor", "getLastTextAfterSpace", "textAvatar", "textAvatarClassInclude", "containertextAvatarClassInclude"], outputs: ["outAvatarError", "outEventPreviewImage"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
575
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsInputsMentionListComponent, isStandalone: true, selector: "libs_ui-components-inputs-mention-list", inputs: { labelKey: { classPropertyName: "labelKey", publicName: "labelKey", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, isIframe: { classPropertyName: "isIframe", publicName: "isIframe", isSignal: true, isRequired: true, transformFunction: null }, defaultAvatar: { classPropertyName: "defaultAvatar", publicName: "defaultAvatar", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { labelKey: "labelKeyChange", zIndex: "zIndexChange", isIframe: "isIframeChange", defaultAvatar: "defaultAvatarChange" }, viewQueries: [{ propertyName: "elementEl", first: true, predicate: ["elementRef"], descendants: true, isSignal: true }, { propertyName: "itemsEl", predicate: ["itemRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n #elementRef\n class=\"libs-ui-mention-list\"\n [style.zIndex]=\"zIndex()\"\n [class.hidden]=\"hidden()\">\n @for (item of items(); track item) {\n <div\n #itemRef\n class=\"libs-ui-mention-list-item\"\n [class.libs-ui-mention-list-item-active]=\"$index === activeIndex()\"\n (mousedown)=\"handlerClick($event, $index)\"\n (mouseenter)=\"handleActiveItem($event, $index)\">\n @if (listTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"listTemplate()\"\n [ngTemplateOutletContext]=\"{ item: item, index: $index }\"></ng-container>\n } @else {\n <div class=\"px-[12px] py-[6px] flex items-center\">\n <libs_ui-components-avatar\n [size]=\"24\"\n [linkAvatar]=\"item.avatar\"\n [linkAvatarError]=\"defaultAvatar()\"\n [getLastTextAfterSpace]=\"true\"\n [textAvatar]=\"item.name\"\n [idGenColor]=\"item.id\" />\n <libs_ui-components-popover\n [classInclude]=\"'libs-ui-font-h5r'\"\n [type]=\"'text'\"\n [ignoreShowPopover]=\"true\"\n [config]=\"{ width: 250 }\">\n <!-- // ta.m \u1EA9n show tooltip v\u00EC ch\u01B0a x\u1EED l\u00FD \u0111c v\u1ECB tr\u00ED -->\n {{ item.name + ' (' + item.username + ')' }}\n </libs_ui-components-popover>\n </div>\n }\n </div>\n }\n</div>\n", styles: [".libs-ui-mention-list{position:absolute;top:-999px;left:-9999px;z-index:1202;float:left;width:315px;padding:4px 0;background-color:#fff;border:solid 1px #e6e8ed;border-radius:5px;max-height:190px;overflow:auto;box-shadow:0 2px 10px 1px #3333331a}.libs-ui-mention-list .libs-ui-mention-list-item{background:#fff;cursor:pointer}.libs-ui-mention-list .libs-ui-mention-list-item:hover,.libs-ui-mention-list .libs-ui-mention-list-item-active{background-color:var(--libs-ui-color-light-3, #f4f8ff)}\n"], dependencies: [{ kind: "component", type: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "classImageInclude", "zIndexPreviewImage", "clickPreviewImage", "idGenColor", "getLastTextAfterSpace", "textAvatar", "textAvatarClassInclude", "containerTextAvatarClassInclude"], outputs: ["outAvatarError", "outEventPreviewImage"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
578
576
  }
579
577
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsMentionListComponent, decorators: [{
580
578
  type: Component,
@@ -661,7 +659,7 @@ class LibsUiComponentsInputsMentionDirective {
661
659
  }
662
660
  }
663
661
  addConfig(config) {
664
- const defaults = Object.assign({}, DEFAULT_CONFIG);
662
+ const defaults = { ...DEFAULT_CONFIG };
665
663
  const labelKey = config.labelKey || 'label';
666
664
  config = Object.assign(defaults, config);
667
665
  if (config.items && config.items.length > 0) {
@@ -870,7 +868,7 @@ class LibsUiComponentsInputsMentionDirective {
870
868
  index: textBeforeCursor.lastIndexOf(key),
871
869
  };
872
870
  });
873
- const matchingCharacters = triggerChars.reduce((pre, current) => (pre && current && current.index > pre.index ? current : pre));
871
+ const matchingCharacters = triggerChars.reduce((pre, current) => (pre && current && current.index > pre.index ? current : pre), triggerChars[0]);
874
872
  if (matchingCharacters.index < 0) {
875
873
  this.stopSearch();
876
874
  return;
@@ -921,7 +919,7 @@ class LibsUiComponentsInputsMentionDirective {
921
919
  const searchString = this.searchString();
922
920
  const searchList = this.searchList();
923
921
  // disabling the search relies on the async operation to do the filtering
924
- if (activeConfig && activeConfig.items && !activeConfig.disableSearch && !isNil(searchString) && activeConfig.labelKey && activeConfig.mentionFilter) {
922
+ if (activeConfig?.items && !activeConfig.disableSearch && !isNil(searchString) && activeConfig.labelKey && activeConfig.mentionFilter) {
925
923
  matches.push(...activeConfig.mentionFilter(searchString, activeConfig.items));
926
924
  }
927
925
  // update the search list
@@ -932,7 +930,7 @@ class LibsUiComponentsInputsMentionDirective {
932
930
  searchList.hidden.set(!matches.length);
933
931
  searchList.activeIndex.set(0);
934
932
  searchList.scrollContent();
935
- this.outToggle.emit(matches.length ? true : false);
933
+ this.outToggle.emit(!!matches.length);
936
934
  }
937
935
  showSearchList(nativeElement) {
938
936
  let iframe = undefined;
@@ -957,12 +955,12 @@ class LibsUiComponentsInputsMentionDirective {
957
955
  this.searchList()?.styleOff.set(this.mentionConfig()?.disableStyle || false);
958
956
  this.searchList()?.activeIndex.set(0);
959
957
  this.searchList()?.zIndex.set(this.mentionConfig()?.zIndex || 2500);
960
- this.searchList()?.isIframe.set(iframe ? true : false);
958
+ this.searchList()?.isIframe.set(!!iframe);
961
959
  this.searchList()?.listTemplate.set(this.mentionListTemplate());
962
960
  this.searchList()?.parentHandlerKeyDown.set(this.handlerKeydown.bind(this));
963
961
  this.searchList()?.position(nativeElement, iframe);
964
962
  if (firstTime && this.listComponentRef()) {
965
- this.iframeId.set(this.dynamicComponentService.addToBody(this.listComponentRef(), iframe ? true : false));
963
+ this.dynamicComponentService.addToBody(this.listComponentRef(), !!iframe);
966
964
  }
967
965
  }
968
966
  destroyListSearch() {
@@ -975,8 +973,8 @@ class LibsUiComponentsInputsMentionDirective {
975
973
  const anchorNode = selection?.anchorNode;
976
974
  if (this.isEditor()) {
977
975
  const parentNode = anchorNode?.parentNode;
978
- if (parentNode && parentNode.getAttribute && parentNode.getAttribute('id')) {
979
- if (!parentNode.nextSibling || !parentNode.nextSibling.textContent?.length) {
976
+ if (parentNode?.getAttribute?.('id')) {
977
+ if (!parentNode.nextSibling?.textContent?.length) {
980
978
  parentNode?.parentNode?.insertBefore(empty, parentNode.nextSibling);
981
979
  }
982
980
  const range = document.createRange();
@@ -997,9 +995,8 @@ class LibsUiComponentsInputsMentionDirective {
997
995
  nativeElement.appendChild(empty);
998
996
  return;
999
997
  }
1000
- for (let i = 0; i < nativeElement.childNodes.length; i++) {
1001
- const node = nativeElement.childNodes[i];
1002
- if (anchorNode.nodeType === 3 && anchorNode === node && preNode && preNode.getAttribute && preNode.getAttribute('id') && (!anchorNode.textContent?.length || anchorNode.textContent.length === 1) && position === length) {
998
+ for (const node of Array.from(nativeElement.childNodes)) {
999
+ if (anchorNode.nodeType === 3 && anchorNode === node && preNode?.getAttribute?.('id') && (!anchorNode.textContent?.length || anchorNode.textContent.length === 1) && position === length) {
1003
1000
  nativeElement.appendChild(empty);
1004
1001
  break;
1005
1002
  }
@@ -1009,12 +1006,12 @@ class LibsUiComponentsInputsMentionDirective {
1009
1006
  addNodeZeroWidthSpace(nativeElement = this.element.nativeElement) {
1010
1007
  const empty = document.createTextNode('\u200b');
1011
1008
  let preNode = null;
1012
- for (let i = 0; i < nativeElement.childNodes.length; i++) {
1013
- const node = nativeElement.childNodes[i];
1014
- if (preNode && preNode.getAttribute && preNode.getAttribute('id') && node && node.getAttribute && node.getAttribute('id')) {
1009
+ for (const node of Array.from(nativeElement.childNodes)) {
1010
+ const typedNode = node;
1011
+ if (preNode?.getAttribute?.('id') && typedNode?.getAttribute?.('id')) {
1015
1012
  nativeElement.insertBefore(empty, preNode.nextSibling);
1016
1013
  }
1017
- preNode = node;
1014
+ preNode = typedNode;
1018
1015
  }
1019
1016
  }
1020
1017
  insertMention(nativeElement, pos) {