|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/guide/guide_controller.js';
|
var __require = nodeEnv ? function (request) {
|
return cc.require(request);
|
} : function (request) {
|
return __quick_compile_project__.require(request, __filename);
|
};
|
function __define (exports, require, module) {
|
if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
|
cc._RF.push(module, 'bb271us3xdCWoCufE4ruTzR', 'guide_controller');
|
// Scripts/mod/guide/guide_controller.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里填写详细说明,主要填写该模块的功能简要
|
// <br/>Create: 2019-04-15 14:38:52
|
// --------------------------------------------------------------------
|
var StoryController = require("story_controller");
|
|
var GuideMainView = require("guide_main_window");
|
|
var StoryEvent = require("story_event");
|
|
var GuideEvent = require("guide_event");
|
|
var GuideController = cc.Class({
|
"extends": BaseController,
|
ctor: function ctor() {},
|
// 初始化配置数据
|
initConfig: function initConfig() {
|
var GuideModel = require("guide_model");
|
|
this.model = new GuideModel();
|
this.model.initConfig();
|
this.is_guiding = false;
|
this.guide_list = []; // 缓存的引导id
|
},
|
// 返回当前的model
|
getModel: function getModel() {
|
return this.model;
|
},
|
// 注册监听事件
|
registerEvents: function registerEvents() {
|
// this.init_role_event = gcore.GlobalEvent.bind(EventId.EVT_ROLE_CREATE_SUCCESS, function() {
|
// var data = {};
|
// data.id = 10185;
|
// this.handle11120(data);
|
// }.bind(this))
|
this.init_role_event = gcore.GlobalEvent.bind(StoryEvent.STORY_OVER, function () {
|
if (this.guide_list && this.guide_list.length > 0) {
|
var cur_guide = this.guide_list.shift();
|
this.checkGuideToPlay(cur_guide);
|
}
|
}.bind(this));
|
this.can_play_drama_event = gcore.GlobalEvent.bind(StoryEvent.PREPARE_PLAY_PLOT, function () {
|
if (this.guide_list != null && Utils.next(this.guide_list) != null) {
|
if (this.guide_list.length) {
|
var config = this.guide_list.splice(0, 1); //table.remove(self.guide_list, 1)
|
|
this.checkGuideToPlay(config);
|
}
|
}
|
}.bind(this));
|
},
|
// 注册协议接受事件
|
registerProtocals: function registerProtocals() {
|
this.RegisterProtocal(11120, this.handle11120.bind(this)); // 播放引导
|
|
this.RegisterProtocal(11121, this.handle11121.bind(this)); // 引导心跳包
|
|
this.RegisterProtocal(11123, this.handle11123.bind(this)); // 清除所有剧情和引导
|
},
|
handle11120: function handle11120(data) {
|
cc.log("收到服务端执行引导协议");
|
cc.log(data); // return;
|
|
if (!data || !data.id) return;
|
if (this.cur_guide_config && this.cur_guide_config.id == data.id) return; // 如果没有引导数据,直接结束掉
|
|
var config = Config.drama_data.data_guide[data.id];
|
|
if (!config) {
|
this.startPlayGuide(false, data.id);
|
return;
|
} // 储存服务器发送过来的该引导已经完成的步数
|
|
|
this.startPlayGuide(true, data.id);
|
},
|
send11121: function send11121(guide_id, step) {
|
var protocal = {};
|
protocal.id = guide_id;
|
protocal.n = step;
|
this.SendProtocal(11121, protocal);
|
},
|
handle11121: function handle11121(data) {
|
if (this.guide_view) {
|
cc.log("保存成功,服务器返回");
|
this.guide_view.doNextGuideFromServer(data.id, data.n);
|
}
|
},
|
handle11123: function handle11123() {},
|
// ==============================--
|
// desc:开始播放客户端引导
|
// time:2017-07-24 08:06:26
|
// @status:
|
// @id:
|
// @return
|
// ==============================--
|
startPlayGuide: function startPlayGuide(status, id, is_skip) {
|
gcore.GlobalEvent.fire(GuideEvent.CloseButtonListPanelEffect);
|
|
if (!status) {
|
// 这个时候做一个处理吧
|
this.delayTouchEnabled();
|
|
if (this.guide_view) {
|
this.guide_view.close();
|
this.guide_view = null;
|
}
|
|
this.is_guiding = false;
|
this.cur_guide_config = null;
|
this.send11122(id, is_skip); // 是否有下一个引导
|
|
if (this.guide_list && this.guide_list.length > 0) {
|
cc.log("执行缓存中的引导");
|
var config = this.guide_list.shift();
|
this.checkGuideToPlay(config);
|
} else {
|
// 主ui的聊天气泡
|
var MainuiController = require("mainui_controller");
|
|
MainuiController.getInstance().setMainUIChatBubbleStatus(true);
|
}
|
} else {
|
cc.log("222"); // 如果客户端缓存已经完成了该引导则不需要继续了
|
// var guide_cache = RoleEnv:getInstance():get(RoleEnv.keys.guide_step_list, {})
|
// if guide_cache[id] ~= nil then
|
// if guide_cache[id][RoleEnv.keys.guide_over_step] == true then
|
// this.startPlayGuide(false, id)
|
// return
|
// end
|
// end
|
|
var config = Config.drama_data.data_guide[id];
|
|
var RoleController = require("role_controller");
|
|
var role_vo = RoleController.getInstance().getRoleVo();
|
var guide_cache_data = cc.sys.localStorage.getItem("guide_data" + role_vo.srv_id + role_vo.rid);
|
|
if (guide_cache_data) {
|
guide_cache_data = JSON.parse(guide_cache_data);
|
|
if (guide_cache_data[id] && guide_cache_data[id][config.over_step]) {
|
this.startPlayGuide(false, id);
|
return;
|
}
|
}
|
|
if (!config || !config.act || config.act.length == 0) {
|
this.startPlayGuide(false, id);
|
return;
|
}
|
|
cc.log("111"); // 判断播放引导
|
|
this.checkGuideToPlay(config);
|
}
|
},
|
send11122: function send11122(id, is_skip) {
|
if (is_skip) {
|
is_skip = true;
|
} else {
|
is_skip = false;
|
}
|
|
var protocal = {};
|
protocal.id = id;
|
protocal.is_skip = is_skip;
|
this.SendProtocal(11122, protocal);
|
},
|
checkGuideToPlay: function checkGuideToPlay(config) {
|
if (!config) return; // 正在播放当前引导,不需要储存了
|
|
if (this.cur_guide_config && this.cur_guide_config.id == config.id) return; // 待播放引导列表里面存在,也不需要存了
|
|
for (var guide_i in this.guide_list) {
|
if (this.guide_list[guide_i].id == config.id) return;
|
} // 剧情状态下.不播放引导
|
|
|
var story_status = StoryController.getInstance().getModel().isStoryState() || false;
|
|
if (story_status) {
|
this.guide_list.push(config);
|
return;
|
} // 如果出升级提示
|
// var is_inlevipgrade = LevupgradeController:getInstance():waitLevupgrade()
|
// if is_inlevipgrade then
|
// table_insert( self.guide_list, 1, config )
|
// return
|
// end
|
// 如果在引导中的时候,不播,缓存这吧
|
|
|
if (this.cur_guide_config) {
|
this.guide_list.push(config);
|
return;
|
}
|
|
cc.log("3333");
|
|
if (config.act.length > 0) {
|
this.playGuide(config);
|
} else {
|
this.startPlayGuide(false, config.bid);
|
}
|
},
|
playGuide: function playGuide(config) {
|
if (this.is_guiding) return;
|
this.cur_guide_config = config;
|
this.is_guiding = true;
|
|
if (config.is_close == 1) {
|
Utils.closeAllWindow(); // BaseView.closeAllView()
|
} // BaseView.closeSomeWin()
|
// 主ui的聊天气泡
|
// var MainuiController = require("mainui_controller")
|
// MainuiController.getInstance().setMainUIChatBubbleStatus(false)
|
|
|
if (!this.guide_view) {
|
this.guide_view = new GuideMainView(this);
|
}
|
|
this.guide_view.open();
|
this.guide_view.addGuid(config);
|
},
|
delayTouchEnabled: function delayTouchEnabled() {},
|
isInGuide: function isInGuide() {
|
return this.is_guiding;
|
},
|
//打开任务引导
|
openTaskGuideWindow: function openTaskGuideWindow(status, config) {
|
if (status) {
|
if (this.task_guide_window == null) {
|
this.task_guide_window = Utils.createClass("task_guide_window");
|
}
|
|
this.task_guide_window.open(config);
|
} else {
|
if (this.task_guide_window) {
|
this.task_guide_window.close();
|
}
|
|
this.task_guide_window = null;
|
}
|
},
|
getTaskGuideWindow: function getTaskGuideWindow() {
|
return this.task_guide_window;
|
},
|
getTaskGuideEffectStatus: function getTaskGuideEffectStatus() {
|
if (this.task_guide_window) {
|
return this.task_guide_window.getEffectActive();
|
}
|
|
return false;
|
},
|
setGuideMainRootWnd: function setGuideMainRootWnd(status) {
|
if (this.guide_view) {
|
this.guide_view.root_wnd.active = status;
|
}
|
}
|
});
|
module.exports = GuideController;
|
|
cc._RF.pop();
|
}
|
if (nodeEnv) {
|
__define(__module.exports, __require, __module);
|
}
|
else {
|
__quick_compile_project__.registerModuleFunc(__filename, function () {
|
__define(__module.exports, __require, __module);
|
});
|
}
|
})();
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxndWlkZVxcZ3VpZGVfY29udHJvbGxlci5qcyJdLCJuYW1lcyI6WyJTdG9yeUNvbnRyb2xsZXIiLCJyZXF1aXJlIiwiR3VpZGVNYWluVmlldyIsIlN0b3J5RXZlbnQiLCJHdWlkZUV2ZW50IiwiR3VpZGVDb250cm9sbGVyIiwiY2MiLCJDbGFzcyIsIkJhc2VDb250cm9sbGVyIiwiY3RvciIsImluaXRDb25maWciLCJHdWlkZU1vZGVsIiwibW9kZWwiLCJpc19ndWlkaW5nIiwiZ3VpZGVfbGlzdCIsImdldE1vZGVsIiwicmVnaXN0ZXJFdmVudHMiLCJpbml0X3JvbGVfZXZlbnQiLCJnY29yZSIsIkdsb2JhbEV2ZW50IiwiYmluZCIsIlNUT1JZX09WRVIiLCJsZW5ndGgiLCJjdXJfZ3VpZGUiLCJzaGlmdCIsImNoZWNrR3VpZGVUb1BsYXkiLCJjYW5fcGxheV9kcmFtYV9ldmVudCIsIlBSRVBBUkVfUExBWV9QTE9UIiwiVXRpbHMiLCJuZXh0IiwiY29uZmlnIiwic3BsaWNlIiwicmVnaXN0ZXJQcm90b2NhbHMiLCJSZWdpc3RlclByb3RvY2FsIiwiaGFuZGxlMTExMjAiLCJoYW5kbGUxMTEyMSIsImhhbmRsZTExMTIzIiwiZGF0YSIsImxvZyIsImlkIiwiY3VyX2d1aWRlX2NvbmZpZyIsIkNvbmZpZyIsImRyYW1hX2RhdGEiLCJkYXRhX2d1aWRlIiwic3RhcnRQbGF5R3VpZGUiLCJzZW5kMTExMjEiLCJndWlkZV9pZCIsInN0ZXAiLCJwcm90b2NhbCIsIm4iLCJTZW5kUHJvdG9jYWwiLCJndWlkZV92aWV3IiwiZG9OZXh0R3VpZGVGcm9tU2VydmVyIiwic3RhdHVzIiwiaXNfc2tpcCIsImZpcmUiLCJDbG9zZUJ1dHRvbkxpc3RQYW5lbEVmZmVjdCIsImRlbGF5VG91Y2hFbmFibGVkIiwiY2xvc2UiLCJzZW5kMTExMjIiLCJNYWludWlDb250cm9sbGVyIiwiZ2V0SW5zdGFuY2UiLCJzZXRNYWluVUlDaGF0QnViYmxlU3RhdHVzIiwiUm9sZUNvbnRyb2xsZXIiLCJyb2xlX3ZvIiwiZ2V0Um9sZVZvIiwiZ3VpZGVfY2FjaGVfZGF0YSIsInN5cyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJzcnZfaWQiLCJyaWQiLCJKU09OIiwicGFyc2UiLCJvdmVyX3N0ZXAiLCJhY3QiLCJndWlkZV9pIiwic3Rvcnlfc3RhdHVzIiwiaXNTdG9yeVN0YXRlIiwicHVzaCIsInBsYXlHdWlkZSIsImJpZCIsImlzX2Nsb3NlIiwiY2xvc2VBbGxXaW5kb3ciLCJvcGVuIiwiYWRkR3VpZCIsImlzSW5HdWlkZSIsIm9wZW5UYXNrR3VpZGVXaW5kb3ciLCJ0YXNrX2d1aWRlX3dpbmRvdyIsImNyZWF0ZUNsYXNzIiwiZ2V0VGFza0d1aWRlV2luZG93IiwiZ2V0VGFza0d1aWRlRWZmZWN0U3RhdHVzIiwiZ2V0RWZmZWN0QWN0aXZlIiwic2V0R3VpZGVNYWluUm9vdFduZCIsInJvb3Rfd25kIiwiYWN0aXZlIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxlQUFlLEdBQUdDLE9BQU8sQ0FBQyxrQkFBRCxDQUE3Qjs7QUFDQSxJQUFJQyxhQUFhLEdBQUtELE9BQU8sQ0FBQyxtQkFBRCxDQUE3Qjs7QUFDQSxJQUFJRSxVQUFVLEdBQVFGLE9BQU8sQ0FBQyxhQUFELENBQTdCOztBQUNBLElBQUlHLFVBQVUsR0FBUUgsT0FBTyxDQUFDLGFBQUQsQ0FBN0I7O0FBRUEsSUFBSUksZUFBZSxHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUMzQixhQUFTQyxjQURrQjtBQUUzQkMsRUFBQUEsSUFBSSxFQUFFLGdCQUFZLENBQ2pCLENBSDBCO0FBSzNCO0FBQ0FDLEVBQUFBLFVBQVUsRUFBRSxzQkFBWTtBQUNwQixRQUFJQyxVQUFVLEdBQUdWLE9BQU8sQ0FBQyxhQUFELENBQXhCOztBQUVBLFNBQUtXLEtBQUwsR0FBYSxJQUFJRCxVQUFKLEVBQWI7QUFDQSxTQUFLQyxLQUFMLENBQVdGLFVBQVg7QUFDQSxTQUFLRyxVQUFMLEdBQWtCLEtBQWxCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixFQUFsQixDQU5vQixDQU1TO0FBQ2hDLEdBYjBCO0FBZTNCO0FBQ0FDLEVBQUFBLFFBQVEsRUFBRSxvQkFBWTtBQUNsQixXQUFPLEtBQUtILEtBQVo7QUFDSCxHQWxCMEI7QUFvQjNCO0FBQ0FJLEVBQUFBLGNBQWMsRUFBRSwwQkFBWTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBS0MsZUFBTCxHQUF1QkMsS0FBSyxDQUFDQyxXQUFOLENBQWtCQyxJQUFsQixDQUF1QmpCLFVBQVUsQ0FBQ2tCLFVBQWxDLEVBQThDLFlBQVc7QUFDNUUsVUFBSSxLQUFLUCxVQUFMLElBQW1CLEtBQUtBLFVBQUwsQ0FBZ0JRLE1BQWhCLEdBQXlCLENBQWhELEVBQW1EO0FBQy9DLFlBQUlDLFNBQVMsR0FBRyxLQUFLVCxVQUFMLENBQWdCVSxLQUFoQixFQUFoQjtBQUNBLGFBQUtDLGdCQUFMLENBQXNCRixTQUF0QjtBQUNIO0FBQ0osS0FMb0UsQ0FLbkVILElBTG1FLENBSzlELElBTDhELENBQTlDLENBQXZCO0FBTUEsU0FBS00sb0JBQUwsR0FBNEJSLEtBQUssQ0FBQ0MsV0FBTixDQUFrQkMsSUFBbEIsQ0FBdUJqQixVQUFVLENBQUN3QixpQkFBbEMsRUFBcUQsWUFBVTtBQUN2RixVQUFHLEtBQUtiLFVBQUwsSUFBbUIsSUFBbkIsSUFBMkJjLEtBQUssQ0FBQ0MsSUFBTixDQUFXLEtBQUtmLFVBQWhCLEtBQStCLElBQTdELEVBQWtFO0FBQzlELFlBQUcsS0FBS0EsVUFBTCxDQUFnQlEsTUFBbkIsRUFBMEI7QUFDdEIsY0FBSVEsTUFBTSxHQUFHLEtBQUtoQixVQUFMLENBQWdCaUIsTUFBaEIsQ0FBdUIsQ0FBdkIsRUFBeUIsQ0FBekIsQ0FBYixDQURzQixDQUNrQjs7QUFDeEMsZUFBS04sZ0JBQUwsQ0FBc0JLLE1BQXRCO0FBQ0g7QUFDSjtBQUNKLEtBUGdGLENBTy9FVixJQVArRSxDQU8xRSxJQVAwRSxDQUFyRCxDQUE1QjtBQVFILEdBekMwQjtBQTJDM0I7QUFDQVksRUFBQUEsaUJBQWlCLEVBQUUsNkJBQVk7QUFDM0IsU0FBS0MsZ0JBQUwsQ0FBc0IsS0FBdEIsRUFBNkIsS0FBS0MsV0FBTCxDQUFpQmQsSUFBakIsQ0FBc0IsSUFBdEIsQ0FBN0IsRUFEMkIsQ0FDa0M7O0FBQzdELFNBQUthLGdCQUFMLENBQXNCLEtBQXRCLEVBQTZCLEtBQUtFLFdBQUwsQ0FBaUJmLElBQWpCLENBQXNCLElBQXRCLENBQTdCLEVBRjJCLENBRWtDOztBQUM3RCxTQUFLYSxnQkFBTCxDQUFzQixLQUF0QixFQUE2QixLQUFLRyxXQUFMLENBQWlCaEIsSUFBakIsQ0FBc0IsSUFBdEIsQ0FBN0IsRUFIMkIsQ0FHa0M7QUFDaEUsR0FoRDBCO0FBa0QzQmMsRUFBQUEsV0FBVyxFQUFFLHFCQUFTRyxJQUFULEVBQWU7QUFDeEIvQixJQUFBQSxFQUFFLENBQUNnQyxHQUFILENBQU8sYUFBUDtBQUNBaEMsSUFBQUEsRUFBRSxDQUFDZ0MsR0FBSCxDQUFPRCxJQUFQLEVBRndCLENBR3hCOztBQUNBLFFBQUksQ0FBQ0EsSUFBRCxJQUFTLENBQUNBLElBQUksQ0FBQ0UsRUFBbkIsRUFBdUI7QUFDdkIsUUFBSSxLQUFLQyxnQkFBTCxJQUF5QixLQUFLQSxnQkFBTCxDQUFzQkQsRUFBdEIsSUFBNEJGLElBQUksQ0FBQ0UsRUFBOUQsRUFBa0UsT0FMMUMsQ0FNeEI7O0FBQ0EsUUFBSVQsTUFBTSxHQUFHVyxNQUFNLENBQUNDLFVBQVAsQ0FBa0JDLFVBQWxCLENBQTZCTixJQUFJLENBQUNFLEVBQWxDLENBQWI7O0FBQ0EsUUFBSSxDQUFDVCxNQUFMLEVBQWE7QUFDVCxXQUFLYyxjQUFMLENBQW9CLEtBQXBCLEVBQTJCUCxJQUFJLENBQUNFLEVBQWhDO0FBQ0E7QUFDSCxLQVh1QixDQWF4Qjs7O0FBQ0EsU0FBS0ssY0FBTCxDQUFvQixJQUFwQixFQUEwQlAsSUFBSSxDQUFDRSxFQUEvQjtBQUNILEdBakUwQjtBQW1FM0JNLEVBQUFBLFNBQVMsRUFBRSxtQkFBU0MsUUFBVCxFQUFtQkMsSUFBbkIsRUFBeUI7QUFDaEMsUUFBSUMsUUFBUSxHQUFHLEVBQWY7QUFDQUEsSUFBQUEsUUFBUSxDQUFDVCxFQUFULEdBQWNPLFFBQWQ7QUFDQUUsSUFBQUEsUUFBUSxDQUFDQyxDQUFULEdBQWFGLElBQWI7QUFDQSxTQUFLRyxZQUFMLENBQWtCLEtBQWxCLEVBQXlCRixRQUF6QjtBQUNILEdBeEUwQjtBQTBFM0JiLEVBQUFBLFdBQVcsRUFBRSxxQkFBU0UsSUFBVCxFQUFlO0FBQ3hCLFFBQUksS0FBS2MsVUFBVCxFQUFxQjtBQUNqQjdDLE1BQUFBLEVBQUUsQ0FBQ2dDLEdBQUgsQ0FBTyxZQUFQO0FBQ0EsV0FBS2EsVUFBTCxDQUFnQkMscUJBQWhCLENBQXNDZixJQUFJLENBQUNFLEVBQTNDLEVBQStDRixJQUFJLENBQUNZLENBQXBEO0FBQ0g7QUFDSixHQS9FMEI7QUFpRjNCYixFQUFBQSxXQUFXLEVBQUUsdUJBQVcsQ0FFdkIsQ0FuRjBCO0FBcUYzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBUSxFQUFBQSxjQUFjLEVBQUUsd0JBQVNTLE1BQVQsRUFBaUJkLEVBQWpCLEVBQXFCZSxPQUFyQixFQUE4QjtBQUMxQ3BDLElBQUFBLEtBQUssQ0FBQ0MsV0FBTixDQUFrQm9DLElBQWxCLENBQXVCbkQsVUFBVSxDQUFDb0QsMEJBQWxDOztBQUNBLFFBQUksQ0FBQ0gsTUFBTCxFQUFhO0FBQ1Q7QUFDQSxXQUFLSSxpQkFBTDs7QUFDQSxVQUFJLEtBQUtOLFVBQVQsRUFBcUI7QUFDakIsYUFBS0EsVUFBTCxDQUFnQk8sS0FBaEI7QUFDQSxhQUFLUCxVQUFMLEdBQWtCLElBQWxCO0FBQ0g7O0FBQ0QsV0FBS3RDLFVBQUwsR0FBa0IsS0FBbEI7QUFDQSxXQUFLMkIsZ0JBQUwsR0FBd0IsSUFBeEI7QUFDQSxXQUFLbUIsU0FBTCxDQUFlcEIsRUFBZixFQUFtQmUsT0FBbkIsRUFUUyxDQVdUOztBQUNBLFVBQUksS0FBS3hDLFVBQUwsSUFBbUIsS0FBS0EsVUFBTCxDQUFnQlEsTUFBaEIsR0FBeUIsQ0FBaEQsRUFBbUQ7QUFDL0NoQixRQUFBQSxFQUFFLENBQUNnQyxHQUFILENBQU8sVUFBUDtBQUNBLFlBQUlSLE1BQU0sR0FBRyxLQUFLaEIsVUFBTCxDQUFnQlUsS0FBaEIsRUFBYjtBQUNJLGFBQUtDLGdCQUFMLENBQXNCSyxNQUF0QjtBQUNQLE9BSkQsTUFJTztBQUNIO0FBQ0EsWUFBSThCLGdCQUFnQixHQUFHM0QsT0FBTyxDQUFDLG1CQUFELENBQTlCOztBQUNBMkQsUUFBQUEsZ0JBQWdCLENBQUNDLFdBQWpCLEdBQStCQyx5QkFBL0IsQ0FBeUQsSUFBekQ7QUFDSDtBQUNKLEtBckJELE1BcUJPO0FBQ0h4RCxNQUFBQSxFQUFFLENBQUNnQyxHQUFILENBQU8sS0FBUCxFQURHLENBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFJUixNQUFNLEdBQUdXLE1BQU0sQ0FBQ0MsVUFBUCxDQUFrQkMsVUFBbEIsQ0FBNkJKLEVBQTdCLENBQWI7O0FBRUEsVUFBSXdCLGNBQWMsR0FBRzlELE9BQU8sQ0FBQyxpQkFBRCxDQUE1Qjs7QUFDQSxVQUFJK0QsT0FBTyxHQUFHRCxjQUFjLENBQUNGLFdBQWYsR0FBNkJJLFNBQTdCLEVBQWQ7QUFFQSxVQUFJQyxnQkFBZ0IsR0FBRzVELEVBQUUsQ0FBQzZELEdBQUgsQ0FBT0MsWUFBUCxDQUFvQkMsT0FBcEIsQ0FBNEIsZUFBZUwsT0FBTyxDQUFDTSxNQUF2QixHQUFnQ04sT0FBTyxDQUFDTyxHQUFwRSxDQUF2Qjs7QUFFQSxVQUFJTCxnQkFBSixFQUFzQjtBQUNsQkEsUUFBQUEsZ0JBQWdCLEdBQUdNLElBQUksQ0FBQ0MsS0FBTCxDQUFXUCxnQkFBWCxDQUFuQjs7QUFDQSxZQUFJQSxnQkFBZ0IsQ0FBQzNCLEVBQUQsQ0FBaEIsSUFBd0IyQixnQkFBZ0IsQ0FBQzNCLEVBQUQsQ0FBaEIsQ0FBcUJULE1BQU0sQ0FBQzRDLFNBQTVCLENBQTVCLEVBQW9FO0FBQ2hFLGVBQUs5QixjQUFMLENBQW9CLEtBQXBCLEVBQTJCTCxFQUEzQjtBQUNBO0FBQ0g7QUFDSjs7QUFFRCxVQUFJLENBQUNULE1BQUQsSUFBVyxDQUFDQSxNQUFNLENBQUM2QyxHQUFuQixJQUEwQjdDLE1BQU0sQ0FBQzZDLEdBQVAsQ0FBV3JELE1BQVgsSUFBcUIsQ0FBbkQsRUFBc0Q7QUFDbEQsYUFBS3NCLGNBQUwsQ0FBb0IsS0FBcEIsRUFBMkJMLEVBQTNCO0FBQ0E7QUFDSDs7QUFFRGpDLE1BQUFBLEVBQUUsQ0FBQ2dDLEdBQUgsQ0FBTyxLQUFQLEVBL0JHLENBaUNIOztBQUNBLFdBQUtiLGdCQUFMLENBQXNCSyxNQUF0QjtBQUNIO0FBQ0osR0F2SjBCO0FBeUozQjZCLEVBQUFBLFNBQVMsRUFBRSxtQkFBU3BCLEVBQVQsRUFBYWUsT0FBYixFQUFzQjtBQUM3QixRQUFJQSxPQUFKLEVBQWE7QUFDVEEsTUFBQUEsT0FBTyxHQUFHLElBQVY7QUFDSCxLQUZELE1BRU87QUFDSEEsTUFBQUEsT0FBTyxHQUFHLEtBQVY7QUFDSDs7QUFFRCxRQUFJTixRQUFRLEdBQUcsRUFBZjtBQUNBQSxJQUFBQSxRQUFRLENBQUNULEVBQVQsR0FBY0EsRUFBZDtBQUNBUyxJQUFBQSxRQUFRLENBQUNNLE9BQVQsR0FBbUJBLE9BQW5CO0FBQ0EsU0FBS0osWUFBTCxDQUFrQixLQUFsQixFQUF5QkYsUUFBekI7QUFDSCxHQXBLMEI7QUFzSzNCdkIsRUFBQUEsZ0JBQWdCLEVBQUUsMEJBQVNLLE1BQVQsRUFBaUI7QUFDL0IsUUFBSSxDQUFDQSxNQUFMLEVBQWEsT0FEa0IsQ0FHL0I7O0FBQ0EsUUFBSSxLQUFLVSxnQkFBTCxJQUF5QixLQUFLQSxnQkFBTCxDQUFzQkQsRUFBdEIsSUFBNEJULE1BQU0sQ0FBQ1MsRUFBaEUsRUFBb0UsT0FKckMsQ0FNL0I7O0FBQ0EsU0FBSyxJQUFJcUMsT0FBVCxJQUFvQixLQUFLOUQsVUFBekIsRUFBcUM7QUFDakMsVUFBSSxLQUFLQSxVQUFMLENBQWdCOEQsT0FBaEIsRUFBeUJyQyxFQUF6QixJQUErQlQsTUFBTSxDQUFDUyxFQUExQyxFQUNJO0FBQ1AsS0FWOEIsQ0FZL0I7OztBQUNBLFFBQUlzQyxZQUFZLEdBQUc3RSxlQUFlLENBQUM2RCxXQUFoQixHQUE4QjlDLFFBQTlCLEdBQXlDK0QsWUFBekMsTUFBMkQsS0FBOUU7O0FBQ0EsUUFBSUQsWUFBSixFQUFrQjtBQUNkLFdBQUsvRCxVQUFMLENBQWdCaUUsSUFBaEIsQ0FBcUJqRCxNQUFyQjtBQUNBO0FBQ0gsS0FqQjhCLENBbUIvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7O0FBQ0EsUUFBSSxLQUFLVSxnQkFBVCxFQUEyQjtBQUN2QixXQUFLMUIsVUFBTCxDQUFnQmlFLElBQWhCLENBQXFCakQsTUFBckI7QUFDQTtBQUNIOztBQUVEeEIsSUFBQUEsRUFBRSxDQUFDZ0MsR0FBSCxDQUFPLE1BQVA7O0FBRUEsUUFBSVIsTUFBTSxDQUFDNkMsR0FBUCxDQUFXckQsTUFBWCxHQUFvQixDQUF4QixFQUEyQjtBQUN2QixXQUFLMEQsU0FBTCxDQUFlbEQsTUFBZjtBQUNILEtBRkQsTUFFTztBQUNILFdBQUtjLGNBQUwsQ0FBb0IsS0FBcEIsRUFBMkJkLE1BQU0sQ0FBQ21ELEdBQWxDO0FBQ0g7QUFDSixHQTdNMEI7QUErTTNCRCxFQUFBQSxTQUFTLEVBQUUsbUJBQVNsRCxNQUFULEVBQWlCO0FBQ3hCLFFBQUksS0FBS2pCLFVBQVQsRUFBcUI7QUFDckIsU0FBSzJCLGdCQUFMLEdBQXdCVixNQUF4QjtBQUNBLFNBQUtqQixVQUFMLEdBQWtCLElBQWxCOztBQUVBLFFBQUlpQixNQUFNLENBQUNvRCxRQUFQLElBQW1CLENBQXZCLEVBQTBCO0FBQ3RCdEQsTUFBQUEsS0FBSyxDQUFDdUQsY0FBTixHQURzQixDQUV0QjtBQUNILEtBUnVCLENBU3hCO0FBRUE7QUFDQTtBQUNBOzs7QUFFQSxRQUFJLENBQUMsS0FBS2hDLFVBQVYsRUFBc0I7QUFDbEIsV0FBS0EsVUFBTCxHQUFrQixJQUFJakQsYUFBSixDQUFrQixJQUFsQixDQUFsQjtBQUNIOztBQUVELFNBQUtpRCxVQUFMLENBQWdCaUMsSUFBaEI7QUFDQSxTQUFLakMsVUFBTCxDQUFnQmtDLE9BQWhCLENBQXdCdkQsTUFBeEI7QUFDSCxHQXBPMEI7QUFzTzNCMkIsRUFBQUEsaUJBQWlCLEVBQUUsNkJBQVcsQ0FFN0IsQ0F4TzBCO0FBME8zQjZCLEVBQUFBLFNBQVMsRUFBRSxxQkFBVztBQUNsQixXQUFPLEtBQUt6RSxVQUFaO0FBQ0gsR0E1TzBCO0FBZ1AzQjtBQUNBMEUsRUFBQUEsbUJBQW1CLEVBQUMsNkJBQVNsQyxNQUFULEVBQWdCdkIsTUFBaEIsRUFBdUI7QUFDdkMsUUFBR3VCLE1BQUgsRUFBVTtBQUNOLFVBQUcsS0FBS21DLGlCQUFMLElBQTBCLElBQTdCLEVBQWtDO0FBQzlCLGFBQUtBLGlCQUFMLEdBQXlCNUQsS0FBSyxDQUFDNkQsV0FBTixDQUFrQixtQkFBbEIsQ0FBekI7QUFDSDs7QUFDRCxXQUFLRCxpQkFBTCxDQUF1QkosSUFBdkIsQ0FBNEJ0RCxNQUE1QjtBQUNILEtBTEQsTUFLSztBQUNELFVBQUcsS0FBSzBELGlCQUFSLEVBQTBCO0FBQ3RCLGFBQUtBLGlCQUFMLENBQXVCOUIsS0FBdkI7QUFDSDs7QUFDRCxXQUFLOEIsaUJBQUwsR0FBeUIsSUFBekI7QUFDSDtBQUNKLEdBN1AwQjtBQStQM0JFLEVBQUFBLGtCQUFrQixFQUFDLDhCQUFVO0FBQ3pCLFdBQU8sS0FBS0YsaUJBQVo7QUFDSCxHQWpRMEI7QUFtUTNCRyxFQUFBQSx3QkFBd0IsRUFBQyxvQ0FBVTtBQUMvQixRQUFHLEtBQUtILGlCQUFSLEVBQTBCO0FBQ3RCLGFBQU8sS0FBS0EsaUJBQUwsQ0FBdUJJLGVBQXZCLEVBQVA7QUFDSDs7QUFDRCxXQUFPLEtBQVA7QUFDSCxHQXhRMEI7QUEwUTNCQyxFQUFBQSxtQkFBbUIsRUFBQyw2QkFBU3hDLE1BQVQsRUFBZ0I7QUFDaEMsUUFBRyxLQUFLRixVQUFSLEVBQW1CO0FBQ2YsV0FBS0EsVUFBTCxDQUFnQjJDLFFBQWhCLENBQXlCQyxNQUF6QixHQUFrQzFDLE1BQWxDO0FBQ0g7QUFDSjtBQTlRMEIsQ0FBVCxDQUF0QjtBQWlSQTJDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjVGLGVBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAgIOi/memHjOWhq+WGmeivpue7huivtOaYjizkuLvopoHloavlhpnor6XmqKHlnZfnmoTlip/og73nroDopoFcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA0LTE1IDE0OjM4OjUyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFN0b3J5Q29udHJvbGxlciA9IHJlcXVpcmUoXCJzdG9yeV9jb250cm9sbGVyXCIpO1xudmFyIEd1aWRlTWFpblZpZXcgICA9IHJlcXVpcmUoXCJndWlkZV9tYWluX3dpbmRvd1wiKTtcbnZhciBTdG9yeUV2ZW50ICAgICAgPSByZXF1aXJlKFwic3RvcnlfZXZlbnRcIik7XG52YXIgR3VpZGVFdmVudCAgICAgID0gcmVxdWlyZShcImd1aWRlX2V2ZW50XCIpO1xuXG52YXIgR3VpZGVDb250cm9sbGVyID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VDb250cm9sbGVyLFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW6YWN572u5pWw5o2uXG4gICAgaW5pdENvbmZpZzogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgR3VpZGVNb2RlbCA9IHJlcXVpcmUoXCJndWlkZV9tb2RlbFwiKTtcblxuICAgICAgICB0aGlzLm1vZGVsID0gbmV3IEd1aWRlTW9kZWwoKTtcbiAgICAgICAgdGhpcy5tb2RlbC5pbml0Q29uZmlnKCk7XG4gICAgICAgIHRoaXMuaXNfZ3VpZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmd1aWRlX2xpc3QgPSBbXTsgICAgICAgIC8vIOe8k+WtmOeahOW8leWvvGlkXG4gICAgfSxcblxuICAgIC8vIOi/lOWbnuW9k+WJjeeahG1vZGVsXG4gICAgZ2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOebkeWQrOS6i+S7tlxuICAgIHJlZ2lzdGVyRXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIHRoaXMuaW5pdF9yb2xlX2V2ZW50ID0gZ2NvcmUuR2xvYmFsRXZlbnQuYmluZChFdmVudElkLkVWVF9ST0xFX0NSRUFURV9TVUNDRVNTLCBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gICAgIHZhciBkYXRhID0ge307XG4gICAgICAgIC8vICAgICBkYXRhLmlkID0gMTAxODU7XG4gICAgICAgIC8vICAgICB0aGlzLmhhbmRsZTExMTIwKGRhdGEpO1xuICAgICAgICAvLyB9LmJpbmQodGhpcykpXG4gICAgICAgIHRoaXMuaW5pdF9yb2xlX2V2ZW50ID0gZ2NvcmUuR2xvYmFsRXZlbnQuYmluZChTdG9yeUV2ZW50LlNUT1JZX09WRVIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3VpZGVfbGlzdCAmJiB0aGlzLmd1aWRlX2xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciBjdXJfZ3VpZGUgPSB0aGlzLmd1aWRlX2xpc3Quc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrR3VpZGVUb1BsYXkoY3VyX2d1aWRlKTsgXG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSkgICBcbiAgICAgICAgdGhpcy5jYW5fcGxheV9kcmFtYV9ldmVudCA9IGdjb3JlLkdsb2JhbEV2ZW50LmJpbmQoU3RvcnlFdmVudC5QUkVQQVJFX1BMQVlfUExPVCwgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKHRoaXMuZ3VpZGVfbGlzdCAhPSBudWxsICYmIFV0aWxzLm5leHQodGhpcy5ndWlkZV9saXN0KSAhPSBudWxsKXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmd1aWRlX2xpc3QubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmZpZyA9IHRoaXMuZ3VpZGVfbGlzdC5zcGxpY2UoMCwxKS8vdGFibGUucmVtb3ZlKHNlbGYuZ3VpZGVfbGlzdCwgMSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0d1aWRlVG9QbGF5KGNvbmZpZylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSkgICAgIFxuICAgIH0sXG5cbiAgICAvLyDms6jlhozljY/orq7mjqXlj5fkuovku7ZcbiAgICByZWdpc3RlclByb3RvY2FsczogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTExMjAsIHRoaXMuaGFuZGxlMTExMjAuYmluZCh0aGlzKSk7ICAgLy8g5pKt5pS+5byV5a+8XG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxMTEyMSwgdGhpcy5oYW5kbGUxMTEyMS5iaW5kKHRoaXMpKTsgICAvLyDlvJXlr7zlv4Pot7PljIVcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDExMTIzLCB0aGlzLmhhbmRsZTExMTIzLmJpbmQodGhpcykpOyAgIC8vIOa4hemZpOaJgOacieWJp+aDheWSjOW8leWvvCAgICAgICAgXG4gICAgfSxcblxuICAgIGhhbmRsZTExMTIwOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgIGNjLmxvZyhcIuaUtuWIsOacjeWKoeerr+aJp+ihjOW8leWvvOWNj+iurlwiKTtcbiAgICAgICAgY2MubG9nKGRhdGEpO1xuICAgICAgICAvLyByZXR1cm47XG4gICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5pZCkgcmV0dXJuIFxuICAgICAgICBpZiAodGhpcy5jdXJfZ3VpZGVfY29uZmlnICYmIHRoaXMuY3VyX2d1aWRlX2NvbmZpZy5pZCA9PSBkYXRhLmlkKSByZXR1cm47XG4gICAgICAgIC8vIOWmguaenOayoeacieW8leWvvOaVsOaNriznm7TmjqXnu5PmnZ/mjolcbiAgICAgICAgdmFyIGNvbmZpZyA9IENvbmZpZy5kcmFtYV9kYXRhLmRhdGFfZ3VpZGVbZGF0YS5pZF07XG4gICAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0UGxheUd1aWRlKGZhbHNlLCBkYXRhLmlkKTtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9IFxuICAgICAgICBcbiAgICAgICAgLy8g5YKo5a2Y5pyN5Yqh5Zmo5Y+R6YCB6L+H5p2l55qE6K+l5byV5a+85bey57uP5a6M5oiQ55qE5q2l5pWwXG4gICAgICAgIHRoaXMuc3RhcnRQbGF5R3VpZGUodHJ1ZSwgZGF0YS5pZCk7XG4gICAgfSxcblxuICAgIHNlbmQxMTEyMTogZnVuY3Rpb24oZ3VpZGVfaWQsIHN0ZXApIHtcbiAgICAgICAgdmFyIHByb3RvY2FsID0ge307XG4gICAgICAgIHByb3RvY2FsLmlkID0gZ3VpZGVfaWQ7XG4gICAgICAgIHByb3RvY2FsLm4gPSBzdGVwO1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxMTEyMSwgcHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICBoYW5kbGUxMTEyMTogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICBpZiAodGhpcy5ndWlkZV92aWV3KSB7XG4gICAgICAgICAgICBjYy5sb2coXCLkv53lrZjmiJDlip/vvIzmnI3liqHlmajov5Tlm55cIik7XG4gICAgICAgICAgICB0aGlzLmd1aWRlX3ZpZXcuZG9OZXh0R3VpZGVGcm9tU2VydmVyKGRhdGEuaWQsIGRhdGEubik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaGFuZGxlMTExMjM6IGZ1bmN0aW9uKCkge1xuXG4gICAgfSxcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tXG4gICAgLy8gZGVzYzrlvIDlp4vmkq3mlL7lrqLmiLfnq6/lvJXlr7xcbiAgICAvLyB0aW1lOjIwMTctMDctMjQgMDg6MDY6MjZcbiAgICAvLyBAc3RhdHVzOlxuICAgIC8vIEBpZDpcbiAgICAvLyBAcmV0dXJuICBcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLVxuICAgIHN0YXJ0UGxheUd1aWRlOiBmdW5jdGlvbihzdGF0dXMsIGlkLCBpc19za2lwKSB7XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoR3VpZGVFdmVudC5DbG9zZUJ1dHRvbkxpc3RQYW5lbEVmZmVjdClcbiAgICAgICAgaWYgKCFzdGF0dXMpIHtcbiAgICAgICAgICAgIC8vIOi/meS4quaXtuWAmeWBmuS4gOS4quWkhOeQhuWQp1xuICAgICAgICAgICAgdGhpcy5kZWxheVRvdWNoRW5hYmxlZCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3VpZGVfdmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3VpZGVfdmlldy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3VpZGVfdmlldyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmlzX2d1aWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY3VyX2d1aWRlX2NvbmZpZyA9IG51bGxcbiAgICAgICAgICAgIHRoaXMuc2VuZDExMTIyKGlkLCBpc19za2lwKTtcblxuICAgICAgICAgICAgLy8g5piv5ZCm5pyJ5LiL5LiA5Liq5byV5a+8XG4gICAgICAgICAgICBpZiAodGhpcy5ndWlkZV9saXN0ICYmIHRoaXMuZ3VpZGVfbGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY2MubG9nKFwi5omn6KGM57yT5a2Y5Lit55qE5byV5a+8XCIpO1xuICAgICAgICAgICAgICAgIHZhciBjb25maWcgPSB0aGlzLmd1aWRlX2xpc3Quc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0d1aWRlVG9QbGF5KGNvbmZpZyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIOS4u3Vp55qE6IGK5aSp5rCU5rOhXG4gICAgICAgICAgICAgICAgdmFyIE1haW51aUNvbnRyb2xsZXIgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIilcbiAgICAgICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkuc2V0TWFpblVJQ2hhdEJ1YmJsZVN0YXR1cyh0cnVlKSAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNjLmxvZyhcIjIyMlwiKTtcbiAgICAgICAgICAgIC8vIOWmguaenOWuouaIt+err+e8k+WtmOW3sue7j+WujOaIkOS6huivpeW8leWvvOWImeS4jemcgOimgee7p+e7reS6hlxuICAgICAgICAgICAgLy8gdmFyIGd1aWRlX2NhY2hlID0gUm9sZUVudjpnZXRJbnN0YW5jZSgpOmdldChSb2xlRW52LmtleXMuZ3VpZGVfc3RlcF9saXN0LCB7fSlcbiAgICAgICAgICAgIC8vIGlmIGd1aWRlX2NhY2hlW2lkXSB+PSBuaWwgdGhlblxuICAgICAgICAgICAgLy8gICAgIGlmIGd1aWRlX2NhY2hlW2lkXVtSb2xlRW52LmtleXMuZ3VpZGVfb3Zlcl9zdGVwXSA9PSB0cnVlIHRoZW5cbiAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zdGFydFBsYXlHdWlkZShmYWxzZSwgaWQpXG4gICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBcbiAgICAgICAgICAgIC8vICAgICBlbmRcbiAgICAgICAgICAgIC8vIGVuZFxuXG4gICAgICAgICAgICB2YXIgY29uZmlnID0gQ29uZmlnLmRyYW1hX2RhdGEuZGF0YV9ndWlkZVtpZF07XG5cbiAgICAgICAgICAgIHZhciBSb2xlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIilcbiAgICAgICAgICAgIHZhciByb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcblxuICAgICAgICAgICAgdmFyIGd1aWRlX2NhY2hlX2RhdGEgPSBjYy5zeXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJndWlkZV9kYXRhXCIgKyByb2xlX3ZvLnNydl9pZCArIHJvbGVfdm8ucmlkKTsgICBcblxuICAgICAgICAgICAgaWYgKGd1aWRlX2NhY2hlX2RhdGEpIHtcbiAgICAgICAgICAgICAgICBndWlkZV9jYWNoZV9kYXRhID0gSlNPTi5wYXJzZShndWlkZV9jYWNoZV9kYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAoZ3VpZGVfY2FjaGVfZGF0YVtpZF0gJiYgZ3VpZGVfY2FjaGVfZGF0YVtpZF1bY29uZmlnLm92ZXJfc3RlcF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydFBsYXlHdWlkZShmYWxzZSwgaWQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghY29uZmlnIHx8ICFjb25maWcuYWN0IHx8IGNvbmZpZy5hY3QubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0UGxheUd1aWRlKGZhbHNlLCBpZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYy5sb2coXCIxMTFcIik7XG5cbiAgICAgICAgICAgIC8vIOWIpOaWreaSreaUvuW8leWvvFxuICAgICAgICAgICAgdGhpcy5jaGVja0d1aWRlVG9QbGF5KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2VuZDExMTIyOiBmdW5jdGlvbihpZCwgaXNfc2tpcCkge1xuICAgICAgICBpZiAoaXNfc2tpcCkge1xuICAgICAgICAgICAgaXNfc2tpcCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpc19za2lwID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcHJvdG9jYWwgPSB7fTtcbiAgICAgICAgcHJvdG9jYWwuaWQgPSBpZDtcbiAgICAgICAgcHJvdG9jYWwuaXNfc2tpcCA9IGlzX3NraXA7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDExMTIyLCBwcm90b2NhbCkgICAgICAgIFxuICAgIH0sXG5cbiAgICBjaGVja0d1aWRlVG9QbGF5OiBmdW5jdGlvbihjb25maWcpIHtcbiAgICAgICAgaWYgKCFjb25maWcpIHJldHVybjtcblxuICAgICAgICAvLyDmraPlnKjmkq3mlL7lvZPliY3lvJXlr7ws5LiN6ZyA6KaB5YKo5a2Y5LqGXG4gICAgICAgIGlmICh0aGlzLmN1cl9ndWlkZV9jb25maWcgJiYgdGhpcy5jdXJfZ3VpZGVfY29uZmlnLmlkID09IGNvbmZpZy5pZCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIOW+heaSreaUvuW8leWvvOWIl+ihqOmHjOmdouWtmOWcqCzkuZ/kuI3pnIDopoHlrZjkuoZcbiAgICAgICAgZm9yICh2YXIgZ3VpZGVfaSBpbiB0aGlzLmd1aWRlX2xpc3QpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmd1aWRlX2xpc3RbZ3VpZGVfaV0uaWQgPT0gY29uZmlnLmlkKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWJp+aDheeKtuaAgeS4iy7kuI3mkq3mlL7lvJXlr7xcbiAgICAgICAgdmFyIHN0b3J5X3N0YXR1cyA9IFN0b3J5Q29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuaXNTdG9yeVN0YXRlKCkgfHwgZmFsc2U7IFxuICAgICAgICBpZiAoc3Rvcnlfc3RhdHVzKSB7XG4gICAgICAgICAgICB0aGlzLmd1aWRlX2xpc3QucHVzaChjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyDlpoLmnpzlh7rljYfnuqfmj5DnpLpcbiAgICAgICAgLy8gdmFyIGlzX2lubGV2aXBncmFkZSA9IExldnVwZ3JhZGVDb250cm9sbGVyOmdldEluc3RhbmNlKCk6d2FpdExldnVwZ3JhZGUoKVxuICAgICAgICAvLyBpZiBpc19pbmxldmlwZ3JhZGUgdGhlblxuICAgICAgICAvLyAgICAgdGFibGVfaW5zZXJ0KCBzZWxmLmd1aWRlX2xpc3QsIDEsIGNvbmZpZyApXG4gICAgICAgIC8vICAgICByZXR1cm5cbiAgICAgICAgLy8gZW5kXG5cbiAgICAgICAgLy8g5aaC5p6c5Zyo5byV5a+85Lit55qE5pe25YCZLOS4jeaSrSznvJPlrZjov5nlkKdcbiAgICAgICAgaWYgKHRoaXMuY3VyX2d1aWRlX2NvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5ndWlkZV9saXN0LnB1c2goY29uZmlnKTsgICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNjLmxvZyhcIjMzMzNcIik7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5hY3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5wbGF5R3VpZGUoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRQbGF5R3VpZGUoZmFsc2UsIGNvbmZpZy5iaWQpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHBsYXlHdWlkZTogZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgICAgIGlmICh0aGlzLmlzX2d1aWRpbmcpIHJldHVybjtcbiAgICAgICAgdGhpcy5jdXJfZ3VpZGVfY29uZmlnID0gY29uZmlnO1xuICAgICAgICB0aGlzLmlzX2d1aWRpbmcgPSB0cnVlO1xuICAgICAgICBcbiAgICAgICAgaWYgKGNvbmZpZy5pc19jbG9zZSA9PSAxKSB7XG4gICAgICAgICAgICBVdGlscy5jbG9zZUFsbFdpbmRvdygpO1xuICAgICAgICAgICAgLy8gQmFzZVZpZXcuY2xvc2VBbGxWaWV3KClcbiAgICAgICAgfVxuICAgICAgICAvLyBCYXNlVmlldy5jbG9zZVNvbWVXaW4oKVxuXG4gICAgICAgIC8vIOS4u3Vp55qE6IGK5aSp5rCU5rOhXG4gICAgICAgIC8vIHZhciBNYWludWlDb250cm9sbGVyID0gcmVxdWlyZShcIm1haW51aV9jb250cm9sbGVyXCIpXG4gICAgICAgIC8vIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5zZXRNYWluVUlDaGF0QnViYmxlU3RhdHVzKGZhbHNlKVxuXG4gICAgICAgIGlmICghdGhpcy5ndWlkZV92aWV3KSB7XG4gICAgICAgICAgICB0aGlzLmd1aWRlX3ZpZXcgPSBuZXcgR3VpZGVNYWluVmlldyh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3VpZGVfdmlldy5vcGVuKCk7XG4gICAgICAgIHRoaXMuZ3VpZGVfdmlldy5hZGRHdWlkKGNvbmZpZyk7XG4gICAgfSxcblxuICAgIGRlbGF5VG91Y2hFbmFibGVkOiBmdW5jdGlvbigpIHtcblxuICAgIH0sXG5cbiAgICBpc0luR3VpZGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc19ndWlkaW5nO1xuICAgIH0sXG5cblxuXG4gICAgLy/miZPlvIDku7vliqHlvJXlr7xcbiAgICBvcGVuVGFza0d1aWRlV2luZG93OmZ1bmN0aW9uKHN0YXR1cyxjb25maWcpe1xuICAgICAgICBpZihzdGF0dXMpe1xuICAgICAgICAgICAgaWYodGhpcy50YXNrX2d1aWRlX3dpbmRvdyA9PSBudWxsKXtcbiAgICAgICAgICAgICAgICB0aGlzLnRhc2tfZ3VpZGVfd2luZG93ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJ0YXNrX2d1aWRlX3dpbmRvd1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGFza19ndWlkZV93aW5kb3cub3Blbihjb25maWcpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGlmKHRoaXMudGFza19ndWlkZV93aW5kb3cpe1xuICAgICAgICAgICAgICAgIHRoaXMudGFza19ndWlkZV93aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGFza19ndWlkZV93aW5kb3cgPSBudWxsO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldFRhc2tHdWlkZVdpbmRvdzpmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy50YXNrX2d1aWRlX3dpbmRvd1xuICAgIH0sXG5cbiAgICBnZXRUYXNrR3VpZGVFZmZlY3RTdGF0dXM6ZnVuY3Rpb24oKXtcbiAgICAgICAgaWYodGhpcy50YXNrX2d1aWRlX3dpbmRvdyl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50YXNrX2d1aWRlX3dpbmRvdy5nZXRFZmZlY3RBY3RpdmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc2V0R3VpZGVNYWluUm9vdFduZDpmdW5jdGlvbihzdGF0dXMpe1xuICAgICAgICBpZih0aGlzLmd1aWRlX3ZpZXcpe1xuICAgICAgICAgICAgdGhpcy5ndWlkZV92aWV3LnJvb3Rfd25kLmFjdGl2ZSA9IHN0YXR1cztcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEd1aWRlQ29udHJvbGxlcjsiXX0=
|