UNPKG

ngx-tencent-im

Version:
110 lines 25.8 kB
import { Component, Input } from '@angular/core'; import { getDate, getTime, isToday } from '../../util/date'; import { currentUserProfileSelector } from '../../store/selectors'; import { resetCurrentConversationAction, showAction } from '../../store/actions'; import TIM from 'tim-js-sdk'; import { MESSAGE_STATUS } from '../../shared.data'; import * as i0 from "@angular/core"; import * as i1 from "@ngrx/store"; import * as i2 from "../../tim-helper.service"; import * as i3 from "../../avatar/avatar.component"; import * as i4 from "@angular/common"; export class ConversationItemComponent { constructor(store, timHelperService) { this.store = store; this.timHelperService = timHelperService; this.TIM = TIM; } ngOnInit() { this.profileSubscription = this.store.select(currentUserProfileSelector) .subscribe(res => { this.currentUserProfile = res; }); } selectConversation() { if (this.conversation.conversationID !== this.currentConversation.conversationID) { this.timHelperService.checkoutConversation(this.conversation.conversationID); // this.timHelperService.eventBus$.next('select-item'); } } get avatarSrc() { switch (this.conversation.type) { case 'GROUP': return this.conversation.groupProfile?.avatar; case 'C2C': return this.conversation.userProfile?.avatar; default: return null; } } ; get date() { if (!this.conversation.lastMessage || !this.conversation.lastMessage.lastTime) { return ''; } const date = new Date(this.conversation.lastMessage.lastTime * 1000); if (isToday(date)) { return getTime(date); } return getDate(date); } get messageForShow() { if (this.conversation.lastMessage.isRevoked) { if (this.conversation.lastMessage.fromAccount === this.currentUserProfile?.userID) { return '你撤回了一条消息'; } if (this.conversation.type === TIM.TYPES.CONV_C2C) { return '对方撤回了一条消息'; } return `${this.conversation.lastMessage.fromAccount}撤回了一条消息`; } return this.conversation.lastMessage.messageForShow; } get conversationName() { if (this.conversation.type === TIM.TYPES.CONV_C2C) { return this.conversation.userProfile.nick || this.conversation.userProfile.userID; } if (this.conversation.type === TIM.TYPES.CONV_GROUP) { return this.conversation.groupProfile.name || this.conversation.groupProfile.groupID; } if (this.conversation.type === TIM.TYPES.CONV_SYSTEM) { return '系统通知'; } return ''; } deleteConversation(event) { // 停止冒泡,避免和点击会话的事件冲突 event.stopPropagation(); this.timHelperService.tim .deleteConversation(this.conversation.conversationID) .then(() => { this.store.dispatch(showAction({ message: `会话${this.conversationName}删除成功!`, msgType: MESSAGE_STATUS.success })); this.store.dispatch(resetCurrentConversationAction()); }) .catch(error => { this.store.dispatch(showAction({ message: `会话${this.conversationName}删除失败!, error=${error.message}`, msgType: MESSAGE_STATUS.error })); }); } ngOnDestroy() { if (this.profileSubscription) { this.profileSubscription.unsubscribe(); } } } ConversationItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ConversationItemComponent, deps: [{ token: i1.Store }, { token: i2.TimHelperService }], target: i0.ɵɵFactoryTarget.Component }); ConversationItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: ConversationItemComponent, selector: "app-conversation-item", inputs: { currentConversation: "currentConversation", conversation: "conversation" }, ngImport: i0, template: "<div class=\"conversation-item-container\"\r\n [ngClass]=\"{'choose': conversation.conversationID === currentConversation.conversationID }\"\r\n (click)=\"selectConversation()\">\r\n <div class=\"close-btn\">\r\n <span class=\"tim-icon-close\" title=\"\u5220\u9664\u4F1A\u8BDD\" (click)=\"deleteConversation($event)\"></span>\r\n </div>\r\n <div class=\"warp\">\r\n <im-avatar [src]=\"avatarSrc\" [type]=\"conversation.type\"></im-avatar>\r\n <div class=\"content\">\r\n <div class=\"row-1\">\r\n <div class=\"name\">\r\n <div class=\"text-ellipsis\">\r\n <span [title]=\"conversation.userProfile.nick || conversation.userProfile.userID\"\r\n *ngIf=\"conversation.type === TIM.TYPES.CONV_C2C\">\r\n {{conversation.userProfile.nick || conversation.userProfile.userID}}\r\n </span>\r\n <span [title]=\"conversation.groupProfile.name || conversation.groupProfile.groupID\"\r\n *ngIf=\"conversation.type===TIM.TYPES.CONV_GROUP\">\r\n {{conversation.groupProfile.name || conversation.groupProfile.groupID}}\r\n </span>\r\n <span *ngIf=\"conversation.type === TIM.TYPES.CONV_SYSTEM\">\u7CFB\u7EDF\u901A\u77E5\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"unread-count\">\r\n <span class=\"badge\" *ngIf=\"this.conversation.unreadCount > 0\">\r\n {{conversation.unreadCount > 99 ? '99+' : conversation.unreadCount}}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"row-2\">\r\n <div class=\"summary\">\r\n <div v-if=\"conversation.lastMessage\" class=\"text-ellipsis\">\r\n <!-- <span class=\"remind\" style=\"color:red;\">[\u6709\u4EBA\u63D0\u5230\u6211]</span> -->\r\n <span class=\"text\" [title]=\"conversation.lastMessage.messageForShow\">\r\n {{messageForShow}}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"date\">\r\n {{date}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".conversation-item-container{padding:15px 10px;cursor:pointer;position:relative;overflow:hidden;transition:.2s}.conversation-item-container:hover{background-color:#404953}.conversation-item-container:hover .close-btn{right:3px}.conversation-item-container .close-btn{position:absolute;right:-20px;top:3px;color:#76828c;transition:all .2s ease}.conversation-item-container .close-btn:hover{color:#f35f5f}.conversation-item-container .warp{display:flex}.conversation-item-container .warp im-avatar{padding-right:10px}.conversation-item-container .content{flex:1;height:40px;overflow:hidden}.conversation-item-container .content .row-1{display:flex;line-height:21px}.conversation-item-container .content .row-1 .name{color:#f7f7f8;flex:1;min-width:0px}.conversation-item-container .content .row-1 .unread-count{padding-left:10px;flex-shrink:0;color:#76828c;font-size:12px}.conversation-item-container .content .row-1 .unread-count .badge{vertical-align:bottom;background-color:#f35f5f;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;max-width:40px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap}.conversation-item-container .content .row-2{display:flex;font-size:12px;padding-top:3px}.conversation-item-container .content .row-2 .summary{flex:1;overflow:hidden;min-width:0px;color:#a5b5c1}.conversation-item-container .content .row-2 .summary .remind{color:#f35f5f}.conversation-item-container .content .row-2 .date{padding-left:10px;flex-shrink:0;text-align:right;color:#76828c}.choose{background-color:#404953}.context-menu-button{padding:10px;border:2px solid #2d8cf0;border-radius:8px}\n"], components: [{ type: i3.AvatarComponent, selector: "im-avatar", inputs: ["shape", "size", "type", "title", "src"] }], directives: [{ type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ConversationItemComponent, decorators: [{ type: Component, args: [{ selector: 'app-conversation-item', template: "<div class=\"conversation-item-container\"\r\n [ngClass]=\"{'choose': conversation.conversationID === currentConversation.conversationID }\"\r\n (click)=\"selectConversation()\">\r\n <div class=\"close-btn\">\r\n <span class=\"tim-icon-close\" title=\"\u5220\u9664\u4F1A\u8BDD\" (click)=\"deleteConversation($event)\"></span>\r\n </div>\r\n <div class=\"warp\">\r\n <im-avatar [src]=\"avatarSrc\" [type]=\"conversation.type\"></im-avatar>\r\n <div class=\"content\">\r\n <div class=\"row-1\">\r\n <div class=\"name\">\r\n <div class=\"text-ellipsis\">\r\n <span [title]=\"conversation.userProfile.nick || conversation.userProfile.userID\"\r\n *ngIf=\"conversation.type === TIM.TYPES.CONV_C2C\">\r\n {{conversation.userProfile.nick || conversation.userProfile.userID}}\r\n </span>\r\n <span [title]=\"conversation.groupProfile.name || conversation.groupProfile.groupID\"\r\n *ngIf=\"conversation.type===TIM.TYPES.CONV_GROUP\">\r\n {{conversation.groupProfile.name || conversation.groupProfile.groupID}}\r\n </span>\r\n <span *ngIf=\"conversation.type === TIM.TYPES.CONV_SYSTEM\">\u7CFB\u7EDF\u901A\u77E5\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"unread-count\">\r\n <span class=\"badge\" *ngIf=\"this.conversation.unreadCount > 0\">\r\n {{conversation.unreadCount > 99 ? '99+' : conversation.unreadCount}}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"row-2\">\r\n <div class=\"summary\">\r\n <div v-if=\"conversation.lastMessage\" class=\"text-ellipsis\">\r\n <!-- <span class=\"remind\" style=\"color:red;\">[\u6709\u4EBA\u63D0\u5230\u6211]</span> -->\r\n <span class=\"text\" [title]=\"conversation.lastMessage.messageForShow\">\r\n {{messageForShow}}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"date\">\r\n {{date}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".conversation-item-container{padding:15px 10px;cursor:pointer;position:relative;overflow:hidden;transition:.2s}.conversation-item-container:hover{background-color:#404953}.conversation-item-container:hover .close-btn{right:3px}.conversation-item-container .close-btn{position:absolute;right:-20px;top:3px;color:#76828c;transition:all .2s ease}.conversation-item-container .close-btn:hover{color:#f35f5f}.conversation-item-container .warp{display:flex}.conversation-item-container .warp im-avatar{padding-right:10px}.conversation-item-container .content{flex:1;height:40px;overflow:hidden}.conversation-item-container .content .row-1{display:flex;line-height:21px}.conversation-item-container .content .row-1 .name{color:#f7f7f8;flex:1;min-width:0px}.conversation-item-container .content .row-1 .unread-count{padding-left:10px;flex-shrink:0;color:#76828c;font-size:12px}.conversation-item-container .content .row-1 .unread-count .badge{vertical-align:bottom;background-color:#f35f5f;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;max-width:40px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap}.conversation-item-container .content .row-2{display:flex;font-size:12px;padding-top:3px}.conversation-item-container .content .row-2 .summary{flex:1;overflow:hidden;min-width:0px;color:#a5b5c1}.conversation-item-container .content .row-2 .summary .remind{color:#f35f5f}.conversation-item-container .content .row-2 .date{padding-left:10px;flex-shrink:0;text-align:right;color:#76828c}.choose{background-color:#404953}.context-menu-button{padding:10px;border:2px solid #2d8cf0;border-radius:8px}\n"] }] }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.TimHelperService }]; }, propDecorators: { currentConversation: [{ type: Input }], conversation: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlbmNlbnQtaW0vc3JjL2NvbnZlcnNhdGlvbi9jb252ZXJzYXRpb24taXRlbS9jb252ZXJzYXRpb24taXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVuY2VudC1pbS9zcmMvY29udmVyc2F0aW9uL2NvbnZlcnNhdGlvbi1pdGVtL2NvbnZlcnNhdGlvbi1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU81RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakYsT0FBTyxHQUE4QixNQUFNLFlBQVksQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7OztBQVFuRCxNQUFNLE9BQU8seUJBQXlCO0lBUXBDLFlBQ1UsS0FBWSxFQUNaLGdCQUFrQztRQURsQyxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ1oscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQU41QyxRQUFHLEdBQUcsR0FBRyxDQUFDO0lBT04sQ0FBQztJQUVMLFFBQVE7UUFDTixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUM7YUFDckUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsS0FBSyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFO1lBQ2hGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzdFLHVEQUF1RDtTQUN4RDtJQUNILENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO1lBQzlCLEtBQUssT0FBTztnQkFDVixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztZQUNoRCxLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUM7WUFDL0M7Z0JBQ0UsT0FBTyxJQUFJLENBQUM7U0FDZjtJQUVILENBQUM7SUFBQSxDQUFDO0lBRUYsSUFBSSxJQUFJO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO1lBQzdFLE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDckUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDakIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEI7UUFDRCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBSSxjQUFjO1FBQ2hCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFO1lBQzNDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLEVBQUU7Z0JBQ2pGLE9BQU8sVUFBVSxDQUFDO2FBQ25CO1lBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDakQsT0FBTyxXQUFXLENBQUM7YUFDcEI7WUFDRCxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsV0FBVyxTQUFTLENBQUM7U0FDOUQ7UUFDRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNqRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7U0FDbkY7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQ25ELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztTQUN0RjtRQUNELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUU7WUFDcEQsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUdELGtCQUFrQixDQUFDLEtBQUs7UUFDdEIsb0JBQW9CO1FBQ3BCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRzthQUN0QixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQzthQUNwRCxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQ2pCLFVBQVUsQ0FBQztnQkFDVCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLFFBQVE7Z0JBQzVDLE9BQU8sRUFBRSxjQUFjLENBQUMsT0FBTzthQUNoQyxDQUFDLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLDhCQUE4QixFQUFFLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDakIsVUFBVSxDQUFDO2dCQUNULE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsaUJBQWlCLEtBQUssQ0FBQyxPQUFPLEVBQUU7Z0JBQ3BFLE9BQU8sRUFBRSxjQUFjLENBQUMsS0FBSzthQUM5QixDQUFDLENBQUMsQ0FBQztRQUVSLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUdELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDeEM7SUFDSCxDQUFDOztzSEF4R1UseUJBQXlCOzBHQUF6Qix5QkFBeUIsbUpDckJ0QyxvbEVBOENBOzJGRHpCYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UsdUJBQXVCOzJIQUt4QixtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBnZXREYXRlLCBnZXRUaW1lLCBpc1RvZGF5IH0gZnJvbSAnLi4vLi4vdXRpbC9kYXRlJztcclxuXHJcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xyXG5cclxuaW1wb3J0IHsgVGltSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3RpbS1oZWxwZXIuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY3VycmVudFVzZXJQcm9maWxlU2VsZWN0b3IgfSBmcm9tICcuLi8uLi9zdG9yZS9zZWxlY3RvcnMnO1xyXG5pbXBvcnQgeyByZXNldEN1cnJlbnRDb252ZXJzYXRpb25BY3Rpb24sIHNob3dBY3Rpb24gfSBmcm9tICcuLi8uLi9zdG9yZS9hY3Rpb25zJztcclxuXHJcbmltcG9ydCBUSU0sIHsgQ29udmVyc2F0aW9uLCBQcm9maWxlIH0gZnJvbSAndGltLWpzLXNkayc7XHJcbmltcG9ydCB7IE1FU1NBR0VfU1RBVFVTIH0gZnJvbSAnLi4vLi4vc2hhcmVkLmRhdGEnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWNvbnZlcnNhdGlvbi1pdGVtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29udmVyc2F0aW9uLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbnZlcnNhdGlvbi1pdGVtLmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbnZlcnNhdGlvbkl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgY3VycmVudENvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uO1xyXG4gIEBJbnB1dCgpIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uO1xyXG5cclxuICBUSU0gPSBUSU07XHJcbiAgY3VycmVudFVzZXJQcm9maWxlOiBQcm9maWxlO1xyXG4gIHByb2ZpbGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcclxuICAgIHByaXZhdGUgdGltSGVscGVyU2VydmljZTogVGltSGVscGVyU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9maWxlU3Vic2NyaXB0aW9uID0gdGhpcy5zdG9yZS5zZWxlY3QoY3VycmVudFVzZXJQcm9maWxlU2VsZWN0b3IpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRVc2VyUHJvZmlsZSA9IHJlcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDb252ZXJzYXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5jb252ZXJzYXRpb24uY29udmVyc2F0aW9uSUQgIT09IHRoaXMuY3VycmVudENvbnZlcnNhdGlvbi5jb252ZXJzYXRpb25JRCkge1xyXG4gICAgICB0aGlzLnRpbUhlbHBlclNlcnZpY2UuY2hlY2tvdXRDb252ZXJzYXRpb24odGhpcy5jb252ZXJzYXRpb24uY29udmVyc2F0aW9uSUQpO1xyXG4gICAgICAvLyB0aGlzLnRpbUhlbHBlclNlcnZpY2UuZXZlbnRCdXMkLm5leHQoJ3NlbGVjdC1pdGVtJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgYXZhdGFyU3JjKCkge1xyXG4gICAgc3dpdGNoICh0aGlzLmNvbnZlcnNhdGlvbi50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ0dST1VQJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJzYXRpb24uZ3JvdXBQcm9maWxlPy5hdmF0YXI7XHJcbiAgICAgIGNhc2UgJ0MyQyc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVyc2F0aW9uLnVzZXJQcm9maWxlPy5hdmF0YXI7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gIH07XHJcblxyXG4gIGdldCBkYXRlKCkge1xyXG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbi5sYXN0TWVzc2FnZSB8fCAhdGhpcy5jb252ZXJzYXRpb24ubGFzdE1lc3NhZ2UubGFzdFRpbWUpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRoaXMuY29udmVyc2F0aW9uLmxhc3RNZXNzYWdlLmxhc3RUaW1lICogMTAwMCk7XHJcbiAgICBpZiAoaXNUb2RheShkYXRlKSkge1xyXG4gICAgICByZXR1cm4gZ2V0VGltZShkYXRlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBnZXREYXRlKGRhdGUpO1xyXG4gIH1cclxuICBnZXQgbWVzc2FnZUZvclNob3coKSB7XHJcbiAgICBpZiAodGhpcy5jb252ZXJzYXRpb24ubGFzdE1lc3NhZ2UuaXNSZXZva2VkKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbnZlcnNhdGlvbi5sYXN0TWVzc2FnZS5mcm9tQWNjb3VudCA9PT0gdGhpcy5jdXJyZW50VXNlclByb2ZpbGU/LnVzZXJJRCkge1xyXG4gICAgICAgIHJldHVybiAn5L2g5pKk5Zue5LqG5LiA5p2h5raI5oGvJztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jb252ZXJzYXRpb24udHlwZSA9PT0gVElNLlRZUEVTLkNPTlZfQzJDKSB7XHJcbiAgICAgICAgcmV0dXJuICflr7nmlrnmkqTlm57kuobkuIDmnaHmtojmga8nO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBgJHt0aGlzLmNvbnZlcnNhdGlvbi5sYXN0TWVzc2FnZS5mcm9tQWNjb3VudH3mkqTlm57kuobkuIDmnaHmtojmga9gO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY29udmVyc2F0aW9uLmxhc3RNZXNzYWdlLm1lc3NhZ2VGb3JTaG93O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbnZlcnNhdGlvbk5hbWUoKSB7XHJcbiAgICBpZiAodGhpcy5jb252ZXJzYXRpb24udHlwZSA9PT0gVElNLlRZUEVTLkNPTlZfQzJDKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnNhdGlvbi51c2VyUHJvZmlsZS5uaWNrIHx8IHRoaXMuY29udmVyc2F0aW9uLnVzZXJQcm9maWxlLnVzZXJJRDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNvbnZlcnNhdGlvbi50eXBlID09PSBUSU0uVFlQRVMuQ09OVl9HUk9VUCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJzYXRpb24uZ3JvdXBQcm9maWxlLm5hbWUgfHwgdGhpcy5jb252ZXJzYXRpb24uZ3JvdXBQcm9maWxlLmdyb3VwSUQ7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb252ZXJzYXRpb24udHlwZSA9PT0gVElNLlRZUEVTLkNPTlZfU1lTVEVNKSB7XHJcbiAgICAgIHJldHVybiAn57O757uf6YCa55+lJztcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG5cclxuICBkZWxldGVDb252ZXJzYXRpb24oZXZlbnQpIHtcclxuICAgIC8vIOWBnOatouWGkuazoe+8jOmBv+WFjeWSjOeCueWHu+S8muivneeahOS6i+S7tuWGsueqgVxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLnRpbUhlbHBlclNlcnZpY2UudGltXHJcbiAgICAgIC5kZWxldGVDb252ZXJzYXRpb24odGhpcy5jb252ZXJzYXRpb24uY29udmVyc2F0aW9uSUQpXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxyXG4gICAgICAgICAgc2hvd0FjdGlvbih7XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IGDkvJror53jgJAke3RoaXMuY29udmVyc2F0aW9uTmFtZX3jgJHliKDpmaTmiJDlip8hYCxcclxuICAgICAgICAgICAgbXNnVHlwZTogTUVTU0FHRV9TVEFUVVMuc3VjY2Vzc1xyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gocmVzZXRDdXJyZW50Q29udmVyc2F0aW9uQWN0aW9uKCkpO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXHJcbiAgICAgICAgICBzaG93QWN0aW9uKHtcclxuICAgICAgICAgICAgbWVzc2FnZTogYOS8muivneOAkCR7dGhpcy5jb252ZXJzYXRpb25OYW1lfeOAkeWIoOmZpOWksei0pSEsIGVycm9yPSR7ZXJyb3IubWVzc2FnZX1gLFxyXG4gICAgICAgICAgICBtc2dUeXBlOiBNRVNTQUdFX1NUQVRVUy5lcnJvclxyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wcm9maWxlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMucHJvZmlsZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnZlcnNhdGlvbi1pdGVtLWNvbnRhaW5lclwiXHJcbiAgW25nQ2xhc3NdPVwieydjaG9vc2UnOiBjb252ZXJzYXRpb24uY29udmVyc2F0aW9uSUQgPT09IGN1cnJlbnRDb252ZXJzYXRpb24uY29udmVyc2F0aW9uSUQgfVwiXHJcbiAgKGNsaWNrKT1cInNlbGVjdENvbnZlcnNhdGlvbigpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNsb3NlLWJ0blwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJ0aW0taWNvbi1jbG9zZVwiIHRpdGxlPVwi5Yig6Zmk5Lya6K+dXCIgKGNsaWNrKT1cImRlbGV0ZUNvbnZlcnNhdGlvbigkZXZlbnQpXCI+PC9zcGFuPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJ3YXJwXCI+XHJcbiAgICA8aW0tYXZhdGFyIFtzcmNdPVwiYXZhdGFyU3JjXCIgW3R5cGVdPVwiY29udmVyc2F0aW9uLnR5cGVcIj48L2ltLWF2YXRhcj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3ctMVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbGxpcHNpc1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiY29udmVyc2F0aW9uLnVzZXJQcm9maWxlLm5pY2sgfHwgY29udmVyc2F0aW9uLnVzZXJQcm9maWxlLnVzZXJJRFwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb252ZXJzYXRpb24udHlwZSA9PT0gIFRJTS5UWVBFUy5DT05WX0MyQ1wiPlxyXG4gICAgICAgICAgICAgIHt7Y29udmVyc2F0aW9uLnVzZXJQcm9maWxlLm5pY2sgfHwgY29udmVyc2F0aW9uLnVzZXJQcm9maWxlLnVzZXJJRH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gW3RpdGxlXT1cImNvbnZlcnNhdGlvbi5ncm91cFByb2ZpbGUubmFtZSB8fCBjb252ZXJzYXRpb24uZ3JvdXBQcm9maWxlLmdyb3VwSURcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29udmVyc2F0aW9uLnR5cGU9PT1USU0uVFlQRVMuQ09OVl9HUk9VUFwiPlxyXG4gICAgICAgICAgICAgIHt7Y29udmVyc2F0aW9uLmdyb3VwUHJvZmlsZS5uYW1lIHx8IGNvbnZlcnNhdGlvbi5ncm91cFByb2ZpbGUuZ3JvdXBJRH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb252ZXJzYXRpb24udHlwZSA9PT0gVElNLlRZUEVTLkNPTlZfU1lTVEVNXCI+57O757uf6YCa55+lXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1bnJlYWQtY291bnRcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2VcIiAqbmdJZj1cInRoaXMuY29udmVyc2F0aW9uLnVucmVhZENvdW50ID4gMFwiPlxyXG4gICAgICAgICAgICB7e2NvbnZlcnNhdGlvbi51bnJlYWRDb3VudCA+IDk5ID8gJzk5KycgOiBjb252ZXJzYXRpb24udW5yZWFkQ291bnR9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdy0yXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnlcIj5cclxuICAgICAgICAgIDxkaXYgdi1pZj1cImNvbnZlcnNhdGlvbi5sYXN0TWVzc2FnZVwiIGNsYXNzPVwidGV4dC1lbGxpcHNpc1wiPlxyXG4gICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwicmVtaW5kXCIgc3R5bGU9XCJjb2xvcjpyZWQ7XCI+W+acieS6uuaPkOWIsOaIkV08L3NwYW4+IC0tPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHRcIiBbdGl0bGVdPVwiY29udmVyc2F0aW9uLmxhc3RNZXNzYWdlLm1lc3NhZ2VGb3JTaG93XCI+XHJcbiAgICAgICAgICAgICAge3ttZXNzYWdlRm9yU2hvd319XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlXCI+XHJcbiAgICAgICAgICB7e2RhdGV9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19