UNPKG

ng-yunzai-mobile

Version:

1. 修改wechat.micro.ts

627 lines 49.5 kB
/** * @fileoverview added by tsickle * Generated from: select-contacts/yz-role-select-contacts/yz-role-select-contacts.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Inject } from '@angular/core'; import { ModalService } from "ng-zorro-antd-mobile"; import { MAT_DIALOG_DATA, MatDialogRef } from "@angular/material/dialog"; import { YzSelectContactsService } from "../yz-select-contacts/yz-select-contacts.service"; import { YzRoleSelectContactsService } from "./yz-role-select-contacts.service"; import { ComponentOption } from "./groupRole.interface"; var YzRoleSelectContactsComponent = /** @class */ (function () { function YzRoleSelectContactsComponent(dialogRef, _modal, yzContactsService, yzRoleContactsService, data) { this.dialogRef = dialogRef; this._modal = _modal; this.yzContactsService = yzContactsService; this.yzRoleContactsService = yzRoleContactsService; this.data = data; this.modalRefCpt = []; this.subscribed = []; this.dtPullToRefreshStyle = { height: window.innerHeight - 44 - 51 - 44 + 'px' }; // 总角色组数据 this.roleNodes = []; // 页面展示的角色组数据 this.groupRoleList = []; // 当前角色 this.currentRole = []; // 页面加载中 this.pageLoading = false; // 人员列表参数 this.baseUserParams = { total: 0, pageSize: 20, pageNum: 1, realName: null }; // 人员数据 this.baseUserList = []; // 是否全选人员 this.allUserCheck = false; // 已选择的联系人 this.selectedContacts = []; } /** * @return {?} */ YzRoleSelectContactsComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.initGroupRole(); }; // 查询角色组 // 查询角色组 /** * @return {?} */ YzRoleSelectContactsComponent.prototype.initGroupRole = // 查询角色组 /** * @return {?} */ function () { var _this = this; this.groupRoleList = []; this.roleNodes = []; this.pageLoading = true; /** @type {?} */ var $temp = this.yzRoleContactsService.getGroupRole(this.data.roleGroupCode).subscribe((/** * @param {?} role * @return {?} */ function (role) { _this.pageLoading = false; _this.roleNodes = role; _this.roleNodes.forEach((/** * @param {?} item * @return {?} */ function (item) { /** @type {?} */ var obj = { value: item.key, label: item.title, children: [] }; if (item.children && item.children.length > 0) { item.children.forEach((/** * @param {?} role * @return {?} */ function (role) { obj.children.push({ value: role.key, label: role.title, }); })); } _this.groupRoleList.push(obj); })); _this.groupRoleList.unshift({ value: null, label: '全部' }); if (_this.roleNodes.length > 0) { if (_this.roleNodes[0].children.length > 0) { _this.currentRole = [_this.groupRoleList[1].children[0]]; } } _this.queryDefaultContact(); _this.subscribed.push($temp); }), (/** * @return {?} */ function () { _this.pageLoading = false; })); }; // 查询默认已被选择人员的信息 // 查询默认已被选择人员的信息 /** * @return {?} */ YzRoleSelectContactsComponent.prototype.queryDefaultContact = // 查询默认已被选择人员的信息 /** * @return {?} */ function () { var _this = this; if (this.data.defaultContacts && this.data.defaultContacts.length > 0) { /** @type {?} */ var userIdsArray_1 = []; this.data.defaultContacts.forEach((/** * @param {?} item * @return {?} */ function (item) { if (item.userId) { userIdsArray_1.push(item.userId); } })); this.pageLoading = true; /** @type {?} */ var $temp_1 = this.yzContactsService.getUserByUserIds(userIdsArray_1).subscribe((/** * @param {?} data * @return {?} */ function (data) { _this.pageLoading = false; _this.selectedContacts = data; _this.queryBaseUser(); _this.subscribed.push($temp_1); }), (/** * @return {?} */ function () { _this.pageLoading = false; })); } else { this.queryBaseUser(); } }; // 查询人员列表 // 查询人员列表 /** * @return {?} */ YzRoleSelectContactsComponent.prototype.queryBaseUser = // 查询人员列表 /** * @return {?} */ function () { var _this = this; this.pageLoading = true; /** @type {?} */ var $temp = this.yzRoleContactsService.getBaseUser(this.baseUserParams.pageNum, this.baseUserParams.pageSize, this.baseUserParams.realName, this.currentRole.length > 0 ? this.currentRole[this.currentRole.length - 1].value : null, this.data.userTypes).subscribe((/** * @param {?} data * @return {?} */ function (data) { var _a; _this.pageLoading = false; _this.baseUserParams.total = data.total; (_a = _this.baseUserList).push.apply(_a, tslib_1.__spread(data.list)); _this.baseUserList.forEach((/** * @param {?} item * @return {?} */ function (item) { item['checked'] = false; item['disabled'] = false; if (!item.dept) { item.dept = { deptName: '暂无部门' }; } if (!item.realName) { item.realName = '暂无姓名'; } if (!item.userCode) { item.realName = '暂无学/工号'; } if (!item.roles) { item.roles = []; item.rolesData = '暂无角色'; } else { /** @type {?} */ var roleArray_1 = []; item.roles.forEach((/** * @param {?} value * @return {?} */ function (value) { roleArray_1.push(value.roleName); })); item.rolesData = roleArray_1.toString(); } _this.selectedContacts.forEach((/** * @param {?} value * @return {?} */ function (value) { if (value.userId === item.userId) { item['checked'] = true; } })); })); _this.isMaxCount(); _this.subscribed.push($temp); }), (/** * @return {?} */ function () { _this.pageLoading = false; })); }; // 刷新回调函数 // 刷新回调函数 /** * @return {?} */ YzRoleSelectContactsComponent.prototype.pullToRefresh = // 刷新回调函数 /** * @return {?} */ function () { if (this.baseUserList.length < this.baseUserParams.total) { this.baseUserParams.pageNum++; this.queryBaseUser(); } }; // 根据用户姓名即时搜索人员 // 根据用户姓名即时搜索人员 /** * @return {?} */ YzRoleSelectContactsComponent.prototype.queryUserByRealName = // 根据用户姓名即时搜索人员 /** * @return {?} */ function () { this.baseUserParams.pageNum = 1; this.baseUserList = []; this.queryBaseUser(); }; // 取消——根据用户姓名即时搜索人员 // 取消——根据用户姓名即时搜索人员 /** * @return {?} */ YzRoleSelectContactsComponent.prototype.cancelQueUserByRealName = // 取消——根据用户姓名即时搜索人员 /** * @return {?} */ function () { this.baseUserParams.realName = null; this.baseUserParams.pageNum = 1; this.baseUserList = []; this.queryBaseUser(); }; // 切换角色 // 切换角色 /** * @param {?} $event * @return {?} */ YzRoleSelectContactsComponent.prototype.onChangeRole = // 切换角色 /** * @param {?} $event * @return {?} */ function ($event) { if ($event && $event.length && $event.length > 0) { this.currentRole = $event; } else { this.currentRole = [{ value: null, label: '全部' }]; } this.baseUserParams.pageNum = 1; this.baseUserList = []; this.queryBaseUser(); }; // 人员选择变化的回调 // 人员选择变化的回调 /** * @param {?} $event * @return {?} */ YzRoleSelectContactsComponent.prototype.userCheckedChange = // 人员选择变化的回调 /** * @param {?} $event * @return {?} */ function ($event) { if ($event.checked) { // 选中 this.allUserCheck = this.baseUserList.every((/** * @param {?} item * @return {?} */ function (item) { return item.checked === true; })); } else { // 取消 // 取消 /** @type {?} */ var itemIndex_1 = 0; this.selectedContacts.forEach((/** * @param {?} value * @param {?} index * @return {?} */ function (value, index) { if (value.userId === $event.value) { itemIndex_1 = index; } })); this.deleteContact($event.value, itemIndex_1); } this.addBaseUser(); }; // 将人员列表中选中项添加至已选择的人员列表中 // 将人员列表中选中项添加至已选择的人员列表中 /** * @return {?} */ YzRoleSelectContactsComponent.prototype.addBaseUser = // 将人员列表中选中项添加至已选择的人员列表中 /** * @return {?} */ function () { var _this = this; this.baseUserList.forEach((/** * @param {?} item * @return {?} */ function (item) { /** @type {?} */ var hasThisMen = _this.selectedContacts.some((/** * @param {?} value * @return {?} */ function (value) { return value.userId === item.userId; })); if (item.checked && !hasThisMen) { _this.selectedContacts.push(item); } })); this.isMaxCount(); }; // 人数选择达到最大值 // 人数选择达到最大值 /** * @return {?} */ YzRoleSelectContactsComponent.prototype.isMaxCount = // 人数选择达到最大值 /** * @return {?} */ function () { var _this = this; if (this.data.count > 0 && this.selectedContacts.length >= this.data.count) { this.selectedContacts.length = this.data.count; this.baseUserList.forEach((/** * @param {?} item * @return {?} */ function (item) { /** @type {?} */ var hasThisUser = _this.selectedContacts.some((/** * @param {?} value * @return {?} */ function (value) { return item.userId === value.userId; })); if (!hasThisUser) { item.checked = false; item.disabled = true; } })); } else { this.baseUserList.forEach((/** * @param {?} item * @return {?} */ function (item) { item.disabled = false; })); } if (this.baseUserList.length == 0) { this.allUserCheck = false; } else { this.allUserCheck = this.baseUserList.every((/** * @param {?} item * @return {?} */ function (item) { return item.checked === true; })); } }; // 删除联系人 // 删除联系人 /** * @param {?} id * @param {?} index * @return {?} */ YzRoleSelectContactsComponent.prototype.deleteContact = // 删除联系人 /** * @param {?} id * @param {?} index * @return {?} */ function (id, index) { this.selectedContacts.splice(index, 1); this.baseUserList.forEach((/** * @param {?} item * @return {?} */ function (item) { if (item.userId === id) { item.checked = false; } })); if (this.baseUserList.length == 0) { this.allUserCheck = false; } else { this.allUserCheck = this.baseUserList.every((/** * @param {?} item * @return {?} */ function (item) { return item.checked === true; })); } }; // 全选 // 全选 /** * @return {?} */ YzRoleSelectContactsComponent.prototype.allSelect = // 全选 /** * @return {?} */ function () { this.allUserCheck = true; this.baseUserList.forEach((/** * @param {?} item * @return {?} */ function (item) { item.checked = true; })); this.addBaseUser(); }; // 取消全选 // 取消全选 /** * @return {?} */ YzRoleSelectContactsComponent.prototype.cancelAllSelect = // 取消全选 /** * @return {?} */ function () { var _this = this; this.allUserCheck = false; this.baseUserList.forEach((/** * @param {?} item * @return {?} */ function (item) { /** @type {?} */ var itemIndex = 0; _this.selectedContacts.forEach((/** * @param {?} value * @param {?} index * @return {?} */ function (value, index) { if (value.userId === item.userId) { itemIndex = index; } })); _this.deleteContact(item.userId, itemIndex); })); }; // 点“完成”按钮,完成人员选择 // 点“完成”按钮,完成人员选择 /** * @return {?} */ YzRoleSelectContactsComponent.prototype.confirmSelect = // 点“完成”按钮,完成人员选择 /** * @return {?} */ function () { this.dialogRef.close(this.selectedContacts); }; /** * @return {?} */ YzRoleSelectContactsComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.subscribed.forEach((/** * @param {?} sub * @return {?} */ function (sub) { sub.unsubscribe(); })); this.modalRefCpt.forEach((/** * @param {?} ref * @return {?} */ function (ref) { ref.destroy(); })); }; YzRoleSelectContactsComponent.decorators = [ { type: Component, args: [{ selector: 'yz-role-select-contacts', template: "<yz-loading-mask *ngIf=\"pageLoading\"></yz-loading-mask>\r\n<div class=\"yz-select-contacts\">\r\n <div class=\"yz-select-contacts-search\">\r\n <SearchBar [placeholder]=\"'\u8BF7\u8F93\u5165\u59D3\u540D\u2026\u2026'\"\r\n [(ngModel)]=\"baseUserParams.realName\"\r\n (onSubmit)=\"queryUserByRealName()\"\r\n (onCancel)=\"cancelQueUserByRealName()\"\r\n (onClear)=\"cancelQueUserByRealName()\"></SearchBar>\r\n </div>\r\n <div class=\"yz-select-contacts-grade\">\r\n <List [className]=\"'yz-select-contact-list'\">\r\n <ListItem\r\n Picker\r\n [extra]=\"currentRole.length>0?currentRole[currentRole.length-1].label:'\u8BF7\u9009\u62E9\u89D2\u8272\u2026\u2026'\"\r\n [arrow]=\"'horizontal'\"\r\n [data]=\"groupRoleList\"\r\n [(ngModel)]=\"currentRole\"\r\n (ngModelChange)=\"onChangeRole($event)\">\r\n \u89D2\u8272\uFF1A\r\n </ListItem>\r\n </List>\r\n </div>\r\n\r\n\r\n\r\n <PullToRefresh [ngStyle]=\"dtPullToRefreshStyle\"\r\n [direction]=\"'up'\"\r\n (onRefresh)=\"pullToRefresh()\"\r\n >\r\n\r\n <!--\u4EBA\u5458-->\r\n <List [className]=\"'contact-list'\" *ngIf=\"baseUserList.length>0\">\r\n <CheckboxItem\r\n *ngFor=\"let item of baseUserList\"\r\n [name]=\"item.realName\"\r\n [value]=\"item.userId\"\r\n [(ngModel)]=\"item.checked\"\r\n [disabled]=\"item.disabled\"\r\n (onChange)=\"userCheckedChange($event)\"\r\n >\r\n {{ item?.realName }}<small *ngIf=\"item?.userCode\">({{item.userCode}})</small> <span> {{ item?.dept?.deptName }}</span>\r\n </CheckboxItem>\r\n </List>\r\n </PullToRefresh>\r\n\r\n\r\n <div class=\"yz-select-contacts-btn\">\r\n <div class=\"count-box\">\u5DF2\u9009\u62E9\uFF1A{{selectedContacts.length}} \u4EBA</div>\r\n <div Button [type]=\"'primary'\" [size]=\"'small'\" [inline]=\"true\" (onClick)=\"confirmSelect()\">\u5B8C\u6210</div>\r\n <div Button [type]=\"'ghost'\" [size]=\"'small'\" [inline]=\"true\" *ngIf=\"!allUserCheck\" (onClick)=\"allSelect()\">\u5168\u9009</div>\r\n <div Button [type]=\"'ghost'\" [size]=\"'small'\" [inline]=\"true\" *ngIf=\"allUserCheck\" (onClick)=\"cancelAllSelect()\">\r\n \u53D6\u6D88\u5168\u9009\r\n </div>\r\n </div>\r\n\r\n</div>\r\n", styles: ["::ng-deep .yz-select-contact-list .am-list-item .am-list-line .am-list-content{font-size:15px}::ng-deep .yz-select-contact-list .am-list-item img{width:34px;height:34px}::ng-deep .contact-list .am-list-content span{font-size:14px;float:right;color:#888}::ng-deep .yz-select-contacts-search{width:100%;background:#fff}::ng-deep .yz-select-contacts-search .am-search{background:#fff}::ng-deep .yz-select-contacts-search .am-search-input{background-color:#efeff4}::ng-deep .yz-select-contacts-btn{background:#fff;border-top:1px solid #d9d9d9;position:fixed;bottom:0;left:0;width:100%;padding:10px 0;z-index:5}::ng-deep .yz-select-contacts-btn .am-button-small{display:block;float:right;margin-right:10px}::ng-deep .yz-select-contacts-btn .count-box{display:block;float:left;line-height:30px;margin-left:10px;max-width:calc(100% - 150px);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .yz-role-select-contacts-panel{position:fixed!important;top:0;left:0;z-index:10;width:100%;height:100%;background:#fff;max-width:unset!important}::ng-deep .yz-role-select-contacts-panel .mat-dialog-container{padding:0;border-radius:0;transform:none!important}"] }] } ]; /** @nocollapse */ YzRoleSelectContactsComponent.ctorParameters = function () { return [ { type: MatDialogRef }, { type: ModalService }, { type: YzSelectContactsService }, { type: YzRoleSelectContactsService }, { type: ComponentOption, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] } ]; }; return YzRoleSelectContactsComponent; }()); export { YzRoleSelectContactsComponent }; if (false) { /** @type {?} */ YzRoleSelectContactsComponent.prototype.modalRefCpt; /** @type {?} */ YzRoleSelectContactsComponent.prototype.subscribed; /** @type {?} */ YzRoleSelectContactsComponent.prototype.dtPullToRefreshStyle; /** @type {?} */ YzRoleSelectContactsComponent.prototype.roleNodes; /** @type {?} */ YzRoleSelectContactsComponent.prototype.groupRoleList; /** @type {?} */ YzRoleSelectContactsComponent.prototype.currentRole; /** @type {?} */ YzRoleSelectContactsComponent.prototype.pageLoading; /** @type {?} */ YzRoleSelectContactsComponent.prototype.baseUserParams; /** @type {?} */ YzRoleSelectContactsComponent.prototype.baseUserList; /** @type {?} */ YzRoleSelectContactsComponent.prototype.allUserCheck; /** @type {?} */ YzRoleSelectContactsComponent.prototype.selectedContacts; /** @type {?} */ YzRoleSelectContactsComponent.prototype.dialogRef; /** * @type {?} * @private */ YzRoleSelectContactsComponent.prototype._modal; /** * @type {?} * @private */ YzRoleSelectContactsComponent.prototype.yzContactsService; /** * @type {?} * @private */ YzRoleSelectContactsComponent.prototype.yzRoleContactsService; /** @type {?} */ YzRoleSelectContactsComponent.prototype.data; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXotcm9sZS1zZWxlY3QtY29udGFjdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmcteXVuemFpLW1vYmlsZS8iLCJzb3VyY2VzIjpbInNlbGVjdC1jb250YWN0cy95ei1yb2xlLXNlbGVjdC1jb250YWN0cy95ei1yb2xlLXNlbGVjdC1jb250YWN0cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBVyxZQUFZLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUU1RCxPQUFPLEVBQUMsZUFBZSxFQUFFLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQ3pGLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzlFLE9BQU8sRUFBcUIsZUFBZSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHMUU7SUF5Q0UsdUNBQ1MsU0FBc0QsRUFDckQsTUFBb0IsRUFDcEIsaUJBQTBDLEVBQzFDLHFCQUFrRCxFQUMxQixJQUFxQjtRQUo5QyxjQUFTLEdBQVQsU0FBUyxDQUE2QztRQUNyRCxXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3BCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBeUI7UUFDMUMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUE2QjtRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQXZDdkQsZ0JBQVcsR0FBb0IsRUFBRSxDQUFDO1FBQ2xDLGVBQVUsR0FBd0IsRUFBRSxDQUFDO1FBQ3JDLHlCQUFvQixHQUFHLEVBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFDLENBQUM7O1FBRzFFLGNBQVMsR0FBOEIsRUFBRSxDQUFDOztR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QztJQUM5QyxDQUFDOzs7O0lBRUQsbURBQVc7OztJQUFYO1FBQ0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPOzs7O1FBQUMsVUFBQyxHQUFpQjtZQUN4QyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsQ0FBQyxFQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU87Ozs7UUFBQyxVQUFDLEdBQWE7WUFDckMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7Z0JBMVVGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyw0MEVBQXVEOztpQkFFeEQ7Ozs7Z0JBVndCLFlBQVk7Z0JBRm5CLFlBQVk7Z0JBR3RCLHVCQUF1QjtnQkFDdkIsMkJBQTJCO2dCQUNQLGVBQWUsdUJBaUR0QyxNQUFNLFNBQUMsZUFBZTs7SUE2UjNCLG9DQUFDO0NBQUEsQUEzVUQsSUEyVUM7U0F0VVksNkJBQTZCOzs7SUFFeEMsb0RBQWtDOztJQUNsQyxtREFBcUM7O0lBQ3JDLDZEQUEwRTs7SUFHMUUsa0RBQTBDOztJQUcxQyxzREFBZ0g7O0lBR2hILG9EQUEwRDs7SUFHMUQsb0RBQTZCOztJQUc3Qix1REFLRTs7SUFHRixxREFBNEM7O0lBRzVDLHFEQUE4Qjs7SUFHOUIseURBQWdEOztJQUk5QyxrREFBNkQ7Ozs7O0lBQzdELCtDQUE0Qjs7Ozs7SUFDNUIsMERBQWtEOzs7OztJQUNsRCw4REFBMEQ7O0lBQzFELDZDQUFxRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtNb2RhbFJlZiwgTW9kYWxTZXJ2aWNlfSBmcm9tIFwibmctem9ycm8tYW50ZC1tb2JpbGVcIjtcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7TUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWZ9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtZelNlbGVjdENvbnRhY3RzU2VydmljZX0gZnJvbSBcIi4uL3l6LXNlbGVjdC1jb250YWN0cy95ei1zZWxlY3QtY29udGFjdHMuc2VydmljZVwiO1xyXG5pbXBvcnQge1l6Um9sZVNlbGVjdENvbnRhY3RzU2VydmljZX0gZnJvbSBcIi4veXotcm9sZS1zZWxlY3QtY29udGFjdHMuc2VydmljZVwiO1xyXG5pbXBvcnQge0dyb3VwUm9sZUludGVyZmFjZSwgQ29tcG9uZW50T3B0aW9ufSBmcm9tIFwiLi9ncm91cFJvbGUuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7QmFzZVVzZXJJbnRlcmZhY2V9IGZyb20gXCIuLi95ei1zZWxlY3QtY29udGFjdHMvZGVwdC5pbnRlcmZhY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAneXotcm9sZS1zZWxlY3QtY29udGFjdHMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi95ei1yb2xlLXNlbGVjdC1jb250YWN0cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4veXotcm9sZS1zZWxlY3QtY29udGFjdHMuY29tcG9uZW50Lmxlc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWXpSb2xlU2VsZWN0Q29udGFjdHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIG1vZGFsUmVmQ3B0OiBBcnJheTxNb2RhbFJlZj4gPSBbXTtcclxuICBzdWJzY3JpYmVkOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XHJcbiAgZHRQdWxsVG9SZWZyZXNoU3R5bGUgPSB7aGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQgLSA0NCAtIDUxIC0gNDQgKyAncHgnfTtcclxuXHJcbiAgLy8g5oC76KeS6Imy57uE5pWw5o2uXHJcbiAgcm9sZU5vZGVzOiBBcnJheTxHcm91cFJvbGVJbnRlcmZhY2U+ID0gW107XHJcblxyXG4gIC8vIOmhtemdouWxleekuueahOinkuiJsue7hOaVsOaNrlxyXG4gIGdyb3VwUm9sZUxpc3Q6IEFycmF5PHsgdmFsdWU6IHN0cmluZywgbGFiZWw6IHN0cmluZywgY2hpbGRyZW4/OiBBcnJheTx7IHZhbHVlOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcgfT4gfT4gPSBbXTtcclxuXHJcbiAgLy8g5b2T5YmN6KeS6ImyXHJcbiAgY3VycmVudFJvbGU6IEFycmF5PHsgdmFsdWU6IHN0cmluZywgbGFiZWw6IHN0cmluZyB9PiA9IFtdO1xyXG5cclxuICAvLyDpobXpnaLliqDovb3kuK1cclxuICBwYWdlTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyDkurrlkZjliJfooajlj4LmlbBcclxuICBiYXNlVXNlclBhcmFtcyA9IHtcclxuICAgIHRvdGFsOiAwLFxyXG4gICAgcGFnZVNpemU6IDIwLFxyXG4gICAgcGFnZU51bTogMSxcclxuICAgIHJlYWxOYW1lOiBudWxsXHJcbiAgfTtcclxuXHJcbiAgLy8g5Lq65ZGY5pWw5o2uXHJcbiAgYmFzZVVzZXJMaXN0OiBBcnJheTxCYXNlVXNlckludGVyZmFjZT4gPSBbXTtcclxuXHJcbiAgLy8g5piv5ZCm5YWo6YCJ5Lq65ZGYXHJcbiAgYWxsVXNlckNoZWNrOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIOW3sumAieaLqeeahOiBlOezu+S6ulxyXG4gIHNlbGVjdGVkQ29udGFjdHM6IEFycmF5PEJhc2VVc2VySW50ZXJmYWNlPiA9IFtdO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8WXpSb2xlU2VsZWN0Q29udGFjdHNDb21wb25lbnQ+LFxyXG4gICAgcHJpdmF0ZSBfbW9kYWw6IE1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgeXpDb250YWN0c1NlcnZpY2U6IFl6U2VsZWN0Q29udGFjdHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB5elJvbGVDb250YWN0c1NlcnZpY2U6IFl6Um9sZVNlbGVjdENvbnRhY3RzU2VydmljZSxcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogQ29tcG9uZW50T3B0aW9uXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaW5pdEdyb3VwUm9sZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8g5p+l6K+i6KeS6Imy57uEXHJcbiAgaW5pdEdyb3VwUm9sZSgpIHtcclxuICAgIHRoaXMuZ3JvdXBSb2xlTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5yb2xlTm9kZXMgPSBbXTtcclxuICAgIHRoaXMucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgJHRlbXAgPSB0aGlzLnl6Um9sZUNvbnRhY3RzU2VydmljZS5nZXRHcm91cFJvbGUodGhpcy5kYXRhLnJvbGVHcm91cENvZGUpLnN1YnNjcmliZSgocm9sZTogQXJyYXk8R3JvdXBSb2xlSW50ZXJmYWNlPikgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucm9sZU5vZGVzID0gcm9sZTtcclxuICAgICAgdGhpcy5yb2xlTm9kZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgICAgIHZhbHVlOiBpdGVtLmtleSxcclxuICAgICAgICAgIGxhYmVsOiBpdGVtLnRpdGxlLFxyXG4gICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgocm9sZSkgPT4ge1xyXG4gICAgICAgICAgICBvYmouY2hpbGRyZW4ucHVzaCh7XHJcbiAgICAgICAgICAgICAgdmFsdWU6IHJvbGUua2V5LFxyXG4gICAgICAgICAgICAgIGxhYmVsOiByb2xlLnRpdGxlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ3JvdXBSb2xlTGlzdC5wdXNoKG9iaik7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5ncm91cFJvbGVMaXN0LnVuc2hpZnQoe1xyXG4gICAgICAgIHZhbHVlOiBudWxsLFxyXG4gICAgICAgIGxhYmVsOiAn5YWo6YOoJ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnJvbGVOb2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucm9sZU5vZGVzWzBdLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudFJvbGUgPSBbdGhpcy5ncm91cFJvbGVMaXN0WzFdLmNoaWxkcmVuWzBdXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucXVlcnlEZWZhdWx0Q29udGFjdCgpO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpYmVkLnB1c2goJHRlbXApO1xyXG4gICAgfSwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvLyDmn6Xor6Lpu5jorqTlt7LooqvpgInmi6nkurrlkZjnmoTkv6Hmga9cclxuICBxdWVyeURlZmF1bHRDb250YWN0KCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5kZWZhdWx0Q29udGFjdHMgJiYgdGhpcy5kYXRhLmRlZmF1bHRDb250YWN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IHVzZXJJZHNBcnJheTogQXJyYXk8YW55PiA9IFtdO1xyXG4gICAgICB0aGlzLmRhdGEuZGVmYXVsdENvbnRhY3RzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpZiAoaXRlbS51c2VySWQpIHtcclxuICAgICAgICAgIHVzZXJJZHNBcnJheS5wdXNoKGl0ZW0udXNlcklkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgY29uc3QgJHRlbXAgPSB0aGlzLnl6Q29udGFjdHNTZXJ2aWNlLmdldFVzZXJCeVVzZXJJZHModXNlcklkc0FycmF5KS5zdWJzY3JpYmUoKGRhdGE6IEFycmF5PEJhc2VVc2VySW50ZXJmYWNlPikgPT4ge1xyXG4gICAgICAgIHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29udGFjdHMgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMucXVlcnlCYXNlVXNlcigpO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlZC5wdXNoKCR0ZW1wKTtcclxuICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnF1ZXJ5QmFzZVVzZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOafpeivouS6uuWRmOWIl+ihqFxyXG4gIHF1ZXJ5QmFzZVVzZXIoKSB7XHJcbiAgICB0aGlzLnBhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0ICR0ZW1wID0gdGhpcy55elJvbGVDb250YWN0c1NlcnZpY2UuZ2V0QmFzZVVzZXIoXHJcbiAgICAgIHRoaXMuYmFzZVVzZXJQYXJhbXMucGFnZU51bSxcclxuICAgICAgdGhpcy5iYXNlVXNlclBhcmFtcy5wYWdlU2l6ZSxcclxuICAgICAgdGhpcy5iYXNlVXNlclBhcmFtcy5yZWFsTmFtZSxcclxuICAgICAgdGhpcy5jdXJyZW50Um9sZS5sZW5ndGggPiAwID8gdGhpcy5jdXJyZW50Um9sZVt0aGlzLmN1cnJlbnRSb2xlLmxlbmd0aC0xXS52YWx1ZSA6IG51bGwsXHJcbiAgICAgIHRoaXMuZGF0YS51c2VyVHlwZXNcclxuICAgICkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmJhc2VVc2VyUGFyYW1zLnRvdGFsID0gZGF0YS50b3RhbDtcclxuICAgICAgdGhpcy5iYXNlVXNlckxpc3QucHVzaCguLi5kYXRhLmxpc3QpO1xyXG4gICAgICB0aGlzLmJhc2VVc2VyTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaXRlbVsnY2hlY2tlZCddID0gZmFsc2U7XHJcbiAgICAgICAgaXRlbVsnZGlzYWJsZWQnXSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghaXRlbS5kZXB0KSB7XHJcbiAgICAgICAgICBpdGVtLmRlcHQgPSB7ZGVwdE5hbWU6ICfmmoLml6Dpg6jpl6gnfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWl0ZW0ucmVhbE5hbWUpIHtcclxuICAgICAgICAgIGl0ZW0ucmVhbE5hbWUgPSAn5pqC5peg5aeT5ZCNJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpdGVtLnVzZXJDb2RlKSB7XHJcbiAgICAgICAgICBpdGVtLnJlYWxOYW1lID0gJ+aaguaXoOWtpi/lt6Xlj7cnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXRlbS5yb2xlcykge1xyXG4gICAgICAgICAgaXRlbS5yb2xlcyA9IFtdO1xyXG4gICAgICAgICAgaXRlbS5yb2xlc0RhdGEgPSAn5pqC5peg6KeS6ImyJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgcm9sZUFycmF5ID0gW107XHJcbiAgICAgICAgICBpdGVtLnJvbGVzLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHJvbGVBcnJheS5wdXNoKHZhbHVlLnJvbGVOYW1lKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaXRlbS5yb2xlc0RhdGEgPSByb2xlQXJyYXkudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbnRhY3RzLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICBpZiAodmFsdWUudXNlcklkID09PSBpdGVtLnVzZXJJZCkge1xyXG4gICAgICAgICAgICBpdGVtWydjaGVja2VkJ10gPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5pc01heENvdW50KCk7XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmliZWQucHVzaCgkdGVtcCk7XHJcbiAgICB9LCAoKSA9PiB7XHJcbiAgICAgIHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8g5Yi35paw5Zue6LCD5Ye95pWwXHJcbiAgcHVsbFRvUmVmcmVzaCgpIHtcclxuICAgIGlmICh0aGlzLmJhc2VVc2VyTGlzdC5sZW5ndGggPCB0aGlzLmJhc2VVc2VyUGFyYW1zLnRvdGFsKSB7XHJcbiAgICAgIHRoaXMuYmFzZVVzZXJQYXJhbXMucGFnZU51bSsrO1xyXG4gICAgICB0aGlzLnF1ZXJ5QmFzZVVzZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOagueaNrueUqOaIt+Wnk+WQjeWNs+aXtuaQnOe0ouS6uuWRmFxyXG4gIHF1ZXJ5VXNlckJ5UmVhbE5hbWUoKSB7XHJcbiAgICB0aGlzLmJhc2VVc2VyUGFyYW1zLnBhZ2VOdW0gPSAxO1xyXG4gICAgdGhpcy5iYXNlVXNlckxpc3QgPSBbXTtcclxuICAgIHRoaXMucXVlcnlCYXNlVXNlcigpO1xyXG4gIH1cclxuXHJcbiAgLy8g5Y+W5raI4oCU4oCU5qC55o2u55So5oi35aeT5ZCN5Y2z5pe25pCc57Si5Lq65ZGYXHJcbiAgY2FuY2VsUXVlVXNlckJ5UmVhbE5hbWUoKSB7XHJcbiAgICB0aGlzLmJhc2VVc2VyUGFyYW1zLnJlYWxOYW1lID0gbnVsbDtcclxuICAgIHRoaXMuYmFzZVVzZXJQYXJhbXMucGFnZU51bSA9IDE7XHJcbiAgICB0aGlzLmJhc2VVc2VyTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5xdWVyeUJhc2VVc2VyKCk7XHJcbiAgfVxyXG5cclxuICAvLyDliIfmjaLop5LoibJcclxuICBvbkNoYW5nZVJvbGUoJGV2ZW50KSB7XHJcbiAgICBpZiAoJGV2ZW50ICYmICRldmVudC5sZW5ndGggJiYgJGV2ZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5jdXJyZW50Um9sZSA9ICRldmVudDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFJvbGUgPSBbe1xyXG4gICAgICAgIHZhbHVlOiBudWxsLFxyXG4gICAgICAgIGxhYmVsOiAn5YWo6YOoJ1xyXG4gICAgICB9XTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJhc2VVc2VyUGFyYW1zLnBhZ2VOdW0gPSAxO1xyXG4gICAgdGhpcy5iYXNlVXNlckxpc3QgPSBbXTtcclxuICAgIHRoaXMucXVlcnlCYXNlVXNlcigpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIOS6uuWRmOmAieaLqeWPmOWMlueahOWbnuiwg1xyXG4gIHVzZXJDaGVja2VkQ2hhbmdlKCRldmVudCkge1xyXG4gICAgaWYgKCRldmVudC5jaGVja2VkKSB7IC8vIOmAieS4rVxyXG4gICAgICB0aGlzLmFsbFVzZXJDaGVjayA9IHRoaXMuYmFzZVVzZXJMaXN0LmV2ZXJ5KChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uY2hlY2tlZCA9PT0gdHJ1ZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgfSBlbHNlIHsgLy8g5Y+W5raIXHJcbiAgICAgIGxldCBpdGVtSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29udGFjdHMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlLnVzZXJJZCA9PT0gJGV2ZW50LnZhbHVlKSB7XHJcbiAgICAgICAgICBpdGVtSW5kZXggPSBpbmRleDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmRlbGV0ZUNvbnRhY3QoJGV2ZW50LnZhbHVlLCBpdGVtSW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWRkQmFzZVVzZXIoKTtcclxuICB9XHJcblxyXG4gIC8vIOWwhuS6uuWRmOWIl+ihqOS4remAieS4remhuea3u+WKoOiHs+W3sumAieaLqeeahOS6uuWRmOWIl+ihqOS4rVxyXG4gIGFkZEJhc2VVc2VyKCkge1xyXG4gICAgdGhpcy5iYXNlVXNlckxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBjb25zdCBoYXNUaGlzTWVuID0gdGhpcy5zZWxlY3RlZENvbnRhY3RzLnNvbWUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlLnVzZXJJZCA9PT0gaXRlbS51c2VySWRcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChpdGVtLmNoZWNrZWQgJiYgIWhhc1RoaXNNZW4pIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ29udGFjdHMucHVzaChpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5pc01heENvdW50KCk7XHJcbiAgfVxyXG5cclxuICAvLyDkurrmlbDpgInmi6novr7liLDmnIDlpKflgLxcclxuICBpc01heENvdW50KCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5jb3VudCA+IDAgJiYgdGhpcy5zZWxlY3RlZENvbnRhY3RzLmxlbmd0aCA+PSB0aGlzLmRhdGEuY291bnQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbnRhY3RzLmxlbmd0aCA9IHRoaXMuZGF0YS5jb3VudDtcclxuICAgICAgdGhpcy5iYXNlVXNlckxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhhc1RoaXNVc2VyID0gdGhpcy5zZWxlY3RlZENvbnRhY3RzLnNvbWUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gaXRlbS51c2VySWQgPT09IHZhbHVlLnVzZXJJZFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIWhhc1RoaXNVc2VyKSB7XHJcbiAgICAgICAgICBpdGVtLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgIGl0ZW0uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYmFzZVVzZXJMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpdGVtLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYmFzZVVzZXJMaXN0Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHRoaXMuYWxsVXNlckNoZWNrID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFsbFVzZXJDaGVjayA9IHRoaXMuYmFzZVVzZXJMaXN0LmV2ZXJ5KChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uY2hlY2tlZCA9PT0gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDliKDpmaTogZTns7vkurpcclxuICBkZWxldGVDb250YWN0KGlkLCBpbmRleCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZENvbnRhY3RzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLmJhc2VVc2VyTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLnVzZXJJZCA9PT0gaWQpIHtcclxuICAgICAgICBpdGVtLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5iYXNlVXNlckxpc3QubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5hbGxVc2VyQ2hlY2sgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxsVXNlckNoZWNrID0gdGhpcy5iYXNlVXNlckxpc3QuZXZlcnkoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbS5jaGVja2VkID09PSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyDlhajpgIlcclxuICBhbGxTZWxlY3QoKSB7XHJcbiAgICB0aGlzLmFsbFVzZXJDaGVjayA9IHRydWU7XHJcbiAgICB0aGlzLmJhc2VVc2VyTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2hlY2tlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYWRkQmFzZVVzZXIoKTtcclxuICB9XHJcblxyXG4gIC8vIOWPlua2iOWFqOmAiVxyXG4gIGNhbmNlbEFsbFNlbGVjdCgpIHtcclxuICAgIHRoaXMuYWxsVXNlckNoZWNrID0gZmFsc2U7XHJcbiAgICB0aGlzLmJhc2VVc2VyTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIGxldCBpdGVtSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQ29udGFjdHMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlLnVzZXJJZCA9PT0gaXRlbS51c2VySWQpIHtcclxuICAgICAgICAgIGl0ZW1JbmRleCA9IGluZGV4O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZGVsZXRlQ29udGFjdChpdGVtLnVzZXJJZCwgaXRlbUluZGV4KTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vIOeCueKAnOWujOaIkOKAneaMiemSru+8jOWujOaIkOS6uuWRmOmAieaLqVxyXG4gIGNvbmZpcm1TZWxlY3QoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLnNlbGVjdGVkQ29udGFjdHMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmliZWQuZm9yRWFjaCgoc3ViOiBTdWJzY3JpcHRpb24pID0+IHtcclxuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm1vZGFsUmVmQ3B0LmZvckVhY2goKHJlZjogTW9kYWxSZWYpID0+IHtcclxuICAgICAgcmVmLmRlc3Ryb3koKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=