@cometchat/chat-uikit-angular 4.3.4 → 4.3.5
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.
- package/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.d.ts +4 -1
- package/README.md +11 -18
- package/esm2020/CometChatMessages/cometchat-messages/cometchat-messages.component.mjs +3 -3
- package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.mjs +10 -3
- package/esm2020/Shared/CometChatUIkit/CometChatUIKit.mjs +2 -2
- package/fesm2015/cometchat-chat-uikit-angular.mjs +12 -5
- package/fesm2015/cometchat-chat-uikit-angular.mjs.map +1 -1
- package/fesm2020/cometchat-chat-uikit-angular.mjs +12 -5
- package/fesm2020/cometchat-chat-uikit-angular.mjs.map +1 -1
- package/package.json +5 -4
|
@@ -26,6 +26,9 @@ export declare class CometChatThreadedMessagesComponent implements OnInit, OnCha
|
|
|
26
26
|
messageListConfiguration: MessageListConfiguration;
|
|
27
27
|
messageComposerConfiguration: MessageComposerConfiguration;
|
|
28
28
|
threadedMessagesStyle: ThreadedMessagesStyle;
|
|
29
|
+
hideMessageComposer: boolean;
|
|
30
|
+
messageComposerView: TemplateRef<any>;
|
|
31
|
+
messageListView: TemplateRef<any>;
|
|
29
32
|
user: CometChat.User;
|
|
30
33
|
group: CometChat.Group;
|
|
31
34
|
loggedInUser: CometChat.User | null;
|
|
@@ -74,5 +77,5 @@ export declare class CometChatThreadedMessagesComponent implements OnInit, OnCha
|
|
|
74
77
|
borderRadius: string | undefined;
|
|
75
78
|
};
|
|
76
79
|
static ɵfac: i0.ɵɵFactoryDeclaration<CometChatThreadedMessagesComponent, never>;
|
|
77
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CometChatThreadedMessagesComponent, "cometchat-threaded-messages", never, { "onClose": "onClose"; "onError": "onError"; "parentMessage": "parentMessage"; "title": "title"; "closeIconURL": "closeIconURL"; "bubbleView": "bubbleView"; "messageActionView": "messageActionView"; "messageListConfiguration": "messageListConfiguration"; "messageComposerConfiguration": "messageComposerConfiguration"; "threadedMessagesStyle": "threadedMessagesStyle"; }, {}, never, never>;
|
|
80
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CometChatThreadedMessagesComponent, "cometchat-threaded-messages", never, { "onClose": "onClose"; "onError": "onError"; "parentMessage": "parentMessage"; "title": "title"; "closeIconURL": "closeIconURL"; "bubbleView": "bubbleView"; "messageActionView": "messageActionView"; "messageListConfiguration": "messageListConfiguration"; "messageComposerConfiguration": "messageComposerConfiguration"; "threadedMessagesStyle": "threadedMessagesStyle"; "hideMessageComposer": "hideMessageComposer"; "messageComposerView": "messageComposerView"; "messageListView": "messageListView"; }, {}, never, never>;
|
|
78
81
|
}
|
package/README.md
CHANGED
|
@@ -1,22 +1,5 @@
|
|
|
1
|
-
<div align="center">
|
|
2
|
-
<img alt="CometChat" src="https://avatars2.githubusercontent.com/u/45484907?s=200&v=4" alt="CometChat" />
|
|
3
|
-
</div>
|
|
4
|
-
<br>
|
|
5
|
-
<div align="center">Full-fledged Chat UIKit built with <a href="https://angular.io/">Angular</a>. </div>
|
|
6
|
-
<div align="center">
|
|
7
|
-
<a href="https://www.cometchat.com/docs/angular-uikit-beta/overview"><strong>Explore CometChat docs »</strong></a>
|
|
8
|
-
</div>
|
|
9
|
-
<br />
|
|
10
|
-
<br />
|
|
11
1
|
|
|
12
|
-
|
|
13
|
-
## Table of contents
|
|
14
|
-
- [About the project](#about-the-project)
|
|
15
|
-
- [Prerequisites](#prerequisites)
|
|
16
|
-
- [Getting Started](#getting-started)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
## About the project
|
|
2
|
+
## CometChat Angular UI Kit
|
|
20
3
|
CometChat Angular UIKit provides pre-built user interface kit that developers can use to quickly integrate a reliable & fully featured chat experience into an existing or a new app.<br />
|
|
21
4
|
|
|
22
5
|
### Prerequisites
|
|
@@ -29,3 +12,13 @@ To set up Angular Chat UIKit and utilize CometChat for your chat functionality,
|
|
|
29
12
|
- Create an App: After registering, log in to your CometChat account and create a new app. Provide the necessary details such as the app name, platform (Angular), and other relevant information. Once you've created the app, CometChat will generate an Auth Key and App ID for you. Make sure to keep these credentials secure, as you'll need them later.
|
|
30
13
|
- Make sure you've read the [key concepts](https://www.cometchat.com/docs/angular-uikit-beta/key-concepts)
|
|
31
14
|
- Follow the steps provided in the integration section [here](https://www.cometchat.com/docs/angular-uikit-beta/integration#getting-started)
|
|
15
|
+
|
|
16
|
+
### Dependencies
|
|
17
|
+
Install the necessary peer dependencies by running the following command:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install @cometchat/chat-sdk-javascript@latest @cometchat/uikit-elements@latest @cometchat/uikit-resources@latest @cometchat/uikit-shared@latest
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Help and Support
|
|
24
|
+
If you run into any issues while executing the project or integrating with our UI Kits, refer to our [documentation](https://www.cometchat.com/docs/angular-uikit/integration), create a [support ticket](https://help.cometchat.com/hc/en-us), or receive real-time assistance through the [CometChat Dashboard](https://app.cometchat.com/).
|
|
@@ -380,10 +380,10 @@ export class CometChatMessagesComponent {
|
|
|
380
380
|
}
|
|
381
381
|
}
|
|
382
382
|
CometChatMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatMessagesComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CometChatThemeService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
383
|
-
CometChatMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatMessagesComponent, selector: "cometchat-messages", inputs: { user: "user", group: "group", currentAskAIBot: "currentAskAIBot", hideMessageComposer: "hideMessageComposer", disableTyping: "disableTyping", messageHeaderConfiguration: "messageHeaderConfiguration", messageListConfiguration: "messageListConfiguration", messageComposerConfiguration: "messageComposerConfiguration", threadedMessageConfiguration: "threadedMessageConfiguration", detailsConfiguration: "detailsConfiguration", customSoundForIncomingMessages: "customSoundForIncomingMessages", customSoundForOutgoingMessages: "customSoundForOutgoingMessages", disableSoundForMessages: "disableSoundForMessages", messagesStyle: "messagesStyle", messageHeaderView: "messageHeaderView", messageComposerView: "messageComposerView", messageListView: "messageListView", hideMessageHeader: "hideMessageHeader", hideDetails: "hideDetails", auxiliaryMenu: "auxiliaryMenu" }, viewQueries: [{ propertyName: "messageComposerRef", first: true, predicate: ["messageComposerRef"], descendants: true }, { propertyName: "messageListRef", first: true, predicate: ["messageListRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-messages__wrapper\">\n <cometchat-backdrop *ngIf=\"showAiBotChat\">\n <aiassist-bot-message-list [user]=\"user\" [group]=\"group\"\n [currentAskAIBot]=\"currentAskAIBot\"></aiassist-bot-message-list>\n </cometchat-backdrop>\n <div class=\"cc-messages\" [ngStyle]=\"chatListStyle()\" *ngIf=\"user || group\">\n <div class=\"cc-messages__header\" *ngIf=\"!hideMessageHeader\">\n <div *ngIf=\"messageHeaderView; else customHeaderView\"\n class=\"cc-messages__header-customview\">\n <ng-container *ngTemplateOutlet=\"messageHeaderView\">\n </ng-container>\n </div>\n <ng-template #customHeaderView>\n <cometchat-message-header [user]=\"user\" [group]=\"group\"\n [subtitleView]=\"messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"messageHeaderConfiguration.disableUsersPresence\"\n [protectedGroupIcon]=\"messageHeaderConfiguration.protectedGroupIcon\"\n [privateGroupIcon]=\"messageHeaderConfiguration.privateGroupIcon\"\n [menu]=\"headerMenu\"\n [messageHeaderStyle]=\"messageHeaderConfiguration.messageHeaderStyle\"\n [backButtonIconURL]=\"messageHeaderConfiguration.backButtonIconURL\"\n [hideBackButton]=\"messageHeaderConfiguration.hideBackButton\"\n [onError]=\"messageHeaderConfiguration.onError\"\n [onBack]=\"messageHeaderConfiguration.onBack\"\n [listItemStyle]=\"messageHeaderConfiguration.listItemStyle\"\n [statusIndicatorStyle]=\"messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"messageHeaderConfiguration.avatarStyle\">\n </cometchat-message-header>\n </ng-template>\n </div>\n <div class=\"cc-messages__list\">\n <cometchat-message-list #messageListRef\n [disableReactions]=\"messageListConfiguration?.disableReactions!\"\n [emojiKeyboardStyle]=\"messageListConfiguration?.emojiKeyboardStyle!\"\n [threadIndicatorIcon]=\"messageListConfiguration?.threadIndicatorIcon!\"\n [reactionsConfiguration]=\"messageListConfiguration?.reactionsConfiguration!\"\n [messageInformationConfiguration]=\"\n messageListConfiguration.messageInformationConfiguration\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [customSoundForMessages]=\"customSoundForIncomingMessages\"\n [emptyStateView]=\"messageListConfiguration.emptyStateView\"\n [loadingIconURL]=\"messageListConfiguration?.loadingIconURL!\"\n [loadingStateView]=\"messageListConfiguration.loadingStateView\"\n [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\"\n [disableReceipt]=\"messageListConfiguration.disableReceipt\"\n [readIcon]=\"messageListConfiguration.readIcon\"\n [deliveredIcon]=\"messageListConfiguration.deliveredIcon\"\n [sentIcon]=\"messageListConfiguration.sentIcon\"\n [waitIcon]=\"messageListConfiguration.waitIcon\"\n [errorIcon]=\"messageListConfiguration.errorIcon\"\n [alignment]=\"messageListConfiguration.alignment\"\n [showAvatar]=\"messageListConfiguration.showAvatar\"\n [datePattern]=\"messageListConfiguration.datePattern\"\n [timestampAlignment]=\"messageListConfiguration.timestampAlignment\"\n [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [templates]=\"messageListConfiguration.templates\"\n [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder\"\n [thresholdValue]=\"messageListConfiguration.thresholdValue\"\n [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick || openThreadView\"\n [headerView]=\"messageListConfiguration.headerView\"\n [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\"\n [scrollToBottomOnNewMessages]=\"messageListConfiguration.scrollToBottomOnNewMessages\"\n [backdropStyle]=\"messageListConfiguration.backdropStyle\"\n [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\"\n [messageListStyle]=\"messageListConfiguration.messageListStyle\"\n [onError]=\"messageListConfiguration.onError\"\n [disableMentions]=\"messageListConfiguration.disableMentions\"\n [textFormatters]=\"messageListConfiguration?.textFormatters\">\n </cometchat-message-list>\n </div>\n <div class=\"cc-messages__composer\"\n *ngIf=\"!hideMessageComposer && !openThreadedMessages\">\n <div *ngIf=\"messageComposerView; else customComposerView\"\n class=\"cc-messages__composer--customview\">\n <ng-container *ngTemplateOutlet=\"messageComposerView\">\n </ng-container>\n </div>\n <ng-template #customComposerView>\n <cometchat-message-composer #messageComposerRef\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [voiceRecordingStopIconURL]=\"messageComposerConfiguration.voiceRecordingStopIconURL\"\n [voiceRecordingStartIconURL]=\"messageComposerConfiguration.voiceRecordingStartIconURL\"\n [voiceRecordingCloseIconURL]=\"messageComposerConfiguration.voiceRecordingCloseIconURL\"\n [voiceRecordingSubmitIconURL]=\"messageComposerConfiguration.voiceRecordingSubmitIconURL\"\n [mediaRecorderStyle]=\"messageComposerConfiguration.mediaRecorderStyle\"\n [customSoundForMessages]=\"customSoundForOutgoingMessages\"\n [user]=\"user\" [group]=\"group\"\n [text]=\"messageComposerConfiguration.text\"\n [headerView]=\"messageComposerConfiguration.headerView\"\n [onTextChange]=\"messageComposerConfiguration.onTextChange\"\n [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\"\n [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\"\n [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\"\n [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\"\n [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\"\n [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\"\n [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\"\n [aiOptionsStyle]=\"messageComposerConfiguration.AIOptionsStyle\"\n [aiIconURL]=\"messageComposerConfiguration.AIIconURL\"\n [userMemberWrapperConfiguration]=\"messageComposerConfiguration.userMemberWrapperConfiguration\"\n [textFormatters]=\"messageComposerConfiguration?.textFormatters\"\n [disableMentions]=\"messageComposerConfiguration.disableMentions\"\n [mentionsWarningText]=\"messageComposerConfiguration?.mentionsWarningText\"\n [mentionsWarningStyle]=\"messageComposerConfiguration?.mentionsWarningStyle\">\n </cometchat-message-composer>\n </ng-template>\n </div>\n </div>\n <div class=\"cc-messages__livereaction\">\n <cometchat-live-reaction *ngIf=\"liveReaction\"\n [reactionIconURL]=\"reactionName\"></cometchat-live-reaction>\n </div>\n <div *ngIf=\"openThreadedMessages\" class=\"cc-messages__threadedmessages\">\n <cometchat-threaded-messages [onClose]=\"closeThreadView\"\n [threadedMessagesStyle]=\"threadedMessageConfiguration.threadedMessagesStyle\"\n [messageActionView]=\"threadedMessageConfiguration.messageActionView\"\n [closeIconURL]=\"threadedMessageConfiguration.closeIconURL\"\n [onError]=\"threadedMessageConfiguration.onError\"\n [bubbleView]=\"threadedMessageConfiguration.bubbleView || parentBubbleView\"\n [parentMessage]=\"threadMessageObject\" [user]=\"user\" [group]=\"group\"\n [messageListConfiguration]=\"threadedMessageConfiguration.messageListConfiguration\"></cometchat-threaded-messages>\n </div>\n <div *ngIf=\"openDetails\" class=\"cc-messages__details\">\n <cometchat-details\n [protectedGroupIcon]=\"detailsConfiguration.protectedGroupIcon\"\n [privateGroupIcon]=\"detailsConfiguration.privateGroupIcon\"\n [backdropStyle]=\"detailsConfiguration.backdropStyle\"\n [disableUsersPresence]=\"detailsConfiguration?.disableUsersPresence!\"\n [transferOwnershipConfiguration]=\"detailsConfiguration.transferOwnershipConfiguration\"\n [groupMembersConfiguration]=\"detailsConfiguration.groupMembersConfiguration\"\n [bannedMembersConfiguration]=\"detailsConfiguration.bannedMembersConfiguration\"\n [addMembersConfiguration]=\"detailsConfiguration.addMembersConfiguration\"\n [onClose]=\"detailsConfiguration.onClose || closeDetailsPage\"\n [listItemStyle]=\"detailsConfiguration.listItemStyle\"\n [detailsStyle]=\"detailsConfiguration.detailsStyle\"\n [avatarStyle]=\"detailsConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"detailsConfiguration.statusIndicatorStyle\"\n [leaveDialogStyle]=\"detailsConfiguration.leaveDialogStyle\"\n [data]=\"setDetailsTemplate()\"\n [customProfileView]=\"detailsConfiguration.customProfileView\"\n [subtitleView]=\"detailsConfiguration.subtitleView\"\n [hideProfile]=\"detailsConfiguration.hideProfile\"\n [onError]=\"detailsConfiguration.onError\"\n [closeButtonIconURL]=\"detailsConfiguration.closeButtonIconURL\"\n [user]=\"user\" [group]=\"group\"></cometchat-details>\n </div>\n</div>\n<ng-template #headerMenu>\n <div class=\"cc-messages__headermenu\">\n <div class=\"cc-messages__auxiliarymenu\"\n *ngIf=\"getAuxilaryView(); else elseBlock\">\n <ng-container *ngTemplateOutlet=\"getAuxilaryView()\">\n </ng-container>\n </div>\n <ng-template #elseBlock>\n <cometchat-call-buttons *ngIf=\"enableCalling\" voiceCallIconText=\"\"\n videoCallIconText=\"\" [user]=\"user\" [group]=\"group\"\n [callButtonsStyle]=\"callButtonsStyle\">\n </cometchat-call-buttons>\n </ng-template>\n <cometchat-button *ngIf=\"!hideDetails\" [iconURL]=\"infoIconStyle\"\n [buttonStyle]=\"detailsButtonStyle\"\n (cc-button-clicked)=\"openDetailsPage()\"></cometchat-button>\n </div>\n</ng-template>\n", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-messages__wrapper{position:relative;height:100%;width:100%}.cc-messages{display:flex;flex-direction:column;position:relative;height:100%;width:100%;box-sizing:border-box;justify-content:space-between}.cc-messages__headermenu{display:flex;justify-content:center;align-items:center}.cc-messages__threadedmessages,.cc-messages__details{position:absolute;top:0;left:0;height:100%;width:100%;max-height:100%;overflow-y:auto;overflow-x:hidden;max-width:100%;z-index:1}.cc-messages__header{width:100%}.cc-messages__list{overflow:hidden;width:100%;height:100%}cometchat-threaded-messages{height:100%;display:flex}.cc-messages__composer{width:100%;display:flex;flex-direction:column;justify-content:flex-end}\n"], components: [{ type: i2.AIAssistBotMessageListComponent, selector: "aiassist-bot-message-list", inputs: ["hideSearch", "footerView", "user", "group", "currentAskAIBot", "subtitleText", "sendIconUrl", "waitIcon", "errorIcon", "botFirstMessageText", "closeButtonIconURL", "sendButtonIconURL", "avatarStyle", "aiBotChatHeaderStyle", "aiBotChatContainerStyle", "datePattern", "alignment"] }, { type: i3.CometChatMessageHeaderComponent, selector: "cometchat-message-header", inputs: ["avatarStyle", "statusIndicatorStyle", "messageHeaderStyle", "listItemStyle", "subtitleView", "disableUsersPresence", "disableTyping", "protectedGroupIcon", "privateGroupIcon", "menu", "user", "group", "backButtonIconURL", "hideBackButton", "listItemView", "onError", "onBack"] }, { type: i4.CometChatMessageListComponent, selector: "cometchat-message-list", inputs: ["hideError", "errorStateView", "loadingStateView", "emptyStateView", "errorStateText", "emptyStateText", "loadingIconURL", "user", "group", "disableReceipt", "disableSoundForMessages", "customSoundForMessages", "readIcon", "deliveredIcon", "sentIcon", "waitIcon", "errorIcon", "aiErrorIcon", "aiEmptyIcon", "alignment", "showAvatar", "datePattern", "timestampAlignment", "DateSeparatorPattern", "templates", "messagesRequestBuilder", "newMessageIndicatorText", "scrollToBottomOnNewMessages", "thresholdValue", "unreadMessageThreshold", "reactionsConfiguration", "disableReactions", "emojiKeyboardStyle", "apiConfiguration", "onThreadRepliesClick", "headerView", "footerView", "parentMessageId", "threadIndicatorIcon", "avatarStyle", "backdropStyle", "dateSeparatorStyle", "messageListStyle", "onError", "messageInformationConfiguration", "disableMentions", "textFormatters"] }, { type: i5.CometChatMessageComposerComponent, selector: "cometchat-message-composer", inputs: ["user", "group", "disableSoundForMessages", "customSoundForMessage", "disableTypingEvents", "text", "placeholderText", "headerView", "onTextChange", "attachmentIconURL", "attachmentOptions", "secondaryButtonView", "auxilaryButtonView", "auxiliaryButtonsAlignment", "sendButtonView", "parentMessageId", "hideLiveReaction", "LiveReactionIconURL", "backButtonIconURL", "mentionsWarningText", "mentionsWarningStyle", "messageComposerStyle", "onSendButtonClick", "onError", "backdropStyle", "actionSheetStyle", "aiActionSheetStyle", "hideVoiceRecording", "mediaRecorderStyle", "aiOptionsStyle", "aiIconURL", "voiceRecordingIconURL", "voiceRecordingCloseIconURL", "voiceRecordingStartIconURL", "voiceRecordingStopIconURL", "voiceRecordingSubmitIconURL", "userMemberWrapperConfiguration", "disableMentions", "textFormatters"], outputs: ["childEvent"] }, { type: i6.CometChatThreadedMessagesComponent, selector: "cometchat-threaded-messages", inputs: ["onClose", "onError", "parentMessage", "title", "closeIconURL", "bubbleView", "messageActionView", "messageListConfiguration", "messageComposerConfiguration", "threadedMessagesStyle"] }, { type: i7.CometChatDetailsComponent, selector: "cometchat-details", inputs: ["group", "user", "title", "closeButtonIconURL", "hideProfile", "subtitleView", "customProfileView", "data", "disableUsersPresence", "privateGroupIcon", "protectedGroupIcon", "onError", "onClose", "leaveGroupConfirmButtonText", "leaveGroupCancelButtonText", "leaveGroupDialogMessage", "leaveGroupDialogStyle", "deleteGroupConfirmButtonText", "deleteGroupDialogMessage", "deleteGroupCancelButtonText", "deleteGroupDialogStyle", "transferOwnershipConfirmButtonText", "transferOwnershipDialogMessage", "transferOwnershipCancelButtonText", "transferOwnershipDialogStyle", "addMembersConfiguration", "bannedMembersConfiguration", "groupMembersConfiguration", "transferOwnershipConfiguration", "statusIndicatorStyle", "backdropStyle", "avatarStyle", "detailsStyle", "listItemStyle"] }, { type: i8.CometChatCallButtonsComponent, selector: "cometchat-call-buttons", inputs: ["user", "group", "voiceCallIconURL", "voiceCallIconText", "voiceCallIconHoverText", "videoCallIconURL", "videoCallIconText", "videoCallIconHoverText", "onVoiceCallClick", "onVideoCallClick", "onError", "callButtonsStyle", "outgoingCallConfiguration", "ongoingCallConfiguration"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
383
|
+
CometChatMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatMessagesComponent, selector: "cometchat-messages", inputs: { user: "user", group: "group", currentAskAIBot: "currentAskAIBot", hideMessageComposer: "hideMessageComposer", disableTyping: "disableTyping", messageHeaderConfiguration: "messageHeaderConfiguration", messageListConfiguration: "messageListConfiguration", messageComposerConfiguration: "messageComposerConfiguration", threadedMessageConfiguration: "threadedMessageConfiguration", detailsConfiguration: "detailsConfiguration", customSoundForIncomingMessages: "customSoundForIncomingMessages", customSoundForOutgoingMessages: "customSoundForOutgoingMessages", disableSoundForMessages: "disableSoundForMessages", messagesStyle: "messagesStyle", messageHeaderView: "messageHeaderView", messageComposerView: "messageComposerView", messageListView: "messageListView", hideMessageHeader: "hideMessageHeader", hideDetails: "hideDetails", auxiliaryMenu: "auxiliaryMenu" }, viewQueries: [{ propertyName: "messageComposerRef", first: true, predicate: ["messageComposerRef"], descendants: true }, { propertyName: "messageListRef", first: true, predicate: ["messageListRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-messages__wrapper\">\n <cometchat-backdrop *ngIf=\"showAiBotChat\">\n <aiassist-bot-message-list [user]=\"user\" [group]=\"group\"\n [currentAskAIBot]=\"currentAskAIBot\"></aiassist-bot-message-list>\n </cometchat-backdrop>\n <div class=\"cc-messages\" [ngStyle]=\"chatListStyle()\" *ngIf=\"user || group\">\n <div class=\"cc-messages__header\" *ngIf=\"!hideMessageHeader\">\n <div *ngIf=\"messageHeaderView; else customHeaderView\"\n class=\"cc-messages__header-customview\">\n <ng-container\n *ngTemplateOutlet=\"messageHeaderView;context:{ user: user, group: group }\">\n </ng-container>\n </div>\n <ng-template #customHeaderView>\n <cometchat-message-header [user]=\"user\" [group]=\"group\"\n [subtitleView]=\"messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"messageHeaderConfiguration.disableUsersPresence\"\n [protectedGroupIcon]=\"messageHeaderConfiguration.protectedGroupIcon\"\n [privateGroupIcon]=\"messageHeaderConfiguration.privateGroupIcon\"\n [menu]=\"headerMenu\"\n [messageHeaderStyle]=\"messageHeaderConfiguration.messageHeaderStyle\"\n [backButtonIconURL]=\"messageHeaderConfiguration.backButtonIconURL\"\n [hideBackButton]=\"messageHeaderConfiguration.hideBackButton\"\n [onError]=\"messageHeaderConfiguration.onError\"\n [onBack]=\"messageHeaderConfiguration.onBack\"\n [listItemStyle]=\"messageHeaderConfiguration.listItemStyle\"\n [statusIndicatorStyle]=\"messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"messageHeaderConfiguration.avatarStyle\">\n </cometchat-message-header>\n </ng-template>\n </div>\n <div class=\"cc-messages__list\" *ngIf=\"!messageListView\">\n <cometchat-message-list #messageListRef\n [disableReactions]=\"messageListConfiguration?.disableReactions!\"\n [emojiKeyboardStyle]=\"messageListConfiguration?.emojiKeyboardStyle!\"\n [threadIndicatorIcon]=\"messageListConfiguration?.threadIndicatorIcon!\"\n [reactionsConfiguration]=\"messageListConfiguration?.reactionsConfiguration!\"\n [messageInformationConfiguration]=\"\n messageListConfiguration.messageInformationConfiguration\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [customSoundForMessages]=\"customSoundForIncomingMessages\"\n [emptyStateView]=\"messageListConfiguration.emptyStateView\"\n [loadingIconURL]=\"messageListConfiguration?.loadingIconURL!\"\n [loadingStateView]=\"messageListConfiguration.loadingStateView\"\n [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\"\n [disableReceipt]=\"messageListConfiguration.disableReceipt\"\n [readIcon]=\"messageListConfiguration.readIcon\"\n [deliveredIcon]=\"messageListConfiguration.deliveredIcon\"\n [sentIcon]=\"messageListConfiguration.sentIcon\"\n [waitIcon]=\"messageListConfiguration.waitIcon\"\n [errorIcon]=\"messageListConfiguration.errorIcon\"\n [alignment]=\"messageListConfiguration.alignment\"\n [showAvatar]=\"messageListConfiguration.showAvatar\"\n [datePattern]=\"messageListConfiguration.datePattern\"\n [timestampAlignment]=\"messageListConfiguration.timestampAlignment\"\n [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [templates]=\"messageListConfiguration.templates\"\n [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder\"\n [thresholdValue]=\"messageListConfiguration.thresholdValue\"\n [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick || openThreadView\"\n [headerView]=\"messageListConfiguration.headerView\"\n [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\"\n [scrollToBottomOnNewMessages]=\"messageListConfiguration.scrollToBottomOnNewMessages\"\n [backdropStyle]=\"messageListConfiguration.backdropStyle\"\n [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\"\n [messageListStyle]=\"messageListConfiguration.messageListStyle\"\n [onError]=\"messageListConfiguration.onError\"\n [disableMentions]=\"messageListConfiguration.disableMentions\"\n [textFormatters]=\"messageListConfiguration?.textFormatters\">\n </cometchat-message-list>\n </div>\n <ng-container *ngIf=\"messageListView\">\n <ng-container\n *ngTemplateOutlet=\"messageListView;context:{ user: user, group: group }\">\n </ng-container>\n </ng-container>\n\n <div class=\"cc-messages__composer\"\n *ngIf=\"!messageComposerView && !hideMessageComposer && !openThreadedMessages\">\n <cometchat-message-composer #messageComposerRef\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [voiceRecordingStopIconURL]=\"messageComposerConfiguration.voiceRecordingStopIconURL\"\n [voiceRecordingStartIconURL]=\"messageComposerConfiguration.voiceRecordingStartIconURL\"\n [voiceRecordingCloseIconURL]=\"messageComposerConfiguration.voiceRecordingCloseIconURL\"\n [voiceRecordingSubmitIconURL]=\"messageComposerConfiguration.voiceRecordingSubmitIconURL\"\n [mediaRecorderStyle]=\"messageComposerConfiguration.mediaRecorderStyle\"\n [customSoundForMessages]=\"customSoundForOutgoingMessages\" [user]=\"user\"\n [group]=\"group\" [text]=\"messageComposerConfiguration.text\"\n [headerView]=\"messageComposerConfiguration.headerView\"\n [onTextChange]=\"messageComposerConfiguration.onTextChange\"\n [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\"\n [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\"\n [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\"\n [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\"\n [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\"\n [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\"\n [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\"\n [aiOptionsStyle]=\"messageComposerConfiguration.AIOptionsStyle\"\n [aiIconURL]=\"messageComposerConfiguration.AIIconURL\"\n [userMemberWrapperConfiguration]=\"messageComposerConfiguration.userMemberWrapperConfiguration\"\n [textFormatters]=\"messageComposerConfiguration?.textFormatters\"\n [disableMentions]=\"messageComposerConfiguration.disableMentions\"\n [mentionsWarningText]=\"messageComposerConfiguration?.mentionsWarningText\"\n [mentionsWarningStyle]=\"messageComposerConfiguration?.mentionsWarningStyle\">\n </cometchat-message-composer>\n </div>\n <div *ngIf=\"messageComposerView && !hideMessageComposer\"\n class=\"cc-messages__composer--customview\">\n <ng-container\n *ngTemplateOutlet=\"messageComposerView;context:{ user: user, group: group }\">\n </ng-container>\n </div>\n </div>\n <div class=\"cc-messages__livereaction\">\n <cometchat-live-reaction *ngIf=\"liveReaction\"\n [reactionIconURL]=\"reactionName\"></cometchat-live-reaction>\n </div>\n <div *ngIf=\"openThreadedMessages\" class=\"cc-messages__threadedmessages\">\n <cometchat-threaded-messages [onClose]=\"closeThreadView\"\n [threadedMessagesStyle]=\"threadedMessageConfiguration.threadedMessagesStyle\"\n [messageActionView]=\"threadedMessageConfiguration.messageActionView\"\n [closeIconURL]=\"threadedMessageConfiguration.closeIconURL\"\n [onError]=\"threadedMessageConfiguration.onError\"\n [bubbleView]=\"threadedMessageConfiguration.bubbleView || parentBubbleView\"\n [parentMessage]=\"threadMessageObject\" [user]=\"user\" [group]=\"group\"\n [messageListConfiguration]=\"threadedMessageConfiguration.messageListConfiguration\"\n [messageComposerView]=\"threadedMessageConfiguration.messageComposerView\"\n [messageListView]=\"threadedMessageConfiguration.messageListView\"\n [hideMessageComposer]=\"threadedMessageConfiguration.hideMessageComposer\"></cometchat-threaded-messages>\n </div>\n\n <div *ngIf=\"openDetails\" class=\"cc-messages__details\">\n <cometchat-details\n [protectedGroupIcon]=\"detailsConfiguration.protectedGroupIcon\"\n [privateGroupIcon]=\"detailsConfiguration.privateGroupIcon\"\n [backdropStyle]=\"detailsConfiguration.backdropStyle\"\n [disableUsersPresence]=\"detailsConfiguration?.disableUsersPresence!\"\n [transferOwnershipConfiguration]=\"detailsConfiguration.transferOwnershipConfiguration\"\n [groupMembersConfiguration]=\"detailsConfiguration.groupMembersConfiguration\"\n [bannedMembersConfiguration]=\"detailsConfiguration.bannedMembersConfiguration\"\n [addMembersConfiguration]=\"detailsConfiguration.addMembersConfiguration\"\n [onClose]=\"detailsConfiguration.onClose || closeDetailsPage\"\n [listItemStyle]=\"detailsConfiguration.listItemStyle\"\n [detailsStyle]=\"detailsConfiguration.detailsStyle\"\n [avatarStyle]=\"detailsConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"detailsConfiguration.statusIndicatorStyle\"\n [leaveDialogStyle]=\"detailsConfiguration.leaveDialogStyle\"\n [data]=\"setDetailsTemplate()\"\n [customProfileView]=\"detailsConfiguration.customProfileView\"\n [subtitleView]=\"detailsConfiguration.subtitleView\"\n [hideProfile]=\"detailsConfiguration.hideProfile\"\n [onError]=\"detailsConfiguration.onError\"\n [closeButtonIconURL]=\"detailsConfiguration.closeButtonIconURL\"\n [user]=\"user\" [group]=\"group\"></cometchat-details>\n </div>\n</div>\n<ng-template #headerMenu>\n <div class=\"cc-messages__headermenu\">\n <div class=\"cc-messages__auxiliarymenu\"\n *ngIf=\"getAuxilaryView(); else elseBlock\">\n <ng-container\n *ngTemplateOutlet=\"getAuxilaryView();context:{ user: user, group: group }\">\n </ng-container>\n </div>\n <ng-template #elseBlock>\n <cometchat-call-buttons *ngIf=\"enableCalling\" voiceCallIconText=\"\"\n videoCallIconText=\"\" [user]=\"user\" [group]=\"group\"\n [callButtonsStyle]=\"callButtonsStyle\">\n </cometchat-call-buttons>\n </ng-template>\n <cometchat-button *ngIf=\"!hideDetails\" [iconURL]=\"infoIconStyle\"\n [buttonStyle]=\"detailsButtonStyle\"\n (cc-button-clicked)=\"openDetailsPage()\"></cometchat-button>\n </div>\n</ng-template>\n", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-messages__wrapper{position:relative;height:100%;width:100%}.cc-messages{display:flex;flex-direction:column;position:relative;height:100%;width:100%;box-sizing:border-box;justify-content:space-between}.cc-messages__headermenu{display:flex;justify-content:center;align-items:center}.cc-messages__threadedmessages,.cc-messages__details{position:absolute;top:0;left:0;height:100%;width:100%;max-height:100%;overflow-y:auto;overflow-x:hidden;max-width:100%;z-index:1}.cc-messages__header{width:100%}.cc-messages__list{overflow:hidden;width:100%;height:100%}cometchat-threaded-messages{height:100%;display:flex}.cc-messages__composer{width:100%;display:flex;flex-direction:column;justify-content:flex-end}\n"], components: [{ type: i2.AIAssistBotMessageListComponent, selector: "aiassist-bot-message-list", inputs: ["hideSearch", "footerView", "user", "group", "currentAskAIBot", "subtitleText", "sendIconUrl", "waitIcon", "errorIcon", "botFirstMessageText", "closeButtonIconURL", "sendButtonIconURL", "avatarStyle", "aiBotChatHeaderStyle", "aiBotChatContainerStyle", "datePattern", "alignment"] }, { type: i3.CometChatMessageHeaderComponent, selector: "cometchat-message-header", inputs: ["avatarStyle", "statusIndicatorStyle", "messageHeaderStyle", "listItemStyle", "subtitleView", "disableUsersPresence", "disableTyping", "protectedGroupIcon", "privateGroupIcon", "menu", "user", "group", "backButtonIconURL", "hideBackButton", "listItemView", "onError", "onBack"] }, { type: i4.CometChatMessageListComponent, selector: "cometchat-message-list", inputs: ["hideError", "errorStateView", "loadingStateView", "emptyStateView", "errorStateText", "emptyStateText", "loadingIconURL", "user", "group", "disableReceipt", "disableSoundForMessages", "customSoundForMessages", "readIcon", "deliveredIcon", "sentIcon", "waitIcon", "errorIcon", "aiErrorIcon", "aiEmptyIcon", "alignment", "showAvatar", "datePattern", "timestampAlignment", "DateSeparatorPattern", "templates", "messagesRequestBuilder", "newMessageIndicatorText", "scrollToBottomOnNewMessages", "thresholdValue", "unreadMessageThreshold", "reactionsConfiguration", "disableReactions", "emojiKeyboardStyle", "apiConfiguration", "onThreadRepliesClick", "headerView", "footerView", "parentMessageId", "threadIndicatorIcon", "avatarStyle", "backdropStyle", "dateSeparatorStyle", "messageListStyle", "onError", "messageInformationConfiguration", "disableMentions", "textFormatters"] }, { type: i5.CometChatMessageComposerComponent, selector: "cometchat-message-composer", inputs: ["user", "group", "disableSoundForMessages", "customSoundForMessage", "disableTypingEvents", "text", "placeholderText", "headerView", "onTextChange", "attachmentIconURL", "attachmentOptions", "secondaryButtonView", "auxilaryButtonView", "auxiliaryButtonsAlignment", "sendButtonView", "parentMessageId", "hideLiveReaction", "LiveReactionIconURL", "backButtonIconURL", "mentionsWarningText", "mentionsWarningStyle", "messageComposerStyle", "onSendButtonClick", "onError", "backdropStyle", "actionSheetStyle", "aiActionSheetStyle", "hideVoiceRecording", "mediaRecorderStyle", "aiOptionsStyle", "aiIconURL", "voiceRecordingIconURL", "voiceRecordingCloseIconURL", "voiceRecordingStartIconURL", "voiceRecordingStopIconURL", "voiceRecordingSubmitIconURL", "userMemberWrapperConfiguration", "disableMentions", "textFormatters"], outputs: ["childEvent"] }, { type: i6.CometChatThreadedMessagesComponent, selector: "cometchat-threaded-messages", inputs: ["onClose", "onError", "parentMessage", "title", "closeIconURL", "bubbleView", "messageActionView", "messageListConfiguration", "messageComposerConfiguration", "threadedMessagesStyle", "hideMessageComposer", "messageComposerView", "messageListView"] }, { type: i7.CometChatDetailsComponent, selector: "cometchat-details", inputs: ["group", "user", "title", "closeButtonIconURL", "hideProfile", "subtitleView", "customProfileView", "data", "disableUsersPresence", "privateGroupIcon", "protectedGroupIcon", "onError", "onClose", "leaveGroupConfirmButtonText", "leaveGroupCancelButtonText", "leaveGroupDialogMessage", "leaveGroupDialogStyle", "deleteGroupConfirmButtonText", "deleteGroupDialogMessage", "deleteGroupCancelButtonText", "deleteGroupDialogStyle", "transferOwnershipConfirmButtonText", "transferOwnershipDialogMessage", "transferOwnershipCancelButtonText", "transferOwnershipDialogStyle", "addMembersConfiguration", "bannedMembersConfiguration", "groupMembersConfiguration", "transferOwnershipConfiguration", "statusIndicatorStyle", "backdropStyle", "avatarStyle", "detailsStyle", "listItemStyle"] }, { type: i8.CometChatCallButtonsComponent, selector: "cometchat-call-buttons", inputs: ["user", "group", "voiceCallIconURL", "voiceCallIconText", "voiceCallIconHoverText", "videoCallIconURL", "videoCallIconText", "videoCallIconHoverText", "onVoiceCallClick", "onVideoCallClick", "onError", "callButtonsStyle", "outgoingCallConfiguration", "ongoingCallConfiguration"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
384
384
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatMessagesComponent, decorators: [{
|
|
385
385
|
type: Component,
|
|
386
|
-
args: [{ selector: "cometchat-messages", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-messages__wrapper\">\n <cometchat-backdrop *ngIf=\"showAiBotChat\">\n <aiassist-bot-message-list [user]=\"user\" [group]=\"group\"\n [currentAskAIBot]=\"currentAskAIBot\"></aiassist-bot-message-list>\n </cometchat-backdrop>\n <div class=\"cc-messages\" [ngStyle]=\"chatListStyle()\" *ngIf=\"user || group\">\n <div class=\"cc-messages__header\" *ngIf=\"!hideMessageHeader\">\n <div *ngIf=\"messageHeaderView; else customHeaderView\"\n class=\"cc-messages__header-customview\">\n <ng-container *ngTemplateOutlet=\"messageHeaderView\">\n </ng-container>\n </div>\n <ng-template #customHeaderView>\n <cometchat-message-header [user]=\"user\" [group]=\"group\"\n [subtitleView]=\"messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"messageHeaderConfiguration.disableUsersPresence\"\n [protectedGroupIcon]=\"messageHeaderConfiguration.protectedGroupIcon\"\n [privateGroupIcon]=\"messageHeaderConfiguration.privateGroupIcon\"\n [menu]=\"headerMenu\"\n [messageHeaderStyle]=\"messageHeaderConfiguration.messageHeaderStyle\"\n [backButtonIconURL]=\"messageHeaderConfiguration.backButtonIconURL\"\n [hideBackButton]=\"messageHeaderConfiguration.hideBackButton\"\n [onError]=\"messageHeaderConfiguration.onError\"\n [onBack]=\"messageHeaderConfiguration.onBack\"\n [listItemStyle]=\"messageHeaderConfiguration.listItemStyle\"\n [statusIndicatorStyle]=\"messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"messageHeaderConfiguration.avatarStyle\">\n </cometchat-message-header>\n </ng-template>\n </div>\n <div class=\"cc-messages__list\">\n <cometchat-message-list #messageListRef\n [disableReactions]=\"messageListConfiguration?.disableReactions!\"\n [emojiKeyboardStyle]=\"messageListConfiguration?.emojiKeyboardStyle!\"\n [threadIndicatorIcon]=\"messageListConfiguration?.threadIndicatorIcon!\"\n [reactionsConfiguration]=\"messageListConfiguration?.reactionsConfiguration!\"\n [messageInformationConfiguration]=\"\n messageListConfiguration.messageInformationConfiguration\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [customSoundForMessages]=\"customSoundForIncomingMessages\"\n [emptyStateView]=\"messageListConfiguration.emptyStateView\"\n [loadingIconURL]=\"messageListConfiguration?.loadingIconURL!\"\n [loadingStateView]=\"messageListConfiguration.loadingStateView\"\n [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\"\n [disableReceipt]=\"messageListConfiguration.disableReceipt\"\n [readIcon]=\"messageListConfiguration.readIcon\"\n [deliveredIcon]=\"messageListConfiguration.deliveredIcon\"\n [sentIcon]=\"messageListConfiguration.sentIcon\"\n [waitIcon]=\"messageListConfiguration.waitIcon\"\n [errorIcon]=\"messageListConfiguration.errorIcon\"\n [alignment]=\"messageListConfiguration.alignment\"\n [showAvatar]=\"messageListConfiguration.showAvatar\"\n [datePattern]=\"messageListConfiguration.datePattern\"\n [timestampAlignment]=\"messageListConfiguration.timestampAlignment\"\n [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [templates]=\"messageListConfiguration.templates\"\n [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder\"\n [thresholdValue]=\"messageListConfiguration.thresholdValue\"\n [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick || openThreadView\"\n [headerView]=\"messageListConfiguration.headerView\"\n [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\"\n [scrollToBottomOnNewMessages]=\"messageListConfiguration.scrollToBottomOnNewMessages\"\n [backdropStyle]=\"messageListConfiguration.backdropStyle\"\n [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\"\n [messageListStyle]=\"messageListConfiguration.messageListStyle\"\n [onError]=\"messageListConfiguration.onError\"\n [disableMentions]=\"messageListConfiguration.disableMentions\"\n [textFormatters]=\"messageListConfiguration?.textFormatters\">\n </cometchat-message-list>\n </div>\n <div class=\"cc-messages__composer\"\n *ngIf=\"!hideMessageComposer && !openThreadedMessages\">\n <div *ngIf=\"messageComposerView; else customComposerView\"\n class=\"cc-messages__composer--customview\">\n <ng-container *ngTemplateOutlet=\"messageComposerView\">\n </ng-container>\n </div>\n <ng-template #customComposerView>\n <cometchat-message-composer #messageComposerRef\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [voiceRecordingStopIconURL]=\"messageComposerConfiguration.voiceRecordingStopIconURL\"\n [voiceRecordingStartIconURL]=\"messageComposerConfiguration.voiceRecordingStartIconURL\"\n [voiceRecordingCloseIconURL]=\"messageComposerConfiguration.voiceRecordingCloseIconURL\"\n [voiceRecordingSubmitIconURL]=\"messageComposerConfiguration.voiceRecordingSubmitIconURL\"\n [mediaRecorderStyle]=\"messageComposerConfiguration.mediaRecorderStyle\"\n [customSoundForMessages]=\"customSoundForOutgoingMessages\"\n [user]=\"user\" [group]=\"group\"\n [text]=\"messageComposerConfiguration.text\"\n [headerView]=\"messageComposerConfiguration.headerView\"\n [onTextChange]=\"messageComposerConfiguration.onTextChange\"\n [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\"\n [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\"\n [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\"\n [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\"\n [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\"\n [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\"\n [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\"\n [aiOptionsStyle]=\"messageComposerConfiguration.AIOptionsStyle\"\n [aiIconURL]=\"messageComposerConfiguration.AIIconURL\"\n [userMemberWrapperConfiguration]=\"messageComposerConfiguration.userMemberWrapperConfiguration\"\n [textFormatters]=\"messageComposerConfiguration?.textFormatters\"\n [disableMentions]=\"messageComposerConfiguration.disableMentions\"\n [mentionsWarningText]=\"messageComposerConfiguration?.mentionsWarningText\"\n [mentionsWarningStyle]=\"messageComposerConfiguration?.mentionsWarningStyle\">\n </cometchat-message-composer>\n </ng-template>\n </div>\n </div>\n <div class=\"cc-messages__livereaction\">\n <cometchat-live-reaction *ngIf=\"liveReaction\"\n [reactionIconURL]=\"reactionName\"></cometchat-live-reaction>\n </div>\n <div *ngIf=\"openThreadedMessages\" class=\"cc-messages__threadedmessages\">\n <cometchat-threaded-messages [onClose]=\"closeThreadView\"\n [threadedMessagesStyle]=\"threadedMessageConfiguration.threadedMessagesStyle\"\n [messageActionView]=\"threadedMessageConfiguration.messageActionView\"\n [closeIconURL]=\"threadedMessageConfiguration.closeIconURL\"\n [onError]=\"threadedMessageConfiguration.onError\"\n [bubbleView]=\"threadedMessageConfiguration.bubbleView || parentBubbleView\"\n [parentMessage]=\"threadMessageObject\" [user]=\"user\" [group]=\"group\"\n [messageListConfiguration]=\"threadedMessageConfiguration.messageListConfiguration\"></cometchat-threaded-messages>\n </div>\n <div *ngIf=\"openDetails\" class=\"cc-messages__details\">\n <cometchat-details\n [protectedGroupIcon]=\"detailsConfiguration.protectedGroupIcon\"\n [privateGroupIcon]=\"detailsConfiguration.privateGroupIcon\"\n [backdropStyle]=\"detailsConfiguration.backdropStyle\"\n [disableUsersPresence]=\"detailsConfiguration?.disableUsersPresence!\"\n [transferOwnershipConfiguration]=\"detailsConfiguration.transferOwnershipConfiguration\"\n [groupMembersConfiguration]=\"detailsConfiguration.groupMembersConfiguration\"\n [bannedMembersConfiguration]=\"detailsConfiguration.bannedMembersConfiguration\"\n [addMembersConfiguration]=\"detailsConfiguration.addMembersConfiguration\"\n [onClose]=\"detailsConfiguration.onClose || closeDetailsPage\"\n [listItemStyle]=\"detailsConfiguration.listItemStyle\"\n [detailsStyle]=\"detailsConfiguration.detailsStyle\"\n [avatarStyle]=\"detailsConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"detailsConfiguration.statusIndicatorStyle\"\n [leaveDialogStyle]=\"detailsConfiguration.leaveDialogStyle\"\n [data]=\"setDetailsTemplate()\"\n [customProfileView]=\"detailsConfiguration.customProfileView\"\n [subtitleView]=\"detailsConfiguration.subtitleView\"\n [hideProfile]=\"detailsConfiguration.hideProfile\"\n [onError]=\"detailsConfiguration.onError\"\n [closeButtonIconURL]=\"detailsConfiguration.closeButtonIconURL\"\n [user]=\"user\" [group]=\"group\"></cometchat-details>\n </div>\n</div>\n<ng-template #headerMenu>\n <div class=\"cc-messages__headermenu\">\n <div class=\"cc-messages__auxiliarymenu\"\n *ngIf=\"getAuxilaryView(); else elseBlock\">\n <ng-container *ngTemplateOutlet=\"getAuxilaryView()\">\n </ng-container>\n </div>\n <ng-template #elseBlock>\n <cometchat-call-buttons *ngIf=\"enableCalling\" voiceCallIconText=\"\"\n videoCallIconText=\"\" [user]=\"user\" [group]=\"group\"\n [callButtonsStyle]=\"callButtonsStyle\">\n </cometchat-call-buttons>\n </ng-template>\n <cometchat-button *ngIf=\"!hideDetails\" [iconURL]=\"infoIconStyle\"\n [buttonStyle]=\"detailsButtonStyle\"\n (cc-button-clicked)=\"openDetailsPage()\"></cometchat-button>\n </div>\n</ng-template>\n", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-messages__wrapper{position:relative;height:100%;width:100%}.cc-messages{display:flex;flex-direction:column;position:relative;height:100%;width:100%;box-sizing:border-box;justify-content:space-between}.cc-messages__headermenu{display:flex;justify-content:center;align-items:center}.cc-messages__threadedmessages,.cc-messages__details{position:absolute;top:0;left:0;height:100%;width:100%;max-height:100%;overflow-y:auto;overflow-x:hidden;max-width:100%;z-index:1}.cc-messages__header{width:100%}.cc-messages__list{overflow:hidden;width:100%;height:100%}cometchat-threaded-messages{height:100%;display:flex}.cc-messages__composer{width:100%;display:flex;flex-direction:column;justify-content:flex-end}\n"] }]
|
|
386
|
+
args: [{ selector: "cometchat-messages", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-messages__wrapper\">\n <cometchat-backdrop *ngIf=\"showAiBotChat\">\n <aiassist-bot-message-list [user]=\"user\" [group]=\"group\"\n [currentAskAIBot]=\"currentAskAIBot\"></aiassist-bot-message-list>\n </cometchat-backdrop>\n <div class=\"cc-messages\" [ngStyle]=\"chatListStyle()\" *ngIf=\"user || group\">\n <div class=\"cc-messages__header\" *ngIf=\"!hideMessageHeader\">\n <div *ngIf=\"messageHeaderView; else customHeaderView\"\n class=\"cc-messages__header-customview\">\n <ng-container\n *ngTemplateOutlet=\"messageHeaderView;context:{ user: user, group: group }\">\n </ng-container>\n </div>\n <ng-template #customHeaderView>\n <cometchat-message-header [user]=\"user\" [group]=\"group\"\n [subtitleView]=\"messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"messageHeaderConfiguration.disableUsersPresence\"\n [protectedGroupIcon]=\"messageHeaderConfiguration.protectedGroupIcon\"\n [privateGroupIcon]=\"messageHeaderConfiguration.privateGroupIcon\"\n [menu]=\"headerMenu\"\n [messageHeaderStyle]=\"messageHeaderConfiguration.messageHeaderStyle\"\n [backButtonIconURL]=\"messageHeaderConfiguration.backButtonIconURL\"\n [hideBackButton]=\"messageHeaderConfiguration.hideBackButton\"\n [onError]=\"messageHeaderConfiguration.onError\"\n [onBack]=\"messageHeaderConfiguration.onBack\"\n [listItemStyle]=\"messageHeaderConfiguration.listItemStyle\"\n [statusIndicatorStyle]=\"messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"messageHeaderConfiguration.avatarStyle\">\n </cometchat-message-header>\n </ng-template>\n </div>\n <div class=\"cc-messages__list\" *ngIf=\"!messageListView\">\n <cometchat-message-list #messageListRef\n [disableReactions]=\"messageListConfiguration?.disableReactions!\"\n [emojiKeyboardStyle]=\"messageListConfiguration?.emojiKeyboardStyle!\"\n [threadIndicatorIcon]=\"messageListConfiguration?.threadIndicatorIcon!\"\n [reactionsConfiguration]=\"messageListConfiguration?.reactionsConfiguration!\"\n [messageInformationConfiguration]=\"\n messageListConfiguration.messageInformationConfiguration\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [customSoundForMessages]=\"customSoundForIncomingMessages\"\n [emptyStateView]=\"messageListConfiguration.emptyStateView\"\n [loadingIconURL]=\"messageListConfiguration?.loadingIconURL!\"\n [loadingStateView]=\"messageListConfiguration.loadingStateView\"\n [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\"\n [disableReceipt]=\"messageListConfiguration.disableReceipt\"\n [readIcon]=\"messageListConfiguration.readIcon\"\n [deliveredIcon]=\"messageListConfiguration.deliveredIcon\"\n [sentIcon]=\"messageListConfiguration.sentIcon\"\n [waitIcon]=\"messageListConfiguration.waitIcon\"\n [errorIcon]=\"messageListConfiguration.errorIcon\"\n [alignment]=\"messageListConfiguration.alignment\"\n [showAvatar]=\"messageListConfiguration.showAvatar\"\n [datePattern]=\"messageListConfiguration.datePattern\"\n [timestampAlignment]=\"messageListConfiguration.timestampAlignment\"\n [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [templates]=\"messageListConfiguration.templates\"\n [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder\"\n [thresholdValue]=\"messageListConfiguration.thresholdValue\"\n [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick || openThreadView\"\n [headerView]=\"messageListConfiguration.headerView\"\n [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\"\n [scrollToBottomOnNewMessages]=\"messageListConfiguration.scrollToBottomOnNewMessages\"\n [backdropStyle]=\"messageListConfiguration.backdropStyle\"\n [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\"\n [messageListStyle]=\"messageListConfiguration.messageListStyle\"\n [onError]=\"messageListConfiguration.onError\"\n [disableMentions]=\"messageListConfiguration.disableMentions\"\n [textFormatters]=\"messageListConfiguration?.textFormatters\">\n </cometchat-message-list>\n </div>\n <ng-container *ngIf=\"messageListView\">\n <ng-container\n *ngTemplateOutlet=\"messageListView;context:{ user: user, group: group }\">\n </ng-container>\n </ng-container>\n\n <div class=\"cc-messages__composer\"\n *ngIf=\"!messageComposerView && !hideMessageComposer && !openThreadedMessages\">\n <cometchat-message-composer #messageComposerRef\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [voiceRecordingStopIconURL]=\"messageComposerConfiguration.voiceRecordingStopIconURL\"\n [voiceRecordingStartIconURL]=\"messageComposerConfiguration.voiceRecordingStartIconURL\"\n [voiceRecordingCloseIconURL]=\"messageComposerConfiguration.voiceRecordingCloseIconURL\"\n [voiceRecordingSubmitIconURL]=\"messageComposerConfiguration.voiceRecordingSubmitIconURL\"\n [mediaRecorderStyle]=\"messageComposerConfiguration.mediaRecorderStyle\"\n [customSoundForMessages]=\"customSoundForOutgoingMessages\" [user]=\"user\"\n [group]=\"group\" [text]=\"messageComposerConfiguration.text\"\n [headerView]=\"messageComposerConfiguration.headerView\"\n [onTextChange]=\"messageComposerConfiguration.onTextChange\"\n [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\"\n [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\"\n [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\"\n [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\"\n [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\"\n [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\"\n [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\"\n [aiOptionsStyle]=\"messageComposerConfiguration.AIOptionsStyle\"\n [aiIconURL]=\"messageComposerConfiguration.AIIconURL\"\n [userMemberWrapperConfiguration]=\"messageComposerConfiguration.userMemberWrapperConfiguration\"\n [textFormatters]=\"messageComposerConfiguration?.textFormatters\"\n [disableMentions]=\"messageComposerConfiguration.disableMentions\"\n [mentionsWarningText]=\"messageComposerConfiguration?.mentionsWarningText\"\n [mentionsWarningStyle]=\"messageComposerConfiguration?.mentionsWarningStyle\">\n </cometchat-message-composer>\n </div>\n <div *ngIf=\"messageComposerView && !hideMessageComposer\"\n class=\"cc-messages__composer--customview\">\n <ng-container\n *ngTemplateOutlet=\"messageComposerView;context:{ user: user, group: group }\">\n </ng-container>\n </div>\n </div>\n <div class=\"cc-messages__livereaction\">\n <cometchat-live-reaction *ngIf=\"liveReaction\"\n [reactionIconURL]=\"reactionName\"></cometchat-live-reaction>\n </div>\n <div *ngIf=\"openThreadedMessages\" class=\"cc-messages__threadedmessages\">\n <cometchat-threaded-messages [onClose]=\"closeThreadView\"\n [threadedMessagesStyle]=\"threadedMessageConfiguration.threadedMessagesStyle\"\n [messageActionView]=\"threadedMessageConfiguration.messageActionView\"\n [closeIconURL]=\"threadedMessageConfiguration.closeIconURL\"\n [onError]=\"threadedMessageConfiguration.onError\"\n [bubbleView]=\"threadedMessageConfiguration.bubbleView || parentBubbleView\"\n [parentMessage]=\"threadMessageObject\" [user]=\"user\" [group]=\"group\"\n [messageListConfiguration]=\"threadedMessageConfiguration.messageListConfiguration\"\n [messageComposerView]=\"threadedMessageConfiguration.messageComposerView\"\n [messageListView]=\"threadedMessageConfiguration.messageListView\"\n [hideMessageComposer]=\"threadedMessageConfiguration.hideMessageComposer\"></cometchat-threaded-messages>\n </div>\n\n <div *ngIf=\"openDetails\" class=\"cc-messages__details\">\n <cometchat-details\n [protectedGroupIcon]=\"detailsConfiguration.protectedGroupIcon\"\n [privateGroupIcon]=\"detailsConfiguration.privateGroupIcon\"\n [backdropStyle]=\"detailsConfiguration.backdropStyle\"\n [disableUsersPresence]=\"detailsConfiguration?.disableUsersPresence!\"\n [transferOwnershipConfiguration]=\"detailsConfiguration.transferOwnershipConfiguration\"\n [groupMembersConfiguration]=\"detailsConfiguration.groupMembersConfiguration\"\n [bannedMembersConfiguration]=\"detailsConfiguration.bannedMembersConfiguration\"\n [addMembersConfiguration]=\"detailsConfiguration.addMembersConfiguration\"\n [onClose]=\"detailsConfiguration.onClose || closeDetailsPage\"\n [listItemStyle]=\"detailsConfiguration.listItemStyle\"\n [detailsStyle]=\"detailsConfiguration.detailsStyle\"\n [avatarStyle]=\"detailsConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"detailsConfiguration.statusIndicatorStyle\"\n [leaveDialogStyle]=\"detailsConfiguration.leaveDialogStyle\"\n [data]=\"setDetailsTemplate()\"\n [customProfileView]=\"detailsConfiguration.customProfileView\"\n [subtitleView]=\"detailsConfiguration.subtitleView\"\n [hideProfile]=\"detailsConfiguration.hideProfile\"\n [onError]=\"detailsConfiguration.onError\"\n [closeButtonIconURL]=\"detailsConfiguration.closeButtonIconURL\"\n [user]=\"user\" [group]=\"group\"></cometchat-details>\n </div>\n</div>\n<ng-template #headerMenu>\n <div class=\"cc-messages__headermenu\">\n <div class=\"cc-messages__auxiliarymenu\"\n *ngIf=\"getAuxilaryView(); else elseBlock\">\n <ng-container\n *ngTemplateOutlet=\"getAuxilaryView();context:{ user: user, group: group }\">\n </ng-container>\n </div>\n <ng-template #elseBlock>\n <cometchat-call-buttons *ngIf=\"enableCalling\" voiceCallIconText=\"\"\n videoCallIconText=\"\" [user]=\"user\" [group]=\"group\"\n [callButtonsStyle]=\"callButtonsStyle\">\n </cometchat-call-buttons>\n </ng-template>\n <cometchat-button *ngIf=\"!hideDetails\" [iconURL]=\"infoIconStyle\"\n [buttonStyle]=\"detailsButtonStyle\"\n (cc-button-clicked)=\"openDetailsPage()\"></cometchat-button>\n </div>\n</ng-template>\n", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-messages__wrapper{position:relative;height:100%;width:100%}.cc-messages{display:flex;flex-direction:column;position:relative;height:100%;width:100%;box-sizing:border-box;justify-content:space-between}.cc-messages__headermenu{display:flex;justify-content:center;align-items:center}.cc-messages__threadedmessages,.cc-messages__details{position:absolute;top:0;left:0;height:100%;width:100%;max-height:100%;overflow-y:auto;overflow-x:hidden;max-width:100%;z-index:1}.cc-messages__header{width:100%}.cc-messages__list{overflow:hidden;width:100%;height:100%}cometchat-threaded-messages{height:100%;display:flex}.cc-messages__composer{width:100%;display:flex;flex-direction:column;justify-content:flex-end}\n"] }]
|
|
387
387
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.CometChatThemeService }, { type: i0.ElementRef }]; }, propDecorators: { messageComposerRef: [{
|
|
388
388
|
type: ViewChild,
|
|
389
389
|
args: ["messageComposerRef", { static: false }]
|
|
@@ -431,4 +431,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
431
431
|
}], auxiliaryMenu: [{
|
|
432
432
|
type: Input
|
|
433
433
|
}] } });
|
|
434
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LW1lc3NhZ2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0TWVzc2FnZXMvY29tZXRjaGF0LW1lc3NhZ2VzL2NvbWV0Y2hhdC1tZXNzYWdlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NvbWV0Q2hhdE1lc3NhZ2VzL2NvbWV0Y2hhdC1tZXNzYWdlcy9jb21ldGNoYXQtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUdULHVCQUF1QixFQUl2QixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBYTNELE9BQU8sRUFDTCxVQUFVLEVBQ1Ysc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUVwQixtQkFBbUIsRUFDbkIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixHQUNsQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLDRCQUE0QixFQUM1Qiw2QkFBNkIsRUFDN0Isb0JBQW9CLEVBQ3BCLGFBQWEsRUFFYixrQkFBa0IsR0FHbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7Ozs7Ozs7QUFDMUU7Ozs7Ozs7O0dBUUc7QUFPSCxNQUFNLE9BQU8sMEJBQTBCO0lBbUpyQyxZQUNVLEdBQXNCLEVBQ3RCLFlBQW1DLEVBQ25DLFVBQXNCO1FBRnRCLFFBQUcsR0FBSCxHQUFH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RUFBRSxDQUFDO0lBQzVDLENBQUM7O3dIQTNaVSwwQkFBMEI7NEdBQTFCLDBCQUEwQixvcENDaEV2Qyw4K1VBNktBOzRGRDdHYSwwQkFBMEI7a0JBTnRDLFNBQVM7K0JBQ0Usb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU07cUtBSS9DLGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR2xELGNBQWM7c0JBRGIsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRXJDLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBRUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUVHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFFRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVHLDhCQUE4QjtzQkFBdEMsS0FBSztnQkFDRyw4QkFBOEI7c0JBQXRDLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBUUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIFRlbXBsYXRlUmVmLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21ldENoYXQgfSBmcm9tIFwiQGNvbWV0Y2hhdC9jaGF0LXNkay1qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyL2NvbWV0Y2hhdC1tZXNzYWdlLWNvbXBvc2VyL2NvbWV0Y2hhdC1tZXNzYWdlLWNvbXBvc2VyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0TWVzc2FnZUxpc3RDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vQ29tZXRDaGF0TWVzc2FnZUxpc3QvY29tZXRjaGF0LW1lc3NhZ2UtbGlzdC9jb21ldGNoYXQtbWVzc2FnZS1saXN0LmNvbXBvbmVudFwiO1xuXG5pbXBvcnQge1xuICBMaXN0SXRlbVN0eWxlLFxuICBNZW51TGlzdFN0eWxlLFxuICBBdmF0YXJTdHlsZSxcbiAgRGF0ZVN0eWxlLFxuICBCYXNlU3R5bGUsXG59IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LWVsZW1lbnRzXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgQ29tZXRDaGF0VGhlbWVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL0NvbWV0Q2hhdFRoZW1lLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIGZvbnRIZWxwZXIsXG4gIENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMsXG4gIENvbWV0Q2hhdEdyb3VwRXZlbnRzLFxuICBJR3JvdXBMZWZ0LFxuICBDb21ldENoYXRVc2VyRXZlbnRzLFxuICBDb21ldENoYXRVSUtpdENvbnN0YW50cyxcbiAgQ29tZXRDaGF0VUlFdmVudHMsXG59IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXJlc291cmNlc1wiO1xuaW1wb3J0IHtcbiAgTWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24sXG4gIE1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbixcbiAgTWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbixcbiAgVGhyZWFkZWRNZXNzYWdlc0NvbmZpZ3VyYXRpb24sXG4gIERldGFpbHNDb25maWd1cmF0aW9uLFxuICBNZXNzYWdlc1N0eWxlLFxuICBNZXNzYWdlQ29tcG9zZXJTdHlsZSxcbiAgTWVzc2FnZUhlYWRlclN0eWxlLFxuICBDYWxsQnV0dG9uc1N0eWxlLFxuICBVc2VyTWVtYmVyV3JhcHBlckNvbmZpZ3VyYXRpb24sXG59IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXNoYXJlZFwiO1xuaW1wb3J0IHsgQ2hhdENvbmZpZ3VyYXRvciB9IGZyb20gXCIuLi8uLi9TaGFyZWQvRnJhbWV3b3JrL0NoYXRDb25maWd1cmF0b3JcIjtcbmltcG9ydCB7IENvbWV0Q2hhdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9TaGFyZWQvVXRpbHMvQ29tZUNoYXRFeGNlcHRpb25cIjtcbi8qKlxuICpcbiAqIENvbWV0Q2hhdE1lc3NhZ2VzIGlzIGEgd3JhcHBlciBjb21wb25lbnQgZm9yIG1lc3NhZ2VMaXN0LCBtZXNzYWdlSGVhZGVyLCBtZXNzYWdlQ29tcG9zZXIgYW5kIGxpdmVSZWFjdGlvbiBjb21wb25lbnQuXG4gKlxuICogQHZlcnNpb24gMS4wLjBcbiAqIEBhdXRob3IgQ29tZXRDaGF0VGVhbVxuICogQGNvcHlyaWdodCDCqSAyMDIyIENvbWV0Q2hhdCBJbmMuXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiY29tZXRjaGF0LW1lc3NhZ2VzXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vY29tZXRjaGF0LW1lc3NhZ2VzLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9jb21ldGNoYXQtbWVzc2FnZXMuY29tcG9uZW50LnNjc3NcIl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDb21ldENoYXRNZXNzYWdlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQFZpZXdDaGlsZChcIm1lc3NhZ2VDb21wb3NlclJlZlwiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgbWVzc2FnZUNvbXBvc2VyUmVmITogQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKFwibWVzc2FnZUxpc3RSZWZcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIG1lc3NhZ2VMaXN0UmVmITogQ29tZXRDaGF0TWVzc2FnZUxpc3RDb21wb25lbnQ7XG4gIEBJbnB1dCgpIHVzZXIhOiBDb21ldENoYXQuVXNlcjtcbiAgQElucHV0KCkgZ3JvdXAhOiBDb21ldENoYXQuR3JvdXA7XG4gIEBJbnB1dCgpIGN1cnJlbnRBc2tBSUJvdCE6IENvbWV0Q2hhdC5Vc2VyO1xuICBASW5wdXQoKSBoaWRlTWVzc2FnZUNvbXBvc2VyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVUeXBpbmchOiBib29sZWFuO1xuICBASW5wdXQoKSBtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbjogTWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24gPVxuICAgIG5ldyBNZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIG1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbjogTWVzc2FnZUxpc3RDb25maWd1cmF0aW9uID1cbiAgICBuZXcgTWVzc2FnZUxpc3RDb25maWd1cmF0aW9uKHt9KTtcbiAgQElucHV0KCkgbWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbjogTWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbiA9XG4gICAgbmV3IE1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSB0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uOiBUaHJlYWRlZE1lc3NhZ2VzQ29uZmlndXJhdGlvbiA9XG4gICAgbmV3IFRocmVhZGVkTWVzc2FnZXNDb25maWd1cmF0aW9uKHt9KTtcbiAgQElucHV0KCkgZGV0YWlsc0NvbmZpZ3VyYXRpb246IERldGFpbHNDb25maWd1cmF0aW9uID1cbiAgICBuZXcgRGV0YWlsc0NvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSBjdXN0b21Tb3VuZEZvckluY29taW5nTWVzc2FnZXMhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGN1c3RvbVNvdW5kRm9yT3V0Z29pbmdNZXNzYWdlcyE6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXMhOiBib29sZWFuO1xuICBASW5wdXQoKSBtZXNzYWdlc1N0eWxlOiBNZXNzYWdlc1N0eWxlID0ge1xuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIGJhY2tncm91bmQ6IFwid2hpdGVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwibm9uZVwiLFxuICAgIG1lc3NhZ2VUZXh0Q29sb3I6IFwicmdiYSgyMCwgMjAsIDIwLCAwLjMzKVwiLFxuICAgIG1lc3NhZ2VUZXh0Rm9udDogXCI3MDAgMjJweCBJbnRlclwiLFxuICB9O1xuICBASW5wdXQoKSBtZXNzYWdlSGVhZGVyVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIG1lc3NhZ2VDb21wb3NlclZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBtZXNzYWdlTGlzdFZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBoaWRlTWVzc2FnZUhlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBoaWRlRGV0YWlsczogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhdXhpbGlhcnlNZW51ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgY29udmVyc2F0aW9uU3VtbWFyeUNsaWNrZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBsb2dnZWRJblVzZXIhOiBDb21ldENoYXQuVXNlciB8IG51bGw7XG4gIGNhbGxCdXR0b25zU3R5bGU6IENhbGxCdXR0b25zU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiMFwiLFxuICAgIGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICBidXR0b25QYWRkaW5nOiBcIjBcIixcbiAgICBidXR0b25CYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgYnV0dG9uQm9yZGVyOiBcIjAgNHB4XCIsXG4gICAgYnV0dG9uQm9yZGVyUmFkaXVzOiBcIjhweFwiLFxuICB9O1xuICBwdWJsaWMgbWVzc2FnZVRvQmVFZGl0ZWQ6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgbGl2ZVJlYWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyByZWFjdGlvbk5hbWU6IHN0cmluZyA9IFwiYXNzZXRzL2hlYXJ0LXJlYWN0aW9uLnBuZ1wiO1xuICBwdWJsaWMgbWVzc2FnZVRvUmVhY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY29tcG9zZXJTdHlsZXM6IE1lc3NhZ2VDb21wb3NlclN0eWxlID0ge1xuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjEycHhcIixcbiAgICBiYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDkwMCgpLFxuICAgIGlucHV0QmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRTZWNvbmRhcnkoKSwgLy8gZG9uZVxuICAgIHRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSwgLy8gZG9uZVxuICAgIHRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQoKSwgLy8gZG9uZVxuICB9O1xuICBwdWJsaWMgbGl2ZVJlYWN0aW9uVGltZW91dDogYW55ID0gMDtcbiAgcHVibGljIG9wZW5UaHJlYWRlZE1lc3NhZ2VzOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93QWlCb3RDaGF0OiBib29sZWFuID0gZmFsc2U7XG4gIC8qXG4gbWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb25cbiAqL1xuICBzdWJ0aXRsZVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBkaXNhYmxlVXNlcnNQcmVzZW5jZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWRHcm91cEljb246IHN0cmluZyA9IFwiYXNzZXRzL0xvY2tlZC5zdmdcIjtcbiAgcHJpdmF0ZUdyb3VwSWNvbjogc3RyaW5nID0gXCJhc3NldHMvUHJpdmF0ZS5zdmdcIjtcbiAgbWVudSE6IFRlbXBsYXRlUmVmPGFueT47XG4gIGhlYWRlclN0eWxlOiBNZXNzYWdlSGVhZGVyU3R5bGUgPSBuZXcgTWVzc2FnZUhlYWRlclN0eWxlKHt9KTtcbiAgYmFja0J1dHRvbkljb25VUkw6IHN0cmluZyA9IFwiYXNzZXRzL2JhY2tidXR0b24uc3ZnXCI7XG4gIGhpZGVCYWNrSWNvbjogYm9vbGVhbiA9IHRydWU7XG4gIGxpc3RJdGVtVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIG9uRXJyb3IhOiAoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHZvaWQ7XG4gIG9uQmFjayE6ICgpID0+IHZvaWQ7XG4gIGF2YXRhclN0eWxlOiBBdmF0YXJTdHlsZSA9IHtcbiAgICBib3JkZXJSYWRpdXM6IFwiMTZweFwiLFxuICAgIHdpZHRoOiBcIjI4cHhcIixcbiAgICBoZWlnaHQ6IFwiMjhweFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYmFja2dyb3VuZENvbG9yOiBcIndoaXRlXCIsXG4gICAgbmFtZVRleHRDb2xvcjogXCJyZ2IoMjAsMjAsMjApXCIsXG4gICAgYmFja2dyb3VuZFNpemU6IFwiY292ZXJcIixcbiAgICBuYW1lVGV4dEZvbnQ6IFwiNTAwIDE2cHggSW50ZXJcIixcblxuICAgIG91dGVyVmlld0JvcmRlclNwYWNpbmc6IFwiXCIsXG4gIH07XG4gIHN0YXR1c0luZGljYXRvclN0eWxlOiBCYXNlU3R5bGUgPSB7XG4gICAgYm9yZGVyUmFkaXVzOiBcIjE2cHhcIixcbiAgICB3aWR0aDogXCIxMHB4XCIsXG4gICAgaGVpZ2h0OiBcIjEwcHhcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICB9O1xuICBtZXNzYWdlSGVhZGVyU3R5bGU6IE1lc3NhZ2VIZWFkZXJTdHlsZSA9IHtcbiAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICBiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiMFwiLFxuICAgIGJhY2tCdXR0b25JY29uVGludDogXCIjMzM5OUZGXCIsXG4gICAgb25saW5lU3RhdHVzQ29sb3I6IFwiIzAwZjMwMFwiLFxuICAgIHN1YnRpdGxlVGV4dENvbG9yOiBcImdyZXlcIixcbiAgICBzdWJ0aXRsZVRleHRGb250OiBcIjQwMCAxNHB4IEludGVyXCIsXG4gICAgdHlwaW5nSW5kaWNhdG9yVGV4dENvbG9yOiBcIiMzMzk5RkZcIixcbiAgICB0eXBpbmdJbmRpY2F0b3JUZXh0Rm9udDogXCI0MDAgMTNweCBJbnRlclwiLFxuICB9O1xuICBsaXN0SXRlbVN0eWxlOiBMaXN0SXRlbVN0eWxlID0ge1xuICAgIGJhY2tncm91bmQ6IFwid2hpdGVcIixcbiAgICB0aXRsZUNvbG9yOiBcImJsYWNrXCIsXG4gICAgdGl0bGVGb250OiBcIjUwMCAxNnB4IEludGVyXCIsXG4gICAgd2lkdGg6IFwiXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgIGJvcmRlclJhZGl1czogXCIycHhcIixcbiAgICBzZXBhcmF0b3JDb2xvcjogXCJcIixcbiAgICBhY3RpdmVCYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgaG92ZXJCYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gIH07XG5cbiAgaW5mb0ljb25TdHlsZTogc3RyaW5nID0gXCJhc3NldHMvSW5mby5zdmdcIjtcbiAgZGV0YWlsc0J1dHRvblN0eWxlOiBhbnkgPSB7XG4gICAgaGVpZ2h0OiBcIjI0cHhcIixcbiAgICB3aWR0aDogXCIyNHB4XCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiMFwiLFxuICAgIGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICBidXR0b25JY29uVGludDogXCIjMzM5OUZGXCIsXG4gICAgcGFkZGluZzogXCIwIDhweFwiLFxuICB9O1xuICBlbmFibGVDYWxsaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIC8vXG4gIHB1YmxpYyBjY0xpdmVSZWFjdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNjR3JvdXBEZWxldGVkITogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY2NHcm91cExlZnQhOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBjY1VzZXJCbG9ja2VkITogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY2NVc2VyVW5CbG9ja2VkITogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY2NTaG93UGFuZWwhOiBTdWJzY3JpcHRpb247XG4gIHRocmVhZE1lc3NhZ2VPYmplY3QhOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UgfCBudWxsO1xuICBwYXJlbnRCdWJibGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgb3BlbkRldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdGhlbWVTZXJ2aWNlOiBDb21ldENoYXRUaGVtZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICkgeyB9XG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaWJlVG9FdmVudHMoKTtcbiAgICB0aGlzLnNldE1lc3NhZ2VzU3R5bGUoKTtcbiAgICBDb21ldENoYXQuZ2V0TG9nZ2VkaW5Vc2VyKClcbiAgICAgIC50aGVuKCh1c2VyKSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VkSW5Vc2VyID0gdXNlcjtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHtcbiAgICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICBpZiAoQ2hhdENvbmZpZ3VyYXRvci5uYW1lcy5pbmNsdWRlcyhcImNhbGxpbmdcIikpIHtcbiAgICAgIHRoaXMuZW5hYmxlQ2FsbGluZyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc3Vic2NyaWJlVG9FdmVudHMoKSB7XG4gICAgdGhpcy5jY0xpdmVSZWFjdGlvbiA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMuY2NMaXZlUmVhY3Rpb24uc3Vic2NyaWJlKFxuICAgICAgKHJlYWN0aW9uTmFtZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZWFjdGlvbk5hbWUgJiYgcmVhY3Rpb25OYW1lID09IFwiaGVhcnRcIikge1xuICAgICAgICAgIGxldCBpY29uVVJMOiBzdHJpbmcgPVxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLkxpdmVSZWFjdGlvbkljb25VUkwgPz9cbiAgICAgICAgICAgIFwiYXNzZXRzL2hlYXJ0LXJlYWN0aW9uLnBuZ1wiO1xuICAgICAgICAgIHRoaXMubGl2ZVJlYWN0aW9uU3RhcnQoaWNvblVSTCk7XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmNjR3JvdXBEZWxldGVkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cERlbGV0ZWQuc3Vic2NyaWJlKFxuICAgICAgKGdyb3VwOiBDb21ldENoYXQuR3JvdXApID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5nZXRHdWlkKCkgPT0gZ3JvdXAuZ2V0R3VpZCgpKSB7XG4gICAgICAgICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMub3BlblRocmVhZGVkTWVzc2FnZXMgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmdyb3VwID0gZ3JvdXA7XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmNjR3JvdXBMZWZ0ID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cExlZnQuc3Vic2NyaWJlKFxuICAgICAgKGl0ZW06IElHcm91cExlZnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5nZXRHdWlkKCkgPT0gaXRlbS5sZWZ0R3JvdXAuZ2V0R3VpZCgpKSB7XG4gICAgICAgICAgaWYgKHRoaXMubG9nZ2VkSW5Vc2VyPy5nZXRVaWQoKSA9PSBpdGVtPy51c2VyTGVmdC5nZXRVaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmdyb3VwID0gaXRlbS5sZWZ0R3JvdXA7XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmNjVXNlckJsb2NrZWQgPSBDb21ldENoYXRVc2VyRXZlbnRzLmNjVXNlckJsb2NrZWQuc3Vic2NyaWJlKFxuICAgICAgKHVzZXI6IENvbWV0Q2hhdC5Vc2VyKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnVzZXIgJiYgdXNlci5nZXRVaWQoKSA9PSB0aGlzLnVzZXIuZ2V0VWlkKCkpIHtcbiAgICAgICAgICB0aGlzLnVzZXIgPSB1c2VyO1xuICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5jY1VzZXJVbkJsb2NrZWQgPSBDb21ldENoYXRVc2VyRXZlbnRzLmNjVXNlclVuYmxvY2tlZC5zdWJzY3JpYmUoXG4gICAgICAodXNlcjogQ29tZXRDaGF0LlVzZXIpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudXNlciAmJiB1c2VyLmdldFVpZCgpID09IHRoaXMudXNlci5nZXRVaWQoKSkge1xuICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuY2NTaG93UGFuZWwgPSBDb21ldENoYXRVSUV2ZW50cy5jY1Nob3dQYW5lbC5zdWJzY3JpYmUoKGU6IGFueSkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50QXNrQUlCb3QgPSBlLmNoaWxkPy5ib3Q7XG4gICAgICBpZiAoZS5jaGlsZD8uc2hvd0JvdFZpZXcpIHtcbiAgICAgICAgdGhpcy5zaG93QWlCb3RDaGF0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0FpQm90Q2hhdCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cbiAgc2V0RGV0YWlsc1RlbXBsYXRlKCkge1xuICAgIGlmICh0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmRhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmRhdGEodGhpcy51c2VyLCB0aGlzLmdyb3VwKVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgdW5zdWJzY3JpYmVUb0V2ZW50cygpIHtcbiAgICB0aGlzLmNjTGl2ZVJlYWN0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cERlbGV0ZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwTGVmdD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjVXNlckJsb2NrZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY1VzZXJVbkJsb2NrZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY1Nob3dQYW5lbD8udW5zdWJzY3JpYmUoKTtcbiAgfVxuICBzZXRNZXNzYWdlc1N0eWxlKCkge1xuICAgIGxldCBkZWZhdWx0U3R5bGU6IE1lc3NhZ2VzU3R5bGUgPSBuZXcgTWVzc2FnZXNTdHlsZSh7XG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwibm9uZVwiLFxuICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQyMDAoKX1gLFxuICAgICAgbWVzc2FnZVRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIG1lc3NhZ2VUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRpdGxlMSksXG4gICAgfSk7XG4gICAgdGhpcy5tZXNzYWdlc1N0eWxlID0ge1xuICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICAgICAgLi4udGhpcy5tZXNzYWdlc1N0eWxlLFxuICAgIH07XG4gICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5kZXRhaWxzU3R5bGUuYm9yZGVyID1cbiAgICAgIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGV0YWlsc1N0eWxlLmJvcmRlciA/PyBcIm5vbmVcIjtcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNTdHlsZS5ib3JkZXIgPVxuICAgICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzU3R5bGVcbiAgICAgICAgLmJvcmRlciA/PyBcIm5vbmVcIjtcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNTdHlsZS5ib3JkZXIgPVxuICAgICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzU3R5bGVcbiAgICAgICAgLmJvcmRlciA/PyBcIm5vbmVcIjtcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzU3R5bGUuYm9yZGVyID1cbiAgICAgIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvbi5ncm91cE1lbWJlcnNTdHlsZVxuICAgICAgICAuYm9yZGVyID8/IFwibm9uZVwiO1xuICB9XG4gIGdldEF1eGlsYXJ5VmlldygpIHtcbiAgICBpZiAodGhpcy5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5tZW51KSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5tZW51O1xuICAgIH0gZWxzZSBpZiAodGhpcy5hdXhpbGlhcnlNZW51KSB7XG4gICAgICByZXR1cm4gdGhpcy5hdXhpbGlhcnlNZW51O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgb3BlblRocmVhZFZpZXcgPSAoXG4gICAgbWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIGJ1YmJsZTogVGVtcGxhdGVSZWY8YW55PlxuICApID0+IHtcbiAgICB0aGlzLnRocmVhZE1lc3NhZ2VPYmplY3QgPSBtZXNzYWdlO1xuICAgIHRoaXMucGFyZW50QnViYmxlVmlldyA9IGJ1YmJsZTtcbiAgICB0aGlzLm9wZW5UaHJlYWRlZE1lc3NhZ2VzID0gdHJ1ZTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH07XG4gIG9wZW5EZXRhaWxzUGFnZSA9ICgpID0+IHtcbiAgICB0aGlzLm9wZW5EZXRhaWxzID0gdHJ1ZTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH07XG4gIGNsb3NlRGV0YWlsc1BhZ2UgPSAoKSA9PiB7XG4gICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfTtcbiAgY2xvc2VUaHJlYWRWaWV3ID0gKCkgPT4ge1xuICAgIHRoaXMudGhyZWFkTWVzc2FnZU9iamVjdCA9IG51bGw7XG4gICAgdGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwYXJhbSAge3N0cmluZ30gcmVhY3Rpb25OYW1lXG4gICAqL1xuICBsaXZlUmVhY3Rpb25TdGFydCA9IChyZWFjdGlvbk5hbWU6IHN0cmluZykgPT4ge1xuICAgIGlmICh0aGlzLmxpdmVSZWFjdGlvbikge1xuICAgICAgdGhpcy5yZWFjdGlvbk5hbWUgPSBcIlwiO1xuICAgICAgdGhpcy5saXZlUmVhY3Rpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgdGhpcy5yZWFjdGlvbk5hbWUgPSByZWFjdGlvbk5hbWU7XG4gICAgdGhpcy5saXZlUmVhY3Rpb24gPSB0cnVlO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVhY3Rpb25OYW1lID0gXCJcIjtcbiAgICAgIHRoaXMubGl2ZVJlYWN0aW9uID0gZmFsc2U7XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTUwMCk7XG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9O1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZTogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRyeSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYW5nZVtDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLnVzZXJdIHx8XG4gICAgICAgIGNoYW5nZVtDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLmdyb3VwXVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMub3BlblRocmVhZGVkTWVzc2FnZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudXNlcikubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBDb21ldENoYXQuZ2V0VXNlcih0aGlzLnVzZXIpLnRoZW4oKHVzZXI6IENvbWV0Q2hhdC5Vc2VyKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cCkge1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmdyb3VwKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIENvbWV0Q2hhdC5nZXRHcm91cCh0aGlzLmdyb3VwKS50aGVuKChncm91cDogQ29tZXRDaGF0Lkdyb3VwKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSBncm91cDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmNjTGl2ZVJlYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xuICAgIHRoaXMub3BlbkRldGFpbHMgPSBmYWxzZTtcbiAgfVxuICBjaGF0TGlzdFN0eWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICB0aGlzLm1lc3NhZ2VzU3R5bGUuYmFja2dyb3VuZCB8fFxuICAgICAgICB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIGhlaWdodDogdGhpcy5tZXNzYWdlc1N0eWxlLmhlaWdodCxcbiAgICAgIHdpZHRoOiB0aGlzLm1lc3NhZ2VzU3R5bGUud2lkdGgsXG4gICAgICBib3JkZXI6IHRoaXMubWVzc2FnZXNTdHlsZS5ib3JkZXIsXG4gICAgICBib3JkZXJSYWRpdXM6IHRoaXMubWVzc2FnZXNTdHlsZS5ib3JkZXJSYWRpdXMsXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogcHVibGljIG1ldGhvZHNcbiAgICogbWVzc2FnZUxpc3RSZWYgbWV0aG9kc1xuICAgKiBUaGlzIG1ldHRob2Qgd2lsbCBhcHBlbmQgbWVzc2FnZSBpbiBtZXNzYWdlIGxpc3RcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlXG4gICAqL1xuICBhZGRNZXNzYWdlKG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZUxpc3RSZWYuYWRkTWVzc2FnZShtZXNzYWdlKTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgd2lsbCB1cGRhdGUgdGhlIG1lc3NhZ2UgaW4gbWVzc2FnZUxpc3RcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlXG4gICAqL1xuICB1cGRhdGVNZXNzYWdlKG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSwgbXVpZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5tZXNzYWdlTGlzdFJlZi51cGRhdGVNZXNzYWdlKG1lc3NhZ2UsIG11aWQpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIHJlbW92ZSAgdGhlIG1lc3NhZ2UgZnJvbSBtZXNzYWdlTGlzdFxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VcbiAgICovXG4gIHJlbW92ZU1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlTGlzdFJlZi5yZW1vdmVNZXNzYWdlKG1lc3NhZ2UpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGRlbGV0ZSBhbmQgcmVtb3ZlICB0aGUgbWVzc2FnZSBmcm9tIG1lc3NhZ2VMaXN0XG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICAgKi9cbiAgZGVsZXRlTWVzc2FnZShtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2VMaXN0UmVmLmRlbGV0ZU1lc3NhZ2UobWVzc2FnZSk7XG4gIH1cbiAgLyoqXG4gICAqIHRoaXMgbWV0aG9kIHdpbGwgc2VuZCBhIHRleHQgbWVzc2FnZVxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHRleHRcbiAgICovXG4gIHNlbmRUZXh0TWVzc2FnZSh0ZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLm1lc3NhZ2VDb21wb3NlclJlZi5zZW5kVGV4dE1lc3NhZ2UodGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIHRoaXMgbWV0aG9kIHdpbGwgb3BlbiBwcmV2aWV3IG9mIHRoZSBtZXNzYWdlXG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IG1vZGVcbiAgICovXG4gIHByZXZpZXdNZXNzYWdlKG1lc3NhZ2U6IENvbWV0Q2hhdC5UZXh0TWVzc2FnZSwgbW9kZTogc3RyaW5nID0gXCJcIikge1xuICAgIHRoaXMubWVzc2FnZUNvbXBvc2VyUmVmLm1lc3NhZ2VUb0JlRWRpdGVkID0gbWVzc2FnZTtcbiAgICB0aGlzLm1lc3NhZ2VDb21wb3NlclJlZi5vcGVuRWRpdFByZXZpZXcoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX193cmFwcGVyXCI+XG4gIDxjb21ldGNoYXQtYmFja2Ryb3AgKm5nSWY9XCJzaG93QWlCb3RDaGF0XCI+XG4gICAgPGFpYXNzaXN0LWJvdC1tZXNzYWdlLWxpc3QgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiXG4gICAgICBbY3VycmVudEFza0FJQm90XT1cImN1cnJlbnRBc2tBSUJvdFwiPjwvYWlhc3Npc3QtYm90LW1lc3NhZ2UtbGlzdD5cbiAgPC9jb21ldGNoYXQtYmFja2Ryb3A+XG4gIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc1wiIFtuZ1N0eWxlXT1cImNoYXRMaXN0U3R5bGUoKVwiICpuZ0lmPVwidXNlciB8fCBncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19faGVhZGVyXCIgKm5nSWY9XCIhaGlkZU1lc3NhZ2VIZWFkZXJcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJtZXNzYWdlSGVhZGVyVmlldzsgZWxzZSBjdXN0b21IZWFkZXJWaWV3XCJcbiAgICAgICAgY2xhc3M9XCJjYy1tZXNzYWdlc19faGVhZGVyLWN1c3RvbXZpZXdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lc3NhZ2VIZWFkZXJWaWV3XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI2N1c3RvbUhlYWRlclZpZXc+XG4gICAgICAgIDxjb21ldGNoYXQtbWVzc2FnZS1oZWFkZXIgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiXG4gICAgICAgICAgW3N1YnRpdGxlVmlld109XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5zdWJ0aXRsZVZpZXdcIlxuICAgICAgICAgIFtkaXNhYmxlVXNlcnNQcmVzZW5jZV09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5kaXNhYmxlVXNlcnNQcmVzZW5jZVwiXG4gICAgICAgICAgW3Byb3RlY3RlZEdyb3VwSWNvbl09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5wcm90ZWN0ZWRHcm91cEljb25cIlxuICAgICAgICAgIFtwcml2YXRlR3JvdXBJY29uXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLnByaXZhdGVHcm91cEljb25cIlxuICAgICAgICAgIFttZW51XT1cImhlYWRlck1lbnVcIlxuICAgICAgICAgIFttZXNzYWdlSGVhZGVyU3R5bGVdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlclN0eWxlXCJcbiAgICAgICAgICBbYmFja0J1dHRvbkljb25VUkxdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uYmFja0J1dHRvbkljb25VUkxcIlxuICAgICAgICAgIFtoaWRlQmFja0J1dHRvbl09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5oaWRlQmFja0J1dHRvblwiXG4gICAgICAgICAgW29uRXJyb3JdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ub25FcnJvclwiXG4gICAgICAgICAgW29uQmFja109XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5vbkJhY2tcIlxuICAgICAgICAgIFtsaXN0SXRlbVN0eWxlXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLmxpc3RJdGVtU3R5bGVcIlxuICAgICAgICAgIFtzdGF0dXNJbmRpY2F0b3JTdHlsZV09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5zdGF0dXNJbmRpY2F0b3JTdHlsZVwiXG4gICAgICAgICAgW2F2YXRhclN0eWxlXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLmF2YXRhclN0eWxlXCI+XG4gICAgICAgIDwvY29tZXRjaGF0LW1lc3NhZ2UtaGVhZGVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNfX2xpc3RcIj5cbiAgICAgIDxjb21ldGNoYXQtbWVzc2FnZS1saXN0ICNtZXNzYWdlTGlzdFJlZlxuICAgICAgICBbZGlzYWJsZVJlYWN0aW9uc109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24/LmRpc2FibGVSZWFjdGlvbnMhXCJcbiAgICAgICAgW2Vtb2ppS2V5Ym9hcmRTdHlsZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24/LmVtb2ppS2V5Ym9hcmRTdHlsZSFcIlxuICAgICAgICBbdGhyZWFkSW5kaWNhdG9ySWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24/LnRocmVhZEluZGljYXRvckljb24hXCJcbiAgICAgICAgW3JlYWN0aW9uc0NvbmZpZ3VyYXRpb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uPy5yZWFjdGlvbnNDb25maWd1cmF0aW9uIVwiXG4gICAgICAgIFttZXNzYWdlSW5mb3JtYXRpb25Db25maWd1cmF0aW9uXT1cIlxuICAgICAgICBtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubWVzc2FnZUluZm9ybWF0aW9uQ29uZmlndXJhdGlvblwiXG4gICAgICAgIFtkaXNhYmxlU291bmRGb3JNZXNzYWdlc109XCJkaXNhYmxlU291bmRGb3JNZXNzYWdlc1wiXG4gICAgICAgIFtjdXN0b21Tb3VuZEZvck1lc3NhZ2VzXT1cImN1c3RvbVNvdW5kRm9ySW5jb21pbmdNZXNzYWdlc1wiXG4gICAgICAgIFtlbXB0eVN0YXRlVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZW1wdHlTdGF0ZVZpZXdcIlxuICAgICAgICBbbG9hZGluZ0ljb25VUkxdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uPy5sb2FkaW5nSWNvblVSTCFcIlxuICAgICAgICBbbG9hZGluZ1N0YXRlVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubG9hZGluZ1N0YXRlVmlld1wiXG4gICAgICAgIFt1c2VyXT1cInVzZXJcIiBbZ3JvdXBdPVwiZ3JvdXBcIlxuICAgICAgICBbZXJyb3JTdGF0ZVZpZXddPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmVycm9yU3RhdGVWaWV3XCJcbiAgICAgICAgW2Rpc2FibGVSZWNlaXB0XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5kaXNhYmxlUmVjZWlwdFwiXG4gICAgICAgIFtyZWFkSWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ucmVhZEljb25cIlxuICAgICAgICBbZGVsaXZlcmVkSWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZGVsaXZlcmVkSWNvblwiXG4gICAgICAgIFtzZW50SWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uc2VudEljb25cIlxuICAgICAgICBbd2FpdEljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLndhaXRJY29uXCJcbiAgICAgICAgW2Vycm9ySWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZXJyb3JJY29uXCJcbiAgICAgICAgW2FsaWdubWVudF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYWxpZ25tZW50XCJcbiAgICAgICAgW3Nob3dBdmF0YXJdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnNob3dBdmF0YXJcIlxuICAgICAgICBbZGF0ZVBhdHRlcm5dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRhdGVQYXR0ZXJuXCJcbiAgICAgICAgW3RpbWVzdGFtcEFsaWdubWVudF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24udGltZXN0YW1wQWxpZ25tZW50XCJcbiAgICAgICAgW0RhdGVTZXBhcmF0b3JQYXR0ZXJuXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5EYXRlU2VwYXJhdG9yUGF0dGVyblwiXG4gICAgICAgIFt0ZW1wbGF0ZXNdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnRlbXBsYXRlc1wiXG4gICAgICAgIFttZXNzYWdlc1JlcXVlc3RCdWlsZGVyXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlc1JlcXVlc3RCdWlsZGVyXCJcbiAgICAgICAgW3RocmVzaG9sZFZhbHVlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi50aHJlc2hvbGRWYWx1ZVwiXG4gICAgICAgIFtvblRocmVhZFJlcGxpZXNDbGlja109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ub25UaHJlYWRSZXBsaWVzQ2xpY2sgfHwgb3BlblRocmVhZFZpZXdcIlxuICAgICAgICBbaGVhZGVyVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uaGVhZGVyVmlld1wiXG4gICAgICAgIFtmb290ZXJWaWV3XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5mb290ZXJWaWV3XCJcbiAgICAgICAgW2F2YXRhclN0eWxlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5hdmF0YXJTdHlsZVwiXG4gICAgICAgIFtzY3JvbGxUb0JvdHRvbU9uTmV3TWVzc2FnZXNdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnNjcm9sbFRvQm90dG9tT25OZXdNZXNzYWdlc1wiXG4gICAgICAgIFtiYWNrZHJvcFN0eWxlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlXCJcbiAgICAgICAgW2RhdGVTZXBhcmF0b3JTdHlsZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZGF0ZVNlcGFyYXRvclN0eWxlXCJcbiAgICAgICAgW21lc3NhZ2VMaXN0U3R5bGVdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm1lc3NhZ2VMaXN0U3R5bGVcIlxuICAgICAgICBbb25FcnJvcl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ub25FcnJvclwiXG4gICAgICAgIFtkaXNhYmxlTWVudGlvbnNdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRpc2FibGVNZW50aW9uc1wiXG4gICAgICAgIFt0ZXh0Rm9ybWF0dGVyc109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24/LnRleHRGb3JtYXR0ZXJzXCI+XG4gICAgICA8L2NvbWV0Y2hhdC1tZXNzYWdlLWxpc3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX19jb21wb3NlclwiXG4gICAgICAqbmdJZj1cIiFoaWRlTWVzc2FnZUNvbXBvc2VyICYmICFvcGVuVGhyZWFkZWRNZXNzYWdlc1wiPlxuICAgICAgPGRpdiAqbmdJZj1cIm1lc3NhZ2VDb21wb3NlclZpZXc7IGVsc2UgY3VzdG9tQ29tcG9zZXJWaWV3XCJcbiAgICAgICAgY2xhc3M9XCJjYy1tZXNzYWdlc19fY29tcG9zZXItLWN1c3RvbXZpZXdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lc3NhZ2VDb21wb3NlclZpZXdcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY3VzdG9tQ29tcG9zZXJWaWV3PlxuICAgICAgICA8Y29tZXRjaGF0LW1lc3NhZ2UtY29tcG9zZXIgI21lc3NhZ2VDb21wb3NlclJlZlxuICAgICAgICAgIFtkaXNhYmxlU291bmRGb3JNZXNzYWdlc109XCJkaXNhYmxlU291bmRGb3JNZXNzYWdlc1wiXG4gICAgICAgICAgW3ZvaWNlUmVjb3JkaW5nU3RvcEljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi52b2ljZVJlY29yZGluZ1N0b3BJY29uVVJMXCJcbiAgICAgICAgICBbdm9pY2VSZWNvcmRpbmdTdGFydEljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi52b2ljZVJlY29yZGluZ1N0YXJ0SWNvblVSTFwiXG4gICAgICAgICAgW3ZvaWNlUmVjb3JkaW5nQ2xvc2VJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udm9pY2VSZWNvcmRpbmdDbG9zZUljb25VUkxcIlxuICAgICAgICAgIFt2b2ljZVJlY29yZGluZ1N1Ym1pdEljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi52b2ljZVJlY29yZGluZ1N1Ym1pdEljb25VUkxcIlxuICAgICAgICAgIFttZWRpYVJlY29yZGVyU3R5bGVdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5tZWRpYVJlY29yZGVyU3R5bGVcIlxuICAgICAgICAgIFtjdXN0b21Tb3VuZEZvck1lc3NhZ2VzXT1cImN1c3RvbVNvdW5kRm9yT3V0Z29pbmdNZXNzYWdlc1wiXG4gICAgICAgICAgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiXG4gICAgICAgICAgW3RleHRdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi50ZXh0XCJcbiAgICAgICAgICBbaGVhZGVyVmlld109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmhlYWRlclZpZXdcIlxuICAgICAgICAgIFtvblRleHRDaGFuZ2VdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5vblRleHRDaGFuZ2VcIlxuICAgICAgICAgIFthdHRhY2htZW50SWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmF0dGFjaG1lbnRJY29uVVJMXCJcbiAgICAgICAgICBbYXR0YWNobWVudE9wdGlvbnNdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5hdHRhY2htZW50T3B0aW9uc1wiXG4gICAgICAgICAgW3NlY29uZGFyeUJ1dHRvblZpZXddPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5zZWNvbmRhcnlCdXR0b25WaWV3XCJcbiAgICAgICAgICBbYXV4aWxhcnlCdXR0b25WaWV3XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYXV4aWxhcnlCdXR0b25WaWV3XCJcbiAgICAgICAgICBbYXV4aWxpYXJ5QnV0dG9uc0FsaWdubWVudF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmF1eGlsaWFyeUJ1dHRvbnNBbGlnbm1lbnRcIlxuICAgICAgICAgIFtzZW5kQnV0dG9uVmlld109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnNlbmRCdXR0b25WaWV3XCJcbiAgICAgICAgICBbaGlkZUxpdmVSZWFjdGlvbl09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmhpZGVMaXZlUmVhY3Rpb25cIlxuICAgICAgICAgIFtMaXZlUmVhY3Rpb25JY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uTGl2ZVJlYWN0aW9uSWNvblVSTFwiXG4gICAgICAgICAgW21lc3NhZ2VDb21wb3NlclN0eWxlXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24ubWVzc2FnZUNvbXBvc2VyU3R5bGVcIlxuICAgICAgICAgIFtvblNlbmRCdXR0b25DbGlja109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm9uU2VuZEJ1dHRvbkNsaWNrXCJcbiAgICAgICAgICBbb25TZW5kQnV0dG9uQ2xpY2tdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5vblNlbmRCdXR0b25DbGlja1wiXG4gICAgICAgICAgW29uRXJyb3JdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5vbkVycm9yXCJcbiAgICAgICAgICBbYWN0aW9uU2hlZXRTdHlsZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmFjdGlvblNoZWV0U3R5bGVcIlxuICAgICAgICAgIFthaU9wdGlvbnNTdHlsZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLkFJT3B0aW9uc1N0eWxlXCJcbiAgICAgICAgICBbYWlJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uQUlJY29uVVJMXCJcbiAgICAgICAgICBbdXNlck1lbWJlcldyYXBwZXJDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udXNlck1lbWJlcldyYXBwZXJDb25maWd1cmF0aW9uXCJcbiAgICAgICAgICBbdGV4dEZvcm1hdHRlcnNdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbj8udGV4dEZvcm1hdHRlcnNcIlxuICAgICAgICAgIFtkaXNhYmxlTWVudGlvbnNdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5kaXNhYmxlTWVudGlvbnNcIlxuICAgICAgICAgIFttZW50aW9uc1dhcm5pbmdUZXh0XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24/Lm1lbnRpb25zV2FybmluZ1RleHRcIlxuICAgICAgICAgIFttZW50aW9uc1dhcm5pbmdTdHlsZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uPy5tZW50aW9uc1dhcm5pbmdTdHlsZVwiPlxuICAgICAgICA8L2NvbWV0Y2hhdC1tZXNzYWdlLWNvbXBvc2VyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19fbGl2ZXJlYWN0aW9uXCI+XG4gICAgPGNvbWV0Y2hhdC1saXZlLXJlYWN0aW9uICpuZ0lmPVwibGl2ZVJlYWN0aW9uXCJcbiAgICAgIFtyZWFjdGlvbkljb25VUkxdPVwicmVhY3Rpb25OYW1lXCI+PC9jb21ldGNoYXQtbGl2ZS1yZWFjdGlvbj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJvcGVuVGhyZWFkZWRNZXNzYWdlc1wiIGNsYXNzPVwiY2MtbWVzc2FnZXNfX3RocmVhZGVkbWVzc2FnZXNcIj5cbiAgICA8Y29tZXRjaGF0LXRocmVhZGVkLW1lc3NhZ2VzIFtvbkNsb3NlXT1cImNsb3NlVGhyZWFkVmlld1wiXG4gICAgICBbdGhyZWFkZWRNZXNzYWdlc1N0eWxlXT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24udGhyZWFkZWRNZXNzYWdlc1N0eWxlXCJcbiAgICAgIFttZXNzYWdlQWN0aW9uVmlld109XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLm1lc3NhZ2VBY3Rpb25WaWV3XCJcbiAgICAgIFtjbG9zZUljb25VUkxdPVwidGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5jbG9zZUljb25VUkxcIlxuICAgICAgW29uRXJyb3JdPVwidGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5vbkVycm9yXCJcbiAgICAgIFtidWJibGVWaWV3XT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24uYnViYmxlVmlldyB8fCBwYXJlbnRCdWJibGVWaWV3XCJcbiAgICAgIFtwYXJlbnRNZXNzYWdlXT1cInRocmVhZE1lc3NhZ2VPYmplY3RcIiBbdXNlcl09XCJ1c2VyXCIgW2dyb3VwXT1cImdyb3VwXCJcbiAgICAgIFttZXNzYWdlTGlzdENvbmZpZ3VyYXRpb25dPVwidGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdENvbmZpZ3VyYXRpb25cIj48L2NvbWV0Y2hhdC10aHJlYWRlZC1tZXNzYWdlcz5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJvcGVuRGV0YWlsc1wiIGNsYXNzPVwiY2MtbWVzc2FnZXNfX2RldGFpbHNcIj5cbiAgICA8Y29tZXRjaGF0LWRldGFpbHNcbiAgICAgIFtwcm90ZWN0ZWRHcm91cEljb25dPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24ucHJvdGVjdGVkR3JvdXBJY29uXCJcbiAgICAgIFtwcml2YXRlR3JvdXBJY29uXT1cImRldGFpbHNDb25maWd1cmF0aW9uLnByaXZhdGVHcm91cEljb25cIlxuICAgICAgW2JhY2tkcm9wU3R5bGVdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZVwiXG4gICAgICBbZGlzYWJsZVVzZXJzUHJlc2VuY2VdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24/LmRpc2FibGVVc2Vyc1ByZXNlbmNlIVwiXG4gICAgICBbdHJhbnNmZXJPd25lcnNoaXBDb25maWd1cmF0aW9uXT1cImRldGFpbHNDb25maWd1cmF0aW9uLnRyYW5zZmVyT3duZXJzaGlwQ29uZmlndXJhdGlvblwiXG4gICAgICBbZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvbl09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5ncm91cE1lbWJlcnNDb25maWd1cmF0aW9uXCJcbiAgICAgIFtiYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbl09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvblwiXG4gICAgICBbYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb25dPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb25cIlxuICAgICAgW29uQ2xvc2VdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24ub25DbG9zZSB8fCBjbG9zZURldGFpbHNQYWdlXCJcbiAgICAgIFtsaXN0SXRlbVN0eWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmxpc3RJdGVtU3R5bGVcIlxuICAgICAgW2RldGFpbHNTdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5kZXRhaWxzU3R5bGVcIlxuICAgICAgW2F2YXRhclN0eWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmF2YXRhclN0eWxlXCJcbiAgICAgIFtzdGF0dXNJbmRpY2F0b3JTdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5zdGF0dXNJbmRpY2F0b3JTdHlsZVwiXG4gICAgICBbbGVhdmVEaWFsb2dTdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5sZWF2ZURpYWxvZ1N0eWxlXCJcbiAgICAgIFtkYXRhXT1cInNldERldGFpbHNUZW1wbGF0ZSgpXCJcbiAgICAgIFtjdXN0b21Qcm9maWxlVmlld109XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5jdXN0b21Qcm9maWxlVmlld1wiXG4gICAgICBbc3VidGl0bGVWaWV3XT1cImRldGFpbHNDb25maWd1cmF0aW9uLnN1YnRpdGxlVmlld1wiXG4gICAgICBbaGlkZVByb2ZpbGVdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uaGlkZVByb2ZpbGVcIlxuICAgICAgW29uRXJyb3JdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24ub25FcnJvclwiXG4gICAgICBbY2xvc2VCdXR0b25JY29uVVJMXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmNsb3NlQnV0dG9uSWNvblVSTFwiXG4gICAgICBbdXNlcl09XCJ1c2VyXCIgW2dyb3VwXT1cImdyb3VwXCI+PC9jb21ldGNoYXQtZGV0YWlscz5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyTWVudT5cbiAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX19oZWFkZXJtZW51XCI+XG4gICAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX19hdXhpbGlhcnltZW51XCJcbiAgICAgICpuZ0lmPVwiZ2V0QXV4aWxhcnlWaWV3KCk7IGVsc2UgZWxzZUJsb2NrXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0QXV4aWxhcnlWaWV3KClcIj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjZWxzZUJsb2NrPlxuICAgICAgPGNvbWV0Y2hhdC1jYWxsLWJ1dHRvbnMgKm5nSWY9XCJlbmFibGVDYWxsaW5nXCIgdm9pY2VDYWxsSWNvblRleHQ9XCJcIlxuICAgICAgICB2aWRlb0NhbGxJY29uVGV4dD1cIlwiIFt1c2VyXT1cInVzZXJcIiBbZ3JvdXBdPVwiZ3JvdXBcIlxuICAgICAgICBbY2FsbEJ1dHRvbnNTdHlsZV09XCJjYWxsQnV0dG9uc1N0eWxlXCI+XG4gICAgICA8L2NvbWV0Y2hhdC1jYWxsLWJ1dHRvbnM+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8Y29tZXRjaGF0LWJ1dHRvbiAqbmdJZj1cIiFoaWRlRGV0YWlsc1wiIFtpY29uVVJMXT1cImluZm9JY29uU3R5bGVcIlxuICAgICAgW2J1dHRvblN0eWxlXT1cImRldGFpbHNCdXR0b25TdHlsZVwiXG4gICAgICAoY2MtYnV0dG9uLWNsaWNrZWQpPVwib3BlbkRldGFpbHNQYWdlKClcIj48L2NvbWV0Y2hhdC1idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
434
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LW1lc3NhZ2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0TWVzc2FnZXMvY29tZXRjaGF0LW1lc3NhZ2VzL2NvbWV0Y2hhdC1tZXNzYWdlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NvbWV0Q2hhdE1lc3NhZ2VzL2NvbWV0Y2hhdC1tZXNzYWdlcy9jb21ldGNoYXQtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUdULHVCQUF1QixFQUl2QixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBYTNELE9BQU8sRUFDTCxVQUFVLEVBQ1Ysc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUVwQixtQkFBbUIsRUFDbkIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixHQUNsQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLDRCQUE0QixFQUM1Qiw2QkFBNkIsRUFDN0Isb0JBQW9CLEVBQ3BCLGFBQWEsRUFFYixrQkFBa0IsR0FHbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7Ozs7Ozs7QUFDMUU7Ozs7Ozs7O0dBUUc7QUFPSCxNQUFNLE9BQU8sMEJBQTBCO0lBbUpyQyxZQUNVLEdBQXNCLEVBQ3RCLFlBQW1DLEVBQ25DLFVBQXNCO1FBRnRCLFFBQUcsR0FBSCxHQUFH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RUFBRSxDQUFDO0lBQzVDLENBQUM7O3dIQTNaVSwwQkFBMEI7NEdBQTFCLDBCQUEwQixvcENDaEV2QyxrOVZBdUxBOzRGRHZIYSwwQkFBMEI7a0JBTnRDLFNBQVM7K0JBQ0Usb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU07cUtBSS9DLGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR2xELGNBQWM7c0JBRGIsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRXJDLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBRUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUVHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFFRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVHLDhCQUE4QjtzQkFBdEMsS0FBSztnQkFDRyw4QkFBOEI7c0JBQXRDLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBUUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIFRlbXBsYXRlUmVmLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21ldENoYXQgfSBmcm9tIFwiQGNvbWV0Y2hhdC9jaGF0LXNkay1qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyL2NvbWV0Y2hhdC1tZXNzYWdlLWNvbXBvc2VyL2NvbWV0Y2hhdC1tZXNzYWdlLWNvbXBvc2VyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0TWVzc2FnZUxpc3RDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vQ29tZXRDaGF0TWVzc2FnZUxpc3QvY29tZXRjaGF0LW1lc3NhZ2UtbGlzdC9jb21ldGNoYXQtbWVzc2FnZS1saXN0LmNvbXBvbmVudFwiO1xuXG5pbXBvcnQge1xuICBMaXN0SXRlbVN0eWxlLFxuICBNZW51TGlzdFN0eWxlLFxuICBBdmF0YXJTdHlsZSxcbiAgRGF0ZVN0eWxlLFxuICBCYXNlU3R5bGUsXG59IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LWVsZW1lbnRzXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgQ29tZXRDaGF0VGhlbWVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL0NvbWV0Q2hhdFRoZW1lLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIGZvbnRIZWxwZXIsXG4gIENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMsXG4gIENvbWV0Q2hhdEdyb3VwRXZlbnRzLFxuICBJR3JvdXBMZWZ0LFxuICBDb21ldENoYXRVc2VyRXZlbnRzLFxuICBDb21ldENoYXRVSUtpdENvbnN0YW50cyxcbiAgQ29tZXRDaGF0VUlFdmVudHMsXG59IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXJlc291cmNlc1wiO1xuaW1wb3J0IHtcbiAgTWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24sXG4gIE1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbixcbiAgTWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbixcbiAgVGhyZWFkZWRNZXNzYWdlc0NvbmZpZ3VyYXRpb24sXG4gIERldGFpbHNDb25maWd1cmF0aW9uLFxuICBNZXNzYWdlc1N0eWxlLFxuICBNZXNzYWdlQ29tcG9zZXJTdHlsZSxcbiAgTWVzc2FnZUhlYWRlclN0eWxlLFxuICBDYWxsQnV0dG9uc1N0eWxlLFxuICBVc2VyTWVtYmVyV3JhcHBlckNvbmZpZ3VyYXRpb24sXG59IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXNoYXJlZFwiO1xuaW1wb3J0IHsgQ2hhdENvbmZpZ3VyYXRvciB9IGZyb20gXCIuLi8uLi9TaGFyZWQvRnJhbWV3b3JrL0NoYXRDb25maWd1cmF0b3JcIjtcbmltcG9ydCB7IENvbWV0Q2hhdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9TaGFyZWQvVXRpbHMvQ29tZUNoYXRFeGNlcHRpb25cIjtcbi8qKlxuICpcbiAqIENvbWV0Q2hhdE1lc3NhZ2VzIGlzIGEgd3JhcHBlciBjb21wb25lbnQgZm9yIG1lc3NhZ2VMaXN0LCBtZXNzYWdlSGVhZGVyLCBtZXNzYWdlQ29tcG9zZXIgYW5kIGxpdmVSZWFjdGlvbiBjb21wb25lbnQuXG4gKlxuICogQHZlcnNpb24gMS4wLjBcbiAqIEBhdXRob3IgQ29tZXRDaGF0VGVhbVxuICogQGNvcHlyaWdodCDCqSAyMDIyIENvbWV0Q2hhdCBJbmMuXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiY29tZXRjaGF0LW1lc3NhZ2VzXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vY29tZXRjaGF0LW1lc3NhZ2VzLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9jb21ldGNoYXQtbWVzc2FnZXMuY29tcG9uZW50LnNjc3NcIl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDb21ldENoYXRNZXNzYWdlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQFZpZXdDaGlsZChcIm1lc3NhZ2VDb21wb3NlclJlZlwiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgbWVzc2FnZUNvbXBvc2VyUmVmITogQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKFwibWVzc2FnZUxpc3RSZWZcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIG1lc3NhZ2VMaXN0UmVmITogQ29tZXRDaGF0TWVzc2FnZUxpc3RDb21wb25lbnQ7XG4gIEBJbnB1dCgpIHVzZXIhOiBDb21ldENoYXQuVXNlcjtcbiAgQElucHV0KCkgZ3JvdXAhOiBDb21ldENoYXQuR3JvdXA7XG4gIEBJbnB1dCgpIGN1cnJlbnRBc2tBSUJvdCE6IENvbWV0Q2hhdC5Vc2VyO1xuICBASW5wdXQoKSBoaWRlTWVzc2FnZUNvbXBvc2VyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVUeXBpbmchOiBib29sZWFuO1xuICBASW5wdXQoKSBtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbjogTWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24gPVxuICAgIG5ldyBNZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIG1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbjogTWVzc2FnZUxpc3RDb25maWd1cmF0aW9uID1cbiAgICBuZXcgTWVzc2FnZUxpc3RDb25maWd1cmF0aW9uKHt9KTtcbiAgQElucHV0KCkgbWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbjogTWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbiA9XG4gICAgbmV3IE1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSB0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uOiBUaHJlYWRlZE1lc3NhZ2VzQ29uZmlndXJhdGlvbiA9XG4gICAgbmV3IFRocmVhZGVkTWVzc2FnZXNDb25maWd1cmF0aW9uKHt9KTtcbiAgQElucHV0KCkgZGV0YWlsc0NvbmZpZ3VyYXRpb246IERldGFpbHNDb25maWd1cmF0aW9uID1cbiAgICBuZXcgRGV0YWlsc0NvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSBjdXN0b21Tb3VuZEZvckluY29taW5nTWVzc2FnZXMhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGN1c3RvbVNvdW5kRm9yT3V0Z29pbmdNZXNzYWdlcyE6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXMhOiBib29sZWFuO1xuICBASW5wdXQoKSBtZXNzYWdlc1N0eWxlOiBNZXNzYWdlc1N0eWxlID0ge1xuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIGJhY2tncm91bmQ6IFwid2hpdGVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwibm9uZVwiLFxuICAgIG1lc3NhZ2VUZXh0Q29sb3I6IFwicmdiYSgyMCwgMjAsIDIwLCAwLjMzKVwiLFxuICAgIG1lc3NhZ2VUZXh0Rm9udDogXCI3MDAgMjJweCBJbnRlclwiLFxuICB9O1xuICBASW5wdXQoKSBtZXNzYWdlSGVhZGVyVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIG1lc3NhZ2VDb21wb3NlclZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBtZXNzYWdlTGlzdFZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBoaWRlTWVzc2FnZUhlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBoaWRlRGV0YWlsczogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhdXhpbGlhcnlNZW51ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgY29udmVyc2F0aW9uU3VtbWFyeUNsaWNrZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBsb2dnZWRJblVzZXIhOiBDb21ldENoYXQuVXNlciB8IG51bGw7XG4gIGNhbGxCdXR0b25zU3R5bGU6IENhbGxCdXR0b25zU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiMFwiLFxuICAgIGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICBidXR0b25QYWRkaW5nOiBcIjBcIixcbiAgICBidXR0b25CYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgYnV0dG9uQm9yZGVyOiBcIjAgNHB4XCIsXG4gICAgYnV0dG9uQm9yZGVyUmFkaXVzOiBcIjhweFwiLFxuICB9O1xuICBwdWJsaWMgbWVzc2FnZVRvQmVFZGl0ZWQ6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgbGl2ZVJlYWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyByZWFjdGlvbk5hbWU6IHN0cmluZyA9IFwiYXNzZXRzL2hlYXJ0LXJlYWN0aW9uLnBuZ1wiO1xuICBwdWJsaWMgbWVzc2FnZVRvUmVhY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY29tcG9zZXJTdHlsZXM6IE1lc3NhZ2VDb21wb3NlclN0eWxlID0ge1xuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjEycHhcIixcbiAgICBiYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDkwMCgpLFxuICAgIGlucHV0QmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRTZWNvbmRhcnkoKSwgLy8gZG9uZVxuICAgIHRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSwgLy8gZG9uZVxuICAgIHRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQoKSwgLy8gZG9uZVxuICB9O1xuICBwdWJsaWMgbGl2ZVJlYWN0aW9uVGltZW91dDogYW55ID0gMDtcbiAgcHVibGljIG9wZW5UaHJlYWRlZE1lc3NhZ2VzOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93QWlCb3RDaGF0OiBib29sZWFuID0gZmFsc2U7XG4gIC8qXG4gbWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb25cbiAqL1xuICBzdWJ0aXRsZVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBkaXNhYmxlVXNlcnNQcmVzZW5jZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWRHcm91cEljb246IHN0cmluZyA9IFwiYXNzZXRzL0xvY2tlZC5zdmdcIjtcbiAgcHJpdmF0ZUdyb3VwSWNvbjogc3RyaW5nID0gXCJhc3NldHMvUHJpdmF0ZS5zdmdcIjtcbiAgbWVudSE6IFRlbXBsYXRlUmVmPGFueT47XG4gIGhlYWRlclN0eWxlOiBNZXNzYWdlSGVhZGVyU3R5bGUgPSBuZXcgTWVzc2FnZUhlYWRlclN0eWxlKHt9KTtcbiAgYmFja0J1dHRvbkljb25VUkw6IHN0cmluZyA9IFwiYXNzZXRzL2JhY2tidXR0b24uc3ZnXCI7XG4gIGhpZGVCYWNrSWNvbjogYm9vbGVhbiA9IHRydWU7XG4gIGxpc3RJdGVtVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIG9uRXJyb3IhOiAoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHZvaWQ7XG4gIG9uQmFjayE6ICgpID0+IHZvaWQ7XG4gIGF2YXRhclN0eWxlOiBBdmF0YXJTdHlsZSA9IHtcbiAgICBib3JkZXJSYWRpdXM6IFwiMTZweFwiLFxuICAgIHdpZHRoOiBcIjI4cHhcIixcbiAgICBoZWlnaHQ6IFwiMjhweFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYmFja2dyb3VuZENvbG9yOiBcIndoaXRlXCIsXG4gICAgbmFtZVRleHRDb2xvcjogXCJyZ2IoMjAsMjAsMjApXCIsXG4gICAgYmFja2dyb3VuZFNpemU6IFwiY292ZXJcIixcbiAgICBuYW1lVGV4dEZvbnQ6IFwiNTAwIDE2cHggSW50ZXJcIixcblxuICAgIG91dGVyVmlld0JvcmRlclNwYWNpbmc6IFwiXCIsXG4gIH07XG4gIHN0YXR1c0luZGljYXRvclN0eWxlOiBCYXNlU3R5bGUgPSB7XG4gICAgYm9yZGVyUmFkaXVzOiBcIjE2cHhcIixcbiAgICB3aWR0aDogXCIxMHB4XCIsXG4gICAgaGVpZ2h0OiBcIjEwcHhcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICB9O1xuICBtZXNzYWdlSGVhZGVyU3R5bGU6IE1lc3NhZ2VIZWFkZXJTdHlsZSA9IHtcbiAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICBiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiMFwiLFxuICAgIGJhY2tCdXR0b25JY29uVGludDogXCIjMzM5OUZGXCIsXG4gICAgb25saW5lU3RhdHVzQ29sb3I6IFwiIzAwZjMwMFwiLFxuICAgIHN1YnRpdGxlVGV4dENvbG9yOiBcImdyZXlcIixcbiAgICBzdWJ0aXRsZVRleHRGb250OiBcIjQwMCAxNHB4IEludGVyXCIsXG4gICAgdHlwaW5nSW5kaWNhdG9yVGV4dENvbG9yOiBcIiMzMzk5RkZcIixcbiAgICB0eXBpbmdJbmRpY2F0b3JUZXh0Rm9udDogXCI0MDAgMTNweCBJbnRlclwiLFxuICB9O1xuICBsaXN0SXRlbVN0eWxlOiBMaXN0SXRlbVN0eWxlID0ge1xuICAgIGJhY2tncm91bmQ6IFwid2hpdGVcIixcbiAgICB0aXRsZUNvbG9yOiBcImJsYWNrXCIsXG4gICAgdGl0bGVGb250OiBcIjUwMCAxNnB4IEludGVyXCIsXG4gICAgd2lkdGg6IFwiXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgIGJvcmRlclJhZGl1czogXCIycHhcIixcbiAgICBzZXBhcmF0b3JDb2xvcjogXCJcIixcbiAgICBhY3RpdmVCYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgaG92ZXJCYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gIH07XG5cbiAgaW5mb0ljb25TdHlsZTogc3RyaW5nID0gXCJhc3NldHMvSW5mby5zdmdcIjtcbiAgZGV0YWlsc0J1dHRvblN0eWxlOiBhbnkgPSB7XG4gICAgaGVpZ2h0OiBcIjI0cHhcIixcbiAgICB3aWR0aDogXCIyNHB4XCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiMFwiLFxuICAgIGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICBidXR0b25JY29uVGludDogXCIjMzM5OUZGXCIsXG4gICAgcGFkZGluZzogXCIwIDhweFwiLFxuICB9O1xuICBlbmFibGVDYWxsaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIC8vXG4gIHB1YmxpYyBjY0xpdmVSZWFjdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNjR3JvdXBEZWxldGVkITogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY2NHcm91cExlZnQhOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBjY1VzZXJCbG9ja2VkITogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY2NVc2VyVW5CbG9ja2VkITogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY2NTaG93UGFuZWwhOiBTdWJzY3JpcHRpb247XG4gIHRocmVhZE1lc3NhZ2VPYmplY3QhOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UgfCBudWxsO1xuICBwYXJlbnRCdWJibGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgb3BlbkRldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdGhlbWVTZXJ2aWNlOiBDb21ldENoYXRUaGVtZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICkgeyB9XG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc3Vic2NyaWJlVG9FdmVudHMoKTtcbiAgICB0aGlzLnNldE1lc3NhZ2VzU3R5bGUoKTtcbiAgICBDb21ldENoYXQuZ2V0TG9nZ2VkaW5Vc2VyKClcbiAgICAgIC50aGVuKCh1c2VyKSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VkSW5Vc2VyID0gdXNlcjtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHtcbiAgICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICBpZiAoQ2hhdENvbmZpZ3VyYXRvci5uYW1lcy5pbmNsdWRlcyhcImNhbGxpbmdcIikpIHtcbiAgICAgIHRoaXMuZW5hYmxlQ2FsbGluZyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc3Vic2NyaWJlVG9FdmVudHMoKSB7XG4gICAgdGhpcy5jY0xpdmVSZWFjdGlvbiA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMuY2NMaXZlUmVhY3Rpb24uc3Vic2NyaWJlKFxuICAgICAgKHJlYWN0aW9uTmFtZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZWFjdGlvbk5hbWUgJiYgcmVhY3Rpb25OYW1lID09IFwiaGVhcnRcIikge1xuICAgICAgICAgIGxldCBpY29uVVJMOiBzdHJpbmcgPVxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLkxpdmVSZWFjdGlvbkljb25VUkwgPz9cbiAgICAgICAgICAgIFwiYXNzZXRzL2hlYXJ0LXJlYWN0aW9uLnBuZ1wiO1xuICAgICAgICAgIHRoaXMubGl2ZVJlYWN0aW9uU3RhcnQoaWNvblVSTCk7XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmNjR3JvdXBEZWxldGVkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cERlbGV0ZWQuc3Vic2NyaWJlKFxuICAgICAgKGdyb3VwOiBDb21ldENoYXQuR3JvdXApID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5nZXRHdWlkKCkgPT0gZ3JvdXAuZ2V0R3VpZCgpKSB7XG4gICAgICAgICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMub3BlblRocmVhZGVkTWVzc2FnZXMgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmdyb3VwID0gZ3JvdXA7XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmNjR3JvdXBMZWZ0ID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cExlZnQuc3Vic2NyaWJlKFxuICAgICAgKGl0ZW06IElHcm91cExlZnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5nZXRHdWlkKCkgPT0gaXRlbS5sZWZ0R3JvdXAuZ2V0R3VpZCgpKSB7XG4gICAgICAgICAgaWYgKHRoaXMubG9nZ2VkSW5Vc2VyPy5nZXRVaWQoKSA9PSBpdGVtPy51c2VyTGVmdC5nZXRVaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmdyb3VwID0gaXRlbS5sZWZ0R3JvdXA7XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmNjVXNlckJsb2NrZWQgPSBDb21ldENoYXRVc2VyRXZlbnRzLmNjVXNlckJsb2NrZWQuc3Vic2NyaWJlKFxuICAgICAgKHVzZXI6IENvbWV0Q2hhdC5Vc2VyKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnVzZXIgJiYgdXNlci5nZXRVaWQoKSA9PSB0aGlzLnVzZXIuZ2V0VWlkKCkpIHtcbiAgICAgICAgICB0aGlzLnVzZXIgPSB1c2VyO1xuICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5jY1VzZXJVbkJsb2NrZWQgPSBDb21ldENoYXRVc2VyRXZlbnRzLmNjVXNlclVuYmxvY2tlZC5zdWJzY3JpYmUoXG4gICAgICAodXNlcjogQ29tZXRDaGF0LlVzZXIpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudXNlciAmJiB1c2VyLmdldFVpZCgpID09IHRoaXMudXNlci5nZXRVaWQoKSkge1xuICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuY2NTaG93UGFuZWwgPSBDb21ldENoYXRVSUV2ZW50cy5jY1Nob3dQYW5lbC5zdWJzY3JpYmUoKGU6IGFueSkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50QXNrQUlCb3QgPSBlLmNoaWxkPy5ib3Q7XG4gICAgICBpZiAoZS5jaGlsZD8uc2hvd0JvdFZpZXcpIHtcbiAgICAgICAgdGhpcy5zaG93QWlCb3RDaGF0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0FpQm90Q2hhdCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cbiAgc2V0RGV0YWlsc1RlbXBsYXRlKCkge1xuICAgIGlmICh0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmRhdGEpIHtcbiAgICAgIHJldHVybiB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmRhdGEodGhpcy51c2VyLCB0aGlzLmdyb3VwKVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgdW5zdWJzY3JpYmVUb0V2ZW50cygpIHtcbiAgICB0aGlzLmNjTGl2ZVJlYWN0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cERlbGV0ZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwTGVmdD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjVXNlckJsb2NrZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY1VzZXJVbkJsb2NrZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY1Nob3dQYW5lbD8udW5zdWJzY3JpYmUoKTtcbiAgfVxuICBzZXRNZXNzYWdlc1N0eWxlKCkge1xuICAgIGxldCBkZWZhdWx0U3R5bGU6IE1lc3NhZ2VzU3R5bGUgPSBuZXcgTWVzc2FnZXNTdHlsZSh7XG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwibm9uZVwiLFxuICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQyMDAoKX1gLFxuICAgICAgbWVzc2FnZVRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIG1lc3NhZ2VUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRpdGxlMSksXG4gICAgfSk7XG4gICAgdGhpcy5tZXNzYWdlc1N0eWxlID0ge1xuICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICAgICAgLi4udGhpcy5tZXNzYWdlc1N0eWxlLFxuICAgIH07XG4gICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5kZXRhaWxzU3R5bGUuYm9yZGVyID1cbiAgICAgIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGV0YWlsc1N0eWxlLmJvcmRlciA/PyBcIm5vbmVcIjtcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNTdHlsZS5ib3JkZXIgPVxuICAgICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzU3R5bGVcbiAgICAgICAgLmJvcmRlciA/PyBcIm5vbmVcIjtcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNTdHlsZS5ib3JkZXIgPVxuICAgICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzU3R5bGVcbiAgICAgICAgLmJvcmRlciA/PyBcIm5vbmVcIjtcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzU3R5bGUuYm9yZGVyID1cbiAgICAgIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvbi5ncm91cE1lbWJlcnNTdHlsZVxuICAgICAgICAuYm9yZGVyID8/IFwibm9uZVwiO1xuICB9XG4gIGdldEF1eGlsYXJ5VmlldygpIHtcbiAgICBpZiAodGhpcy5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5tZW51KSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5tZW51O1xuICAgIH0gZWxzZSBpZiAodGhpcy5hdXhpbGlhcnlNZW51KSB7XG4gICAgICByZXR1cm4gdGhpcy5hdXhpbGlhcnlNZW51O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgb3BlblRocmVhZFZpZXcgPSAoXG4gICAgbWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIGJ1YmJsZTogVGVtcGxhdGVSZWY8YW55PlxuICApID0+IHtcbiAgICB0aGlzLnRocmVhZE1lc3NhZ2VPYmplY3QgPSBtZXNzYWdlO1xuICAgIHRoaXMucGFyZW50QnViYmxlVmlldyA9IGJ1YmJsZTtcbiAgICB0aGlzLm9wZW5UaHJlYWRlZE1lc3NhZ2VzID0gdHJ1ZTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH07XG4gIG9wZW5EZXRhaWxzUGFnZSA9ICgpID0+IHtcbiAgICB0aGlzLm9wZW5EZXRhaWxzID0gdHJ1ZTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH07XG4gIGNsb3NlRGV0YWlsc1BhZ2UgPSAoKSA9PiB7XG4gICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfTtcbiAgY2xvc2VUaHJlYWRWaWV3ID0gKCkgPT4ge1xuICAgIHRoaXMudGhyZWFkTWVzc2FnZU9iamVjdCA9IG51bGw7XG4gICAgdGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwYXJhbSAge3N0cmluZ30gcmVhY3Rpb25OYW1lXG4gICAqL1xuICBsaXZlUmVhY3Rpb25TdGFydCA9IChyZWFjdGlvbk5hbWU6IHN0cmluZykgPT4ge1xuICAgIGlmICh0aGlzLmxpdmVSZWFjdGlvbikge1xuICAgICAgdGhpcy5yZWFjdGlvbk5hbWUgPSBcIlwiO1xuICAgICAgdGhpcy5saXZlUmVhY3Rpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgdGhpcy5yZWFjdGlvbk5hbWUgPSByZWFjdGlvbk5hbWU7XG4gICAgdGhpcy5saXZlUmVhY3Rpb24gPSB0cnVlO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVhY3Rpb25OYW1lID0gXCJcIjtcbiAgICAgIHRoaXMubGl2ZVJlYWN0aW9uID0gZmFsc2U7XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTUwMCk7XG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9O1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZTogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRyeSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYW5nZVtDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLnVzZXJdIHx8XG4gICAgICAgIGNoYW5nZVtDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLmdyb3VwXVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMub3BlblRocmVhZGVkTWVzc2FnZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudXNlcikubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBDb21ldENoYXQuZ2V0VXNlcih0aGlzLnVzZXIpLnRoZW4oKHVzZXI6IENvbWV0Q2hhdC5Vc2VyKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cCkge1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmdyb3VwKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIENvbWV0Q2hhdC5nZXRHcm91cCh0aGlzLmdyb3VwKS50aGVuKChncm91cDogQ29tZXRDaGF0Lkdyb3VwKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSBncm91cDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmNjTGl2ZVJlYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xuICAgIHRoaXMub3BlbkRldGFpbHMgPSBmYWxzZTtcbiAgfVxuICBjaGF0TGlzdFN0eWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICB0aGlzLm1lc3NhZ2VzU3R5bGUuYmFja2dyb3VuZCB8fFxuICAgICAgICB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIGhlaWdodDogdGhpcy5tZXNzYWdlc1N0eWxlLmhlaWdodCxcbiAgICAgIHdpZHRoOiB0aGlzLm1lc3NhZ2VzU3R5bGUud2lkdGgsXG4gICAgICBib3JkZXI6IHRoaXMubWVzc2FnZXNTdHlsZS5ib3JkZXIsXG4gICAgICBib3JkZXJSYWRpdXM6IHRoaXMubWVzc2FnZXNTdHlsZS5ib3JkZXJSYWRpdXMsXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogcHVibGljIG1ldGhvZHNcbiAgICogbWVzc2FnZUxpc3RSZWYgbWV0aG9kc1xuICAgKiBUaGlzIG1ldHRob2Qgd2lsbCBhcHBlbmQgbWVzc2FnZSBpbiBtZXNzYWdlIGxpc3RcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlXG4gICAqL1xuICBhZGRNZXNzYWdlKG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZUxpc3RSZWYuYWRkTWVzc2FnZShtZXNzYWdlKTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgd2lsbCB1cGRhdGUgdGhlIG1lc3NhZ2UgaW4gbWVzc2FnZUxpc3RcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlXG4gICAqL1xuICB1cGRhdGVNZXNzYWdlKG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSwgbXVpZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5tZXNzYWdlTGlzdFJlZi51cGRhdGVNZXNzYWdlKG1lc3NhZ2UsIG11aWQpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIHJlbW92ZSAgdGhlIG1lc3NhZ2UgZnJvbSBtZXNzYWdlTGlzdFxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VcbiAgICovXG4gIHJlbW92ZU1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlTGlzdFJlZi5yZW1vdmVNZXNzYWdlKG1lc3NhZ2UpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGRlbGV0ZSBhbmQgcmVtb3ZlICB0aGUgbWVzc2FnZSBmcm9tIG1lc3NhZ2VMaXN0XG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICAgKi9cbiAgZGVsZXRlTWVzc2FnZShtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2VMaXN0UmVmLmRlbGV0ZU1lc3NhZ2UobWVzc2FnZSk7XG4gIH1cbiAgLyoqXG4gICAqIHRoaXMgbWV0aG9kIHdpbGwgc2VuZCBhIHRleHQgbWVzc2FnZVxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHRleHRcbiAgICovXG4gIHNlbmRUZXh0TWVzc2FnZSh0ZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLm1lc3NhZ2VDb21wb3NlclJlZi5zZW5kVGV4dE1lc3NhZ2UodGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIHRoaXMgbWV0aG9kIHdpbGwgb3BlbiBwcmV2aWV3IG9mIHRoZSBtZXNzYWdlXG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IG1vZGVcbiAgICovXG4gIHByZXZpZXdNZXNzYWdlKG1lc3NhZ2U6IENvbWV0Q2hhdC5UZXh0TWVzc2FnZSwgbW9kZTogc3RyaW5nID0gXCJcIikge1xuICAgIHRoaXMubWVzc2FnZUNvbXBvc2VyUmVmLm1lc3NhZ2VUb0JlRWRpdGVkID0gbWVzc2FnZTtcbiAgICB0aGlzLm1lc3NhZ2VDb21wb3NlclJlZi5vcGVuRWRpdFByZXZpZXcoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX193cmFwcGVyXCI+XG4gIDxjb21ldGNoYXQtYmFja2Ryb3AgKm5nSWY9XCJzaG93QWlCb3RDaGF0XCI+XG4gICAgPGFpYXNzaXN0LWJvdC1tZXNzYWdlLWxpc3QgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiXG4gICAgICBbY3VycmVudEFza0FJQm90XT1cImN1cnJlbnRBc2tBSUJvdFwiPjwvYWlhc3Npc3QtYm90LW1lc3NhZ2UtbGlzdD5cbiAgPC9jb21ldGNoYXQtYmFja2Ryb3A+XG4gIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc1wiIFtuZ1N0eWxlXT1cImNoYXRMaXN0U3R5bGUoKVwiICpuZ0lmPVwidXNlciB8fCBncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19faGVhZGVyXCIgKm5nSWY9XCIhaGlkZU1lc3NhZ2VIZWFkZXJcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJtZXNzYWdlSGVhZGVyVmlldzsgZWxzZSBjdXN0b21IZWFkZXJWaWV3XCJcbiAgICAgICAgY2xhc3M9XCJjYy1tZXNzYWdlc19faGVhZGVyLWN1c3RvbXZpZXdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVzc2FnZUhlYWRlclZpZXc7Y29udGV4dDp7ICB1c2VyOiB1c2VyLCBncm91cDogZ3JvdXAgfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNjdXN0b21IZWFkZXJWaWV3PlxuICAgICAgICA8Y29tZXRjaGF0LW1lc3NhZ2UtaGVhZGVyIFt1c2VyXT1cInVzZXJcIiBbZ3JvdXBdPVwiZ3JvdXBcIlxuICAgICAgICAgIFtzdWJ0aXRsZVZpZXddPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uc3VidGl0bGVWaWV3XCJcbiAgICAgICAgICBbZGlzYWJsZVVzZXJzUHJlc2VuY2VdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uZGlzYWJsZVVzZXJzUHJlc2VuY2VcIlxuICAgICAgICAgIFtwcm90ZWN0ZWRHcm91cEljb25dPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ucHJvdGVjdGVkR3JvdXBJY29uXCJcbiAgICAgICAgICBbcHJpdmF0ZUdyb3VwSWNvbl09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5wcml2YXRlR3JvdXBJY29uXCJcbiAgICAgICAgICBbbWVudV09XCJoZWFkZXJNZW51XCJcbiAgICAgICAgICBbbWVzc2FnZUhlYWRlclN0eWxlXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJTdHlsZVwiXG4gICAgICAgICAgW2JhY2tCdXR0b25JY29uVVJMXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLmJhY2tCdXR0b25JY29uVVJMXCJcbiAgICAgICAgICBbaGlkZUJhY2tCdXR0b25dPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uaGlkZUJhY2tCdXR0b25cIlxuICAgICAgICAgIFtvbkVycm9yXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLm9uRXJyb3JcIlxuICAgICAgICAgIFtvbkJhY2tdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ub25CYWNrXCJcbiAgICAgICAgICBbbGlzdEl0ZW1TdHlsZV09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5saXN0SXRlbVN0eWxlXCJcbiAgICAgICAgICBbc3RhdHVzSW5kaWNhdG9yU3R5bGVdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uc3RhdHVzSW5kaWNhdG9yU3R5bGVcIlxuICAgICAgICAgIFthdmF0YXJTdHlsZV09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5hdmF0YXJTdHlsZVwiPlxuICAgICAgICA8L2NvbWV0Y2hhdC1tZXNzYWdlLWhlYWRlcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX19saXN0XCIgKm5nSWY9XCIhbWVzc2FnZUxpc3RWaWV3XCI+XG4gICAgICA8Y29tZXRjaGF0LW1lc3NhZ2UtbGlzdCAjbWVzc2FnZUxpc3RSZWZcbiAgICAgICAgW2Rpc2FibGVSZWFjdGlvbnNdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uPy5kaXNhYmxlUmVhY3Rpb25zIVwiXG4gICAgICAgIFtlbW9qaUtleWJvYXJkU3R5bGVdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uPy5lbW9qaUtleWJvYXJkU3R5bGUhXCJcbiAgICAgICAgW3RocmVhZEluZGljYXRvckljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uPy50aHJlYWRJbmRpY2F0b3JJY29uIVwiXG4gICAgICAgIFtyZWFjdGlvbnNDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbj8ucmVhY3Rpb25zQ29uZmlndXJhdGlvbiFcIlxuICAgICAgICBbbWVzc2FnZUluZm9ybWF0aW9uQ29uZmlndXJhdGlvbl09XCJcbiAgICAgICAgbWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm1lc3NhZ2VJbmZvcm1hdGlvbkNvbmZpZ3VyYXRpb25cIlxuICAgICAgICBbZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXNdPVwiZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXNcIlxuICAgICAgICBbY3VzdG9tU291bmRGb3JNZXNzYWdlc109XCJjdXN0b21Tb3VuZEZvckluY29taW5nTWVzc2FnZXNcIlxuICAgICAgICBbZW1wdHlTdGF0ZVZpZXddPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmVtcHR5U3RhdGVWaWV3XCJcbiAgICAgICAgW2xvYWRpbmdJY29uVVJMXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbj8ubG9hZGluZ0ljb25VUkwhXCJcbiAgICAgICAgW2xvYWRpbmdTdGF0ZVZpZXddPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmxvYWRpbmdTdGF0ZVZpZXdcIlxuICAgICAgICBbdXNlcl09XCJ1c2VyXCIgW2dyb3VwXT1cImdyb3VwXCJcbiAgICAgICAgW2Vycm9yU3RhdGVWaWV3XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5lcnJvclN0YXRlVmlld1wiXG4gICAgICAgIFtkaXNhYmxlUmVjZWlwdF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZGlzYWJsZVJlY2VpcHRcIlxuICAgICAgICBbcmVhZEljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnJlYWRJY29uXCJcbiAgICAgICAgW2RlbGl2ZXJlZEljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRlbGl2ZXJlZEljb25cIlxuICAgICAgICBbc2VudEljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnNlbnRJY29uXCJcbiAgICAgICAgW3dhaXRJY29uXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi53YWl0SWNvblwiXG4gICAgICAgIFtlcnJvckljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmVycm9ySWNvblwiXG4gICAgICAgIFthbGlnbm1lbnRdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmFsaWdubWVudFwiXG4gICAgICAgIFtzaG93QXZhdGFyXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5zaG93QXZhdGFyXCJcbiAgICAgICAgW2RhdGVQYXR0ZXJuXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5kYXRlUGF0dGVyblwiXG4gICAgICAgIFt0aW1lc3RhbXBBbGlnbm1lbnRdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnRpbWVzdGFtcEFsaWdubWVudFwiXG4gICAgICAgIFtEYXRlU2VwYXJhdG9yUGF0dGVybl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uRGF0ZVNlcGFyYXRvclBhdHRlcm5cIlxuICAgICAgICBbdGVtcGxhdGVzXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi50ZW1wbGF0ZXNcIlxuICAgICAgICBbbWVzc2FnZXNSZXF1ZXN0QnVpbGRlcl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubWVzc2FnZXNSZXF1ZXN0QnVpbGRlclwiXG4gICAgICAgIFt0aHJlc2hvbGRWYWx1ZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24udGhyZXNob2xkVmFsdWVcIlxuICAgICAgICBbb25UaHJlYWRSZXBsaWVzQ2xpY2tdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm9uVGhyZWFkUmVwbGllc0NsaWNrIHx8IG9wZW5UaHJlYWRWaWV3XCJcbiAgICAgICAgW2hlYWRlclZpZXddPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmhlYWRlclZpZXdcIlxuICAgICAgICBbZm9vdGVyVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZm9vdGVyVmlld1wiXG4gICAgICAgIFthdmF0YXJTdHlsZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYXZhdGFyU3R5bGVcIlxuICAgICAgICBbc2Nyb2xsVG9Cb3R0b21Pbk5ld01lc3NhZ2VzXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5zY3JvbGxUb0JvdHRvbU9uTmV3TWVzc2FnZXNcIlxuICAgICAgICBbYmFja2Ryb3BTdHlsZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZVwiXG4gICAgICAgIFtkYXRlU2VwYXJhdG9yU3R5bGVdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRhdGVTZXBhcmF0b3JTdHlsZVwiXG4gICAgICAgIFttZXNzYWdlTGlzdFN0eWxlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdFN0eWxlXCJcbiAgICAgICAgW29uRXJyb3JdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm9uRXJyb3JcIlxuICAgICAgICBbZGlzYWJsZU1lbnRpb25zXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5kaXNhYmxlTWVudGlvbnNcIlxuICAgICAgICBbdGV4dEZvcm1hdHRlcnNdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uPy50ZXh0Rm9ybWF0dGVyc1wiPlxuICAgICAgPC9jb21ldGNoYXQtbWVzc2FnZS1saXN0PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlTGlzdFZpZXdcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXNzYWdlTGlzdFZpZXc7Y29udGV4dDp7ICB1c2VyOiB1c2VyLCBncm91cDogZ3JvdXAgfVwiPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNfX2NvbXBvc2VyXCJcbiAgICAgICpuZ0lmPVwiIW1lc3NhZ2VDb21wb3NlclZpZXcgJiYgIWhpZGVNZXNzYWdlQ29tcG9zZXIgJiYgIW9wZW5UaHJlYWRlZE1lc3NhZ2VzXCI+XG4gICAgICA8Y29tZXRjaGF0LW1lc3NhZ2UtY29tcG9zZXIgI21lc3NhZ2VDb21wb3NlclJlZlxuICAgICAgICBbZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXNdPVwiZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXNcIlxuICAgICAgICBbdm9pY2VSZWNvcmRpbmdTdG9wSWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnZvaWNlUmVjb3JkaW5nU3RvcEljb25VUkxcIlxuICAgICAgICBbdm9pY2VSZWNvcmRpbmdTdGFydEljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi52b2ljZVJlY29yZGluZ1N0YXJ0SWNvblVSTFwiXG4gICAgICAgIFt2b2ljZVJlY29yZGluZ0Nsb3NlSWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnZvaWNlUmVjb3JkaW5nQ2xvc2VJY29uVVJMXCJcbiAgICAgICAgW3ZvaWNlUmVjb3JkaW5nU3VibWl0SWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnZvaWNlUmVjb3JkaW5nU3VibWl0SWNvblVSTFwiXG4gICAgICAgIFttZWRpYVJlY29yZGVyU3R5bGVdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5tZWRpYVJlY29yZGVyU3R5bGVcIlxuICAgICAgICBbY3VzdG9tU291bmRGb3JNZXNzYWdlc109XCJjdXN0b21Tb3VuZEZvck91dGdvaW5nTWVzc2FnZXNcIiBbdXNlcl09XCJ1c2VyXCJcbiAgICAgICAgW2dyb3VwXT1cImdyb3VwXCIgW3RleHRdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi50ZXh0XCJcbiAgICAgICAgW2hlYWRlclZpZXddPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5oZWFkZXJWaWV3XCJcbiAgICAgICAgW29uVGV4dENoYW5nZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm9uVGV4dENoYW5nZVwiXG4gICAgICAgIFthdHRhY2htZW50SWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmF0dGFjaG1lbnRJY29uVVJMXCJcbiAgICAgICAgW2F0dGFjaG1lbnRPcHRpb25zXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYXR0YWNobWVudE9wdGlvbnNcIlxuICAgICAgICBbc2Vjb25kYXJ5QnV0dG9uVmlld109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnNlY29uZGFyeUJ1dHRvblZpZXdcIlxuICAgICAgICBbYXV4aWxhcnlCdXR0b25WaWV3XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYXV4aWxhcnlCdXR0b25WaWV3XCJcbiAgICAgICAgW2F1eGlsaWFyeUJ1dHRvbnNBbGlnbm1lbnRdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5hdXhpbGlhcnlCdXR0b25zQWxpZ25tZW50XCJcbiAgICAgICAgW3NlbmRCdXR0b25WaWV3XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uc2VuZEJ1dHRvblZpZXdcIlxuICAgICAgICBbaGlkZUxpdmVSZWFjdGlvbl09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmhpZGVMaXZlUmVhY3Rpb25cIlxuICAgICAgICBbTGl2ZVJlYWN0aW9uSWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLkxpdmVSZWFjdGlvbkljb25VUkxcIlxuICAgICAgICBbbWVzc2FnZUNvbXBvc2VyU3R5bGVdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5tZXNzYWdlQ29tcG9zZXJTdHlsZVwiXG4gICAgICAgIFtvblNlbmRCdXR0b25DbGlja109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm9uU2VuZEJ1dHRvbkNsaWNrXCJcbiAgICAgICAgW29uU2VuZEJ1dHRvbkNsaWNrXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24ub25TZW5kQnV0dG9uQ2xpY2tcIlxuICAgICAgICBbb25FcnJvcl09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm9uRXJyb3JcIlxuICAgICAgICBbYWN0aW9uU2hlZXRTdHlsZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmFjdGlvblNoZWV0U3R5bGVcIlxuICAgICAgICBbYWlPcHRpb25zU3R5bGVdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5BSU9wdGlvbnNTdHlsZVwiXG4gICAgICAgIFthaUljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5BSUljb25VUkxcIlxuICAgICAgICBbdXNlck1lbWJlcldyYXBwZXJDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udXNlck1lbWJlcldyYXBwZXJDb25maWd1cmF0aW9uXCJcbiAgICAgICAgW3RleHRGb3JtYXR0ZXJzXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24/LnRleHRGb3JtYXR0ZXJzXCJcbiAgICAgICAgW2Rpc2FibGVNZW50aW9uc109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmRpc2FibGVNZW50aW9uc1wiXG4gICAgICAgIFttZW50aW9uc1dhcm5pbmdUZXh0XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24/Lm1lbnRpb25zV2FybmluZ1RleHRcIlxuICAgICAgICBbbWVudGlvbnNXYXJuaW5nU3R5bGVdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbj8ubWVudGlvbnNXYXJuaW5nU3R5bGVcIj5cbiAgICAgIDwvY29tZXRjaGF0LW1lc3NhZ2UtY29tcG9zZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIm1lc3NhZ2VDb21wb3NlclZpZXcgJiYgIWhpZGVNZXNzYWdlQ29tcG9zZXJcIlxuICAgICAgY2xhc3M9XCJjYy1tZXNzYWdlc19fY29tcG9zZXItLWN1c3RvbXZpZXdcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXNzYWdlQ29tcG9zZXJWaWV3O2NvbnRleHQ6eyAgdXNlcjogdXNlciwgZ3JvdXA6IGdyb3VwIH1cIj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX19saXZlcmVhY3Rpb25cIj5cbiAgICA8Y29tZXRjaGF0LWxpdmUtcmVhY3Rpb24gKm5nSWY9XCJsaXZlUmVhY3Rpb25cIlxuICAgICAgW3JlYWN0aW9uSWNvblVSTF09XCJyZWFjdGlvbk5hbWVcIj48L2NvbWV0Y2hhdC1saXZlLXJlYWN0aW9uPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cIm9wZW5UaHJlYWRlZE1lc3NhZ2VzXCIgY2xhc3M9XCJjYy1tZXNzYWdlc19fdGhyZWFkZWRtZXNzYWdlc1wiPlxuICAgIDxjb21ldGNoYXQtdGhyZWFkZWQtbWVzc2FnZXMgW29uQ2xvc2VdPVwiY2xvc2VUaHJlYWRWaWV3XCJcbiAgICAgIFt0aHJlYWRlZE1lc3NhZ2VzU3R5bGVdPVwidGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi50aHJlYWRlZE1lc3NhZ2VzU3R5bGVcIlxuICAgICAgW21lc3NhZ2VBY3Rpb25WaWV3XT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24ubWVzc2FnZUFjdGlvblZpZXdcIlxuICAgICAgW2Nsb3NlSWNvblVSTF09XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLmNsb3NlSWNvblVSTFwiXG4gICAgICBbb25FcnJvcl09XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLm9uRXJyb3JcIlxuICAgICAgW2J1YmJsZVZpZXddPVwidGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5idWJibGVWaWV3IHx8IHBhcmVudEJ1YmJsZVZpZXdcIlxuICAgICAgW3BhcmVudE1lc3NhZ2VdPVwidGhyZWFkTWVzc2FnZU9iamVjdFwiIFt1c2VyXT1cInVzZXJcIiBbZ3JvdXBdPVwiZ3JvdXBcIlxuICAgICAgW21lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbl09XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvblwiXG4gICAgICBbbWVzc2FnZUNvbXBvc2VyVmlld109XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLm1lc3NhZ2VDb21wb3NlclZpZXdcIlxuICAgICAgW21lc3NhZ2VMaXN0Vmlld109XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLm1lc3NhZ2VMaXN0Vmlld1wiXG4gICAgICBbaGlkZU1lc3NhZ2VDb21wb3Nlcl09XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLmhpZGVNZXNzYWdlQ29tcG9zZXJcIj48L2NvbWV0Y2hhdC10aHJlYWRlZC1tZXNzYWdlcz5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cIm9wZW5EZXRhaWxzXCIgY2xhc3M9XCJjYy1tZXNzYWdlc19fZGV0YWlsc1wiPlxuICAgIDxjb21ldGNoYXQtZGV0YWlsc1xuICAgICAgW3Byb3RlY3RlZEdyb3VwSWNvbl09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5wcm90ZWN0ZWRHcm91cEljb25cIlxuICAgICAgW3ByaXZhdGVHcm91cEljb25dPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24ucHJpdmF0ZUdyb3VwSWNvblwiXG4gICAgICBbYmFja2Ryb3BTdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlXCJcbiAgICAgIFtkaXNhYmxlVXNlcnNQcmVzZW5jZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbj8uZGlzYWJsZVVzZXJzUHJlc2VuY2UhXCJcbiAgICAgIFt0cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb25dPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24udHJhbnNmZXJPd25lcnNoaXBDb25maWd1cmF0aW9uXCJcbiAgICAgIFtncm91cE1lbWJlcnNDb25maWd1cmF0aW9uXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb25cIlxuICAgICAgW2Jhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uXCJcbiAgICAgIFthZGRNZW1iZXJzQ29uZmlndXJhdGlvbl09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzQ29uZmlndXJhdGlvblwiXG4gICAgICBbb25DbG9zZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5vbkNsb3NlIHx8IGNsb3NlRGV0YWlsc1BhZ2VcIlxuICAgICAgW2xpc3RJdGVtU3R5bGVdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24ubGlzdEl0ZW1TdHlsZVwiXG4gICAgICBbZGV0YWlsc1N0eWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmRldGFpbHNTdHlsZVwiXG4gICAgICBbYXZhdGFyU3R5bGVdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uYXZhdGFyU3R5bGVcIlxuICAgICAgW3N0YXR1c0luZGljYXRvclN0eWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLnN0YXR1c0luZGljYXRvclN0eWxlXCJcbiAgICAgIFtsZWF2ZURpYWxvZ1N0eWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmxlYXZlRGlhbG9nU3R5bGVcIlxuICAgICAgW2RhdGFdPVwic2V0RGV0YWlsc1RlbXBsYXRlKClcIlxuICAgICAgW2N1c3RvbVByb2ZpbGVWaWV3XT1cImRldGFpbHNDb25maWd1cmF0aW9uLmN1c3RvbVByb2ZpbGVWaWV3XCJcbiAgICAgIFtzdWJ0aXRsZVZpZXddPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uc3VidGl0bGVWaWV3XCJcbiAgICAgIFtoaWRlUHJvZmlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5oaWRlUHJvZmlsZVwiXG4gICAgICBbb25FcnJvcl09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5vbkVycm9yXCJcbiAgICAgIFtjbG9zZUJ1dHRvbkljb25VUkxdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uY2xvc2VCdXR0b25JY29uVVJMXCJcbiAgICAgIFt1c2VyXT1cInVzZXJcIiBbZ3JvdXBdPVwiZ3JvdXBcIj48L2NvbWV0Y2hhdC1kZXRhaWxzPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNoZWFkZXJNZW51PlxuICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNfX2hlYWRlcm1lbnVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNfX2F1eGlsaWFyeW1lbnVcIlxuICAgICAgKm5nSWY9XCJnZXRBdXhpbGFyeVZpZXcoKTsgZWxzZSBlbHNlQmxvY2tcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRBdXhpbGFyeVZpZXcoKTtjb250ZXh0OnsgIHVzZXI6IHVzZXIsIGdyb3VwOiBncm91cCB9XCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cbiAgICAgIDxjb21ldGNoYXQtY2FsbC1idXR0b25zICpuZ0lmPVwiZW5hYmxlQ2FsbGluZ1wiIHZvaWNlQ2FsbEljb25UZXh0PVwiXCJcbiAgICAgICAgdmlkZW9DYWxsSWNvblRleHQ9XCJcIiBbdXNlcl09XCJ1c2VyXCIgW2dyb3VwXT1cImdyb3VwXCJcbiAgICAgICAgW2NhbGxCdXR0b25zU3R5bGVdPVwiY2FsbEJ1dHRvbnNTdHlsZVwiPlxuICAgICAgPC9jb21ldGNoYXQtY2FsbC1idXR0b25zPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGNvbWV0Y2hhdC1idXR0b24gKm5nSWY9XCIhaGlkZURldGFpbHNcIiBbaWNvblVSTF09XCJpbmZvSWNvblN0eWxlXCJcbiAgICAgIFtidXR0b25TdHlsZV09XCJkZXRhaWxzQnV0dG9uU3R5bGVcIlxuICAgICAgKGNjLWJ1dHRvbi1jbGlja2VkKT1cIm9wZW5EZXRhaWxzUGFnZSgpXCI+PC9jb21ldGNoYXQtYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|