diff --git a/uniapp-wuduhuajiao/pages/meeting/meeting.css b/uniapp-wuduhuajiao/pages/meeting/meeting.css index 4ead085..f27ab10 100644 --- a/uniapp-wuduhuajiao/pages/meeting/meeting.css +++ b/uniapp-wuduhuajiao/pages/meeting/meeting.css @@ -1,5 +1,5 @@ .hide{ - position: fixed; + position: absolute; top: -1000px; left: -1000px; } diff --git a/uniapp-wuduhuajiao/pages/meeting/meeting.nvue b/uniapp-wuduhuajiao/pages/meeting/meeting.nvue index 1dd0d34..a2ab063 100644 --- a/uniapp-wuduhuajiao/pages/meeting/meeting.nvue +++ b/uniapp-wuduhuajiao/pages/meeting/meeting.nvue @@ -66,9 +66,7 @@ style="height: 360rpx;width: 300rpx;border: 1px solid #fff;"> - @@ -259,6 +257,7 @@ //文字聊天 uni.$on('socketMessage', (data) => { + console.log('socketMessage', data); if (data.messageType == 'send_to_room') { this.messageList.push({ author: data.realName, @@ -327,15 +326,17 @@ }) }, joinRoom() { + let param = { + method: 'join', + IsRoom: true, + RoomNo: this.roomId, + RoomName: this.room.RoomName, + messageContent: this.joinType, + token: service.getTokenChaoge(), + }; + console.log('joinRoom',param); socketTask.send({ - data: JSON.stringify({ - method: 'join', - IsRoom: true, - RoomNo: this.roomId, - RoomName: this.room.RoomName, - messageContent: this.joinType, - token: service.getTokenChaoge(), - }), + data: JSON.stringify(param), success(res) {}, fail(e) {}, complete() {} @@ -589,6 +590,9 @@ }); this.trtcCloud.on('onRemoteUserEnterRoom', (userId) => { console.log('onRemoteUserEnterRoom', userId); + this.messageList.unshift({ + content: `用户${userId}加入视频聊天` + }); this.startRemoteView(userId); }); this.trtcCloud.on('onRemoteUserLeaveRoom', (userId) => { diff --git a/uniapp-wuduhuajiao/uniapp-wuduhuajiao.rar b/uniapp-wuduhuajiao/uniapp-wuduhuajiao.rar index b750654..4a64b3d 100644 --- a/uniapp-wuduhuajiao/uniapp-wuduhuajiao.rar +++ b/uniapp-wuduhuajiao/uniapp-wuduhuajiao.rar diff --git a/uniapp-wuduhuajiao/unpackage/dist/dev/app-plus/pages/meeting/meeting.js b/uniapp-wuduhuajiao/unpackage/dist/dev/app-plus/pages/meeting/meeting.js index 3590959..d8e4565 100644 --- a/uniapp-wuduhuajiao/unpackage/dist/dev/app-plus/pages/meeting/meeting.js +++ b/uniapp-wuduhuajiao/unpackage/dist/dev/app-plus/pages/meeting/meeting.js @@ -2247,8 +2247,6 @@ var render = function() { ], 1 ), - !_vm.meetingCustomerUser || - !_vm.meetingCustomerUser.userId || !_vm.meetingCustomerUser.meeting ? _c("u-image", { staticStyle: { @@ -2448,7 +2446,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _D_P /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("/* WEBPACK VAR INJECTION */(function(__webpack_provided_uni_dot_requireNativePlugin, __f__) {Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = void 0;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar _vuex = __webpack_require__(/*! vuex */ 12);\n\n\nvar _permission = _interopRequireDefault(__webpack_require__(/*! @/TrtcCloud/permission.js */ 13));\nvar _index = _interopRequireDefault(__webpack_require__(/*! @/TrtcCloud/lib/index */ 14));\nvar _TrtcDefines = __webpack_require__(/*! @/TrtcCloud/lib/TrtcDefines */ 16);\n\n\n\n\n\nvar _GenerateTestUserSig = __webpack_require__(/*! @/debug/GenerateTestUserSig */ 17);\n\n\nvar _TrtcLocalView = _interopRequireDefault(__webpack_require__(/*! @/TrtcCloud/view/TrtcLocalView */ 19));\nvar _TrtcRemoteView = _interopRequireDefault(__webpack_require__(/*! @/TrtcCloud/view/TrtcRemoteView */ 25));\n\n\nvar _index2 = _interopRequireDefault(__webpack_require__(/*! @/apis/index.js */ 30));\nvar _config = _interopRequireDefault(__webpack_require__(/*! @/common/config/config.js */ 38));\nvar _service = _interopRequireDefault(__webpack_require__(/*! @/service/service.js */ 33));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function ownKeys(object, enumerableOnly) {var keys = Object.keys(object);if (Object.getOwnPropertySymbols) {var symbols = Object.getOwnPropertySymbols(object);if (enumerableOnly) symbols = symbols.filter(function (sym) {return Object.getOwnPropertyDescriptor(object, sym).enumerable;});keys.push.apply(keys, symbols);}return keys;}function _objectSpread(target) {for (var i = 1; i < arguments.length; i++) {var source = arguments[i] != null ? arguments[i] : {};if (i % 2) {ownKeys(Object(source), true).forEach(function (key) {_defineProperty(target, key, source[key]);});} else if (Object.getOwnPropertyDescriptors) {Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));} else {ownKeys(Object(source)).forEach(function (key) {Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));});}}return target;}function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });} else {obj[key] = value;}return obj;}var TrtcEvent = __webpack_provided_uni_dot_requireNativePlugin('globalEvent');\nvar socketTask = getApp().globalData.socketTask;var _default =\n{\n components: {\n TrtcLocalView: _TrtcLocalView.default,\n TrtcRemoteView: _TrtcRemoteView.default },\n\n data: function data() {\n return {\n hasInvite: false,\n //我\n meetingUserMy: {\n userId: 0 },\n\n\n //需方\n meetingCustomerUser: {\n userId: 0 },\n\n\n //供方\n meetingBusinessUser: {\n userId: 0 },\n\n\n //客服\n meetingServiceUser: {\n userId: 0 },\n\n\n num: 10,\n trtcCloud: null,\n sdkAppId: 0,\n userSig: '',\n roomId: 0,\n userId: '',\n starting: false,\n userType: '等待进入',\n appScene: _TrtcDefines.TRTCAppScene.TRTCAppSceneVideoCall, // TRTCAppSceneVideoCall\n isFrontCamera: true,\n streamType: _TrtcDefines.TRTCVideoStreamType.TRTCVideoStreamTypeBig,\n remoteUserId: '',\n audioRoute: _TrtcDefines.TRTCCloudDef.TRTC_AUDIO_ROUTE_SPEAKER,\n messageList: [],\n messageContent: '',\n myUserInfo: '',\n room: {},\n shopId: 0,\n sellerUserId: 0,\n\n param: {},\n joinType: 'customer' };\n\n },\n computed: _objectSpread({},\n (0, _vuex.mapState)(['user', 'statistics', 'common'])),\n\n onLoad: function onLoad(e) {var _this = this;\n __f__(\"log\", 'onload e', e, \" at pages/meeting/meeting.nvue:192\");\n __f__(\"log\", 'user', this.user, \" at pages/meeting/meeting.nvue:193\");\n this.param = e;\n\n //加入类型,是以什么身份加入的\n var joinType = e.joinType || 'customer';\n __f__(\"log\", 'onLoad joinType', joinType, \" at pages/meeting/meeting.nvue:198\");\n this.joinType = joinType;\n\n this.roomId = e.roomId;\n this.sellerUserId = e.userid;\n this.userId = 'user_' + this.user.id;\n this.meetingUserMy = {\n userId: this.userId,\n id: this.user.id };\n\n this.shopId = e.shop_id;\n\n if (joinType == 'customer') {\n //需方\n this.createRoom({\n \"name\": \"测试房间\",\n \"bodyText\": \"\",\n \"roomNo\": \"\",\n \"description\": \"\",\n \"clientId\": \"\",\n // \"productId\": e.goods_id,\n \"shopId\": e.shop_id });\n\n this.meetingCustomerUser = _objectSpread({},\n this.meetingUserMy);\n\n } else {\n this.room = {\n id: e.roomId,\n RoomNo: e.roomId };\n\n\n this.meetingCustomerUser = {\n userId: 'user_' + e.customerid.toString(),\n id: e.customerid };\n\n }\n\n if (joinType == 'seller') {\n //供方\n this.meetingBusinessUser = {\n userId: this.meetingUserMy.userId,\n id: this.meetingUserMy.id };\n\n\n }\n if (joinType == 'service') {\n //平台客服\n this.meetingServiceUser = {\n userId: this.meetingUserMy.userId,\n id: this.meetingUserMy.id };\n\n }\n\n __f__(\"log\", 'onLoad meetingBusinessUser', this.meetingBusinessUser, \" at pages/meeting/meeting.nvue:252\");\n __f__(\"log\", 'onLoad meetingServiceUser', this.meetingServiceUser, \" at pages/meeting/meeting.nvue:253\");\n\n // this.getUserInfo(this.user.id,joinType);\n this.joinRoom();\n\n this.$forceUpdate();\n\n //文字聊天\n uni.$on('socketMessage', function (data) {\n if (data.messageType == 'send_to_room') {\n _this.messageList.push({\n author: data.realName,\n content: data.toMessage });\n\n }\n if (data.messageType == 'join') {\n var userid = data.userIntId;\n if (userid != _this.user.id) {\n //有用户加入房间\n var _joinType = data.messageContent;\n if (_joinType == 'seller') {\n _this.meetingBusinessUser.userId = 'user_' + userid;\n _this.meetingBusinessUser.id = userid;\n }\n if (_joinType == 'service') {\n _this.meetingServiceUser.userId = 'user_' + userid;\n _this.meetingServiceUser.id = userid;\n }\n }\n }\n });\n },\n onShow: function onShow() {},\n onHide: function onHide() {},\n mounted: function mounted() {\n if (uni.getSystemInfoSync().platform === 'android') {\n _permission.default.requestAndroidPermission('android.permission.RECORD_AUDIO');\n _permission.default.requestAndroidPermission('android.permission.CAMERA');\n }\n this.initUserSign();\n },\n onUnload: function onUnload() {\n this.destroyInstance();\n __f__(\"log\", '- onUnload', \" at pages/meeting/meeting.nvue:296\");\n },\n onBackPress: function onBackPress() {\n this.destroyInstance();\n },\n methods: {\n getUserInfo: function getUserInfo(userid, type) {var _this2 = this;\n __f__(\"log\", 'getUserInfo', userid, type, \" at pages/meeting/meeting.nvue:303\");\n _index2.default.message.getUserTypeInfo(userid).then(function (res) {\n __f__(\"log\", 'getUserTypeInfo', res, \" at pages/meeting/meeting.nvue:305\");\n if (type == 'customer') {\n __f__(\"log\", 'getUserTypeInfo type=customer', \" at pages/meeting/meeting.nvue:307\");\n _this2.meetingCustomerUser.userInfo = res.data[0];\n }\n if (type == 'seller') {\n __f__(\"log\", 'getUserTypeInfo type=seller', \" at pages/meeting/meeting.nvue:311\");\n _this2.meetingBusinessUser.userInfo = res.data[0];\n that.messageList.push({\n author: '系统',\n content: '供方加入房间' });\n\n }\n if (type == 'service') {\n __f__(\"log\", 'getUserTypeInfo type=service', \" at pages/meeting/meeting.nvue:319\");\n // this.meetingServiceUser.userInfo = res.data[0];\n that.messageList.push({\n author: '系统',\n content: '客服加入房间' });\n\n }\n __f__(\"log\", 'getUserTypeInfo meetingServiceUser', _this2.meetingServiceUser, \" at pages/meeting/meeting.nvue:326\");\n });\n },\n joinRoom: function joinRoom() {\n socketTask.send({\n data: JSON.stringify({\n method: 'join',\n IsRoom: true,\n RoomNo: this.roomId,\n RoomName: this.room.RoomName,\n messageContent: this.joinType,\n token: _service.default.getTokenChaoge() }),\n\n success: function success(res) {},\n fail: function fail(e) {},\n complete: function complete() {} });\n\n },\n initUserSign: function initUserSign() {var _this3 = this;\n if (this.userId) {\n __f__(\"log\", 'initUserSign', this.userId, \" at pages/meeting/meeting.nvue:346\");\n // 生成 userSig\n var _genTestUserSig =\n\n\n (0, _GenerateTestUserSig.genTestUserSig)(this.userId),sdkAppId = _genTestUserSig.sdkAppId,userSig = _genTestUserSig.userSig;\n this.sdkAppId = sdkAppId;\n this.userSig = userSig;\n __f__(\"log\", 'sdkAppId,userSig', sdkAppId, userSig, \" at pages/meeting/meeting.nvue:354\");\n if (!sdkAppId || !userSig) {\n uni.showToast({\n title: '请填写 sdkAppId、userSig',\n icon: 'none' });\n\n }\n } else {\n setTimeout(function () {\n _this3.initUserSign();\n }, 200);\n }\n },\n handleToSubmitOrder: function handleToSubmitOrder() {\n uni.navigateBack();\n },\n //邀请商家客服\n handleInviteBusinessUser: function handleInviteBusinessUser() {\n _index2.default.message.getInviteBusinessUserJoin(this.shopId, this.room.RoomNo, this.sellerUserId).then(function (res) {});\n },\n //邀请平台客服\n handleInviteServiceUser: function handleInviteServiceUser() {var _this4 = this;\n uni.showLoading();\n _index2.default.message.getInviteServiceUserJoin(this.room.RoomNo, 'joinMultiplayerVideo').then(function (res) {\n uni.showToast({\n title: '邀请成功' });\n\n _this4.hasInvite = true;\n }).finally(function () {\n uni.hideLoading();\n });\n },\n createRoom: function createRoom(data) {var _this5 = this;\n uni.showLoading({\n title: '正在创建房间' });\n\n _index2.default.message.postAddRoom(data).then(function (res) {\n _this5.room = res.data;\n _this5.roomId = res.data.RoomNo;\n _this5.handleInviteBusinessUser();\n _this5.joinRoom();\n }).finally(function () {\n uni.hideLoading();\n });\n },\n\n sendMessage: function sendMessage() {\n var that = this;\n that.messageList.push({\n author: '我',\n content: that.messageContent });\n\n that.messageContent = '';\n socketTask.send({\n data: JSON.stringify({\n formUserId: this.userId,\n contentType: \"\",\n content: this.messageContent,\n sendTime: new Date(),\n method: 'send_to_room',\n RoomNo: this.room.RoomNo,\n RoomName: this.room.Name,\n IsRoom: true }),\n\n success: function success(res) {},\n fail: function fail(e) {},\n complete: function complete() {} });\n\n },\n handleStartMeeting: function handleStartMeeting() {var _this6 = this;\n this.starting = true;\n this.$nextTick(function () {\n _this6.createTrtcCloud();\n _this6.enterRoom();\n _this6.startLocalPreview();\n });\n },\n handleEndtMeeting: function handleEndtMeeting() {\n this.meeting = false;\n this.stopLocalPreview();\n this.exitRoom();\n this.destroyInstance();\n },\n\n bindInputChange: function bindInputChange(event, type) {\n var value = event.detail.value;\n switch (type) {\n case 'roomId':{\n this.roomId = value;\n break;\n }\n case 'userId':{\n this.userId = value;\n break;\n }}\n\n },\n destroyInstance: function destroyInstance() {\n if (this.trtcCloud) {\n _index.default.destroyInstance();\n this.trtcCloud = null;\n }\n },\n createTrtcCloud: function createTrtcCloud() {\n __f__(\"log\", 'createTrtcCloud', this.sdkAppId, \" at pages/meeting/meeting.nvue:458\");\n this.trtcCloud = _index.default.createInstance();\n __f__(\"log\", 'this.trtcCloud', this.trtcCloud, \" at pages/meeting/meeting.nvue:460\");\n this.handleEvents();\n this.sdkAppId && uni.$createTrtcCloudUpload(this.sdkAppId);\n },\n enterRoom: function enterRoom() {\n try {var\n\n sdkAppId =\n\n\n this.sdkAppId,appScene = this.appScene,userSig = this.userSig;\n var param = {\n roomId: 0,\n strRoomId: this.room.RoomNo,\n userId: this.userId,\n sdkAppId: sdkAppId,\n userSig: userSig };\n\n __f__(\"log\", 'enterRoom', param, \" at pages/meeting/meeting.nvue:478\");\n this.trtcCloud.enterRoom(param, appScene);\n this.sdkAppId && uni.$enterRoomSuccessUpload(this.sdkAppId);\n\n var userId = this.userId;\n if (this.meetingBusinessUser.userId == userId) {\n this.meetingBusinessUser.meeting = true;\n }\n if (this.meetingCustomerUser.userId == userId) {\n this.meetingCustomerUser.meeting = true;\n }\n if (this.meetingServiceUser.userId == userId) {\n this.meetingServiceUser.meeting = true;\n }\n\n } catch (error) {\n this.messageList.unshift({\n content: \"enterRoom error = \".concat(JSON.stringify(error)) });\n\n this.sdkAppId && uni.$enterRoomFailedUpload(this.sdkAppId, JSON.stringify(error));\n }\n },\n exitRoom: function exitRoom() {\n try {\n this.starting = false;\n this.stopLocalPreview();\n this.stopRemoteView();\n this.trtcCloud.exitRoom();\n } catch (e) {\n // TODO handle the exception\n }\n },\n startLocalPreview: function startLocalPreview() {var _this7 = this;\n this.$nextTick(function () {\n __f__(\"log\", 'startLocalPreview', _this7.userId, \" at pages/meeting/meeting.nvue:512\");\n _this7.meeting = true;\n _this7.trtcCloud.startLocalPreview(_this7.isFrontCamera, _this7.userId);\n _this7.trtcCloud.startLocalAudio(_TrtcDefines.TRTCAudioQuality.TRTCAudioQualityDefault);\n _this7.sdkAppId && uni.$startLocalPreviewUpload(_this7.sdkAppId);\n });\n },\n stopLocalPreview: function stopLocalPreview() {\n this.trtcCloud.stopLocalPreview();\n },\n startRemoteView: function startRemoteView(userId) {var _this8 = this;\n this.$nextTick(function () {\n _this8.trtcCloud.startRemoteView(userId, _this8.streamType, userId);\n _this8.sdkAppId && uni.$startRemoteViewSuccessUpload(_this8.sdkAppId);\n });\n if (this.meetingBusinessUser.userId == userId) {\n this.meetingBusinessUser.meeting = true;\n }\n if (this.meetingCustomerUser.userId == userId) {\n this.meetingCustomerUser.meeting = true;\n }\n if (this.meetingServiceUser.userId == userId) {\n this.meetingServiceUser.meeting = true;\n }\n },\n stopRemoteView: function stopRemoteView(userId) {\n this.trtcCloud.stopRemoteView(userId, this.streamType);\n if (this.meetingBusinessUser.userId == userId) {\n this.meetingBusinessUser.meeting = false;\n }\n if (this.meetingCustomerUser.userId == userId) {\n this.meetingCustomerUser.meeting = false;\n }\n if (this.meetingServiceUser.userId == userId) {\n this.meetingServiceUser.meeting = false;\n }\n\n },\n // 听筒、免提 切换\n switchAudioRoute: function switchAudioRoute() {\n this.audioRoute = this.audioRoute === _TrtcDefines.TRTCCloudDef.TRTC_AUDIO_ROUTE_SPEAKER ? _TrtcDefines.TRTCCloudDef.\n TRTC_AUDIO_ROUTE_EARPIECE : _TrtcDefines.TRTCCloudDef.TRTC_AUDIO_ROUTE_SPEAKER;\n this.trtcCloud.setAudioRoute(this.audioRoute);\n },\n handleEvents: function handleEvents() {var _this9 = this;\n this.trtcCloud.on('onWarning', function (res) {\n uni.showToast({\n title: \"onWarning: \".concat(JSON.stringify(res)),\n icon: 'none' });\n\n });\n this.trtcCloud.on('onError', function (res) {\n __f__(\"log\", 'onError', res, \" at pages/meeting/meeting.nvue:564\");\n _this9.messageList.unshift({\n content: \"error: \".concat(JSON.stringify(res)) });\n\n _this9.sdkAppId && uni.$onErrorUpload(_this9.sdkAppId, JSON.stringify(res));\n });\n this.trtcCloud.on('onEnterRoom', function (result) {\n __f__(\"log\", \"- onEnterRoom = \".concat(result), \" at pages/meeting/meeting.nvue:571\");\n if (result > 0) {\n _this9.messageList.unshift({\n content: \"\\u8FDB\\u623F\\u6210\\u529F\\uFF0C\\u8017\\u65F6: \".concat(result, \"ms\") });\n\n } else {\n __f__(\"log\", \"enter room failed\\uFF0Cerror code = \".concat(result), \" at pages/meeting/meeting.nvue:577\");\n }\n });\n this.trtcCloud.on('onExitRoom', function (reason) {\n var reasonList = ['主动调用 exitRoom 退房', '被服务器踢出当前房间', '当前房间整个被解散'];\n _this9.messageList.unshift({\n content: \"\\u9000\\u623F \".concat(reasonList[reason]) });\n\n _this9.meeting = false;\n });\n this.trtcCloud.on('onFirstVideoFrame', function (res) {\n __f__(\"log\", \"\\u6E32\\u67D3\\u7684\\u9996\\u5E27\\u753B\\u9762\\u54CD\\u5E94 = \".concat(JSON.stringify(res)), \" at pages/meeting/meeting.nvue:588\");\n });\n this.trtcCloud.on('onRemoteUserEnterRoom', function (userId) {\n __f__(\"log\", 'onRemoteUserEnterRoom', userId, \" at pages/meeting/meeting.nvue:591\");\n _this9.startRemoteView(userId);\n });\n this.trtcCloud.on('onRemoteUserLeaveRoom', function (userId) {\n var index = _this9.meetingUsers.findIndex(function (t) {return t.userId == userId;});\n if (index >= 0) {\n _this9.meetingUsers.splice(index, 1);\n }\n if (_this9.meetingUsers.length < 2) {\n _this9.meetingUsers.push({\n type: '等待进入' });\n\n }\n _this9.messageList.unshift({\n content: \"\\u7528\\u6237\\u79BB\\u5F00\\u623F\\u95F4: userId = \".concat(userId) });\n\n\n\n });\n this.trtcCloud.on('onUserVideoAvailable', function (res) {var\n\n userId =\n\n res.userId,available = res.available;\n if (available) {\n _this9.startLocalPreview();\n }\n if (userId && available) {\n _this9.startRemoteView(userId);\n } else {\n _this9.stopRemoteView(userId);\n }\n });\n this.trtcCloud.on('onExitRoom', function (res) {\n __f__(\"log\", \"onExitRoom = \".concat(JSON.stringify(res)), \" at pages/meeting/meeting.nvue:625\");\n });\n } } };exports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-hbuilderx/packages/uni-app-plus-nvue/dist/require-native-plugin.js */ 10)[\"default\"], __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 11)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbWVldGluZy9tZWV0aW5nLm52dWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpSEE7OztBQUdBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7OztBQUdBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSwyRix3bkNBSkE7QUFLQSxnRDtBQUNBO0FBQ0E7QUFDQSx5Q0FEQTtBQUVBLDJDQUZBLEVBREE7O0FBS0EsTUFMQSxrQkFLQTtBQUNBO0FBQ0Esc0JBREE7QUFFQTtBQUNBO0FBQ0EsaUJBREEsRUFIQTs7O0FBT0E7QUFDQTtBQUNBLGlCQURBLEVBUkE7OztBQVlBO0FBQ0E7QUFDQSxpQkFEQSxFQWJBOzs7QUFpQkE7QUFDQTtBQUNBLGlCQURBLEVBbEJBOzs7QUFzQkEsYUF0QkE7QUF1QkEscUJBdkJBO0FBd0JBLGlCQXhCQTtBQXlCQSxpQkF6QkE7QUEwQkEsZUExQkE7QUEyQkEsZ0JBM0JBO0FBNEJBLHFCQTVCQTtBQTZCQSxzQkE3QkE7QUE4QkEsK0RBOUJBLEVBOEJBO0FBQ0EseUJBL0JBO0FBZ0NBLHlFQWhDQTtBQWlDQSxzQkFqQ0E7QUFrQ0Esb0VBbENBO0FBbUNBLHFCQW5DQTtBQW9DQSx3QkFwQ0E7QUFxQ0Esb0JBckNBO0FBc0NBLGNBdENBO0FBdUNBLGVBdkNBO0FBd0NBLHFCQXhDQTs7QUEwQ0EsZUExQ0E7QUEyQ0EsMEJBM0NBOztBQTZDQSxHQW5EQTtBQW9EQTtBQUNBLHVEQURBLENBcERBOztBQXVEQSxRQXZEQSxrQkF1REEsQ0F2REEsRUF1REE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFEQTtBQUVBLHNCQUZBOztBQUlBOztBQUVBO0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0EzT0E7QUE0T0Esa0JBNU9BLDBCQTRPQSxNQTVPQSxFQTRPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBeFBBO0FBeVBBO0FBQ0Esb0JBMVBBLDhCQTBQQTtBQUNBO0FBQ0EsK0JBREEsR0FDQSxrREFEQTtBQUVBO0FBQ0EsS0E5UEE7QUErUEEsZ0JBL1BBLDBCQStQQTtBQUNBO0FBQ0E7QUFDQSwwREFEQTtBQUVBLHNCQUZBOztBQUlBLE9BTEE7QUFNQTtBQUNBO0FBQ0E7QUFDQSx3REFEQTs7QUFHQTtBQUNBLE9BTkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdGQURBOztBQUdBLFNBSkEsTUFJQTtBQUNBO0FBQ0E7QUFDQSxPQVRBO0FBVUE7QUFDQTtBQUNBO0FBQ0EsNkRBREE7O0FBR0E7QUFDQSxPQU5BO0FBT0E7QUFDQTtBQUNBLE9BRkE7QUFHQTtBQUNBO0FBQ0E7QUFDQSxPQUhBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFEQTs7QUFHQTtBQUNBO0FBQ0EsbUZBREE7Ozs7QUFLQSxPQWZBO0FBZ0JBOztBQUVBLGNBRkE7O0FBSUEsV0FKQSxDQUVBLE1BRkEsQ0FHQSxTQUhBLEdBSUEsR0FKQSxDQUdBLFNBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FGQSxNQUVBO0FBQ0E7QUFDQTtBQUNBLE9BYkE7QUFjQTtBQUNBO0FBQ0EsT0FGQTtBQUdBLEtBdFVBLEVBcktBLEUiLCJmaWxlIjoiNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XHJcblx0PHZpZXc+XHJcblx0XHQ8aW1hZ2Ugc3JjPVwiLi4vLi4vc3RhdGljL2hvbWUvYmFuY2syLnBuZ1wiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTtcIiBtb2RlPVwid2lkdGhGaXhcIj48L2ltYWdlPlxyXG5cdFx0PHZpZXcgY2xhc3M9XCJiYWNrXCI+XHJcblx0XHRcdDwhLS0g5bmz5Y+w5a6i5pyNIC0tPlxyXG5cdFx0XHQ8dmlldyBjbGFzcz1cImxpc3QxXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO292ZXJmbG93OiBoaWRkZW47XCI+XHJcblx0XHRcdFx0PHRleHQgY2xhc3M9XCJuYW1lXCIgdi1pZj1cIiFtZWV0aW5nU2VydmljZVVzZXIudXNlcklkXCI+e3sgJ+etieW+heWuouacjei/m+WFpScgfX08L3RleHQ+XHJcblx0XHRcdFx0PHRleHQgY2xhc3M9XCJuYW1lXCIgdi1lbHNlPuWuouacjVxyXG5cdFx0XHRcdFx0e3sgbWVldGluZ1NlcnZpY2VVc2VyLnVzZXJJbmZvICYmIG1lZXRpbmdTZXJ2aWNlVXNlci51c2VySW5mby5uYW1lIHx8ICcnIH19PC90ZXh0PlxyXG5cdFx0XHRcdDx2aWV3IHN0eWxlPVwiaGVpZ2h0OjM2MHJweDtmbGV4LWRpcmVjdGlvbjogcm93O2p1c3RpZnktY29udGVudDogY2VudGVyO21hcmdpbjogMCBhdXRvO1wiPlxyXG5cdFx0XHRcdFx0PHZpZXdcclxuXHRcdFx0XHRcdFx0OmNsYXNzPVwieydoaWRlJzohKG1lZXRpbmdTZXJ2aWNlVXNlci51c2VySWQgJiYgdXNlcklkID09IG1lZXRpbmdTZXJ2aWNlVXNlci51c2VySWQgJiYgbWVldGluZ1NlcnZpY2VVc2VyLm1lZXRpbmcpfVwiPlxyXG5cdFx0XHRcdFx0XHQ8dHJ0Yy1sb2NhbC12aWV3IDp2aWV3SWQ9XCJtZWV0aW5nU2VydmljZVVzZXIudXNlcklkXCIgc3R5bGU9XCJoZWlnaHQ6IDM4MHJweDt3aWR0aDogMzYwcnB4O1wiPlxyXG5cdFx0XHRcdFx0XHQ8L3RydGMtbG9jYWwtdmlldz5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdDx2aWV3XHJcblx0XHRcdFx0XHRcdDpjbGFzcz1cInsnaGlkZSc6IShtZWV0aW5nU2VydmljZVVzZXIudXNlcklkICYmIHVzZXJJZCAhPSBtZWV0aW5nU2VydmljZVVzZXIudXNlcklkICYmIG1lZXRpbmdTZXJ2aWNlVXNlci5tZWV0aW5nKX1cIj5cclxuXHRcdFx0XHRcdFx0PHRydGMtcmVtb3RlLXZpZXcgOnVzZXJJZD1cIm1lZXRpbmdTZXJ2aWNlVXNlci51c2VySWRcIiA6dmlld0lkPVwibWVldGluZ1NlcnZpY2VVc2VyLnVzZXJJZFwiXHJcblx0XHRcdFx0XHRcdFx0c3R5bGU9XCJoZWlnaHQ6IDM2MHJweDt3aWR0aDogMzAwcnB4O2JvcmRlcjogMXB4IHNvbGlkICNmZmY7XCI+XHJcblx0XHRcdFx0XHRcdDwvdHJ0Yy1yZW1vdGUtdmlldz5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdDxpbWFnZSB2LWlmPVwiIW1lZXRpbmdTZXJ2aWNlVXNlci5tZWV0aW5nXCIgdi1lbHNlIHNyYz1cIi4uLy4uL3N0YXRpYy9ob21lL3JlbiAoMSkud2VicFwiXHJcblx0XHRcdFx0XHRcdHN0eWxlPVwid2lkdGg6IDM4MHJweDtoZWlnaHQ6IDM2MHJweDtib3JkZXItcmFkaXVzOiA0MHJweDtcIiBtb2RlPVwiYXNwZWN0RmlsbFwiPlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyBzdHlsZT1cImZsZXgtZGlyZWN0aW9uOiByb3c7anVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7d2lkdGg6IDEwMHZ3O1wiPlxyXG5cdFx0XHRcdDwhLS3kvpvmlrktLT5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cImxpc3QxXCIgc3R5bGU9XCJ3aWR0aDogMzAwcnB4O21hcmdpbi1yaWdodDogMjBweDtcIj5cclxuXHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwibmFtZVwiIHYtaWY9XCIhbWVldGluZ0J1c2luZXNzVXNlci51c2VySWRcIj7nrYnlvoXkvpvmlrnov5vlhaU8L3RleHQ+XHJcblx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cIm5hbWVcIiB2LWVsc2U+5L6b5pa5XHJcblx0XHRcdFx0XHRcdHt7IG1lZXRpbmdCdXNpbmVzc1VzZXIudXNlckluZm8gJiYgbWVldGluZ0J1c2luZXNzVXNlci51c2VySW5mby5uYW1lIHx8ICcnIH19PC90ZXh0PlxyXG5cdFx0XHRcdFx0PHZpZXcgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OjM2MHJweDtcIj5cclxuXHRcdFx0XHRcdFx0PHZpZXdcclxuXHRcdFx0XHRcdFx0XHQ6Y2xhc3M9XCJ7J2hpZGUnOiEobWVldGluZ0J1c2luZXNzVXNlciAmJiBtZWV0aW5nQnVzaW5lc3NVc2VyLnVzZXJJZCAmJiBtZWV0aW5nQnVzaW5lc3NVc2VyLnVzZXJJZCA9PSB1c2VySWQgJiYgbWVldGluZ0J1c2luZXNzVXNlci5tZWV0aW5nKX1cIj5cclxuXHRcdFx0XHRcdFx0XHQ8dHJ0Yy1sb2NhbC12aWV3IDp2aWV3SWQ9XCJtZWV0aW5nQnVzaW5lc3NVc2VyLnVzZXJJZFwiIHN0eWxlPVwiaGVpZ2h0OiAzODBycHg7d2lkdGg6IDM2MHJweDtcIj5cclxuXHRcdFx0XHRcdFx0XHQ8L3RydGMtbG9jYWwtdmlldz5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHQ8dmlld1xyXG5cdFx0XHRcdFx0XHRcdDpjbGFzcz1cInsnaGlkZSc6IShtZWV0aW5nQnVzaW5lc3NVc2VyICYmIG1lZXRpbmdCdXNpbmVzc1VzZXIudXNlcklkICYmIG1lZXRpbmdCdXNpbmVzc1VzZXIudXNlcklkICE9IHVzZXJJZCAmJiAhbWVldGluZ0J1c2luZXNzVXNlci5tZWV0aW5nKX1cIj5cclxuXHRcdFx0XHRcdFx0XHQ8dHJ0Yy1yZW1vdGUtdmlldyA6dXNlcklkPVwibWVldGluZ0J1c2luZXNzVXNlci51c2VySWRcIiA6dmlld0lkPVwibWVldGluZ0J1c2luZXNzVXNlci51c2VySWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJoZWlnaHQ6IDM2MHJweDt3aWR0aDogMzAwcnB4O2JvcmRlcjogMXB4IHNvbGlkICNmZmY7XCI+XHJcblx0XHRcdFx0XHRcdFx0PC90cnRjLXJlbW90ZS12aWV3PlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdDxpbWFnZVxyXG5cdFx0XHRcdFx0XHRcdHYtaWY9XCIhbWVldGluZ0J1c2luZXNzVXNlciB8fCAhbWVldGluZ0J1c2luZXNzVXNlci51c2VySWQgfHwgIW1lZXRpbmdCdXNpbmVzc1VzZXIubWVldGluZ1wiXHJcblx0XHRcdFx0XHRcdFx0c3JjPVwiLi4vLi4vc3RhdGljL2hvbWUvcmVuICgyKS53ZWJwXCJcclxuXHRcdFx0XHRcdFx0XHRzdHlsZT1cIndpZHRoOiAzMDBycHg7aGVpZ2h0OiAzNjBycHg7Ym9yZGVyLXJhZGl1czogNDBycHg7XCIgbW9kZT1cImFzcGVjdEZpbGxcIj5cclxuXHRcdFx0XHRcdFx0PC9pbWFnZT5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblxyXG5cdFx0XHRcdDwhLS3pnIDmlrktLT5cclxuXHRcdFx0XHQ8dmlldyBjbGFzcz1cImxpc3QxXCIgc3R5bGU9XCJ3aWR0aDogMzAwcnB4O21hcmdpbi1yaWdodDogMjBweDtcIj5cclxuXHRcdFx0XHRcdDx0ZXh0IGNsYXNzPVwibmFtZVwiIHYtaWY9XCIhbWVldGluZ0N1c3RvbWVyVXNlci51c2VySWRcIj7nrYnlvoXpnIDmlrnov5vlhaU8L3RleHQ+XHJcblx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cIm5hbWVcIiB2LWVsc2U+6ZyA5pa5XHJcblx0XHRcdFx0XHRcdHt7IG1lZXRpbmdDdXN0b21lclVzZXIudXNlckluZm8gJiYgbWVldGluZ0N1c3RvbWVyVXNlci51c2VySW5mby5uYW1lIHx8ICcnIH19PC90ZXh0PlxyXG5cdFx0XHRcdFx0PHZpZXcgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OjM2MHJweDtcIj5cclxuXHRcdFx0XHRcdFx0PHZpZXdcclxuXHRcdFx0XHRcdFx0XHQ6Y2xhc3M9XCJ7J2hpZGUnOiEobWVldGluZ0N1c3RvbWVyVXNlciAmJiBtZWV0aW5nQ3VzdG9tZXJVc2VyLnVzZXJJZCAmJiBtZWV0aW5nQ3VzdG9tZXJVc2VyLnVzZXJJZCA9PSB1c2VySWQgJiYgbWVldGluZ0N1c3RvbWVyVXNlci5tZWV0aW5nKX1cIj5cclxuXHRcdFx0XHRcdFx0XHQ8dHJ0Yy1sb2NhbC12aWV3IDp2aWV3SWQ9XCJtZWV0aW5nQ3VzdG9tZXJVc2VyLnVzZXJJZFwiIHN0eWxlPVwiaGVpZ2h0OiAzODBycHg7d2lkdGg6IDM2MHJweDtcIj5cclxuXHRcdFx0XHRcdFx0XHQ8L3RydGMtbG9jYWwtdmlldz5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHQ8dmlld1xyXG5cdFx0XHRcdFx0XHRcdDpjbGFzcz1cInsnaGlkZSc6IShtZWV0aW5nQ3VzdG9tZXJVc2VyICYmIG1lZXRpbmdDdXN0b21lclVzZXIudXNlcklkICYmIG1lZXRpbmdDdXN0b21lclVzZXIudXNlcklkICE9IHVzZXJJZCAmJiBtZWV0aW5nQ3VzdG9tZXJVc2VyLm1lZXRpbmcpfVwiPlxyXG5cdFx0XHRcdFx0XHRcdDx0cnRjLXJlbW90ZS12aWV3IDp1c2VySWQ9XCJtZWV0aW5nQ3VzdG9tZXJVc2VyLnVzZXJJZFwiIDp2aWV3SWQ9XCJtZWV0aW5nQ3VzdG9tZXJVc2VyLnVzZXJJZFwiXHJcblx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cImhlaWdodDogMzYwcnB4O3dpZHRoOiAzMDBycHg7Ym9yZGVyOiAxcHggc29saWQgI2ZmZjtcIj5cclxuXHRcdFx0XHRcdFx0XHQ8L3RydGMtcmVtb3RlLXZpZXc+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0PGltYWdlXHJcblx0XHRcdFx0XHRcdFx0di1pZj1cIiFtZWV0aW5nQ3VzdG9tZXJVc2VyIHx8ICFtZWV0aW5nQ3VzdG9tZXJVc2VyLnVzZXJJZCB8fCAhbWVldGluZ0N1c3RvbWVyVXNlci5tZWV0aW5nXCJcclxuXHRcdFx0XHRcdFx0XHRzcmM9XCIuLi8uLi9zdGF0aWMvaG9tZS9yZW4gKDIpLndlYnBcIlxyXG5cdFx0XHRcdFx0XHRcdHN0eWxlPVwid2lkdGg6IDMwMHJweDtoZWlnaHQ6IDM2MHJweDtib3JkZXItcmFkaXVzOiA0MHJweDtcIiBtb2RlPVwiYXNwZWN0RmlsbFwiPlxyXG5cdFx0XHRcdFx0XHQ8L2ltYWdlPlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8dmlldyBzdHlsZT1cImZsZXgtZGlyZWN0aW9uOiByb3c7anVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XCI+XHJcblx0XHRcdFx0PGJsb2NrPlxyXG5cdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJidG5cIiBAY2xpY2s9XCJoYW5kbGVTdGFydE1lZXRpbmdcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMjBycHg7XCI+XHJcblx0XHRcdFx0XHRcdOW8gOWni+inhumikVxyXG5cdFx0XHRcdFx0PC90ZXh0PlxyXG5cdFx0XHRcdDwvYmxvY2s+XHJcblx0XHRcdFx0PHRleHQgY2xhc3M9XCJidG5cIiB2LWlmPVwibWVldGluZ1wiIEBjbGljaz1cImhhbmRsZUVuZHRNZWV0aW5nXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDIwcHg7XCI+XHJcblx0XHRcdFx0XHTmjILmlq1cclxuXHRcdFx0XHQ8L3RleHQ+XHJcblx0XHRcdFx0PHRleHQgY2xhc3M9XCJidG5cIiBAY2xpY2s9XCJoYW5kbGVJbnZpdGVTZXJ2aWNlVXNlclwiIHYtaWY9XCIhaGFzSW52aXRlICYmIGpvaW5UeXBlID09ICdjdXN0b21lcidcIlxyXG5cdFx0XHRcdFx0c3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDIwcnB4O1wiPlxyXG5cdFx0XHRcdFx06YKA6K+35a6i5pyNXHJcblx0XHRcdFx0PC90ZXh0PlxyXG5cdFx0XHRcdDx0ZXh0IGNsYXNzPVwiYnRuXCIgdi1pZj1cImpvaW5UeXBlID09ICdjdXN0b21lcidcIiBAY2xpY2s9XCJoYW5kbGVUb1N1Ym1pdE9yZGVyXCI+XHJcblx0XHRcdFx0XHTnq4vljbPkuIvljZVcclxuXHRcdFx0XHQ8L3RleHQ+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHNjcm9sbC12aWV3IDpzY3JvbGwteT1cInRydWVcIiBjbGFzcz1cIm1lc3NhZ2VcIj5cclxuXHRcdFx0XHQ8dmlldyBzdHlsZT1cIndpZHRoOiAzMjBweDtcIj5cclxuXHRcdFx0XHRcdDx2aWV3IHYtZm9yPVwiaXRlbSBpbiBtZXNzYWdlTGlzdFwiIHN0eWxlPVwiZGlzcGxheTogZmxleDtmbGV4LWRpcmVjdGlvbjogcm93O2ZsZXgtd3JhcDogd3JhcDtcIj5cclxuXHRcdFx0XHRcdFx0PHRleHQgc3R5bGU9XCJjb2xvcjogI0ZGREE5NyA7XCI+e3tpdGVtLmF1dGhvciB8fCAn57O757ufJ319OjwvdGV4dD5cclxuXHRcdFx0XHRcdFx0PHRleHRcclxuXHRcdFx0XHRcdFx0XHRzdHlsZT1cImNvbG9yOiAjZmZmO21hcmdpbi1sZWZ0OiAxMHJweDt3b3JkLWJyZWFrOiBicmVhay1hbGw7d29yZC13cmFwOiBicmVhay13b3JkO3doaXRlLXNwYWNlOiBwcmUtd3JhcDtcIj5cclxuXHRcdFx0XHRcdFx0XHR7e2l0ZW0uY29udGVudH19XHJcblx0XHRcdFx0XHRcdDwvdGV4dD5cclxuXHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwvc2Nyb2xsLXZpZXc+XHJcblx0XHRcdDx2aWV3XHJcblx0XHRcdFx0c3R5bGU9XCJwb3NpdGlvbjogZml4ZWQ7Ym90dG9tOiAwO2xlZnQ6IDA7cmlnaHQ6IDA7anVzdGlmeS1jb250ZW50OiBjZW50ZXI7YWxpZ24taXRlbXM6IGNlbnRlcjtib3R0b206IDIwcHg7XCI+XHJcblx0XHRcdFx0PGlucHV0IGNsYXNzPVwiaW5wdXRcIiBwbGFjZWhvbGRlcj1cIuWbnuWkjVwiIHBsYWNlaG9sZGVyLXN0eWxlPVwiY29sb3I6I2ZmZlwiIHYtbW9kZWw9XCJtZXNzYWdlQ29udGVudFwiXHJcblx0XHRcdFx0XHRAY29uZmlybT1cInNlbmRNZXNzYWdlXCIgY29uZmlybS10eXBlPVwic2VuZFwiIC8+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdDwvdmlldz5cclxuXHQ8L3ZpZXc+XHJcbjwvdGVtcGxhdGU+XHJcbjxzY3JpcHQ+XHJcblx0aW1wb3J0IHtcclxuXHRcdG1hcFN0YXRlXHJcblx0fSBmcm9tICd2dWV4JztcclxuXHRpbXBvcnQgcGVybWlzaW9uIGZyb20gXCJAL1RydGNDbG91ZC9wZXJtaXNzaW9uLmpzXCI7XHJcblx0aW1wb3J0IFRydGNDbG91ZCBmcm9tICdAL1RydGNDbG91ZC9saWIvaW5kZXgnO1xyXG5cdGltcG9ydCB7XHJcblx0XHRUUlRDQXBwU2NlbmUsXHJcblx0XHRUUlRDVmlkZW9TdHJlYW1UeXBlLFxyXG5cdFx0VFJUQ0Nsb3VkRGVmLFxyXG5cdFx0VFJUQ0F1ZGlvUXVhbGl0eVxyXG5cdH0gZnJvbSAnQC9UcnRjQ2xvdWQvbGliL1RydGNEZWZpbmVzJztcclxuXHRpbXBvcnQge1xyXG5cdFx0Z2VuVGVzdFVzZXJTaWdcclxuXHR9IGZyb20gJ0AvZGVidWcvR2VuZXJhdGVUZXN0VXNlclNpZyc7XHJcblx0aW1wb3J0IFRydGNMb2NhbFZpZXcgZnJvbSAnQC9UcnRjQ2xvdWQvdmlldy9UcnRjTG9jYWxWaWV3JztcclxuXHRpbXBvcnQgVHJ0Y1JlbW90ZVZpZXcgZnJvbSAnQC9UcnRjQ2xvdWQvdmlldy9UcnRjUmVtb3RlVmlldyc7XHJcblx0Y29uc3QgVHJ0Y0V2ZW50ID0gdW5pLnJlcXVpcmVOYXRpdmVQbHVnaW4oJ2dsb2JhbEV2ZW50Jyk7XHJcblxyXG5cdGltcG9ydCBBUEkgZnJvbSAnQC9hcGlzL2luZGV4LmpzJ1xyXG5cdGltcG9ydCBjb25maWcgZnJvbSAnQC9jb21tb24vY29uZmlnL2NvbmZpZy5qcydcclxuXHRpbXBvcnQgc2VydmljZSBmcm9tICdAL3NlcnZpY2Uvc2VydmljZS5qcydcclxuXHRsZXQgc29ja2V0VGFzayA9IGdldEFwcCgpLmdsb2JhbERhdGEuc29ja2V0VGFzaztcclxuXHRleHBvcnQgZGVmYXVsdCB7XHJcblx0XHRjb21wb25lbnRzOiB7XHJcblx0XHRcdFRydGNMb2NhbFZpZXc6IFRydGNMb2NhbFZpZXcsXHJcblx0XHRcdFRydGNSZW1vdGVWaWV3OiBUcnRjUmVtb3RlVmlldyxcclxuXHRcdH0sXHJcblx0XHRkYXRhKCkge1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdGhhc0ludml0ZTogZmFsc2UsXHJcblx0XHRcdFx0Ly/miJFcclxuXHRcdFx0XHRtZWV0aW5nVXNlck15OiB7XHJcblx0XHRcdFx0XHR1c2VySWQ6IDBcclxuXHRcdFx0XHR9LFxyXG5cclxuXHRcdFx0XHQvL+mcgOaWuVxyXG5cdFx0XHRcdG1lZXRpbmdDdXN0b21lclVzZXI6IHtcclxuXHRcdFx0XHRcdHVzZXJJZDogMFxyXG5cdFx0XHRcdH0sXHJcblxyXG5cdFx0XHRcdC8v5L6b5pa5XHJcblx0XHRcdFx0bWVldGluZ0J1c2luZXNzVXNlcjoge1xyXG5cdFx0XHRcdFx0dXNlcklkOiAwXHJcblx0XHRcdFx0fSxcclxuXHJcblx0XHRcdFx0Ly/lrqLmnI1cclxuXHRcdFx0XHRtZWV0aW5nU2VydmljZVVzZXI6IHtcclxuXHRcdFx0XHRcdHVzZXJJZDogMFxyXG5cdFx0XHRcdH0sXHJcblxyXG5cdFx0XHRcdG51bTogMTAsXHJcblx0XHRcdFx0dHJ0Y0Nsb3VkOiBudWxsLFxyXG5cdFx0XHRcdHNka0FwcElkOiAwLFxyXG5cdFx0XHRcdHVzZXJTaWc6ICcnLFxyXG5cdFx0XHRcdHJvb21JZDogMCxcclxuXHRcdFx0XHR1c2VySWQ6ICcnLFxyXG5cdFx0XHRcdHN0YXJ0aW5nOiBmYWxzZSxcclxuXHRcdFx0XHR1c2VyVHlwZTogJ+etieW+hei/m+WFpScsXHJcblx0XHRcdFx0YXBwU2NlbmU6IFRSVENBcHBTY2VuZS5UUlRDQXBwU2NlbmVWaWRlb0NhbGwsIC8vIFRSVENBcHBTY2VuZVZpZGVvQ2FsbFxyXG5cdFx0XHRcdGlzRnJvbnRDYW1lcmE6IHRydWUsXHJcblx0XHRcdFx0c3RyZWFtVHlwZTogVFJUQ1ZpZGVvU3RyZWFtVHlwZS5UUlRDVmlkZW9TdHJlYW1UeXBlQmlnLFxyXG5cdFx0XHRcdHJlbW90ZVVzZXJJZDogJycsXHJcblx0XHRcdFx0YXVkaW9Sb3V0ZTogVFJUQ0Nsb3VkRGVmLlRSVENfQVVESU9fUk9VVEVfU1BFQUtFUixcclxuXHRcdFx0XHRtZXNzYWdlTGlzdDogW10sXHJcblx0XHRcdFx0bWVzc2FnZUNvbnRlbnQ6ICcnLFxyXG5cdFx0XHRcdG15VXNlckluZm86ICcnLFxyXG5cdFx0XHRcdHJvb206IHt9LFxyXG5cdFx0XHRcdHNob3BJZDogMCxcclxuXHRcdFx0XHRzZWxsZXJVc2VySWQ6IDAsXHJcblxyXG5cdFx0XHRcdHBhcmFtOiB7fSxcclxuXHRcdFx0XHRqb2luVHlwZTogJ2N1c3RvbWVyJ1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0Y29tcHV0ZWQ6IHtcclxuXHRcdFx0Li4ubWFwU3RhdGUoWyd1c2VyJywgJ3N0YXRpc3RpY3MnLCAnY29tbW9uJ10pXHJcblx0XHR9LFxyXG5cdFx0b25Mb2FkKGUpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coJ29ubG9hZCBlJywgZSk7XHJcblx0XHRcdGNvbnNvbGUubG9nKCd1c2VyJywgdGhpcy51c2VyKTtcclxuXHRcdFx0dGhpcy5wYXJhbSA9IGU7XHJcblxyXG5cdFx0XHQvL+WKoOWFpeexu+Wei++8jOaYr+S7peS7gOS5iOi6q+S7veWKoOWFpeeahFxyXG5cdFx0XHRsZXQgam9pblR5cGUgPSBlLmpvaW5UeXBlIHx8ICdjdXN0b21lcidcclxuXHRcdFx0Y29uc29sZS5sb2coJ29uTG9hZCBqb2luVHlwZScsIGpvaW5UeXBlKTtcclxuXHRcdFx0dGhpcy5qb2luVHlwZSA9IGpvaW5UeXBlO1xyXG5cclxuXHRcdFx0dGhpcy5yb29tSWQgPSBlLnJvb21JZDtcclxuXHRcdFx0dGhpcy5zZWxsZXJVc2VySWQgPSBlLnVzZXJpZDtcclxuXHRcdFx0dGhpcy51c2VySWQgPSAndXNlcl8nICsgdGhpcy51c2VyLmlkO1xyXG5cdFx0XHR0aGlzLm1lZXRpbmdVc2VyTXkgPSB7XHJcblx0XHRcdFx0dXNlcklkOiB0aGlzLnVzZXJJZCxcclxuXHRcdFx0XHRpZDogdGhpcy51c2VyLmlkXHJcblx0XHRcdH07XHJcblx0XHRcdHRoaXMuc2hvcElkID0gZS5zaG9wX2lkO1xyXG5cclxuXHRcdFx0aWYgKGpvaW5UeXBlID09ICdjdXN0b21lcicpIHtcclxuXHRcdFx0XHQvL+mcgOaWuVxyXG5cdFx0XHRcdHRoaXMuY3JlYXRlUm9vbSh7XHJcblx0XHRcdFx0XHRcIm5hbWVcIjogXCLmtYvor5XmiL/pl7RcIixcclxuXHRcdFx0XHRcdFwiYm9keVRleHRcIjogXCJcIixcclxuXHRcdFx0XHRcdFwicm9vbU5vXCI6IFwiXCIsXHJcblx0XHRcdFx0XHRcImRlc2NyaXB0aW9uXCI6IFwiXCIsXHJcblx0XHRcdFx0XHRcImNsaWVudElkXCI6IFwiXCIsXHJcblx0XHRcdFx0XHQvLyBcInByb2R1Y3RJZFwiOiBlLmdvb2RzX2lkLFxyXG5cdFx0XHRcdFx0XCJzaG9wSWRcIjogZS5zaG9wX2lkXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dGhpcy5tZWV0aW5nQ3VzdG9tZXJVc2VyID0ge1xyXG5cdFx0XHRcdFx0Li4udGhpcy5tZWV0aW5nVXNlck15XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLnJvb20gPSB7XHJcblx0XHRcdFx0XHRpZDogZS5yb29tSWQsXHJcblx0XHRcdFx0XHRSb29tTm86IGUucm9vbUlkXHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0dGhpcy5tZWV0aW5nQ3VzdG9tZXJVc2VyID0ge1xyXG5cdFx0XHRcdFx0dXNlcklkOiAndXNlcl8nICsgZS5jdXN0b21lcmlkLnRvU3RyaW5nKCksXHJcblx0XHRcdFx0XHRpZDogZS5jdXN0b21lcmlkXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKGpvaW5UeXBlID09ICdzZWxsZXInKSB7XHJcblx0XHRcdFx0Ly/kvpvmlrlcclxuXHRcdFx0XHR0aGlzLm1lZXRpbmdCdXNpbmVzc1VzZXIgPSB7XHJcblx0XHRcdFx0XHR1c2VySWQ6IHRoaXMubWVldGluZ1VzZXJNeS51c2VySWQsXHJcblx0XHRcdFx0XHRpZDogdGhpcy5tZWV0aW5nVXNlck15LmlkXHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGpvaW5UeXBlID09ICdzZXJ2aWNlJykge1xyXG5cdFx0XHRcdC8v5bmz5Y+w5a6i5pyNXHJcblx0XHRcdFx0dGhpcy5tZWV0aW5nU2VydmljZVVzZXIgPSB7XHJcblx0XHRcdFx0XHR1c2VySWQ6IHRoaXMubWVldGluZ1VzZXJNeS51c2VySWQsXHJcblx0XHRcdFx0XHRpZDogdGhpcy5tZWV0aW5nVXNlck15LmlkXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc29sZS5sb2coJ29uTG9hZCBtZWV0aW5nQnVzaW5lc3NVc2VyJywgdGhpcy5tZWV0aW5nQnVzaW5lc3NVc2VyKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ29uTG9hZCBtZWV0aW5nU2VydmljZVVzZXInLCB0aGlzLm1lZXRpbmdTZXJ2aWNlVXNlcik7XHJcblxyXG5cdFx0XHQvLyB0aGlzLmdldFVzZXJJbmZvKHRoaXMudXNlci5pZCxqb2luVHlwZSk7XHJcblx0XHRcdHRoaXMuam9pblJvb20oKTtcclxuXHJcblx0XHRcdHRoaXMuJGZvcmNlVXBkYXRlKCk7XHJcblxyXG5cdFx0XHQvL+aWh+Wtl+iBiuWkqVxyXG5cdFx0XHR1bmkuJG9uKCdzb2NrZXRNZXNzYWdlJywgKGRhdGEpID0+IHtcclxuXHRcdFx0XHRpZiAoZGF0YS5tZXNzYWdlVHlwZSA9PSAnc2VuZF90b19yb29tJykge1xyXG5cdFx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0YXV0aG9yOiBkYXRhLnJlYWxOYW1lLFxyXG5cdFx0XHRcdFx0XHRjb250ZW50OiBkYXRhLnRvTWVzc2FnZVxyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGRhdGEubWVzc2FnZVR5cGUgPT0gJ2pvaW4nKSB7XHJcblx0XHRcdFx0XHRsZXQgdXNlcmlkID0gZGF0YS51c2VySW50SWQ7XHJcblx0XHRcdFx0XHRpZiAodXNlcmlkICE9IHRoaXMudXNlci5pZCkge1xyXG5cdFx0XHRcdFx0XHQvL+acieeUqOaIt+WKoOWFpeaIv+mXtFxyXG5cdFx0XHRcdFx0XHRsZXQgam9pblR5cGUgPSBkYXRhLm1lc3NhZ2VDb250ZW50O1xyXG5cdFx0XHRcdFx0XHRpZiAoam9pblR5cGUgPT0gJ3NlbGxlcicpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLm1lZXRpbmdCdXNpbmVzc1VzZXIudXNlcklkID0gJ3VzZXJfJyArIHVzZXJpZDtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLm1lZXRpbmdCdXNpbmVzc1VzZXIuaWQgPSB1c2VyaWQ7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKGpvaW5UeXBlID09ICdzZXJ2aWNlJykge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubWVldGluZ1NlcnZpY2VVc2VyLnVzZXJJZCA9ICd1c2VyXycgKyB1c2VyaWQ7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5tZWV0aW5nU2VydmljZVVzZXIuaWQgPSB1c2VyaWQ7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHR9LFxyXG5cdFx0b25TaG93KCkge30sXHJcblx0XHRvbkhpZGUoKSB7fSxcclxuXHRcdG1vdW50ZWQoKSB7XHJcblx0XHRcdGlmICh1bmkuZ2V0U3lzdGVtSW5mb1N5bmMoKS5wbGF0Zm9ybSA9PT0gJ2FuZHJvaWQnKSB7XHJcblx0XHRcdFx0cGVybWlzaW9uLnJlcXVlc3RBbmRyb2lkUGVybWlzc2lvbignYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ09SRF9BVURJTycpO1xyXG5cdFx0XHRcdHBlcm1pc2lvbi5yZXF1ZXN0QW5kcm9pZFBlcm1pc3Npb24oJ2FuZHJvaWQucGVybWlzc2lvbi5DQU1FUkEnKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLmluaXRVc2VyU2lnbigpO1xyXG5cdFx0fSxcclxuXHRcdG9uVW5sb2FkKCkge1xyXG5cdFx0XHR0aGlzLmRlc3Ryb3lJbnN0YW5jZSgpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnLSBvblVubG9hZCcpO1xyXG5cdFx0fSxcclxuXHRcdG9uQmFja1ByZXNzKCkge1xyXG5cdFx0XHR0aGlzLmRlc3Ryb3lJbnN0YW5jZSgpO1xyXG5cdFx0fSxcclxuXHRcdG1ldGhvZHM6IHtcclxuXHRcdFx0Z2V0VXNlckluZm8odXNlcmlkLCB0eXBlKSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coJ2dldFVzZXJJbmZvJywgdXNlcmlkLCB0eXBlKTtcclxuXHRcdFx0XHRBUEkubWVzc2FnZS5nZXRVc2VyVHlwZUluZm8odXNlcmlkKS50aGVuKHJlcyA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnZ2V0VXNlclR5cGVJbmZvJywgcmVzKTtcclxuXHRcdFx0XHRcdGlmICh0eXBlID09ICdjdXN0b21lcicpIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ2dldFVzZXJUeXBlSW5mbyB0eXBlPWN1c3RvbWVyJyk7XHJcblx0XHRcdFx0XHRcdHRoaXMubWVldGluZ0N1c3RvbWVyVXNlci51c2VySW5mbyA9IHJlcy5kYXRhWzBdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKHR5cGUgPT0gJ3NlbGxlcicpIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ2dldFVzZXJUeXBlSW5mbyB0eXBlPXNlbGxlcicpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLm1lZXRpbmdCdXNpbmVzc1VzZXIudXNlckluZm8gPSByZXMuZGF0YVswXTtcclxuXHRcdFx0XHRcdFx0dGhhdC5tZXNzYWdlTGlzdC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRhdXRob3I6ICfns7vnu58nLFxyXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6ICfkvpvmlrnliqDlhaXmiL/pl7QnXHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAodHlwZSA9PSAnc2VydmljZScpIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ2dldFVzZXJUeXBlSW5mbyB0eXBlPXNlcnZpY2UnKTtcclxuXHRcdFx0XHRcdFx0Ly8gdGhpcy5tZWV0aW5nU2VydmljZVVzZXIudXNlckluZm8gPSByZXMuZGF0YVswXTtcclxuXHRcdFx0XHRcdFx0dGhhdC5tZXNzYWdlTGlzdC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRhdXRob3I6ICfns7vnu58nLFxyXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6ICflrqLmnI3liqDlhaXmiL/pl7QnXHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnZ2V0VXNlclR5cGVJbmZvIG1lZXRpbmdTZXJ2aWNlVXNlcicsIHRoaXMubWVldGluZ1NlcnZpY2VVc2VyKTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRqb2luUm9vbSgpIHtcclxuXHRcdFx0XHRzb2NrZXRUYXNrLnNlbmQoe1xyXG5cdFx0XHRcdFx0ZGF0YTogSlNPTi5zdHJpbmdpZnkoe1xyXG5cdFx0XHRcdFx0XHRtZXRob2Q6ICdqb2luJyxcclxuXHRcdFx0XHRcdFx0SXNSb29tOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRSb29tTm86IHRoaXMucm9vbUlkLFxyXG5cdFx0XHRcdFx0XHRSb29tTmFtZTogdGhpcy5yb29tLlJvb21OYW1lLFxyXG5cdFx0XHRcdFx0XHRtZXNzYWdlQ29udGVudDogdGhpcy5qb2luVHlwZSxcclxuXHRcdFx0XHRcdFx0dG9rZW46IHNlcnZpY2UuZ2V0VG9rZW5DaGFvZ2UoKSxcclxuXHRcdFx0XHRcdH0pLFxyXG5cdFx0XHRcdFx0c3VjY2VzcyhyZXMpIHt9LFxyXG5cdFx0XHRcdFx0ZmFpbChlKSB7fSxcclxuXHRcdFx0XHRcdGNvbXBsZXRlKCkge31cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0aW5pdFVzZXJTaWduKCkge1xyXG5cdFx0XHRcdGlmICh0aGlzLnVzZXJJZCkge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ2luaXRVc2VyU2lnbicsIHRoaXMudXNlcklkKTtcclxuXHRcdFx0XHRcdC8vIOeUn+aIkCB1c2VyU2lnXHJcblx0XHRcdFx0XHRjb25zdCB7XHJcblx0XHRcdFx0XHRcdHNka0FwcElkLFxyXG5cdFx0XHRcdFx0XHR1c2VyU2lnXHJcblx0XHRcdFx0XHR9ID0gZ2VuVGVzdFVzZXJTaWcodGhpcy51c2VySWQpO1xyXG5cdFx0XHRcdFx0dGhpcy5zZGtBcHBJZCA9IHNka0FwcElkO1xyXG5cdFx0XHRcdFx0dGhpcy51c2VyU2lnID0gdXNlclNpZztcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCdzZGtBcHBJZCx1c2VyU2lnJywgc2RrQXBwSWQsIHVzZXJTaWcpO1xyXG5cdFx0XHRcdFx0aWYgKCFzZGtBcHBJZCB8fCAhdXNlclNpZykge1xyXG5cdFx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogJ+ivt+Whq+WGmSBzZGtBcHBJZOOAgXVzZXJTaWcnLFxyXG5cdFx0XHRcdFx0XHRcdGljb246ICdub25lJ1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuaW5pdFVzZXJTaWduKCk7XHJcblx0XHRcdFx0XHR9LCAyMDApXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRoYW5kbGVUb1N1Ym1pdE9yZGVyKCkge1xyXG5cdFx0XHRcdHVuaS5uYXZpZ2F0ZUJhY2soKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/pgoDor7fllYblrrblrqLmnI1cclxuXHRcdFx0aGFuZGxlSW52aXRlQnVzaW5lc3NVc2VyKCkge1xyXG5cdFx0XHRcdEFQSS5tZXNzYWdlLmdldEludml0ZUJ1c2luZXNzVXNlckpvaW4odGhpcy5zaG9wSWQsIHRoaXMucm9vbS5Sb29tTm8sIHRoaXMuc2VsbGVyVXNlcklkKS50aGVuKHJlcyA9PiB7fSlcclxuXHRcdFx0fSxcclxuXHRcdFx0Ly/pgoDor7flubPlj7DlrqLmnI1cclxuXHRcdFx0aGFuZGxlSW52aXRlU2VydmljZVVzZXIoKSB7XHJcblx0XHRcdFx0dW5pLnNob3dMb2FkaW5nKCk7XHJcblx0XHRcdFx0QVBJLm1lc3NhZ2UuZ2V0SW52aXRlU2VydmljZVVzZXJKb2luKHRoaXMucm9vbS5Sb29tTm8sICdqb2luTXVsdGlwbGF5ZXJWaWRlbycpLnRoZW4ocmVzID0+IHtcclxuXHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogJ+mCgOivt+aIkOWKnydcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHR0aGlzLmhhc0ludml0ZSA9IHRydWU7XHJcblx0XHRcdFx0fSkuZmluYWxseSgoKSA9PiB7XHJcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0Y3JlYXRlUm9vbShkYXRhKSB7XHJcblx0XHRcdFx0dW5pLnNob3dMb2FkaW5nKHtcclxuXHRcdFx0XHRcdHRpdGxlOiAn5q2j5Zyo5Yib5bu65oi/6Ze0J1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdEFQSS5tZXNzYWdlLnBvc3RBZGRSb29tKGRhdGEpLnRoZW4ocmVzID0+IHtcclxuXHRcdFx0XHRcdHRoaXMucm9vbSA9IHJlcy5kYXRhO1xyXG5cdFx0XHRcdFx0dGhpcy5yb29tSWQgPSByZXMuZGF0YS5Sb29tTm87XHJcblx0XHRcdFx0XHR0aGlzLmhhbmRsZUludml0ZUJ1c2luZXNzVXNlcigpO1xyXG5cdFx0XHRcdFx0dGhpcy5qb2luUm9vbSgpO1xyXG5cdFx0XHRcdH0pLmZpbmFsbHkoKCkgPT4ge1xyXG5cdFx0XHRcdFx0dW5pLmhpZGVMb2FkaW5nKCk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHRzZW5kTWVzc2FnZSgpIHtcclxuXHRcdFx0XHRsZXQgdGhhdCA9IHRoaXM7XHJcblx0XHRcdFx0dGhhdC5tZXNzYWdlTGlzdC5wdXNoKHtcclxuXHRcdFx0XHRcdGF1dGhvcjogJ+aIkScsXHJcblx0XHRcdFx0XHRjb250ZW50OiB0aGF0Lm1lc3NhZ2VDb250ZW50XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0XHR0aGF0Lm1lc3NhZ2VDb250ZW50ID0gJyc7XHJcblx0XHRcdFx0c29ja2V0VGFzay5zZW5kKHtcclxuXHRcdFx0XHRcdGRhdGE6IEpTT04uc3RyaW5naWZ5KHtcclxuXHRcdFx0XHRcdFx0Zm9ybVVzZXJJZDogdGhpcy51c2VySWQsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnRUeXBlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRjb250ZW50OiB0aGlzLm1lc3NhZ2VDb250ZW50LFxyXG5cdFx0XHRcdFx0XHRzZW5kVGltZTogbmV3IERhdGUoKSxcclxuXHRcdFx0XHRcdFx0bWV0aG9kOiAnc2VuZF90b19yb29tJyxcclxuXHRcdFx0XHRcdFx0Um9vbU5vOiB0aGlzLnJvb20uUm9vbU5vLFxyXG5cdFx0XHRcdFx0XHRSb29tTmFtZTogdGhpcy5yb29tLk5hbWUsXHJcblx0XHRcdFx0XHRcdElzUm9vbTogdHJ1ZVxyXG5cdFx0XHRcdFx0fSksXHJcblx0XHRcdFx0XHRzdWNjZXNzKHJlcykge30sXHJcblx0XHRcdFx0XHRmYWlsKGUpIHt9LFxyXG5cdFx0XHRcdFx0Y29tcGxldGUoKSB7fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRoYW5kbGVTdGFydE1lZXRpbmcoKSB7XHJcblx0XHRcdFx0dGhpcy5zdGFydGluZyA9IHRydWU7XHJcblx0XHRcdFx0dGhpcy4kbmV4dFRpY2soKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5jcmVhdGVUcnRjQ2xvdWQoKTtcclxuXHRcdFx0XHRcdHRoaXMuZW50ZXJSb29tKCk7XHJcblx0XHRcdFx0XHR0aGlzLnN0YXJ0TG9jYWxQcmV2aWV3KCk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSxcclxuXHRcdFx0aGFuZGxlRW5kdE1lZXRpbmcoKSB7XHJcblx0XHRcdFx0dGhpcy5tZWV0aW5nID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5zdG9wTG9jYWxQcmV2aWV3KCk7XHJcblx0XHRcdFx0dGhpcy5leGl0Um9vbSgpO1xyXG5cdFx0XHRcdHRoaXMuZGVzdHJveUluc3RhbmNlKCk7XHJcblx0XHRcdH0sXHJcblxyXG5cdFx0XHRiaW5kSW5wdXRDaGFuZ2UoZXZlbnQsIHR5cGUpIHtcclxuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IGV2ZW50LmRldGFpbC52YWx1ZTtcclxuXHRcdFx0XHRzd2l0Y2ggKHR5cGUpIHtcclxuXHRcdFx0XHRcdGNhc2UgJ3Jvb21JZCc6IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5yb29tSWQgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjYXNlICd1c2VySWQnOiB7XHJcblx0XHRcdFx0XHRcdHRoaXMudXNlcklkID0gdmFsdWU7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0ZGVzdHJveUluc3RhbmNlKCkge1xyXG5cdFx0XHRcdGlmICh0aGlzLnRydGNDbG91ZCkge1xyXG5cdFx0XHRcdFx0VHJ0Y0Nsb3VkLmRlc3Ryb3lJbnN0YW5jZSgpO1xyXG5cdFx0XHRcdFx0dGhpcy50cnRjQ2xvdWQgPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0Y3JlYXRlVHJ0Y0Nsb3VkKCkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdjcmVhdGVUcnRjQ2xvdWQnLCB0aGlzLnNka0FwcElkKTtcclxuXHRcdFx0XHR0aGlzLnRydGNDbG91ZCA9IFRydGNDbG91ZC5jcmVhdGVJbnN0YW5jZSgpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCd0aGlzLnRydGNDbG91ZCcsIHRoaXMudHJ0Y0Nsb3VkKVxyXG5cdFx0XHRcdHRoaXMuaGFuZGxlRXZlbnRzKCk7XHJcblx0XHRcdFx0dGhpcy5zZGtBcHBJZCAmJiB1bmkuJGNyZWF0ZVRydGNDbG91ZFVwbG9hZCh0aGlzLnNka0FwcElkKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZW50ZXJSb29tKCkge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRjb25zdCB7XHJcblx0XHRcdFx0XHRcdHNka0FwcElkLFxyXG5cdFx0XHRcdFx0XHRhcHBTY2VuZSxcclxuXHRcdFx0XHRcdFx0dXNlclNpZ1xyXG5cdFx0XHRcdFx0fSA9IHRoaXM7XHJcblx0XHRcdFx0XHRsZXQgcGFyYW0gPSB7XHJcblx0XHRcdFx0XHRcdHJvb21JZDogMCxcclxuXHRcdFx0XHRcdFx0c3RyUm9vbUlkOiB0aGlzLnJvb20uUm9vbU5vLFxyXG5cdFx0XHRcdFx0XHR1c2VySWQ6IHRoaXMudXNlcklkLFxyXG5cdFx0XHRcdFx0XHRzZGtBcHBJZCxcclxuXHRcdFx0XHRcdFx0dXNlclNpZ1xyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCdlbnRlclJvb20nLCBwYXJhbSk7XHJcblx0XHRcdFx0XHR0aGlzLnRydGNDbG91ZC5lbnRlclJvb20ocGFyYW0sIGFwcFNjZW5lKTtcclxuXHRcdFx0XHRcdHRoaXMuc2RrQXBwSWQgJiYgdW5pLiRlbnRlclJvb21TdWNjZXNzVXBsb2FkKHRoaXMuc2RrQXBwSWQpO1xyXG5cclxuXHRcdFx0XHRcdGxldCB1c2VySWQgPSB0aGlzLnVzZXJJZDtcclxuXHRcdFx0XHRcdGlmICh0aGlzLm1lZXRpbmdCdXNpbmVzc1VzZXIudXNlcklkID09IHVzZXJJZCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLm1lZXRpbmdCdXNpbmVzc1VzZXIubWVldGluZyA9IHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAodGhpcy5tZWV0aW5nQ3VzdG9tZXJVc2VyLnVzZXJJZCA9PSB1c2VySWQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5tZWV0aW5nQ3VzdG9tZXJVc2VyLm1lZXRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKHRoaXMubWVldGluZ1NlcnZpY2VVc2VyLnVzZXJJZCA9PSB1c2VySWQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5tZWV0aW5nU2VydmljZVVzZXIubWVldGluZyA9IHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0LnVuc2hpZnQoe1xyXG5cdFx0XHRcdFx0XHRjb250ZW50OiBgZW50ZXJSb29tIGVycm9yID0gJHtKU09OLnN0cmluZ2lmeShlcnJvcil9YFxyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdHRoaXMuc2RrQXBwSWQgJiYgdW5pLiRlbnRlclJvb21GYWlsZWRVcGxvYWQodGhpcy5zZGtBcHBJZCwgSlNPTi5zdHJpbmdpZnkoZXJyb3IpKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdGV4aXRSb29tKCkge1xyXG5cdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHR0aGlzLnN0YXJ0aW5nID0gZmFsc2U7XHJcblx0XHRcdFx0XHR0aGlzLnN0b3BMb2NhbFByZXZpZXcoKTtcclxuXHRcdFx0XHRcdHRoaXMuc3RvcFJlbW90ZVZpZXcoKTtcclxuXHRcdFx0XHRcdHRoaXMudHJ0Y0Nsb3VkLmV4aXRSb29tKCk7XHJcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdFx0Ly8gVE9ETyBoYW5kbGUgdGhlIGV4Y2VwdGlvblxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0c3RhcnRMb2NhbFByZXZpZXcoKSB7XHJcblx0XHRcdFx0dGhpcy4kbmV4dFRpY2soKCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ3N0YXJ0TG9jYWxQcmV2aWV3JywgdGhpcy51c2VySWQpO1xyXG5cdFx0XHRcdFx0dGhpcy5tZWV0aW5nID0gdHJ1ZTtcclxuXHRcdFx0XHRcdHRoaXMudHJ0Y0Nsb3VkLnN0YXJ0TG9jYWxQcmV2aWV3KHRoaXMuaXNGcm9udENhbWVyYSwgdGhpcy51c2VySWQpO1xyXG5cdFx0XHRcdFx0dGhpcy50cnRjQ2xvdWQuc3RhcnRMb2NhbEF1ZGlvKFRSVENBdWRpb1F1YWxpdHkuVFJUQ0F1ZGlvUXVhbGl0eURlZmF1bHQpO1xyXG5cdFx0XHRcdFx0dGhpcy5zZGtBcHBJZCAmJiB1bmkuJHN0YXJ0TG9jYWxQcmV2aWV3VXBsb2FkKHRoaXMuc2RrQXBwSWQpO1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH0sXHJcblx0XHRcdHN0b3BMb2NhbFByZXZpZXcoKSB7XHJcblx0XHRcdFx0dGhpcy50cnRjQ2xvdWQuc3RvcExvY2FsUHJldmlldygpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRzdGFydFJlbW90ZVZpZXcodXNlcklkKSB7XHJcblx0XHRcdFx0dGhpcy4kbmV4dFRpY2soKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy50cnRjQ2xvdWQuc3RhcnRSZW1vdGVWaWV3KHVzZXJJZCwgdGhpcy5zdHJlYW1UeXBlLCB1c2VySWQpO1xyXG5cdFx0XHRcdFx0dGhpcy5zZGtBcHBJZCAmJiB1bmkuJHN0YXJ0UmVtb3RlVmlld1N1Y2Nlc3NVcGxvYWQodGhpcy5zZGtBcHBJZCk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0aWYgKHRoaXMubWVldGluZ0J1c2luZXNzVXNlci51c2VySWQgPT0gdXNlcklkKSB7XHJcblx0XHRcdFx0XHR0aGlzLm1lZXRpbmdCdXNpbmVzc1VzZXIubWVldGluZyA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh0aGlzLm1lZXRpbmdDdXN0b21lclVzZXIudXNlcklkID09IHVzZXJJZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5tZWV0aW5nQ3VzdG9tZXJVc2VyLm1lZXRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAodGhpcy5tZWV0aW5nU2VydmljZVVzZXIudXNlcklkID09IHVzZXJJZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5tZWV0aW5nU2VydmljZVVzZXIubWVldGluZyA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRzdG9wUmVtb3RlVmlldyh1c2VySWQpIHtcclxuXHRcdFx0XHR0aGlzLnRydGNDbG91ZC5zdG9wUmVtb3RlVmlldyh1c2VySWQsIHRoaXMuc3RyZWFtVHlwZSk7XHJcblx0XHRcdFx0aWYgKHRoaXMubWVldGluZ0J1c2luZXNzVXNlci51c2VySWQgPT0gdXNlcklkKSB7XHJcblx0XHRcdFx0XHR0aGlzLm1lZXRpbmdCdXNpbmVzc1VzZXIubWVldGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAodGhpcy5tZWV0aW5nQ3VzdG9tZXJVc2VyLnVzZXJJZCA9PSB1c2VySWQpIHtcclxuXHRcdFx0XHRcdHRoaXMubWVldGluZ0N1c3RvbWVyVXNlci5tZWV0aW5nID0gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh0aGlzLm1lZXRpbmdTZXJ2aWNlVXNlci51c2VySWQgPT0gdXNlcklkKSB7XHJcblx0XHRcdFx0XHR0aGlzLm1lZXRpbmdTZXJ2aWNlVXNlci5tZWV0aW5nID0gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0fSxcclxuXHRcdFx0Ly8g5ZCs562S44CB5YWN5o+QIOWIh+aNolxyXG5cdFx0XHRzd2l0Y2hBdWRpb1JvdXRlKCkge1xyXG5cdFx0XHRcdHRoaXMuYXVkaW9Sb3V0ZSA9IHRoaXMuYXVkaW9Sb3V0ZSA9PT0gVFJUQ0Nsb3VkRGVmLlRSVENfQVVESU9fUk9VVEVfU1BFQUtFUiA/IFRSVENDbG91ZERlZlxyXG5cdFx0XHRcdFx0LlRSVENfQVVESU9fUk9VVEVfRUFSUElFQ0UgOiBUUlRDQ2xvdWREZWYuVFJUQ19BVURJT19ST1VURV9TUEVBS0VSO1xyXG5cdFx0XHRcdHRoaXMudHJ0Y0Nsb3VkLnNldEF1ZGlvUm91dGUodGhpcy5hdWRpb1JvdXRlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0aGFuZGxlRXZlbnRzKCkge1xyXG5cdFx0XHRcdHRoaXMudHJ0Y0Nsb3VkLm9uKCdvbldhcm5pbmcnLCAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IGBvbldhcm5pbmc6ICR7SlNPTi5zdHJpbmdpZnkocmVzKX1gLFxyXG5cdFx0XHRcdFx0XHRpY29uOiAnbm9uZScsXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHR0aGlzLnRydGNDbG91ZC5vbignb25FcnJvcicsIChyZXMpID0+IHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCdvbkVycm9yJywgcmVzKVxyXG5cdFx0XHRcdFx0dGhpcy5tZXNzYWdlTGlzdC51bnNoaWZ0KHtcclxuXHRcdFx0XHRcdFx0Y29udGVudDogYGVycm9yOiAke0pTT04uc3RyaW5naWZ5KHJlcyl9YFxyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdHRoaXMuc2RrQXBwSWQgJiYgdW5pLiRvbkVycm9yVXBsb2FkKHRoaXMuc2RrQXBwSWQsIEpTT04uc3RyaW5naWZ5KHJlcykpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHRoaXMudHJ0Y0Nsb3VkLm9uKCdvbkVudGVyUm9vbScsIChyZXN1bHQpID0+IHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGAtIG9uRW50ZXJSb29tID0gJHtyZXN1bHR9YCk7XHJcblx0XHRcdFx0XHRpZiAocmVzdWx0ID4gMCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0LnVuc2hpZnQoe1xyXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IGDov5vmiL/miJDlip/vvIzogJfml7Y6ICR7cmVzdWx0fW1zYFxyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYGVudGVyIHJvb20gZmFpbGVk77yMZXJyb3IgY29kZSA9ICR7cmVzdWx0fWApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHRoaXMudHJ0Y0Nsb3VkLm9uKCdvbkV4aXRSb29tJywgKHJlYXNvbikgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgcmVhc29uTGlzdCA9IFsn5Li75Yqo6LCD55SoIGV4aXRSb29tIOmAgOaIvycsICfooqvmnI3liqHlmajouKLlh7rlvZPliY3miL/pl7QnLCAn5b2T5YmN5oi/6Ze05pW05Liq6KKr6Kej5pWjJ107XHJcblx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0LnVuc2hpZnQoe1xyXG5cdFx0XHRcdFx0XHRjb250ZW50OiBg6YCA5oi/ICR7cmVhc29uTGlzdFtyZWFzb25dfWBcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0dGhpcy5tZWV0aW5nID0gZmFsc2U7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dGhpcy50cnRjQ2xvdWQub24oJ29uRmlyc3RWaWRlb0ZyYW1lJywgKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coYOa4suafk+eahOmmluW4p+eUu+mdouWTjeW6lCA9ICR7SlNPTi5zdHJpbmdpZnkocmVzKX1gKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHR0aGlzLnRydGNDbG91ZC5vbignb25SZW1vdGVVc2VyRW50ZXJSb29tJywgKHVzZXJJZCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ29uUmVtb3RlVXNlckVudGVyUm9vbScsIHVzZXJJZCk7XHJcblx0XHRcdFx0XHR0aGlzLnN0YXJ0UmVtb3RlVmlldyh1c2VySWQpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHRoaXMudHJ0Y0Nsb3VkLm9uKCdvblJlbW90ZVVzZXJMZWF2ZVJvb20nLCAodXNlcklkKSA9PiB7XHJcblx0XHRcdFx0XHRsZXQgaW5kZXggPSB0aGlzLm1lZXRpbmdVc2Vycy5maW5kSW5kZXgodCA9PiB0LnVzZXJJZCA9PSB1c2VySWQpO1xyXG5cdFx0XHRcdFx0aWYgKGluZGV4ID49IDApIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5tZWV0aW5nVXNlcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICh0aGlzLm1lZXRpbmdVc2Vycy5sZW5ndGggPCAyKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMubWVldGluZ1VzZXJzLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdHR5cGU6ICfnrYnlvoXov5vlhaUnXHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0LnVuc2hpZnQoe1xyXG5cdFx0XHRcdFx0XHRjb250ZW50OiBg55So5oi356a75byA5oi/6Ze0OiB1c2VySWQgPSAke3VzZXJJZH1gXHJcblx0XHRcdFx0XHR9KVxyXG5cclxuXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dGhpcy50cnRjQ2xvdWQub24oJ29uVXNlclZpZGVvQXZhaWxhYmxlJywgKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3Qge1xyXG5cdFx0XHRcdFx0XHR1c2VySWQsXHJcblx0XHRcdFx0XHRcdGF2YWlsYWJsZVxyXG5cdFx0XHRcdFx0fSA9IHJlcztcclxuXHRcdFx0XHRcdGlmIChhdmFpbGFibGUpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zdGFydExvY2FsUHJldmlldygpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKHVzZXJJZCAmJiBhdmFpbGFibGUpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zdGFydFJlbW90ZVZpZXcodXNlcklkKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuc3RvcFJlbW90ZVZpZXcodXNlcklkKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHR0aGlzLnRydGNDbG91ZC5vbignb25FeGl0Um9vbScsIChyZXMpID0+IHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGBvbkV4aXRSb29tID0gJHtKU09OLnN0cmluZ2lmeShyZXMpfWApO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0fVxyXG5cdH1cclxuPC9zY3JpcHQ+XHJcbjxzdHlsZSBzcmM9XCJAL3BhZ2VzL21lZXRpbmcvbWVldGluZy5jc3NcIj48L3N0eWxlPlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///46\n"); +eval("/* WEBPACK VAR INJECTION */(function(__webpack_provided_uni_dot_requireNativePlugin, __f__) {Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = void 0;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar _vuex = __webpack_require__(/*! vuex */ 12);\n\n\nvar _permission = _interopRequireDefault(__webpack_require__(/*! @/TrtcCloud/permission.js */ 13));\nvar _index = _interopRequireDefault(__webpack_require__(/*! @/TrtcCloud/lib/index */ 14));\nvar _TrtcDefines = __webpack_require__(/*! @/TrtcCloud/lib/TrtcDefines */ 16);\n\n\n\n\n\nvar _GenerateTestUserSig = __webpack_require__(/*! @/debug/GenerateTestUserSig */ 17);\n\n\nvar _TrtcLocalView = _interopRequireDefault(__webpack_require__(/*! @/TrtcCloud/view/TrtcLocalView */ 19));\nvar _TrtcRemoteView = _interopRequireDefault(__webpack_require__(/*! @/TrtcCloud/view/TrtcRemoteView */ 25));\n\n\nvar _index2 = _interopRequireDefault(__webpack_require__(/*! @/apis/index.js */ 30));\nvar _config = _interopRequireDefault(__webpack_require__(/*! @/common/config/config.js */ 38));\nvar _service = _interopRequireDefault(__webpack_require__(/*! @/service/service.js */ 33));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function ownKeys(object, enumerableOnly) {var keys = Object.keys(object);if (Object.getOwnPropertySymbols) {var symbols = Object.getOwnPropertySymbols(object);if (enumerableOnly) symbols = symbols.filter(function (sym) {return Object.getOwnPropertyDescriptor(object, sym).enumerable;});keys.push.apply(keys, symbols);}return keys;}function _objectSpread(target) {for (var i = 1; i < arguments.length; i++) {var source = arguments[i] != null ? arguments[i] : {};if (i % 2) {ownKeys(Object(source), true).forEach(function (key) {_defineProperty(target, key, source[key]);});} else if (Object.getOwnPropertyDescriptors) {Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));} else {ownKeys(Object(source)).forEach(function (key) {Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));});}}return target;}function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });} else {obj[key] = value;}return obj;}var TrtcEvent = __webpack_provided_uni_dot_requireNativePlugin('globalEvent');\nvar socketTask = getApp().globalData.socketTask;var _default =\n{\n components: {\n TrtcLocalView: _TrtcLocalView.default,\n TrtcRemoteView: _TrtcRemoteView.default },\n\n data: function data() {\n return {\n hasInvite: false,\n //我\n meetingUserMy: {\n userId: 0 },\n\n\n //需方\n meetingCustomerUser: {\n userId: 0 },\n\n\n //供方\n meetingBusinessUser: {\n userId: 0 },\n\n\n //客服\n meetingServiceUser: {\n userId: 0 },\n\n\n num: 10,\n trtcCloud: null,\n sdkAppId: 0,\n userSig: '',\n roomId: 0,\n userId: '',\n starting: false,\n userType: '等待进入',\n appScene: _TrtcDefines.TRTCAppScene.TRTCAppSceneVideoCall, // TRTCAppSceneVideoCall\n isFrontCamera: true,\n streamType: _TrtcDefines.TRTCVideoStreamType.TRTCVideoStreamTypeBig,\n remoteUserId: '',\n audioRoute: _TrtcDefines.TRTCCloudDef.TRTC_AUDIO_ROUTE_SPEAKER,\n messageList: [],\n messageContent: '',\n myUserInfo: '',\n room: {},\n shopId: 0,\n sellerUserId: 0,\n\n param: {},\n joinType: 'customer' };\n\n },\n computed: _objectSpread({},\n (0, _vuex.mapState)(['user', 'statistics', 'common'])),\n\n onLoad: function onLoad(e) {var _this = this;\n __f__(\"log\", 'onload e', e, \" at pages/meeting/meeting.nvue:190\");\n __f__(\"log\", 'user', this.user, \" at pages/meeting/meeting.nvue:191\");\n this.param = e;\n\n //加入类型,是以什么身份加入的\n var joinType = e.joinType || 'customer';\n __f__(\"log\", 'onLoad joinType', joinType, \" at pages/meeting/meeting.nvue:196\");\n this.joinType = joinType;\n\n this.roomId = e.roomId;\n this.sellerUserId = e.userid;\n this.userId = 'user_' + this.user.id;\n this.meetingUserMy = {\n userId: this.userId,\n id: this.user.id };\n\n this.shopId = e.shop_id;\n\n if (joinType == 'customer') {\n //需方\n this.createRoom({\n \"name\": \"测试房间\",\n \"bodyText\": \"\",\n \"roomNo\": \"\",\n \"description\": \"\",\n \"clientId\": \"\",\n // \"productId\": e.goods_id,\n \"shopId\": e.shop_id });\n\n this.meetingCustomerUser = _objectSpread({},\n this.meetingUserMy);\n\n } else {\n this.room = {\n id: e.roomId,\n RoomNo: e.roomId };\n\n\n this.meetingCustomerUser = {\n userId: 'user_' + e.customerid.toString(),\n id: e.customerid };\n\n }\n\n if (joinType == 'seller') {\n //供方\n this.meetingBusinessUser = {\n userId: this.meetingUserMy.userId,\n id: this.meetingUserMy.id };\n\n\n }\n if (joinType == 'service') {\n //平台客服\n this.meetingServiceUser = {\n userId: this.meetingUserMy.userId,\n id: this.meetingUserMy.id };\n\n }\n\n __f__(\"log\", 'onLoad meetingBusinessUser', this.meetingBusinessUser, \" at pages/meeting/meeting.nvue:250\");\n __f__(\"log\", 'onLoad meetingServiceUser', this.meetingServiceUser, \" at pages/meeting/meeting.nvue:251\");\n\n // this.getUserInfo(this.user.id,joinType);\n this.joinRoom();\n\n this.$forceUpdate();\n\n //文字聊天\n uni.$on('socketMessage', function (data) {\n __f__(\"log\", 'socketMessage', data, \" at pages/meeting/meeting.nvue:260\");\n if (data.messageType == 'send_to_room') {\n _this.messageList.push({\n author: data.realName,\n content: data.toMessage });\n\n }\n if (data.messageType == 'join') {\n var userid = data.userIntId;\n if (userid != _this.user.id) {\n //有用户加入房间\n var _joinType = data.messageContent;\n if (_joinType == 'seller') {\n _this.meetingBusinessUser.userId = 'user_' + userid;\n _this.meetingBusinessUser.id = userid;\n }\n if (_joinType == 'service') {\n _this.meetingServiceUser.userId = 'user_' + userid;\n _this.meetingServiceUser.id = userid;\n }\n }\n }\n });\n },\n onShow: function onShow() {},\n onHide: function onHide() {},\n mounted: function mounted() {\n if (uni.getSystemInfoSync().platform === 'android') {\n _permission.default.requestAndroidPermission('android.permission.RECORD_AUDIO');\n _permission.default.requestAndroidPermission('android.permission.CAMERA');\n }\n this.initUserSign();\n },\n onUnload: function onUnload() {\n this.destroyInstance();\n __f__(\"log\", '- onUnload', \" at pages/meeting/meeting.nvue:295\");\n },\n onBackPress: function onBackPress() {\n this.destroyInstance();\n },\n methods: {\n getUserInfo: function getUserInfo(userid, type) {var _this2 = this;\n __f__(\"log\", 'getUserInfo', userid, type, \" at pages/meeting/meeting.nvue:302\");\n _index2.default.message.getUserTypeInfo(userid).then(function (res) {\n __f__(\"log\", 'getUserTypeInfo', res, \" at pages/meeting/meeting.nvue:304\");\n if (type == 'customer') {\n __f__(\"log\", 'getUserTypeInfo type=customer', \" at pages/meeting/meeting.nvue:306\");\n _this2.meetingCustomerUser.userInfo = res.data[0];\n }\n if (type == 'seller') {\n __f__(\"log\", 'getUserTypeInfo type=seller', \" at pages/meeting/meeting.nvue:310\");\n _this2.meetingBusinessUser.userInfo = res.data[0];\n that.messageList.push({\n author: '系统',\n content: '供方加入房间' });\n\n }\n if (type == 'service') {\n __f__(\"log\", 'getUserTypeInfo type=service', \" at pages/meeting/meeting.nvue:318\");\n // this.meetingServiceUser.userInfo = res.data[0];\n that.messageList.push({\n author: '系统',\n content: '客服加入房间' });\n\n }\n __f__(\"log\", 'getUserTypeInfo meetingServiceUser', _this2.meetingServiceUser, \" at pages/meeting/meeting.nvue:325\");\n });\n },\n joinRoom: function joinRoom() {\n var param = {\n method: 'join',\n IsRoom: true,\n RoomNo: this.roomId,\n RoomName: this.room.RoomName,\n messageContent: this.joinType,\n token: _service.default.getTokenChaoge() };\n\n __f__(\"log\", 'joinRoom', param, \" at pages/meeting/meeting.nvue:337\");\n socketTask.send({\n data: JSON.stringify(param),\n success: function success(res) {},\n fail: function fail(e) {},\n complete: function complete() {} });\n\n },\n initUserSign: function initUserSign() {var _this3 = this;\n if (this.userId) {\n __f__(\"log\", 'initUserSign', this.userId, \" at pages/meeting/meeting.nvue:347\");\n // 生成 userSig\n var _genTestUserSig =\n\n\n (0, _GenerateTestUserSig.genTestUserSig)(this.userId),sdkAppId = _genTestUserSig.sdkAppId,userSig = _genTestUserSig.userSig;\n this.sdkAppId = sdkAppId;\n this.userSig = userSig;\n __f__(\"log\", 'sdkAppId,userSig', sdkAppId, userSig, \" at pages/meeting/meeting.nvue:355\");\n if (!sdkAppId || !userSig) {\n uni.showToast({\n title: '请填写 sdkAppId、userSig',\n icon: 'none' });\n\n }\n } else {\n setTimeout(function () {\n _this3.initUserSign();\n }, 200);\n }\n },\n handleToSubmitOrder: function handleToSubmitOrder() {\n uni.navigateBack();\n },\n //邀请商家客服\n handleInviteBusinessUser: function handleInviteBusinessUser() {\n _index2.default.message.getInviteBusinessUserJoin(this.shopId, this.room.RoomNo, this.sellerUserId).then(function (res) {});\n },\n //邀请平台客服\n handleInviteServiceUser: function handleInviteServiceUser() {var _this4 = this;\n uni.showLoading();\n _index2.default.message.getInviteServiceUserJoin(this.room.RoomNo, 'joinMultiplayerVideo').then(function (res) {\n uni.showToast({\n title: '邀请成功' });\n\n _this4.hasInvite = true;\n }).finally(function () {\n uni.hideLoading();\n });\n },\n createRoom: function createRoom(data) {var _this5 = this;\n uni.showLoading({\n title: '正在创建房间' });\n\n _index2.default.message.postAddRoom(data).then(function (res) {\n _this5.room = res.data;\n _this5.roomId = res.data.RoomNo;\n _this5.handleInviteBusinessUser();\n _this5.joinRoom();\n }).finally(function () {\n uni.hideLoading();\n });\n },\n\n sendMessage: function sendMessage() {\n var that = this;\n that.messageList.push({\n author: '我',\n content: that.messageContent });\n\n that.messageContent = '';\n socketTask.send({\n data: JSON.stringify({\n formUserId: this.userId,\n contentType: \"\",\n content: this.messageContent,\n sendTime: new Date(),\n method: 'send_to_room',\n RoomNo: this.room.RoomNo,\n RoomName: this.room.Name,\n IsRoom: true }),\n\n success: function success(res) {},\n fail: function fail(e) {},\n complete: function complete() {} });\n\n },\n handleStartMeeting: function handleStartMeeting() {var _this6 = this;\n this.starting = true;\n this.$nextTick(function () {\n _this6.createTrtcCloud();\n _this6.enterRoom();\n _this6.startLocalPreview();\n });\n },\n handleEndtMeeting: function handleEndtMeeting() {\n this.meeting = false;\n this.stopLocalPreview();\n this.exitRoom();\n this.destroyInstance();\n },\n\n bindInputChange: function bindInputChange(event, type) {\n var value = event.detail.value;\n switch (type) {\n case 'roomId':{\n this.roomId = value;\n break;\n }\n case 'userId':{\n this.userId = value;\n break;\n }}\n\n },\n destroyInstance: function destroyInstance() {\n if (this.trtcCloud) {\n _index.default.destroyInstance();\n this.trtcCloud = null;\n }\n },\n createTrtcCloud: function createTrtcCloud() {\n __f__(\"log\", 'createTrtcCloud', this.sdkAppId, \" at pages/meeting/meeting.nvue:459\");\n this.trtcCloud = _index.default.createInstance();\n __f__(\"log\", 'this.trtcCloud', this.trtcCloud, \" at pages/meeting/meeting.nvue:461\");\n this.handleEvents();\n this.sdkAppId && uni.$createTrtcCloudUpload(this.sdkAppId);\n },\n enterRoom: function enterRoom() {\n try {var\n\n sdkAppId =\n\n\n this.sdkAppId,appScene = this.appScene,userSig = this.userSig;\n var param = {\n roomId: 0,\n strRoomId: this.room.RoomNo,\n userId: this.userId,\n sdkAppId: sdkAppId,\n userSig: userSig };\n\n __f__(\"log\", 'enterRoom', param, \" at pages/meeting/meeting.nvue:479\");\n this.trtcCloud.enterRoom(param, appScene);\n this.sdkAppId && uni.$enterRoomSuccessUpload(this.sdkAppId);\n\n var userId = this.userId;\n if (this.meetingBusinessUser.userId == userId) {\n this.meetingBusinessUser.meeting = true;\n }\n if (this.meetingCustomerUser.userId == userId) {\n this.meetingCustomerUser.meeting = true;\n }\n if (this.meetingServiceUser.userId == userId) {\n this.meetingServiceUser.meeting = true;\n }\n\n } catch (error) {\n this.messageList.unshift({\n content: \"enterRoom error = \".concat(JSON.stringify(error)) });\n\n this.sdkAppId && uni.$enterRoomFailedUpload(this.sdkAppId, JSON.stringify(error));\n }\n },\n exitRoom: function exitRoom() {\n try {\n this.starting = false;\n this.stopLocalPreview();\n this.stopRemoteView();\n this.trtcCloud.exitRoom();\n } catch (e) {\n // TODO handle the exception\n }\n },\n startLocalPreview: function startLocalPreview() {var _this7 = this;\n this.$nextTick(function () {\n __f__(\"log\", 'startLocalPreview', _this7.userId, \" at pages/meeting/meeting.nvue:513\");\n _this7.meeting = true;\n _this7.trtcCloud.startLocalPreview(_this7.isFrontCamera, _this7.userId);\n _this7.trtcCloud.startLocalAudio(_TrtcDefines.TRTCAudioQuality.TRTCAudioQualityDefault);\n _this7.sdkAppId && uni.$startLocalPreviewUpload(_this7.sdkAppId);\n });\n },\n stopLocalPreview: function stopLocalPreview() {\n this.trtcCloud.stopLocalPreview();\n },\n startRemoteView: function startRemoteView(userId) {var _this8 = this;\n this.$nextTick(function () {\n _this8.trtcCloud.startRemoteView(userId, _this8.streamType, userId);\n _this8.sdkAppId && uni.$startRemoteViewSuccessUpload(_this8.sdkAppId);\n });\n if (this.meetingBusinessUser.userId == userId) {\n this.meetingBusinessUser.meeting = true;\n }\n if (this.meetingCustomerUser.userId == userId) {\n this.meetingCustomerUser.meeting = true;\n }\n if (this.meetingServiceUser.userId == userId) {\n this.meetingServiceUser.meeting = true;\n }\n },\n stopRemoteView: function stopRemoteView(userId) {\n this.trtcCloud.stopRemoteView(userId, this.streamType);\n if (this.meetingBusinessUser.userId == userId) {\n this.meetingBusinessUser.meeting = false;\n }\n if (this.meetingCustomerUser.userId == userId) {\n this.meetingCustomerUser.meeting = false;\n }\n if (this.meetingServiceUser.userId == userId) {\n this.meetingServiceUser.meeting = false;\n }\n\n },\n // 听筒、免提 切换\n switchAudioRoute: function switchAudioRoute() {\n this.audioRoute = this.audioRoute === _TrtcDefines.TRTCCloudDef.TRTC_AUDIO_ROUTE_SPEAKER ? _TrtcDefines.TRTCCloudDef.\n TRTC_AUDIO_ROUTE_EARPIECE : _TrtcDefines.TRTCCloudDef.TRTC_AUDIO_ROUTE_SPEAKER;\n this.trtcCloud.setAudioRoute(this.audioRoute);\n },\n handleEvents: function handleEvents() {var _this9 = this;\n this.trtcCloud.on('onWarning', function (res) {\n uni.showToast({\n title: \"onWarning: \".concat(JSON.stringify(res)),\n icon: 'none' });\n\n });\n this.trtcCloud.on('onError', function (res) {\n __f__(\"log\", 'onError', res, \" at pages/meeting/meeting.nvue:565\");\n _this9.messageList.unshift({\n content: \"error: \".concat(JSON.stringify(res)) });\n\n _this9.sdkAppId && uni.$onErrorUpload(_this9.sdkAppId, JSON.stringify(res));\n });\n this.trtcCloud.on('onEnterRoom', function (result) {\n __f__(\"log\", \"- onEnterRoom = \".concat(result), \" at pages/meeting/meeting.nvue:572\");\n if (result > 0) {\n _this9.messageList.unshift({\n content: \"\\u8FDB\\u623F\\u6210\\u529F\\uFF0C\\u8017\\u65F6: \".concat(result, \"ms\") });\n\n } else {\n __f__(\"log\", \"enter room failed\\uFF0Cerror code = \".concat(result), \" at pages/meeting/meeting.nvue:578\");\n }\n });\n this.trtcCloud.on('onExitRoom', function (reason) {\n var reasonList = ['主动调用 exitRoom 退房', '被服务器踢出当前房间', '当前房间整个被解散'];\n _this9.messageList.unshift({\n content: \"\\u9000\\u623F \".concat(reasonList[reason]) });\n\n _this9.meeting = false;\n });\n this.trtcCloud.on('onFirstVideoFrame', function (res) {\n __f__(\"log\", \"\\u6E32\\u67D3\\u7684\\u9996\\u5E27\\u753B\\u9762\\u54CD\\u5E94 = \".concat(JSON.stringify(res)), \" at pages/meeting/meeting.nvue:589\");\n });\n this.trtcCloud.on('onRemoteUserEnterRoom', function (userId) {\n __f__(\"log\", 'onRemoteUserEnterRoom', userId, \" at pages/meeting/meeting.nvue:592\");\n _this9.messageList.unshift({\n content: \"\\u7528\\u6237\".concat(userId, \"\\u52A0\\u5165\\u89C6\\u9891\\u804A\\u5929\") });\n\n _this9.startRemoteView(userId);\n });\n this.trtcCloud.on('onRemoteUserLeaveRoom', function (userId) {\n var index = _this9.meetingUsers.findIndex(function (t) {return t.userId == userId;});\n if (index >= 0) {\n _this9.meetingUsers.splice(index, 1);\n }\n if (_this9.meetingUsers.length < 2) {\n _this9.meetingUsers.push({\n type: '等待进入' });\n\n }\n _this9.messageList.unshift({\n content: \"\\u7528\\u6237\\u79BB\\u5F00\\u623F\\u95F4: userId = \".concat(userId) });\n\n\n\n });\n this.trtcCloud.on('onUserVideoAvailable', function (res) {var\n\n userId =\n\n res.userId,available = res.available;\n if (available) {\n _this9.startLocalPreview();\n }\n if (userId && available) {\n _this9.startRemoteView(userId);\n } else {\n _this9.stopRemoteView(userId);\n }\n });\n this.trtcCloud.on('onExitRoom', function (res) {\n __f__(\"log\", \"onExitRoom = \".concat(JSON.stringify(res)), \" at pages/meeting/meeting.nvue:629\");\n });\n } } };exports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-hbuilderx/packages/uni-app-plus-nvue/dist/require-native-plugin.js */ 10)[\"default\"], __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 11)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vcGFnZXMvbWVldGluZy9tZWV0aW5nLm52dWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0dBOzs7QUFHQTtBQUNBO0FBQ0E7Ozs7OztBQU1BOzs7QUFHQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsMkYsd25DQUpBO0FBS0EsZ0Q7QUFDQTtBQUNBO0FBQ0EseUNBREE7QUFFQSwyQ0FGQSxFQURBOztBQUtBLE1BTEEsa0JBS0E7QUFDQTtBQUNBLHNCQURBO0FBRUE7QUFDQTtBQUNBLGlCQURBLEVBSEE7OztBQU9BO0FBQ0E7QUFDQSxpQkFEQSxFQVJBOzs7QUFZQTtBQUNBO0FBQ0EsaUJBREEsRUFiQTs7O0FBaUJBO0FBQ0E7QUFDQSxpQkFEQSxFQWxCQTs7O0FBc0JBLGFBdEJBO0FBdUJBLHFCQXZCQTtBQXdCQSxpQkF4QkE7QUF5QkEsaUJBekJBO0FBMEJBLGVBMUJBO0FBMkJBLGdCQTNCQTtBQTRCQSxxQkE1QkE7QUE2QkEsc0JBN0JBO0FBOEJBLCtEQTlCQSxFQThCQTtBQUNBLHlCQS9CQTtBQWdDQSx5RUFoQ0E7QUFpQ0Esc0JBakNBO0FBa0NBLG9FQWxDQTtBQW1DQSxxQkFuQ0E7QUFvQ0Esd0JBcENBO0FBcUNBLG9CQXJDQTtBQXNDQSxjQXRDQTtBQXVDQSxlQXZDQTtBQXdDQSxxQkF4Q0E7O0FBMENBLGVBMUNBO0FBMkNBLDBCQTNDQTs7QUE2Q0EsR0FuREE7QUFvREE7QUFDQSx1REFEQSxDQXBEQTs7QUF1REEsUUF2REEsa0JBdURBLENBdkRBLEVBdURBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBREE7QUFFQSxzQkFGQTs7QUFJQTs7QUFFQTtBQUNB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQTdPQTtBQThPQSxrQkE5T0EsMEJBOE9BLE1BOU9BLEVBOE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0ExUEE7QUEyUEE7QUFDQSxvQkE1UEEsOEJBNFBBO0FBQ0E7QUFDQSwrQkFEQSxHQUNBLGtEQURBO0FBRUE7QUFDQSxLQWhRQTtBQWlRQSxnQkFqUUEsMEJBaVFBO0FBQ0E7QUFDQTtBQUNBLDBEQURBO0FBRUEsc0JBRkE7O0FBSUEsT0FMQTtBQU1BO0FBQ0E7QUFDQTtBQUNBLHdEQURBOztBQUdBO0FBQ0EsT0FOQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0ZBREE7O0FBR0EsU0FKQSxNQUlBO0FBQ0E7QUFDQTtBQUNBLE9BVEE7QUFVQTtBQUNBO0FBQ0E7QUFDQSw2REFEQTs7QUFHQTtBQUNBLE9BTkE7QUFPQTtBQUNBO0FBQ0EsT0FGQTtBQUdBO0FBQ0E7QUFDQTtBQUNBLHdGQURBOztBQUdBO0FBQ0EsT0FOQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBREE7O0FBR0E7QUFDQTtBQUNBLG1GQURBOzs7O0FBS0EsT0FmQTtBQWdCQTs7QUFFQSxjQUZBOztBQUlBLFdBSkEsQ0FFQSxNQUZBLENBR0EsU0FIQSxHQUlBLEdBSkEsQ0FHQSxTQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBRkEsTUFFQTtBQUNBO0FBQ0E7QUFDQSxPQWJBO0FBY0E7QUFDQTtBQUNBLE9BRkE7QUFHQSxLQTNVQSxFQXRLQSxFIiwiZmlsZSI6IjQ2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG5cdDx2aWV3PlxyXG5cdFx0PGltYWdlIHNyYz1cIi4uLy4uL3N0YXRpYy9ob21lL2JhbmNrMi5wbmdcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7XCIgbW9kZT1cIndpZHRoRml4XCI+PC9pbWFnZT5cclxuXHRcdDx2aWV3IGNsYXNzPVwiYmFja1wiPlxyXG5cdFx0XHQ8IS0tIOW5s+WPsOWuouacjSAtLT5cclxuXHRcdFx0PHZpZXcgY2xhc3M9XCJsaXN0MVwiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGNlbnRlcjtvdmVyZmxvdzogaGlkZGVuO1wiPlxyXG5cdFx0XHRcdDx0ZXh0IGNsYXNzPVwibmFtZVwiIHYtaWY9XCIhbWVldGluZ1NlcnZpY2VVc2VyLnVzZXJJZFwiPnt7ICfnrYnlvoXlrqLmnI3ov5vlhaUnIH19PC90ZXh0PlxyXG5cdFx0XHRcdDx0ZXh0IGNsYXNzPVwibmFtZVwiIHYtZWxzZT7lrqLmnI1cclxuXHRcdFx0XHRcdHt7IG1lZXRpbmdTZXJ2aWNlVXNlci51c2VySW5mbyAmJiBtZWV0aW5nU2VydmljZVVzZXIudXNlckluZm8ubmFtZSB8fCAnJyB9fTwvdGV4dD5cclxuXHRcdFx0XHQ8dmlldyBzdHlsZT1cImhlaWdodDozNjBycHg7ZmxleC1kaXJlY3Rpb246IHJvdztqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjttYXJnaW46IDAgYXV0bztcIj5cclxuXHRcdFx0XHRcdDx2aWV3XHJcblx0XHRcdFx0XHRcdDpjbGFzcz1cInsnaGlkZSc6IShtZWV0aW5nU2VydmljZVVzZXIudXNlcklkICYmIHVzZXJJZCA9PSBtZWV0aW5nU2VydmljZVVzZXIudXNlcklkICYmIG1lZXRpbmdTZXJ2aWNlVXNlci5tZWV0aW5nKX1cIj5cclxuXHRcdFx0XHRcdFx0PHRydGMtbG9jYWwtdmlldyA6dmlld0lkPVwibWVldGluZ1NlcnZpY2VVc2VyLnVzZXJJZFwiIHN0eWxlPVwiaGVpZ2h0OiAzODBycHg7d2lkdGg6IDM2MHJweDtcIj5cclxuXHRcdFx0XHRcdFx0PC90cnRjLWxvY2FsLXZpZXc+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8dmlld1xyXG5cdFx0XHRcdFx0XHQ6Y2xhc3M9XCJ7J2hpZGUnOiEobWVldGluZ1NlcnZpY2VVc2VyLnVzZXJJZCAmJiB1c2VySWQgIT0gbWVldGluZ1NlcnZpY2VVc2VyLnVzZXJJZCAmJiBtZWV0aW5nU2VydmljZVVzZXIubWVldGluZyl9XCI+XHJcblx0XHRcdFx0XHRcdDx0cnRjLXJlbW90ZS12aWV3IDp1c2VySWQ9XCJtZWV0aW5nU2VydmljZVVzZXIudXNlcklkXCIgOnZpZXdJZD1cIm1lZXRpbmdTZXJ2aWNlVXNlci51c2VySWRcIlxyXG5cdFx0XHRcdFx0XHRcdHN0eWxlPVwiaGVpZ2h0OiAzNjBycHg7d2lkdGg6IDMwMHJweDtib3JkZXI6IDFweCBzb2xpZCAjZmZmO1wiPlxyXG5cdFx0XHRcdFx0XHQ8L3RydGMtcmVtb3RlLXZpZXc+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHQ8aW1hZ2Ugdi1pZj1cIiFtZWV0aW5nU2VydmljZVVzZXIubWVldGluZ1wiIHYtZWxzZSBzcmM9XCIuLi8uLi9zdGF0aWMvaG9tZS9yZW4gKDEpLndlYnBcIlxyXG5cdFx0XHRcdFx0XHRzdHlsZT1cIndpZHRoOiAzODBycHg7aGVpZ2h0OiAzNjBycHg7Ym9yZGVyLXJhZGl1czogNDBycHg7XCIgbW9kZT1cImFzcGVjdEZpbGxcIj5cclxuXHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDwvdmlldz5cclxuXHRcdFx0PHZpZXcgc3R5bGU9XCJmbGV4LWRpcmVjdGlvbjogcm93O2p1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO3dpZHRoOiAxMDB2dztcIj5cclxuXHRcdFx0XHQ8IS0t5L6b5pa5LS0+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJsaXN0MVwiIHN0eWxlPVwid2lkdGg6IDMwMHJweDttYXJnaW4tcmlnaHQ6IDIwcHg7XCI+XHJcblx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cIm5hbWVcIiB2LWlmPVwiIW1lZXRpbmdCdXNpbmVzc1VzZXIudXNlcklkXCI+562J5b6F5L6b5pa56L+b5YWlPC90ZXh0PlxyXG5cdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJuYW1lXCIgdi1lbHNlPuS+m+aWuVxyXG5cdFx0XHRcdFx0XHR7eyBtZWV0aW5nQnVzaW5lc3NVc2VyLnVzZXJJbmZvICYmIG1lZXRpbmdCdXNpbmVzc1VzZXIudXNlckluZm8ubmFtZSB8fCAnJyB9fTwvdGV4dD5cclxuXHRcdFx0XHRcdDx2aWV3IHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDozNjBycHg7XCI+XHJcblx0XHRcdFx0XHRcdDx2aWV3XHJcblx0XHRcdFx0XHRcdFx0OmNsYXNzPVwieydoaWRlJzohKG1lZXRpbmdCdXNpbmVzc1VzZXIgJiYgbWVldGluZ0J1c2luZXNzVXNlci51c2VySWQgJiYgbWVldGluZ0J1c2luZXNzVXNlci51c2VySWQgPT0gdXNlcklkICYmIG1lZXRpbmdCdXNpbmVzc1VzZXIubWVldGluZyl9XCI+XHJcblx0XHRcdFx0XHRcdFx0PHRydGMtbG9jYWwtdmlldyA6dmlld0lkPVwibWVldGluZ0J1c2luZXNzVXNlci51c2VySWRcIiBzdHlsZT1cImhlaWdodDogMzgwcnB4O3dpZHRoOiAzNjBycHg7XCI+XHJcblx0XHRcdFx0XHRcdFx0PC90cnRjLWxvY2FsLXZpZXc+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0PHZpZXdcclxuXHRcdFx0XHRcdFx0XHQ6Y2xhc3M9XCJ7J2hpZGUnOiEobWVldGluZ0J1c2luZXNzVXNlciAmJiBtZWV0aW5nQnVzaW5lc3NVc2VyLnVzZXJJZCAmJiBtZWV0aW5nQnVzaW5lc3NVc2VyLnVzZXJJZCAhPSB1c2VySWQgJiYgIW1lZXRpbmdCdXNpbmVzc1VzZXIubWVldGluZyl9XCI+XHJcblx0XHRcdFx0XHRcdFx0PHRydGMtcmVtb3RlLXZpZXcgOnVzZXJJZD1cIm1lZXRpbmdCdXNpbmVzc1VzZXIudXNlcklkXCIgOnZpZXdJZD1cIm1lZXRpbmdCdXNpbmVzc1VzZXIudXNlcklkXCJcclxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwiaGVpZ2h0OiAzNjBycHg7d2lkdGg6IDMwMHJweDtib3JkZXI6IDFweCBzb2xpZCAjZmZmO1wiPlxyXG5cdFx0XHRcdFx0XHRcdDwvdHJ0Yy1yZW1vdGUtdmlldz5cclxuXHRcdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdFx0XHQ8aW1hZ2VcclxuXHRcdFx0XHRcdFx0XHR2LWlmPVwiIW1lZXRpbmdCdXNpbmVzc1VzZXIgfHwgIW1lZXRpbmdCdXNpbmVzc1VzZXIudXNlcklkIHx8ICFtZWV0aW5nQnVzaW5lc3NVc2VyLm1lZXRpbmdcIlxyXG5cdFx0XHRcdFx0XHRcdHNyYz1cIi4uLy4uL3N0YXRpYy9ob21lL3JlbiAoMikud2VicFwiXHJcblx0XHRcdFx0XHRcdFx0c3R5bGU9XCJ3aWR0aDogMzAwcnB4O2hlaWdodDogMzYwcnB4O2JvcmRlci1yYWRpdXM6IDQwcnB4O1wiIG1vZGU9XCJhc3BlY3RGaWxsXCI+XHJcblx0XHRcdFx0XHRcdDwvaW1hZ2U+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cclxuXHRcdFx0XHQ8IS0t6ZyA5pa5LS0+XHJcblx0XHRcdFx0PHZpZXcgY2xhc3M9XCJsaXN0MVwiIHN0eWxlPVwid2lkdGg6IDMwMHJweDttYXJnaW4tcmlnaHQ6IDIwcHg7XCI+XHJcblx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cIm5hbWVcIiB2LWlmPVwiIW1lZXRpbmdDdXN0b21lclVzZXIudXNlcklkXCI+562J5b6F6ZyA5pa56L+b5YWlPC90ZXh0PlxyXG5cdFx0XHRcdFx0PHRleHQgY2xhc3M9XCJuYW1lXCIgdi1lbHNlPumcgOaWuVxyXG5cdFx0XHRcdFx0XHR7eyBtZWV0aW5nQ3VzdG9tZXJVc2VyLnVzZXJJbmZvICYmIG1lZXRpbmdDdXN0b21lclVzZXIudXNlckluZm8ubmFtZSB8fCAnJyB9fTwvdGV4dD5cclxuXHRcdFx0XHRcdDx2aWV3IHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDozNjBycHg7XCI+XHJcblx0XHRcdFx0XHRcdDx2aWV3XHJcblx0XHRcdFx0XHRcdFx0OmNsYXNzPVwieydoaWRlJzohKG1lZXRpbmdDdXN0b21lclVzZXIgJiYgbWVldGluZ0N1c3RvbWVyVXNlci51c2VySWQgJiYgbWVldGluZ0N1c3RvbWVyVXNlci51c2VySWQgPT0gdXNlcklkICYmIG1lZXRpbmdDdXN0b21lclVzZXIubWVldGluZyl9XCI+XHJcblx0XHRcdFx0XHRcdFx0PHRydGMtbG9jYWwtdmlldyA6dmlld0lkPVwibWVldGluZ0N1c3RvbWVyVXNlci51c2VySWRcIiBzdHlsZT1cImhlaWdodDogMzgwcnB4O3dpZHRoOiAzNjBycHg7XCI+XHJcblx0XHRcdFx0XHRcdFx0PC90cnRjLWxvY2FsLXZpZXc+XHJcblx0XHRcdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0XHRcdFx0PHZpZXdcclxuXHRcdFx0XHRcdFx0XHQ6Y2xhc3M9XCJ7J2hpZGUnOiEobWVldGluZ0N1c3RvbWVyVXNlciAmJiBtZWV0aW5nQ3VzdG9tZXJVc2VyLnVzZXJJZCAmJiBtZWV0aW5nQ3VzdG9tZXJVc2VyLnVzZXJJZCAhPSB1c2VySWQgJiYgbWVldGluZ0N1c3RvbWVyVXNlci5tZWV0aW5nKX1cIj5cclxuXHRcdFx0XHRcdFx0XHQ8dHJ0Yy1yZW1vdGUtdmlldyA6dXNlcklkPVwibWVldGluZ0N1c3RvbWVyVXNlci51c2VySWRcIiA6dmlld0lkPVwibWVldGluZ0N1c3RvbWVyVXNlci51c2VySWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJoZWlnaHQ6IDM2MHJweDt3aWR0aDogMzAwcnB4O2JvcmRlcjogMXB4IHNvbGlkICNmZmY7XCI+XHJcblx0XHRcdFx0XHRcdFx0PC90cnRjLXJlbW90ZS12aWV3PlxyXG5cdFx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0XHRcdDxpbWFnZSB2LWlmPVwiIW1lZXRpbmdDdXN0b21lclVzZXIubWVldGluZ1wiIHNyYz1cIi4uLy4uL3N0YXRpYy9ob21lL3JlbiAoMikud2VicFwiXHJcblx0XHRcdFx0XHRcdFx0c3R5bGU9XCJ3aWR0aDogMzAwcnB4O2hlaWdodDogMzYwcnB4O2JvcmRlci1yYWRpdXM6IDQwcnB4O1wiIG1vZGU9XCJhc3BlY3RGaWxsXCI+XHJcblx0XHRcdFx0XHRcdDwvaW1hZ2U+XHJcblx0XHRcdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8L3ZpZXc+XHJcblx0XHRcdDx2aWV3IHN0eWxlPVwiZmxleC1kaXJlY3Rpb246IHJvdztqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcIj5cclxuXHRcdFx0XHQ8YmxvY2s+XHJcblx0XHRcdFx0XHQ8dGV4dCBjbGFzcz1cImJ0blwiIEBjbGljaz1cImhhbmRsZVN0YXJ0TWVldGluZ1wiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAyMHJweDtcIj5cclxuXHRcdFx0XHRcdFx05byA5aeL6KeG6aKRXHJcblx0XHRcdFx0XHQ8L3RleHQ+XHJcblx0XHRcdFx0PC9ibG9jaz5cclxuXHRcdFx0XHQ8dGV4dCBjbGFzcz1cImJ0blwiIHYtaWY9XCJtZWV0aW5nXCIgQGNsaWNrPVwiaGFuZGxlRW5kdE1lZXRpbmdcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMjBweDtcIj5cclxuXHRcdFx0XHRcdOaMguaWrVxyXG5cdFx0XHRcdDwvdGV4dD5cclxuXHRcdFx0XHQ8dGV4dCBjbGFzcz1cImJ0blwiIEBjbGljaz1cImhhbmRsZUludml0ZVNlcnZpY2VVc2VyXCIgdi1pZj1cIiFoYXNJbnZpdGUgJiYgam9pblR5cGUgPT0gJ2N1c3RvbWVyJ1wiXHJcblx0XHRcdFx0XHRzdHlsZT1cIm1hcmdpbi1yaWdodDogMjBycHg7XCI+XHJcblx0XHRcdFx0XHTpgoDor7flrqLmnI1cclxuXHRcdFx0XHQ8L3RleHQ+XHJcblx0XHRcdFx0PHRleHQgY2xhc3M9XCJidG5cIiB2LWlmPVwiam9pblR5cGUgPT0gJ2N1c3RvbWVyJ1wiIEBjbGljaz1cImhhbmRsZVRvU3VibWl0T3JkZXJcIj5cclxuXHRcdFx0XHRcdOeri+WNs+S4i+WNlVxyXG5cdFx0XHRcdDwvdGV4dD5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0XHQ8c2Nyb2xsLXZpZXcgOnNjcm9sbC15PVwidHJ1ZVwiIGNsYXNzPVwibWVzc2FnZVwiPlxyXG5cdFx0XHRcdDx2aWV3IHN0eWxlPVwid2lkdGg6IDMyMHB4O1wiPlxyXG5cdFx0XHRcdFx0PHZpZXcgdi1mb3I9XCJpdGVtIGluIG1lc3NhZ2VMaXN0XCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O2ZsZXgtZGlyZWN0aW9uOiByb3c7ZmxleC13cmFwOiB3cmFwO1wiPlxyXG5cdFx0XHRcdFx0XHQ8dGV4dCBzdHlsZT1cImNvbG9yOiAjRkZEQTk3IDtcIj57e2l0ZW0uYXV0aG9yIHx8ICfns7vnu58nfX06PC90ZXh0PlxyXG5cdFx0XHRcdFx0XHQ8dGV4dFxyXG5cdFx0XHRcdFx0XHRcdHN0eWxlPVwiY29sb3I6ICNmZmY7bWFyZ2luLWxlZnQ6IDEwcnB4O3dvcmQtYnJlYWs6IGJyZWFrLWFsbDt3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7d2hpdGUtc3BhY2U6IHByZS13cmFwO1wiPlxyXG5cdFx0XHRcdFx0XHRcdHt7aXRlbS5jb250ZW50fX1cclxuXHRcdFx0XHRcdFx0PC90ZXh0PlxyXG5cdFx0XHRcdFx0PC92aWV3PlxyXG5cdFx0XHRcdDwvdmlldz5cclxuXHRcdFx0PC9zY3JvbGwtdmlldz5cclxuXHRcdFx0PHZpZXdcclxuXHRcdFx0XHRzdHlsZT1cInBvc2l0aW9uOiBmaXhlZDtib3R0b206IDA7bGVmdDogMDtyaWdodDogMDtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjthbGlnbi1pdGVtczogY2VudGVyO2JvdHRvbTogMjBweDtcIj5cclxuXHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJpbnB1dFwiIHBsYWNlaG9sZGVyPVwi5Zue5aSNXCIgcGxhY2Vob2xkZXItc3R5bGU9XCJjb2xvcjojZmZmXCIgdi1tb2RlbD1cIm1lc3NhZ2VDb250ZW50XCJcclxuXHRcdFx0XHRcdEBjb25maXJtPVwic2VuZE1lc3NhZ2VcIiBjb25maXJtLXR5cGU9XCJzZW5kXCIgLz5cclxuXHRcdFx0PC92aWV3PlxyXG5cdFx0PC92aWV3PlxyXG5cdDwvdmlldz5cclxuPC90ZW1wbGF0ZT5cclxuPHNjcmlwdD5cclxuXHRpbXBvcnQge1xyXG5cdFx0bWFwU3RhdGVcclxuXHR9IGZyb20gJ3Z1ZXgnO1xyXG5cdGltcG9ydCBwZXJtaXNpb24gZnJvbSBcIkAvVHJ0Y0Nsb3VkL3Blcm1pc3Npb24uanNcIjtcclxuXHRpbXBvcnQgVHJ0Y0Nsb3VkIGZyb20gJ0AvVHJ0Y0Nsb3VkL2xpYi9pbmRleCc7XHJcblx0aW1wb3J0IHtcclxuXHRcdFRSVENBcHBTY2VuZSxcclxuXHRcdFRSVENWaWRlb1N0cmVhbVR5cGUsXHJcblx0XHRUUlRDQ2xvdWREZWYsXHJcblx0XHRUUlRDQXVkaW9RdWFsaXR5XHJcblx0fSBmcm9tICdAL1RydGNDbG91ZC9saWIvVHJ0Y0RlZmluZXMnO1xyXG5cdGltcG9ydCB7XHJcblx0XHRnZW5UZXN0VXNlclNpZ1xyXG5cdH0gZnJvbSAnQC9kZWJ1Zy9HZW5lcmF0ZVRlc3RVc2VyU2lnJztcclxuXHRpbXBvcnQgVHJ0Y0xvY2FsVmlldyBmcm9tICdAL1RydGNDbG91ZC92aWV3L1RydGNMb2NhbFZpZXcnO1xyXG5cdGltcG9ydCBUcnRjUmVtb3RlVmlldyBmcm9tICdAL1RydGNDbG91ZC92aWV3L1RydGNSZW1vdGVWaWV3JztcclxuXHRjb25zdCBUcnRjRXZlbnQgPSB1bmkucmVxdWlyZU5hdGl2ZVBsdWdpbignZ2xvYmFsRXZlbnQnKTtcclxuXHJcblx0aW1wb3J0IEFQSSBmcm9tICdAL2FwaXMvaW5kZXguanMnXHJcblx0aW1wb3J0IGNvbmZpZyBmcm9tICdAL2NvbW1vbi9jb25maWcvY29uZmlnLmpzJ1xyXG5cdGltcG9ydCBzZXJ2aWNlIGZyb20gJ0Avc2VydmljZS9zZXJ2aWNlLmpzJ1xyXG5cdGxldCBzb2NrZXRUYXNrID0gZ2V0QXBwKCkuZ2xvYmFsRGF0YS5zb2NrZXRUYXNrO1xyXG5cdGV4cG9ydCBkZWZhdWx0IHtcclxuXHRcdGNvbXBvbmVudHM6IHtcclxuXHRcdFx0VHJ0Y0xvY2FsVmlldzogVHJ0Y0xvY2FsVmlldyxcclxuXHRcdFx0VHJ0Y1JlbW90ZVZpZXc6IFRydGNSZW1vdGVWaWV3LFxyXG5cdFx0fSxcclxuXHRcdGRhdGEoKSB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0aGFzSW52aXRlOiBmYWxzZSxcclxuXHRcdFx0XHQvL+aIkVxyXG5cdFx0XHRcdG1lZXRpbmdVc2VyTXk6IHtcclxuXHRcdFx0XHRcdHVzZXJJZDogMFxyXG5cdFx0XHRcdH0sXHJcblxyXG5cdFx0XHRcdC8v6ZyA5pa5XHJcblx0XHRcdFx0bWVldGluZ0N1c3RvbWVyVXNlcjoge1xyXG5cdFx0XHRcdFx0dXNlcklkOiAwXHJcblx0XHRcdFx0fSxcclxuXHJcblx0XHRcdFx0Ly/kvpvmlrlcclxuXHRcdFx0XHRtZWV0aW5nQnVzaW5lc3NVc2VyOiB7XHJcblx0XHRcdFx0XHR1c2VySWQ6IDBcclxuXHRcdFx0XHR9LFxyXG5cclxuXHRcdFx0XHQvL+WuouacjVxyXG5cdFx0XHRcdG1lZXRpbmdTZXJ2aWNlVXNlcjoge1xyXG5cdFx0XHRcdFx0dXNlcklkOiAwXHJcblx0XHRcdFx0fSxcclxuXHJcblx0XHRcdFx0bnVtOiAxMCxcclxuXHRcdFx0XHR0cnRjQ2xvdWQ6IG51bGwsXHJcblx0XHRcdFx0c2RrQXBwSWQ6IDAsXHJcblx0XHRcdFx0dXNlclNpZzogJycsXHJcblx0XHRcdFx0cm9vbUlkOiAwLFxyXG5cdFx0XHRcdHVzZXJJZDogJycsXHJcblx0XHRcdFx0c3RhcnRpbmc6IGZhbHNlLFxyXG5cdFx0XHRcdHVzZXJUeXBlOiAn562J5b6F6L+b5YWlJyxcclxuXHRcdFx0XHRhcHBTY2VuZTogVFJUQ0FwcFNjZW5lLlRSVENBcHBTY2VuZVZpZGVvQ2FsbCwgLy8gVFJUQ0FwcFNjZW5lVmlkZW9DYWxsXHJcblx0XHRcdFx0aXNGcm9udENhbWVyYTogdHJ1ZSxcclxuXHRcdFx0XHRzdHJlYW1UeXBlOiBUUlRDVmlkZW9TdHJlYW1UeXBlLlRSVENWaWRlb1N0cmVhbVR5cGVCaWcsXHJcblx0XHRcdFx0cmVtb3RlVXNlcklkOiAnJyxcclxuXHRcdFx0XHRhdWRpb1JvdXRlOiBUUlRDQ2xvdWREZWYuVFJUQ19BVURJT19ST1VURV9TUEVBS0VSLFxyXG5cdFx0XHRcdG1lc3NhZ2VMaXN0OiBbXSxcclxuXHRcdFx0XHRtZXNzYWdlQ29udGVudDogJycsXHJcblx0XHRcdFx0bXlVc2VySW5mbzogJycsXHJcblx0XHRcdFx0cm9vbToge30sXHJcblx0XHRcdFx0c2hvcElkOiAwLFxyXG5cdFx0XHRcdHNlbGxlclVzZXJJZDogMCxcclxuXHJcblx0XHRcdFx0cGFyYW06IHt9LFxyXG5cdFx0XHRcdGpvaW5UeXBlOiAnY3VzdG9tZXInXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblx0XHRjb21wdXRlZDoge1xyXG5cdFx0XHQuLi5tYXBTdGF0ZShbJ3VzZXInLCAnc3RhdGlzdGljcycsICdjb21tb24nXSlcclxuXHRcdH0sXHJcblx0XHRvbkxvYWQoZSkge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnb25sb2FkIGUnLCBlKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJ3VzZXInLCB0aGlzLnVzZXIpO1xyXG5cdFx0XHR0aGlzLnBhcmFtID0gZTtcclxuXHJcblx0XHRcdC8v5Yqg5YWl57G75Z6L77yM5piv5Lul5LuA5LmI6Lqr5Lu95Yqg5YWl55qEXHJcblx0XHRcdGxldCBqb2luVHlwZSA9IGUuam9pblR5cGUgfHwgJ2N1c3RvbWVyJ1xyXG5cdFx0XHRjb25zb2xlLmxvZygnb25Mb2FkIGpvaW5UeXBlJywgam9pblR5cGUpO1xyXG5cdFx0XHR0aGlzLmpvaW5UeXBlID0gam9pblR5cGU7XHJcblxyXG5cdFx0XHR0aGlzLnJvb21JZCA9IGUucm9vbUlkO1xyXG5cdFx0XHR0aGlzLnNlbGxlclVzZXJJZCA9IGUudXNlcmlkO1xyXG5cdFx0XHR0aGlzLnVzZXJJZCA9ICd1c2VyXycgKyB0aGlzLnVzZXIuaWQ7XHJcblx0XHRcdHRoaXMubWVldGluZ1VzZXJNeSA9IHtcclxuXHRcdFx0XHR1c2VySWQ6IHRoaXMudXNlcklkLFxyXG5cdFx0XHRcdGlkOiB0aGlzLnVzZXIuaWRcclxuXHRcdFx0fTtcclxuXHRcdFx0dGhpcy5zaG9wSWQgPSBlLnNob3BfaWQ7XHJcblxyXG5cdFx0XHRpZiAoam9pblR5cGUgPT0gJ2N1c3RvbWVyJykge1xyXG5cdFx0XHRcdC8v6ZyA5pa5XHJcblx0XHRcdFx0dGhpcy5jcmVhdGVSb29tKHtcclxuXHRcdFx0XHRcdFwibmFtZVwiOiBcIua1i+ivleaIv+mXtFwiLFxyXG5cdFx0XHRcdFx0XCJib2R5VGV4dFwiOiBcIlwiLFxyXG5cdFx0XHRcdFx0XCJyb29tTm9cIjogXCJcIixcclxuXHRcdFx0XHRcdFwiZGVzY3JpcHRpb25cIjogXCJcIixcclxuXHRcdFx0XHRcdFwiY2xpZW50SWRcIjogXCJcIixcclxuXHRcdFx0XHRcdC8vIFwicHJvZHVjdElkXCI6IGUuZ29vZHNfaWQsXHJcblx0XHRcdFx0XHRcInNob3BJZFwiOiBlLnNob3BfaWRcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHR0aGlzLm1lZXRpbmdDdXN0b21lclVzZXIgPSB7XHJcblx0XHRcdFx0XHQuLi50aGlzLm1lZXRpbmdVc2VyTXlcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMucm9vbSA9IHtcclxuXHRcdFx0XHRcdGlkOiBlLnJvb21JZCxcclxuXHRcdFx0XHRcdFJvb21ObzogZS5yb29tSWRcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHR0aGlzLm1lZXRpbmdDdXN0b21lclVzZXIgPSB7XHJcblx0XHRcdFx0XHR1c2VySWQ6ICd1c2VyXycgKyBlLmN1c3RvbWVyaWQudG9TdHJpbmcoKSxcclxuXHRcdFx0XHRcdGlkOiBlLmN1c3RvbWVyaWRcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoam9pblR5cGUgPT0gJ3NlbGxlcicpIHtcclxuXHRcdFx0XHQvL+S+m+aWuVxyXG5cdFx0XHRcdHRoaXMubWVldGluZ0J1c2luZXNzVXNlciA9IHtcclxuXHRcdFx0XHRcdHVzZXJJZDogdGhpcy5tZWV0aW5nVXNlck15LnVzZXJJZCxcclxuXHRcdFx0XHRcdGlkOiB0aGlzLm1lZXRpbmdVc2VyTXkuaWRcclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoam9pblR5cGUgPT0gJ3NlcnZpY2UnKSB7XHJcblx0XHRcdFx0Ly/lubPlj7DlrqLmnI1cclxuXHRcdFx0XHR0aGlzLm1lZXRpbmdTZXJ2aWNlVXNlciA9IHtcclxuXHRcdFx0XHRcdHVzZXJJZDogdGhpcy5tZWV0aW5nVXNlck15LnVzZXJJZCxcclxuXHRcdFx0XHRcdGlkOiB0aGlzLm1lZXRpbmdVc2VyTXkuaWRcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zb2xlLmxvZygnb25Mb2FkIG1lZXRpbmdCdXNpbmVzc1VzZXInLCB0aGlzLm1lZXRpbmdCdXNpbmVzc1VzZXIpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnb25Mb2FkIG1lZXRpbmdTZXJ2aWNlVXNlcicsIHRoaXMubWVldGluZ1NlcnZpY2VVc2VyKTtcclxuXHJcblx0XHRcdC8vIHRoaXMuZ2V0VXNlckluZm8odGhpcy51c2VyLmlkLGpvaW5UeXBlKTtcclxuXHRcdFx0dGhpcy5qb2luUm9vbSgpO1xyXG5cclxuXHRcdFx0dGhpcy4kZm9yY2VVcGRhdGUoKTtcclxuXHJcblx0XHRcdC8v5paH5a2X6IGK5aSpXHJcblx0XHRcdHVuaS4kb24oJ3NvY2tldE1lc3NhZ2UnLCAoZGF0YSkgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdzb2NrZXRNZXNzYWdlJywgZGF0YSk7XHJcblx0XHRcdFx0aWYgKGRhdGEubWVzc2FnZVR5cGUgPT0gJ3NlbmRfdG9fcm9vbScpIHtcclxuXHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3QucHVzaCh7XHJcblx0XHRcdFx0XHRcdGF1dGhvcjogZGF0YS5yZWFsTmFtZSxcclxuXHRcdFx0XHRcdFx0Y29udGVudDogZGF0YS50b01lc3NhZ2VcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChkYXRhLm1lc3NhZ2VUeXBlID09ICdqb2luJykge1xyXG5cdFx0XHRcdFx0bGV0IHVzZXJpZCA9IGRhdGEudXNlckludElkO1xyXG5cdFx0XHRcdFx0aWYgKHVzZXJpZCAhPSB0aGlzLnVzZXIuaWQpIHtcclxuXHRcdFx0XHRcdFx0Ly/mnInnlKjmiLfliqDlhaXmiL/pl7RcclxuXHRcdFx0XHRcdFx0bGV0IGpvaW5UeXBlID0gZGF0YS5tZXNzYWdlQ29udGVudDtcclxuXHRcdFx0XHRcdFx0aWYgKGpvaW5UeXBlID09ICdzZWxsZXInKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5tZWV0aW5nQnVzaW5lc3NVc2VyLnVzZXJJZCA9ICd1c2VyXycgKyB1c2VyaWQ7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5tZWV0aW5nQnVzaW5lc3NVc2VyLmlkID0gdXNlcmlkO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChqb2luVHlwZSA9PSAnc2VydmljZScpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLm1lZXRpbmdTZXJ2aWNlVXNlci51c2VySWQgPSAndXNlcl8nICsgdXNlcmlkO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubWVldGluZ1NlcnZpY2VVc2VyLmlkID0gdXNlcmlkO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0fSxcclxuXHRcdG9uU2hvdygpIHt9LFxyXG5cdFx0b25IaWRlKCkge30sXHJcblx0XHRtb3VudGVkKCkge1xyXG5cdFx0XHRpZiAodW5pLmdldFN5c3RlbUluZm9TeW5jKCkucGxhdGZvcm0gPT09ICdhbmRyb2lkJykge1xyXG5cdFx0XHRcdHBlcm1pc2lvbi5yZXF1ZXN0QW5kcm9pZFBlcm1pc3Npb24oJ2FuZHJvaWQucGVybWlzc2lvbi5SRUNPUkRfQVVESU8nKTtcclxuXHRcdFx0XHRwZXJtaXNpb24ucmVxdWVzdEFuZHJvaWRQZXJtaXNzaW9uKCdhbmRyb2lkLnBlcm1pc3Npb24uQ0FNRVJBJyk7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5pbml0VXNlclNpZ24oKTtcclxuXHRcdH0sXHJcblx0XHRvblVubG9hZCgpIHtcclxuXHRcdFx0dGhpcy5kZXN0cm95SW5zdGFuY2UoKTtcclxuXHRcdFx0Y29uc29sZS5sb2coJy0gb25VbmxvYWQnKTtcclxuXHRcdH0sXHJcblx0XHRvbkJhY2tQcmVzcygpIHtcclxuXHRcdFx0dGhpcy5kZXN0cm95SW5zdGFuY2UoKTtcclxuXHRcdH0sXHJcblx0XHRtZXRob2RzOiB7XHJcblx0XHRcdGdldFVzZXJJbmZvKHVzZXJpZCwgdHlwZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdnZXRVc2VySW5mbycsIHVzZXJpZCwgdHlwZSk7XHJcblx0XHRcdFx0QVBJLm1lc3NhZ2UuZ2V0VXNlclR5cGVJbmZvKHVzZXJpZCkudGhlbihyZXMgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ2dldFVzZXJUeXBlSW5mbycsIHJlcyk7XHJcblx0XHRcdFx0XHRpZiAodHlwZSA9PSAnY3VzdG9tZXInKSB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCdnZXRVc2VyVHlwZUluZm8gdHlwZT1jdXN0b21lcicpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLm1lZXRpbmdDdXN0b21lclVzZXIudXNlckluZm8gPSByZXMuZGF0YVswXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICh0eXBlID09ICdzZWxsZXInKSB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCdnZXRVc2VyVHlwZUluZm8gdHlwZT1zZWxsZXInKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5tZWV0aW5nQnVzaW5lc3NVc2VyLnVzZXJJbmZvID0gcmVzLmRhdGFbMF07XHJcblx0XHRcdFx0XHRcdHRoYXQubWVzc2FnZUxpc3QucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0YXV0aG9yOiAn57O757ufJyxcclxuXHRcdFx0XHRcdFx0XHRjb250ZW50OiAn5L6b5pa55Yqg5YWl5oi/6Ze0J1xyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKHR5cGUgPT0gJ3NlcnZpY2UnKSB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKCdnZXRVc2VyVHlwZUluZm8gdHlwZT1zZXJ2aWNlJyk7XHJcblx0XHRcdFx0XHRcdC8vIHRoaXMubWVldGluZ1NlcnZpY2VVc2VyLnVzZXJJbmZvID0gcmVzLmRhdGFbMF07XHJcblx0XHRcdFx0XHRcdHRoYXQubWVzc2FnZUxpc3QucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0YXV0aG9yOiAn57O757ufJyxcclxuXHRcdFx0XHRcdFx0XHRjb250ZW50OiAn5a6i5pyN5Yqg5YWl5oi/6Ze0J1xyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ2dldFVzZXJUeXBlSW5mbyBtZWV0aW5nU2VydmljZVVzZXInLCB0aGlzLm1lZXRpbmdTZXJ2aWNlVXNlcik7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSxcclxuXHRcdFx0am9pblJvb20oKSB7XHJcblx0XHRcdFx0bGV0IHBhcmFtID0ge1xyXG5cdFx0XHRcdFx0bWV0aG9kOiAnam9pbicsXHJcblx0XHRcdFx0XHRJc1Jvb206IHRydWUsXHJcblx0XHRcdFx0XHRSb29tTm86IHRoaXMucm9vbUlkLFxyXG5cdFx0XHRcdFx0Um9vbU5hbWU6IHRoaXMucm9vbS5Sb29tTmFtZSxcclxuXHRcdFx0XHRcdG1lc3NhZ2VDb250ZW50OiB0aGlzLmpvaW5UeXBlLFxyXG5cdFx0XHRcdFx0dG9rZW46IHNlcnZpY2UuZ2V0VG9rZW5DaGFvZ2UoKSxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdqb2luUm9vbScscGFyYW0pO1xyXG5cdFx0XHRcdHNvY2tldFRhc2suc2VuZCh7XHJcblx0XHRcdFx0XHRkYXRhOiBKU09OLnN0cmluZ2lmeShwYXJhbSksXHJcblx0XHRcdFx0XHRzdWNjZXNzKHJlcykge30sXHJcblx0XHRcdFx0XHRmYWlsKGUpIHt9LFxyXG5cdFx0XHRcdFx0Y29tcGxldGUoKSB7fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRpbml0VXNlclNpZ24oKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMudXNlcklkKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnaW5pdFVzZXJTaWduJywgdGhpcy51c2VySWQpO1xyXG5cdFx0XHRcdFx0Ly8g55Sf5oiQIHVzZXJTaWdcclxuXHRcdFx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRcdFx0c2RrQXBwSWQsXHJcblx0XHRcdFx0XHRcdHVzZXJTaWdcclxuXHRcdFx0XHRcdH0gPSBnZW5UZXN0VXNlclNpZyh0aGlzLnVzZXJJZCk7XHJcblx0XHRcdFx0XHR0aGlzLnNka0FwcElkID0gc2RrQXBwSWQ7XHJcblx0XHRcdFx0XHR0aGlzLnVzZXJTaWcgPSB1c2VyU2lnO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ3Nka0FwcElkLHVzZXJTaWcnLCBzZGtBcHBJZCwgdXNlclNpZyk7XHJcblx0XHRcdFx0XHRpZiAoIXNka0FwcElkIHx8ICF1c2VyU2lnKSB7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe1xyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiAn6K+35aGr5YaZIHNka0FwcElk44CBdXNlclNpZycsXHJcblx0XHRcdFx0XHRcdFx0aWNvbjogJ25vbmUnXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5pbml0VXNlclNpZ24oKTtcclxuXHRcdFx0XHRcdH0sIDIwMClcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdGhhbmRsZVRvU3VibWl0T3JkZXIoKSB7XHJcblx0XHRcdFx0dW5pLm5hdmlnYXRlQmFjaygpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQvL+mCgOivt+WVhuWutuWuouacjVxyXG5cdFx0XHRoYW5kbGVJbnZpdGVCdXNpbmVzc1VzZXIoKSB7XHJcblx0XHRcdFx0QVBJLm1lc3NhZ2UuZ2V0SW52aXRlQnVzaW5lc3NVc2VySm9pbih0aGlzLnNob3BJZCwgdGhpcy5yb29tLlJvb21ObywgdGhpcy5zZWxsZXJVc2VySWQpLnRoZW4ocmVzID0+IHt9KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvL+mCgOivt+W5s+WPsOWuouacjVxyXG5cdFx0XHRoYW5kbGVJbnZpdGVTZXJ2aWNlVXNlcigpIHtcclxuXHRcdFx0XHR1bmkuc2hvd0xvYWRpbmcoKTtcclxuXHRcdFx0XHRBUEkubWVzc2FnZS5nZXRJbnZpdGVTZXJ2aWNlVXNlckpvaW4odGhpcy5yb29tLlJvb21ObywgJ2pvaW5NdWx0aXBsYXllclZpZGVvJykudGhlbihyZXMgPT4ge1xyXG5cdFx0XHRcdFx0dW5pLnNob3dUb2FzdCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiAn6YKA6K+35oiQ5YqfJ1xyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdHRoaXMuaGFzSW52aXRlID0gdHJ1ZTtcclxuXHRcdFx0XHR9KS5maW5hbGx5KCgpID0+IHtcclxuXHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRjcmVhdGVSb29tKGRhdGEpIHtcclxuXHRcdFx0XHR1bmkuc2hvd0xvYWRpbmcoe1xyXG5cdFx0XHRcdFx0dGl0bGU6ICfmraPlnKjliJvlu7rmiL/pl7QnXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0QVBJLm1lc3NhZ2UucG9zdEFkZFJvb20oZGF0YSkudGhlbihyZXMgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5yb29tID0gcmVzLmRhdGE7XHJcblx0XHRcdFx0XHR0aGlzLnJvb21JZCA9IHJlcy5kYXRhLlJvb21ObztcclxuXHRcdFx0XHRcdHRoaXMuaGFuZGxlSW52aXRlQnVzaW5lc3NVc2VyKCk7XHJcblx0XHRcdFx0XHR0aGlzLmpvaW5Sb29tKCk7XHJcblx0XHRcdFx0fSkuZmluYWxseSgoKSA9PiB7XHJcblx0XHRcdFx0XHR1bmkuaGlkZUxvYWRpbmcoKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdHNlbmRNZXNzYWdlKCkge1xyXG5cdFx0XHRcdGxldCB0aGF0ID0gdGhpcztcclxuXHRcdFx0XHR0aGF0Lm1lc3NhZ2VMaXN0LnB1c2goe1xyXG5cdFx0XHRcdFx0YXV0aG9yOiAn5oiRJyxcclxuXHRcdFx0XHRcdGNvbnRlbnQ6IHRoYXQubWVzc2FnZUNvbnRlbnRcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdHRoYXQubWVzc2FnZUNvbnRlbnQgPSAnJztcclxuXHRcdFx0XHRzb2NrZXRUYXNrLnNlbmQoe1xyXG5cdFx0XHRcdFx0ZGF0YTogSlNPTi5zdHJpbmdpZnkoe1xyXG5cdFx0XHRcdFx0XHRmb3JtVXNlcklkOiB0aGlzLnVzZXJJZCxcclxuXHRcdFx0XHRcdFx0Y29udGVudFR5cGU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IHRoaXMubWVzc2FnZUNvbnRlbnQsXHJcblx0XHRcdFx0XHRcdHNlbmRUaW1lOiBuZXcgRGF0ZSgpLFxyXG5cdFx0XHRcdFx0XHRtZXRob2Q6ICdzZW5kX3RvX3Jvb20nLFxyXG5cdFx0XHRcdFx0XHRSb29tTm86IHRoaXMucm9vbS5Sb29tTm8sXHJcblx0XHRcdFx0XHRcdFJvb21OYW1lOiB0aGlzLnJvb20uTmFtZSxcclxuXHRcdFx0XHRcdFx0SXNSb29tOiB0cnVlXHJcblx0XHRcdFx0XHR9KSxcclxuXHRcdFx0XHRcdHN1Y2Nlc3MocmVzKSB7fSxcclxuXHRcdFx0XHRcdGZhaWwoZSkge30sXHJcblx0XHRcdFx0XHRjb21wbGV0ZSgpIHt9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdGhhbmRsZVN0YXJ0TWVldGluZygpIHtcclxuXHRcdFx0XHR0aGlzLnN0YXJ0aW5nID0gdHJ1ZTtcclxuXHRcdFx0XHR0aGlzLiRuZXh0VGljaygoKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmNyZWF0ZVRydGNDbG91ZCgpO1xyXG5cdFx0XHRcdFx0dGhpcy5lbnRlclJvb20oKTtcclxuXHRcdFx0XHRcdHRoaXMuc3RhcnRMb2NhbFByZXZpZXcoKTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRoYW5kbGVFbmR0TWVldGluZygpIHtcclxuXHRcdFx0XHR0aGlzLm1lZXRpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLnN0b3BMb2NhbFByZXZpZXcoKTtcclxuXHRcdFx0XHR0aGlzLmV4aXRSb29tKCk7XHJcblx0XHRcdFx0dGhpcy5kZXN0cm95SW5zdGFuY2UoKTtcclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdGJpbmRJbnB1dENoYW5nZShldmVudCwgdHlwZSkge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gZXZlbnQuZGV0YWlsLnZhbHVlO1xyXG5cdFx0XHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRcdFx0Y2FzZSAncm9vbUlkJzoge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJvb21JZCA9IHZhbHVlO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGNhc2UgJ3VzZXJJZCc6IHtcclxuXHRcdFx0XHRcdFx0dGhpcy51c2VySWQgPSB2YWx1ZTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRkZXN0cm95SW5zdGFuY2UoKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMudHJ0Y0Nsb3VkKSB7XHJcblx0XHRcdFx0XHRUcnRjQ2xvdWQuZGVzdHJveUluc3RhbmNlKCk7XHJcblx0XHRcdFx0XHR0aGlzLnRydGNDbG91ZCA9IG51bGw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjcmVhdGVUcnRjQ2xvdWQoKSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coJ2NyZWF0ZVRydGNDbG91ZCcsIHRoaXMuc2RrQXBwSWQpO1xyXG5cdFx0XHRcdHRoaXMudHJ0Y0Nsb3VkID0gVHJ0Y0Nsb3VkLmNyZWF0ZUluc3RhbmNlKCk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coJ3RoaXMudHJ0Y0Nsb3VkJywgdGhpcy50cnRjQ2xvdWQpXHJcblx0XHRcdFx0dGhpcy5oYW5kbGVFdmVudHMoKTtcclxuXHRcdFx0XHR0aGlzLnNka0FwcElkICYmIHVuaS4kY3JlYXRlVHJ0Y0Nsb3VkVXBsb2FkKHRoaXMuc2RrQXBwSWQpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlbnRlclJvb20oKSB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRcdFx0c2RrQXBwSWQsXHJcblx0XHRcdFx0XHRcdGFwcFNjZW5lLFxyXG5cdFx0XHRcdFx0XHR1c2VyU2lnXHJcblx0XHRcdFx0XHR9ID0gdGhpcztcclxuXHRcdFx0XHRcdGxldCBwYXJhbSA9IHtcclxuXHRcdFx0XHRcdFx0cm9vbUlkOiAwLFxyXG5cdFx0XHRcdFx0XHRzdHJSb29tSWQ6IHRoaXMucm9vbS5Sb29tTm8sXHJcblx0XHRcdFx0XHRcdHVzZXJJZDogdGhpcy51c2VySWQsXHJcblx0XHRcdFx0XHRcdHNka0FwcElkLFxyXG5cdFx0XHRcdFx0XHR1c2VyU2lnXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ2VudGVyUm9vbScsIHBhcmFtKTtcclxuXHRcdFx0XHRcdHRoaXMudHJ0Y0Nsb3VkLmVudGVyUm9vbShwYXJhbSwgYXBwU2NlbmUpO1xyXG5cdFx0XHRcdFx0dGhpcy5zZGtBcHBJZCAmJiB1bmkuJGVudGVyUm9vbVN1Y2Nlc3NVcGxvYWQodGhpcy5zZGtBcHBJZCk7XHJcblxyXG5cdFx0XHRcdFx0bGV0IHVzZXJJZCA9IHRoaXMudXNlcklkO1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMubWVldGluZ0J1c2luZXNzVXNlci51c2VySWQgPT0gdXNlcklkKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMubWVldGluZ0J1c2luZXNzVXNlci5tZWV0aW5nID0gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICh0aGlzLm1lZXRpbmdDdXN0b21lclVzZXIudXNlcklkID09IHVzZXJJZCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLm1lZXRpbmdDdXN0b21lclVzZXIubWVldGluZyA9IHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAodGhpcy5tZWV0aW5nU2VydmljZVVzZXIudXNlcklkID09IHVzZXJJZCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLm1lZXRpbmdTZXJ2aWNlVXNlci5tZWV0aW5nID0gdHJ1ZTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3QudW5zaGlmdCh7XHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IGBlbnRlclJvb20gZXJyb3IgPSAke0pTT04uc3RyaW5naWZ5KGVycm9yKX1gXHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0dGhpcy5zZGtBcHBJZCAmJiB1bmkuJGVudGVyUm9vbUZhaWxlZFVwbG9hZCh0aGlzLnNka0FwcElkLCBKU09OLnN0cmluZ2lmeShlcnJvcikpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0ZXhpdFJvb20oKSB7XHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHRoaXMuc3RhcnRpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHRcdHRoaXMuc3RvcExvY2FsUHJldmlldygpO1xyXG5cdFx0XHRcdFx0dGhpcy5zdG9wUmVtb3RlVmlldygpO1xyXG5cdFx0XHRcdFx0dGhpcy50cnRjQ2xvdWQuZXhpdFJvb20oKTtcclxuXHRcdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0XHQvLyBUT0RPIGhhbmRsZSB0aGUgZXhjZXB0aW9uXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRzdGFydExvY2FsUHJldmlldygpIHtcclxuXHRcdFx0XHR0aGlzLiRuZXh0VGljaygoKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnc3RhcnRMb2NhbFByZXZpZXcnLCB0aGlzLnVzZXJJZCk7XHJcblx0XHRcdFx0XHR0aGlzLm1lZXRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdFx0dGhpcy50cnRjQ2xvdWQuc3RhcnRMb2NhbFByZXZpZXcodGhpcy5pc0Zyb250Q2FtZXJhLCB0aGlzLnVzZXJJZCk7XHJcblx0XHRcdFx0XHR0aGlzLnRydGNDbG91ZC5zdGFydExvY2FsQXVkaW8oVFJUQ0F1ZGlvUXVhbGl0eS5UUlRDQXVkaW9RdWFsaXR5RGVmYXVsdCk7XHJcblx0XHRcdFx0XHR0aGlzLnNka0FwcElkICYmIHVuaS4kc3RhcnRMb2NhbFByZXZpZXdVcGxvYWQodGhpcy5zZGtBcHBJZCk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fSxcclxuXHRcdFx0c3RvcExvY2FsUHJldmlldygpIHtcclxuXHRcdFx0XHR0aGlzLnRydGNDbG91ZC5zdG9wTG9jYWxQcmV2aWV3KCk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHN0YXJ0UmVtb3RlVmlldyh1c2VySWQpIHtcclxuXHRcdFx0XHR0aGlzLiRuZXh0VGljaygoKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnRydGNDbG91ZC5zdGFydFJlbW90ZVZpZXcodXNlcklkLCB0aGlzLnN0cmVhbVR5cGUsIHVzZXJJZCk7XHJcblx0XHRcdFx0XHR0aGlzLnNka0FwcElkICYmIHVuaS4kc3RhcnRSZW1vdGVWaWV3U3VjY2Vzc1VwbG9hZCh0aGlzLnNka0FwcElkKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRpZiAodGhpcy5tZWV0aW5nQnVzaW5lc3NVc2VyLnVzZXJJZCA9PSB1c2VySWQpIHtcclxuXHRcdFx0XHRcdHRoaXMubWVldGluZ0J1c2luZXNzVXNlci5tZWV0aW5nID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHRoaXMubWVldGluZ0N1c3RvbWVyVXNlci51c2VySWQgPT0gdXNlcklkKSB7XHJcblx0XHRcdFx0XHR0aGlzLm1lZXRpbmdDdXN0b21lclVzZXIubWVldGluZyA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh0aGlzLm1lZXRpbmdTZXJ2aWNlVXNlci51c2VySWQgPT0gdXNlcklkKSB7XHJcblx0XHRcdFx0XHR0aGlzLm1lZXRpbmdTZXJ2aWNlVXNlci5tZWV0aW5nID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHN0b3BSZW1vdGVWaWV3KHVzZXJJZCkge1xyXG5cdFx0XHRcdHRoaXMudHJ0Y0Nsb3VkLnN0b3BSZW1vdGVWaWV3KHVzZXJJZCwgdGhpcy5zdHJlYW1UeXBlKTtcclxuXHRcdFx0XHRpZiAodGhpcy5tZWV0aW5nQnVzaW5lc3NVc2VyLnVzZXJJZCA9PSB1c2VySWQpIHtcclxuXHRcdFx0XHRcdHRoaXMubWVldGluZ0J1c2luZXNzVXNlci5tZWV0aW5nID0gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh0aGlzLm1lZXRpbmdDdXN0b21lclVzZXIudXNlcklkID09IHVzZXJJZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5tZWV0aW5nQ3VzdG9tZXJVc2VyLm1lZXRpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHRoaXMubWVldGluZ1NlcnZpY2VVc2VyLnVzZXJJZCA9PSB1c2VySWQpIHtcclxuXHRcdFx0XHRcdHRoaXMubWVldGluZ1NlcnZpY2VVc2VyLm1lZXRpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHR9LFxyXG5cdFx0XHQvLyDlkKznrZLjgIHlhY3mj5Ag5YiH5o2iXHJcblx0XHRcdHN3aXRjaEF1ZGlvUm91dGUoKSB7XHJcblx0XHRcdFx0dGhpcy5hdWRpb1JvdXRlID0gdGhpcy5hdWRpb1JvdXRlID09PSBUUlRDQ2xvdWREZWYuVFJUQ19BVURJT19ST1VURV9TUEVBS0VSID8gVFJUQ0Nsb3VkRGVmXHJcblx0XHRcdFx0XHQuVFJUQ19BVURJT19ST1VURV9FQVJQSUVDRSA6IFRSVENDbG91ZERlZi5UUlRDX0FVRElPX1JPVVRFX1NQRUFLRVI7XHJcblx0XHRcdFx0dGhpcy50cnRjQ2xvdWQuc2V0QXVkaW9Sb3V0ZSh0aGlzLmF1ZGlvUm91dGUpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRoYW5kbGVFdmVudHMoKSB7XHJcblx0XHRcdFx0dGhpcy50cnRjQ2xvdWQub24oJ29uV2FybmluZycsIChyZXMpID0+IHtcclxuXHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogYG9uV2FybmluZzogJHtKU09OLnN0cmluZ2lmeShyZXMpfWAsXHJcblx0XHRcdFx0XHRcdGljb246ICdub25lJyxcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHRoaXMudHJ0Y0Nsb3VkLm9uKCdvbkVycm9yJywgKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coJ29uRXJyb3InLCByZXMpXHJcblx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VMaXN0LnVuc2hpZnQoe1xyXG5cdFx0XHRcdFx0XHRjb250ZW50OiBgZXJyb3I6ICR7SlNPTi5zdHJpbmdpZnkocmVzKX1gXHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0dGhpcy5zZGtBcHBJZCAmJiB1bmkuJG9uRXJyb3JVcGxvYWQodGhpcy5zZGtBcHBJZCwgSlNPTi5zdHJpbmdpZnkocmVzKSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dGhpcy50cnRjQ2xvdWQub24oJ29uRW50ZXJSb29tJywgKHJlc3VsdCkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coYC0gb25FbnRlclJvb20gPSAke3Jlc3VsdH1gKTtcclxuXHRcdFx0XHRcdGlmIChyZXN1bHQgPiAwKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3QudW5zaGlmdCh7XHJcblx0XHRcdFx0XHRcdFx0Y29udGVudDogYOi/m+aIv+aIkOWKn++8jOiAl+aXtjogJHtyZXN1bHR9bXNgXHJcblx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhgZW50ZXIgcm9vbSBmYWlsZWTvvIxlcnJvciBjb2RlID0gJHtyZXN1bHR9YCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dGhpcy50cnRjQ2xvdWQub24oJ29uRXhpdFJvb20nLCAocmVhc29uKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCByZWFzb25MaXN0ID0gWyfkuLvliqjosIPnlKggZXhpdFJvb20g6YCA5oi/JywgJ+iiq+acjeWKoeWZqOi4ouWHuuW9k+WJjeaIv+mXtCcsICflvZPliY3miL/pl7TmlbTkuKrooqvop6PmlaMnXTtcclxuXHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3QudW5zaGlmdCh7XHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IGDpgIDmiL8gJHtyZWFzb25MaXN0W3JlYXNvbl19YFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR0aGlzLm1lZXRpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHR0aGlzLnRydGNDbG91ZC5vbignb25GaXJzdFZpZGVvRnJhbWUnLCAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhg5riy5p+T55qE6aaW5bin55S76Z2i5ZON5bqUID0gJHtKU09OLnN0cmluZ2lmeShyZXMpfWApO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHRoaXMudHJ0Y0Nsb3VkLm9uKCdvblJlbW90ZVVzZXJFbnRlclJvb20nLCAodXNlcklkKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZygnb25SZW1vdGVVc2VyRW50ZXJSb29tJywgdXNlcklkKTtcclxuXHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3QudW5zaGlmdCh7XHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IGDnlKjmiLcke3VzZXJJZH3liqDlhaXop4bpopHogYrlpKlgXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdHRoaXMuc3RhcnRSZW1vdGVWaWV3KHVzZXJJZCk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dGhpcy50cnRjQ2xvdWQub24oJ29uUmVtb3RlVXNlckxlYXZlUm9vbScsICh1c2VySWQpID0+IHtcclxuXHRcdFx0XHRcdGxldCBpbmRleCA9IHRoaXMubWVldGluZ1VzZXJzLmZpbmRJbmRleCh0ID0+IHQudXNlcklkID09IHVzZXJJZCk7XHJcblx0XHRcdFx0XHRpZiAoaW5kZXggPj0gMCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLm1lZXRpbmdVc2Vycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKHRoaXMubWVldGluZ1VzZXJzLmxlbmd0aCA8IDIpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5tZWV0aW5nVXNlcnMucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0dHlwZTogJ+etieW+hei/m+WFpSdcclxuXHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMubWVzc2FnZUxpc3QudW5zaGlmdCh7XHJcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IGDnlKjmiLfnprvlvIDmiL/pl7Q6IHVzZXJJZCA9ICR7dXNlcklkfWBcclxuXHRcdFx0XHRcdH0pXHJcblxyXG5cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHR0aGlzLnRydGNDbG91ZC5vbignb25Vc2VyVmlkZW9BdmFpbGFibGUnLCAocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCB7XHJcblx0XHRcdFx0XHRcdHVzZXJJZCxcclxuXHRcdFx0XHRcdFx0YXZhaWxhYmxlXHJcblx0XHRcdFx0XHR9ID0gcmVzO1xyXG5cdFx0XHRcdFx0aWYgKGF2YWlsYWJsZSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN0YXJ0TG9jYWxQcmV2aWV3KCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAodXNlcklkICYmIGF2YWlsYWJsZSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN0YXJ0UmVtb3RlVmlldyh1c2VySWQpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zdG9wUmVtb3RlVmlldyh1c2VySWQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdHRoaXMudHJ0Y0Nsb3VkLm9uKCdvbkV4aXRSb29tJywgKHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coYG9uRXhpdFJvb20gPSAke0pTT04uc3RyaW5naWZ5KHJlcyl9YCk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblx0XHR9XHJcblx0fVxyXG48L3NjcmlwdD5cclxuPHN0eWxlIHNyYz1cIkAvcGFnZXMvbWVldGluZy9tZWV0aW5nLmNzc1wiPjwvc3R5bGU+XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///46\n"); /***/ }), /* 47 */ @@ -2475,7 +2473,7 @@ __webpack_require__.r(__webpack_exports__); module.exports = { "hide": { - "position": "fixed", + "position": "absolute", "top": "-1000", "left": "-1000" },