(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/partnersummon/partnersummon_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, '38414tz0/NM7qQqsbBWz8f0', 'partnersummon_controller'); // Scripts/mod/partnersummon/partnersummon_controller.js "use strict"; // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 这里填写详细说明,主要填写该模块的功能简要 //
Create: {DATE} // -------------------------------------------------------------------- var SummonEvent = require("partnersummon_event"); var MainuiEvent = require("mainui_event"); var BattleEvent = require("battle_event"); var PartnersummonController = cc.Class({ "extends": BaseController, properties: { partner_summon_window: null }, ctor: function ctor() {}, // 初始化配置数据 initConfig: function initConfig() { var PartnersummonModel = require("partnersummon_model"); this.model = new PartnersummonModel(); this.model.initConfig(); }, // 返回当前的model getModel: function getModel() { return this.model; }, // 注册监听事件 registerEvents: function registerEvents() { // 登录先请求一下 if (!this.init_role_event) { this.init_role_event = gcore.GlobalEvent.bind(EventId.EVT_ROLE_CREATE_SUCCESS, function () { gcore.GlobalEvent.unbind(this.init_role_event); // this.send23200(); }.bind(this)); } // 断线重连的时候 if (!this.re_link_game_event) { this.re_link_game_event = gcore.GlobalEvent.bind(EventId.EVT_RE_LINK_GAME, function () { var GuideController = require("guide_controller"); if (!GuideController.getInstance().isInGuide()) this.openPartnerSummonWindow(false); }.bind(this)); } // 新获得伙伴弹窗 if (!this.get_new_partner_event) { this.get_new_partner_event = gcore.GlobalEvent.bind(MainuiEvent.CLOSE_ITEM_VIEW, function () { if (this.is_add_partner && this.add_partner_data) { this.openSummonGainShowWindow(true, [this.add_partner_data]); this.is_add_partner = false; this.add_partner_data = null; } }.bind(this)); } // 关闭召唤界面后弹出 if (!this.battle_result_event) { this.battle_result_event = gcore.GlobalEvent.bind(BattleEvent.CLOSE_RESULT_VIEW, function () { if (this.is_add_partner && this.add_partner_data) { this.openSummonGainShowWindow(true, [this.add_partner_data]); this.is_add_partner = false; this.add_partner_data = null; } }.bind(this)); } }, // 注册协议接受事件 registerProtocals: function registerProtocals() { // 普通召唤 this.RegisterProtocal(23200, this.handle23200.bind(this)); //请求召唤信息 this.RegisterProtocal(23201, this.handle23201.bind(this)); //召唤 this.RegisterProtocal(23202, this.handle23202.bind(this)); //更新召唤通用信息 this.RegisterProtocal(23203, this.handle23203.bind(this)); //领取召唤分享奖励 this.RegisterProtocal(23204, this.handle23204.bind(this)); //跟新单个召唤卡库信息 this.RegisterProtocal(11095, this.handle11095.bind(this)); //其他途径获得伙伴推送 this.RegisterProtocal(23212, this.handle23212.bind(this)); //推送新卡库开启 this.RegisterProtocal(23205, this.handle23205.bind(this)); //必出5星 // 11001 }, // 请求召唤信息 send23200: function send23200() { var protocal = {}; this.SendProtocal(23200, protocal); }, handle23200: function handle23200(summon_data) { if (summon_data) this.model.setSummonData(summon_data); }, send23201: function send23201(group_id, times, recruit_type) { var protocal = {}; protocal.group_id = group_id; protocal.times = times; protocal.recruit_type = recruit_type; this.SendProtocal(23201, protocal); }, handle23201: function handle23201(recruit_data) { // 召唤信息 if (recruit_data) { this.model.setRecruitData(recruit_data); gcore.GlobalEvent.fire(SummonEvent.PartnerSummonSuccess); } // this.openSummonGainWindow(true); }, handle23202: function handle23202(summon_data) { if (summon_data) this.model.updateSummonData(summon_data); }, handle23203: function handle23203() {}, handle23204: function handle23204() {}, sender23205: function sender23205() { this.SendProtocal(23205, {}); }, handle23205: function handle23205(data) { this.five_star_data = data; gcore.GlobalEvent.fire(SummonEvent.PartnerSummonFiveStar, data); }, //获取5星必出数据 getFiveStarData: function getFiveStarData() { return this.five_star_data; }, handle11095: function handle11095(data) { if (data.status == 1) { this.openSummonGainShowWindow(true, data); } else { this.is_add_partner = true; this.add_partner_data = data; } }, handle23212: function handle23212() {}, scoreRecruit: function scoreRecruit(group_id, times, recruit_type) { if (this.partner_summon_window) { this.partner_summon_window.startRecruit(group_id, times, recruit_type); } }, // 再次召唤 againRecruit: function againRecruit() { if (this.partner_summon_window) { this.partner_summon_window.regainRecruit(); } }, recurit: function recurit(group_id, times, recruit_type) { this.partner_summon_window.sendRecruitProtocal(group_id, times, recruit_type); // againRecruit }, // 主界面 openPartnerSummonWindow: function openPartnerSummonWindow(status) { if (status === false) { if (this.partner_summon_window) { this.partner_summon_window.close(); this.partner_summon_window = null; } } else { if (!this.partner_summon_window) { var SummonWindow = require("partnersummon_window"); this.partner_summon_window = new SummonWindow(this); } this.partner_summon_window.open(); this.model.setOpenPartnerSummonFlag(true); } }, // 获得伙伴弹窗 openSummonGainWindow: function openSummonGainWindow(status, data) { if (!status) { if (!this.summon_gain_window) return; this.summon_gain_window.close(); this.summon_gain_window = null; } else { if (!this.summon_gain_window) { var SummonGainWindow = require("partnersummon_gain_window"); this.summon_gain_window = new SummonGainWindow(this, data); } this.summon_gain_window.open(); } }, // 展示高级英雄 openSummonGainShowWindow: function openSummonGainShowWindow(status, show_bids, finish_cb, bg_type) { if (!status) { if (!this.summon_show_window) return; this.summon_show_window.close(); this.summon_show_window = null; } else { if (show_bids.length == 1) { var config; config = Config.partner_data.data_partner_base[show_bids[0].partner_bid]; if (!config || !config.show_effect || config.show_effect != 1) return; } if (!this.summon_show_window) { var SummonShowWindow = require("partnersummon_show_window"); this.summon_show_window = new SummonShowWindow(this, show_bids, finish_cb, bg_type); } this.summon_show_window.open(); } }, // 积分召唤提示 openScoreTipWindow: function openScoreTipWindow(status) { if (!status) { if (!this.summon_score_window) require; this.summon_score_window.close(); this.summon_score_window = null; } else { if (!this.summon_score_window) { var SummonScoreWindow = require("partnersummon_score_window"); this.summon_score_window = new SummonScoreWindow(this); } this.summon_score_window.open(); } }, getSummonItemRoot: function getSummonItemRoot(name, get_cb) { if (this.partner_summon_window) { return this.partner_summon_window.root_wnd; } }, getSummonResultRoot: function getSummonResultRoot() { if (this.summon_gain_window) { return this.summon_gain_window.root_wnd; } }, getSummonShowRoot: function getSummonShowRoot() { if (this.summon_show_window) return this.summon_show_window.root_wnd; } }); module.exports = PartnersummonController; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxwYXJ0bmVyc3VtbW9uXFxwYXJ0bmVyc3VtbW9uX2NvbnRyb2xsZXIuanMiXSwibmFtZXMiOlsiU3VtbW9uRXZlbnQiLCJyZXF1aXJlIiwiTWFpbnVpRXZlbnQiLCJCYXR0bGVFdmVudCIsIlBhcnRuZXJzdW1tb25Db250cm9sbGVyIiwiY2MiLCJDbGFzcyIsIkJhc2VDb250cm9sbGVyIiwicHJvcGVydGllcyIsInBhcnRuZXJfc3VtbW9uX3dpbmRvdyIsImN0b3IiLCJpbml0Q29uZmlnIiwiUGFydG5lcnN1bW1vbk1vZGVsIiwibW9kZWwiLCJnZXRNb2RlbCIsInJlZ2lzdGVyRXZlbnRzIiwiaW5pdF9yb2xlX2V2ZW50IiwiZ2NvcmUiLCJHbG9iYWxFdmVudCIsImJpbmQiLCJFdmVudElkIiwiRVZUX1JPTEVfQ1JFQVRFX1NVQ0NFU1MiLCJ1bmJpbmQiLCJyZV9saW5rX2dhbWVfZXZlbnQiLCJFVlRfUkVfTElOS19HQU1FIiwiR3VpZGVDb250cm9sbGVyIiwiZ2V0SW5zdGFuY2UiLCJpc0luR3VpZGUiLCJvcGVuUGFydG5lclN1bW1vbldpbmRvdyIsImdldF9uZXdfcGFydG5lcl9ldmVudCIsIkNMT1NFX0lURU1fVklFVyIsImlzX2FkZF9wYXJ0bmVyIiwiYWRkX3BhcnRuZXJfZGF0YSIsIm9wZW5TdW1tb25HYWluU2hvd1dpbmRvdyIsImJhdHRsZV9yZXN1bHRfZXZlbnQiLCJDTE9TRV9SRVNVTFRfVklFVyIsInJlZ2lzdGVyUHJvdG9jYWxzIiwiUmVnaXN0ZXJQcm90b2NhbCIsImhhbmRsZTIzMjAwIiwiaGFuZGxlMjMyMDEiLCJoYW5kbGUyMzIwMiIsImhhbmRsZTIzMjAzIiwiaGFuZGxlMjMyMDQiLCJoYW5kbGUxMTA5NSIsImhhbmRsZTIzMjEyIiwiaGFuZGxlMjMyMDUiLCJzZW5kMjMyMDAiLCJwcm90b2NhbCIsIlNlbmRQcm90b2NhbCIsInN1bW1vbl9kYXRhIiwic2V0U3VtbW9uRGF0YSIsInNlbmQyMzIwMSIsImdyb3VwX2lkIiwidGltZXMiLCJyZWNydWl0X3R5cGUiLCJyZWNydWl0X2RhdGEiLCJzZXRSZWNydWl0RGF0YSIsImZpcmUiLCJQYXJ0bmVyU3VtbW9uU3VjY2VzcyIsInVwZGF0ZVN1bW1vbkRhdGEiLCJzZW5kZXIyMzIwNSIsImRhdGEiLCJmaXZlX3N0YXJfZGF0YSIsIlBhcnRuZXJTdW1tb25GaXZlU3RhciIsImdldEZpdmVTdGFyRGF0YSIsInN0YXR1cyIsInNjb3JlUmVjcnVpdCIsInN0YXJ0UmVjcnVpdCIsImFnYWluUmVjcnVpdCIsInJlZ2FpblJlY3J1aXQiLCJyZWN1cml0Iiwic2VuZFJlY3J1aXRQcm90b2NhbCIsImNsb3NlIiwiU3VtbW9uV2luZG93Iiwib3BlbiIsInNldE9wZW5QYXJ0bmVyU3VtbW9uRmxhZyIsIm9wZW5TdW1tb25HYWluV2luZG93Iiwic3VtbW9uX2dhaW5fd2luZG93IiwiU3VtbW9uR2FpbldpbmRvdyIsInNob3dfYmlkcyIsImZpbmlzaF9jYiIsImJnX3R5cGUiLCJzdW1tb25fc2hvd193aW5kb3ciLCJsZW5ndGgiLCJjb25maWciLCJDb25maWciLCJwYXJ0bmVyX2RhdGEiLCJkYXRhX3BhcnRuZXJfYmFzZSIsInBhcnRuZXJfYmlkIiwic2hvd19lZmZlY3QiLCJTdW1tb25TaG93V2luZG93Iiwib3BlblNjb3JlVGlwV2luZG93Iiwic3VtbW9uX3Njb3JlX3dpbmRvdyIsIlN1bW1vblNjb3JlV2luZG93IiwiZ2V0U3VtbW9uSXRlbVJvb3QiLCJuYW1lIiwiZ2V0X2NiIiwicm9vdF93bmQiLCJnZXRTdW1tb25SZXN1bHRSb290IiwiZ2V0U3VtbW9uU2hvd1Jvb3QiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFdBQVcsR0FBR0MsT0FBTyxDQUFDLHFCQUFELENBQXpCOztBQUNBLElBQUlDLFdBQVcsR0FBR0QsT0FBTyxDQUFDLGNBQUQsQ0FB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LENBQUMsS0FBS0EsbUJBQVYsRUFBK0I7QUFDM0IsWUFBSUMsaUJBQWlCLEdBQUc1RixPQUFPLENBQUMsNEJBQUQsQ0FBL0I7O0FBQ0EsYUFBSzJGLG1CQUFMLEdBQTJCLElBQUlDLGlCQUFKLENBQXNCLElBQXRCLENBQTNCO0FBQ0g7O0FBQ0QsV0FBS0QsbUJBQUwsQ0FBeUJsQixJQUF6QjtBQUNIO0FBQ0osR0ExT2tDO0FBNE9uQ29CLEVBQUFBLGlCQUFpQixFQUFFLDJCQUFTQyxJQUFULEVBQWVDLE1BQWYsRUFBdUI7QUFDdEMsUUFBSSxLQUFLdkYscUJBQVQsRUFBZ0M7QUFDNUIsYUFBTyxLQUFLQSxxQkFBTCxDQUEyQndGLFFBQWxDO0FBQ0g7QUFDSixHQWhQa0M7QUFrUG5DQyxFQUFBQSxtQkFBbUIsRUFBRSwrQkFBVztBQUM1QixRQUFJLEtBQUtyQixrQkFBVCxFQUE2QjtBQUN6QixhQUFPLEtBQUtBLGtCQUFMLENBQXdCb0IsUUFBL0I7QUFDSDtBQUNKLEdBdFBrQztBQXdQbkNFLEVBQUFBLGlCQUFpQixFQUFFLDZCQUFXO0FBQzFCLFFBQUksS0FBS2pCLGtCQUFULEVBQ0ksT0FBTyxLQUFLQSxrQkFBTCxDQUF3QmUsUUFBL0I7QUFDUDtBQTNQa0MsQ0FBVCxDQUE5QjtBQStQQUcsTUFBTSxDQUFDQyxPQUFQLEdBQWlCakcsdUJBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAgIOi/memHjOWhq+WGmeivpue7huivtOaYjizkuLvopoHloavlhpnor6XmqKHlnZfnmoTlip/og73nroDopoFcbi8vIDxici8+Q3JlYXRlOiB7REFURX1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgU3VtbW9uRXZlbnQgPSByZXF1aXJlKFwicGFydG5lcnN1bW1vbl9ldmVudFwiKTtcbnZhciBNYWludWlFdmVudCA9IHJlcXVpcmUoXCJtYWludWlfZXZlbnRcIilcbnZhciBCYXR0bGVFdmVudCA9IHJlcXVpcmUoXCJiYXR0bGVfZXZlbnRcIilcbnZhciBQYXJ0bmVyc3VtbW9uQ29udHJvbGxlciA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlQ29udHJvbGxlcixcblxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgcGFydG5lcl9zdW1tb25fd2luZG93OiBudWxsLFxuICAgIH0sXG5cbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG5cbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW6YWN572u5pWw5o2uXG4gICAgaW5pdENvbmZpZzogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgUGFydG5lcnN1bW1vbk1vZGVsID0gcmVxdWlyZShcInBhcnRuZXJzdW1tb25fbW9kZWxcIik7XG4gICAgICAgIHRoaXMubW9kZWwgPSBuZXcgUGFydG5lcnN1bW1vbk1vZGVsKCk7XG4gICAgICAgIHRoaXMubW9kZWwuaW5pdENvbmZpZygpO1xuICAgIH0sXG5cbiAgICAvLyDov5Tlm57lvZPliY3nmoRtb2RlbFxuICAgIGdldE1vZGVsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhoznm5HlkKzkuovku7ZcbiAgICByZWdpc3RlckV2ZW50czogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyDnmbvlvZXlhYjor7fmsYLkuIDkuIsgXG4gICAgICAgIGlmICghdGhpcy5pbml0X3JvbGVfZXZlbnQpIHsgICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuaW5pdF9yb2xlX2V2ZW50ID0gZ2NvcmUuR2xvYmFsRXZlbnQuYmluZChFdmVudElkLkVWVF9ST0xFX0NSRUFURV9TVUNDRVNTLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC51bmJpbmQodGhpcy5pbml0X3JvbGVfZXZlbnQpO1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuc2VuZDIzMjAwKCk7ICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOaWree6v+mHjei/nueahOaXtuWAmVxuICAgICAgICBpZiAoIXRoaXMucmVfbGlua19nYW1lX2V2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlX2xpbmtfZ2FtZV9ldmVudCA9IGdjb3JlLkdsb2JhbEV2ZW50LmJpbmQoRXZlbnRJZC5FVlRfUkVfTElOS19HQU1FLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgR3VpZGVDb250cm9sbGVyID0gcmVxdWlyZShcImd1aWRlX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCFHdWlkZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5pc0luR3VpZGUoKSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuUGFydG5lclN1bW1vbldpbmRvdyhmYWxzZSk7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIH1cbiAgICAgICAgXG5cbiAgICAgICAgLy8g5paw6I635b6X5LyZ5Ly05by556qXXG4gICAgICAgIGlmICghdGhpcy5nZXRfbmV3X3BhcnRuZXJfZXZlbnQpe1xuICAgICAgICAgICAgdGhpcy5nZXRfbmV3X3BhcnRuZXJfZXZlbnQgPSBnY29yZS5HbG9iYWxFdmVudC5iaW5kKE1haW51aUV2ZW50LkNMT1NFX0lURU1fVklFVywgZnVuY3Rpb24oKSB7ICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNfYWRkX3BhcnRuZXIgJiYgdGhpcy5hZGRfcGFydG5lcl9kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlblN1bW1vbkdhaW5TaG93V2luZG93KHRydWUsW3RoaXMuYWRkX3BhcnRuZXJfZGF0YV0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzX2FkZF9wYXJ0bmVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkX3BhcnRuZXJfZGF0YSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWFs+mXreWPrOWUpOeVjOmdouWQjuW8ueWHulxuICAgICAgICBpZiAoIXRoaXMuYmF0dGxlX3Jlc3VsdF9ldmVudCkgeyAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5iYXR0bGVfcmVzdWx0X2V2ZW50ID0gZ2NvcmUuR2xvYmFsRXZlbnQuYmluZChCYXR0bGVFdmVudC5DTE9TRV9SRVNVTFRfVklFVywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNfYWRkX3BhcnRuZXIgJiYgdGhpcy5hZGRfcGFydG5lcl9kYXRhKSB7ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuU3VtbW9uR2FpblNob3dXaW5kb3codHJ1ZSwgW3RoaXMuYWRkX3BhcnRuZXJfZGF0YV0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzX2FkZF9wYXJ0bmVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkX3BhcnRuZXJfZGF0YSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDms6jlhozljY/orq7mjqXlj5fkuovku7ZcbiAgICByZWdpc3RlclByb3RvY2FsczogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyDmma7pgJrlj6zllKRcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDIzMjAwLHRoaXMuaGFuZGxlMjMyMDAuYmluZCh0aGlzKSkgLy/or7fmsYLlj6zllKTkv6Hmga9cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDIzMjAxLHRoaXMuaGFuZGxlMjMyMDEuYmluZCh0aGlzKSkgLy/lj6zllKRcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDIzMjAyLHRoaXMuaGFuZGxlMjMyMDIuYmluZCh0aGlzKSkgLy/mm7TmlrDlj6zllKTpgJrnlKjkv6Hmga9cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDIzMjAzLHRoaXMuaGFuZGxlMjMyMDMuYmluZCh0aGlzKSkgLy/pooblj5blj6zllKTliIbkuqvlpZblirFcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDIzMjA0LHRoaXMuaGFuZGxlMjMyMDQuYmluZCh0aGlzKSkgLy/ot5/mlrDljZXkuKrlj6zllKTljaHlupPkv6Hmga9cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDExMDk1LHRoaXMuaGFuZGxlMTEwOTUuYmluZCh0aGlzKSkgLy/lhbbku5bpgJTlvoTojrflvpfkvJnkvLTmjqjpgIFcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDIzMjEyLHRoaXMuaGFuZGxlMjMyMTIuYmluZCh0aGlzKSkgLy/mjqjpgIHmlrDljaHlupPlvIDlkK9cblxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjMyMDUsdGhpcy5oYW5kbGUyMzIwNS5iaW5kKHRoaXMpKSAvL+W/heWHujXmmJ9cbiAgICAgICAgLy8gMTEwMDFcbiAgICB9LFxuXG4gICAgLy8g6K+35rGC5Y+s5ZSk5L+h5oGvXG4gICAgc2VuZDIzMjAwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwcm90b2NhbCA9IHt9XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDIzMjAwLCBwcm90b2NhbCk7XG4gICAgfSxcblxuICAgIGhhbmRsZTIzMjAwOiBmdW5jdGlvbiAoc3VtbW9uX2RhdGEpIHtcbiAgICAgICAgaWYgKHN1bW1vbl9kYXRhKVxuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXRTdW1tb25EYXRhKHN1bW1vbl9kYXRhKTtcbiAgICB9LFxuXG4gICAgc2VuZDIzMjAxOiBmdW5jdGlvbihncm91cF9pZCwgdGltZXMsIHJlY3J1aXRfdHlwZSkge1xuICAgICAgICB2YXIgcHJvdG9jYWwgPSB7fVxuICAgICAgICBwcm90b2NhbC5ncm91cF9pZCA9IGdyb3VwX2lkO1xuICAgICAgICBwcm90b2NhbC50aW1lcyA9IHRpbWVzO1xuICAgICAgICBwcm90b2NhbC5yZWNydWl0X3R5cGUgPSByZWNydWl0X3R5cGU7XG5cbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjMyMDEsIHByb3RvY2FsKTtcbiAgICB9LFxuXG4gICAgaGFuZGxlMjMyMDE6IGZ1bmN0aW9uIChyZWNydWl0X2RhdGEpIHtcbiAgICAgICAgLy8g5Y+s5ZSk5L+h5oGvXG4gICAgICAgIGlmIChyZWNydWl0X2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2V0UmVjcnVpdERhdGEocmVjcnVpdF9kYXRhKTtcbiAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoU3VtbW9uRXZlbnQuUGFydG5lclN1bW1vblN1Y2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoaXMub3BlblN1bW1vbkdhaW5XaW5kb3codHJ1ZSk7XG4gICAgfSxcblxuICAgIGhhbmRsZTIzMjAyOiBmdW5jdGlvbiAoc3VtbW9uX2RhdGEpIHtcbiAgICAgICAgaWYgKHN1bW1vbl9kYXRhKSBcbiAgICAgICAgICAgIHRoaXMubW9kZWwudXBkYXRlU3VtbW9uRGF0YShzdW1tb25fZGF0YSk7XG4gICAgfSxcblxuICAgIGhhbmRsZTIzMjAzOiBmdW5jdGlvbiAoKSB7XG5cbiAgICB9LFxuXG4gICAgaGFuZGxlMjMyMDQ6IGZ1bmN0aW9uICgpIHtcblxuICAgIH0sXG5cbiAgICBzZW5kZXIyMzIwNTpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgyMzIwNSx7fSk7XG4gICAgfSxcblxuICAgIGhhbmRsZTIzMjA1OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB0aGlzLmZpdmVfc3Rhcl9kYXRhID0gZGF0YTtcbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShTdW1tb25FdmVudC5QYXJ0bmVyU3VtbW9uRml2ZVN0YXIsZGF0YSk7XG4gICAgfSxcblxuICAgIC8v6I635Y+WNeaYn+W/heWHuuaVsOaNrlxuICAgIGdldEZpdmVTdGFyRGF0YTpmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5maXZlX3N0YXJfZGF0YTtcbiAgICB9LFxuXG4gICAgaGFuZGxlMTEwOTU6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmKGRhdGEuc3RhdHVzID09IDEpe1xuICAgICAgICAgICAgdGhpcy5vcGVuU3VtbW9uR2FpblNob3dXaW5kb3codHJ1ZSwgZGF0YSlcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmlzX2FkZF9wYXJ0bmVyID0gdHJ1ZVxuICAgICAgICAgICAgdGhpcy5hZGRfcGFydG5lcl9kYXRhID0gZGF0YVxuICAgICAgICB9XG4gICAgfSxcblxuXG4gICAgaGFuZGxlMjMyMTI6IGZ1bmN0aW9uICgpIHtcblxuICAgIH0sXG5cbiAgICBzY29yZVJlY3J1aXQ6IGZ1bmN0aW9uKGdyb3VwX2lkLCB0aW1lcywgcmVjcnVpdF90eXBlKSB7XG4gICAgICAgIGlmICh0aGlzLnBhcnRuZXJfc3VtbW9uX3dpbmRvdykge1xuICAgICAgICAgICAgdGhpcy5wYXJ0bmVyX3N1bW1vbl93aW5kb3cuc3RhcnRSZWNydWl0KGdyb3VwX2lkLCB0aW1lcywgcmVjcnVpdF90eXBlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDlho3mrKHlj6zllKRcbiAgICBhZ2FpblJlY3J1aXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5wYXJ0bmVyX3N1bW1vbl93aW5kb3cpIHtcbiAgICAgICAgICAgIHRoaXMucGFydG5lcl9zdW1tb25fd2luZG93LnJlZ2FpblJlY3J1aXQoKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICByZWN1cml0OiBmdW5jdGlvbihncm91cF9pZCwgdGltZXMsIHJlY3J1aXRfdHlwZSkge1xuICAgICAgICB0aGlzLnBhcnRuZXJfc3VtbW9uX3dpbmRvdy5zZW5kUmVjcnVpdFByb3RvY2FsKGdyb3VwX2lkLCB0aW1lcywgcmVjcnVpdF90eXBlKTtcbiAgICAgICAgLy8gYWdhaW5SZWNydWl0XG4gICAgfSxcblxuICAgIC8vIOS4u+eVjOmdolxuICAgIG9wZW5QYXJ0bmVyU3VtbW9uV2luZG93OiBmdW5jdGlvbihzdGF0dXMpIHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcnRuZXJfc3VtbW9uX3dpbmRvdykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFydG5lcl9zdW1tb25fd2luZG93LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJ0bmVyX3N1bW1vbl93aW5kb3cgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBhcnRuZXJfc3VtbW9uX3dpbmRvdykge1xuICAgICAgICAgICAgICAgIHZhciBTdW1tb25XaW5kb3cgPSByZXF1aXJlKFwicGFydG5lcnN1bW1vbl93aW5kb3dcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJ0bmVyX3N1bW1vbl93aW5kb3cgPSBuZXcgU3VtbW9uV2luZG93KHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYXJ0bmVyX3N1bW1vbl93aW5kb3cub3BlbigpO1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZXRPcGVuUGFydG5lclN1bW1vbkZsYWcodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g6I635b6X5LyZ5Ly05by556qXXG4gICAgb3BlblN1bW1vbkdhaW5XaW5kb3c6IGZ1bmN0aW9uKHN0YXR1cywgZGF0YSkge1xuICAgICAgICBpZiAoIXN0YXR1cykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnN1bW1vbl9nYWluX3dpbmRvdykgcmV0dXJuXG4gICAgICAgICAgICB0aGlzLnN1bW1vbl9nYWluX3dpbmRvdy5jbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5zdW1tb25fZ2Fpbl93aW5kb3cgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnN1bW1vbl9nYWluX3dpbmRvdykge1xuICAgICAgICAgICAgICAgIHZhciBTdW1tb25HYWluV2luZG93ID0gcmVxdWlyZShcInBhcnRuZXJzdW1tb25fZ2Fpbl93aW5kb3dcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tb25fZ2Fpbl93aW5kb3cgPSBuZXcgU3VtbW9uR2FpbldpbmRvdyh0aGlzLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3VtbW9uX2dhaW5fd2luZG93Lm9wZW4oKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDlsZXnpLrpq5jnuqfoi7Hpm4RcbiAgICBvcGVuU3VtbW9uR2FpblNob3dXaW5kb3c6IGZ1bmN0aW9uKHN0YXR1cywgc2hvd19iaWRzLCBmaW5pc2hfY2IsYmdfdHlwZSkge1xuICAgICAgICBpZiAoIXN0YXR1cykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnN1bW1vbl9zaG93X3dpbmRvdykgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5zdW1tb25fc2hvd193aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMuc3VtbW9uX3Nob3dfd2luZG93ID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmKHNob3dfYmlkcy5sZW5ndGggPT0gMSl7XG4gICAgICAgICAgICAgICAgbGV0IGNvbmZpZ1xuICAgICAgICAgICAgICAgIGNvbmZpZyA9IENvbmZpZy5wYXJ0bmVyX2RhdGEuZGF0YV9wYXJ0bmVyX2Jhc2Vbc2hvd19iaWRzWzBdLnBhcnRuZXJfYmlkXVxuICAgICAgICAgICAgICAgIGlmKCFjb25maWcgfHwgIWNvbmZpZy5zaG93X2VmZmVjdCB8fCBjb25maWcuc2hvd19lZmZlY3QgIT0gMSlyZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5zdW1tb25fc2hvd193aW5kb3cpIHtcbiAgICAgICAgICAgICAgICB2YXIgU3VtbW9uU2hvd1dpbmRvdyA9IHJlcXVpcmUoXCJwYXJ0bmVyc3VtbW9uX3Nob3dfd2luZG93XCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtbW9uX3Nob3dfd2luZG93ID0gbmV3IFN1bW1vblNob3dXaW5kb3codGhpcywgc2hvd19iaWRzLCBmaW5pc2hfY2IsYmdfdHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN1bW1vbl9zaG93X3dpbmRvdy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g56ev5YiG5Y+s5ZSk5o+Q56S6XG4gICAgb3BlblNjb3JlVGlwV2luZG93OiBmdW5jdGlvbihzdGF0dXMpIHtcbiAgICAgICAgaWYgKCFzdGF0dXMpe1xuICAgICAgICAgICAgaWYgKCF0aGlzLnN1bW1vbl9zY29yZV93aW5kb3cpIHJlcXVpcmU7XG4gICAgICAgICAgICB0aGlzLnN1bW1vbl9zY29yZV93aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMuc3VtbW9uX3Njb3JlX3dpbmRvdyA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc3VtbW9uX3Njb3JlX3dpbmRvdykge1xuICAgICAgICAgICAgICAgIHZhciBTdW1tb25TY29yZVdpbmRvdyA9IHJlcXVpcmUoXCJwYXJ0bmVyc3VtbW9uX3Njb3JlX3dpbmRvd1wiKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN1bW1vbl9zY29yZV93aW5kb3cgPSBuZXcgU3VtbW9uU2NvcmVXaW5kb3codGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN1bW1vbl9zY29yZV93aW5kb3cub3BlbigpOyAgICAgICAgICAgIFxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldFN1bW1vbkl0ZW1Sb290OiBmdW5jdGlvbihuYW1lLCBnZXRfY2IpIHtcbiAgICAgICAgaWYgKHRoaXMucGFydG5lcl9zdW1tb25fd2luZG93KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJ0bmVyX3N1bW1vbl93aW5kb3cucm9vdF93bmRcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTdW1tb25SZXN1bHRSb290OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VtbW9uX2dhaW5fd2luZG93KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdW1tb25fZ2Fpbl93aW5kb3cucm9vdF93bmQ7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U3VtbW9uU2hvd1Jvb3Q6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zdW1tb25fc2hvd193aW5kb3cpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdW1tb25fc2hvd193aW5kb3cucm9vdF93bmQ7XG4gICAgfVxuXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJ0bmVyc3VtbW9uQ29udHJvbGxlcjsiXX0=