stream-chat-angular 4.55.1 → 4.56.0-perf-message-list.1

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.
@@ -1,2 +1,2 @@
1
- export const version = '4.55.1';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2Fzc2V0cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmVyc2lvbiA9ICc0LjU1LjEnO1xuIl19
1
+ export const version = '4.56.0-perf-message-list.1';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2Fzc2V0cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyw0QkFBNEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCB2ZXJzaW9uID0gJzQuNTYuMC1wZXJmLW1lc3NhZ2UtbGlzdC4xJztcbiJdfQ==
@@ -133,7 +133,7 @@ export class AttachmentConfigurationService {
133
133
  else {
134
134
  sizeRestriction = undefined;
135
135
  if (displayWarning) {
136
- console.warn(`Invalid value set for height/max-height and/or max-width for HTML element, this can cause scrolling issues inside the message list, more info https://getstream.io/chat/docs/sdk/angular/components/AttachmentListComponent/#image-and-video-sizing`);
136
+ console.warn(`Invalid value set for height/max-height and/or max-width for HTML element, this can cause scrolling issues inside the message list, more info https://getstream.io/chat/docs/sdk/angular/components/AttachmentListComponent/#image-and-video-sizing, attachment URL: ${url.toString()}`);
137
137
  }
138
138
  }
139
139
  return sizeRestriction;
@@ -163,4 +163,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
163
163
  providedIn: 'root',
164
164
  }]
165
165
  }] });
166
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1jb25maWd1cmF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvYXR0YWNobWVudC1jb25maWd1cmF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFTM0M7O0dBRUc7QUFJSCxNQUFNLE9BQU8sOEJBQThCO0lBSDNDO1FBaUNFOztXQUVHO1FBQ0gsaUNBQTRCLEdBQUcsSUFBSSxDQUFDO0tBZ09yQztJQTlOQzs7Ozs7T0FLRztJQUNILCtCQUErQixDQUM3QixVQUF5QixFQUN6QixRQUEyQyxFQUMzQyxPQUFvQjtRQUVwQixJQUFJLElBQUksQ0FBQyx5Q0FBeUMsRUFBRTtZQUNsRCxPQUFPLElBQUksQ0FBQyx5Q0FBeUMsQ0FDbkQsVUFBVSxFQUNWLFFBQVEsRUFDUixPQUFPLENBQ1IsQ0FBQztTQUNIO1FBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQ2pCLENBQUMsVUFBVSxDQUFDLE9BQU87WUFDakIsVUFBVSxDQUFDLFNBQVM7WUFDcEIsVUFBVSxDQUFDLFNBQVM7WUFDcEIsRUFBRSxDQUFXLENBQ2hCLENBQUM7UUFDRixNQUFNLGNBQWMsR0FDbEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDZCxNQUFNLGFBQWEsR0FDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNwQyxDQUFDLENB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RUFBRSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FDakU7WUFDRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FDZixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FDakU7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLHFCQUFxQixDQUFDLFdBQXdCO1FBQ3BELE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1DQUFtQyxDQUNyRCxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FDOUMsQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQ0FBbUMsQ0FDeEQsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQ2xELENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUNBQW1DLENBQ3ZELGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUNqRCxDQUFDO1FBRUYsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVPLG1DQUFtQyxDQUFDLFFBQWdCO1FBQzFELE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ3pELENBQUM7OzJIQWhRVSw4QkFBOEI7K0hBQTlCLDhCQUE4QixjQUY3QixNQUFNOzJGQUVQLDhCQUE4QjtrQkFIMUMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdHRhY2htZW50IH0gZnJvbSAnc3RyZWFtLWNoYXQnO1xuaW1wb3J0IHtcbiAgQXR0YWNobWVudENvbmZpZ3JhdGlvbixcbiAgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyxcbiAgSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbixcbiAgVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbixcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogVGhlIGBBdHRhY2htZW50Q29uZmlndXJhdGlvblNlcnZpY2VgIHByb3ZpZGVzIGN1c3RvbWl6YXRpb24gZm9yIGNlcnRhaW4gYXR0cmlidXRlcyBvZiBhdHRhY2htZW50cyBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBtZXNzYWdlIGNvbXBvbmVudC4gSWYgeW91J3JlIHVzaW5nIHlvdXIgb3duIENETiwgeW91IGNhbiBpbnRlZ3JhdGUgcmVzaXppbmcgZmVhdHVyZXMgb2YgaXQgYnkgcHJvdmlkaW5nIHlvdXIgb3duIGhhbmRsZXJzLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlPFxuICBUIGV4dGVuZHMgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyA9IERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3Ncbj4ge1xuICAvKipcbiAgICogQSBjdXN0b20gaGFuZGxlciBjYW4gYmUgcHJvdmlkZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaW1hZ2UgYXR0YWNobWVudCAoaW1hZ2VzIHVwbG9hZGVkIGZyb20gZmlsZXMpIGNvbmZpZ3VyYXRpb24uIEJ5IGRlZmF1bHQgdGhlIFNESyB1c2VzIGZpeGVkIGltYWdlIGhlaWdodCAoYSBzaXplIHRoYXQncyBrbm93biBiZWZvcmUgaW1hZ2UgaXMgbG9hZGVkKSwgaWYgeW91IG92ZXJyaWRlIHRoYXQgd2l0aCBkeW5hbWljIGltYWdlIGhlaWdodCAoZm9yIGV4YW1wbGU6IGhlaWdodDogMTAwJSkgdGhlIHNjcm9sbGluZyBsb2dpYyBpbnNpZGUgdGhlIG1lc3NhZ2UgbGlzdCBjYW4gYnJlYWsuXG4gICAqL1xuICBjdXN0b21JbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcj86IChcbiAgICBhOiBBdHRhY2htZW50PFQ+LFxuICAgIHR5cGU6ICdnYWxsZXJ5JyB8ICdzaW5nbGUnIHwgJ2Nhcm91c2VsJyxcbiAgICBjb250YWluZXJFbGVtZW50OiBIVE1MRWxlbWVudFxuICApID0+IEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb247XG4gIC8qKlxuICAgKiBBIGN1c3RvbSBoYW5kbGVyIGNhbiBiZSBwcm92aWRlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCB2aWRlbyBhdHRhY2htZW50ICh2aWRlb3MgdXBsb2FkZWQgZnJvbSBmaWxlcykgY29uZmlndXJhdGlvbi4gQnkgZGVmYXVsdCB0aGUgU0RLIHVzZXMgZml4ZWQgaGVpZ2h0IChhIHNpemUgdGhhdCdzIGtub3duIGJlZm9yZSB2aWRlbyBpcyBsb2FkZWQpLCBpZiB5b3Ugb3ZlcnJpZGUgdGhhdCB3aXRoIGR5bmFtaWMgaGVpZ2h0IChmb3IgZXhhbXBsZTogaGVpZ2h0OiAxMDAlKSB0aGUgc2Nyb2xsaW5nIGxvZ2ljIGluc2lkZSB0aGUgbWVzc2FnZSBsaXN0IGNhbiBicmVhay5cbiAgICovXG4gIGN1c3RvbVZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyPzogKFxuICAgIGE6IEF0dGFjaG1lbnQ8VD4sXG4gICAgY29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnRcbiAgKSA9PiBWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uO1xuICAvKipcbiAgICogQSBjdXN0b20gaGFuZGxlciBjYW4gYmUgcHJvdmlkZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZ2lwaHkgYXR0YWNobWVudCAoR0lGcyBzZW50IHdpdGggdGhlIC9naXBoeSBjb21tYW5kKSBjb25maWd1cmF0aW9uLiBCeSBkZWZhdWx0IHRoZSBTREsgdXNlcyBmaXhlZCBoZWlnaHQgKGEgc2l6ZSB0aGF0J3Mga25vd24gYmVmb3JlIHRoZSBHSUYgaXMgbG9hZGVkKSwgaWYgeW91IG92ZXJyaWRlIHRoYXQgd2l0aCBkeW5hbWljIGhlaWdodCAoZm9yIGV4YW1wbGU6IGhlaWdodDogMTAwJSkgdGhlIHNjcm9sbGluZyBsb2dpYyBpbnNpZGUgdGhlIG1lc3NhZ2UgbGlzdCBjYW4gYnJlYWsuXG4gICAqL1xuICBjdXN0b21HaXBoeUF0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcj86IChcbiAgICBhOiBBdHRhY2htZW50PFQ+XG4gICkgPT4gQXR0YWNobWVudENvbmZpZ3JhdGlvbjtcbiAgLyoqXG4gICAqIEEgY3VzdG9tIGhhbmRsZXIgY2FuIGJlIHByb3ZpZGVkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNjcmFwZWQgaW1hZ2UgYXR0YWNobWVudCAoaW1hZ2VzIGZvdW5kIGluIGxpbmtzIGluc2lkZSBtZXNzYWdlcykgY29uZmlndXJhdGlvbi4gQnkgZGVmYXVsdCB0aGUgU0RLIHVzZXMgZml4ZWQgaGVpZ2h0IChhIHNpemUgdGhhdCdzIGtub3duIGJlZm9yZSBpbWFnZSBpcyBsb2FkZWQpLCBpZiB5b3Ugb3ZlcnJpZGUgdGhhdCB3aXRoIGR5bmFtaWMgaGVpZ2h0IChmb3IgZXhhbXBsZTogaGVpZ2h0OiAxMDAlKSB0aGUgc2Nyb2xsaW5nIGxvZ2ljIGluc2lkZSB0aGUgbWVzc2FnZSBsaXN0IGNhbiBicmVhay5cbiAgICovXG4gIGN1c3RvbVNjcmFwZWRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcj86IChcbiAgICBhOiBBdHRhY2htZW50PFQ+XG4gICkgPT4gQXR0YWNobWVudENvbmZpZ3JhdGlvbjtcbiAgLyoqXG4gICAqIFlvdSBjYW4gdHVybiBvbi9vZmYgdGh1bWJuYWlsIGdlbmVyYXRpb24gZm9yIHZpZGVvIGF0dGFjaG1lbnRzXG4gICAqL1xuICBzaG91bGRHZW5lcmF0ZVZpZGVvVGh1bWJuYWlsID0gdHJ1ZTtcblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgaW1hZ2UgYXR0YWNobWVudHMsIGl0J3MgcG9zc2libGUgdG8gcHJvdmlkZSB5b3VyIG93biBmdW5jdGlvbiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBsb2dpY1xuICAgKiBAcGFyYW0gYXR0YWNobWVudCBUaGUgYXR0YWNobWVudCB0byBjb25maWd1cmVcbiAgICogQHBhcmFtIGxvY2F0aW9uIFNwZWNpZmllcyB3aGVyZSB0aGUgaW1hZ2UgaXMgYmVpbmcgZGlzcGxheWVkXG4gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBkZWZhdWx0IHJlc2l6aW5nIGxvZ2ljcyByZWFkcyB0aGUgaGVpZ2h0L21heC1oZWlnaHQgYW5kIG1heC13aWR0aCBwcm9wcGVydGllcyBvZiB0aGlzIGVsZW1lbnQgYW5kIHJlZHVjZXMgZmlsZSBzaXplIGJhc2VkIG9uIHRoZSBnaXZlbiB2YWx1ZXMuIEZpbGUgc2l6ZSByZWR1Y3Rpb24gaXMgZG9uZSBieSBTdHJlYW0ncyBDRE4uXG4gICAqL1xuICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQ8VD4sXG4gICAgbG9jYXRpb246ICdnYWxsZXJ5JyB8ICdzaW5nbGUnIHwgJ2Nhcm91c2VsJyxcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudFxuICApOiBJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uIHtcbiAgICBpZiAodGhpcy5jdXN0b21JbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIoXG4gICAgICAgIGF0dGFjaG1lbnQsXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICBlbGVtZW50XG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoXG4gICAgICAoYXR0YWNobWVudC5pbWdfdXJsIHx8XG4gICAgICAgIGF0dGFjaG1lbnQudGh1bWJfdXJsIHx8XG4gICAgICAgIGF0dGFjaG1lbnQuaW1hZ2VfdXJsIHx8XG4gICAgICAgICcnKSBhcyBzdHJpbmdcbiAgICApO1xuICAgIGNvbnN0IG9yaWdpbmFsSGVpZ2h0ID1cbiAgICAgIE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldCgnb2gnKSkgPiAxXG4gICAgICAgID8gTnVtYmVyKHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdvaCcpKVxuICAgICAgICA6IDEwMDAwMDA7XG4gICAgY29uc3Qgb3JpZ2luYWxXaWR0aCA9XG4gICAgICBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ293JykpID4gMVxuICAgICAgICA/IE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldCgnb3cnKSlcbiAgICAgICAgOiAxMDAwMDAwO1xuICAgIGNvbnN0IGRpc3BsYXlXYXJuaW5nID0gbG9jYXRpb24gPT09ICdnYWxsZXJ5JyB8fCBsb2NhdGlvbiA9PT0gJ3NpbmdsZSc7XG4gICAgY29uc3Qgc2l6ZVJlc3RyaWN0aW9uID0gdGhpcy5nZXRTaXppbmdSZXN0cmljdGlvbnMoXG4gICAgICB1cmwsXG4gICAgICBlbGVtZW50LFxuICAgICAgZGlzcGxheVdhcm5pbmdcbiAgICApO1xuXG4gICAgaWYgKHNpemVSZXN0cmljdGlvbikge1xuICAgICAgLy8gQXBwbHkgMnggZm9yIHJldGluYSBkaXNwbGF5c1xuICAgICAgc2l6ZVJlc3RyaWN0aW9uLmhlaWdodCAqPSAyO1xuICAgICAgc2l6ZVJlc3RyaWN0aW9uLndpZHRoICo9IDI7XG4gICAgICB0aGlzLmFkZFJlc2l6aW5nUGFyYW1zVG9Vcmwoc2l6ZVJlc3RyaWN0aW9uLCB1cmwpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB1cmw6IHVybC5ocmVmLFxuICAgICAgd2lkdGg6ICcnLCAvLyBOb3Qgc2V0IHRvIHJlc3BlY3QgcmVzcG9uc2l2ZSB3aWR0aFxuICAgICAgaGVpZ2h0OiAnJywgLy8gU2V0IGZyb20gQ1NTXG4gICAgICBvcmlnaW5hbEhlaWdodCxcbiAgICAgIG9yaWdpbmFsV2lkdGgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBjb25maWd1cmF0aW9uIGZvciB2aWRlbyBhdHRhY2htZW50cywgaXQncyBwb3NzaWJsZSB0byBwcm92aWRlIHlvdXIgb3duIGZ1bmN0aW9uIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGxvZ2ljXG4gICAqIEBwYXJhbSBhdHRhY2htZW50IFRoZSBhdHRhY2htZW50IHRvIGNvbmZpZ3VyZVxuICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZGVmYXVsdCByZXNpemluZyBsb2dpY3MgcmVhZHMgdGhlIGhlaWdodC9tYXgtaGVpZ2h0IGFuZCBtYXgtd2lkdGggcHJvcHBlcnRpZXMgb2YgdGhpcyBlbGVtZW50IGFuZCByZWR1Y2VzIGZpbGUgc2l6ZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmFsdWVzLiBGaWxlIHNpemUgcmVkdWN0aW9uIGlzIGRvbmUgYnkgU3RyZWFtJ3MgQ0ROLlxuICAgKi9cbiAgZ2V0VmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICBhdHRhY2htZW50OiBBdHRhY2htZW50PFQ+LFxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50XG4gICk6IFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb24ge1xuICAgIGlmICh0aGlzLmN1c3RvbVZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXN0b21WaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcihcbiAgICAgICAgYXR0YWNobWVudCxcbiAgICAgICAgZWxlbWVudFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgdGh1bWJVcmwgPSB1bmRlZmluZWQ7XG4gICAgbGV0IG9yaWdpbmFsSGVpZ2h0ID0gMTAwMDAwMDtcbiAgICBsZXQgb3JpZ2luYWxXaWR0aCA9IDEwMDAwMDA7XG4gICAgaWYgKGF0dGFjaG1lbnQudGh1bWJfdXJsICYmIHRoaXMuc2hvdWxkR2VuZXJhdGVWaWRlb1RodW1ibmFpbCkge1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChhdHRhY2htZW50LnRodW1iX3VybCk7XG4gICAgICBvcmlnaW5hbEhlaWdodCA9XG4gICAgICAgIE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldCgnb2gnKSkgPiAxXG4gICAgICAgICAgPyBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ29oJykpXG4gICAgICAgICAgOiBvcmlnaW5hbEhlaWdodDtcbiAgICAgIG9yaWdpbmFsV2lkdGggPVxuICAgICAgICBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ293JykpID4gMVxuICAgICAgICAgID8gTnVtYmVyKHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdvdycpKVxuICAgICAgICAgIDogb3JpZ2luYWxXaWR0aDtcbiAgICAgIGNvbnN0IGRpc3BsYXlXYXJuaW5nID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHNpemVSZXN0cmljdGlvbiA9IHRoaXMuZ2V0U2l6aW5nUmVzdHJpY3Rpb25zKFxuICAgICAgICB1cmwsXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGRpc3BsYXlXYXJuaW5nXG4gICAgICApO1xuXG4gICAgICBpZiAoc2l6ZVJlc3RyaWN0aW9uKSB7XG4gICAgICAgIHNpemVSZXN0cmljdGlvbi5oZWlnaHQgKj0gMjtcbiAgICAgICAgc2l6ZVJlc3RyaWN0aW9uLndpZHRoICo9IDI7XG4gICAgICAgIHRoaXMuYWRkUmVzaXppbmdQYXJhbXNUb1VybChzaXplUmVzdHJpY3Rpb24sIHVybCk7XG4gICAgICB9XG4gICAgICB0aHVtYlVybCA9IHVybC5ocmVmO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdXJsOiBhdHRhY2htZW50LmFzc2V0X3VybCB8fCAnJyxcbiAgICAgIHdpZHRoOiAnJywgLy8gTm90IHNldCB0byByZXNwZWN0IHJlc3BvbnNpdmUgd2lkdGhcbiAgICAgIGhlaWdodDogJycsIC8vIFNldCBmcm9tIENTU1xuICAgICAgdGh1bWJVcmw6IHRodW1iVXJsLFxuICAgICAgb3JpZ2luYWxIZWlnaHQsXG4gICAgICBvcmlnaW5hbFdpZHRoLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgZ2lwaHkgYXR0YWNobWVudHMsIGl0J3MgcG9zc2libGUgdG8gcHJvdmlkZSB5b3VyIG93biBmdW5jdGlvbiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBsb2dpY1xuICAgKiBAcGFyYW0gYXR0YWNobWVudCBUaGUgYXR0YWNobWVudCB0byBjb25maWd1cmVcbiAgICovXG4gIGdldEdpcGh5QXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgYXR0YWNobWVudDogQXR0YWNobWVudDxUPlxuICApOiBBdHRhY2htZW50Q29uZmlncmF0aW9uIHtcbiAgICBpZiAodGhpcy5jdXN0b21HaXBoeUF0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tR2lwaHlBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIoYXR0YWNobWVudCk7XG4gICAgfVxuXG4gICAgY29uc3QgZ2lwaHkgPSBhdHRhY2htZW50LmdpcGh5Py5maXhlZF9oZWlnaHRfZG93bnNhbXBsZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdXJsOiBnaXBoeT8udXJsIHx8IGF0dGFjaG1lbnQuaW1hZ2VfdXJsIHx8IGF0dGFjaG1lbnQudGh1bWJfdXJsIHx8ICcnLFxuICAgICAgaGVpZ2h0OiBnaXBoeT8uaGVpZ2h0ID8gYCR7Z2lwaHk/LmhlaWdodH1weGAgOiAnMzAwcHgnLFxuICAgICAgd2lkdGg6IGdpcGh5Py53aWR0aCA/IGAke2dpcGh5Py53aWR0aH1weGAgOiAnJyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHNjcmFwZWQgaW1hZ2UgYXR0YWNobWVudHMsIGl0J3MgcG9zc2libGUgdG8gcHJvdmlkZSB5b3VyIG93biBmdW5jdGlvbiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBsb2dpY1xuICAgKiBAcGFyYW0gYXR0YWNobWVudCBUaGUgYXR0YWNobWVudCB0byBjb25maWd1cmVcbiAgICovXG4gIGdldFNjcmFwZWRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQ8VD5cbiAgKTogQXR0YWNobWVudENvbmZpZ3JhdGlvbiB7XG4gICAgaWYgKHRoaXMuY3VzdG9tU2NyYXBlZEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXN0b21TY3JhcGVkSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIoYXR0YWNobWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogYXR0YWNobWVudC5pbWFnZV91cmwgfHwgYXR0YWNobWVudC50aHVtYl91cmwgfHwgJycsXG4gICAgICB3aWR0aDogJycsXG4gICAgICBoZWlnaHQ6ICcnLCAvLyBTZXQgZnJvbSBDU1NcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRSZXNpemluZ1BhcmFtc1RvVXJsKFxuICAgIHNpemVSZXN0cmljdGlvbjogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9LFxuICAgIHVybDogVVJMXG4gICkge1xuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdoJywgc2l6ZVJlc3RyaWN0aW9uLmhlaWdodC50b1N0cmluZygpKTtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgndycsIHNpemVSZXN0cmljdGlvbi53aWR0aC50b1N0cmluZygpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2l6aW5nUmVzdHJpY3Rpb25zKFxuICAgIHVybDogVVJMLFxuICAgIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgICBkaXNwbGF5V2FybmluZyA9IGZhbHNlXG4gICkge1xuICAgIGNvbnN0IHVybFBhcmFtcyA9IHVybC5zZWFyY2hQYXJhbXM7XG4gICAgY29uc3Qgb3JpZ2luYWxIZWlnaHQgPSBOdW1iZXIodXJsUGFyYW1zLmdldCgnb2gnKSkgfHwgMTtcbiAgICBjb25zdCBvcmlnaW5hbFdpZHRoID0gTnVtYmVyKHVybFBhcmFtcy5nZXQoJ293JykpIHx8IDE7XG4gICAgY29uc3QgY3NzU2l6ZVJlc3RyaWN0aW9uID0gdGhpcy5nZXRDU1NTaXplUmVzdHJpY3Rpb24oaHRtbEVsZW1lbnQpO1xuICAgIGxldCBzaXplUmVzdHJpY3Rpb246IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChcbiAgICAgIChjc3NTaXplUmVzdHJpY3Rpb24ubWF4SGVpZ2h0IHx8IGNzc1NpemVSZXN0cmljdGlvbi5oZWlnaHQpICYmXG4gICAgICBjc3NTaXplUmVzdHJpY3Rpb24ubWF4V2lkdGhcbiAgICApIHtcbiAgICAgIHNpemVSZXN0cmljdGlvbiA9IHRoaXMuZ2V0U2l6ZVJlc3RyaWN0aW9ucyhcbiAgICAgICAgb3JpZ2luYWxIZWlnaHQsXG4gICAgICAgIG9yaWdpbmFsV2lkdGgsXG4gICAgICAgIChjc3NTaXplUmVzdHJpY3Rpb24ubWF4SGVpZ2h0IHx8IGNzc1NpemVSZXN0cmljdGlvbi5oZWlnaHQpISxcbiAgICAgICAgY3NzU2l6ZVJlc3RyaWN0aW9uLm1heFdpZHRoXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaXplUmVzdHJpY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoZGlzcGxheVdhcm5pbmcpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBJbnZhbGlkIHZhbHVlIHNldCBmb3IgaGVpZ2h0L21heC1oZWlnaHQgYW5kL29yIG1heC13aWR0aCBmb3IgSFRNTCBlbGVtZW50LCB0aGlzIGNhbiBjYXVzZSBzY3JvbGxpbmcgaXNzdWVzIGluc2lkZSB0aGUgbWVzc2FnZSBsaXN0LCBtb3JlIGluZm8gaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL3Nkay9hbmd1bGFyL2NvbXBvbmVudHMvQXR0YWNobWVudExpc3RDb21wb25lbnQvI2ltYWdlLWFuZC12aWRlby1zaXppbmdgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpemVSZXN0cmljdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2l6ZVJlc3RyaWN0aW9ucyhcbiAgICBvcmlnaW5hbEhlaWdodDogbnVtYmVyLFxuICAgIG9yaWdpbmFsV2lkdGg6IG51bWJlcixcbiAgICBtYXhIZWlnaHQ6IG51bWJlcixcbiAgICBtYXhXaWR0aDogbnVtYmVyXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBoZWlnaHQ6IE1hdGgucm91bmQoXG4gICAgICAgIE1hdGgubWF4KG1heEhlaWdodCwgKG1heFdpZHRoIC8gb3JpZ2luYWxXaWR0aCkgKiBvcmlnaW5hbEhlaWdodClcbiAgICAgICksXG4gICAgICB3aWR0aDogTWF0aC5yb3VuZChcbiAgICAgICAgTWF0aC5tYXgobWF4SGVpZ2h0LCAobWF4V2lkdGggLyBvcmlnaW5hbEhlaWdodCkgKiBvcmlnaW5hbFdpZHRoKVxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDU1NTaXplUmVzdHJpY3Rpb24oaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZXNoZWV0ID0gZ2V0Q29tcHV0ZWRTdHlsZShodG1sRWxlbWVudCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5nZXRWYWx1ZVJlcHJlc2VudGF0aW9uT2ZDU1NQcm9wZXJ0eShcbiAgICAgIGNvbXB1dGVkU3R5bGVzaGVldC5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKVxuICAgICk7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5nZXRWYWx1ZVJlcHJlc2VudGF0aW9uT2ZDU1NQcm9wZXJ0eShcbiAgICAgIGNvbXB1dGVkU3R5bGVzaGVldC5nZXRQcm9wZXJ0eVZhbHVlKCdtYXgtaGVpZ2h0JylcbiAgICApO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5nZXRWYWx1ZVJlcHJlc2VudGF0aW9uT2ZDU1NQcm9wZXJ0eShcbiAgICAgIGNvbXB1dGVkU3R5bGVzaGVldC5nZXRQcm9wZXJ0eVZhbHVlKCdtYXgtd2lkdGgnKVxuICAgICk7XG5cbiAgICByZXR1cm4geyBoZWlnaHQsIG1heEhlaWdodCwgbWF4V2lkdGggfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVSZXByZXNlbnRhdGlvbk9mQ1NTUHJvcGVydHkocHJvcGVydHk6IHN0cmluZykge1xuICAgIHJldHVybiBOdW1iZXIocHJvcGVydHkucmVwbGFjZSgncHgnLCAnJykpIHx8IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1jb25maWd1cmF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvYXR0YWNobWVudC1jb25maWd1cmF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFTM0M7O0dBRUc7QUFJSCxNQUFNLE9BQU8sOEJBQThCO0lBSDNDO1FBaUNFOztXQUVHO1FBQ0gsaUNBQTRCLEdBQUcsSUFBSSxDQUFDO0tBZ09yQztJQTlOQzs7Ozs7T0FLRztJQUNILCtCQUErQixDQUM3QixVQUF5QixFQUN6QixRQUEyQyxFQUMzQyxPQUFvQjtRQUVwQixJQUFJLElBQUksQ0FBQyx5Q0FBeUMsRUFBRTtZQUNsRCxPQUFPLElBQUksQ0FBQyx5Q0FBeUMsQ0FDbkQsVUFBVSxFQUNWLFFBQVEsRUFDUixPQUFPLENBQ1IsQ0FBQztTQUNIO1FBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQ2pCLENBQUMsVUFBVSxDQUFDLE9BQU87WUFDakIsVUFBVSxDQUFDLFNBQVM7WUFDcEIsVUFBVSxDQUFDLFNBQVM7WUFDcEIsRUFBRSxDQUFXLENBQ2hCLENBQUM7UUFDRixNQUFNLGNBQWMsR0FDbEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDZCxNQUFNLGFBQWEsR0FDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNwQyxDQUFDLENB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SUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQ2pFO1lBQ0QsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQ2pFO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxXQUF3QjtRQUNwRCxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQ0FBbUMsQ0FDckQsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQzlDLENBQUM7UUFDRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsbUNBQW1DLENBQ3hELGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUNsRCxDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1DQUFtQyxDQUN2RCxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FDakQsQ0FBQztRQUVGLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFTyxtQ0FBbUMsQ0FBQyxRQUFnQjtRQUMxRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUN6RCxDQUFDOzsySEFoUVUsOEJBQThCOytIQUE5Qiw4QkFBOEIsY0FGN0IsTUFBTTsyRkFFUCw4QkFBOEI7a0JBSDFDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXR0YWNobWVudCB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7XG4gIEF0dGFjaG1lbnRDb25maWdyYXRpb24sXG4gIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MsXG4gIEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24sXG4gIFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb24sXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFRoZSBgQXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlYCBwcm92aWRlcyBjdXN0b21pemF0aW9uIGZvciBjZXJ0YWluIGF0dHJpYnV0ZXMgb2YgYXR0YWNobWVudHMgZGlzcGxheWVkIGluc2lkZSB0aGUgbWVzc2FnZSBjb21wb25lbnQuIElmIHlvdSdyZSB1c2luZyB5b3VyIG93biBDRE4sIHlvdSBjYW4gaW50ZWdyYXRlIHJlc2l6aW5nIGZlYXR1cmVzIG9mIGl0IGJ5IHByb3ZpZGluZyB5b3VyIG93biBoYW5kbGVycy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEF0dGFjaG1lbnRDb25maWd1cmF0aW9uU2VydmljZTxcbiAgVCBleHRlbmRzIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MgPSBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzXG4+IHtcbiAgLyoqXG4gICAqIEEgY3VzdG9tIGhhbmRsZXIgY2FuIGJlIHByb3ZpZGVkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGltYWdlIGF0dGFjaG1lbnQgKGltYWdlcyB1cGxvYWRlZCBmcm9tIGZpbGVzKSBjb25maWd1cmF0aW9uLiBCeSBkZWZhdWx0IHRoZSBTREsgdXNlcyBmaXhlZCBpbWFnZSBoZWlnaHQgKGEgc2l6ZSB0aGF0J3Mga25vd24gYmVmb3JlIGltYWdlIGlzIGxvYWRlZCksIGlmIHlvdSBvdmVycmlkZSB0aGF0IHdpdGggZHluYW1pYyBpbWFnZSBoZWlnaHQgKGZvciBleGFtcGxlOiBoZWlnaHQ6IDEwMCUpIHRoZSBzY3JvbGxpbmcgbG9naWMgaW5zaWRlIHRoZSBtZXNzYWdlIGxpc3QgY2FuIGJyZWFrLlxuICAgKi9cbiAgY3VzdG9tSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXI/OiAoXG4gICAgYTogQXR0YWNobWVudDxUPixcbiAgICB0eXBlOiAnZ2FsbGVyeScgfCAnc2luZ2xlJyB8ICdjYXJvdXNlbCcsXG4gICAgY29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnRcbiAgKSA9PiBJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uO1xuICAvKipcbiAgICogQSBjdXN0b20gaGFuZGxlciBjYW4gYmUgcHJvdmlkZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmlkZW8gYXR0YWNobWVudCAodmlkZW9zIHVwbG9hZGVkIGZyb20gZmlsZXMpIGNvbmZpZ3VyYXRpb24uIEJ5IGRlZmF1bHQgdGhlIFNESyB1c2VzIGZpeGVkIGhlaWdodCAoYSBzaXplIHRoYXQncyBrbm93biBiZWZvcmUgdmlkZW8gaXMgbG9hZGVkKSwgaWYgeW91IG92ZXJyaWRlIHRoYXQgd2l0aCBkeW5hbWljIGhlaWdodCAoZm9yIGV4YW1wbGU6IGhlaWdodDogMTAwJSkgdGhlIHNjcm9sbGluZyBsb2dpYyBpbnNpZGUgdGhlIG1lc3NhZ2UgbGlzdCBjYW4gYnJlYWsuXG4gICAqL1xuICBjdXN0b21WaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcj86IChcbiAgICBhOiBBdHRhY2htZW50PFQ+LFxuICAgIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50XG4gICkgPT4gVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbjtcbiAgLyoqXG4gICAqIEEgY3VzdG9tIGhhbmRsZXIgY2FuIGJlIHByb3ZpZGVkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGdpcGh5IGF0dGFjaG1lbnQgKEdJRnMgc2VudCB3aXRoIHRoZSAvZ2lwaHkgY29tbWFuZCkgY29uZmlndXJhdGlvbi4gQnkgZGVmYXVsdCB0aGUgU0RLIHVzZXMgZml4ZWQgaGVpZ2h0IChhIHNpemUgdGhhdCdzIGtub3duIGJlZm9yZSB0aGUgR0lGIGlzIGxvYWRlZCksIGlmIHlvdSBvdmVycmlkZSB0aGF0IHdpdGggZHluYW1pYyBoZWlnaHQgKGZvciBleGFtcGxlOiBoZWlnaHQ6IDEwMCUpIHRoZSBzY3JvbGxpbmcgbG9naWMgaW5zaWRlIHRoZSBtZXNzYWdlIGxpc3QgY2FuIGJyZWFrLlxuICAgKi9cbiAgY3VzdG9tR2lwaHlBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXI/OiAoXG4gICAgYTogQXR0YWNobWVudDxUPlxuICApID0+IEF0dGFjaG1lbnRDb25maWdyYXRpb247XG4gIC8qKlxuICAgKiBBIGN1c3RvbSBoYW5kbGVyIGNhbiBiZSBwcm92aWRlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBzY3JhcGVkIGltYWdlIGF0dGFjaG1lbnQgKGltYWdlcyBmb3VuZCBpbiBsaW5rcyBpbnNpZGUgbWVzc2FnZXMpIGNvbmZpZ3VyYXRpb24uIEJ5IGRlZmF1bHQgdGhlIFNESyB1c2VzIGZpeGVkIGhlaWdodCAoYSBzaXplIHRoYXQncyBrbm93biBiZWZvcmUgaW1hZ2UgaXMgbG9hZGVkKSwgaWYgeW91IG92ZXJyaWRlIHRoYXQgd2l0aCBkeW5hbWljIGhlaWdodCAoZm9yIGV4YW1wbGU6IGhlaWdodDogMTAwJSkgdGhlIHNjcm9sbGluZyBsb2dpYyBpbnNpZGUgdGhlIG1lc3NhZ2UgbGlzdCBjYW4gYnJlYWsuXG4gICAqL1xuICBjdXN0b21TY3JhcGVkSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXI/OiAoXG4gICAgYTogQXR0YWNobWVudDxUPlxuICApID0+IEF0dGFjaG1lbnRDb25maWdyYXRpb247XG4gIC8qKlxuICAgKiBZb3UgY2FuIHR1cm4gb24vb2ZmIHRodW1ibmFpbCBnZW5lcmF0aW9uIGZvciB2aWRlbyBhdHRhY2htZW50c1xuICAgKi9cbiAgc2hvdWxkR2VuZXJhdGVWaWRlb1RodW1ibmFpbCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGltYWdlIGF0dGFjaG1lbnRzLCBpdCdzIHBvc3NpYmxlIHRvIHByb3ZpZGUgeW91ciBvd24gZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbG9naWNcbiAgICogQHBhcmFtIGF0dGFjaG1lbnQgVGhlIGF0dGFjaG1lbnQgdG8gY29uZmlndXJlXG4gICAqIEBwYXJhbSBsb2NhdGlvbiBTcGVjaWZpZXMgd2hlcmUgdGhlIGltYWdlIGlzIGJlaW5nIGRpc3BsYXllZFxuICAgKiBAcGFyYW0gZWxlbWVudCBUaGUgZGVmYXVsdCByZXNpemluZyBsb2dpY3MgcmVhZHMgdGhlIGhlaWdodC9tYXgtaGVpZ2h0IGFuZCBtYXgtd2lkdGggcHJvcHBlcnRpZXMgb2YgdGhpcyBlbGVtZW50IGFuZCByZWR1Y2VzIGZpbGUgc2l6ZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gdmFsdWVzLiBGaWxlIHNpemUgcmVkdWN0aW9uIGlzIGRvbmUgYnkgU3RyZWFtJ3MgQ0ROLlxuICAgKi9cbiAgZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICBhdHRhY2htZW50OiBBdHRhY2htZW50PFQ+LFxuICAgIGxvY2F0aW9uOiAnZ2FsbGVyeScgfCAnc2luZ2xlJyB8ICdjYXJvdXNlbCcsXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnRcbiAgKTogSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbiB7XG4gICAgaWYgKHRoaXMuY3VzdG9tSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1c3RvbUltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKFxuICAgICAgICBhdHRhY2htZW50LFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgZWxlbWVudFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKFxuICAgICAgKGF0dGFjaG1lbnQuaW1nX3VybCB8fFxuICAgICAgICBhdHRhY2htZW50LnRodW1iX3VybCB8fFxuICAgICAgICBhdHRhY2htZW50LmltYWdlX3VybCB8fFxuICAgICAgICAnJykgYXMgc3RyaW5nXG4gICAgKTtcbiAgICBjb25zdCBvcmlnaW5hbEhlaWdodCA9XG4gICAgICBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ29oJykpID4gMVxuICAgICAgICA/IE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldCgnb2gnKSlcbiAgICAgICAgOiAxMDAwMDAwO1xuICAgIGNvbnN0IG9yaWdpbmFsV2lkdGggPVxuICAgICAgTnVtYmVyKHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdvdycpKSA+IDFcbiAgICAgICAgPyBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ293JykpXG4gICAgICAgIDogMTAwMDAwMDtcbiAgICBjb25zdCBkaXNwbGF5V2FybmluZyA9IGxvY2F0aW9uID09PSAnZ2FsbGVyeScgfHwgbG9jYXRpb24gPT09ICdzaW5nbGUnO1xuICAgIGNvbnN0IHNpemVSZXN0cmljdGlvbiA9IHRoaXMuZ2V0U2l6aW5nUmVzdHJpY3Rpb25zKFxuICAgICAgdXJsLFxuICAgICAgZWxlbWVudCxcbiAgICAgIGRpc3BsYXlXYXJuaW5nXG4gICAgKTtcblxuICAgIGlmIChzaXplUmVzdHJpY3Rpb24pIHtcbiAgICAgIC8vIEFwcGx5IDJ4IGZvciByZXRpbmEgZGlzcGxheXNcbiAgICAgIHNpemVSZXN0cmljdGlvbi5oZWlnaHQgKj0gMjtcbiAgICAgIHNpemVSZXN0cmljdGlvbi53aWR0aCAqPSAyO1xuICAgICAgdGhpcy5hZGRSZXNpemluZ1BhcmFtc1RvVXJsKHNpemVSZXN0cmljdGlvbiwgdXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdXJsOiB1cmwuaHJlZixcbiAgICAgIHdpZHRoOiAnJywgLy8gTm90IHNldCB0byByZXNwZWN0IHJlc3BvbnNpdmUgd2lkdGhcbiAgICAgIGhlaWdodDogJycsIC8vIFNldCBmcm9tIENTU1xuICAgICAgb3JpZ2luYWxIZWlnaHQsXG4gICAgICBvcmlnaW5hbFdpZHRoLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgdmlkZW8gYXR0YWNobWVudHMsIGl0J3MgcG9zc2libGUgdG8gcHJvdmlkZSB5b3VyIG93biBmdW5jdGlvbiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBsb2dpY1xuICAgKiBAcGFyYW0gYXR0YWNobWVudCBUaGUgYXR0YWNobWVudCB0byBjb25maWd1cmVcbiAgICogQHBhcmFtIGVsZW1lbnQgVGhlIGRlZmF1bHQgcmVzaXppbmcgbG9naWNzIHJlYWRzIHRoZSBoZWlnaHQvbWF4LWhlaWdodCBhbmQgbWF4LXdpZHRoIHByb3BwZXJ0aWVzIG9mIHRoaXMgZWxlbWVudCBhbmQgcmVkdWNlcyBmaWxlIHNpemUgYmFzZWQgb24gdGhlIGdpdmVuIHZhbHVlcy4gRmlsZSBzaXplIHJlZHVjdGlvbiBpcyBkb25lIGJ5IFN0cmVhbSdzIENETi5cbiAgICovXG4gIGdldFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgYXR0YWNobWVudDogQXR0YWNobWVudDxUPixcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudFxuICApOiBWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uIHtcbiAgICBpZiAodGhpcy5jdXN0b21WaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIoXG4gICAgICAgIGF0dGFjaG1lbnQsXG4gICAgICAgIGVsZW1lbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHRodW1iVXJsID0gdW5kZWZpbmVkO1xuICAgIGxldCBvcmlnaW5hbEhlaWdodCA9IDEwMDAwMDA7XG4gICAgbGV0IG9yaWdpbmFsV2lkdGggPSAxMDAwMDAwO1xuICAgIGlmIChhdHRhY2htZW50LnRodW1iX3VybCAmJiB0aGlzLnNob3VsZEdlbmVyYXRlVmlkZW9UaHVtYm5haWwpIHtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYXR0YWNobWVudC50aHVtYl91cmwpO1xuICAgICAgb3JpZ2luYWxIZWlnaHQgPVxuICAgICAgICBOdW1iZXIodXJsLnNlYXJjaFBhcmFtcy5nZXQoJ29oJykpID4gMVxuICAgICAgICAgID8gTnVtYmVyKHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdvaCcpKVxuICAgICAgICAgIDogb3JpZ2luYWxIZWlnaHQ7XG4gICAgICBvcmlnaW5hbFdpZHRoID1cbiAgICAgICAgTnVtYmVyKHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdvdycpKSA+IDFcbiAgICAgICAgICA/IE51bWJlcih1cmwuc2VhcmNoUGFyYW1zLmdldCgnb3cnKSlcbiAgICAgICAgICA6IG9yaWdpbmFsV2lkdGg7XG4gICAgICBjb25zdCBkaXNwbGF5V2FybmluZyA9IHRydWU7XG4gICAgICBjb25zdCBzaXplUmVzdHJpY3Rpb24gPSB0aGlzLmdldFNpemluZ1Jlc3RyaWN0aW9ucyhcbiAgICAgICAgdXJsLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBkaXNwbGF5V2FybmluZ1xuICAgICAgKTtcblxuICAgICAgaWYgKHNpemVSZXN0cmljdGlvbikge1xuICAgICAgICBzaXplUmVzdHJpY3Rpb24uaGVpZ2h0ICo9IDI7XG4gICAgICAgIHNpemVSZXN0cmljdGlvbi53aWR0aCAqPSAyO1xuICAgICAgICB0aGlzLmFkZFJlc2l6aW5nUGFyYW1zVG9Vcmwoc2l6ZVJlc3RyaWN0aW9uLCB1cmwpO1xuICAgICAgfVxuICAgICAgdGh1bWJVcmwgPSB1cmwuaHJlZjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogYXR0YWNobWVudC5hc3NldF91cmwgfHwgJycsXG4gICAgICB3aWR0aDogJycsIC8vIE5vdCBzZXQgdG8gcmVzcGVjdCByZXNwb25zaXZlIHdpZHRoXG4gICAgICBoZWlnaHQ6ICcnLCAvLyBTZXQgZnJvbSBDU1NcbiAgICAgIHRodW1iVXJsOiB0aHVtYlVybCxcbiAgICAgIG9yaWdpbmFsSGVpZ2h0LFxuICAgICAgb3JpZ2luYWxXaWR0aCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGdpcGh5IGF0dGFjaG1lbnRzLCBpdCdzIHBvc3NpYmxlIHRvIHByb3ZpZGUgeW91ciBvd24gZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbG9naWNcbiAgICogQHBhcmFtIGF0dGFjaG1lbnQgVGhlIGF0dGFjaG1lbnQgdG8gY29uZmlndXJlXG4gICAqL1xuICBnZXRHaXBoeUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQ8VD5cbiAgKTogQXR0YWNobWVudENvbmZpZ3JhdGlvbiB7XG4gICAgaWYgKHRoaXMuY3VzdG9tR2lwaHlBdHRhY2htZW50Q29uZmlndXJhdGlvbkhhbmRsZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1c3RvbUdpcGh5QXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKGF0dGFjaG1lbnQpO1xuICAgIH1cblxuICAgIGNvbnN0IGdpcGh5ID0gYXR0YWNobWVudC5naXBoeT8uZml4ZWRfaGVpZ2h0X2Rvd25zYW1wbGVkO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogZ2lwaHk/LnVybCB8fCBhdHRhY2htZW50LmltYWdlX3VybCB8fCBhdHRhY2htZW50LnRodW1iX3VybCB8fCAnJyxcbiAgICAgIGhlaWdodDogZ2lwaHk/LmhlaWdodCA/IGAke2dpcGh5Py5oZWlnaHR9cHhgIDogJzMwMHB4JyxcbiAgICAgIHdpZHRoOiBnaXBoeT8ud2lkdGggPyBgJHtnaXBoeT8ud2lkdGh9cHhgIDogJycsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBjb25maWd1cmF0aW9uIGZvciBzY3JhcGVkIGltYWdlIGF0dGFjaG1lbnRzLCBpdCdzIHBvc3NpYmxlIHRvIHByb3ZpZGUgeW91ciBvd24gZnVuY3Rpb24gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbG9naWNcbiAgICogQHBhcmFtIGF0dGFjaG1lbnQgVGhlIGF0dGFjaG1lbnQgdG8gY29uZmlndXJlXG4gICAqL1xuICBnZXRTY3JhcGVkSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICBhdHRhY2htZW50OiBBdHRhY2htZW50PFQ+XG4gICk6IEF0dGFjaG1lbnRDb25maWdyYXRpb24ge1xuICAgIGlmICh0aGlzLmN1c3RvbVNjcmFwZWRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uSGFuZGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tU2NyYXBlZEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb25IYW5kbGVyKGF0dGFjaG1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB1cmw6IGF0dGFjaG1lbnQuaW1hZ2VfdXJsIHx8IGF0dGFjaG1lbnQudGh1bWJfdXJsIHx8ICcnLFxuICAgICAgd2lkdGg6ICcnLFxuICAgICAgaGVpZ2h0OiAnJywgLy8gU2V0IGZyb20gQ1NTXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUmVzaXppbmdQYXJhbXNUb1VybChcbiAgICBzaXplUmVzdHJpY3Rpb246IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSxcbiAgICB1cmw6IFVSTFxuICApIHtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnaCcsIHNpemVSZXN0cmljdGlvbi5oZWlnaHQudG9TdHJpbmcoKSk7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3cnLCBzaXplUmVzdHJpY3Rpb24ud2lkdGgudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNpemluZ1Jlc3RyaWN0aW9ucyhcbiAgICB1cmw6IFVSTCxcbiAgICBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgZGlzcGxheVdhcm5pbmcgPSBmYWxzZVxuICApIHtcbiAgICBjb25zdCB1cmxQYXJhbXMgPSB1cmwuc2VhcmNoUGFyYW1zO1xuICAgIGNvbnN0IG9yaWdpbmFsSGVpZ2h0ID0gTnVtYmVyKHVybFBhcmFtcy5nZXQoJ29oJykpIHx8IDE7XG4gICAgY29uc3Qgb3JpZ2luYWxXaWR0aCA9IE51bWJlcih1cmxQYXJhbXMuZ2V0KCdvdycpKSB8fCAxO1xuICAgIGNvbnN0IGNzc1NpemVSZXN0cmljdGlvbiA9IHRoaXMuZ2V0Q1NTU2l6ZVJlc3RyaWN0aW9uKGh0bWxFbGVtZW50KTtcbiAgICBsZXQgc2l6ZVJlc3RyaWN0aW9uOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoXG4gICAgICAoY3NzU2l6ZVJlc3RyaWN0aW9uLm1heEhlaWdodCB8fCBjc3NTaXplUmVzdHJpY3Rpb24uaGVpZ2h0KSAmJlxuICAgICAgY3NzU2l6ZVJlc3RyaWN0aW9uLm1heFdpZHRoXG4gICAgKSB7XG4gICAgICBzaXplUmVzdHJpY3Rpb24gPSB0aGlzLmdldFNpemVSZXN0cmljdGlvbnMoXG4gICAgICAgIG9yaWdpbmFsSGVpZ2h0LFxuICAgICAgICBvcmlnaW5hbFdpZHRoLFxuICAgICAgICAoY3NzU2l6ZVJlc3RyaWN0aW9uLm1heEhlaWdodCB8fCBjc3NTaXplUmVzdHJpY3Rpb24uaGVpZ2h0KSEsXG4gICAgICAgIGNzc1NpemVSZXN0cmljdGlvbi5tYXhXaWR0aFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2l6ZVJlc3RyaWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKGRpc3BsYXlXYXJuaW5nKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgSW52YWxpZCB2YWx1ZSBzZXQgZm9yIGhlaWdodC9tYXgtaGVpZ2h0IGFuZC9vciBtYXgtd2lkdGggZm9yIEhUTUwgZWxlbWVudCwgdGhpcyBjYW4gY2F1c2Ugc2Nyb2xsaW5nIGlzc3VlcyBpbnNpZGUgdGhlIG1lc3NhZ2UgbGlzdCwgbW9yZSBpbmZvIGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9zZGsvYW5ndWxhci9jb21wb25lbnRzL0F0dGFjaG1lbnRMaXN0Q29tcG9uZW50LyNpbWFnZS1hbmQtdmlkZW8tc2l6aW5nLCBhdHRhY2htZW50IFVSTDogJHt1cmwudG9TdHJpbmcoKX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpemVSZXN0cmljdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2l6ZVJlc3RyaWN0aW9ucyhcbiAgICBvcmlnaW5hbEhlaWdodDogbnVtYmVyLFxuICAgIG9yaWdpbmFsV2lkdGg6IG51bWJlcixcbiAgICBtYXhIZWlnaHQ6IG51bWJlcixcbiAgICBtYXhXaWR0aDogbnVtYmVyXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBoZWlnaHQ6IE1hdGgucm91bmQoXG4gICAgICAgIE1hdGgubWF4KG1heEhlaWdodCwgKG1heFdpZHRoIC8gb3JpZ2luYWxXaWR0aCkgKiBvcmlnaW5hbEhlaWdodClcbiAgICAgICksXG4gICAgICB3aWR0aDogTWF0aC5yb3VuZChcbiAgICAgICAgTWF0aC5tYXgobWF4SGVpZ2h0LCAobWF4V2lkdGggLyBvcmlnaW5hbEhlaWdodCkgKiBvcmlnaW5hbFdpZHRoKVxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDU1NTaXplUmVzdHJpY3Rpb24oaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZXNoZWV0ID0gZ2V0Q29tcHV0ZWRTdHlsZShodG1sRWxlbWVudCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5nZXRWYWx1ZVJlcHJlc2VudGF0aW9uT2ZDU1NQcm9wZXJ0eShcbiAgICAgIGNvbXB1dGVkU3R5bGVzaGVldC5nZXRQcm9wZXJ0eVZhbHVlKCdoZWlnaHQnKVxuICAgICk7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5nZXRWYWx1ZVJlcHJlc2VudGF0aW9uT2ZDU1NQcm9wZXJ0eShcbiAgICAgIGNvbXB1dGVkU3R5bGVzaGVldC5nZXRQcm9wZXJ0eVZhbHVlKCdtYXgtaGVpZ2h0JylcbiAgICApO1xuICAgIGNvbnN0IG1heFdpZHRoID0gdGhpcy5nZXRWYWx1ZVJlcHJlc2VudGF0aW9uT2ZDU1NQcm9wZXJ0eShcbiAgICAgIGNvbXB1dGVkU3R5bGVzaGVldC5nZXRQcm9wZXJ0eVZhbHVlKCdtYXgtd2lkdGgnKVxuICAgICk7XG5cbiAgICByZXR1cm4geyBoZWlnaHQsIG1heEhlaWdodCwgbWF4V2lkdGggfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVSZXByZXNlbnRhdGlvbk9mQ1NTUHJvcGVydHkocHJvcGVydHk6IHN0cmluZykge1xuICAgIHJldHVybiBOdW1iZXIocHJvcGVydHkucmVwbGFjZSgncHgnLCAnJykpIHx8IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -179,7 +179,7 @@ export class AttachmentListComponent {
179
179
  }
180
180
  }
181
181
  AttachmentListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: AttachmentListComponent, deps: [{ token: i1.CustomTemplatesService }, { token: i2.ChannelService }, { token: i3.AttachmentConfigurationService }, { token: i4.ThemeService }], target: i0.ɵɵFactoryTarget.Component });
182
- AttachmentListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: AttachmentListComponent, selector: "stream-attachment-list", inputs: { messageId: "messageId", parentMessageId: "parentMessageId", attachments: "attachments" }, outputs: { imageModalStateChange: "imageModalStateChange" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "modalContent", first: true, predicate: ["modalContent"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"orderedAttachments.length > 0\" class=\"str-chat__attachment-list\">\n <ng-container\n *ngFor=\"let attachment of orderedAttachments; trackBy: trackByUrl\"\n >\n <div\n data-testclass=\"attachment-container\"\n class=\"str-chat__message-attachment str-chat__message-attachment--{{\n attachment.type\n }} str-chat__message-attachment-dynamic-size\"\n [class.str-chat__message-attachment--card]=\"isCard(attachment)\"\n [class.str-chat-angular__message-attachment-file-single]=\"\n isFile(attachment)\n \"\n [class.str-chat__message-attachment-with-actions]=\"\n attachment.actions && attachment.actions.length > 0\n \"\n [class.str-chat__message-attachment--svg-image]=\"isSvg(attachment)\"\n >\n <ng-container *ngIf=\"isImage(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.imageAttachmentTemplate$ | async) ||\n defaultImage;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultImage let-attachmentContext=\"attachment\">\n <img\n #imgElement\n class=\"str-chat__message-attachment--img\"\n data-testclass=\"image\"\n [src]=\"\n getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).url\n \"\n [alt]=\"attachmentContext?.fallback\"\n (click)=\"openImageModal([attachmentContext])\"\n (keyup.enter)=\"openImageModal([attachmentContext])\"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).originalWidth\n \"\n [ngStyle]=\"{\n height: getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).height,\n width: getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).width\n }\"\n />\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"isGallery(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.galleryAttachmentTemplate$ | async) ||\n defaultGallery;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultGallery let-attachmentContext=\"attachment\">\n <div\n class=\"str-chat__gallery\"\n data-testid=\"image-gallery\"\n [class.str-chat__gallery--square]=\"\n (attachmentContext?.images)!.length > 3\n \"\n [class.str-chat__gallery-two-rows]=\"\n (attachmentContext?.images)!.length > 2\n \"\n >\n <ng-container\n *ngFor=\"\n let galleryImage of attachmentContext.images;\n let index = index;\n let isLast = last;\n trackBy: trackByImageUrl\n \"\n >\n <button\n *ngIf=\"index < 3 || (index === 3 && isLast)\"\n class=\"str-chat__gallery-image\"\n data-testclass=\"gallery-image\"\n (click)=\"openImageModal(attachmentContext.images!, index)\"\n (keyup.enter)=\"openImageModal(attachmentContext.images!, index)\"\n [class.str-chat__message-attachment--svg-image]=\"\n isSvg(galleryImage)\n \"\n >\n <img\n #imgElement\n [src]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).url\n \"\n [alt]=\"galleryImage.fallback\"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).originalWidth\n \"\n [ngStyle]=\"{\n height: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).height,\n width: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).width\n }\"\n />\n </button>\n <button\n #element\n *ngIf=\"index === 3 && !isLast\"\n class=\"str-chat__gallery-placeholder\"\n data-testclass=\"gallery-image\"\n data-testid=\"more-image-button\"\n (click)=\"openImageModal(attachmentContext.images!, index)\"\n (keyup.enter)=\"openImageModal(attachmentContext.images!, index)\"\n [class.str-chat__message-attachment--svg-image]=\"\n isSvg(galleryImage)\n \"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).originalWidth\n \"\n [ngStyle]=\"{\n 'background-image':\n 'url(' +\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).url +\n ')',\n height: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).height,\n width: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).width\n }\"\n >\n <p\n [innerHTML]=\"\n 'streamChat.{{ imageCount }} more'\n | translate\n : { imageCount: attachmentContext!.images!.length - 4 }\n \"\n ></p>\n </button>\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"isVideo(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.videoAttachmentTemplate$ | async) ||\n defaultVideo;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultVideo let-attachmentContext=\"attachment\">\n <div\n class=\"str-chat__player-wrapper\"\n data-testclass=\"video-attachment-parent\"\n [style.--original-height]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .originalHeight\n \"\n [style.--original-width]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .originalWidth\n \"\n [ngStyle]=\"{\n height: getVideoAttachmentConfiguration(\n attachmentContext,\n videoElement\n ).height,\n width: getVideoAttachmentConfiguration(\n attachmentContext,\n videoElement\n ).width\n }\"\n >\n <video\n #videoElement\n class=\"str-chat__video-angular\"\n controls\n data-testclass=\"video-attachment\"\n [src]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .url\n \"\n [poster]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .thumbUrl\n \"\n ></video>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"isFile(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.fileAttachmentTemplate$ | async) ||\n defaultFile;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultFile let-attachmentContext=\"attachment\">\n <a\n class=\"\n str-chat__message-attachment-file--item\n str-chat-angular__message-attachment-file-single\n \"\n style=\"cursor: pointer; text-decoration: none\"\n data-testclass=\"file-link\"\n href=\"{{ attachmentContext.asset_url }}\"\n target=\"_blank\"\n >\n <stream-icon-placeholder\n *ngIf=\"themeVersion === '1'\"\n icon=\"file\"\n [size]=\"30\"\n ></stream-icon-placeholder>\n <stream-icon-placeholder\n *ngIf=\"themeVersion === '2'\"\n icon=\"unspecified-filetype\"\n [size]=\"30\"\n ></stream-icon-placeholder>\n <div class=\"str-chat__message-attachment-file--item-text\">\n <div class=\"str-chat__message-attachment-file--item-first-row\">\n <div\n data-testclass=\"file-title\"\n class=\"str-chat__message-attachment-file--item-name\"\n >\n {{ attachmentContext.title }}\n </div>\n <!-- Temporary disabled, will be fixed with this: https://github.com/GetStream/stream-chat-angular/issues/393 -->\n <!-- <a\n class=\"str-chat__message-attachment-file--item-download\"\n data-testclass=\"file-link\"\n download\n href=\"{{ attachment.asset_url }}\"\n target=\"_blank\"\n >\n <stream-icon-placeholder\n class=\"str-chat__message-attachment-download-icon\"\n icon=\"download\"\n ></stream-icon-placeholder>\n </a> -->\n </div>\n <span\n class=\"str-chat__message-attachment-file--item-size\"\n data-testclass=\"size\"\n *ngIf=\"hasFileSize(attachmentContext)\"\n >{{ getFileSize(attachmentContext) }}</span\n >\n </div>\n </a>\n </ng-template>\n </ng-container>\n <ng-container\n *ngIf=\"\n isCard(attachment) &&\n getCardAttachmentConfiguration(attachment) as attachmentConfiguration\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.cardAttachmentTemplate$ | async) ||\n defaultCard;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultCard let-attachmentContext=\"attachment\">\n <div\n class=\"str-chat__message-attachment-card str-chat__message-attachment-card--{{\n attachmentContext.type\n }}\"\n >\n <div\n *ngIf=\"attachmentConfiguration.url\"\n class=\"str-chat__message-attachment-card--header\"\n >\n <img\n data-testclass=\"card-img\"\n alt=\"{{ attachmentConfiguration.url }}\"\n src=\"{{ attachmentConfiguration.url }}\"\n [ngStyle]=\"{\n height: attachmentConfiguration.height,\n width: attachmentConfiguration.width\n }\"\n />\n </div>\n <div class=\"str-chat__message-attachment-card--content\">\n <div class=\"str-chat__message-attachment-card--flex\">\n <div\n *ngIf=\"attachmentContext.title\"\n data-testclass=\"card-title\"\n class=\"str-chat__message-attachment-card--title\"\n >\n {{ attachmentContext.title }}\n </div>\n <div\n *ngIf=\"attachmentContext.text\"\n class=\"str-chat__message-attachment-card--text\"\n data-testclass=\"card-text\"\n >\n {{ attachmentContext.text }}\n </div>\n <a\n class=\"str-chat__message-attachment-card--url\"\n *ngIf=\"\n attachmentContext.title_link ||\n attachmentContext.og_scrape_url\n \"\n data-testclass=\"url-link\"\n noopener\n noreferrer\n href=\"{{\n attachmentContext.title_link ||\n attachmentContext.og_scrape_url\n }}\"\n target=\"_blank\"\n >\n {{\n trimUrl(\n attachmentContext.title_link ||\n attachmentContext.og_scrape_url\n )\n }}\n </a>\n </div>\n </div>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"attachment.actions && attachment.actions.length > 0\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.attachmentActionsTemplate$ | async) ||\n defaultActions;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultActions let-attachmentContext=\"attachment\">\n <div class=\"str-chat__message-attachment-actions\">\n <div class=\"str-chat__message-attachment-actions-form\">\n <button\n *ngFor=\"\n let action of attachmentContext.actions;\n trackBy: trackByActionValue\n \"\n class=\"str-chat__message-attachment-actions-button str-chat__message-attachment-actions-button--{{\n action.style\n }}\"\n data-testclass=\"attachment-action\"\n (click)=\"sendAction(action)\"\n (keyup.enter)=\"sendAction(action)\"\n >\n {{ action.text }}\n </button>\n </div>\n </div>\n </ng-template>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"imagesToView && imagesToView.length > 0\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n </ng-container>\n</div>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"stream-chat-angular__image-modal-host\"\n [isOpen]=\"isOpen\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n [content]=\"content\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #modalContent>\n <div class=\"stream-chat-angular__image-modal str-chat__image-carousel\">\n <button\n class=\"\n stream-chat-angular__image-modal-stepper\n str-chat__image-carousel-stepper\n \"\n [ngStyle]=\"{\n visibility: isImageModalPrevButtonVisible ? 'visible' : 'hidden'\n }\"\n data-testid=\"image-modal-prev\"\n type=\"button\"\n (click)=\"stepImages(-1)\"\n (keyup.enter)=\"stepImages(-1)\"\n >\n <stream-icon-placeholder icon=\"arrow-left\"></stream-icon-placeholder>\n </button>\n <img\n #imgElement\n class=\"\n stream-chat-angular__image-modal-image\n str-chat__image-carousel-image\n \"\n data-testid=\"modal-image\"\n [src]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).url\n \"\n [style.--original-height]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).originalHeight\n \"\n [style.--original-width]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).originalWidth\n \"\n [alt]=\"imagesToView[imagesToViewCurrentIndex].fallback\"\n [ngStyle]=\"{\n width: getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).width,\n height: getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).height\n }\"\n />\n <button\n class=\"\n stream-chat-angular__image-modal-stepper\n str-chat__image-carousel-stepper\n \"\n type=\"button\"\n [ngStyle]=\"{\n visibility: isImageModalNextButtonVisible ? 'visible' : 'hidden'\n }\"\n data-testid=\"image-modal-next\"\n (click)=\"stepImages(1)\"\n (keyup.enter)=\"stepImages(1)\"\n >\n <stream-icon-placeholder icon=\"arrow-right\"></stream-icon-placeholder>\n </button>\n </div>\n</ng-template>\n", components: [{ type: i5.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: i6.ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "async": i7.AsyncPipe, "translate": i8.TranslatePipe } });
182
+ AttachmentListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: AttachmentListComponent, selector: "stream-attachment-list", inputs: { messageId: "messageId", parentMessageId: "parentMessageId", attachments: "attachments" }, outputs: { imageModalStateChange: "imageModalStateChange" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "modalContent", first: true, predicate: ["modalContent"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"orderedAttachments.length > 0\" class=\"str-chat__attachment-list\">\n <ng-container\n *ngFor=\"let attachment of orderedAttachments; trackBy: trackByUrl\"\n >\n <div\n data-testclass=\"attachment-container\"\n class=\"str-chat__message-attachment str-chat__message-attachment--{{\n attachment.type\n }} str-chat__message-attachment-dynamic-size\"\n [class.str-chat__message-attachment--card]=\"isCard(attachment)\"\n [class.str-chat-angular__message-attachment-file-single]=\"\n isFile(attachment)\n \"\n [class.str-chat__message-attachment-with-actions]=\"\n attachment.actions && attachment.actions.length > 0\n \"\n [class.str-chat__message-attachment--svg-image]=\"isSvg(attachment)\"\n >\n <ng-container *ngIf=\"isImage(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.imageAttachmentTemplate$ | async) ||\n defaultImage;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultImage let-attachmentContext=\"attachment\">\n <img\n #imgElement\n class=\"str-chat__message-attachment--img\"\n data-testclass=\"image\"\n [src]=\"\n getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).url\n \"\n [alt]=\"attachmentContext?.fallback\"\n (click)=\"openImageModal([attachmentContext])\"\n (keyup.enter)=\"openImageModal([attachmentContext])\"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).originalWidth\n \"\n [ngStyle]=\"{\n height: getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).height,\n width: getImageAttachmentConfiguration(\n attachmentContext,\n 'single',\n imgElement\n ).width\n }\"\n />\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"isGallery(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.galleryAttachmentTemplate$ | async) ||\n defaultGallery;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultGallery let-attachmentContext=\"attachment\">\n <div\n class=\"str-chat__gallery\"\n data-testid=\"image-gallery\"\n [class.str-chat__gallery--square]=\"\n (attachmentContext?.images)!.length > 3\n \"\n [class.str-chat__gallery-two-rows]=\"\n (attachmentContext?.images)!.length > 2\n \"\n >\n <ng-container\n *ngFor=\"\n let galleryImage of attachmentContext.images;\n let index = index;\n let isLast = last;\n trackBy: trackByImageUrl\n \"\n >\n <button\n *ngIf=\"index < 3 || (index === 3 && isLast)\"\n class=\"str-chat__gallery-image\"\n data-testclass=\"gallery-image\"\n (click)=\"openImageModal(attachmentContext.images!, index)\"\n (keyup.enter)=\"openImageModal(attachmentContext.images!, index)\"\n [class.str-chat__message-attachment--svg-image]=\"\n isSvg(galleryImage)\n \"\n >\n <img\n fetchpriority=\"low\"\n loading=\"lazy\"\n #imgElement\n [src]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).url\n \"\n [alt]=\"galleryImage.fallback\"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).originalWidth\n \"\n [ngStyle]=\"{\n height: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).height,\n width: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n imgElement\n ).width\n }\"\n />\n </button>\n <button\n #element\n *ngIf=\"index === 3 && !isLast\"\n class=\"str-chat__gallery-placeholder\"\n data-testclass=\"gallery-image\"\n data-testid=\"more-image-button\"\n (click)=\"openImageModal(attachmentContext.images!, index)\"\n (keyup.enter)=\"openImageModal(attachmentContext.images!, index)\"\n [class.str-chat__message-attachment--svg-image]=\"\n isSvg(galleryImage)\n \"\n [style.--original-height]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).originalHeight\n \"\n [style.--original-width]=\"\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).originalWidth\n \"\n [ngStyle]=\"{\n 'background-image':\n 'url(' +\n getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).url +\n ')',\n height: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).height,\n width: getImageAttachmentConfiguration(\n galleryImage,\n 'gallery',\n element\n ).width\n }\"\n >\n <p\n [innerHTML]=\"\n 'streamChat.{{ imageCount }} more'\n | translate\n : { imageCount: attachmentContext!.images!.length - 4 }\n \"\n ></p>\n </button>\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"isVideo(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.videoAttachmentTemplate$ | async) ||\n defaultVideo;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultVideo let-attachmentContext=\"attachment\">\n <div\n class=\"str-chat__player-wrapper\"\n data-testclass=\"video-attachment-parent\"\n [style.--original-height]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .originalHeight\n \"\n [style.--original-width]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .originalWidth\n \"\n [ngStyle]=\"{\n height: getVideoAttachmentConfiguration(\n attachmentContext,\n videoElement\n ).height,\n width: getVideoAttachmentConfiguration(\n attachmentContext,\n videoElement\n ).width\n }\"\n >\n <video\n #videoElement\n class=\"str-chat__video-angular\"\n controls\n data-testclass=\"video-attachment\"\n [src]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .url\n \"\n [poster]=\"\n getVideoAttachmentConfiguration(attachmentContext, videoElement)\n .thumbUrl\n \"\n ></video>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"isFile(attachment)\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.fileAttachmentTemplate$ | async) ||\n defaultFile;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultFile let-attachmentContext=\"attachment\">\n <a\n class=\"\n str-chat__message-attachment-file--item\n str-chat-angular__message-attachment-file-single\n \"\n style=\"cursor: pointer; text-decoration: none\"\n data-testclass=\"file-link\"\n href=\"{{ attachmentContext.asset_url }}\"\n target=\"_blank\"\n >\n <stream-icon-placeholder\n *ngIf=\"themeVersion === '1'\"\n icon=\"file\"\n [size]=\"30\"\n ></stream-icon-placeholder>\n <stream-icon-placeholder\n *ngIf=\"themeVersion === '2'\"\n icon=\"unspecified-filetype\"\n [size]=\"30\"\n ></stream-icon-placeholder>\n <div class=\"str-chat__message-attachment-file--item-text\">\n <div class=\"str-chat__message-attachment-file--item-first-row\">\n <div\n data-testclass=\"file-title\"\n class=\"str-chat__message-attachment-file--item-name\"\n >\n {{ attachmentContext.title }}\n </div>\n <!-- Temporary disabled, will be fixed with this: https://github.com/GetStream/stream-chat-angular/issues/393 -->\n <!-- <a\n class=\"str-chat__message-attachment-file--item-download\"\n data-testclass=\"file-link\"\n download\n href=\"{{ attachment.asset_url }}\"\n target=\"_blank\"\n >\n <stream-icon-placeholder\n class=\"str-chat__message-attachment-download-icon\"\n icon=\"download\"\n ></stream-icon-placeholder>\n </a> -->\n </div>\n <span\n class=\"str-chat__message-attachment-file--item-size\"\n data-testclass=\"size\"\n *ngIf=\"hasFileSize(attachmentContext)\"\n >{{ getFileSize(attachmentContext) }}</span\n >\n </div>\n </a>\n </ng-template>\n </ng-container>\n <ng-container\n *ngIf=\"\n isCard(attachment) &&\n getCardAttachmentConfiguration(attachment) as attachmentConfiguration\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.cardAttachmentTemplate$ | async) ||\n defaultCard;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultCard let-attachmentContext=\"attachment\">\n <div\n class=\"str-chat__message-attachment-card str-chat__message-attachment-card--{{\n attachmentContext.type\n }}\"\n >\n <div\n *ngIf=\"attachmentConfiguration.url\"\n class=\"str-chat__message-attachment-card--header\"\n >\n <img\n fetchpriority=\"low\"\n loading=\"lazy\"\n data-testclass=\"card-img\"\n alt=\"{{ attachmentConfiguration.url }}\"\n src=\"{{ attachmentConfiguration.url }}\"\n [ngStyle]=\"{\n height: attachmentConfiguration.height,\n width: attachmentConfiguration.width\n }\"\n />\n </div>\n <div class=\"str-chat__message-attachment-card--content\">\n <div class=\"str-chat__message-attachment-card--flex\">\n <div\n *ngIf=\"attachmentContext.title\"\n data-testclass=\"card-title\"\n class=\"str-chat__message-attachment-card--title\"\n >\n {{ attachmentContext.title }}\n </div>\n <div\n *ngIf=\"attachmentContext.text\"\n class=\"str-chat__message-attachment-card--text\"\n data-testclass=\"card-text\"\n >\n {{ attachmentContext.text }}\n </div>\n <a\n class=\"str-chat__message-attachment-card--url\"\n *ngIf=\"\n attachmentContext.title_link ||\n attachmentContext.og_scrape_url\n \"\n data-testclass=\"url-link\"\n noopener\n noreferrer\n href=\"{{\n attachmentContext.title_link ||\n attachmentContext.og_scrape_url\n }}\"\n target=\"_blank\"\n >\n {{\n trimUrl(\n attachmentContext.title_link ||\n attachmentContext.og_scrape_url\n )\n }}\n </a>\n </div>\n </div>\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"attachment.actions && attachment.actions.length > 0\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.attachmentActionsTemplate$ | async) ||\n defaultActions;\n context: getAttachmentContext(attachment)\n \"\n ></ng-container>\n <ng-template #defaultActions let-attachmentContext=\"attachment\">\n <div class=\"str-chat__message-attachment-actions\">\n <div class=\"str-chat__message-attachment-actions-form\">\n <button\n *ngFor=\"\n let action of attachmentContext.actions;\n trackBy: trackByActionValue\n \"\n class=\"str-chat__message-attachment-actions-button str-chat__message-attachment-actions-button--{{\n action.style\n }}\"\n data-testclass=\"attachment-action\"\n (click)=\"sendAction(action)\"\n (keyup.enter)=\"sendAction(action)\"\n >\n {{ action.text }}\n </button>\n </div>\n </div>\n </ng-template>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"imagesToView && imagesToView.length > 0\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getModalContext()\n \"\n ></ng-container>\n </ng-container>\n</div>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n class=\"stream-chat-angular__image-modal-host\"\n [isOpen]=\"isOpen\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n [content]=\"content\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #modalContent>\n <div class=\"stream-chat-angular__image-modal str-chat__image-carousel\">\n <button\n class=\"\n stream-chat-angular__image-modal-stepper\n str-chat__image-carousel-stepper\n \"\n [ngStyle]=\"{\n visibility: isImageModalPrevButtonVisible ? 'visible' : 'hidden'\n }\"\n data-testid=\"image-modal-prev\"\n type=\"button\"\n (click)=\"stepImages(-1)\"\n (keyup.enter)=\"stepImages(-1)\"\n >\n <stream-icon-placeholder icon=\"arrow-left\"></stream-icon-placeholder>\n </button>\n <img\n #imgElement\n class=\"\n stream-chat-angular__image-modal-image\n str-chat__image-carousel-image\n \"\n data-testid=\"modal-image\"\n [src]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).url\n \"\n [style.--original-height]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).originalHeight\n \"\n [style.--original-width]=\"\n getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).originalWidth\n \"\n [alt]=\"imagesToView[imagesToViewCurrentIndex].fallback\"\n [ngStyle]=\"{\n width: getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).width,\n height: getCarouselImageAttachmentConfiguration(\n imagesToView[imagesToViewCurrentIndex],\n imgElement\n ).height\n }\"\n />\n <button\n class=\"\n stream-chat-angular__image-modal-stepper\n str-chat__image-carousel-stepper\n \"\n type=\"button\"\n [ngStyle]=\"{\n visibility: isImageModalNextButtonVisible ? 'visible' : 'hidden'\n }\"\n data-testid=\"image-modal-next\"\n (click)=\"stepImages(1)\"\n (keyup.enter)=\"stepImages(1)\"\n >\n <stream-icon-placeholder icon=\"arrow-right\"></stream-icon-placeholder>\n </button>\n </div>\n</ng-template>\n", components: [{ type: i5.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: i6.ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "async": i7.AsyncPipe, "translate": i8.TranslatePipe } });
183
183
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: AttachmentListComponent, decorators: [{
184
184
  type: Component,
185
185
  args: [{
@@ -201,4 +201,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
201
201
  type: ViewChild,
202
202
  args: ['modalContent', { static: true }]
203
203
  }] } });
204
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdHRhY2htZW50LWxpc3QvYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdHRhY2htZW50LWxpc3QvYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUdOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQVV2QixPQUFPLFdBQVcsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7QUFNM0Q7O0dBRUc7QUFNSCxNQUFNLE9BQU8sdUJBQXVCO0lBaUNsQyxZQUNrQixzQkFBOEMsRUFDdEQsY0FBOEIsRUFDOUIsOEJBQThELEVBQ3RFLFlBQTBCO1FBSFYsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN0RCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsbUNBQThCLEdBQTlCLDhCQUE4QixDQUFnQztRQTNCeEU7O1dBRUc7UUFDTSxnQkFBVyxHQUE0QyxFQUFFLENBQUM7UUFDbkU7O1dBRUc7UUFDZ0IsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBRXhELENBQUM7UUFDVyxVQUFLLEdBQUcsd0NBQXdDLENBQUM7UUFDaEUsdUJBQWtCLEdBQTRDLEVBQUUsQ0FBQztRQUNqRSxpQkFBWSxHQUE0QyxFQUFFLENBQUM7UUFDM0QsNkJBQXdCLEdBQUcsQ0FBQyxDQUFDO1FBSXJCLDZCQUF3QixHQUs1QixJQUFJLEdBQUcsRUFBRSxDQUFD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QUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxhQUFhLENBQUMsTUFBb0I7UUFDeEMsT0FBTztZQUNMO2dCQUNFLElBQUksRUFBRSxTQUFTO2dCQUNmLE1BQU07YUFDUDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7O29IQTdQVSx1QkFBdUI7d0dBQXZCLHVCQUF1QixpYUNuQ3BDLHMya0JBb2dCQTsyRkRqZWEsdUJBQXVCO2tCQUxuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFdBQVcsRUFBRSxrQ0FBa0M7b0JBQy9DLE1BQU0sRUFBRSxFQUFFO2lCQUNYO2tOQUtVLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSUcsZUFBZTtzQkFBdkIsS0FBSztnQkFJRyxXQUFXO3NCQUFuQixLQUFLO2dCQUlhLHFCQUFxQjtzQkFBdkMsTUFBTTtnQkFHUSxLQUFLO3NCQUFuQixXQUFXO2dCQU1KLFlBQVk7c0JBRG5CLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvbiwgQXR0YWNobWVudCB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7XG4gIE1vZGFsQ29udGV4dCxcbiAgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyxcbiAgQXR0YWNobWVudENvbmZpZ3JhdGlvbixcbiAgVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbixcbiAgSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbixcbiAgQXR0YWNobWVudENvbnRleHQsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBwcmV0dHlieXRlcyBmcm9tICdwcmV0dHktYnl0ZXMnO1xuaW1wb3J0IHsgaXNJbWFnZUF0dGFjaG1lbnQgfSBmcm9tICcuLi9pcy1pbWFnZS1hdHRhY2htZW50JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYXR0YWNobWVudC1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUuc2VydmljZSc7XG5cbi8qKlxuICogVGhlIGBBdHRhY2htZW50TGlzdGAgY29tcG9uZW50IGRpc3BsYXlzIHRoZSBhdHRhY2htZW50cyBvZiBhIG1lc3NhZ2VcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLWF0dGFjaG1lbnQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdHRhY2htZW50LWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBdHRhY2htZW50TGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIG1lc3NhZ2UgdGhlIGF0dGFjaG1lbnRzIGJlbG9uZyB0b1xuICAgKi9cbiAgQElucHV0KCkgbWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IGlkIG9mIHRoZSBtZXNzYWdlIHRoZSBhdHRhY2htZW50cyBiZWxvbmcgdG9cbiAgICovXG4gIEBJbnB1dCgpIHBhcmVudE1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIGF0dGFjaG1lbnRzIHRvIGRpc3BsYXlcbiAgICovXG4gIEBJbnB1dCgpIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50PERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+W10gPSBbXTtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBzdGF0ZSBvZiB0aGUgaW1hZ2UgY2Fyb3VzZWwgd2luZG93XG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgaW1hZ2VNb2RhbFN0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICAnb3BlbmVkJyB8ICdjbG9zZWQnXG4gID4oKTtcbiAgQEhvc3RCaW5kaW5nKCkgY2xhc3MgPSAnc3RyLWNoYXRfX2F0dGFjaG1lbnQtbGlzdC1hbmd1bGFyLWhvc3QnO1xuICBvcmRlcmVkQXR0YWNobWVudHM6IEF0dGFjaG1lbnQ8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXSA9IFtdO1xuICBpbWFnZXNUb1ZpZXc6IEF0dGFjaG1lbnQ8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXSA9IFtdO1xuICBpbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXggPSAwO1xuICB0aGVtZVZlcnNpb246ICcxJyB8ICcyJztcbiAgQFZpZXdDaGlsZCgnbW9kYWxDb250ZW50JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBtb2RhbENvbnRlbnQhOiBUZW1wbGF0ZVJlZjx2b2lkPjtcbiAgcHJpdmF0ZSBhdHRhY2htZW50Q29uZmlndXJhdGlvbnM6IE1hcDxcbiAgICBBdHRhY2htZW50LFxuICAgIHwgQXR0YWNobWVudENvbmZpZ3JhdGlvblxuICAgIHwgVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvblxuICAgIHwgSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvblxuICA+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlOiBBdHRhY2htZW50Q29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgdGhlbWVTZXJ2aWNlOiBUaGVtZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy50aGVtZVZlcnNpb24gPSB0aGVtZVNlcnZpY2UudGhlbWVWZXJzaW9uO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmF0dGFjaG1lbnRzKSB7XG4gICAgICBjb25zdCBpbWFnZXMgPSB0aGlzLmF0dGFjaG1lbnRzLmZpbHRlcih0aGlzLmlzSW1hZ2UpO1xuICAgICAgY29uc3QgY29udGFpbnNHYWxsZXJ5ID0gaW1hZ2VzLmxlbmd0aCA+PSAyO1xuICAgICAgdGhpcy5vcmRlcmVkQXR0YWNobWVudHMgPSBbXG4gICAgICAgIC4uLihjb250YWluc0dhbGxlcnkgPyB0aGlzLmNyZWF0ZUdhbGxlcnkoaW1hZ2VzKSA6IGltYWdlcyksXG4gICAgICAgIC4uLnRoaXMuYXR0YWNobWVudHMuZmlsdGVyKChhKSA9PiB0aGlzLmlzVmlkZW8oYSkpLFxuICAgICAgICAuLi50aGlzLmF0dGFjaG1lbnRzLmZpbHRlcigoYSkgPT4gdGhpcy5pc0ZpbGUoYSkpLFxuICAgICAgXTtcbiAgICAgIHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25zID0gbmV3IE1hcCgpO1xuICAgICAgLy8gRGlzcGxheSBsaW5rIGF0dGFjaG1lbnRzIG9ubHkgaWYgdGhlcmUgYXJlIG5vIG90aGVyIGF0dGFjaG1lbnRzXG4gICAgICAvLyBHaXBoeS1zIGFsd2F5cyBzZW50IHdpdGhvdXQgb3RoZXIgYXR0YWNobWVudHNcbiAgICAgIGlmICh0aGlzLm9yZGVyZWRBdHRhY2htZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5vcmRlcmVkQXR0YWNobWVudHMucHVzaChcbiAgICAgICAgICAuLi50aGlzLmF0dGFjaG1lbnRzLmZpbHRlcigoYSkgPT4gdGhpcy5pc0NhcmQoYSkpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdHJhY2tCeVVybChfOiBudW1iZXIsIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXR0YWNobWVudC5pbWFnZV91cmwgfHxcbiAgICAgIGF0dGFjaG1lbnQuaW1nX3VybCB8fFxuICAgICAgYXR0YWNobWVudC5hc3NldF91cmwgfHxcbiAgICAgIGF0dGFjaG1lbnQudGh1bWJfdXJsXG4gICAgKTtcbiAgfVxuXG4gIGlzSW1hZ2UoYXR0YWNobWVudDogQXR0YWNobWVudCkge1xuICAgIHJldHVybiBpc0ltYWdlQXR0YWNobWVudChhdHRhY2htZW50KTtcbiAgfVxuXG4gIGlzU3ZnKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGF0dGFjaG1lbnQuZmFsbGJhY2sgfHwgJyc7XG4gICAgcmV0dXJuICEhZmlsZW5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLnN2ZycpO1xuICB9XG5cbiAgaXNGaWxlKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcbiAgICByZXR1cm4gYXR0YWNobWVudC50eXBlID09PSAnZmlsZSc7XG4gIH1cblxuICBpc0dhbGxlcnkoYXR0YWNobWVudDogQXR0YWNobWVudCkge1xuICAgIHJldHVybiBhdHRhY2htZW50LnR5cGUgPT09ICdnYWxsZXJ5JztcbiAgfVxuXG4gIGlzVmlkZW8oYXR0YWNobWVudDogQXR0YWNobWVudCkge1xuICAgIHJldHVybiAoXG4gICAgICBhdHRhY2htZW50LnR5cGUgPT09ICd2aWRlbycgJiZcbiAgICAgIGF0dGFjaG1lbnQuYXNzZXRfdXJsICYmXG4gICAgICAhYXR0YWNobWVudC5vZ19zY3JhcGVfdXJsIC8vIGxpbmtzIGZyb20gdmlkZW8gc2hhcmUgc2VydmljZXMgKHN1Y2ggYXMgWW91VHViZSBvciBGYWNlYm9vaykgYXJlIGNhbid0IGJlIHBsYXllZFxuICAgICk7XG4gIH1cblxuICBpc0NhcmQoYXR0YWNobWVudDogQXR0YWNobWVudCkge1xuICAgIHJldHVybiAoXG4gICAgICAhYXR0YWNobWVudC50eXBlIHx8XG4gICAgICAoYXR0YWNobWVudC50eXBlID09PSAnaW1hZ2UnICYmICF0aGlzLmlzSW1hZ2UoYXR0YWNobWVudCkpIHx8XG4gICAgICBhdHRhY2htZW50LnR5cGUgPT09ICdnaXBoeSdcbiAgICApO1xuICB9XG5cbiAgaGFzRmlsZVNpemUoYXR0YWNobWVudDogQXR0YWNobWVudDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPikge1xuICAgIHJldHVybiAoXG4gICAgICBhdHRhY2htZW50LmZpbGVfc2l6ZSAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKGF0dGFjaG1lbnQuZmlsZV9zaXplKSlcbiAgICApO1xuICB9XG5cbiAgZ2V0RmlsZVNpemUoYXR0YWNobWVudDogQXR0YWNobWVudDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPikge1xuICAgIHJldHVybiBwcmV0dHlieXRlcyhOdW1iZXIoYXR0YWNobWVudC5maWxlX3NpemUhKSk7XG4gIH1cblxuICBnZXRNb2RhbENvbnRleHQoKTogTW9kYWxDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNPcGVuOiB0aGlzLmltYWdlc1RvVmlldyAmJiB0aGlzLmltYWdlc1RvVmlldy5sZW5ndGggPiAwLFxuICAgICAgaXNPcGVuQ2hhbmdlSGFuZGxlcjogKGlzT3BlbikgPT4gKGlzT3BlbiA/IG51bGwgOiB0aGlzLmNsb3NlSW1hZ2VNb2RhbCgpKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMubW9kYWxDb250ZW50LFxuICAgIH07XG4gIH1cblxuICB0cmltVXJsKHVybD86IHN0cmluZyB8IG51bGwpIHtcbiAgICBpZiAodXJsICE9PSB1bmRlZmluZWQgJiYgdXJsICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBbdHJpbW1lZFVybF0gPSB1cmxcbiAgICAgICAgLnJlcGxhY2UoL14oPzpodHRwcz86XFwvXFwvKT8oPzp3d3dcXC4pPy9pLCAnJylcbiAgICAgICAgLnNwbGl0KCcvJyk7XG5cbiAgICAgIHJldHVybiB0cmltbWVkVXJsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHNlbmRBY3Rpb24oYWN0aW9uOiBBY3Rpb24pIHtcbiAgICB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2Uuc2VuZEFjdGlvbihcbiAgICAgIHRoaXMubWVzc2FnZUlkISxcbiAgICAgIHtcbiAgICAgICAgW2FjdGlvbi5uYW1lIV06IGFjdGlvbi52YWx1ZSEsXG4gICAgICB9LFxuICAgICAgdGhpcy5wYXJlbnRNZXNzYWdlSWRcbiAgICApO1xuICB9XG5cbiAgdHJhY2tCeUFjdGlvblZhbHVlKF86IG51bWJlciwgaXRlbTogQWN0aW9uKSB7XG4gICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gIH1cblxuICBvcGVuSW1hZ2VNb2RhbChhdHRhY2htZW50czogQXR0YWNobWVudFtdLCBzZWxlY3RlZEluZGV4ID0gMCkge1xuICAgIHRoaXMuaW1hZ2VNb2RhbFN0YXRlQ2hhbmdlLm5leHQoJ29wZW5lZCcpO1xuICAgIHRoaXMuaW1hZ2VzVG9WaWV3ID0gYXR0YWNobWVudHM7XG4gICAgdGhpcy5pbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXggPSBzZWxlY3RlZEluZGV4O1xuICB9XG5cbiAgc3RlcEltYWdlcyhkaXI6IC0xIHwgMSkge1xuICAgIHRoaXMuaW1hZ2VzVG9WaWV3Q3VycmVudEluZGV4ICs9IGRpciAqIDE7XG4gIH1cblxuICB0cmFja0J5SW1hZ2VVcmwoXzogbnVtYmVyLCBpdGVtOiBBdHRhY2htZW50KSB7XG4gICAgcmV0dXJuIGl0ZW0uaW1hZ2VfdXJsIHx8IGl0ZW0uaW1nX3VybCB8fCBpdGVtLnRodW1iX3VybDtcbiAgfVxuXG4gIGdldEF0dGFjaG1lbnRDb250ZXh0KFxuICAgIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQ8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5cbiAgKTogQXR0YWNobWVudENvbnRleHQge1xuICAgIHJldHVybiB7IGF0dGFjaG1lbnQgfTtcbiAgfVxuXG4gIGdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgYXR0YWNobWVudDogQXR0YWNobWVudCxcbiAgICB0eXBlOiAnZ2FsbGVyeScgfCAnc2luZ2xlJyxcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudFxuICApOiBJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBleGlzdGluZ0NvbmZpZ3VyYXRpb24gPSB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9ucy5nZXQoYXR0YWNobWVudCk7XG4gICAgaWYgKGV4aXN0aW5nQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nQ29uZmlndXJhdGlvbiBhcyBJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uO1xuICAgIH1cbiAgICBjb25zdCBjb25maWd1cmF0aW9uID1cbiAgICAgIHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgIGF0dGFjaG1lbnQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGVsZW1lbnRcbiAgICAgICk7XG4gICAgdGhpcy5hdHRhY2htZW50Q29uZmlndXJhdGlvbnMuc2V0KGF0dGFjaG1lbnQsIGNvbmZpZ3VyYXRpb24pO1xuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICB9XG5cbiAgZ2V0Q2Fyb3VzZWxJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQsXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnRcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICBhdHRhY2htZW50LFxuICAgICAgJ2Nhcm91c2VsJyxcbiAgICAgIGVsZW1lbnRcbiAgICApO1xuICB9XG5cbiAgZ2V0VmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICBhdHRhY2htZW50OiBBdHRhY2htZW50LFxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50XG4gICk6IFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IGV4aXN0aW5nQ29uZmlndXJhdGlvbiA9IHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25zLmdldChhdHRhY2htZW50KTtcbiAgICBpZiAoZXhpc3RpbmdDb25maWd1cmF0aW9uKSB7XG4gICAgICByZXR1cm4gZXhpc3RpbmdDb25maWd1cmF0aW9uIGFzIFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb247XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPVxuICAgICAgdGhpcy5hdHRhY2htZW50Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgYXR0YWNobWVudCxcbiAgICAgICAgZWxlbWVudFxuICAgICAgKTtcbiAgICB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9ucy5zZXQoYXR0YWNobWVudCwgY29uZmlndXJhdGlvbik7XG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBnZXRDYXJkQXR0YWNobWVudENvbmZpZ3VyYXRpb24oYXR0YWNobWVudDogQXR0YWNobWVudCkge1xuICAgIGNvbnN0IGV4aXN0aW5nQ29uZmlndXJhdGlvbiA9IHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25zLmdldChhdHRhY2htZW50KTtcbiAgICBpZiAoZXhpc3RpbmdDb25maWd1cmF0aW9uKSB7XG4gICAgICByZXR1cm4gZXhpc3RpbmdDb25maWd1cmF0aW9uO1xuICAgIH1cbiAgICBpZiAoYXR0YWNobWVudC50eXBlID09PSAnZ2lwaHknKSB7XG4gICAgICByZXR1cm4gdGhpcy5hdHRhY2htZW50Q29uZmlndXJhdGlvblNlcnZpY2UuZ2V0R2lwaHlBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgYXR0YWNobWVudFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9XG4gICAgICAgIHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFNjcmFwZWRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgIGF0dGFjaG1lbnRcbiAgICAgICAgKTtcbiAgICAgIHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25zLnNldChhdHRhY2htZW50LCBjb25maWd1cmF0aW9uKTtcbiAgICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc0ltYWdlTW9kYWxQcmV2QnV0dG9uVmlzaWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXggIT09IDA7XG4gIH1cblxuICBnZXQgaXNJbWFnZU1vZGFsTmV4dEJ1dHRvblZpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2VzVG9WaWV3Q3VycmVudEluZGV4ICE9PSB0aGlzLmltYWdlc1RvVmlldy5sZW5ndGggLSAxO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVHYWxsZXJ5KGltYWdlczogQXR0YWNobWVudFtdKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2dhbGxlcnknLFxuICAgICAgICBpbWFnZXMsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIGNsb3NlSW1hZ2VNb2RhbCgpIHtcbiAgICB0aGlzLmltYWdlTW9kYWxTdGF0ZUNoYW5nZS5uZXh0KCdjbG9zZWQnKTtcbiAgICB0aGlzLmltYWdlc1RvVmlldyA9IFtdO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwib3JkZXJlZEF0dGFjaG1lbnRzLmxlbmd0aCA+IDBcIiBjbGFzcz1cInN0ci1jaGF0X19hdHRhY2htZW50LWxpc3RcIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIG9yZGVyZWRBdHRhY2htZW50czsgdHJhY2tCeTogdHJhY2tCeVVybFwiXG4gID5cbiAgICA8ZGl2XG4gICAgICBkYXRhLXRlc3RjbGFzcz1cImF0dGFjaG1lbnQtY29udGFpbmVyXCJcbiAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudCBzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LS17e1xuICAgICAgICBhdHRhY2htZW50LnR5cGVcbiAgICAgIH19IHN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtZHluYW1pYy1zaXplXCJcbiAgICAgIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LS1jYXJkXT1cImlzQ2FyZChhdHRhY2htZW50KVwiXG4gICAgICBbY2xhc3Muc3RyLWNoYXQtYW5ndWxhcl9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtc2luZ2xlXT1cIlxuICAgICAgICBpc0ZpbGUoYXR0YWNobWVudClcbiAgICAgIFwiXG4gICAgICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC13aXRoLWFjdGlvbnNdPVwiXG4gICAgICAgIGF0dGFjaG1lbnQuYWN0aW9ucyAmJiBhdHRhY2htZW50LmFjdGlvbnMubGVuZ3RoID4gMFxuICAgICAgXCJcbiAgICAgIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LS1zdmctaW1hZ2VdPVwiaXNTdmcoYXR0YWNobWVudClcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0ltYWdlKGF0dGFjaG1lbnQpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuaW1hZ2VBdHRhY2htZW50VGVtcGxhdGUkIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgIGRlZmF1bHRJbWFnZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IGdldEF0dGFjaG1lbnRDb250ZXh0KGF0dGFjaG1lbnQpXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRJbWFnZSBsZXQtYXR0YWNobWVudENvbnRleHQ9XCJhdHRhY2htZW50XCI+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgI2ltZ0VsZW1lbnRcbiAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC0taW1nXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwiaW1hZ2VcIlxuICAgICAgICAgICAgW3NyY109XCJcbiAgICAgICAgICAgICAgZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dCxcbiAgICAgICAgICAgICAgICAnc2luZ2xlJyxcbiAgICAgICAgICAgICAgICBpbWdFbGVtZW50XG4gICAgICAgICAgICAgICkudXJsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2FsdF09XCJhdHRhY2htZW50Q29udGV4dD8uZmFsbGJhY2tcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5JbWFnZU1vZGFsKFthdHRhY2htZW50Q29udGV4dF0pXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvcGVuSW1hZ2VNb2RhbChbYXR0YWNobWVudENvbnRleHRdKVwiXG4gICAgICAgICAgICBbc3R5bGUuLS1vcmlnaW5hbC1oZWlnaHRdPVwiXG4gICAgICAgICAgICAgIGdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudENvbnRleHQsXG4gICAgICAgICAgICAgICAgJ3NpbmdsZScsXG4gICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICApLm9yaWdpbmFsSGVpZ2h0XG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW3N0eWxlLi0tb3JpZ2luYWwtd2lkdGhdPVwiXG4gICAgICAgICAgICAgIGdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudENvbnRleHQsXG4gICAgICAgICAgICAgICAgJ3NpbmdsZScsXG4gICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICApLm9yaWdpbmFsV2lkdGhcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIGhlaWdodDogZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dCxcbiAgICAgICAgICAgICAgICAnc2luZ2xlJyxcbiAgICAgICAgICAgICAgICBpbWdFbGVtZW50XG4gICAgICAgICAgICAgICkuaGVpZ2h0LFxuICAgICAgICAgICAgICB3aWR0aDogZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dCxcbiAgICAgICAgICAgICAgICAnc2luZ2xlJyxcbiAgICAgICAgICAgICAgICBpbWdFbGVtZW50XG4gICAgICAgICAgICAgICkud2lkdGhcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0dhbGxlcnkoYXR0YWNobWVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS5nYWxsZXJ5QXR0YWNobWVudFRlbXBsYXRlJCB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICBkZWZhdWx0R2FsbGVyeTtcbiAgICAgICAgICAgIGNvbnRleHQ6IGdldEF0dGFjaG1lbnRDb250ZXh0KGF0dGFjaG1lbnQpXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRHYWxsZXJ5IGxldC1hdHRhY2htZW50Q29udGV4dD1cImF0dGFjaG1lbnRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19nYWxsZXJ5XCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiaW1hZ2UtZ2FsbGVyeVwiXG4gICAgICAgICAgICBbY2xhc3Muc3RyLWNoYXRfX2dhbGxlcnktLXNxdWFyZV09XCJcbiAgICAgICAgICAgICAgKGF0dGFjaG1lbnRDb250ZXh0Py5pbWFnZXMpIS5sZW5ndGggPiAzXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2NsYXNzLnN0ci1jaGF0X19nYWxsZXJ5LXR3by1yb3dzXT1cIlxuICAgICAgICAgICAgICAoYXR0YWNobWVudENvbnRleHQ/LmltYWdlcykhLmxlbmd0aCA+IDJcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgZ2FsbGVyeUltYWdlIG9mIGF0dGFjaG1lbnRDb250ZXh0LmltYWdlcztcbiAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICBsZXQgaXNMYXN0ID0gbGFzdDtcbiAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5SW1hZ2VVcmxcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaW5kZXggPCAzIHx8IChpbmRleCA9PT0gMyAmJiBpc0xhc3QpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19nYWxsZXJ5LWltYWdlXCJcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImdhbGxlcnktaW1hZ2VcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW1hZ2VNb2RhbChhdHRhY2htZW50Q29udGV4dC5pbWFnZXMhLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvcGVuSW1hZ2VNb2RhbChhdHRhY2htZW50Q29udGV4dC5pbWFnZXMhLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LS1zdmctaW1hZ2VdPVwiXG4gICAgICAgICAgICAgICAgICBpc1N2ZyhnYWxsZXJ5SW1hZ2UpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICNpbWdFbGVtZW50XG4gICAgICAgICAgICAgICAgICBbc3JjXT1cIlxuICAgICAgICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGdhbGxlcnlJbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAnZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICApLnVybFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFthbHRdPVwiZ2FsbGVyeUltYWdlLmZhbGxiYWNrXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLWhlaWdodF09XCJcbiAgICAgICAgICAgICAgICAgICAgZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgJ2dhbGxlcnknLFxuICAgICAgICAgICAgICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgKS5vcmlnaW5hbEhlaWdodFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLXdpZHRoXT1cIlxuICAgICAgICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGdhbGxlcnlJbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAnZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICApLm9yaWdpbmFsV2lkdGhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgJ2dhbGxlcnknLFxuICAgICAgICAgICAgICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgKS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGdhbGxlcnlJbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAnZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICApLndpZHRoXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICNlbGVtZW50XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpbmRleCA9PT0gMyAmJiAhaXNMYXN0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19nYWxsZXJ5LXBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImdhbGxlcnktaW1hZ2VcIlxuICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9yZS1pbWFnZS1idXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW1hZ2VNb2RhbChhdHRhY2htZW50Q29udGV4dC5pbWFnZXMhLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvcGVuSW1hZ2VNb2RhbChhdHRhY2htZW50Q29udGV4dC5pbWFnZXMhLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LS1zdmctaW1hZ2VdPVwiXG4gICAgICAgICAgICAgICAgICBpc1N2ZyhnYWxsZXJ5SW1hZ2UpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuLS1vcmlnaW5hbC1oZWlnaHRdPVwiXG4gICAgICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICdnYWxsZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgKS5vcmlnaW5hbEhlaWdodFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLi0tb3JpZ2luYWwtd2lkdGhdPVwiXG4gICAgICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICdnYWxsZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgKS5vcmlnaW5hbFdpZHRoXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1pbWFnZSc6XG4gICAgICAgICAgICAgICAgICAgICd1cmwoJyArXG4gICAgICAgICAgICAgICAgICAgIGdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgZ2FsbGVyeUltYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICdnYWxsZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICkudXJsICtcbiAgICAgICAgICAgICAgICAgICAgJyknLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICdnYWxsZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgKS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgZ2FsbGVyeUltYWdlLFxuICAgICAgICAgICAgICAgICAgICAnZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICkud2lkdGhcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAgICAgICAnc3RyZWFtQ2hhdC57eyBpbWFnZUNvdW50IH19IG1vcmUnXG4gICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogeyBpbWFnZUNvdW50OiBhdHRhY2htZW50Q29udGV4dCEuaW1hZ2VzIS5sZW5ndGggLSA0IH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvcD5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVmlkZW8oYXR0YWNobWVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS52aWRlb0F0dGFjaG1lbnRUZW1wbGF0ZSQgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgZGVmYXVsdFZpZGVvO1xuICAgICAgICAgICAgY29udGV4dDogZ2V0QXR0YWNobWVudENvbnRleHQoYXR0YWNobWVudClcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFZpZGVvIGxldC1hdHRhY2htZW50Q29udGV4dD1cImF0dGFjaG1lbnRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19wbGF5ZXItd3JhcHBlclwiXG4gICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cInZpZGVvLWF0dGFjaG1lbnQtcGFyZW50XCJcbiAgICAgICAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLWhlaWdodF09XCJcbiAgICAgICAgICAgICAgZ2V0VmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbihhdHRhY2htZW50Q29udGV4dCwgdmlkZW9FbGVtZW50KVxuICAgICAgICAgICAgICAgIC5vcmlnaW5hbEhlaWdodFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLXdpZHRoXT1cIlxuICAgICAgICAgICAgICBnZXRWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uKGF0dGFjaG1lbnRDb250ZXh0LCB2aWRlb0VsZW1lbnQpXG4gICAgICAgICAgICAgICAgLm9yaWdpbmFsV2lkdGhcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIGhlaWdodDogZ2V0VmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dCxcbiAgICAgICAgICAgICAgICB2aWRlb0VsZW1lbnRcbiAgICAgICAgICAgICAgKS5oZWlnaHQsXG4gICAgICAgICAgICAgIHdpZHRoOiBnZXRWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRDb250ZXh0LFxuICAgICAgICAgICAgICAgIHZpZGVvRWxlbWVudFxuICAgICAgICAgICAgICApLndpZHRoXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dmlkZW9cbiAgICAgICAgICAgICAgI3ZpZGVvRWxlbWVudFxuICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X192aWRlby1hbmd1bGFyXCJcbiAgICAgICAgICAgICAgY29udHJvbHNcbiAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJ2aWRlby1hdHRhY2htZW50XCJcbiAgICAgICAgICAgICAgW3NyY109XCJcbiAgICAgICAgICAgICAgICBnZXRWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uKGF0dGFjaG1lbnRDb250ZXh0LCB2aWRlb0VsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAudXJsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtwb3N0ZXJdPVwiXG4gICAgICAgICAgICAgICAgZ2V0VmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbihhdHRhY2htZW50Q29udGV4dCwgdmlkZW9FbGVtZW50KVxuICAgICAgICAgICAgICAgICAgLnRodW1iVXJsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC92aWRlbz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRmlsZShhdHRhY2htZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLmZpbGVBdHRhY2htZW50VGVtcGxhdGUkIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgIGRlZmF1bHRGaWxlO1xuICAgICAgICAgICAgY29udGV4dDogZ2V0QXR0YWNobWVudENvbnRleHQoYXR0YWNobWVudClcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEZpbGUgbGV0LWF0dGFjaG1lbnRDb250ZXh0PVwiYXR0YWNobWVudFwiPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtLWl0ZW1cbiAgICAgICAgICAgICAgc3RyLWNoYXQtYW5ndWxhcl9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtc2luZ2xlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjogbm9uZVwiXG4gICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImZpbGUtbGlua1wiXG4gICAgICAgICAgICBocmVmPVwie3sgYXR0YWNobWVudENvbnRleHQuYXNzZXRfdXJsIH19XCJcbiAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICpuZ0lmPVwidGhlbWVWZXJzaW9uID09PSAnMSdcIlxuICAgICAgICAgICAgICBpY29uPVwiZmlsZVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cIjMwXCJcbiAgICAgICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICpuZ0lmPVwidGhlbWVWZXJzaW9uID09PSAnMidcIlxuICAgICAgICAgICAgICBpY29uPVwidW5zcGVjaWZpZWQtZmlsZXR5cGVcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCIzMFwiXG4gICAgICAgICAgICA+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtLWl0ZW0tdGV4dFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1maWxlLS1pdGVtLWZpcnN0LXJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwiZmlsZS10aXRsZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtZmlsZS0taXRlbS1uYW1lXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRhY2htZW50Q29udGV4dC50aXRsZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gVGVtcG9yYXJ5IGRpc2FibGVkLCB3aWxsIGJlIGZpeGVkIHdpdGggdGhpczogaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2lzc3Vlcy8zOTMgIC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gPGFcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtLWl0ZW0tZG93bmxvYWRcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImZpbGUtbGlua1wiXG4gICAgICAgICAgICAgIGRvd25sb2FkXG4gICAgICAgICAgICAgIGhyZWY9XCJ7eyBhdHRhY2htZW50LmFzc2V0X3VybCB9fVwiXG4gICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1kb3dubG9hZC1pY29uXCJcbiAgICAgICAgICAgICAgICBpY29uPVwiZG93bmxvYWRcIlxuICAgICAgICAgICAgICA+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICAgIDwvYT4gLS0+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1maWxlLS1pdGVtLXNpemVcIlxuICAgICAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwic2l6ZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNGaWxlU2l6ZShhdHRhY2htZW50Q29udGV4dClcIlxuICAgICAgICAgICAgICAgID57eyBnZXRGaWxlU2l6ZShhdHRhY2htZW50Q29udGV4dCkgfX08L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgaXNDYXJkKGF0dGFjaG1lbnQpICYmXG4gICAgICAgICAgZ2V0Q2FyZEF0dGFjaG1lbnRDb25maWd1cmF0aW9uKGF0dGFjaG1lbnQpIGFzIGF0dGFjaG1lbnRDb25maWd1cmF0aW9uXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuY2FyZEF0dGFjaG1lbnRUZW1wbGF0ZSQgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgZGVmYXVsdENhcmQ7XG4gICAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50Q29udGV4dChhdHRhY2htZW50KVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2FyZCBsZXQtYXR0YWNobWVudENvbnRleHQ9XCJhdHRhY2htZW50XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWNhcmQgc3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1jYXJkLS17e1xuICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dC50eXBlXG4gICAgICAgICAgICB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cImF0dGFjaG1lbnRDb25maWd1cmF0aW9uLnVybFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1jYXJkLS1oZWFkZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJjYXJkLWltZ1wiXG4gICAgICAgICAgICAgICAgYWx0PVwie3sgYXR0YWNobWVudENvbmZpZ3VyYXRpb24udXJsIH19XCJcbiAgICAgICAgICAgICAgICBzcmM9XCJ7eyBhdHRhY2htZW50Q29uZmlndXJhdGlvbi51cmwgfX1cIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogYXR0YWNobWVudENvbmZpZ3VyYXRpb24uaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IGF0dGFjaG1lbnRDb25maWd1cmF0aW9uLndpZHRoXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWNhcmQtLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtY2FyZC0tZmxleFwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYXR0YWNobWVudENvbnRleHQudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJjYXJkLXRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1jYXJkLS10aXRsZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgYXR0YWNobWVudENvbnRleHQudGl0bGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImF0dGFjaG1lbnRDb250ZXh0LnRleHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWNhcmQtLXRleHRcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJjYXJkLXRleHRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGF0dGFjaG1lbnRDb250ZXh0LnRleHQgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWNhcmQtLXVybFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dC50aXRsZV9saW5rIHx8XG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRDb250ZXh0Lm9nX3NjcmFwZV91cmxcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cInVybC1saW5rXCJcbiAgICAgICAgICAgICAgICAgIG5vb3BlbmVyXG4gICAgICAgICAgICAgICAgICBub3JlZmVycmVyXG4gICAgICAgICAgICAgICAgICBocmVmPVwie3tcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudENvbnRleHQudGl0bGVfbGluayB8fFxuICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRDb250ZXh0Lm9nX3NjcmFwZV91cmxcbiAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgdHJpbVVybChcbiAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dC50aXRsZV9saW5rIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dC5vZ19zY3JhcGVfdXJsXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXR0YWNobWVudC5hY3Rpb25zICYmIGF0dGFjaG1lbnQuYWN0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuYXR0YWNobWVudEFjdGlvbnNUZW1wbGF0ZSQgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgZGVmYXVsdEFjdGlvbnM7XG4gICAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50Q29udGV4dChhdHRhY2htZW50KVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0QWN0aW9ucyBsZXQtYXR0YWNobWVudENvbnRleHQ9XCJhdHRhY2htZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtYWN0aW9uc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtYWN0aW9ucy1mb3JtXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBhY3Rpb24gb2YgYXR0YWNobWVudENvbnRleHQuYWN0aW9ucztcbiAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlBY3Rpb25WYWx1ZVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWFjdGlvbnMtYnV0dG9uIHN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtYWN0aW9ucy1idXR0b24tLXt7XG4gICAgICAgICAgICAgICAgICBhY3Rpb24uc3R5bGVcbiAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJhdHRhY2htZW50LWFjdGlvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbmRBY3Rpb24oYWN0aW9uKVwiXG4gICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbmRBY3Rpb24oYWN0aW9uKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBhY3Rpb24udGV4dCB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpbWFnZXNUb1ZpZXcgJiYgaW1hZ2VzVG9WaWV3Lmxlbmd0aCA+IDBcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tb2RhbFRlbXBsYXRlJCB8IGFzeW5jKSB8fCBkZWZhdWx0TW9kYWw7XG4gICAgICAgIGNvbnRleHQ6IGdldE1vZGFsQ29udGV4dCgpXG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gICNkZWZhdWx0TW9kYWxcbiAgbGV0LWlzT3Blbj1cImlzT3BlblwiXG4gIGxldC1pc09wZW5DaGFuZ2VIYW5kbGVyPVwiaXNPcGVuQ2hhbmdlSGFuZGxlclwiXG4gIGxldC1jb250ZW50PVwiY29udGVudFwiXG4+XG4gIDxzdHJlYW0tbW9kYWxcbiAgICBjbGFzcz1cInN0cmVhbS1jaGF0LWFuZ3VsYXJfX2ltYWdlLW1vZGFsLWhvc3RcIlxuICAgIFtpc09wZW5dPVwiaXNPcGVuXCJcbiAgICAoaXNPcGVuQ2hhbmdlKT1cImlzT3BlbkNoYW5nZUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgW2NvbnRlbnRdPVwiY29udGVudFwiXG4gID5cbiAgPC9zdHJlYW0tbW9kYWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21vZGFsQ29udGVudD5cbiAgPGRpdiBjbGFzcz1cInN0cmVhbS1jaGF0LWFuZ3VsYXJfX2ltYWdlLW1vZGFsIHN0ci1jaGF0X19pbWFnZS1jYXJvdXNlbFwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiXG4gICAgICAgIHN0cmVhbS1jaGF0LWFuZ3VsYXJfX2ltYWdlLW1vZGFsLXN0ZXBwZXJcbiAgICAgICAgc3RyLWNoYXRfX2ltYWdlLWNhcm91c2VsLXN0ZXBwZXJcbiAgICAgIFwiXG4gICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgIHZpc2liaWxpdHk6IGlzSW1hZ2VNb2RhbFByZXZCdXR0b25WaXNpYmxlID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcbiAgICAgIH1cIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbWFnZS1tb2RhbC1wcmV2XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cInN0ZXBJbWFnZXMoLTEpXCJcbiAgICAgIChrZXl1cC5lbnRlcik9XCJzdGVwSW1hZ2VzKC0xKVwiXG4gICAgPlxuICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyIGljb249XCJhcnJvdy1sZWZ0XCI+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICA8L2J1dHRvbj5cbiAgICA8aW1nXG4gICAgICAjaW1nRWxlbWVudFxuICAgICAgY2xhc3M9XCJcbiAgICAgICAgc3RyZWFtLWNoYXQtYW5ndWxhcl9faW1hZ2UtbW9kYWwtaW1hZ2VcbiAgICAgICAgc3RyLWNoYXRfX2ltYWdlLWNhcm91c2VsLWltYWdlXG4gICAgICBcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1pbWFnZVwiXG4gICAgICBbc3JjXT1cIlxuICAgICAgICBnZXRDYXJvdXNlbEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgaW1hZ2VzVG9WaWV3W2ltYWdlc1RvVmlld0N1cnJlbnRJbmRleF0sXG4gICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICApLnVybFxuICAgICAgXCJcbiAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLWhlaWdodF09XCJcbiAgICAgICAgZ2V0Q2Fyb3VzZWxJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgIGltYWdlc1RvVmlld1tpbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXhdLFxuICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgKS5vcmlnaW5hbEhlaWdodFxuICAgICAgXCJcbiAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLXdpZHRoXT1cIlxuICAgICAgICBnZXRDYXJvdXNlbEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgaW1hZ2VzVG9WaWV3W2ltYWdlc1RvVmlld0N1cnJlbnRJbmRleF0sXG4gICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICApLm9yaWdpbmFsV2lkdGhcbiAgICAgIFwiXG4gICAgICBbYWx0XT1cImltYWdlc1RvVmlld1tpbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXhdLmZhbGxiYWNrXCJcbiAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgd2lkdGg6IGdldENhcm91c2VsSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICBpbWFnZXNUb1ZpZXdbaW1hZ2VzVG9WaWV3Q3VycmVudEluZGV4XSxcbiAgICAgICAgICBpbWdFbGVtZW50XG4gICAgICAgICkud2lkdGgsXG4gICAgICAgIGhlaWdodDogZ2V0Q2Fyb3VzZWxJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgIGltYWdlc1RvVmlld1tpbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXhdLFxuICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgKS5oZWlnaHRcbiAgICAgIH1cIlxuICAgIC8+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJcbiAgICAgICAgc3RyZWFtLWNoYXQtYW5ndWxhcl9faW1hZ2UtbW9kYWwtc3RlcHBlclxuICAgICAgICBzdHItY2hhdF9faW1hZ2UtY2Fyb3VzZWwtc3RlcHBlclxuICAgICAgXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICB2aXNpYmlsaXR5OiBpc0ltYWdlTW9kYWxOZXh0QnV0dG9uVmlzaWJsZSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXG4gICAgICB9XCJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW1hZ2UtbW9kYWwtbmV4dFwiXG4gICAgICAoY2xpY2spPVwic3RlcEltYWdlcygxKVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwic3RlcEltYWdlcygxKVwiXG4gICAgPlxuICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyIGljb249XCJhcnJvdy1yaWdodFwiPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdHRhY2htZW50LWxpc3QvYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdHRhY2htZW50LWxpc3QvYXR0YWNobWVudC1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUdOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQVV2QixPQUFPLFdBQVcsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7QUFNM0Q7O0dBRUc7QUFNSCxNQUFNLE9BQU8sdUJBQXVCO0lBaUNsQyxZQUNrQixzQkFBOEMsRUFDdEQsY0FBOEIsRUFDOUIsOEJBQThELEVBQ3RFLFlBQTBCO1FBSFYsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN0RCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsbUNBQThCLEdBQTlCLDhCQUE4QixDQUFnQztRQTNCeEU7O1dBRUc7UUFDTSxnQkFBVyxHQUE0QyxFQUFFLENBQUM7UUFDbkU7O1dBRUc7UUFDZ0IsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBRXhELENBQUM7UUFDVyxVQUFLLEdBQUcsd0NBQXdDLENBQUM7UUFDaEUsdUJBQWtCLEdBQTRDLEVBQUUsQ0FBQztRQUNqRSxpQkFBWSxHQUE0QyxFQUFFLENBQUM7UUFDM0QsNkJBQXdCLEdBQUcsQ0FBQyxDQUFDO1FBSXJCLDZCQUF3QixHQUs1QixJQUFJLEdBQUcsRUFBRSxDQUFD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QUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxhQUFhLENBQUMsTUFBb0I7UUFDeEMsT0FBTztZQUNMO2dCQUNFLElBQUksRUFBRSxTQUFTO2dCQUNmLE1BQU07YUFDUDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7O29IQTVQVSx1QkFBdUI7d0dBQXZCLHVCQUF1QixpYUNuQ3BDLDQva0JBd2dCQTsyRkRyZWEsdUJBQXVCO2tCQUxuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFdBQVcsRUFBRSxrQ0FBa0M7b0JBQy9DLE1BQU0sRUFBRSxFQUFFO2lCQUNYO2tOQUtVLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSUcsZUFBZTtzQkFBdkIsS0FBSztnQkFJRyxXQUFXO3NCQUFuQixLQUFLO2dCQUlhLHFCQUFxQjtzQkFBdkMsTUFBTTtnQkFHUSxLQUFLO3NCQUFuQixXQUFXO2dCQU1KLFlBQVk7c0JBRG5CLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvbiwgQXR0YWNobWVudCB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7XG4gIE1vZGFsQ29udGV4dCxcbiAgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyxcbiAgQXR0YWNobWVudENvbmZpZ3JhdGlvbixcbiAgVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbixcbiAgSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbixcbiAgQXR0YWNobWVudENvbnRleHQsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBwcmV0dHlieXRlcyBmcm9tICdwcmV0dHktYnl0ZXMnO1xuaW1wb3J0IHsgaXNJbWFnZUF0dGFjaG1lbnQgfSBmcm9tICcuLi9pcy1pbWFnZS1hdHRhY2htZW50JztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhbm5lbC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYXR0YWNobWVudC1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUuc2VydmljZSc7XG5cbi8qKlxuICogVGhlIGBBdHRhY2htZW50TGlzdGAgY29tcG9uZW50IGRpc3BsYXlzIHRoZSBhdHRhY2htZW50cyBvZiBhIG1lc3NhZ2VcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLWF0dGFjaG1lbnQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdHRhY2htZW50LWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBdHRhY2htZW50TGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIG1lc3NhZ2UgdGhlIGF0dGFjaG1lbnRzIGJlbG9uZyB0b1xuICAgKi9cbiAgQElucHV0KCkgbWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IGlkIG9mIHRoZSBtZXNzYWdlIHRoZSBhdHRhY2htZW50cyBiZWxvbmcgdG9cbiAgICovXG4gIEBJbnB1dCgpIHBhcmVudE1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIGF0dGFjaG1lbnRzIHRvIGRpc3BsYXlcbiAgICovXG4gIEBJbnB1dCgpIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50PERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+W10gPSBbXTtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBzdGF0ZSBvZiB0aGUgaW1hZ2UgY2Fyb3VzZWwgd2luZG93XG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgaW1hZ2VNb2RhbFN0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICAnb3BlbmVkJyB8ICdjbG9zZWQnXG4gID4oKTtcbiAgQEhvc3RCaW5kaW5nKCkgY2xhc3MgPSAnc3RyLWNoYXRfX2F0dGFjaG1lbnQtbGlzdC1hbmd1bGFyLWhvc3QnO1xuICBvcmRlcmVkQXR0YWNobWVudHM6IEF0dGFjaG1lbnQ8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXSA9IFtdO1xuICBpbWFnZXNUb1ZpZXc6IEF0dGFjaG1lbnQ8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXSA9IFtdO1xuICBpbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXggPSAwO1xuICB0aGVtZVZlcnNpb246ICcxJyB8ICcyJztcbiAgQFZpZXdDaGlsZCgnbW9kYWxDb250ZW50JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBtb2RhbENvbnRlbnQhOiBUZW1wbGF0ZVJlZjx2b2lkPjtcbiAgcHJpdmF0ZSBhdHRhY2htZW50Q29uZmlndXJhdGlvbnM6IE1hcDxcbiAgICBBdHRhY2htZW50LFxuICAgIHwgQXR0YWNobWVudENvbmZpZ3JhdGlvblxuICAgIHwgVmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvblxuICAgIHwgSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvblxuICA+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlOiBBdHRhY2htZW50Q29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgdGhlbWVTZXJ2aWNlOiBUaGVtZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy50aGVtZVZlcnNpb24gPSB0aGVtZVNlcnZpY2UudGhlbWVWZXJzaW9uO1xuICB9XG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5hdHRhY2htZW50cykge1xuICAgICAgY29uc3QgaW1hZ2VzID0gdGhpcy5hdHRhY2htZW50cy5maWx0ZXIodGhpcy5pc0ltYWdlKTtcbiAgICAgIGNvbnN0IGNvbnRhaW5zR2FsbGVyeSA9IGltYWdlcy5sZW5ndGggPj0gMjtcbiAgICAgIHRoaXMub3JkZXJlZEF0dGFjaG1lbnRzID0gW1xuICAgICAgICAuLi4oY29udGFpbnNHYWxsZXJ5ID8gdGhpcy5jcmVhdGVHYWxsZXJ5KGltYWdlcykgOiBpbWFnZXMpLFxuICAgICAgICAuLi50aGlzLmF0dGFjaG1lbnRzLmZpbHRlcigoYSkgPT4gdGhpcy5pc1ZpZGVvKGEpKSxcbiAgICAgICAgLi4udGhpcy5hdHRhY2htZW50cy5maWx0ZXIoKGEpID0+IHRoaXMuaXNGaWxlKGEpKSxcbiAgICAgIF07XG4gICAgICB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICAgIC8vIERpc3BsYXkgbGluayBhdHRhY2htZW50cyBvbmx5IGlmIHRoZXJlIGFyZSBubyBvdGhlciBhdHRhY2htZW50c1xuICAgICAgLy8gR2lwaHktcyBhbHdheXMgc2VudCB3aXRob3V0IG90aGVyIGF0dGFjaG1lbnRzXG4gICAgICBpZiAodGhpcy5vcmRlcmVkQXR0YWNobWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMub3JkZXJlZEF0dGFjaG1lbnRzLnB1c2goXG4gICAgICAgICAgLi4udGhpcy5hdHRhY2htZW50cy5maWx0ZXIoKGEpID0+IHRoaXMuaXNDYXJkKGEpKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRyYWNrQnlVcmwoXzogbnVtYmVyLCBhdHRhY2htZW50OiBBdHRhY2htZW50KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF0dGFjaG1lbnQuaW1hZ2VfdXJsIHx8XG4gICAgICBhdHRhY2htZW50LmltZ191cmwgfHxcbiAgICAgIGF0dGFjaG1lbnQuYXNzZXRfdXJsIHx8XG4gICAgICBhdHRhY2htZW50LnRodW1iX3VybFxuICAgICk7XG4gIH1cblxuICBpc0ltYWdlKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcbiAgICByZXR1cm4gaXNJbWFnZUF0dGFjaG1lbnQoYXR0YWNobWVudCk7XG4gIH1cblxuICBpc1N2ZyhhdHRhY2htZW50OiBBdHRhY2htZW50KSB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBhdHRhY2htZW50LmZhbGxiYWNrIHx8ICcnO1xuICAgIHJldHVybiAhIWZpbGVuYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJy5zdmcnKTtcbiAgfVxuXG4gIGlzRmlsZShhdHRhY2htZW50OiBBdHRhY2htZW50KSB7XG4gICAgcmV0dXJuIGF0dGFjaG1lbnQudHlwZSA9PT0gJ2ZpbGUnO1xuICB9XG5cbiAgaXNHYWxsZXJ5KGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcbiAgICByZXR1cm4gYXR0YWNobWVudC50eXBlID09PSAnZ2FsbGVyeSc7XG4gIH1cblxuICBpc1ZpZGVvKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXR0YWNobWVudC50eXBlID09PSAndmlkZW8nICYmXG4gICAgICBhdHRhY2htZW50LmFzc2V0X3VybCAmJlxuICAgICAgIWF0dGFjaG1lbnQub2dfc2NyYXBlX3VybCAvLyBsaW5rcyBmcm9tIHZpZGVvIHNoYXJlIHNlcnZpY2VzIChzdWNoIGFzIFlvdVR1YmUgb3IgRmFjZWJvb2spIGFyZSBjYW4ndCBiZSBwbGF5ZWRcbiAgICApO1xuICB9XG5cbiAgaXNDYXJkKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgIWF0dGFjaG1lbnQudHlwZSB8fFxuICAgICAgKGF0dGFjaG1lbnQudHlwZSA9PT0gJ2ltYWdlJyAmJiAhdGhpcy5pc0ltYWdlKGF0dGFjaG1lbnQpKSB8fFxuICAgICAgYXR0YWNobWVudC50eXBlID09PSAnZ2lwaHknXG4gICAgKTtcbiAgfVxuXG4gIGhhc0ZpbGVTaXplKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQ8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz4pIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXR0YWNobWVudC5maWxlX3NpemUgJiYgTnVtYmVyLmlzRmluaXRlKE51bWJlcihhdHRhY2htZW50LmZpbGVfc2l6ZSkpXG4gICAgKTtcbiAgfVxuXG4gIGdldEZpbGVTaXplKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQ8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz4pIHtcbiAgICByZXR1cm4gcHJldHR5Ynl0ZXMoTnVtYmVyKGF0dGFjaG1lbnQuZmlsZV9zaXplISkpO1xuICB9XG5cbiAgZ2V0TW9kYWxDb250ZXh0KCk6IE1vZGFsQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzT3BlbjogdGhpcy5pbWFnZXNUb1ZpZXcgJiYgdGhpcy5pbWFnZXNUb1ZpZXcubGVuZ3RoID4gMCxcbiAgICAgIGlzT3BlbkNoYW5nZUhhbmRsZXI6IChpc09wZW4pID0+IChpc09wZW4gPyBudWxsIDogdGhpcy5jbG9zZUltYWdlTW9kYWwoKSksXG4gICAgICBjb250ZW50OiB0aGlzLm1vZGFsQ29udGVudCxcbiAgICB9O1xuICB9XG5cbiAgdHJpbVVybCh1cmw/OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgaWYgKHVybCAhPT0gdW5kZWZpbmVkICYmIHVybCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgW3RyaW1tZWRVcmxdID0gdXJsXG4gICAgICAgIC5yZXBsYWNlKC9eKD86aHR0cHM/OlxcL1xcLyk/KD86d3d3XFwuKT8vaSwgJycpXG4gICAgICAgIC5zcGxpdCgnLycpO1xuXG4gICAgICByZXR1cm4gdHJpbW1lZFVybDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzZW5kQWN0aW9uKGFjdGlvbjogQWN0aW9uKSB7XG4gICAgdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnNlbmRBY3Rpb24oXG4gICAgICB0aGlzLm1lc3NhZ2VJZCEsXG4gICAgICB7XG4gICAgICAgIFthY3Rpb24ubmFtZSFdOiBhY3Rpb24udmFsdWUhLFxuICAgICAgfSxcbiAgICAgIHRoaXMucGFyZW50TWVzc2FnZUlkXG4gICAgKTtcbiAgfVxuXG4gIHRyYWNrQnlBY3Rpb25WYWx1ZShfOiBudW1iZXIsIGl0ZW06IEFjdGlvbikge1xuICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICB9XG5cbiAgb3BlbkltYWdlTW9kYWwoYXR0YWNobWVudHM6IEF0dGFjaG1lbnRbXSwgc2VsZWN0ZWRJbmRleCA9IDApIHtcbiAgICB0aGlzLmltYWdlTW9kYWxTdGF0ZUNoYW5nZS5uZXh0KCdvcGVuZWQnKTtcbiAgICB0aGlzLmltYWdlc1RvVmlldyA9IGF0dGFjaG1lbnRzO1xuICAgIHRoaXMuaW1hZ2VzVG9WaWV3Q3VycmVudEluZGV4ID0gc2VsZWN0ZWRJbmRleDtcbiAgfVxuXG4gIHN0ZXBJbWFnZXMoZGlyOiAtMSB8IDEpIHtcbiAgICB0aGlzLmltYWdlc1RvVmlld0N1cnJlbnRJbmRleCArPSBkaXIgKiAxO1xuICB9XG5cbiAgdHJhY2tCeUltYWdlVXJsKF86IG51bWJlciwgaXRlbTogQXR0YWNobWVudCkge1xuICAgIHJldHVybiBpdGVtLmltYWdlX3VybCB8fCBpdGVtLmltZ191cmwgfHwgaXRlbS50aHVtYl91cmw7XG4gIH1cblxuICBnZXRBdHRhY2htZW50Q29udGV4dChcbiAgICBhdHRhY2htZW50OiBBdHRhY2htZW50PERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+XG4gICk6IEF0dGFjaG1lbnRDb250ZXh0IHtcbiAgICByZXR1cm4geyBhdHRhY2htZW50IH07XG4gIH1cblxuICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQsXG4gICAgdHlwZTogJ2dhbGxlcnknIHwgJ3NpbmdsZScsXG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnRcbiAgKTogSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgZXhpc3RpbmdDb25maWd1cmF0aW9uID0gdGhpcy5hdHRhY2htZW50Q29uZmlndXJhdGlvbnMuZ2V0KGF0dGFjaG1lbnQpO1xuICAgIGlmIChleGlzdGluZ0NvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHJldHVybiBleGlzdGluZ0NvbmZpZ3VyYXRpb24gYXMgSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbjtcbiAgICB9XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9XG4gICAgICB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9uU2VydmljZS5nZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICBhdHRhY2htZW50LFxuICAgICAgICB0eXBlLFxuICAgICAgICBlbGVtZW50XG4gICAgICApO1xuICAgIHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25zLnNldChhdHRhY2htZW50LCBjb25maWd1cmF0aW9uKTtcbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIGdldENhcm91c2VsSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICBhdHRhY2htZW50OiBBdHRhY2htZW50LFxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50XG4gICkge1xuICAgIHJldHVybiB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9uU2VydmljZS5nZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgYXR0YWNobWVudCxcbiAgICAgICdjYXJvdXNlbCcsXG4gICAgICBlbGVtZW50XG4gICAgKTtcbiAgfVxuXG4gIGdldFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgYXR0YWNobWVudDogQXR0YWNobWVudCxcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudFxuICApOiBWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBleGlzdGluZ0NvbmZpZ3VyYXRpb24gPSB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9ucy5nZXQoYXR0YWNobWVudCk7XG4gICAgaWYgKGV4aXN0aW5nQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nQ29uZmlndXJhdGlvbiBhcyBWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uO1xuICAgIH1cbiAgICBjb25zdCBjb25maWd1cmF0aW9uID1cbiAgICAgIHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZpZGVvQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgIGF0dGFjaG1lbnQsXG4gICAgICAgIGVsZW1lbnRcbiAgICAgICk7XG4gICAgdGhpcy5hdHRhY2htZW50Q29uZmlndXJhdGlvbnMuc2V0KGF0dGFjaG1lbnQsIGNvbmZpZ3VyYXRpb24pO1xuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICB9XG5cbiAgZ2V0Q2FyZEF0dGFjaG1lbnRDb25maWd1cmF0aW9uKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQpIHtcbiAgICBjb25zdCBleGlzdGluZ0NvbmZpZ3VyYXRpb24gPSB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9ucy5nZXQoYXR0YWNobWVudCk7XG4gICAgaWYgKGV4aXN0aW5nQ29uZmlndXJhdGlvbikge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nQ29uZmlndXJhdGlvbjtcbiAgICB9XG4gICAgaWYgKGF0dGFjaG1lbnQudHlwZSA9PT0gJ2dpcGh5Jykge1xuICAgICAgcmV0dXJuIHRoaXMuYXR0YWNobWVudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEdpcGh5QXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgIGF0dGFjaG1lbnRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPVxuICAgICAgICB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9uU2VydmljZS5nZXRTY3JhcGVkSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICBhdHRhY2htZW50XG4gICAgICAgICk7XG4gICAgICB0aGlzLmF0dGFjaG1lbnRDb25maWd1cmF0aW9ucy5zZXQoYXR0YWNobWVudCwgY29uZmlndXJhdGlvbik7XG4gICAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNJbWFnZU1vZGFsUHJldkJ1dHRvblZpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2VzVG9WaWV3Q3VycmVudEluZGV4ICE9PSAwO1xuICB9XG5cbiAgZ2V0IGlzSW1hZ2VNb2RhbE5leHRCdXR0b25WaXNpYmxlKCkge1xuICAgIHJldHVybiB0aGlzLmltYWdlc1RvVmlld0N1cnJlbnRJbmRleCAhPT0gdGhpcy5pbWFnZXNUb1ZpZXcubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlR2FsbGVyeShpbWFnZXM6IEF0dGFjaG1lbnRbXSkge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdnYWxsZXJ5JyxcbiAgICAgICAgaW1hZ2VzLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZUltYWdlTW9kYWwoKSB7XG4gICAgdGhpcy5pbWFnZU1vZGFsU3RhdGVDaGFuZ2UubmV4dCgnY2xvc2VkJyk7XG4gICAgdGhpcy5pbWFnZXNUb1ZpZXcgPSBbXTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIm9yZGVyZWRBdHRhY2htZW50cy5sZW5ndGggPiAwXCIgY2xhc3M9XCJzdHItY2hhdF9fYXR0YWNobWVudC1saXN0XCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBvcmRlcmVkQXR0YWNobWVudHM7IHRyYWNrQnk6IHRyYWNrQnlVcmxcIlxuICA+XG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJhdHRhY2htZW50LWNvbnRhaW5lclwiXG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQgc3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC0te3tcbiAgICAgICAgYXR0YWNobWVudC50eXBlXG4gICAgICB9fSBzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWR5bmFtaWMtc2l6ZVwiXG4gICAgICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC0tY2FyZF09XCJpc0NhcmQoYXR0YWNobWVudClcIlxuICAgICAgW2NsYXNzLnN0ci1jaGF0LWFuZ3VsYXJfX21lc3NhZ2UtYXR0YWNobWVudC1maWxlLXNpbmdsZV09XCJcbiAgICAgICAgaXNGaWxlKGF0dGFjaG1lbnQpXG4gICAgICBcIlxuICAgICAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtd2l0aC1hY3Rpb25zXT1cIlxuICAgICAgICBhdHRhY2htZW50LmFjdGlvbnMgJiYgYXR0YWNobWVudC5hY3Rpb25zLmxlbmd0aCA+IDBcbiAgICAgIFwiXG4gICAgICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC0tc3ZnLWltYWdlXT1cImlzU3ZnKGF0dGFjaG1lbnQpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNJbWFnZShhdHRhY2htZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLmltYWdlQXR0YWNobWVudFRlbXBsYXRlJCB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICBkZWZhdWx0SW1hZ2U7XG4gICAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50Q29udGV4dChhdHRhY2htZW50KVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0SW1hZ2UgbGV0LWF0dGFjaG1lbnRDb250ZXh0PVwiYXR0YWNobWVudFwiPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICNpbWdFbGVtZW50XG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtLWltZ1wiXG4gICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImltYWdlXCJcbiAgICAgICAgICAgIFtzcmNdPVwiXG4gICAgICAgICAgICAgIGdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudENvbnRleHQsXG4gICAgICAgICAgICAgICAgJ3NpbmdsZScsXG4gICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICApLnVybFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFthbHRdPVwiYXR0YWNobWVudENvbnRleHQ/LmZhbGxiYWNrXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW1hZ2VNb2RhbChbYXR0YWNobWVudENvbnRleHRdKVwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib3BlbkltYWdlTW9kYWwoW2F0dGFjaG1lbnRDb250ZXh0XSlcIlxuICAgICAgICAgICAgW3N0eWxlLi0tb3JpZ2luYWwtaGVpZ2h0XT1cIlxuICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRDb250ZXh0LFxuICAgICAgICAgICAgICAgICdzaW5nbGUnLFxuICAgICAgICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgICAgICAgKS5vcmlnaW5hbEhlaWdodFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLXdpZHRoXT1cIlxuICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRDb250ZXh0LFxuICAgICAgICAgICAgICAgICdzaW5nbGUnLFxuICAgICAgICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgICAgICAgKS5vcmlnaW5hbFdpZHRoXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICBoZWlnaHQ6IGdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudENvbnRleHQsXG4gICAgICAgICAgICAgICAgJ3NpbmdsZScsXG4gICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICApLmhlaWdodCxcbiAgICAgICAgICAgICAgd2lkdGg6IGdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudENvbnRleHQsXG4gICAgICAgICAgICAgICAgJ3NpbmdsZScsXG4gICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICApLndpZHRoXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNHYWxsZXJ5KGF0dGFjaG1lbnQpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuZ2FsbGVyeUF0dGFjaG1lbnRUZW1wbGF0ZSQgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgZGVmYXVsdEdhbGxlcnk7XG4gICAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50Q29udGV4dChhdHRhY2htZW50KVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0R2FsbGVyeSBsZXQtYXR0YWNobWVudENvbnRleHQ9XCJhdHRhY2htZW50XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fZ2FsbGVyeVwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImltYWdlLWdhbGxlcnlcIlxuICAgICAgICAgICAgW2NsYXNzLnN0ci1jaGF0X19nYWxsZXJ5LS1zcXVhcmVdPVwiXG4gICAgICAgICAgICAgIChhdHRhY2htZW50Q29udGV4dD8uaW1hZ2VzKSEubGVuZ3RoID4gM1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtjbGFzcy5zdHItY2hhdF9fZ2FsbGVyeS10d28tcm93c109XCJcbiAgICAgICAgICAgICAgKGF0dGFjaG1lbnRDb250ZXh0Py5pbWFnZXMpIS5sZW5ndGggPiAyXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGdhbGxlcnlJbWFnZSBvZiBhdHRhY2htZW50Q29udGV4dC5pbWFnZXM7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgbGV0IGlzTGFzdCA9IGxhc3Q7XG4gICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUltYWdlVXJsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImluZGV4IDwgMyB8fCAoaW5kZXggPT09IDMgJiYgaXNMYXN0KVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fZ2FsbGVyeS1pbWFnZVwiXG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJnYWxsZXJ5LWltYWdlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkltYWdlTW9kYWwoYXR0YWNobWVudENvbnRleHQuaW1hZ2VzISwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib3BlbkltYWdlTW9kYWwoYXR0YWNobWVudENvbnRleHQuaW1hZ2VzISwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC0tc3ZnLWltYWdlXT1cIlxuICAgICAgICAgICAgICAgICAgaXNTdmcoZ2FsbGVyeUltYWdlKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICBmZXRjaHByaW9yaXR5PVwibG93XCJcbiAgICAgICAgICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICAgICNpbWdFbGVtZW50XG4gICAgICAgICAgICAgICAgICBbc3JjXT1cIlxuICAgICAgICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGdhbGxlcnlJbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAnZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICApLnVybFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFthbHRdPVwiZ2FsbGVyeUltYWdlLmZhbGxiYWNrXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLWhlaWdodF09XCJcbiAgICAgICAgICAgICAgICAgICAgZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgJ2dhbGxlcnknLFxuICAgICAgICAgICAgICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgKS5vcmlnaW5hbEhlaWdodFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLXdpZHRoXT1cIlxuICAgICAgICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGdhbGxlcnlJbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAnZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICApLm9yaWdpbmFsV2lkdGhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgJ2dhbGxlcnknLFxuICAgICAgICAgICAgICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgKS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgIGdhbGxlcnlJbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAnZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICApLndpZHRoXG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICNlbGVtZW50XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpbmRleCA9PT0gMyAmJiAhaXNMYXN0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19nYWxsZXJ5LXBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImdhbGxlcnktaW1hZ2VcIlxuICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9yZS1pbWFnZS1idXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW1hZ2VNb2RhbChhdHRhY2htZW50Q29udGV4dC5pbWFnZXMhLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvcGVuSW1hZ2VNb2RhbChhdHRhY2htZW50Q29udGV4dC5pbWFnZXMhLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LS1zdmctaW1hZ2VdPVwiXG4gICAgICAgICAgICAgICAgICBpc1N2ZyhnYWxsZXJ5SW1hZ2UpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuLS1vcmlnaW5hbC1oZWlnaHRdPVwiXG4gICAgICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICdnYWxsZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgKS5vcmlnaW5hbEhlaWdodFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLi0tb3JpZ2luYWwtd2lkdGhdPVwiXG4gICAgICAgICAgICAgICAgICBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICdnYWxsZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgKS5vcmlnaW5hbFdpZHRoXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1pbWFnZSc6XG4gICAgICAgICAgICAgICAgICAgICd1cmwoJyArXG4gICAgICAgICAgICAgICAgICAgIGdldEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgZ2FsbGVyeUltYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICdnYWxsZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICkudXJsICtcbiAgICAgICAgICAgICAgICAgICAgJyknLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBnZXRJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgICAgICBnYWxsZXJ5SW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICdnYWxsZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgKS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogZ2V0SW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgZ2FsbGVyeUltYWdlLFxuICAgICAgICAgICAgICAgICAgICAnZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICkud2lkdGhcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAgICAgICAnc3RyZWFtQ2hhdC57eyBpbWFnZUNvdW50IH19IG1vcmUnXG4gICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogeyBpbWFnZUNvdW50OiBhdHRhY2htZW50Q29udGV4dCEuaW1hZ2VzIS5sZW5ndGggLSA0IH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvcD5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVmlkZW8oYXR0YWNobWVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS52aWRlb0F0dGFjaG1lbnRUZW1wbGF0ZSQgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgZGVmYXVsdFZpZGVvO1xuICAgICAgICAgICAgY29udGV4dDogZ2V0QXR0YWNobWVudENvbnRleHQoYXR0YWNobWVudClcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFZpZGVvIGxldC1hdHRhY2htZW50Q29udGV4dD1cImF0dGFjaG1lbnRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19wbGF5ZXItd3JhcHBlclwiXG4gICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cInZpZGVvLWF0dGFjaG1lbnQtcGFyZW50XCJcbiAgICAgICAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLWhlaWdodF09XCJcbiAgICAgICAgICAgICAgZ2V0VmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbihhdHRhY2htZW50Q29udGV4dCwgdmlkZW9FbGVtZW50KVxuICAgICAgICAgICAgICAgIC5vcmlnaW5hbEhlaWdodFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtzdHlsZS4tLW9yaWdpbmFsLXdpZHRoXT1cIlxuICAgICAgICAgICAgICBnZXRWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uKGF0dGFjaG1lbnRDb250ZXh0LCB2aWRlb0VsZW1lbnQpXG4gICAgICAgICAgICAgICAgLm9yaWdpbmFsV2lkdGhcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgIGhlaWdodDogZ2V0VmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dCxcbiAgICAgICAgICAgICAgICB2aWRlb0VsZW1lbnRcbiAgICAgICAgICAgICAgKS5oZWlnaHQsXG4gICAgICAgICAgICAgIHdpZHRoOiBnZXRWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRDb250ZXh0LFxuICAgICAgICAgICAgICAgIHZpZGVvRWxlbWVudFxuICAgICAgICAgICAgICApLndpZHRoXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dmlkZW9cbiAgICAgICAgICAgICAgI3ZpZGVvRWxlbWVudFxuICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X192aWRlby1hbmd1bGFyXCJcbiAgICAgICAgICAgICAgY29udHJvbHNcbiAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJ2aWRlby1hdHRhY2htZW50XCJcbiAgICAgICAgICAgICAgW3NyY109XCJcbiAgICAgICAgICAgICAgICBnZXRWaWRlb0F0dGFjaG1lbnRDb25maWd1cmF0aW9uKGF0dGFjaG1lbnRDb250ZXh0LCB2aWRlb0VsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAudXJsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtwb3N0ZXJdPVwiXG4gICAgICAgICAgICAgICAgZ2V0VmlkZW9BdHRhY2htZW50Q29uZmlndXJhdGlvbihhdHRhY2htZW50Q29udGV4dCwgdmlkZW9FbGVtZW50KVxuICAgICAgICAgICAgICAgICAgLnRodW1iVXJsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC92aWRlbz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRmlsZShhdHRhY2htZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLmZpbGVBdHRhY2htZW50VGVtcGxhdGUkIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgIGRlZmF1bHRGaWxlO1xuICAgICAgICAgICAgY29udGV4dDogZ2V0QXR0YWNobWVudENvbnRleHQoYXR0YWNobWVudClcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEZpbGUgbGV0LWF0dGFjaG1lbnRDb250ZXh0PVwiYXR0YWNobWVudFwiPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtLWl0ZW1cbiAgICAgICAgICAgICAgc3RyLWNoYXQtYW5ndWxhcl9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtc2luZ2xlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjogbm9uZVwiXG4gICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImZpbGUtbGlua1wiXG4gICAgICAgICAgICBocmVmPVwie3sgYXR0YWNobWVudENvbnRleHQuYXNzZXRfdXJsIH19XCJcbiAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICpuZ0lmPVwidGhlbWVWZXJzaW9uID09PSAnMSdcIlxuICAgICAgICAgICAgICBpY29uPVwiZmlsZVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cIjMwXCJcbiAgICAgICAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICpuZ0lmPVwidGhlbWVWZXJzaW9uID09PSAnMidcIlxuICAgICAgICAgICAgICBpY29uPVwidW5zcGVjaWZpZWQtZmlsZXR5cGVcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCIzMFwiXG4gICAgICAgICAgICA+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtLWl0ZW0tdGV4dFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1maWxlLS1pdGVtLWZpcnN0LXJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwiZmlsZS10aXRsZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtZmlsZS0taXRlbS1uYW1lXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRhY2htZW50Q29udGV4dC50aXRsZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gVGVtcG9yYXJ5IGRpc2FibGVkLCB3aWxsIGJlIGZpeGVkIHdpdGggdGhpczogaHR0cHM6Ly9naXRodWIuY29tL0dldFN0cmVhbS9zdHJlYW0tY2hhdC1hbmd1bGFyL2lzc3Vlcy8zOTMgIC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gPGFcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWZpbGUtLWl0ZW0tZG93bmxvYWRcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImZpbGUtbGlua1wiXG4gICAgICAgICAgICAgIGRvd25sb2FkXG4gICAgICAgICAgICAgIGhyZWY9XCJ7eyBhdHRhY2htZW50LmFzc2V0X3VybCB9fVwiXG4gICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1kb3dubG9hZC1pY29uXCJcbiAgICAgICAgICAgICAgICBpY29uPVwiZG93bmxvYWRcIlxuICAgICAgICAgICAgICA+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICAgIDwvYT4gLS0+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1maWxlLS1pdGVtLXNpemVcIlxuICAgICAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwic2l6ZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNGaWxlU2l6ZShhdHRhY2htZW50Q29udGV4dClcIlxuICAgICAgICAgICAgICAgID57eyBnZXRGaWxlU2l6ZShhdHRhY2htZW50Q29udGV4dCkgfX08L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgaXNDYXJkKGF0dGFjaG1lbnQpICYmXG4gICAgICAgICAgZ2V0Q2FyZEF0dGFjaG1lbnRDb25maWd1cmF0aW9uKGF0dGFjaG1lbnQpIGFzIGF0dGFjaG1lbnRDb25maWd1cmF0aW9uXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UuY2FyZEF0dGFjaG1lbnRUZW1wbGF0ZSQgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgZGVmYXVsdENhcmQ7XG4gICAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50Q29udGV4dChhdHRhY2htZW50KVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2FyZCBsZXQtYXR0YWNobWVudENvbnRleHQ9XCJhdHRhY2htZW50XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWNhcmQgc3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1jYXJkLS17e1xuICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dC50eXBlXG4gICAgICAgICAgICB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAqbmdJZj1cImF0dGFjaG1lbnRDb25maWd1cmF0aW9uLnVybFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1jYXJkLS1oZWFkZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgZmV0Y2hwcmlvcml0eT1cImxvd1wiXG4gICAgICAgICAgICAgICAgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwiY2FyZC1pbWdcIlxuICAgICAgICAgICAgICAgIGFsdD1cInt7IGF0dGFjaG1lbnRDb25maWd1cmF0aW9uLnVybCB9fVwiXG4gICAgICAgICAgICAgICAgc3JjPVwie3sgYXR0YWNobWVudENvbmZpZ3VyYXRpb24udXJsIH19XCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IGF0dGFjaG1lbnRDb25maWd1cmF0aW9uLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBhdHRhY2htZW50Q29uZmlndXJhdGlvbi53aWR0aFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1jYXJkLS1jb250ZW50XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWNhcmQtLWZsZXhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImF0dGFjaG1lbnRDb250ZXh0LnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwiY2FyZC10aXRsZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWF0dGFjaG1lbnQtY2FyZC0tdGl0bGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGF0dGFjaG1lbnRDb250ZXh0LnRpdGxlIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhdHRhY2htZW50Q29udGV4dC50ZXh0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1jYXJkLS10ZXh0XCJcbiAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwiY2FyZC10ZXh0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRhY2htZW50Q29udGV4dC50ZXh0IH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1jYXJkLS11cmxcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudENvbnRleHQudGl0bGVfbGluayB8fFxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dC5vZ19zY3JhcGVfdXJsXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJ1cmwtbGlua1wiXG4gICAgICAgICAgICAgICAgICBub29wZW5lclxuICAgICAgICAgICAgICAgICAgbm9yZWZlcnJlclxuICAgICAgICAgICAgICAgICAgaHJlZj1cInt7XG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRDb250ZXh0LnRpdGxlX2xpbmsgfHxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50Q29udGV4dC5vZ19zY3JhcGVfdXJsXG4gICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHRyaW1VcmwoXG4gICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudENvbnRleHQudGl0bGVfbGluayB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudENvbnRleHQub2dfc2NyYXBlX3VybFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImF0dGFjaG1lbnQuYWN0aW9ucyAmJiBhdHRhY2htZW50LmFjdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLmF0dGFjaG1lbnRBY3Rpb25zVGVtcGxhdGUkIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb25zO1xuICAgICAgICAgICAgY29udGV4dDogZ2V0QXR0YWNobWVudENvbnRleHQoYXR0YWNobWVudClcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEFjdGlvbnMgbGV0LWF0dGFjaG1lbnRDb250ZXh0PVwiYXR0YWNobWVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWFjdGlvbnMtZm9ybVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgYWN0aW9uIG9mIGF0dGFjaG1lbnRDb250ZXh0LmFjdGlvbnM7XG4gICAgICAgICAgICAgICAgICB0cmFja0J5OiB0cmFja0J5QWN0aW9uVmFsdWVcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYXR0YWNobWVudC1hY3Rpb25zLWJ1dHRvbiBzdHItY2hhdF9fbWVzc2FnZS1hdHRhY2htZW50LWFjdGlvbnMtYnV0dG9uLS17e1xuICAgICAgICAgICAgICAgICAgYWN0aW9uLnN0eWxlXG4gICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgIGRhdGEtdGVzdGNsYXNzPVwiYXR0YWNobWVudC1hY3Rpb25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZW5kQWN0aW9uKGFjdGlvbilcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZW5kQWN0aW9uKGFjdGlvbilcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgYWN0aW9uLnRleHQgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW1hZ2VzVG9WaWV3ICYmIGltYWdlc1RvVmlldy5sZW5ndGggPiAwXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubW9kYWxUZW1wbGF0ZSQgfCBhc3luYykgfHwgZGVmYXVsdE1vZGFsO1xuICAgICAgICBjb250ZXh0OiBnZXRNb2RhbENvbnRleHQoKVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZVxuICAjZGVmYXVsdE1vZGFsXG4gIGxldC1pc09wZW49XCJpc09wZW5cIlxuICBsZXQtaXNPcGVuQ2hhbmdlSGFuZGxlcj1cImlzT3BlbkNoYW5nZUhhbmRsZXJcIlxuICBsZXQtY29udGVudD1cImNvbnRlbnRcIlxuPlxuICA8c3RyZWFtLW1vZGFsXG4gICAgY2xhc3M9XCJzdHJlYW0tY2hhdC1hbmd1bGFyX19pbWFnZS1tb2RhbC1ob3N0XCJcbiAgICBbaXNPcGVuXT1cImlzT3BlblwiXG4gICAgKGlzT3BlbkNoYW5nZSk9XCJpc09wZW5DaGFuZ2VIYW5kbGVyKCRldmVudClcIlxuICAgIFtjb250ZW50XT1cImNvbnRlbnRcIlxuICA+XG4gIDwvc3RyZWFtLW1vZGFsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtb2RhbENvbnRlbnQ+XG4gIDxkaXYgY2xhc3M9XCJzdHJlYW0tY2hhdC1hbmd1bGFyX19pbWFnZS1tb2RhbCBzdHItY2hhdF9faW1hZ2UtY2Fyb3VzZWxcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cIlxuICAgICAgICBzdHJlYW0tY2hhdC1hbmd1bGFyX19pbWFnZS1tb2RhbC1zdGVwcGVyXG4gICAgICAgIHN0ci1jaGF0X19pbWFnZS1jYXJvdXNlbC1zdGVwcGVyXG4gICAgICBcIlxuICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICB2aXNpYmlsaXR5OiBpc0ltYWdlTW9kYWxQcmV2QnV0dG9uVmlzaWJsZSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXG4gICAgICB9XCJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW1hZ2UtbW9kYWwtcHJldlwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJzdGVwSW1hZ2VzKC0xKVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwic3RlcEltYWdlcygtMSlcIlxuICAgID5cbiAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlciBpY29uPVwiYXJyb3ctbGVmdFwiPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgPC9idXR0b24+XG4gICAgPGltZ1xuICAgICAgI2ltZ0VsZW1lbnRcbiAgICAgIGNsYXNzPVwiXG4gICAgICAgIHN0cmVhbS1jaGF0LWFuZ3VsYXJfX2ltYWdlLW1vZGFsLWltYWdlXG4gICAgICAgIHN0ci1jaGF0X19pbWFnZS1jYXJvdXNlbC1pbWFnZVxuICAgICAgXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWwtaW1hZ2VcIlxuICAgICAgW3NyY109XCJcbiAgICAgICAgZ2V0Q2Fyb3VzZWxJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgIGltYWdlc1RvVmlld1tpbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXhdLFxuICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgKS51cmxcbiAgICAgIFwiXG4gICAgICBbc3R5bGUuLS1vcmlnaW5hbC1oZWlnaHRdPVwiXG4gICAgICAgIGdldENhcm91c2VsSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICBpbWFnZXNUb1ZpZXdbaW1hZ2VzVG9WaWV3Q3VycmVudEluZGV4XSxcbiAgICAgICAgICBpbWdFbGVtZW50XG4gICAgICAgICkub3JpZ2luYWxIZWlnaHRcbiAgICAgIFwiXG4gICAgICBbc3R5bGUuLS1vcmlnaW5hbC13aWR0aF09XCJcbiAgICAgICAgZ2V0Q2Fyb3VzZWxJbWFnZUF0dGFjaG1lbnRDb25maWd1cmF0aW9uKFxuICAgICAgICAgIGltYWdlc1RvVmlld1tpbWFnZXNUb1ZpZXdDdXJyZW50SW5kZXhdLFxuICAgICAgICAgIGltZ0VsZW1lbnRcbiAgICAgICAgKS5vcmlnaW5hbFdpZHRoXG4gICAgICBcIlxuICAgICAgW2FsdF09XCJpbWFnZXNUb1ZpZXdbaW1hZ2VzVG9WaWV3Q3VycmVudEluZGV4XS5mYWxsYmFja1wiXG4gICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgIHdpZHRoOiBnZXRDYXJvdXNlbEltYWdlQXR0YWNobWVudENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgaW1hZ2VzVG9WaWV3W2ltYWdlc1RvVmlld0N1cnJlbnRJbmRleF0sXG4gICAgICAgICAgaW1nRWxlbWVudFxuICAgICAgICApLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGdldENhcm91c2VsSW1hZ2VBdHRhY2htZW50Q29uZmlndXJhdGlvbihcbiAgICAgICAgICBpbWFnZXNUb1ZpZXdbaW1hZ2VzVG9WaWV3Q3VycmVudEluZGV4XSxcbiAgICAgICAgICBpbWdFbGVtZW50XG4gICAgICAgICkuaGVpZ2h0XG4gICAgICB9XCJcbiAgICAvPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiXG4gICAgICAgIHN0cmVhbS1jaGF0LWFuZ3VsYXJfX2ltYWdlLW1vZGFsLXN0ZXBwZXJcbiAgICAgICAgc3RyLWNoYXRfX2ltYWdlLWNhcm91c2VsLXN0ZXBwZXJcbiAgICAgIFwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgdmlzaWJpbGl0eTogaXNJbWFnZU1vZGFsTmV4dEJ1dHRvblZpc2libGUgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1xuICAgICAgfVwiXG4gICAgICBkYXRhLXRlc3RpZD1cImltYWdlLW1vZGFsLW5leHRcIlxuICAgICAgKGNsaWNrKT1cInN0ZXBJbWFnZXMoMSlcIlxuICAgICAgKGtleXVwLmVudGVyKT1cInN0ZXBJbWFnZXMoMSlcIlxuICAgID5cbiAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlciBpY29uPVwiYXJyb3ctcmlnaHRcIj48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -22,7 +22,6 @@ export class AvatarComponent {
22
22
  * If channel/user image isn't provided the initials of the name of the channel/user is shown instead, you can choose how the initals should be computed
23
23
  */
24
24
  this.initialsType = 'first-letter-of-first-word';
25
- this.isLoaded = false;
26
25
  this.isError = false;
27
26
  this.isOnline = false;
28
27
  }
@@ -111,7 +110,7 @@ export class AvatarComponent {
111
110
  }
112
111
  }
113
112
  AvatarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: AvatarComponent, deps: [{ token: i1.ChatClientService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
114
- AvatarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: AvatarComponent, selector: "stream-avatar", inputs: { name: "name", imageUrl: "imageUrl", size: "size", location: "location", channel: "channel", user: "user", type: "type", showOnlineIndicator: "showOnlineIndicator", initialsType: "initialsType" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"str-chat__avatar str-chat__avatar--circle stream-chat__avatar--{{\n location\n }}\"\n title=\"{{ name }}\"\n [style]=\"{\n flexBasis: 'calc(var(--str-chat__spacing-px, 1px) * ' + size + ')',\n fontSize:\n initialsType === 'first-letter-of-first-word'\n ? 'calc(var(--str-chat__spacing-px, 1px) * ' + size / 2 + ')'\n : 'calc(var(--str-chat__spacing-px, 1px) * ' + size / 3 + ')',\n height: 'calc(var(--str-chat__spacing-px, 1px) * ' + size + ')',\n lineHeight: 'calc(var(--str-chat__spacing-px, 1px) * ' + size + ')',\n width: 'calc(var(--str-chat__spacing-px, 1px) * ' + size + ')'\n }\"\n>\n <img\n *ngIf=\"(imageUrl || fallbackChannelImage) && !isError; else fallback\"\n class=\"str-chat__avatar-image str-chat__avatar-image{{\n isLoaded ? ' str-chat__avatar-image--loaded' : ''\n }}\"\n src=\"{{ imageUrl || fallbackChannelImage }}\"\n alt=\"{{ initials }}\"\n data-testid=\"avatar-img\"\n (load)=\"isLoaded = true\"\n (error)=\"isError = true\"\n [style]=\"{\n flexBasis: 'calc(var(--str-chat__spacing-px, 1px) * ' + size + ')',\n height: 'calc(var(--str-chat__spacing-px, 1px) * ' + size + ')',\n objectFit: 'cover',\n width: 'calc(var(--str-chat__spacing-px, 1px) * ' + size + ')'\n }\"\n />\n <ng-template #fallback>\n <div\n data-testid=\"fallback-img\"\n style=\"overflow: hidden; white-space: nowrap; text-overflow: ellipsis\"\n class=\"str-chat__avatar-fallback\"\n >\n {{ initials }}\n </div>\n </ng-template>\n <div\n data-testid=\"online-indicator\"\n *ngIf=\"isOnline && showOnlineIndicator\"\n class=\"str-chat__avatar--online-indicator\"\n ></div>\n</div>\n", styles: [""], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
113
+ AvatarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: AvatarComponent, selector: "stream-avatar", inputs: { name: "name", imageUrl: "imageUrl", size: "size", location: "location", channel: "channel", user: "user", type: "type", showOnlineIndicator: "showOnlineIndicator", initialsType: "initialsType" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"str-chat__avatar str-chat__avatar--circle stream-chat__avatar--{{\n location\n }}\"\n title=\"{{ name }}\"\n [style]=\"{\n flexBasis: 'calc(var(--str-chat__spacing-px, 1px) * ' + size + ')',\n fontSize:\n initialsType === 'first-letter-of-first-word'\n ? 'calc(var(--str-chat__spacing-px, 1px) * ' + size / 2 + ')'\n : 'calc(var(--str-chat__spacing-px, 1px) * ' + size / 3 + ')',\n height: 'calc(var(--str-chat__spacing-px, 1px) * ' + size + ')',\n lineHeight: 'calc(var(--str-chat__spacing-px, 1px) * ' + size + ')',\n width: 'calc(var(--str-chat__spacing-px, 1px) * ' + size + ')'\n }\"\n>\n <img\n *ngIf=\"(imageUrl || fallbackChannelImage) && !isError; else fallback\"\n class=\"str-chat__avatar-image str-chat__avatar-image\"\n src=\"{{ imageUrl || fallbackChannelImage }}\"\n alt=\"{{ initials }}\"\n data-testid=\"avatar-img\"\n (error)=\"isError = true\"\n [style]=\"{\n flexBasis: 'calc(var(--str-chat__spacing-px, 1px) * ' + size + ')',\n height: 'calc(var(--str-chat__spacing-px, 1px) * ' + size + ')',\n objectFit: 'cover',\n width: 'calc(var(--str-chat__spacing-px, 1px) * ' + size + ')'\n }\"\n fetchpriority=\"high\"\n />\n <ng-template #fallback>\n <div\n data-testid=\"fallback-img\"\n style=\"overflow: hidden; white-space: nowrap; text-overflow: ellipsis\"\n class=\"str-chat__avatar-fallback\"\n >\n {{ initials }}\n </div>\n </ng-template>\n <div\n data-testid=\"online-indicator\"\n *ngIf=\"isOnline && showOnlineIndicator\"\n class=\"str-chat__avatar--online-indicator\"\n ></div>\n</div>\n", styles: [""], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
115
114
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: AvatarComponent, decorators: [{
116
115
  type: Component,
117
116
  args: [{
@@ -138,4 +137,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
138
137
  }], initialsType: [{
139
138
  type: Input
140
139
  }] } });
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxHQUlOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQVN4Qzs7R0FFRztBQU1ILE1BQU0sT0FBTyxlQUFlO0lBNEMxQixZQUNVLGlCQUFvQyxFQUNwQyxNQUFjO1FBRGQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBckN4Qjs7V0FFRztRQUNNLFNBQUksR0FBRyxFQUFFLENBQUM7UUFpQm5COztXQUVHO1FBQ00sd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ3BDOztXQUVHO1FBQ00saUJBQVksR0FFYSw0QkFBNEIsQ0FBQztRQUMvRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsYUFBUSxHQUFHLEtBQUssQ0FBQztJQU1kLENBQUM7SUFFSixXQUFXLENBQUMsT0FBc0I7O1FBQ2hDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7Z0JBQzNELElBQUksV0FBVyxFQUFFO29CQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7b0JBQzVD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QUErQjs7UUFDckMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDaEMsQ0FBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsS0FBSywwQ0FBRSxPQUFPLEtBQUksRUFBRSxDQUNuQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFdBQUMsT0FBQSxDQUFDLENBQUMsT0FBTyxNQUFLLE1BQUEsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLDBDQUFFLEVBQUUsQ0FBQSxDQUFBLEVBQUEsQ0FBQyxDQUFDO1FBQzFFLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0IsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQzdCO2FBQU07WUFDTCxPQUFPLFNBQVMsQ0FBQztTQUNsQjtJQUNILENBQUM7OzRHQTNIVSxlQUFlO2dHQUFmLGVBQWUsd1JDekI1Qixzc0RBZ0RBOzJGRHZCYSxlQUFlO2tCQUwzQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixXQUFXLEVBQUUseUJBQXlCO29CQUN0QyxTQUFTLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQztpQkFDdkM7NkhBS1UsSUFBSTtzQkFBWixLQUFLO2dCQUlHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsSUFBSTtzQkFBWixLQUFLO2dCQUlHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsT0FBTztzQkFBZixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENoYW5uZWwsIFVzZXIgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDaGF0Q2xpZW50U2VydmljZSB9IGZyb20gJy4uL2NoYXQtY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQXZhdGFyTG9jYXRpb24sXG4gIEF2YXRhclR5cGUsXG4gIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MsXG59IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBUaGUgYEF2YXRhcmAgY29tcG9uZW50IGRpc3BsYXlzIHRoZSBwcm92aWRlZCBpbWFnZSwgd2l0aCBmYWxsYmFjayB0byB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBvcHRpb25hbCBuYW1lIGlucHV0LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tYXZhdGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F2YXRhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2F2YXRhci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBdmF0YXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwgbmFtZSBvZiB0aGUgaW1hZ2UsIHVzZWQgZm9yIGZhbGxiYWNrIGltYWdlIG9yIGltYWdlIHRpdGxlIChpZiBgaW1hZ2VVcmxgIGlzIHByb3ZpZGVkKVxuICAgKi9cbiAgQElucHV0KCkgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgaW1hZ2UgdG8gYmUgZGlzcGxheWVkLiBJZiB0aGUgaW1hZ2UgY2FuJ3QgYmUgZGlzcGxheWVkIHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIG5hbWUgaW5wdXQgaXMgZGlzcGxheWVkLlxuICAgKi9cbiAgQElucHV0KCkgaW1hZ2VVcmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBzaXplIGluIHBpeGVscyBvZiB0aGUgYXZhdGFyIGltYWdlLlxuICAgKi9cbiAgQElucHV0KCkgc2l6ZSA9IDMyO1xuICAvKipcbiAgICogVGhlIGxvY2F0aW9uIHRoZSBhdmF0YXIgd2lsbCBiZSBkaXNwbGF5ZWQgaW5cbiAgICovXG4gIEBJbnB1dCgpIGxvY2F0aW9uOiBBdmF0YXJMb2NhdGlvbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBjaGFubmVsIHRoZSBhdmF0YXIgYmVsb25ncyB0byAoaWYgYXZhdGFyIG9mIGEgY2hhbm5lbCBpcyBkaXNwbGF5ZWQpXG4gICAqL1xuICBASW5wdXQoKSBjaGFubmVsPzogQ2hhbm5lbDxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPjtcbiAgLyoqXG4gICAqIFRoZSB1c2VyIHRoZSBhdmF0YXIgYmVsb25ncyB0byAoaWYgYXZhdGFyIG9mIGEgdXNlciBpcyBkaXNwbGF5ZWQpXG4gICAqL1xuICBASW5wdXQoKSB1c2VyPzogVXNlcjxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPjtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBhdmF0YXI6IGNoYW5uZWwgaWYgY2hhbm5lbCBhdmF0YXIgaXMgZGlzcGxheWVkLCB1c2VyIGlmIHVzZXIgYXZhdGFyIGlzIGRpc3BsYXllZFxuICAgKi9cbiAgQElucHV0KCkgdHlwZTogQXZhdGFyVHlwZSB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIElmIGEgY2hhbm5lbCBhdmF0YXIgaXMgZGlzcGxheWVkLCBhbmQgaWYgdGhlIGNoYW5uZWwgaGFzIGV4YWN0bHkgdHdvIG1lbWJlcnMgYSBncmVlbiBkb3QgaXMgZGlzcGxheWVkIGlmIHRoZSBvdGhlciBtZW1iZXIgaXMgb25saW5lLiBTZXQgdGhpcyBmbGFnIHRvIGBmYWxzZWAgdG8gdHVybiBvZmYgdGhpcyBiZWhhdmlvci5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dPbmxpbmVJbmRpY2F0b3IgPSB0cnVlO1xuICAvKipcbiAgICogSWYgY2hhbm5lbC91c2VyIGltYWdlIGlzbid0IHByb3ZpZGVkIHRoZSBpbml0aWFscyBvZiB0aGUgbmFtZSBvZiB0aGUgY2hhbm5lbC91c2VyIGlzIHNob3duIGluc3RlYWQsIHlvdSBjYW4gY2hvb3NlIGhvdyB0aGUgaW5pdGFscyBzaG91bGQgYmUgY29tcHV0ZWRcbiAgICovXG4gIEBJbnB1dCgpIGluaXRpYWxzVHlwZTpcbiAgICB8ICdmaXJzdC1sZXR0ZXItb2YtZmlyc3Qtd29yZCdcbiAgICB8ICdmaXJzdC1sZXR0ZXItb2YtZWFjaC13b3JkJyA9ICdmaXJzdC1sZXR0ZXItb2YtZmlyc3Qtd29yZCc7XG4gIGlzTG9hZGVkID0gZmFsc2U7XG4gIGlzRXJyb3IgPSBmYWxzZTtcbiAgaXNPbmxpbmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc09ubGluZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYXRDbGllbnRTZXJ2aWNlOiBDaGF0Q2xpZW50U2VydmljZSxcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICkge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2NoYW5uZWwnXSkge1xuICAgICAgaWYgKHRoaXMuY2hhbm5lbCkge1xuICAgICAgICBjb25zdCBvdGhlck1lbWJlciA9IHRoaXMuZ2V0T3RoZXJNZW1iZXJJZk9uZVRvT25lQ2hhbm5lbCgpO1xuICAgICAgICBpZiAob3RoZXJNZW1iZXIpIHtcbiAgICAgICAgICB0aGlzLmlzT25saW5lID0gb3RoZXJNZW1iZXIub25saW5lIHx8IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNPbmxpbmVTdWJzY3JpcHRpb24gPSB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmV2ZW50cyRcbiAgICAgICAgICAgIC5waXBlKGZpbHRlcigoZSkgPT4gZS5ldmVudFR5cGUgPT09ICd1c2VyLnByZXNlbmNlLmNoYW5nZWQnKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChldmVudC5ldmVudC51c2VyPy5pZCA9PT0gb3RoZXJNZW1iZXIuaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5pc09ubGluZSA9IGV2ZW50LmV2ZW50LnVzZXI/Lm9ubGluZSB8fCBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pc09ubGluZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc09ubGluZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzT25saW5lU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBpbml0aWFscygpIHtcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcgPSAnJztcbiAgICBpZiAodGhpcy50eXBlID09PSAndXNlcicpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMubmFtZT8udG9TdHJpbmcoKSB8fCAnJztcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ2NoYW5uZWwnKSB7XG4gICAgICBpZiAodGhpcy5jaGFubmVsPy5kYXRhPy5uYW1lKSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuY2hhbm5lbD8uZGF0YT8ubmFtZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG90aGVyTWVtYmVyID0gdGhpcy5nZXRPdGhlck1lbWJlcklmT25lVG9PbmVDaGFubmVsKCk7XG4gICAgICAgIGlmIChvdGhlck1lbWJlcikge1xuICAgICAgICAgIHJlc3VsdCA9IG90aGVyTWVtYmVyLm5hbWUgfHwgb3RoZXJNZW1iZXIuaWQgfHwgJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gJyMnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd29yZHMgPSByZXN1bHQuc3BsaXQoJyAnKTtcbiAgICBsZXQgaW5pdGlhbHM6IHN0cmluZztcbiAgICBpZiAodGhpcy5pbml0aWFsc1R5cGUgPT09ICdmaXJzdC1sZXR0ZXItb2YtZWFjaC13b3JkJykge1xuICAgICAgaW5pdGlhbHMgPSB3b3Jkcy5tYXAoKHcpID0+IHcuY2hhckF0KDApIHx8ICcnKS5qb2luKCcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5pdGlhbHMgPSB3b3Jkc1swXS5jaGFyQXQoMCkgfHwgJyc7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFscztcbiAgfVxuXG4gIGdldCBmYWxsYmFja0NoYW5uZWxJbWFnZSgpIHtcbiAgICBpZiAodGhpcy50eXBlICE9PSAnY2hhbm5lbCcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG90aGVyTWVtYmVyID0gdGhpcy5nZXRPdGhlck1lbWJlcklmT25lVG9PbmVDaGFubmVsKCk7XG4gICAgICBpZiAob3RoZXJNZW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG90aGVyTWVtYmVyLmltYWdlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE90aGVyTWVtYmVySWZPbmVUb09uZUNoYW5uZWwoKSB7XG4gICAgY29uc3Qgb3RoZXJNZW1iZXJzID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgIHRoaXMuY2hhbm5lbD8uc3RhdGU/Lm1lbWJlcnMgfHwge31cbiAgICApLmZpbHRlcigobSkgPT4gbS51c2VyX2lkICE9PSB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmNoYXRDbGllbnQudXNlcj8uaWQpO1xuICAgIGlmIChvdGhlck1lbWJlcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gb3RoZXJNZW1iZXJzWzBdLnVzZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic3RyLWNoYXRfX2F2YXRhciBzdHItY2hhdF9fYXZhdGFyLS1jaXJjbGUgc3RyZWFtLWNoYXRfX2F2YXRhci0te3tcbiAgICBsb2NhdGlvblxuICB9fVwiXG4gIHRpdGxlPVwie3sgbmFtZSB9fVwiXG4gIFtzdHlsZV09XCJ7XG4gICAgZmxleEJhc2lzOiAnY2FsYyh2YXIoLS1zdHItY2hhdF9fc3BhY2luZy1weCwgMXB4KSAqICcgKyBzaXplICsgJyknLFxuICAgIGZvbnRTaXplOlxuICAgICAgaW5pdGlhbHNUeXBlID09PSAnZmlyc3QtbGV0dGVyLW9mLWZpcnN0LXdvcmQnXG4gICAgICAgID8gJ2NhbGModmFyKC0tc3RyLWNoYXRfX3NwYWNpbmctcHgsIDFweCkgKiAnICsgc2l6ZSAvIDIgKyAnKSdcbiAgICAgICAgOiAnY2FsYyh2YXIoLS1zdHItY2hhdF9fc3BhY2luZy1weCwgMXB4KSAqICcgKyBzaXplIC8gMyArICcpJyxcbiAgICBoZWlnaHQ6ICdjYWxjKHZhcigtLXN0ci1jaGF0X19zcGFjaW5nLXB4LCAxcHgpICogJyArIHNpemUgKyAnKScsXG4gICAgbGluZUhlaWdodDogJ2NhbGModmFyKC0tc3RyLWNoYXRfX3NwYWNpbmctcHgsIDFweCkgKiAnICsgc2l6ZSArICcpJyxcbiAgICB3aWR0aDogJ2NhbGModmFyKC0tc3RyLWNoYXRfX3NwYWNpbmctcHgsIDFweCkgKiAnICsgc2l6ZSArICcpJ1xuICB9XCJcbj5cbiAgPGltZ1xuICAgICpuZ0lmPVwiKGltYWdlVXJsIHx8IGZhbGxiYWNrQ2hhbm5lbEltYWdlKSAmJiAhaXNFcnJvcjsgZWxzZSBmYWxsYmFja1wiXG4gICAgY2xhc3M9XCJzdHItY2hhdF9fYXZhdGFyLWltYWdlIHN0ci1jaGF0X19hdmF0YXItaW1hZ2V7e1xuICAgICAgaXNMb2FkZWQgPyAnIHN0ci1jaGF0X19hdmF0YXItaW1hZ2UtLWxvYWRlZCcgOiAnJ1xuICAgIH19XCJcbiAgICBzcmM9XCJ7eyBpbWFnZVVybCB8fCBmYWxsYmFja0NoYW5uZWxJbWFnZSB9fVwiXG4gICAgYWx0PVwie3sgaW5pdGlhbHMgfX1cIlxuICAgIGRhdGEtdGVzdGlkPVwiYXZhdGFyLWltZ1wiXG4gICAgKGxvYWQpPVwiaXNMb2FkZWQgPSB0cnVlXCJcbiAgICAoZXJyb3IpPVwiaXNFcnJvciA9IHRydWVcIlxuICAgIFtzdHlsZV09XCJ7XG4gICAgICBmbGV4QmFzaXM6ICdjYWxjKHZhcigtLXN0ci1jaGF0X19zcGFjaW5nLXB4LCAxcHgpICogJyArIHNpemUgKyAnKScsXG4gICAgICBoZWlnaHQ6ICdjYWxjKHZhcigtLXN0ci1jaGF0X19zcGFjaW5nLXB4LCAxcHgpICogJyArIHNpemUgKyAnKScsXG4gICAgICBvYmplY3RGaXQ6ICdjb3ZlcicsXG4gICAgICB3aWR0aDogJ2NhbGModmFyKC0tc3RyLWNoYXRfX3NwYWNpbmctcHgsIDFweCkgKiAnICsgc2l6ZSArICcpJ1xuICAgIH1cIlxuICAvPlxuICA8bmctdGVtcGxhdGUgI2ZhbGxiYWNrPlxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwiZmFsbGJhY2staW1nXCJcbiAgICAgIHN0eWxlPVwib3ZlcmZsb3c6IGhpZGRlbjsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXNcIlxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fYXZhdGFyLWZhbGxiYWNrXCJcbiAgICA+XG4gICAgICB7eyBpbml0aWFscyB9fVxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuICA8ZGl2XG4gICAgZGF0YS10ZXN0aWQ9XCJvbmxpbmUtaW5kaWNhdG9yXCJcbiAgICAqbmdJZj1cImlzT25saW5lICYmIHNob3dPbmxpbmVJbmRpY2F0b3JcIlxuICAgIGNsYXNzPVwic3RyLWNoYXRfX2F2YXRhci0tb25saW5lLWluZGljYXRvclwiXG4gID48L2Rpdj5cbjwvZGl2PlxuIl19
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxHQUlOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQVN4Qzs7R0FFRztBQU1ILE1BQU0sT0FBTyxlQUFlO0lBMkMxQixZQUNVLGlCQUFvQyxFQUNwQyxNQUFjO1FBRGQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBcEN4Qjs7V0FFRztRQUNNLFNBQUksR0FBRyxFQUFFLENBQUM7UUFpQm5COztXQUVHO1FBQ00sd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ3BDOztXQUVHO1FBQ00saUJBQVksR0FFYSw0QkFBNEIsQ0FBQztRQUMvRCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLGFBQVEsR0FBRyxLQUFLLENBQUM7SUFNZCxDQUFDO0lBRUosV0FBVyxDQUFDLE9BQXNCOztRQUNoQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO2dCQUMzRCxJQUFJLFdBQVcsRUFBRTtvQkFDZixJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO29CQUM1QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU87eUJBQ3ZELElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssdUJBQXVCLENBQUMsQ0FBQzt5QkFDNUQsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7O3dCQUNuQixJQUFJLENBQUEsTUFBQSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksMENBQUUsRUFBRSxNQUFLLFdBQVcsQ0FBQyxFQUFFLEVBQUU7NEJBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTs7Z0NBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSwwQ0FBRSxNQUFNLEtBQUksS0FBSyxDQUFDOzRCQUNwRCxDQUFDLENBQUMsQ0FBQzt5QkFDSjtvQkFDSCxDQUFDLENBQUMsQ0FBQztpQkFDTjtxQkFBTTtvQkFDTCxNQUFBLElBQUksQ0FBQyxvQkFBb0IsMENBQUUsV0FBVyxFQUFFLENBQUM7aUJBQzFDO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3RCLE1BQUEsSUFBSSxDQUFDLG9CQUFvQiwwQ0FBRSxXQUFXLEVBQUUsQ0FBQzthQUMxQztTQUNGO0lBQ0gsQ0FBQztJQUVELElBQUksUUFBUTs7UUFDVixJQUFJLE1BQU0sR0FBVyxFQUFFLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUN4QixNQUFNLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLFFBQVEsRUFBRSxLQUFJLEVBQUUsQ0FBQztTQUN0QzthQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDbEMsSUFBSSxNQUFBLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsSUFBSSwwQ0FBRSxJQUFJLEVBQUU7Z0JBQzVCLE1BQU0sR0FBRyxNQUFBLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsSUFBSSwwQ0FBRSxJQUFJLENBQUM7YUFDbkM7aUJBQU07Z0JBQ0wsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7Z0JBQzNELElBQUksV0FBVyxFQUFFO29CQUNmLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO2lCQUNuRDtxQkFBTTtvQkFDTCxNQUFNLEdBQUcsR0FBRyxDQUFDO2lCQUNkO2FBQ0Y7U0FDRjtRQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsSUFBSSxRQUFnQixDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSywyQkFBMkIsRUFBRTtZQUNyRCxRQUFRLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDekQ7YUFBTTtZQUNMLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNyQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLG9CQUFvQjtRQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQzNCLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO2FBQU07WUFDTCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztZQUMzRCxJQUFJLFdBQVcsRUFBRTtnQkFDZixPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUM7YUFDMUI7aUJBQU07Z0JBQ0wsT0FBTyxTQUFTLENBQUM7YUFDbEI7U0FDRjtJQUNILENBQUM7SUFFTywrQkFBK0I7O1FBQ3JDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQ2hDLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxPQUFPLDBDQUFFLEtBQUssMENBQUUsT0FBTyxLQUFJLEVBQUUsQ0FDbkMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxXQUFDLE9BQUEsQ0FBQyxDQUFDLE9BQU8sTUFBSyxNQUFBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsSUFBSSwwQ0FBRSxFQUFFLENBQUEsQ0FBQSxFQUFBLENBQUMsQ0FBQztRQUMxRSxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzdCLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUM3QjthQUFNO1lBQ0wsT0FBTyxTQUFTLENBQUM7U0FDbEI7SUFDSCxDQUFDOzs0R0ExSFUsZUFBZTtnR0FBZixlQUFlLHdSQ3pCNUIsK25EQThDQTsyRkRyQmEsZUFBZTtrQkFMM0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsV0FBVyxFQUFFLHlCQUF5QjtvQkFDdEMsU0FBUyxFQUFFLENBQUMseUJBQXlCLENBQUM7aUJBQ3ZDOzZIQUtVLElBQUk7c0JBQVosS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlHLE9BQU87c0JBQWYsS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsSUFBSTtzQkFBWixLQUFLO2dCQUlHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDaGFubmVsLCBVc2VyIH0gZnJvbSAnc3RyZWFtLWNoYXQnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEF2YXRhckxvY2F0aW9uLFxuICBBdmF0YXJUeXBlLFxuICBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzLFxufSBmcm9tICcuLi90eXBlcyc7XG5cbi8qKlxuICogVGhlIGBBdmF0YXJgIGNvbXBvbmVudCBkaXNwbGF5cyB0aGUgcHJvdmlkZWQgaW1hZ2UsIHdpdGggZmFsbGJhY2sgdG8gdGhlIGZpcnN0IGxldHRlciBvZiB0aGUgb3B0aW9uYWwgbmFtZSBpbnB1dC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLWF2YXRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdmF0YXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hdmF0YXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQXZhdGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGltYWdlLCB1c2VkIGZvciBmYWxsYmFjayBpbWFnZSBvciBpbWFnZSB0aXRsZSAoaWYgYGltYWdlVXJsYCBpcyBwcm92aWRlZClcbiAgICovXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBVUkwgb2YgdGhlIGltYWdlIHRvIGJlIGRpc3BsYXllZC4gSWYgdGhlIGltYWdlIGNhbid0IGJlIGRpc3BsYXllZCB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBuYW1lIGlucHV0IGlzIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpIGltYWdlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBpbiBwaXhlbHMgb2YgdGhlIGF2YXRhciBpbWFnZS5cbiAgICovXG4gIEBJbnB1dCgpIHNpemUgPSAzMjtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiB0aGUgYXZhdGFyIHdpbGwgYmUgZGlzcGxheWVkIGluXG4gICAqL1xuICBASW5wdXQoKSBsb2NhdGlvbjogQXZhdGFyTG9jYXRpb24gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgY2hhbm5lbCB0aGUgYXZhdGFyIGJlbG9uZ3MgdG8gKGlmIGF2YXRhciBvZiBhIGNoYW5uZWwgaXMgZGlzcGxheWVkKVxuICAgKi9cbiAgQElucHV0KCkgY2hhbm5lbD86IENoYW5uZWw8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz47XG4gIC8qKlxuICAgKiBUaGUgdXNlciB0aGUgYXZhdGFyIGJlbG9uZ3MgdG8gKGlmIGF2YXRhciBvZiBhIHVzZXIgaXMgZGlzcGxheWVkKVxuICAgKi9cbiAgQElucHV0KCkgdXNlcj86IFVzZXI8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz47XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgYXZhdGFyOiBjaGFubmVsIGlmIGNoYW5uZWwgYXZhdGFyIGlzIGRpc3BsYXllZCwgdXNlciBpZiB1c2VyIGF2YXRhciBpcyBkaXNwbGF5ZWRcbiAgICovXG4gIEBJbnB1dCgpIHR5cGU6IEF2YXRhclR5cGUgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBJZiBhIGNoYW5uZWwgYXZhdGFyIGlzIGRpc3BsYXllZCwgYW5kIGlmIHRoZSBjaGFubmVsIGhhcyBleGFjdGx5IHR3byBtZW1iZXJzIGEgZ3JlZW4gZG90IGlzIGRpc3BsYXllZCBpZiB0aGUgb3RoZXIgbWVtYmVyIGlzIG9ubGluZS4gU2V0IHRoaXMgZmxhZyB0byBgZmFsc2VgIHRvIHR1cm4gb2ZmIHRoaXMgYmVoYXZpb3IuXG4gICAqL1xuICBASW5wdXQoKSBzaG93T25saW5lSW5kaWNhdG9yID0gdHJ1ZTtcbiAgLyoqXG4gICAqIElmIGNoYW5uZWwvdXNlciBpbWFnZSBpc24ndCBwcm92aWRlZCB0aGUgaW5pdGlhbHMgb2YgdGhlIG5hbWUgb2YgdGhlIGNoYW5uZWwvdXNlciBpcyBzaG93biBpbnN0ZWFkLCB5b3UgY2FuIGNob29zZSBob3cgdGhlIGluaXRhbHMgc2hvdWxkIGJlIGNvbXB1dGVkXG4gICAqL1xuICBASW5wdXQoKSBpbml0aWFsc1R5cGU6XG4gICAgfCAnZmlyc3QtbGV0dGVyLW9mLWZpcnN0LXdvcmQnXG4gICAgfCAnZmlyc3QtbGV0dGVyLW9mLWVhY2gtd29yZCcgPSAnZmlyc3QtbGV0dGVyLW9mLWZpcnN0LXdvcmQnO1xuICBpc0Vycm9yID0gZmFsc2U7XG4gIGlzT25saW5lID0gZmFsc2U7XG4gIHByaXZhdGUgaXNPbmxpbmVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGF0Q2xpZW50U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZVxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydjaGFubmVsJ10pIHtcbiAgICAgIGlmICh0aGlzLmNoYW5uZWwpIHtcbiAgICAgICAgY29uc3Qgb3RoZXJNZW1iZXIgPSB0aGlzLmdldE90aGVyTWVtYmVySWZPbmVUb09uZUNoYW5uZWwoKTtcbiAgICAgICAgaWYgKG90aGVyTWVtYmVyKSB7XG4gICAgICAgICAgdGhpcy5pc09ubGluZSA9IG90aGVyTWVtYmVyLm9ubGluZSB8fCBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzT25saW5lU3Vic2NyaXB0aW9uID0gdGhpcy5jaGF0Q2xpZW50U2VydmljZS5ldmVudHMkXG4gICAgICAgICAgICAucGlwZShmaWx0ZXIoKGUpID0+IGUuZXZlbnRUeXBlID09PSAndXNlci5wcmVzZW5jZS5jaGFuZ2VkJykpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZXZlbnQuZXZlbnQudXNlcj8uaWQgPT09IG90aGVyTWVtYmVyLmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNPbmxpbmUgPSBldmVudC5ldmVudC51c2VyPy5vbmxpbmUgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaXNPbmxpbmVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNPbmxpbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc09ubGluZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgaW5pdGlhbHMoKSB7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gJyc7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLm5hbWU/LnRvU3RyaW5nKCkgfHwgJyc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdjaGFubmVsJykge1xuICAgICAgaWYgKHRoaXMuY2hhbm5lbD8uZGF0YT8ubmFtZSkge1xuICAgICAgICByZXN1bHQgPSB0aGlzLmNoYW5uZWw/LmRhdGE/Lm5hbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvdGhlck1lbWJlciA9IHRoaXMuZ2V0T3RoZXJNZW1iZXJJZk9uZVRvT25lQ2hhbm5lbCgpO1xuICAgICAgICBpZiAob3RoZXJNZW1iZXIpIHtcbiAgICAgICAgICByZXN1bHQgPSBvdGhlck1lbWJlci5uYW1lIHx8IG90aGVyTWVtYmVyLmlkIHx8ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCA9ICcjJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdvcmRzID0gcmVzdWx0LnNwbGl0KCcgJyk7XG4gICAgbGV0IGluaXRpYWxzOiBzdHJpbmc7XG4gICAgaWYgKHRoaXMuaW5pdGlhbHNUeXBlID09PSAnZmlyc3QtbGV0dGVyLW9mLWVhY2gtd29yZCcpIHtcbiAgICAgIGluaXRpYWxzID0gd29yZHMubWFwKCh3KSA9PiB3LmNoYXJBdCgwKSB8fCAnJykuam9pbignJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluaXRpYWxzID0gd29yZHNbMF0uY2hhckF0KDApIHx8ICcnO1xuICAgIH1cbiAgICByZXR1cm4gaW5pdGlhbHM7XG4gIH1cblxuICBnZXQgZmFsbGJhY2tDaGFubmVsSW1hZ2UoKSB7XG4gICAgaWYgKHRoaXMudHlwZSAhPT0gJ2NoYW5uZWwnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvdGhlck1lbWJlciA9IHRoaXMuZ2V0T3RoZXJNZW1iZXJJZk9uZVRvT25lQ2hhbm5lbCgpO1xuICAgICAgaWYgKG90aGVyTWVtYmVyKSB7XG4gICAgICAgIHJldHVybiBvdGhlck1lbWJlci5pbWFnZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPdGhlck1lbWJlcklmT25lVG9PbmVDaGFubmVsKCkge1xuICAgIGNvbnN0IG90aGVyTWVtYmVycyA9IE9iamVjdC52YWx1ZXMoXG4gICAgICB0aGlzLmNoYW5uZWw/LnN0YXRlPy5tZW1iZXJzIHx8IHt9XG4gICAgKS5maWx0ZXIoKG0pID0+IG0udXNlcl9pZCAhPT0gdGhpcy5jaGF0Q2xpZW50U2VydmljZS5jaGF0Q2xpZW50LnVzZXI/LmlkKTtcbiAgICBpZiAob3RoZXJNZW1iZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIG90aGVyTWVtYmVyc1swXS51c2VyO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInN0ci1jaGF0X19hdmF0YXIgc3RyLWNoYXRfX2F2YXRhci0tY2lyY2xlIHN0cmVhbS1jaGF0X19hdmF0YXItLXt7XG4gICAgbG9jYXRpb25cbiAgfX1cIlxuICB0aXRsZT1cInt7IG5hbWUgfX1cIlxuICBbc3R5bGVdPVwie1xuICAgIGZsZXhCYXNpczogJ2NhbGModmFyKC0tc3RyLWNoYXRfX3NwYWNpbmctcHgsIDFweCkgKiAnICsgc2l6ZSArICcpJyxcbiAgICBmb250U2l6ZTpcbiAgICAgIGluaXRpYWxzVHlwZSA9PT0gJ2ZpcnN0LWxldHRlci1vZi1maXJzdC13b3JkJ1xuICAgICAgICA/ICdjYWxjKHZhcigtLXN0ci1jaGF0X19zcGFjaW5nLXB4LCAxcHgpICogJyArIHNpemUgLyAyICsgJyknXG4gICAgICAgIDogJ2NhbGModmFyKC0tc3RyLWNoYXRfX3NwYWNpbmctcHgsIDFweCkgKiAnICsgc2l6ZSAvIDMgKyAnKScsXG4gICAgaGVpZ2h0OiAnY2FsYyh2YXIoLS1zdHItY2hhdF9fc3BhY2luZy1weCwgMXB4KSAqICcgKyBzaXplICsgJyknLFxuICAgIGxpbmVIZWlnaHQ6ICdjYWxjKHZhcigtLXN0ci1jaGF0X19zcGFjaW5nLXB4LCAxcHgpICogJyArIHNpemUgKyAnKScsXG4gICAgd2lkdGg6ICdjYWxjKHZhcigtLXN0ci1jaGF0X19zcGFjaW5nLXB4LCAxcHgpICogJyArIHNpemUgKyAnKSdcbiAgfVwiXG4+XG4gIDxpbWdcbiAgICAqbmdJZj1cIihpbWFnZVVybCB8fCBmYWxsYmFja0NoYW5uZWxJbWFnZSkgJiYgIWlzRXJyb3I7IGVsc2UgZmFsbGJhY2tcIlxuICAgIGNsYXNzPVwic3RyLWNoYXRfX2F2YXRhci1pbWFnZSBzdHItY2hhdF9fYXZhdGFyLWltYWdlXCJcbiAgICBzcmM9XCJ7eyBpbWFnZVVybCB8fCBmYWxsYmFja0NoYW5uZWxJbWFnZSB9fVwiXG4gICAgYWx0PVwie3sgaW5pdGlhbHMgfX1cIlxuICAgIGRhdGEtdGVzdGlkPVwiYXZhdGFyLWltZ1wiXG4gICAgKGVycm9yKT1cImlzRXJyb3IgPSB0cnVlXCJcbiAgICBbc3R5bGVdPVwie1xuICAgICAgZmxleEJhc2lzOiAnY2FsYyh2YXIoLS1zdHItY2hhdF9fc3BhY2luZy1weCwgMXB4KSAqICcgKyBzaXplICsgJyknLFxuICAgICAgaGVpZ2h0OiAnY2FsYyh2YXIoLS1zdHItY2hhdF9fc3BhY2luZy1weCwgMXB4KSAqICcgKyBzaXplICsgJyknLFxuICAgICAgb2JqZWN0Rml0OiAnY292ZXInLFxuICAgICAgd2lkdGg6ICdjYWxjKHZhcigtLXN0ci1jaGF0X19zcGFjaW5nLXB4LCAxcHgpICogJyArIHNpemUgKyAnKSdcbiAgICB9XCJcbiAgICBmZXRjaHByaW9yaXR5PVwiaGlnaFwiXG4gIC8+XG4gIDxuZy10ZW1wbGF0ZSAjZmFsbGJhY2s+XG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9XCJmYWxsYmFjay1pbWdcIlxuICAgICAgc3R5bGU9XCJvdmVyZmxvdzogaGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpc1wiXG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19hdmF0YXItZmFsbGJhY2tcIlxuICAgID5cbiAgICAgIHt7IGluaXRpYWxzIH19XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxkaXZcbiAgICBkYXRhLXRlc3RpZD1cIm9ubGluZS1pbmRpY2F0b3JcIlxuICAgICpuZ0lmPVwiaXNPbmxpbmUgJiYgc2hvd09ubGluZUluZGljYXRvclwiXG4gICAgY2xhc3M9XCJzdHItY2hhdF9fYXZhdGFyLS1vbmxpbmUtaW5kaWNhdG9yXCJcbiAgPjwvZGl2PlxuPC9kaXY+XG4iXX0=