@cuby-ui/core 0.0.529 → 0.0.531

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.
@@ -63,7 +63,7 @@ export class CuiCombinedTextBlockTool {
63
63
  const blockId = lastBlock?.id || generateId();
64
64
  this.data.textBlocks.splice(lastBlockIndex, 1, this.getBlockPartObject(blockId, text));
65
65
  this.skipNextUpdateEmit = true;
66
- this.updateExistingBlock(blockId, text);
66
+ this.updateExistingBlock(blockId, text, Boolean(lastBlock?.id));
67
67
  }
68
68
  render() {
69
69
  this.wrapper = document.createElement('div');
@@ -322,7 +322,7 @@ export class CuiCombinedTextBlockTool {
322
322
  });
323
323
  this.api.events.emit(COMBINED_TEXT_BLOCK_UPDATED, updatedBlocks);
324
324
  }
325
- updateExistingBlock(blockId, text) {
325
+ updateExistingBlock(blockId, text, isBlockExists) {
326
326
  if (!this.wrapper) {
327
327
  return;
328
328
  }
@@ -332,6 +332,12 @@ export class CuiCombinedTextBlockTool {
332
332
  }
333
333
  const block = this.getBlockPartObject(blockId, text);
334
334
  existingElement.innerHTML = text;
335
+ if (isBlockExists) {
336
+ setTimeout(() => {
337
+ this.api.events.emit(COMBINED_TEXT_BLOCK_UPDATED, [block]);
338
+ });
339
+ return;
340
+ }
335
341
  setTimeout(() => {
336
342
  this.api.events.emit(COMBINED_TEXT_BLOCK_ADDED, {
337
343
  blocks: [block]
@@ -431,4 +437,4 @@ export class CuiCombinedTextBlockTool {
431
437
  return config.placeholder ?? DEFAULT_PLACEHOLDER;
432
438
  }
433
439
  }
434
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZWQtdGV4dC1ibG9jay50b29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9lZGl0b3IvdG9vbHMvY29tYmluZWQtdGV4dC1ibG9jay50b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLGdCQUFnQixFQUNuQixNQUFNLGNBQWMsQ0FBQztBQU90QixPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVuRSxNQUFNLE9BQU8sd0JBQXdCO0lBc0JqQyxZQUFZLE9BQWdCO1FBckJYLFFBQUcsR0FBRyxNQUFNLENBQUM7UUFDYixrQkFBYSxHQUFHLEdBQUcsQ0FBQztRQUNwQiw4QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFDOUIsK0JBQTBCLEdBQUcsbUJBQW1CLENBQUM7UUFFakQsbUJBQWMsR0FBRztZQUM5QixPQUFPLEVBQUUsSUFBSTtZQUNiLFNBQVMsRUFBRSxJQUFJO1lBQ2YsYUFBYSxFQUFFLElBQUk7U0FDdEIsQ0FBQztRQVFlLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTdCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQW1LbEIsd0JBQW1CLEdBQUcsQ0FBQyxJQUFZLEVBQXVCLEVBQUU7WUFDekUsSUFBSSxTQUFTLEdBQStDLElBQUksQ0FBQztZQUVqRSxPQUFPLEdBQUcsRUFBRTtnQkFDUixJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNaLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUIsQ0FBQztnQkFFRCxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxl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QUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUNqRixPQUFPO1FBQ1gsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQWdCLENBQUM7UUFDMUQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQztRQUU5QyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFFTyxjQUFjLENBQUMsTUFBa0I7UUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsT0FBTyxNQUFNLENBQUMsbUJBQW1CLElBQUksNEJBQTRCLENBQUM7UUFDdEUsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLFdBQVcsSUFBSSxtQkFBbUIsQ0FBQztJQUNyRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB0eXBlIHsgQ3VpTnVsbGFibGUgfSBmcm9tICdAY3VieS11aS9jZGsnO1xuaW1wb3J0IHR5cGUgeyBBUEksIEJsb2NrVG9vbCwgQmxvY2tUb29sQ29uc3RydWN0b3JPcHRpb25zLCBUb29sQ29uZmlnIH0gZnJvbSAnQGVkaXRvcmpzL2VkaXRvcmpzJztcblxuaW1wb3J0IHtcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLLFxuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0tfQURERUQsXG4gICAgQ09NQklORURfVEVYVF9CTE9DS19OQU1FLFxuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCxcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLX1JFTU9WRUQsXG4gICAgQ09NQklORURfVEVYVF9CTE9DS19VUERBVEVELFxuICAgIERFRkFVTFRfUExBQ0VIT0xERVIsXG4gICAgREVGQVVMVF9SRUFET05MWV9QTEFDRUhPTERFUixcbiAgICBTUExJVF9NQVhfTEVOR1RIXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7XG4gICAgQ3VpQ29tYmluZWRCbG9ja1Rvb2xEYXRhLFxuICAgIEN1aUNvbWJpbmVkUGFydEJsb2NrLFxuICAgIEN1aU11dGF0aW9uQWN0aW9ucyxcbiAgICBDdWlNdXRhdGlvbkNhbGxiYWNrXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2VuZXJhdGVJZCwgbWVyZ2VTbWFsbENodW5rcywgc3BsaXRIVE1MIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQ3VpQ29tYmluZWRUZXh0QmxvY2tUb29sIGltcGxlbWVudHMgQmxvY2tUb29sIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IFRBRyA9ICdzcGFuJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IERFQk9VTkNFX1RJTUUgPSAzNTA7XG4gICAgcHJpdmF0ZSByZWFkb25seSBNQVhfQ0hJTERfQ09VTlRfRk9SX0VNUFRZID0gMTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IFBMQUNFSE9MREVSX0FUVFJJQlVURV9OQU1FID0gJ3BsYWNlaG9sZGVyQWN0aXZlJztcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgbXV0YXRpb25Db25maWcgPSB7XG4gICAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZVxuICAgIH07XG4gICAgcHJpdmF0ZSByZWFkb25seSBhcGk6IEFQSTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGE6IEN1aUNvbWJpbmVkQmxvY2tUb29sRGF0YTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSB3cmFwcGVyPzogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBvYnNlcnZlcj86IE11dGF0aW9uT2JzZXJ2ZXI7XG4gICAgcHJpdmF0ZSBsYXN0QmxvY2tFbGVtZW50PzogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VzID0gbmV3IE1hcCgpO1xuXG4gICAgcHJpdmF0ZSBza2lwTmV4dFVwZGF0ZUVtaXQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHVua25vd24pIHtcbiAgICAgICAgY29uc3QgYm9keSA9IG9wdGlvbnMgYXMgQmxvY2tUb29sQ29uc3RydWN0b3JPcHRpb25zO1xuICAgICAgICBjb25zdCBkYXRhID0gYm9keS5kYXRhO1xuXG4gICAgICAgIHRoaXMucmVhZE9ubHkgPSBib2R5LnJlYWRPbmx5O1xuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdGhpcy5nZXRQbGFjZWhvbGRlcihib2R5LmNvbmZpZyk7XG4gICAgICAgIHRoaXMuYXBpID0gYm9keS5hcGk7XG4gICAgICAgIHRoaXMuZGF0YSA9IHtcbiAgICAgICAgICAgIGlkOiBkYXRhLmlkIHx8IGdlbmVyYXRlSWQoKSxcbiAgICAgICAgICAgIHRleHRCbG9ja3M6IGRhdGEudGV4dEJsb2NrcyB8fCBbXVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY29udmVydERlZmF1bHREYXRhVG9DdXN0b20oZGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgaXNJbmxpbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCBpc1JlYWRPbmx5U3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCBlbmFibGVMaW5lQnJlYWtzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgdG9vbGJveCgpOiB7IGljb246IHN0cmluZzsgdGl0bGU6IHN0cmluZyB9IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGljb246ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIGQ9XCJNOCA5VjcuMkM4IDcuMDg5NTQgOC4wODk1NCA3IDguMiA3TDEyIDdNMTYgOVY3LjJDMTYgNy4wODk1NCAxNS45MTA1IDcgMTUuOCA3TDEyIDdNMTIgN0wxMiAxN00xMiAxN0gxME0xMiAxN0gxNFwiPjwvcGF0aD48L3N2Zz4nLFxuICAgICAgICAgICAgdGl0bGU6ICdUZXh0J1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IHBhc3RlQ29uZmlnKCk6IG9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0YWdzOiBbJ1AnXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBhc3RlKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSAhPT0gJ3RhZycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRleHQgPSBldmVudC5kZXRhaWwuZGF0YS50ZXh0Q29udGVudDtcbiAgICAgICAgY29uc3QgbGFzdEJsb2NrSW5kZXggPSB0aGlzLmRhdGEudGV4dEJsb2Nrcy5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBsYXN0QmxvY2sgPSB0aGlzLmRhdGEudGV4dEJsb2Nrc1tsYXN0QmxvY2tJbmRleF07XG4gICAgICAgIGNvbnN0IGJsb2NrSWQgPSBsYXN0QmxvY2s/LmlkIHx8IGdlbmVyYXRlSWQoKTtcblxuICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2Nrcy5zcGxpY2UobGFzdEJsb2NrSW5kZXgsIDEsIHRoaXMuZ2V0QmxvY2tQYXJ0T2JqZWN0KGJsb2NrSWQsIHRleHQpKTtcblxuICAgICAgICB0aGlzLnNraXBOZXh0VXBkYXRlRW1pdCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy51cGRhdGVFeGlzdGluZ0Jsb2NrKGJsb2NrSWQsIHRleHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW5kZXIoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICB0aGlzLndyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy53cmFwcGVyLmNsYXNzTGlzdC5hZGQoQ09NQklORURfVEVYVF9CTE9DSyk7XG4gICAgICAgIHRoaXMud3JhcHBlci5kYXRhc2V0W3RoaXMuUExBQ0VIT0xERVJfQVRUUklCVVRFX05BTUVdID0gdGhpcy5hcGkuaTE4bi50KHRoaXMucGxhY2Vob2xkZXIpO1xuXG4gICAgICAgIGlmICghdGhpcy5yZWFkT25seSkge1xuICAgICAgICAgICAgdGhpcy53cmFwcGVyLmNvbnRlbnRFZGl0YWJsZSA9ICd0cnVlJztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzRW1wdHlCbG9jayA9ICF0aGlzLmRhdGEudGV4dEJsb2Nrcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGlzRW1wdHlCbG9jaykge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnRleHRCbG9ja3MucHVzaCh0aGlzLmdldEJsb2NrUGFydE9iamVjdChnZW5lcmF0ZUlkKCksICcnKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbmRlckJsb2Nrcyh0aGlzLmRhdGEudGV4dEJsb2Nrcyk7XG4gICAgICAgIHRoaXMuY2hlY2tJc0VkaXRvckVtcHR5KCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuZ2V0TXV0YXRpb25DYWxsYmFjayh0aGlzLkRFQk9VTkNFX1RJTUUpO1xuXG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5vbk11dGF0aW9uRXZlbnQuYmluZCh0aGlzLCBjYWxsYmFjaykpO1xuICAgICAgICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKHRoaXMud3JhcHBlciwgdGhpcy5tdXRhdGlvbkNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBtZXJnZShibG9ja3NEYXRhOiBDdWlDb21iaW5lZFBhcnRCbG9ja1tdKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy53cmFwcGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYmxvY2tzVGV4dENvbnRlbnQgPSAnJztcbiAgICAgICAgdGhpcy5kYXRhLnRleHRCbG9ja3MgPSBbXTtcblxuICAgICAgICBibG9ja3NEYXRhLmZvckVhY2goKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICBibG9ja3NUZXh0Q29udGVudCArPSBibG9jay5kYXRhLnRleHQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy53cmFwcGVyLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLndyYXBwZXIuY2hpbGROb2Rlcy5pdGVtKGkpO1xuXG4gICAgICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTFNwYW5FbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgYmxvY2tzVGV4dENvbnRlbnQgPSBub2RlLmlubmVySFRNTCArIGJsb2Nrc1RleHRDb250ZW50O1xuICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnRzID0gYmxvY2tzVGV4dENvbnRlbnQubGVuZ3RoIDwgU1BMSVRfTUFYX0xFTkdUSCA/IFtibG9ja3NUZXh0Q29udGVudF0gOiBzcGxpdEhUTUwoYmxvY2tzVGV4dENvbnRlbnQpO1xuXG4gICAgICAgIHBhcnRzLmZvckVhY2goKHBhcnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmxvY2tPYmplY3QgPSB0aGlzLmdldEJsb2NrUGFydE9iamVjdChnZW5lcmF0ZUlkKCksIHBhcnQpO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2Nrcy5wdXNoKGJsb2NrT2JqZWN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJCbG9ja3ModGhpcy5kYXRhLnRleHRCbG9ja3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYXZlKGJsb2NrQ29udGVudDogSFRNTEVsZW1lbnQpOiBDdWlDb21iaW5lZFBhcnRCbG9ja1tdIHtcbiAgICAgICAgY29uc3QgdGV4dEJsb2NrczogQ3VpQ29tYmluZWRQYXJ0QmxvY2tbXSA9IFtdO1xuXG4gICAgICAgIGJsb2NrQ29udGVudC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuVEFHKS5mb3JFYWNoKChzcGFuOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgdGV4dEJsb2Nrcy5wdXNoKHRoaXMuZ2V0QmxvY2tQYXJ0T2JqZWN0KHNwYW4uZGF0YXNldFsnbG9jYWxJZCddISwgc3Bhbi5pbm5lckhUTUwpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRleHRCbG9ja3M7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcblxuICAgICAgICBjb25zdCBibG9ja0lkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzLmZvckVhY2goKGJsb2NrOiBDdWlDb21iaW5lZFBhcnRCbG9jaykgPT4ge1xuICAgICAgICAgICAgYmxvY2tJZHMuYWRkKGJsb2NrLmlkIHx8ICcnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZW1vdmVCbG9ja3MoYmxvY2tJZHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25NdXRhdGlvbkV2ZW50KGNhbGxiYWNrOiAobXV0YXRpb25MaXN0OiBNdXRhdGlvblJlY29yZFtdKSA9PiB2b2lkLCBtdXRhdGlvbkxpc3Q6IE11dGF0aW9uUmVjb3JkW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKG11dGF0aW9uTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG11dGF0aW9uTGlzdC5mb3JFYWNoKChtdXRhdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKG11dGF0aW9uLnJlbW92ZWROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZXMuc2V0KGdlbmVyYXRlSWQoKSwgbXV0YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNoYW5nZXMuc2V0KG11dGF0aW9uLnRhcmdldCwgbXV0YXRpb24pO1xuICAgICAgICB9KTtcblxuICAgICAgICBjYWxsYmFjayhtdXRhdGlvbkxpc3QpO1xuICAgICAgICB0aGlzLmNoZWNrSXNFZGl0b3JFbXB0eSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2V0TXV0YXRpb25DYWxsYmFjayA9ICh3YWl0OiBudW1iZXIpOiBDdWlNdXRhdGlvbkNhbGxiYWNrID0+IHtcbiAgICAgICAgbGV0IHRpbWVvdXRJZDogQ3VpTnVsbGFibGU8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4+ID0gbnVsbDtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaGFuZGxlTXV0YXRpb25zKCksIHdhaXQpO1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBwcml2YXRlIGhhbmRsZU11dGF0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IHVwZGF0ZWRFbGVtZW50cywgcmVtb3ZlZEVsZW1lbnRzSWRzIH0gPSB0aGlzLmdldE11dGF0aW9uQWN0aW9ucyhbLi4udGhpcy5jaGFuZ2VzLnZhbHVlcygpXSk7XG4gICAgICAgICAgICBjb25zdCBzcGxpdHRlZFBhcnRzID0gdGhpcy50YWtlU3BsaXR0ZWRQYXJ0c1Jlc3VsdCh1cGRhdGVkRWxlbWVudHMpO1xuICAgICAgICAgICAgY29uc3QgeyBzcGxpdHRlZFBhcnRzUmVzdWx0LCB1cGRhdGVkRWxlbWVudHNSZXN1bHQsIHJlbW92ZWRFbGVtZW50c0lkc1Jlc3VsdCB9ID0gdGhpcy50YWtlTWVyZ2VkUmVzdWx0KFxuICAgICAgICAgICAgICAgIHNwbGl0dGVkUGFydHMsXG4gICAgICAgICAgICAgICAgdXBkYXRlZEVsZW1lbnRzLFxuICAgICAgICAgICAgICAgIHJlbW92ZWRFbGVtZW50c0lkc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5hZGRCbG9ja3Moc3BsaXR0ZWRQYXJ0c1Jlc3VsdCwgdXBkYXRlZEVsZW1lbnRzUmVzdWx0KTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQmxvY2tzKHVwZGF0ZWRFbGVtZW50c1Jlc3VsdCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUJsb2NrcyhyZW1vdmVkRWxlbWVudHNJZHNSZXN1bHQpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VzLmNsZWFyKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMud3JhcHBlcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5vYnNlcnZlcj8ub2JzZXJ2ZSh0aGlzLndyYXBwZXIsIHRoaXMubXV0YXRpb25Db25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0YWtlTWVyZ2VkUmVzdWx0KFxuICAgICAgICBzcGxpdHRlZFBhcnRzOiBIVE1MRWxlbWVudFtdLFxuICAgICAgICB1cGRhdGVkRWxlbWVudHM6IFNldDxIVE1MRWxlbWVudD4sXG4gICAgICAgIHJlbW92ZWRFbGVtZW50c0lkczogU2V0PHN0cmluZz5cbiAgICApOiB7XG4gICAgICAgIHNwbGl0dGVkUGFydHNSZXN1bHQ6IEhUTUxFbGVtZW50W107XG4gICAgICAgIHVwZGF0ZWRFbGVtZW50c1Jlc3VsdDogU2V0PEhUTUxFbGVtZW50PjtcbiAgICAgICAgcmVtb3ZlZEVsZW1lbnRzSWRzUmVzdWx0OiBTZXQ8c3RyaW5nPjtcbiAgICB9IHtcbiAgICAgICAgY29uc3QgeyByZW1vdmVkSWRzOiBtZXJnZVJlbW92ZWRJZHMsIHVwZGF0ZWRFbGVtZW50czogbWVyZ2VVcGRhdGVkRWxlbWVudHMgfSA9IHRoaXMuYXBwbHlNZXJnZVNtYWxsQ2h1bmtzKCk7XG5cbiAgICAgICAgY29uc3Qgbm90UmVtb3ZlZEJ5TWVyZ2UgPSAoZWw6IEhUTUxFbGVtZW50KSA9PiAhbWVyZ2VSZW1vdmVkSWRzLmhhcyhlbC5kYXRhc2V0Wydsb2NhbElkJ10gPz8gJycpO1xuXG4gICAgICAgIGNvbnN0IHNwbGl0dGVkUGFydHNSZXN1bHQgPSBzcGxpdHRlZFBhcnRzLmZpbHRlcihub3RSZW1vdmVkQnlNZXJnZSk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRFbGVtZW50c0lkc1Jlc3VsdCA9IG5ldyBTZXQ8c3RyaW5nPihbLi4ucmVtb3ZlZEVsZW1lbnRzSWRzLCAuLi5tZXJnZVJlbW92ZWRJZHNdKTtcbiAgICAgICAgY29uc3QgdXBkYXRlZEVsZW1lbnRzUmVzdWx0ID0gbmV3IFNldDxIVE1MRWxlbWVudD4oXG4gICAgICAgICAgICBbLi4udXBkYXRlZEVsZW1lbnRzLCAuLi5tZXJnZVVwZGF0ZWRFbGVtZW50c10uZmlsdGVyKG5vdFJlbW92ZWRCeU1lcmdlKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7IHNwbGl0dGVkUGFydHNSZXN1bHQsIHVwZGF0ZWRFbGVtZW50c1Jlc3VsdCwgcmVtb3ZlZEVsZW1lbnRzSWRzUmVzdWx0IH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0YWtlU3BsaXR0ZWRQYXJ0c1Jlc3VsdCh1cGRhdGVkRWxlbWVudHM6IFNldDxIVE1MRWxlbWVudD4pOiBIVE1MRWxlbWVudFtdIHtcbiAgICAgICAgY29uc3Qgc3BsaXR0ZWRQYXJ0czogSFRNTEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgICAgIHVwZGF0ZWRFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudENvbnRlbnQ6IHN0cmluZyA9IGVsZW1lbnQuaW5uZXJIVE1MO1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudENvbnRlbnQubGVuZ3RoIDwgU1BMSVRfTUFYX0xFTkdUSCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBzcGxpdEhUTUwoZWxlbWVudENvbnRlbnQpO1xuXG4gICAgICAgICAgICBwYXJ0cy5mb3JFYWNoKChwYXJ0LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2tJZCA9IGdlbmVyYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0RWxlbWVudCA9IHRoaXMuY3JlYXRlQmxvY2soYmxvY2tJZCwgcGFydCk7XG5cbiAgICAgICAgICAgICAgICBzcGxpdHRlZFBhcnRzLnB1c2godGV4dEVsZW1lbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gcGFydHNbMF07XG4gICAgICAgICAgICBlbGVtZW50LmFmdGVyKC4uLnNwbGl0dGVkUGFydHMpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc3BsaXR0ZWRQYXJ0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5TWVyZ2VTbWFsbENodW5rcygpOiB7XG4gICAgICAgIHJlbW92ZWRJZHM6IFNldDxzdHJpbmc+O1xuICAgICAgICB1cGRhdGVkRWxlbWVudHM6IFNldDxIVE1MRWxlbWVudD47XG4gICAgfSB7XG4gICAgICAgIGNvbnN0IGVtcHR5ID0geyByZW1vdmVkSWRzOiBuZXcgU2V0PHN0cmluZz4oKSwgdXBkYXRlZEVsZW1lbnRzOiBuZXcgU2V0PEhUTUxFbGVtZW50PigpIH07XG5cbiAgICAgICAgaWYgKCF0aGlzLndyYXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBlbXB0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNodW5rRWxlbWVudHMgPSBBcnJheS5mcm9tKHRoaXMud3JhcHBlci5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignLicgKyBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQpKTtcbiAgICAgICAgY29uc3QgY2h1bmtFbGVtZW50c01hcCA9IG5ldyBNYXAoY2h1bmtFbGVtZW50cy5tYXAoKGVsZW1lbnQpID0+IFtlbGVtZW50LmRhdGFzZXRbJ2xvY2FsSWQnXSEsIGVsZW1lbnRdKSk7XG4gICAgICAgIGNvbnN0IHsgY2h1bmtzLCByZW1vdmVkSWRzIH0gPSBtZXJnZVNtYWxsQ2h1bmtzKFxuICAgICAgICAgICAgY2h1bmtFbGVtZW50cy5tYXAoKGVsZW1lbnQpID0+ICh7XG4gICAgICAgICAgICAgICAgaWQ6IGVsZW1lbnQuZGF0YXNldFsnbG9jYWxJZCddISxcbiAgICAgICAgICAgICAgICBjb250ZW50OiBlbGVtZW50LmlubmVySFRNTFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmVtb3ZlZElkcy5mb3JFYWNoKChpZCkgPT4gY2h1bmtFbGVtZW50c01hcC5nZXQoaWQpPy5yZW1vdmUoKSk7XG5cbiAgICAgICAgY29uc3QgdXBkYXRlZEVsZW1lbnRzID0gbmV3IFNldDxIVE1MRWxlbWVudD4oKTtcblxuICAgICAgICBjaHVua3MuZm9yRWFjaCgoY2h1bmspID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBjaHVua0VsZW1lbnRzTWFwLmdldChjaHVuay5pZCk7XG5cbiAgICAgICAgICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50LmlubmVySFRNTCA9PT0gY2h1bmsuY29udGVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBjaHVuay5jb250ZW50O1xuICAgICAgICAgICAgdXBkYXRlZEVsZW1lbnRzLmFkZChlbGVtZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHsgcmVtb3ZlZElkczogbmV3IFNldChyZW1vdmVkSWRzKSwgdXBkYXRlZEVsZW1lbnRzIH07XG4gICAgfVxuXG4gICAgLy8gUklQIDEzLjAxLjIwMjYgLSBwcml2YXRlIGdldE5leHRJbmRleCgpOiBudW1iZXJcblxuICAgIHByaXZhdGUgZ2V0QmxvY2tQYXJ0T2JqZWN0KGJsb2NrSWQ6IHN0cmluZywgdGV4dDogc3RyaW5nKTogQ3VpQ29tYmluZWRQYXJ0QmxvY2sge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGJsb2NrSWQsXG4gICAgICAgICAgICB0eXBlOiBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogdGhpcy5kYXRhLmlkLFxuICAgICAgICAgICAgICAgIHBhcmVudFR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TXV0YXRpb25BY3Rpb25zKG11dGF0aW9uTGlzdDogTXV0YXRpb25SZWNvcmRbXSk6IEN1aU11dGF0aW9uQWN0aW9ucyB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRFbGVtZW50cyA9IG5ldyBTZXQ8SFRNTEVsZW1lbnQ+KCk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRFbGVtZW50c0lkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBjb25zdCBjaGFuZ2VkT3V0c2lkZUVsZW1lbnRzOiBOb2RlW10gPSBbXTtcblxuICAgICAgICB0aGlzLmxhc3RCbG9ja0VsZW1lbnQgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgbXV0YXRpb25MaXN0LmZvckVhY2goKG11dGF0aW9uOiBNdXRhdGlvblJlY29yZCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVVcGRhdGVkQmxvY2tzKG11dGF0aW9uLCB1cGRhdGVkRWxlbWVudHMsIGNoYW5nZWRPdXRzaWRlRWxlbWVudHMpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZW1vdmVkQmxvY2tzKG11dGF0aW9uLCByZW1vdmVkRWxlbWVudHNJZHMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5sYXN0QmxvY2tFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0QmxvY2tFbGVtZW50ID0gdGhpcy5sYXN0QmxvY2tFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgICAgICBsYXN0QmxvY2tFbGVtZW50LmFwcGVuZCguLi5jaGFuZ2VkT3V0c2lkZUVsZW1lbnRzKTtcbiAgICAgICAgICAgIHVwZGF0ZWRFbGVtZW50cy5hZGQobGFzdEJsb2NrRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0VG9CbG9ja3NFbmQobGFzdEJsb2NrRWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdXBkYXRlZEVsZW1lbnRzLFxuICAgICAgICAgICAgcmVtb3ZlZEVsZW1lbnRzSWRzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRDYXJldFRvQmxvY2tzRW5kKGJsb2NrOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblxuICAgICAgICByYW5nZS5zZXRTdGFydChibG9jaywgYmxvY2suY2hpbGROb2Rlcy5sZW5ndGgpO1xuICAgICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVVwZGF0ZWRCbG9ja3MoXG4gICAgICAgIG11dGF0aW9uOiBNdXRhdGlvblJlY29yZCxcbiAgICAgICAgdXBkYXRlZEVsZW1lbnRzOiBTZXQ8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBvdXRzaWRlQ2hhbmdlczogTm9kZVtdXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGxldCBlbGVtZW50ID0gbXV0YXRpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgIGlmIChtdXRhdGlvbi50YXJnZXQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gbXV0YXRpb24udGFyZ2V0LnBhcmVudEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcGFuID0gZWxlbWVudD8uY2xvc2VzdCgnLicgKyBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQpIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgIGlmIChzcGFuKSB7XG4gICAgICAgICAgICB1cGRhdGVkRWxlbWVudHMuYWRkKHNwYW4pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZXNPdXRzaWRlQmxvY2soZWxlbWVudCwgb3V0c2lkZUNoYW5nZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ2hhbmdlc091dHNpZGVCbG9jayhlbGVtZW50OiBIVE1MRWxlbWVudCwgb3V0c2lkZUNoYW5nZXM6IE5vZGVbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIWVsZW1lbnQgfHwgdGhpcy5sYXN0QmxvY2tFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBlbGVtZW50LmNoaWxkTm9kZXMuZm9yRWFjaCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrRWxlbWVudCA9IGJsb2NrIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgICAgICBpZiAoYmxvY2tFbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoQ09NQklORURfVEVYVF9CTE9DS19QQVJUKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdEJsb2NrRWxlbWVudCA9IGJsb2NrRWxlbWVudDtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3V0c2lkZUNoYW5nZXMucHVzaChibG9jayk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQmxvY2tzKHNwbGljZWRQYXJ0czogSFRNTEVsZW1lbnRbXSwgdXBkYXRlZEVsZW1lbnRzOiBTZXQ8SFRNTEVsZW1lbnQ+KTogdm9pZCB7XG4gICAgICAgIGlmICghc3BsaWNlZFBhcnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWRkZWRCbG9ja3M6IEN1aUNvbWJpbmVkUGFydEJsb2NrW10gPSBzcGxpY2VkUGFydHMubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmxvY2tJZCA9IGJsb2NrLmRhdGFzZXRbJ2xvY2FsSWQnXTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogYmxvY2tJZCxcbiAgICAgICAgICAgICAgICB0eXBlOiBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQsXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBibG9jay5pbm5lckhUTUwsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB0aGlzLmRhdGEuaWQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHByZXZpb3VzRWxlbWVudCA9IHVwZGF0ZWRFbGVtZW50cy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgICAgIGNvbnN0IGlkID0gcHJldmlvdXNFbGVtZW50Py5kYXRhc2V0Wydsb2NhbElkJ107XG4gICAgICAgIGNvbnN0IGluZGV4ID0gTnVtYmVyKHByZXZpb3VzRWxlbWVudD8uZGF0YXNldFsnaW5kZXgnXSkgKyAxO1xuICAgICAgICBjb25zdCBibG9ja0luZGV4ID0gdGhpcy5kYXRhLnRleHRCbG9ja3MuZmluZEluZGV4KChibG9jaykgPT4gYmxvY2suaWQgPT09IGlkKTtcblxuICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2Nrcy5zcGxpY2UoYmxvY2tJbmRleCwgMCwgLi4uYWRkZWRCbG9ja3MpO1xuICAgICAgICB0aGlzLmFwaS5ldmVudHMuZW1pdChDT01CSU5FRF9URVhUX0JMT0NLX0FEREVELCB7XG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGJsb2NrSW5kZXgsXG4gICAgICAgICAgICBibG9ja3M6IGFkZGVkQmxvY2tzLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLnRleHRCbG9ja3NcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVCbG9ja3ModXBkYXRlZEVsZW1lbnRzOiBTZXQ8SFRNTEVsZW1lbnQ+KTogdm9pZCB7XG4gICAgICAgIGlmICghdXBkYXRlZEVsZW1lbnRzLnNpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNraXBOZXh0VXBkYXRlRW1pdCkge1xuICAgICAgICAgICAgdGhpcy5za2lwTmV4dFVwZGF0ZUVtaXQgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXBkYXRlZEJsb2NrcyA9IFsuLi51cGRhdGVkRWxlbWVudHMudmFsdWVzKCldLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaWQ6IGJsb2NrLmRhdGFzZXRbJ2xvY2FsSWQnXSxcbiAgICAgICAgICAgICAgICB0eXBlOiBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQsXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBibG9jay5pbm5lckhUTUwsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB0aGlzLmRhdGEuaWQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfVVBEQVRFRCwgdXBkYXRlZEJsb2Nrcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVFeGlzdGluZ0Jsb2NrKGJsb2NrSWQ6IHN0cmluZywgdGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy53cmFwcGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleGlzdGluZ0VsZW1lbnQgPSB0aGlzLndyYXBwZXIucXVlcnlTZWxlY3RvcihgW2RhdGEtbG9jYWwtaWQ9XCIke2Jsb2NrSWR9XCJdYCk7XG5cbiAgICAgICAgaWYgKCFleGlzdGluZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJsb2NrID0gdGhpcy5nZXRCbG9ja1BhcnRPYmplY3QoYmxvY2tJZCwgdGV4dCk7XG5cbiAgICAgICAgZXhpc3RpbmdFbGVtZW50LmlubmVySFRNTCA9IHRleHQ7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hcGkuZXZlbnRzLmVtaXQoQ09NQklORURfVEVYVF9CTE9DS19BRERFRCwge1xuICAgICAgICAgICAgICAgIGJsb2NrczogW2Jsb2NrXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlUmVtb3ZlZEJsb2NrcyhtdXRhdGlvbjogTXV0YXRpb25SZWNvcmQsIHJlbW92ZWRFbGVtZW50c0lkczogU2V0PHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgaWYgKG11dGF0aW9uLnJlbW92ZWROb2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG11dGF0aW9uLnJlbW92ZWROb2Rlcy5mb3JFYWNoKChub2RlOiBOb2RlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBibG9ja0lkID0gKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXRbJ2xvY2FsSWQnXTtcblxuICAgICAgICAgICAgaWYgKCFibG9ja0lkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW1vdmVkRWxlbWVudHNJZHMuYWRkKGJsb2NrSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUJsb2NrcyhpZHM6IFNldDxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIGlmICghaWRzLnNpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlbW92ZWRFbGVtZW50SWRzID0gWy4uLmlkcy52YWx1ZXMoKV07XG5cbiAgICAgICAgdGhpcy5kYXRhLnRleHRCbG9ja3MgPSB0aGlzLmRhdGEudGV4dEJsb2Nrcy5maWx0ZXIoKGJsb2NrKSA9PiAhaWRzLmhhcyhibG9jay5pZCB8fCAnJykpO1xuICAgICAgICB0aGlzLmFwaS5ldmVudHMuZW1pdChDT01CSU5FRF9URVhUX0JMT0NLX1JFTU9WRUQsIHJlbW92ZWRFbGVtZW50SWRzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckJsb2NrcyhibG9ja3M6IEN1aUNvbWJpbmVkUGFydEJsb2NrW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFibG9ja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBibG9ja3MuZm9yRWFjaCgoYmxvY2s6IEN1aUNvbWJpbmVkUGFydEJsb2NrKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0RWxlbWVudCA9IHRoaXMuY3JlYXRlQmxvY2soYmxvY2suaWQgfHwgZ2VuZXJhdGVJZCgpLCBibG9jay5kYXRhLnRleHQpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMud3JhcHBlcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMud3JhcHBlci5xdWVyeVNlbGVjdG9yKCcuJyArIENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLndyYXBwZXIuYXBwZW5kKHRleHRFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy53cmFwcGVyLnJlcGxhY2VDaGlsZHJlbih0ZXh0RWxlbWVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hcGkuZXZlbnRzLmVtaXQoQ09NQklORURfVEVYVF9CTE9DS19BRERFRCwge1xuICAgICAgICAgICAgICAgIGJsb2Nrc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQmxvY2soaWQ6IHN0cmluZywgdGV4dDogc3RyaW5nKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCB0ZXh0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5UQUcpO1xuXG4gICAgICAgIHRleHRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ09NQklORURfVEVYVF9CTE9DS19QQVJUKTtcbiAgICAgICAgdGV4dEVsZW1lbnQuaW5uZXJIVE1MID0gdGV4dDtcbiAgICAgICAgdGV4dEVsZW1lbnQuZGF0YXNldFsnaWQnXSA9IGlkO1xuICAgICAgICB0ZXh0RWxlbWVudC5kYXRhc2V0Wydsb2NhbElkJ10gPSBpZDtcblxuICAgICAgICByZXR1cm4gdGV4dEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb252ZXJ0RGVmYXVsdERhdGFUb0N1c3RvbShkYXRhOiB7IHRleHQ6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2NrcyA9IGRhdGEubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgIGJsb2NrLmlkID0gZ2VuZXJhdGVJZCgpO1xuICAgICAgICAgICAgICAgIGJsb2NrLmRhdGEucGFyZW50SWQgPSB0aGlzLmRhdGEuaWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYmxvY2s7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGF0YS50ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGRhdGEudGV4dCk7XG4gICAgICAgIGxldCBlbGVtZW50Q29udGVudCA9ICcnO1xuXG4gICAgICAgIGZyYWdtZW50LmNoaWxkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudENvbnRlbnQgKz0gbm9kZS50ZXh0Q29udGVudDtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZWxlbWVudENvbnRlbnQgKz0gKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmlubmVySFRNTDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcGFydHMgPSBlbGVtZW50Q29udGVudC5sZW5ndGggPCBTUExJVF9NQVhfTEVOR1RIID8gW2VsZW1lbnRDb250ZW50XSA6IHNwbGl0SFRNTChlbGVtZW50Q29udGVudCk7XG5cbiAgICAgICAgcGFydHMuZm9yRWFjaCgocGFydDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9ja09iamVjdCA9IHRoaXMuZ2V0QmxvY2tQYXJ0T2JqZWN0KGdlbmVyYXRlSWQoKSwgcGFydCk7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzLnB1c2goYmxvY2tPYmplY3QpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrSXNFZGl0b3JFbXB0eSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLndyYXBwZXIgfHwgdGhpcy53cmFwcGVyLmNoaWxkcmVuLmxlbmd0aCA+IHRoaXMuTUFYX0NISUxEX0NPVU5UX0ZPUl9FTVBUWSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMud3JhcHBlci5jaGlsZHJlbi5pdGVtKDApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBpc0l0ZW1FbXB0eSA9ICFpdGVtLnRleHRDb250ZW50Py5sZW5ndGg7XG5cbiAgICAgICAgdGhpcy53cmFwcGVyLmRhdGFzZXRbJ2VtcHR5J10gPSBgJHtpc0l0ZW1FbXB0eX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGxhY2Vob2xkZXIoY29uZmlnOiBUb29sQ29uZmlnKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWcucmVhZG9ubHlQbGFjZWhvbGRlciA/PyBERUZBVUxUX1JFQURPTkxZX1BMQUNFSE9MREVSO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZy5wbGFjZWhvbGRlciA/PyBERUZBVUxUX1BMQUNFSE9MREVSO1xuICAgIH1cbn1cbiJdfQ==
440
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZWQtdGV4dC1ibG9jay50b29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9lZGl0b3IvdG9vbHMvY29tYmluZWQtdGV4dC1ibG9jay50b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLGdCQUFnQixFQUNuQixNQUFNLGNBQWMsQ0FBQztBQU90QixPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVuRSxNQUFNLE9BQU8sd0JBQXdCO0lBc0JqQyxZQUFZLE9BQWdCO1FBckJYLFFBQUcsR0FBRyxNQUFNLENBQUM7UUFDYixrQkFBYSxHQUFHLEdBQUcsQ0FBQztRQUNwQiw4QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFDOUIsK0JBQTBCLEdBQUcsbUJBQW1CLENBQUM7UUFFakQsbUJBQWMsR0FBRztZQUM5QixPQUFPLEVBQUUsSUFBSTtZQUNiLFNBQVMsRUFBRSxJQUFJO1lBQ2YsYUFBYSxFQUFFLElBQUk7U0FDdEIsQ0FBQztRQVFlLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTdCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQW1LbEIsd0JBQW1CLEdBQUcsQ0FBQyxJQUFZLEVBQXVCLEVBQUU7WUFDekUsSUFBSSxTQUFTLEdBQStDLElBQUksQ0FBQztZQUVqRSxPQUFPLEdBQUcsRUFBRTtnQkFDUixJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNaLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDNUIsQ0FBQztnQkFFRCxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxl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QWMsQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV0RyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDM0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRWhFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxrQkFBa0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQ2pGLE9BQU87UUFDWCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBZ0IsQ0FBQztRQUMxRCxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO1FBRTlDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsV0FBVyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFrQjtRQUNyQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixPQUFPLE1BQU0sQ0FBQyxtQkFBbUIsSUFBSSw0QkFBNEIsQ0FBQztRQUN0RSxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsV0FBVyxJQUFJLG1CQUFtQixDQUFDO0lBQ3JELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHR5cGUgeyBDdWlOdWxsYWJsZSB9IGZyb20gJ0BjdWJ5LXVpL2Nkayc7XG5pbXBvcnQgdHlwZSB7IEFQSSwgQmxvY2tUb29sLCBCbG9ja1Rvb2xDb25zdHJ1Y3Rvck9wdGlvbnMsIFRvb2xDb25maWcgfSBmcm9tICdAZWRpdG9yanMvZWRpdG9yanMnO1xuXG5pbXBvcnQge1xuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0ssXG4gICAgQ09NQklORURfVEVYVF9CTE9DS19BRERFRCxcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLX05BTUUsXG4gICAgQ09NQklORURfVEVYVF9CTE9DS19QQVJULFxuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0tfUkVNT1ZFRCxcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLX1VQREFURUQsXG4gICAgREVGQVVMVF9QTEFDRUhPTERFUixcbiAgICBERUZBVUxUX1JFQURPTkxZX1BMQUNFSE9MREVSLFxuICAgIFNQTElUX01BWF9MRU5HVEhcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHtcbiAgICBDdWlDb21iaW5lZEJsb2NrVG9vbERhdGEsXG4gICAgQ3VpQ29tYmluZWRQYXJ0QmxvY2ssXG4gICAgQ3VpTXV0YXRpb25BY3Rpb25zLFxuICAgIEN1aU11dGF0aW9uQ2FsbGJhY2tcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZUlkLCBtZXJnZVNtYWxsQ2h1bmtzLCBzcGxpdEhUTUwgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBDdWlDb21iaW5lZFRleHRCbG9ja1Rvb2wgaW1wbGVtZW50cyBCbG9ja1Rvb2wge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgVEFHID0gJ3NwYW4nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgREVCT1VOQ0VfVElNRSA9IDM1MDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IE1BWF9DSElMRF9DT1VOVF9GT1JfRU1QVFkgPSAxO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgUExBQ0VIT0xERVJfQVRUUklCVVRFX05BTUUgPSAncGxhY2Vob2xkZXJBY3RpdmUnO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBtdXRhdGlvbkNvbmZpZyA9IHtcbiAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gICAgfTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwaTogQVBJO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YTogQ3VpQ29tYmluZWRCbG9ja1Rvb2xEYXRhO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgICBwcml2YXRlIHdyYXBwZXI/OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIG9ic2VydmVyPzogTXV0YXRpb25PYnNlcnZlcjtcbiAgICBwcml2YXRlIGxhc3RCbG9ja0VsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZXMgPSBuZXcgTWFwKCk7XG5cbiAgICBwcml2YXRlIHNraXBOZXh0VXBkYXRlRW1pdCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogdW5rbm93bikge1xuICAgICAgICBjb25zdCBib2R5ID0gb3B0aW9ucyBhcyBCbG9ja1Rvb2xDb25zdHJ1Y3Rvck9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBib2R5LmRhdGE7XG5cbiAgICAgICAgdGhpcy5yZWFkT25seSA9IGJvZHkucmVhZE9ubHk7XG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLmdldFBsYWNlaG9sZGVyKGJvZHkuY29uZmlnKTtcbiAgICAgICAgdGhpcy5hcGkgPSBib2R5LmFwaTtcbiAgICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICAgICAgaWQ6IGRhdGEuaWQgfHwgZ2VuZXJhdGVJZCgpLFxuICAgICAgICAgICAgdGV4dEJsb2NrczogZGF0YS50ZXh0QmxvY2tzIHx8IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jb252ZXJ0RGVmYXVsdERhdGFUb0N1c3RvbShkYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCBpc0lubGluZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGlzUmVhZE9ubHlTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGVuYWJsZUxpbmVCcmVha3MoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldCB0b29sYm94KCk6IHsgaWNvbjogc3RyaW5nOyB0aXRsZTogc3RyaW5nIH0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWNvbjogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIyXCIgZD1cIk04IDlWNy4yQzggNy4wODk1NCA4LjA4OTU0IDcgOC4yIDdMMTIgN00xNiA5VjcuMkMxNiA3LjA4OTU0IDE1LjkxMDUgNyAxNS44IDdMMTIgN00xMiA3TDEyIDE3TTEyIDE3SDEwTTEyIDE3SDE0XCI+PC9wYXRoPjwvc3ZnPicsXG4gICAgICAgICAgICB0aXRsZTogJ1RleHQnXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXQgcGFzdGVDb25maWcoKTogb2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRhZ3M6IFsnUCddXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGFzdGUoZXZlbnQ6IEN1c3RvbUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC50eXBlICE9PSAndGFnJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGV4dCA9IGV2ZW50LmRldGFpbC5kYXRhLnRleHRDb250ZW50O1xuICAgICAgICBjb25zdCBsYXN0QmxvY2tJbmRleCA9IHRoaXMuZGF0YS50ZXh0QmxvY2tzLmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IGxhc3RCbG9jayA9IHRoaXMuZGF0YS50ZXh0QmxvY2tzW2xhc3RCbG9ja0luZGV4XTtcbiAgICAgICAgY29uc3QgYmxvY2tJZCA9IGxhc3RCbG9jaz8uaWQgfHwgZ2VuZXJhdGVJZCgpO1xuXG4gICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzLnNwbGljZShsYXN0QmxvY2tJbmRleCwgMSwgdGhpcy5nZXRCbG9ja1BhcnRPYmplY3QoYmxvY2tJZCwgdGV4dCkpO1xuXG4gICAgICAgIHRoaXMuc2tpcE5leHRVcGRhdGVFbWl0ID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUV4aXN0aW5nQmxvY2soYmxvY2tJZCwgdGV4dCwgQm9vbGVhbihsYXN0QmxvY2s/LmlkKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlcigpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHRoaXMud3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLndyYXBwZXIuY2xhc3NMaXN0LmFkZChDT01CSU5FRF9URVhUX0JMT0NLKTtcbiAgICAgICAgdGhpcy53cmFwcGVyLmRhdGFzZXRbdGhpcy5QTEFDRUhPTERFUl9BVFRSSUJVVEVfTkFNRV0gPSB0aGlzLmFwaS5pMThuLnQodGhpcy5wbGFjZWhvbGRlcik7XG5cbiAgICAgICAgaWYgKCF0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICB0aGlzLndyYXBwZXIuY29udGVudEVkaXRhYmxlID0gJ3RydWUnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNFbXB0eUJsb2NrID0gIXRoaXMuZGF0YS50ZXh0QmxvY2tzLmxlbmd0aDtcblxuICAgICAgICBpZiAoaXNFbXB0eUJsb2NrKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2Nrcy5wdXNoKHRoaXMuZ2V0QmxvY2tQYXJ0T2JqZWN0KGdlbmVyYXRlSWQoKSwgJycpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyQmxvY2tzKHRoaXMuZGF0YS50ZXh0QmxvY2tzKTtcbiAgICAgICAgdGhpcy5jaGVja0lzRWRpdG9yRW1wdHkoKTtcblxuICAgICAgICBpZiAoIXRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRNdXRhdGlvbkNhbGxiYWNrKHRoaXMuREVCT1VOQ0VfVElNRSk7XG5cbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLm9uTXV0YXRpb25FdmVudC5iaW5kKHRoaXMsIGNhbGxiYWNrKSk7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcy53cmFwcGVyLCB0aGlzLm11dGF0aW9uQ29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZXI7XG4gICAgfVxuXG4gICAgcHVibGljIG1lcmdlKGJsb2Nrc0RhdGE6IEN1aUNvbWJpbmVkUGFydEJsb2NrW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLndyYXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBibG9ja3NUZXh0Q29udGVudCA9ICcnO1xuICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2NrcyA9IFtdO1xuXG4gICAgICAgIGJsb2Nrc0RhdGEuZm9yRWFjaCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgIGJsb2Nrc1RleHRDb250ZW50ICs9IGJsb2NrLmRhdGEudGV4dDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLndyYXBwZXIuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMud3JhcHBlci5jaGlsZE5vZGVzLml0ZW0oaSk7XG5cbiAgICAgICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MU3BhbkVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLS07XG4gICAgICAgICAgICBibG9ja3NUZXh0Q29udGVudCA9IG5vZGUuaW5uZXJIVE1MICsgYmxvY2tzVGV4dENvbnRlbnQ7XG4gICAgICAgICAgICBub2RlLnJlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFydHMgPSBibG9ja3NUZXh0Q29udGVudC5sZW5ndGggPCBTUExJVF9NQVhfTEVOR1RIID8gW2Jsb2Nrc1RleHRDb250ZW50XSA6IHNwbGl0SFRNTChibG9ja3NUZXh0Q29udGVudCk7XG5cbiAgICAgICAgcGFydHMuZm9yRWFjaCgocGFydDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9ja09iamVjdCA9IHRoaXMuZ2V0QmxvY2tQYXJ0T2JqZWN0KGdlbmVyYXRlSWQoKSwgcGFydCk7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzLnB1c2goYmxvY2tPYmplY3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJlbmRlckJsb2Nrcyh0aGlzLmRhdGEudGV4dEJsb2Nrcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmUoYmxvY2tDb250ZW50OiBIVE1MRWxlbWVudCk6IEN1aUNvbWJpbmVkUGFydEJsb2NrW10ge1xuICAgICAgICBjb25zdCB0ZXh0QmxvY2tzOiBDdWlDb21iaW5lZFBhcnRCbG9ja1tdID0gW107XG5cbiAgICAgICAgYmxvY2tDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5UQUcpLmZvckVhY2goKHNwYW46IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICB0ZXh0QmxvY2tzLnB1c2godGhpcy5nZXRCbG9ja1BhcnRPYmplY3Qoc3Bhbi5kYXRhc2V0Wydsb2NhbElkJ10hLCBzcGFuLmlubmVySFRNTCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGV4dEJsb2NrcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXG4gICAgICAgIGNvbnN0IGJsb2NrSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgICAgdGhpcy5kYXRhLnRleHRCbG9ja3MuZm9yRWFjaCgoYmxvY2s6IEN1aUNvbWJpbmVkUGFydEJsb2NrKSA9PiB7XG4gICAgICAgICAgICBibG9ja0lkcy5hZGQoYmxvY2suaWQgfHwgJycpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJlbW92ZUJsb2NrcyhibG9ja0lkcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk11dGF0aW9uRXZlbnQoY2FsbGJhY2s6IChtdXRhdGlvbkxpc3Q6IE11dGF0aW9uUmVjb3JkW10pID0+IHZvaWQsIG11dGF0aW9uTGlzdDogTXV0YXRpb25SZWNvcmRbXSk6IHZvaWQge1xuICAgICAgICBpZiAobXV0YXRpb25MaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbXV0YXRpb25MaXN0LmZvckVhY2goKG11dGF0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAobXV0YXRpb24ucmVtb3ZlZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5zZXQoZ2VuZXJhdGVJZCgpLCBtdXRhdGlvbik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5zZXQobXV0YXRpb24udGFyZ2V0LCBtdXRhdGlvbik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNhbGxiYWNrKG11dGF0aW9uTGlzdCk7XG4gICAgICAgIHRoaXMuY2hlY2tJc0VkaXRvckVtcHR5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBnZXRNdXRhdGlvbkNhbGxiYWNrID0gKHdhaXQ6IG51bWJlcik6IEN1aU11dGF0aW9uQ2FsbGJhY2sgPT4ge1xuICAgICAgICBsZXQgdGltZW91dElkOiBDdWlOdWxsYWJsZTxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0Pj4gPSBudWxsO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGltZW91dElkKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5oYW5kbGVNdXRhdGlvbnMoKSwgd2FpdCk7XG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIHByaXZhdGUgaGFuZGxlTXV0YXRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdXBkYXRlZEVsZW1lbnRzLCByZW1vdmVkRWxlbWVudHNJZHMgfSA9IHRoaXMuZ2V0TXV0YXRpb25BY3Rpb25zKFsuLi50aGlzLmNoYW5nZXMudmFsdWVzKCldKTtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0dGVkUGFydHMgPSB0aGlzLnRha2VTcGxpdHRlZFBhcnRzUmVzdWx0KHVwZGF0ZWRFbGVtZW50cyk7XG4gICAgICAgICAgICBjb25zdCB7IHNwbGl0dGVkUGFydHNSZXN1bHQsIHVwZGF0ZWRFbGVtZW50c1Jlc3VsdCwgcmVtb3ZlZEVsZW1lbnRzSWRzUmVzdWx0IH0gPSB0aGlzLnRha2VNZXJnZWRSZXN1bHQoXG4gICAgICAgICAgICAgICAgc3BsaXR0ZWRQYXJ0cyxcbiAgICAgICAgICAgICAgICB1cGRhdGVkRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgcmVtb3ZlZEVsZW1lbnRzSWRzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmFkZEJsb2NrcyhzcGxpdHRlZFBhcnRzUmVzdWx0LCB1cGRhdGVkRWxlbWVudHNSZXN1bHQpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVCbG9ja3ModXBkYXRlZEVsZW1lbnRzUmVzdWx0KTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQmxvY2tzKHJlbW92ZWRFbGVtZW50c0lkc1Jlc3VsdCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZXMuY2xlYXIoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmICghdGhpcy53cmFwcGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyPy5vYnNlcnZlKHRoaXMud3JhcHBlciwgdGhpcy5tdXRhdGlvbkNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRha2VNZXJnZWRSZXN1bHQoXG4gICAgICAgIHNwbGl0dGVkUGFydHM6IEhUTUxFbGVtZW50W10sXG4gICAgICAgIHVwZGF0ZWRFbGVtZW50czogU2V0PEhUTUxFbGVtZW50PixcbiAgICAgICAgcmVtb3ZlZEVsZW1lbnRzSWRzOiBTZXQ8c3RyaW5nPlxuICAgICk6IHtcbiAgICAgICAgc3BsaXR0ZWRQYXJ0c1Jlc3VsdDogSFRNTEVsZW1lbnRbXTtcbiAgICAgICAgdXBkYXRlZEVsZW1lbnRzUmVzdWx0OiBTZXQ8SFRNTEVsZW1lbnQ+O1xuICAgICAgICByZW1vdmVkRWxlbWVudHNJZHNSZXN1bHQ6IFNldDxzdHJpbmc+O1xuICAgIH0ge1xuICAgICAgICBjb25zdCB7IHJlbW92ZWRJZHM6IG1lcmdlUmVtb3ZlZElkcywgdXBkYXRlZEVsZW1lbnRzOiBtZXJnZVVwZGF0ZWRFbGVtZW50cyB9ID0gdGhpcy5hcHBseU1lcmdlU21hbGxDaHVua3MoKTtcblxuICAgICAgICBjb25zdCBub3RSZW1vdmVkQnlNZXJnZSA9IChlbDogSFRNTEVsZW1lbnQpID0+ICFtZXJnZVJlbW92ZWRJZHMuaGFzKGVsLmRhdGFzZXRbJ2xvY2FsSWQnXSA/PyAnJyk7XG5cbiAgICAgICAgY29uc3Qgc3BsaXR0ZWRQYXJ0c1Jlc3VsdCA9IHNwbGl0dGVkUGFydHMuZmlsdGVyKG5vdFJlbW92ZWRCeU1lcmdlKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZEVsZW1lbnRzSWRzUmVzdWx0ID0gbmV3IFNldDxzdHJpbmc+KFsuLi5yZW1vdmVkRWxlbWVudHNJZHMsIC4uLm1lcmdlUmVtb3ZlZElkc10pO1xuICAgICAgICBjb25zdCB1cGRhdGVkRWxlbWVudHNSZXN1bHQgPSBuZXcgU2V0PEhUTUxFbGVtZW50PihcbiAgICAgICAgICAgIFsuLi51cGRhdGVkRWxlbWVudHMsIC4uLm1lcmdlVXBkYXRlZEVsZW1lbnRzXS5maWx0ZXIobm90UmVtb3ZlZEJ5TWVyZ2UpXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHsgc3BsaXR0ZWRQYXJ0c1Jlc3VsdCwgdXBkYXRlZEVsZW1lbnRzUmVzdWx0LCByZW1vdmVkRWxlbWVudHNJZHNSZXN1bHQgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRha2VTcGxpdHRlZFBhcnRzUmVzdWx0KHVwZGF0ZWRFbGVtZW50czogU2V0PEhUTUxFbGVtZW50Pik6IEhUTUxFbGVtZW50W10ge1xuICAgICAgICBjb25zdCBzcGxpdHRlZFBhcnRzOiBIVE1MRWxlbWVudFtdID0gW107XG5cbiAgICAgICAgdXBkYXRlZEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50Q29udGVudDogc3RyaW5nID0gZWxlbWVudC5pbm5lckhUTUw7XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50Q29udGVudC5sZW5ndGggPCBTUExJVF9NQVhfTEVOR1RIKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHNwbGl0SFRNTChlbGVtZW50Q29udGVudCk7XG5cbiAgICAgICAgICAgIHBhcnRzLmZvckVhY2goKHBhcnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja0lkID0gZ2VuZXJhdGVJZCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRFbGVtZW50ID0gdGhpcy5jcmVhdGVCbG9jayhibG9ja0lkLCBwYXJ0KTtcblxuICAgICAgICAgICAgICAgIHNwbGl0dGVkUGFydHMucHVzaCh0ZXh0RWxlbWVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBwYXJ0c1swXTtcbiAgICAgICAgICAgIGVsZW1lbnQuYWZ0ZXIoLi4uc3BsaXR0ZWRQYXJ0cyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBzcGxpdHRlZFBhcnRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlNZXJnZVNtYWxsQ2h1bmtzKCk6IHtcbiAgICAgICAgcmVtb3ZlZElkczogU2V0PHN0cmluZz47XG4gICAgICAgIHVwZGF0ZWRFbGVtZW50czogU2V0PEhUTUxFbGVtZW50PjtcbiAgICB9IHtcbiAgICAgICAgY29uc3QgZW1wdHkgPSB7IHJlbW92ZWRJZHM6IG5ldyBTZXQ8c3RyaW5nPigpLCB1cGRhdGVkRWxlbWVudHM6IG5ldyBTZXQ8SFRNTEVsZW1lbnQ+KCkgfTtcblxuICAgICAgICBpZiAoIXRoaXMud3JhcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGVtcHR5O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2h1bmtFbGVtZW50cyA9IEFycmF5LmZyb20odGhpcy53cmFwcGVyLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCcuJyArIENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCkpO1xuICAgICAgICBjb25zdCBjaHVua0VsZW1lbnRzTWFwID0gbmV3IE1hcChjaHVua0VsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4gW2VsZW1lbnQuZGF0YXNldFsnbG9jYWxJZCddISwgZWxlbWVudF0pKTtcbiAgICAgICAgY29uc3QgeyBjaHVua3MsIHJlbW92ZWRJZHMgfSA9IG1lcmdlU21hbGxDaHVua3MoXG4gICAgICAgICAgICBjaHVua0VsZW1lbnRzLm1hcCgoZWxlbWVudCkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogZWxlbWVudC5kYXRhc2V0Wydsb2NhbElkJ10hLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGVsZW1lbnQuaW5uZXJIVE1MXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICByZW1vdmVkSWRzLmZvckVhY2goKGlkKSA9PiBjaHVua0VsZW1lbnRzTWFwLmdldChpZCk/LnJlbW92ZSgpKTtcblxuICAgICAgICBjb25zdCB1cGRhdGVkRWxlbWVudHMgPSBuZXcgU2V0PEhUTUxFbGVtZW50PigpO1xuXG4gICAgICAgIGNodW5rcy5mb3JFYWNoKChjaHVuaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNodW5rRWxlbWVudHNNYXAuZ2V0KGNodW5rLmlkKTtcblxuICAgICAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQuaW5uZXJIVE1MID09PSBjaHVuay5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IGNodW5rLmNvbnRlbnQ7XG4gICAgICAgICAgICB1cGRhdGVkRWxlbWVudHMuYWRkKGVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4geyByZW1vdmVkSWRzOiBuZXcgU2V0KHJlbW92ZWRJZHMpLCB1cGRhdGVkRWxlbWVudHMgfTtcbiAgICB9XG5cbiAgICAvLyBSSVAgMTMuMDEuMjAyNiAtIHByaXZhdGUgZ2V0TmV4dEluZGV4KCk6IG51bWJlclxuXG4gICAgcHJpdmF0ZSBnZXRCbG9ja1BhcnRPYmplY3QoYmxvY2tJZDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiBDdWlDb21iaW5lZFBhcnRCbG9jayB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogYmxvY2tJZCxcbiAgICAgICAgICAgIHR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgIHBhcmVudElkOiB0aGlzLmRhdGEuaWQsXG4gICAgICAgICAgICAgICAgcGFyZW50VHlwZTogQ09NQklORURfVEVYVF9CTE9DS19OQU1FXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNdXRhdGlvbkFjdGlvbnMobXV0YXRpb25MaXN0OiBNdXRhdGlvblJlY29yZFtdKTogQ3VpTXV0YXRpb25BY3Rpb25zIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZEVsZW1lbnRzID0gbmV3IFNldDxIVE1MRWxlbWVudD4oKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZEVsZW1lbnRzSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGNvbnN0IGNoYW5nZWRPdXRzaWRlRWxlbWVudHM6IE5vZGVbXSA9IFtdO1xuXG4gICAgICAgIHRoaXMubGFzdEJsb2NrRWxlbWVudCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBtdXRhdGlvbkxpc3QuZm9yRWFjaCgobXV0YXRpb246IE11dGF0aW9uUmVjb3JkKTogdm9pZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVVwZGF0ZWRCbG9ja3MobXV0YXRpb24sIHVwZGF0ZWRFbGVtZW50cywgY2hhbmdlZE91dHNpZGVFbGVtZW50cyk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlbW92ZWRCbG9ja3MobXV0YXRpb24sIHJlbW92ZWRFbGVtZW50c0lkcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmxhc3RCbG9ja0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RCbG9ja0VsZW1lbnQgPSB0aGlzLmxhc3RCbG9ja0VsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGxhc3RCbG9ja0VsZW1lbnQuYXBwZW5kKC4uLmNoYW5nZWRPdXRzaWRlRWxlbWVudHMpO1xuICAgICAgICAgICAgdXBkYXRlZEVsZW1lbnRzLmFkZChsYXN0QmxvY2tFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRUb0Jsb2Nrc0VuZChsYXN0QmxvY2tFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1cGRhdGVkRWxlbWVudHMsXG4gICAgICAgICAgICByZW1vdmVkRWxlbWVudHNJZHNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENhcmV0VG9CbG9ja3NFbmQoYmxvY2s6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KGJsb2NrLCBibG9jay5jaGlsZE5vZGVzLmxlbmd0aCk7XG4gICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlVXBkYXRlZEJsb2NrcyhcbiAgICAgICAgbXV0YXRpb246IE11dGF0aW9uUmVjb3JkLFxuICAgICAgICB1cGRhdGVkRWxlbWVudHM6IFNldDxIVE1MRWxlbWVudD4sXG4gICAgICAgIG91dHNpZGVDaGFuZ2VzOiBOb2RlW11cbiAgICApOiB2b2lkIHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSBtdXRhdGlvbi50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKG11dGF0aW9uLnRhcmdldC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBtdXRhdGlvbi50YXJnZXQucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwYW4gPSBlbGVtZW50Py5jbG9zZXN0KCcuJyArIENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKHNwYW4pIHtcbiAgICAgICAgICAgIHVwZGF0ZWRFbGVtZW50cy5hZGQoc3Bhbik7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlc091dHNpZGVCbG9jayhlbGVtZW50LCBvdXRzaWRlQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2VzT3V0c2lkZUJsb2NrKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBvdXRzaWRlQ2hhbmdlczogTm9kZVtdKTogdm9pZCB7XG4gICAgICAgIGlmICghZWxlbWVudCB8fCB0aGlzLmxhc3RCbG9ja0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQuY2hpbGROb2Rlcy5mb3JFYWNoKChibG9jaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmxvY2tFbGVtZW50ID0gYmxvY2sgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmIChibG9ja0VsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucyhDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0QmxvY2tFbGVtZW50ID0gYmxvY2tFbGVtZW50O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvdXRzaWRlQ2hhbmdlcy5wdXNoKGJsb2NrKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRCbG9ja3Moc3BsaWNlZFBhcnRzOiBIVE1MRWxlbWVudFtdLCB1cGRhdGVkRWxlbWVudHM6IFNldDxIVE1MRWxlbWVudD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFzcGxpY2VkUGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhZGRlZEJsb2NrczogQ3VpQ29tYmluZWRQYXJ0QmxvY2tbXSA9IHNwbGljZWRQYXJ0cy5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9ja0lkID0gYmxvY2suZGF0YXNldFsnbG9jYWxJZCddO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlkOiBibG9ja0lkLFxuICAgICAgICAgICAgICAgIHR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGJsb2NrLmlubmVySFRNTCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHRoaXMuZGF0YS5pZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50VHlwZTogQ09NQklORURfVEVYVF9CTE9DS19OQU1FXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcHJldmlvdXNFbGVtZW50ID0gdXBkYXRlZEVsZW1lbnRzLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICAgICAgY29uc3QgaWQgPSBwcmV2aW91c0VsZW1lbnQ/LmRhdGFzZXRbJ2xvY2FsSWQnXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBOdW1iZXIocHJldmlvdXNFbGVtZW50Py5kYXRhc2V0WydpbmRleCddKSArIDE7XG4gICAgICAgIGNvbnN0IGJsb2NrSW5kZXggPSB0aGlzLmRhdGEudGV4dEJsb2Nrcy5maW5kSW5kZXgoKGJsb2NrKSA9PiBibG9jay5pZCA9PT0gaWQpO1xuXG4gICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzLnNwbGljZShibG9ja0luZGV4LCAwLCAuLi5hZGRlZEJsb2Nrcyk7XG4gICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfQURERUQsIHtcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgYmxvY2tJbmRleCxcbiAgICAgICAgICAgIGJsb2NrczogYWRkZWRCbG9ja3MsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEudGV4dEJsb2Nrc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUJsb2Nrcyh1cGRhdGVkRWxlbWVudHM6IFNldDxIVE1MRWxlbWVudD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF1cGRhdGVkRWxlbWVudHMuc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2tpcE5leHRVcGRhdGVFbWl0KSB7XG4gICAgICAgICAgICB0aGlzLnNraXBOZXh0VXBkYXRlRW1pdCA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cGRhdGVkQmxvY2tzID0gWy4uLnVwZGF0ZWRFbGVtZW50cy52YWx1ZXMoKV0ubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogYmxvY2suZGF0YXNldFsnbG9jYWxJZCddLFxuICAgICAgICAgICAgICAgIHR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGJsb2NrLmlubmVySFRNTCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHRoaXMuZGF0YS5pZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50VHlwZTogQ09NQklORURfVEVYVF9CTE9DS19OQU1FXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hcGkuZXZlbnRzLmVtaXQoQ09NQklORURfVEVYVF9CTE9DS19VUERBVEVELCB1cGRhdGVkQmxvY2tzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUV4aXN0aW5nQmxvY2soYmxvY2tJZDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcsIGlzQmxvY2tFeGlzdHM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLndyYXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRWxlbWVudCA9IHRoaXMud3JhcHBlci5xdWVyeVNlbGVjdG9yKGBbZGF0YS1sb2NhbC1pZD1cIiR7YmxvY2tJZH1cIl1gKTtcblxuICAgICAgICBpZiAoIWV4aXN0aW5nRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrUGFydE9iamVjdChibG9ja0lkLCB0ZXh0KTtcblxuICAgICAgICBleGlzdGluZ0VsZW1lbnQuaW5uZXJIVE1MID0gdGV4dDtcblxuICAgICAgICBpZiAoaXNCbG9ja0V4aXN0cykge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcGkuZXZlbnRzLmVtaXQoQ09NQklORURfVEVYVF9CTE9DS19VUERBVEVELCBbYmxvY2tdKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfQURERUQsIHtcbiAgICAgICAgICAgICAgICBibG9ja3M6IFtibG9ja11cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVJlbW92ZWRCbG9ja3MobXV0YXRpb246IE11dGF0aW9uUmVjb3JkLCByZW1vdmVkRWxlbWVudHNJZHM6IFNldDxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIGlmIChtdXRhdGlvbi5yZW1vdmVkTm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBtdXRhdGlvbi5yZW1vdmVkTm9kZXMuZm9yRWFjaCgobm9kZTogTm9kZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmxvY2tJZCA9IChub2RlIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0Wydsb2NhbElkJ107XG5cbiAgICAgICAgICAgIGlmICghYmxvY2tJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVtb3ZlZEVsZW1lbnRzSWRzLmFkZChibG9ja0lkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVCbG9ja3MoaWRzOiBTZXQ8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICBpZiAoIWlkcy5zaXplKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZW1vdmVkRWxlbWVudElkcyA9IFsuLi5pZHMudmFsdWVzKCldO1xuXG4gICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzID0gdGhpcy5kYXRhLnRleHRCbG9ja3MuZmlsdGVyKChibG9jaykgPT4gIWlkcy5oYXMoYmxvY2suaWQgfHwgJycpKTtcbiAgICAgICAgdGhpcy5hcGkuZXZlbnRzLmVtaXQoQ09NQklORURfVEVYVF9CTE9DS19SRU1PVkVELCByZW1vdmVkRWxlbWVudElkcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJCbG9ja3MoYmxvY2tzOiBDdWlDb21iaW5lZFBhcnRCbG9ja1tdKTogdm9pZCB7XG4gICAgICAgIGlmICghYmxvY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYmxvY2tzLmZvckVhY2goKGJsb2NrOiBDdWlDb21iaW5lZFBhcnRCbG9jaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGV4dEVsZW1lbnQgPSB0aGlzLmNyZWF0ZUJsb2NrKGJsb2NrLmlkIHx8IGdlbmVyYXRlSWQoKSwgYmxvY2suZGF0YS50ZXh0KTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLndyYXBwZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLndyYXBwZXIucXVlcnlTZWxlY3RvcignLicgKyBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZCh0ZXh0RWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMud3JhcHBlci5yZXBsYWNlQ2hpbGRyZW4odGV4dEVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfQURERUQsIHtcbiAgICAgICAgICAgICAgICBibG9ja3NcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUJsb2NrKGlkOiBzdHJpbmcsIHRleHQ6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdGV4dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuVEFHKTtcblxuICAgICAgICB0ZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCk7XG4gICAgICAgIHRleHRFbGVtZW50LmlubmVySFRNTCA9IHRleHQ7XG4gICAgICAgIHRleHRFbGVtZW50LmRhdGFzZXRbJ2lkJ10gPSBpZDtcbiAgICAgICAgdGV4dEVsZW1lbnQuZGF0YXNldFsnbG9jYWxJZCddID0gaWQ7XG5cbiAgICAgICAgcmV0dXJuIHRleHRFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydERlZmF1bHREYXRhVG9DdXN0b20oZGF0YTogeyB0ZXh0OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnRleHRCbG9ja3MgPSBkYXRhLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICBibG9jay5pZCA9IGdlbmVyYXRlSWQoKTtcbiAgICAgICAgICAgICAgICBibG9jay5kYXRhLnBhcmVudElkID0gdGhpcy5kYXRhLmlkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRhdGEudGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChkYXRhLnRleHQpO1xuICAgICAgICBsZXQgZWxlbWVudENvbnRlbnQgPSAnJztcblxuICAgICAgICBmcmFnbWVudC5jaGlsZE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRDb250ZW50ICs9IG5vZGUudGV4dENvbnRlbnQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsZW1lbnRDb250ZW50ICs9IChub2RlIGFzIEhUTUxFbGVtZW50KS5pbm5lckhUTUw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHBhcnRzID0gZWxlbWVudENvbnRlbnQubGVuZ3RoIDwgU1BMSVRfTUFYX0xFTkdUSCA/IFtlbGVtZW50Q29udGVudF0gOiBzcGxpdEhUTUwoZWxlbWVudENvbnRlbnQpO1xuXG4gICAgICAgIHBhcnRzLmZvckVhY2goKHBhcnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmxvY2tPYmplY3QgPSB0aGlzLmdldEJsb2NrUGFydE9iamVjdChnZW5lcmF0ZUlkKCksIHBhcnQpO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2Nrcy5wdXNoKGJsb2NrT2JqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0lzRWRpdG9yRW1wdHkoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy53cmFwcGVyIHx8IHRoaXMud3JhcHBlci5jaGlsZHJlbi5sZW5ndGggPiB0aGlzLk1BWF9DSElMRF9DT1VOVF9GT1JfRU1QVFkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLndyYXBwZXIuY2hpbGRyZW4uaXRlbSgwKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgaXNJdGVtRW1wdHkgPSAhaXRlbS50ZXh0Q29udGVudD8ubGVuZ3RoO1xuXG4gICAgICAgIHRoaXMud3JhcHBlci5kYXRhc2V0WydlbXB0eSddID0gYCR7aXNJdGVtRW1wdHl9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBsYWNlaG9sZGVyKGNvbmZpZzogVG9vbENvbmZpZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLnJlYWRvbmx5UGxhY2Vob2xkZXIgPz8gREVGQVVMVF9SRUFET05MWV9QTEFDRUhPTERFUjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWcucGxhY2Vob2xkZXIgPz8gREVGQVVMVF9QTEFDRUhPTERFUjtcbiAgICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9wcm92aWRlcnMvZXJyb3ItaGFuZGxlci5vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHR5cGUgeyBDdWlFcnJvck5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Vycm9yLW5vdGlmaWNhdGlvbi1zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBDdWlFcnJvckhhbmRsZXJQcm92aWRlckNvbmZpZyB7XG4gICAgcmVhZG9ubHkgZXJyb3JOb3RpZmljYXRpb25TZXJ2aWNlPzogVHlwZTxDdWlFcnJvck5vdGlmaWNhdGlvblNlcnZpY2U+O1xuICAgIHJlYWRvbmx5IHRyYW5zbGF0aW9uUHJlZml4Pzogc3RyaW5nO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9wcm92aWRlcnMvZXJyb3ItaGFuZGxlci5vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHR5cGUgeyBDdWlFcnJvck5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Vycm9yLW5vdGlmaWNhdGlvbi1zZXJ2aWNlJztcbmltcG9ydCB0eXBlIHsgU2hvdWxkSGFuZGxlRXJyb3JQcmVkaWNhdGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VpRXJyb3JIYW5kbGVyUHJvdmlkZXJDb25maWcge1xuICAgIHJlYWRvbmx5IGVycm9yTm90aWZpY2F0aW9uU2VydmljZT86IFR5cGU8Q3VpRXJyb3JOb3RpZmljYXRpb25TZXJ2aWNlPjtcbiAgICByZWFkb25seSB0cmFuc2xhdGlvblByZWZpeD86IHN0cmluZztcbiAgICByZWFkb25seSBzaG91bGRIYW5kbGVFcnJvcj86IFNob3VsZEhhbmRsZUVycm9yUHJlZGljYXRlO1xufVxuIl19
@@ -1,7 +1,7 @@
1
1
  import { ErrorHandler } from '@angular/core';
2
2
  import { CuiGlobalErrorHandler } from '../services/global-handler-error.service';
3
- import { CUI_ERROR_NOTIFICATION_SERVICE, CUI_ERROR_TRANSLATION_PREFIX } from '../tokens';
4
- export function provideCuiErrorHandler({ errorNotificationService, translationPrefix = 'BACKEND.' } = {}) {
3
+ import { CUI_ERROR_NOTIFICATION_SERVICE, CUI_ERROR_TRANSLATION_PREFIX, CUI_SHOULD_HANDLE_ERROR } from '../tokens';
4
+ export function provideCuiErrorHandler({ errorNotificationService, shouldHandleError, translationPrefix = 'BACKEND.' } = {}) {
5
5
  const providers = [
6
6
  {
7
7
  provide: ErrorHandler,
@@ -18,6 +18,12 @@ export function provideCuiErrorHandler({ errorNotificationService, translationPr
18
18
  useClass: errorNotificationService
19
19
  });
20
20
  }
21
+ if (shouldHandleError) {
22
+ providers.push({
23
+ provide: CUI_SHOULD_HANDLE_ERROR,
24
+ useValue: shouldHandleError
25
+ });
26
+ }
21
27
  return providers;
22
28
  }
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvcHJvdmlkZXJzL2Vycm9yLWhhbmRsZXIucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLDRCQUE0QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBR3pGLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxFQUNuQyx3QkFBd0IsRUFDeEIsaUJBQWlCLEdBQUcsVUFBVSxLQUNDLEVBQUU7SUFDakMsTUFBTSxTQUFTLEdBQWU7UUFDMUI7WUFDSSxPQUFPLEVBQUUsWUFBWTtZQUNyQixRQUFRLEVBQUUscUJBQXFCO1NBQ2xDO1FBQ0Q7WUFDSSxPQUFPLEVBQUUsNEJBQTRCO1lBQ3JDLFFBQVEsRUFBRSxpQkFBaUI7U0FDOUI7S0FDSixDQUFDO0lBRUYsSUFBSSx3QkFBd0IsRUFBRSxDQUFDO1FBQzNCLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDWCxPQUFPLEVBQUUsOEJBQThCO1lBQ3ZDLFFBQVEsRUFBRSx3QkFBd0I7U0FDckMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFcnJvckhhbmRsZXIsIHR5cGUgUHJvdmlkZXIsIHR5cGUgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDdWlHbG9iYWxFcnJvckhhbmRsZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy9nbG9iYWwtaGFuZGxlci1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IENVSV9FUlJPUl9OT1RJRklDQVRJT05fU0VSVklDRSwgQ1VJX0VSUk9SX1RSQU5TTEFUSU9OX1BSRUZJWCB9IGZyb20gJy4uL3Rva2Vucyc7XG5pbXBvcnQgdHlwZSB7IEN1aUVycm9ySGFuZGxlclByb3ZpZGVyQ29uZmlnIH0gZnJvbSAnLi9lcnJvci1oYW5kbGVyLm9wdGlvbnMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUN1aUVycm9ySGFuZGxlcih7XG4gICAgZXJyb3JOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHRyYW5zbGF0aW9uUHJlZml4ID0gJ0JBQ0tFTkQuJ1xufTogQ3VpRXJyb3JIYW5kbGVyUHJvdmlkZXJDb25maWcgPSB7fSk6IFByb3ZpZGVyW10ge1xuICAgIGNvbnN0IHByb3ZpZGVyczogUHJvdmlkZXJbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRXJyb3JIYW5kbGVyLFxuICAgICAgICAgICAgdXNlQ2xhc3M6IEN1aUdsb2JhbEVycm9ySGFuZGxlclxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBDVUlfRVJST1JfVFJBTlNMQVRJT05fUFJFRklYLFxuICAgICAgICAgICAgdXNlVmFsdWU6IHRyYW5zbGF0aW9uUHJlZml4XG4gICAgICAgIH1cbiAgICBdO1xuXG4gICAgaWYgKGVycm9yTm90aWZpY2F0aW9uU2VydmljZSkge1xuICAgICAgICBwcm92aWRlcnMucHVzaCh7XG4gICAgICAgICAgICBwcm92aWRlOiBDVUlfRVJST1JfTk9USUZJQ0FUSU9OX1NFUlZJQ0UsXG4gICAgICAgICAgICB1c2VDbGFzczogZXJyb3JOb3RpZmljYXRpb25TZXJ2aWNlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm92aWRlcnM7XG59XG4iXX0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvcHJvdmlkZXJzL2Vycm9yLWhhbmRsZXIucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFNUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLDRCQUE0QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBR2xILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxFQUNuQyx3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixHQUFHLFVBQVUsS0FDQyxFQUFFO0lBQ2pDLE1BQU0sU0FBUyxHQUFlO1FBQzFCO1lBQ0ksT0FBTyxFQUFFLFlBQVk7WUFDckIsUUFBUSxFQUFFLHFCQUFxQjtTQUNsQztRQUNEO1lBQ0ksT0FBTyxFQUFFLDRCQUE0QjtZQUNyQyxRQUFRLEVBQUUsaUJBQWlCO1NBQzlCO0tBQ0osQ0FBQztJQUVGLElBQUksd0JBQXdCLEVBQUUsQ0FBQztRQUMzQixTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ1gsT0FBTyxFQUFFLDhCQUE4QjtZQUN2QyxRQUFRLEVBQUUsd0JBQXdCO1NBQ3JDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDcEIsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNYLE9BQU8sRUFBRSx1QkFBdUI7WUFDaEMsUUFBUSxFQUFFLGlCQUFpQjtTQUM5QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVycm9ySGFuZGxlciwgdHlwZSBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDdWlHbG9iYWxFcnJvckhhbmRsZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy9nbG9iYWwtaGFuZGxlci1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IENVSV9FUlJPUl9OT1RJRklDQVRJT05fU0VSVklDRSwgQ1VJX0VSUk9SX1RSQU5TTEFUSU9OX1BSRUZJWCwgQ1VJX1NIT1VMRF9IQU5ETEVfRVJST1IgfSBmcm9tICcuLi90b2tlbnMnO1xuaW1wb3J0IHR5cGUgeyBDdWlFcnJvckhhbmRsZXJQcm92aWRlckNvbmZpZyB9IGZyb20gJy4vZXJyb3ItaGFuZGxlci5vcHRpb25zJztcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVDdWlFcnJvckhhbmRsZXIoe1xuICAgIGVycm9yTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBzaG91bGRIYW5kbGVFcnJvcixcbiAgICB0cmFuc2xhdGlvblByZWZpeCA9ICdCQUNLRU5ELidcbn06IEN1aUVycm9ySGFuZGxlclByb3ZpZGVyQ29uZmlnID0ge30pOiBQcm92aWRlcltdIHtcbiAgICBjb25zdCBwcm92aWRlcnM6IFByb3ZpZGVyW10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEVycm9ySGFuZGxlcixcbiAgICAgICAgICAgIHVzZUNsYXNzOiBDdWlHbG9iYWxFcnJvckhhbmRsZXJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogQ1VJX0VSUk9SX1RSQU5TTEFUSU9OX1BSRUZJWCxcbiAgICAgICAgICAgIHVzZVZhbHVlOiB0cmFuc2xhdGlvblByZWZpeFxuICAgICAgICB9XG4gICAgXTtcblxuICAgIGlmIChlcnJvck5vdGlmaWNhdGlvblNlcnZpY2UpIHtcbiAgICAgICAgcHJvdmlkZXJzLnB1c2goe1xuICAgICAgICAgICAgcHJvdmlkZTogQ1VJX0VSUk9SX05PVElGSUNBVElPTl9TRVJWSUNFLFxuICAgICAgICAgICAgdXNlQ2xhc3M6IGVycm9yTm90aWZpY2F0aW9uU2VydmljZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkSGFuZGxlRXJyb3IpIHtcbiAgICAgICAgcHJvdmlkZXJzLnB1c2goe1xuICAgICAgICAgICAgcHJvdmlkZTogQ1VJX1NIT1VMRF9IQU5ETEVfRVJST1IsXG4gICAgICAgICAgICB1c2VWYWx1ZTogc2hvdWxkSGFuZGxlRXJyb3JcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3ZpZGVycztcbn1cbiJdfQ==
@@ -1,13 +1,18 @@
1
1
  import { inject, Injectable } from '@angular/core';
2
2
  import { CuiErrorResolverFactory } from './error-resolver-factory.service';
3
- import { CUI_ERROR_NOTIFICATION_SERVICE } from '../tokens';
3
+ import { CUI_ERROR_NOTIFICATION_SERVICE, CUI_SHOULD_HANDLE_ERROR } from '../tokens';
4
4
  import * as i0 from "@angular/core";
5
5
  export class CuiGlobalErrorHandler {
6
6
  constructor() {
7
7
  this.errorNotificationService = inject(CUI_ERROR_NOTIFICATION_SERVICE);
8
8
  this.cuiErrorResolverFactory = inject(CuiErrorResolverFactory);
9
+ this.shouldHandleError = inject(CUI_SHOULD_HANDLE_ERROR, { optional: true });
9
10
  }
10
11
  handleError(error) {
12
+ if (this.shouldHandleError && !this.shouldHandleError(error)) {
13
+ console.error(error);
14
+ return;
15
+ }
11
16
  console.error(error);
12
17
  this.errorNotificationService.showError(this.getErrorMessage(error));
13
18
  }
@@ -23,4 +28,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
23
28
  providedIn: 'root'
24
29
  }]
25
30
  }] });
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWhhbmRsZXItZXJyb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc2VydmljZXMvZ2xvYmFsLWhhbmRsZXItZXJyb3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBSzNELE1BQU0sT0FBTyxxQkFBcUI7SUFIbEM7UUFJcUIsNkJBQXdCLEdBQUcsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDbEUsNEJBQXVCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7S0FXOUU7SUFUVSxXQUFXLENBQUMsS0FBYztRQUM3QixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXJCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBYztRQUNsQyxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEYsQ0FBQzsrR0FaUSxxQkFBcUI7bUhBQXJCLHFCQUFxQixjQUZsQixNQUFNOzs0RkFFVCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFcnJvckhhbmRsZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ3VpRXJyb3JSZXNvbHZlckZhY3RvcnkgfSBmcm9tICcuL2Vycm9yLXJlc29sdmVyLWZhY3Rvcnkuc2VydmljZSc7XG5pbXBvcnQgeyBDVUlfRVJST1JfTk9USUZJQ0FUSU9OX1NFUlZJQ0UgfSBmcm9tICcuLi90b2tlbnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEN1aUdsb2JhbEVycm9ySGFuZGxlciBpbXBsZW1lbnRzIEVycm9ySGFuZGxlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlcnJvck5vdGlmaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoQ1VJX0VSUk9SX05PVElGSUNBVElPTl9TRVJWSUNFKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGN1aUVycm9yUmVzb2x2ZXJGYWN0b3J5ID0gaW5qZWN0KEN1aUVycm9yUmVzb2x2ZXJGYWN0b3J5KTtcblxuICAgIHB1YmxpYyBoYW5kbGVFcnJvcihlcnJvcjogdW5rbm93bik6IHZvaWQge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcblxuICAgICAgICB0aGlzLmVycm9yTm90aWZpY2F0aW9uU2VydmljZS5zaG93RXJyb3IodGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVycm9yTWVzc2FnZShlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1aUVycm9yUmVzb2x2ZXJGYWN0b3J5LmdldEVycm9yU3RyYXRlZ3koZXJyb3IpLmdldE1lc3NhZ2UoZXJyb3IpO1xuICAgIH1cbn1cbiJdfQ==
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWhhbmRsZXItZXJyb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc2VydmljZXMvZ2xvYmFsLWhhbmRsZXItZXJyb3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBS3BGLE1BQU0sT0FBTyxxQkFBcUI7SUFIbEM7UUFJcUIsNkJBQXdCLEdBQUcsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDbEUsNEJBQXVCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDMUQsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7S0FpQjVGO0lBZlUsV0FBVyxDQUFDLEtBQWM7UUFDN0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXJCLE9BQU87UUFDWCxDQUFDO1FBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVyQixJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQWM7UUFDbEMsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xGLENBQUM7K0dBbkJRLHFCQUFxQjttSEFBckIscUJBQXFCLGNBRmxCLE1BQU07OzRGQUVULHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVycm9ySGFuZGxlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDdWlFcnJvclJlc29sdmVyRmFjdG9yeSB9IGZyb20gJy4vZXJyb3ItcmVzb2x2ZXItZmFjdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IENVSV9FUlJPUl9OT1RJRklDQVRJT05fU0VSVklDRSwgQ1VJX1NIT1VMRF9IQU5ETEVfRVJST1IgfSBmcm9tICcuLi90b2tlbnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEN1aUdsb2JhbEVycm9ySGFuZGxlciBpbXBsZW1lbnRzIEVycm9ySGFuZGxlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlcnJvck5vdGlmaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoQ1VJX0VSUk9SX05PVElGSUNBVElPTl9TRVJWSUNFKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGN1aUVycm9yUmVzb2x2ZXJGYWN0b3J5ID0gaW5qZWN0KEN1aUVycm9yUmVzb2x2ZXJGYWN0b3J5KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNob3VsZEhhbmRsZUVycm9yID0gaW5qZWN0KENVSV9TSE9VTERfSEFORExFX0VSUk9SLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgcHVibGljIGhhbmRsZUVycm9yKGVycm9yOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZEhhbmRsZUVycm9yICYmICF0aGlzLnNob3VsZEhhbmRsZUVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuXG4gICAgICAgIHRoaXMuZXJyb3JOb3RpZmljYXRpb25TZXJ2aWNlLnNob3dFcnJvcih0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXJyb3JNZXNzYWdlKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VpRXJyb3JSZXNvbHZlckZhY3RvcnkuZ2V0RXJyb3JTdHJhdGVneShlcnJvcikuZ2V0TWVzc2FnZShlcnJvcik7XG4gICAgfVxufVxuIl19
@@ -3,4 +3,5 @@ export * from './reduced-motion';
3
3
  export * from './viewport';
4
4
  export * from './error-notification-service';
5
5
  export * from './error-translation-prefix';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Rva2Vucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hbmltYXRpb25zLXNwZWVkJztcbmV4cG9ydCAqIGZyb20gJy4vcmVkdWNlZC1tb3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi92aWV3cG9ydCc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9yLW5vdGlmaWNhdGlvbi1zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3ItdHJhbnNsYXRpb24tcHJlZml4JztcbiJdfQ==
6
+ export * from './should-handle-error';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3Rva2Vucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FuaW1hdGlvbnMtc3BlZWQnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWR1Y2VkLW1vdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3ZpZXdwb3J0JztcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3Itbm90aWZpY2F0aW9uLXNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9lcnJvci10cmFuc2xhdGlvbi1wcmVmaXgnO1xuZXhwb3J0ICogZnJvbSAnLi9zaG91bGQtaGFuZGxlLWVycm9yJztcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const CUI_SHOULD_HANDLE_ERROR = new InjectionToken('CUI_SHOULD_HANDLE_ERROR');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdWxkLWhhbmRsZS1lcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvdG9rZW5zL3Nob3VsZC1oYW5kbGUtZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGNBQWMsQ0FDckQseUJBQXlCLENBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgdHlwZSB7IFNob3VsZEhhbmRsZUVycm9yUHJlZGljYXRlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgQ1VJX1NIT1VMRF9IQU5ETEVfRVJST1IgPSBuZXcgSW5qZWN0aW9uVG9rZW48U2hvdWxkSGFuZGxlRXJyb3JQcmVkaWNhdGU+KFxuICAgICdDVUlfU0hPVUxEX0hBTkRMRV9FUlJPUidcbik7XG4iXX0=
@@ -8,4 +8,5 @@ export * from './shape';
8
8
  export * from './size';
9
9
  export * from './status';
10
10
  export * from './button-theme';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3R5cGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FwcGVhcmFuY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9oaW50LXR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9wb2ludCc7XG5leHBvcnQgKiBmcm9tICcuL3BvcnRhbC1pdGVtJztcbmV4cG9ydCAqIGZyb20gJy4vcG9zaXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9yZXNpemluZyc7XG5leHBvcnQgKiBmcm9tICcuL3NoYXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc2l6ZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0YXR1cyc7XG5leHBvcnQgKiBmcm9tICcuL2J1dHRvbi10aGVtZSc7XG4iXX0=
11
+ export * from './should-handle-error.type';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3R5cGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyw0QkFBNEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXBwZWFyYW5jZSc7XG5leHBvcnQgKiBmcm9tICcuL2hpbnQtdHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3BvaW50JztcbmV4cG9ydCAqIGZyb20gJy4vcG9ydGFsLWl0ZW0nO1xuZXhwb3J0ICogZnJvbSAnLi9wb3NpdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3Jlc2l6aW5nJztcbmV4cG9ydCAqIGZyb20gJy4vc2hhcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zaXplJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdHVzJztcbmV4cG9ydCAqIGZyb20gJy4vYnV0dG9uLXRoZW1lJztcbmV4cG9ydCAqIGZyb20gJy4vc2hvdWxkLWhhbmRsZS1lcnJvci50eXBlJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdWxkLWhhbmRsZS1lcnJvci50eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS90eXBlcy9zaG91bGQtaGFuZGxlLWVycm9yLnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFNob3VsZEhhbmRsZUVycm9yUHJlZGljYXRlID0gKGVycm9yOiB1bmtub3duKSA9PiBib29sZWFuO1xuIl19
@@ -1350,6 +1350,8 @@ const CUI_ERROR_TRANSLATION_PREFIX = new InjectionToken('CUI_ERROR_TRANSLATION_P
1350
1350
  factory: () => 'BACKEND.'
1351
1351
  });
1352
1352
 
1353
+ const CUI_SHOULD_HANDLE_ERROR = new InjectionToken('CUI_SHOULD_HANDLE_ERROR');
1354
+
1353
1355
  class CuiErrorResolverFactory {
1354
1356
  constructor() {
1355
1357
  this.nullErrorStrategy = inject(NullErrorStrategy);
@@ -1424,8 +1426,13 @@ class CuiGlobalErrorHandler {
1424
1426
  constructor() {
1425
1427
  this.errorNotificationService = inject(CUI_ERROR_NOTIFICATION_SERVICE);
1426
1428
  this.cuiErrorResolverFactory = inject(CuiErrorResolverFactory);
1429
+ this.shouldHandleError = inject(CUI_SHOULD_HANDLE_ERROR, { optional: true });
1427
1430
  }
1428
1431
  handleError(error) {
1432
+ if (this.shouldHandleError && !this.shouldHandleError(error)) {
1433
+ console.error(error);
1434
+ return;
1435
+ }
1429
1436
  console.error(error);
1430
1437
  this.errorNotificationService.showError(this.getErrorMessage(error));
1431
1438
  }
@@ -6060,7 +6067,7 @@ async function initAuth(authConfig) {
6060
6067
  return await authService.initAuth(authConfig);
6061
6068
  }
6062
6069
 
6063
- function provideCuiErrorHandler({ errorNotificationService, translationPrefix = 'BACKEND.' } = {}) {
6070
+ function provideCuiErrorHandler({ errorNotificationService, shouldHandleError, translationPrefix = 'BACKEND.' } = {}) {
6064
6071
  const providers = [
6065
6072
  {
6066
6073
  provide: ErrorHandler,
@@ -6077,6 +6084,12 @@ function provideCuiErrorHandler({ errorNotificationService, translationPrefix =
6077
6084
  useClass: errorNotificationService
6078
6085
  });
6079
6086
  }
6087
+ if (shouldHandleError) {
6088
+ providers.push({
6089
+ provide: CUI_SHOULD_HANDLE_ERROR,
6090
+ useValue: shouldHandleError
6091
+ });
6092
+ }
6080
6093
  return providers;
6081
6094
  }
6082
6095
 
@@ -6898,7 +6911,7 @@ class CuiCombinedTextBlockTool {
6898
6911
  const blockId = lastBlock?.id || generateId();
6899
6912
  this.data.textBlocks.splice(lastBlockIndex, 1, this.getBlockPartObject(blockId, text));
6900
6913
  this.skipNextUpdateEmit = true;
6901
- this.updateExistingBlock(blockId, text);
6914
+ this.updateExistingBlock(blockId, text, Boolean(lastBlock?.id));
6902
6915
  }
6903
6916
  render() {
6904
6917
  this.wrapper = document.createElement('div');
@@ -7157,7 +7170,7 @@ class CuiCombinedTextBlockTool {
7157
7170
  });
7158
7171
  this.api.events.emit(COMBINED_TEXT_BLOCK_UPDATED, updatedBlocks);
7159
7172
  }
7160
- updateExistingBlock(blockId, text) {
7173
+ updateExistingBlock(blockId, text, isBlockExists) {
7161
7174
  if (!this.wrapper) {
7162
7175
  return;
7163
7176
  }
@@ -7167,6 +7180,12 @@ class CuiCombinedTextBlockTool {
7167
7180
  }
7168
7181
  const block = this.getBlockPartObject(blockId, text);
7169
7182
  existingElement.innerHTML = text;
7183
+ if (isBlockExists) {
7184
+ setTimeout(() => {
7185
+ this.api.events.emit(COMBINED_TEXT_BLOCK_UPDATED, [block]);
7186
+ });
7187
+ return;
7188
+ }
7170
7189
  setTimeout(() => {
7171
7190
  this.api.events.emit(COMBINED_TEXT_BLOCK_ADDED, {
7172
7191
  blocks: [block]