|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/levupgrade/view/lev_upgrade_window.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, '20f19O9c3dDjLtZbLnHaT1+', 'lev_upgrade_window');
|
// Scripts/mod/levupgrade/view/lev_upgrade_window.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里是描述这个窗体的作用的
|
// <br/>Create: 2019-04-26 11:37:15
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var ActionController = require("action_controller");
|
|
var LevupgradeController = require("levupgrade_controller");
|
|
var StoryEvent = require("story_event");
|
|
var LevupgradeWindow = cc.Class({
|
"extends": BaseView,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("levupgrade", "lev_upgrade_window");
|
this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
|
|
this.win_type = WinType.Tips; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
|
|
this.ctrl = LevupgradeController.getInstance();
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initConfig: function initConfig() {
|
this.lev_list = [];
|
this.can_touch = false;
|
this.auto_limit_time = 5;
|
this.item_list = [];
|
},
|
// 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
|
openCallBack: function openCallBack() {
|
var self = this;
|
self.background = self.root_wnd.getChildByName("background");
|
self.main_container = self.root_wnd.getChildByName("main_container");
|
self.back_panel = self.main_container.getChildByName("back_panel");
|
self.title_container = self.main_container.getChildByName("title_container");
|
self.play_effect = self.title_container.getChildByName("action").getComponent(sp.Skeleton);
|
self.title_width = self.title_container.getContentSize().width;
|
self.title_height = self.title_container.getContentSize().height;
|
var item = self.main_container.getChildByName("item_1");
|
|
if (item) {
|
var title = item.getChildByName("title");
|
title.getComponent(cc.Label).string = "冒险者等级";
|
var object = {};
|
object.last_lev = item.getChildByName("last_lev");
|
object.now_lev = item.getChildByName("now_lev");
|
this.lev_list.push(object);
|
} // -- 升级奖励
|
|
|
self.award_container = self.main_container.getChildByName("award_container");
|
var award_title = self.award_container.getChildByName("award_title");
|
award_title.getComponent(cc.Label).string = "升级奖励"; // -- 扩展类的说明,不一定有
|
|
self.extend_container = self.main_container.getChildByName("extend_container");
|
self.extend_panel = self.extend_container.getChildByName("extend_panel");
|
self.extend_icon = self.extend_panel.getChildByName("icon");
|
self.extend_title = self.extend_panel.getChildByName("title");
|
self.extend_desc = self.extend_panel.getChildByName("desc");
|
self.extend_ext_desc = self.extend_panel.getChildByName("ext_desc");
|
self.extend_panel.getChildByName("extend_title").getComponent(cc.Label).string = "功能预告";
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {
|
this.background.on('touchend', function () {
|
Utils.playButtonSound(2);
|
|
if (this.can_touch == true) {
|
this.onClickClose();
|
}
|
}, this);
|
},
|
// 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
|
openRootWnd: function openRootWnd(data) {
|
var self = this; // self.root_wnd.getComponent(cc.Animation).play("lev_upgrade_window")
|
|
Utils.playButtonSound("c_get");
|
self.handleEffect();
|
self.starTimeTicket();
|
var old_lev = data.old_lev || 0;
|
var lev = data.lev || 0;
|
var lev_config = Config.role_data.data_role_attr[lev];
|
|
if (lev_config) {
|
// -- 角色等级
|
var role_object = self.lev_list[0];
|
role_object.last_lev.getComponent(cc.Label).string = old_lev;
|
role_object.now_lev.getComponent(cc.Label).string = lev;
|
self.award_data = [];
|
|
for (var i = old_lev + 1; i <= lev; ++i) {
|
var lev_cfg = Config.role_data.data_role_attr[i];
|
|
if (lev_cfg && lev_cfg.reward) {
|
for (var k = 0; k < lev_cfg.reward.length; ++k) {
|
var v = lev_cfg.reward[k];
|
self.checkAddAwardData(v);
|
}
|
}
|
}
|
|
self.setAwardInfo();
|
self.setExtendInfo(lev_config);
|
}
|
},
|
handleEffect: function handleEffect() {
|
var self = this;
|
var effect_id = 274;
|
|
if (self.play_effect) {
|
var sketon_path = PathTool.getSpinePath(PathTool.getEffectRes(effect_id), "action");
|
this.loadRes(sketon_path, function (skeleton_data) {
|
this.play_effect.skeletonData = skeleton_data;
|
this.play_effect.setAnimation(0, "action2", false);
|
}.bind(this));
|
}
|
},
|
starTimeTicket: function starTimeTicket() {
|
var self = this;
|
self.cut_time = 0;
|
|
if (self.time_ticket == null) {
|
self.time_ticket = gcore.Timer.set(function () {
|
self.cut_time = self.cut_time + 0.5;
|
|
if (self.cut_time > 0.5) {
|
self.can_touch = true;
|
}
|
|
if (self.cut_time >= self.auto_limit_time) {
|
gcore.Timer.del(this.time_ticket);
|
this.time_ticket = null;
|
self.onClickClose();
|
}
|
}.bind(this), 500, -1);
|
}
|
},
|
//将重复的奖励道具叠加显示
|
checkAddAwardData: function checkAddAwardData(data) {
|
var self = this;
|
self.award_data = self.award_data || [];
|
|
if (Utils.next(self.award_data) == null) {
|
self.award_data.push(data);
|
return;
|
}
|
|
for (var k = 0; k < self.award_data.length; ++k) {
|
var v = self.award_data[k];
|
|
if (v[0] && data[0]) {
|
if (v[0] == data[0]) {
|
v[1] = v[1] + data[1];
|
} else {
|
self.award_data.push(data);
|
}
|
}
|
}
|
},
|
// -- 升级奖励物品
|
setAwardInfo: function setAwardInfo() {
|
var self = this;
|
if (self.award_data == null) return;
|
|
for (var k = 0; k < self.item_list.length; ++k) {
|
var v = self.item_list[k];
|
v.setVisible(false);
|
}
|
|
if (self.award_data && Utils.next(self.award_data) != null) {
|
var space_x = 20;
|
var scale = 1;
|
var panel_size = self.award_container.getContentSize();
|
var start_x = 0; //panel_size.width/2 - (self.award_data.length-1)*(space_x/2+120*scale/2)
|
|
for (var i = 0; i < self.award_data.length; ++i) {
|
var _v = self.award_data[i];
|
var item = self.item_list[i];
|
|
if (item == null) {
|
var bid = _v[0];
|
var num = _v[1];
|
item = ItemsPool.getInstance().getItem("backpack_item");
|
item.setParent(self.award_container);
|
item.setData({
|
bid: bid,
|
num: num
|
});
|
self.item_list[i] = item;
|
}
|
|
var pos_x = start_x + (i + 1 - 1) * (space_x + 120 * scale);
|
item.show();
|
item.setPosition(pos_x, panel_size.height / 2 - 25);
|
}
|
|
self.award_container.active = true;
|
} else {
|
self.award_container.active = false;
|
}
|
},
|
onClickClose: function onClickClose() {
|
this.ctrl.openMainWindow(false);
|
ActionController.getInstance().checkOpenActionLimitGiftMainWindow();
|
},
|
setExtendInfo: function setExtendInfo(config) {
|
if (config == null) return;
|
var self = this;
|
|
if (config.icon == "") {
|
self.back_panel.setContentSize(cc.size(SCREEN_WIDTH, 349));
|
var height = this.main_container.height - 349;
|
this.main_container.height -= height;
|
self.extend_container.active = false;
|
} else {
|
self.back_panel.setContentSize(cc.size(SCREEN_WIDTH, 519));
|
var path_icon = PathTool.getUIIconPath("bigbg/battledrama", config.icon);
|
this.loadRes(path_icon, function (res) {
|
self.extend_icon.getComponent(cc.Sprite).spriteFrame = res;
|
}.bind(this));
|
self.extend_title.getComponent(cc.Label).string = config.title;
|
self.extend_desc.getComponent(cc.Label).string = config.desc;
|
self.extend_ext_desc.getComponent(cc.Label).string = config.ext_desc;
|
}
|
},
|
// 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
|
closeCallBack: function closeCallBack() {
|
this.play_effect.skeletonData = null;
|
|
if (this.time_ticket) {
|
gcore.Timer.del(this.time_ticket);
|
this.time_ticket = null;
|
}
|
|
for (var i = 0; i < this.item_list.length; ++i) {
|
this.item_list[i].deleteMe();
|
this.item_list[i] = null;
|
}
|
|
gcore.GlobalEvent.fire(StoryEvent.PREPARE_PLAY_PLOT);
|
this.ctrl.openMainWindow(false);
|
}
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxsZXZ1cGdyYWRlXFx2aWV3XFxsZXZfdXBncmFkZV93aW5kb3cuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiQWN0aW9uQ29udHJvbGxlciIsIkxldnVwZ3JhZGVDb250cm9sbGVyIiwiU3RvcnlFdmVudCIsIkxldnVwZ3JhZGVXaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ2aWV3VGFnIiwiU0NFTkVfVEFHIiwiZGlhbG9ndWUiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJUaXBzIiwiY3RybCIsImdldEluc3RhbmNlIiwiaW5pdENvbmZpZyIsImxldl9saXN0IiwiY2FuX3RvdWNoIiwiYXV0b19saW1pdF90aW1lIiwiaXRlbV9saXN0Iiwib3BlbkNhbGxCYWNrIiwic2VsZiIsImJhY2tncm91bmQiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwibWFpbl9jb250YWluZXIiLCJiYWNrX3BhbmVsIiwidGl0bGVfY29udGFpbmVyIiwicGxheV9lZmZlY3QiLCJnZXRDb21wb25lbnQiLCJzcCIsIlNrZWxldG9uIiwidGl0bGVfd2lkdGgiLCJnZXRDb250ZW50U2l6ZSIsIndpZHRoIiwidGl0bGVfaGVpZ2h0IiwiaGVpZ2h0IiwiaXRlbSIsInRpdGxlIiwiTGFiZWwiLCJzdHJpbmciLCJvYmplY3QiLCJsYXN0X2xldiIsIm5vd19sZXYiLCJwdXNoIiwiYXdhcmRfY29udGFpbmVyIiwiYXdhcmRfdGl0bGUiLCJleHRlbmRfY29udGFpbmVyIiwiZXh0ZW5kX3BhbmVsIiwiZXh0ZW5kX2ljb24iLCJleHRlbmRfdGl0bGUiLCJleHRlbmRfZGVzYyIsImV4dGVuZF9leHRfZGVzYyIsInJlZ2lzdGVyRXZlbnQiLCJvbiIsIlV0aWxzIiwicGxheUJ1dHRvblNvdW5kIiwib25DbGlja0Nsb3NlIiwib3BlblJvb3RXbmQiLCJkYXRhIiwiaGFuZGxlRWZmZWN0Iiwic3RhclRpbWVUaWNrZXQiLCJvbGRfbGV2IiwibGV2IiwibGV2X2NvbmZpZyIsIkNvbmZpZyIsInJvbGVfZGF0YSIsImRhdGFfcm9sZV9hdHRyIiwicm9sZV9vYmplY3QiLCJhd2FyZF9kYXRhIiwiaSIsImxldl9jZmciLCJyZXdhcmQiLCJrIiwibGVuZ3RoIiwidiIsImNoZWNrQWRkQXdhcmREYXRhIiwic2V0QXdhcmRJbmZvIiwic2V0RXh0ZW5kSW5mbyIsImVmZmVjdF9pZCIsInNrZXRvbl9wYXRoIiwiZ2V0U3BpbmVQYXRoIiwiZ2V0RWZmZWN0UmVzIiwibG9hZFJlcyIsInNrZWxldG9uX2RhdGEiLCJza2VsZXRvbkRhdGEiLCJzZXRBbmltYXRpb24iLCJiaW5kIiwiY3V0X3RpbWUiLCJ0aW1lX3RpY2tldCIsImdjb3JlIiwiVGltZXIiLCJzZXQiLCJkZWwiLCJuZXh0Iiwic2V0VmlzaWJsZSIsInNwYWNlX3giLCJzY2FsZSIsInBhbmVsX3NpemUiLCJzdGFydF94IiwiYmlkIiwibnVtIiwiSXRlbXNQb29sIiwiZ2V0SXRlbSIsInNldFBhcmVudCIsInNldERhdGEiLCJwb3NfeCIsInNob3ciLCJzZXRQb3NpdGlvbiIsImFjdGl2ZSIsIm9wZW5NYWluV2luZG93IiwiY2hlY2tPcGVuQWN0aW9uTGltaXRHaWZ0TWFpbldpbmRvdyIsImNvbmZpZyIsImljb24iLCJzZXRDb250ZW50U2l6ZSIsInNpemUiLCJTQ1JFRU5fV0lEVEgiLCJwYXRoX2ljb24iLCJnZXRVSUljb25QYXRoIiwicmVzIiwiU3ByaXRlIiwic3ByaXRlRnJhbWUiLCJkZXNjIiwiZXh0X2Rlc2MiLCJjbG9zZUNhbGxCYWNrIiwiZGVsZXRlTWUiLCJHbG9iYWxFdmVudCIsImZpcmUiLCJQUkVQQVJFX1BMQVlfUExPVCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztB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TUFBN0IsRUFBb0MsRUFBRUosQ0FBdEMsRUFBd0M7QUFDcEMsV0FBS25ELFNBQUwsQ0FBZW1ELENBQWYsRUFBa0J1RCxRQUFsQjtBQUNBLFdBQUsxRyxTQUFMLENBQWVtRCxDQUFmLElBQW9CLElBQXBCO0FBQ0g7O0FBQ0RvQixJQUFBQSxLQUFLLENBQUNvQyxXQUFOLENBQWtCQyxJQUFsQixDQUF1QmhJLFVBQVUsQ0FBQ2lJLGlCQUFsQztBQUNBLFNBQUtuSCxJQUFMLENBQVVpRyxjQUFWLENBQXlCLEtBQXpCO0FBQ0g7QUFwTjJCLENBQVQsQ0FBdkIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAYXV0aG9yOiB4eHhAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICDov5nph4zmmK/mj4/ov7Dov5nkuKrnqpfkvZPnmoTkvZznlKjnmoRcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA0LTI2IDExOjM3OjE1XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIEFjdGlvbkNvbnRyb2xsZXIgPSByZXF1aXJlKFwiYWN0aW9uX2NvbnRyb2xsZXJcIilcbnZhciBMZXZ1cGdyYWRlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJsZXZ1cGdyYWRlX2NvbnRyb2xsZXJcIilcbnZhciBTdG9yeUV2ZW50ID0gcmVxdWlyZShcInN0b3J5X2V2ZW50XCIpXG52YXIgTGV2dXBncmFkZVdpbmRvdyA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlVmlldyxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJsZXZ1cGdyYWRlXCIsIFwibGV2X3VwZ3JhZGVfd2luZG93XCIpO1xuICAgICAgICB0aGlzLnZpZXdUYWcgPSBTQ0VORV9UQUcuZGlhbG9ndWU7ICAgICAgICAgICAgICAgIC8v6K+l56qX5L2T5omA5bGedWnlsYLnuqcs5YWo5bGPdWnpnIDopoHlnKh1aeWxgizpnZ7lhajlsY91aeWcqGRpYWxvZ3Vl5bGCLOi/meS4quimgeazqOaEj1xuICAgICAgICB0aGlzLndpbl90eXBlID0gV2luVHlwZS5UaXBzOyAgICAgICAgICAgICAgIC8v5piv5ZCm5piv5YWo5bGP56qX5L2TICBXaW5UeXBlLkZ1bGwsIFdpblR5cGUuQmlnLCBXaW5UeXBlLk1pbmksIFdpblR5cGUuVGlwc1xuICAgICAgICB0aGlzLmN0cmwgPSAgTGV2dXBncmFkZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKVxuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmxldl9saXN0ID0gW11cbiAgICAgICAgdGhpcy5jYW5fdG91Y2ggPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hdXRvX2xpbWl0X3RpbWUgPSA1O1xuICAgICAgICB0aGlzLml0ZW1fbGlzdCA9IFtdO1xuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI7nmoTlm57osIMs5Y+v5Lul5Zyo6L+Z6YeM5o2V6I6355u45YWz6IqC54K55oiW6ICF57uE5Lu2XG4gICAgb3BlbkNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgc2VsZi5iYWNrZ3JvdW5kID0gc2VsZi5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcImJhY2tncm91bmRcIilcblxuICAgICAgICBzZWxmLm1haW5fY29udGFpbmVyID0gc2VsZi5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcIm1haW5fY29udGFpbmVyXCIpXG4gICAgICAgIHNlbGYuYmFja19wYW5lbCA9IHNlbGYubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJiYWNrX3BhbmVsXCIpXG4gICAgICAgIHNlbGYudGl0bGVfY29udGFpbmVyID0gc2VsZi5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInRpdGxlX2NvbnRhaW5lclwiKVxuICAgICAgICBzZWxmLnBsYXlfZWZmZWN0ID0gc2VsZi50aXRsZV9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJhY3Rpb25cIikuZ2V0Q29tcG9uZW50KHNwLlNrZWxldG9uKVxuICAgICAgICBzZWxmLnRpdGxlX3dpZHRoID0gc2VsZi50aXRsZV9jb250YWluZXIuZ2V0Q29udGVudFNpemUoKS53aWR0aFxuICAgICAgICBzZWxmLnRpdGxlX2hlaWdodCA9IHNlbGYudGl0bGVfY29udGFpbmVyLmdldENvbnRlbnRTaXplKCkuaGVpZ2h0XG5cbiAgICAgICAgbGV0IGl0ZW0gPSBzZWxmLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiaXRlbV8xXCIpXG4gICAgICAgIGlmKGl0ZW0pe1xuICAgICAgICAgICAgbGV0IHRpdGxlID0gaXRlbS5nZXRDaGlsZEJ5TmFtZShcInRpdGxlXCIpXG4gICAgICAgICAgICB0aXRsZS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFwi5YaS6Zmp6ICF562J57qnXCI7XG4gICAgICAgICAgICBsZXQgb2JqZWN0ID0ge31cbiAgICAgICAgICAgIG9iamVjdC5sYXN0X2xldiA9IGl0ZW0uZ2V0Q2hpbGRCeU5hbWUoXCJsYXN0X2xldlwiKVxuICAgICAgICAgICAgb2JqZWN0Lm5vd19sZXYgPSBpdGVtLmdldENoaWxkQnlOYW1lKFwibm93X2xldlwiKVxuICAgICAgICAgICAgdGhpcy5sZXZfbGlzdC5wdXNoKG9iamVjdClcbiAgICAgICAgfSAgIFxuXG4gICAgICAgIC8vIC0tIOWNh+e6p+WlluWKsVxuICAgICAgICBzZWxmLmF3YXJkX2NvbnRhaW5lciA9IHNlbGYubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJhd2FyZF9jb250YWluZXJcIilcbiAgICAgICAgbGV0IGF3YXJkX3RpdGxlID0gc2VsZi5hd2FyZF9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJhd2FyZF90aXRsZVwiKVxuICAgICAgICBhd2FyZF90aXRsZS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFwi5Y2H57qn5aWW5YqxXCI7XG5cbiAgICAgICAgLy8gLS0g5omp5bGV57G755qE6K+05piOLOS4jeS4gOWumuaciVxuICAgICAgICBzZWxmLmV4dGVuZF9jb250YWluZXIgPSBzZWxmLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwiZXh0ZW5kX2NvbnRhaW5lclwiKVxuICAgICAgICBzZWxmLmV4dGVuZF9wYW5lbCA9IHNlbGYuZXh0ZW5kX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImV4dGVuZF9wYW5lbFwiKVxuICAgICAgICBzZWxmLmV4dGVuZF9pY29uID0gc2VsZi5leHRlbmRfcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJpY29uXCIpXG4gICAgICAgIHNlbGYuZXh0ZW5kX3RpdGxlID0gc2VsZi5leHRlbmRfcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXRsZVwiKVxuICAgICAgICBzZWxmLmV4dGVuZF9kZXNjID0gc2VsZi5leHRlbmRfcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJkZXNjXCIpXG4gICAgICAgIHNlbGYuZXh0ZW5kX2V4dF9kZXNjID0gc2VsZi5leHRlbmRfcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJleHRfZGVzY1wiKVxuICAgICAgICBzZWxmLmV4dGVuZF9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcImV4dGVuZF90aXRsZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFwi5Yqf6IO96aKE5ZGKXCI7XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOS6i+S7tuebkeWQrOeahOaOpeWPoyzkuI3pnIDopoHmiYvliqjosIPnlKgs5aaC5p6c5piv5L2/55SoZ2NvcmUuR2xvYmFsRXZlbnTnm5HlkKws5Y+v5Lul55u05o6l6LCD55SoYWRkR2xvYmFsRXZlbnRcbiAgICByZWdpc3RlckV2ZW50OmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5vbigndG91Y2hlbmQnLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMilcbiAgICAgICAgICAgIGlmKHRoaXMuY2FuX3RvdWNoICA9PSB0cnVlKXtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xpY2tDbG9zZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sdGhpcykgXG5cbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwgyzkuZ/lsLHmmK/kuIDkuKrnqpfkvZPnmoTmraPlvI/lhaXlj6Ms5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb3BlblJvb3RXbmQ6ZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgLy8gc2VsZi5yb290X3duZC5nZXRDb21wb25lbnQoY2MuQW5pbWF0aW9uKS5wbGF5KFwibGV2X3VwZ3JhZGVfd2luZG93XCIpXG4gICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZChcImNfZ2V0XCIpIFxuICAgICAgICBzZWxmLmhhbmRsZUVmZmVjdCgpXG4gICAgICAgIHNlbGYuc3RhclRpbWVUaWNrZXQoKVxuICAgICAgICBsZXQgb2xkX2xldiA9IGRhdGEub2xkX2xldiB8fCAwXG4gICAgICAgIGxldCBsZXYgPSBkYXRhLmxldiB8fCAwXG4gICAgICAgIGxldCBsZXZfY29uZmlnID0gQ29uZmlnLnJvbGVfZGF0YS5kYXRhX3JvbGVfYXR0cltsZXZdXG4gICAgICAgIGlmKGxldl9jb25maWcpe1xuICAgICAgICAgICAgLy8gLS0g6KeS6Imy562J57qnXG4gICAgICAgICAgICBsZXQgcm9sZV9vYmplY3QgPSBzZWxmLmxldl9saXN0WzBdXG4gICAgICAgICAgICByb2xlX29iamVjdC5sYXN0X2xldi5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IG9sZF9sZXY7XG4gICAgICAgICAgICByb2xlX29iamVjdC5ub3dfbGV2LmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gbGV2O1xuXG4gICAgICAgICAgICBzZWxmLmF3YXJkX2RhdGEgPSBbXVxuICAgICAgICAgICAgZm9yKGxldCBpPSBvbGRfbGV2KzE7aTw9bGV2OysraSl7XG4gICAgICAgICAgICAgICAgbGV0IGxldl9jZmcgPSBDb25maWcucm9sZV9kYXRhLmRhdGFfcm9sZV9hdHRyW2ldXG4gICAgICAgICAgICAgICAgaWYobGV2X2NmZyAmJiBsZXZfY2ZnLnJld2FyZCl7XG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaz0wO2s8bGV2X2NmZy5yZXdhcmQubGVuZ3RoOysrayl7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdiA9IGxldl9jZmcucmV3YXJkW2tdXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrQWRkQXdhcmREYXRhKHYpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLnNldEF3YXJkSW5mbygpXG4gICAgICAgICAgICBzZWxmLnNldEV4dGVuZEluZm8obGV2X2NvbmZpZylcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlRWZmZWN0KCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IGVmZmVjdF9pZCA9IDI3NDtcbiAgICAgICAgaWYoc2VsZi5wbGF5X2VmZmVjdCApeyBcbiAgICAgICAgICAgIGxldCBza2V0b25fcGF0aCA9IFBhdGhUb29sLmdldFNwaW5lUGF0aChQYXRoVG9vbC5nZXRFZmZlY3RSZXMoZWZmZWN0X2lkKSwgXCJhY3Rpb25cIik7XG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMoc2tldG9uX3BhdGgsIGZ1bmN0aW9uKHNrZWxldG9uX2RhdGEpe1xuICAgICAgICAgICAgICAgIHRoaXMucGxheV9lZmZlY3Quc2tlbGV0b25EYXRhID0gc2tlbGV0b25fZGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYXlfZWZmZWN0LnNldEFuaW1hdGlvbigwLCBcImFjdGlvbjJcIiwgZmFsc2UpOyAgICAgICAgICAgXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpOyBcbiAgICAgICAgfVxuICAgICAgICBcbiAgICB9LFxuICAgIHN0YXJUaW1lVGlja2V0KCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBzZWxmLmN1dF90aW1lID0gMFxuICAgICAgICBpZihzZWxmLnRpbWVfdGlja2V0ID09IG51bGwpe1xuICAgICAgICAgICAgc2VsZi50aW1lX3RpY2tldCA9IGdjb3JlLlRpbWVyLnNldChmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHNlbGYuY3V0X3RpbWUgPSBzZWxmLmN1dF90aW1lICsgMC41XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY3V0X3RpbWUgPiAwLjUpe1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbl90b3VjaCA9IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYoc2VsZi5jdXRfdGltZSA+PSBzZWxmLmF1dG9fbGltaXRfdGltZSl7XG4gICAgICAgICAgICAgICAgICAgIGdjb3JlLlRpbWVyLmRlbCh0aGlzLnRpbWVfdGlja2V0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lX3RpY2tldCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGlja0Nsb3NlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LmJpbmQodGhpcyksNTAwLC0xKVxuICAgICAgICB9XG4gICAgfSxcbiAgICAvL+WwhumHjeWkjeeahOWlluWKsemBk+WFt+WPoOWKoOaYvuekulxuICAgIGNoZWNrQWRkQXdhcmREYXRhKGRhdGEpe1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHNlbGYuYXdhcmRfZGF0YSA9IHNlbGYuYXdhcmRfZGF0YSB8fCBbXVxuICAgICAgICBpZihVdGlscy5uZXh0KHNlbGYuYXdhcmRfZGF0YSkgPT0gbnVsbCl7XG4gICAgICAgICAgICBzZWxmLmF3YXJkX2RhdGEucHVzaChkYXRhKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgZm9yKGxldCBrPTA7azxzZWxmLmF3YXJkX2RhdGEubGVuZ3RoOysrayl7XG4gICAgICAgICAgICBsZXQgdiA9IHNlbGYuYXdhcmRfZGF0YVtrXVxuICAgICAgICAgICAgaWYodlswXSAmJiBkYXRhWzBdKXtcbiAgICAgICAgICAgICAgICBpZih2WzBdID09IGRhdGFbMF0pe1xuICAgICAgICAgICAgICAgICAgICB2WzFdID0gdlsxXSArIGRhdGFbMV1cbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hd2FyZF9kYXRhLnB1c2goZGF0YSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8vIC0tIOWNh+e6p+WlluWKseeJqeWTgVxuICAgIHNldEF3YXJkSW5mbyggKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBpZihzZWxmLmF3YXJkX2RhdGEgPT0gbnVsbCkgIHJldHVybjtcbiAgICAgICAgZm9yKGxldCBrPTA7azxzZWxmLml0ZW1fbGlzdC5sZW5ndGg7KytrKXtcbiAgICAgICAgICAgIGxldCB2ID0gc2VsZi5pdGVtX2xpc3Rba11cbiAgICAgICAgICAgIHYuc2V0VmlzaWJsZShmYWxzZSlcbiAgICAgICAgfVxuICAgICAgICBpZihzZWxmLmF3YXJkX2RhdGEgJiYgVXRpbHMubmV4dChzZWxmLmF3YXJkX2RhdGEpICE9IG51bGwpe1xuICAgICAgICAgICAgbGV0IHNwYWNlX3ggPSAyMFxuICAgICAgICAgICAgbGV0IHNjYWxlID0gMVxuICAgICAgICAgICAgbGV0IHBhbmVsX3NpemUgPSBzZWxmLmF3YXJkX2NvbnRhaW5lci5nZXRDb250ZW50U2l6ZSgpXG4gICAgICAgICAgICBsZXQgc3RhcnRfeCA9IDAvL3BhbmVsX3NpemUud2lkdGgvMiAtIChzZWxmLmF3YXJkX2RhdGEubGVuZ3RoLTEpKihzcGFjZV94LzIrMTIwKnNjYWxlLzIpXG4gICAgICAgICAgICBmb3IobGV0IGk9MDtpPHNlbGYuYXdhcmRfZGF0YS5sZW5ndGg7KytpKXtcbiAgICAgICAgICAgICAgICBsZXQgdiA9IHNlbGYuYXdhcmRfZGF0YVtpXVxuICAgICAgICAgICAgICAgIGxldCBpdGVtID0gc2VsZi5pdGVtX2xpc3RbaV1cbiAgICAgICAgICAgICAgICBpZihpdGVtID09IG51bGwpe1xuICAgICAgICAgICAgICAgICAgICBsZXQgYmlkID0gdlswXVxuICAgICAgICAgICAgICAgICAgICBsZXQgbnVtID0gdlsxXVxuICAgICAgICAgICAgICAgICAgICBpdGVtID0gSXRlbXNQb29sLmdldEluc3RhbmNlKCkuZ2V0SXRlbShcImJhY2twYWNrX2l0ZW1cIilcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRQYXJlbnQoc2VsZi5hd2FyZF9jb250YWluZXIpO1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldERhdGEoe2JpZDpiaWQsIG51bTpudW19KVxuICAgICAgICAgICAgICAgICAgICBzZWxmLml0ZW1fbGlzdFtpXSA9IGl0ZW1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHBvc194ID0gc3RhcnRfeCArIChpKzEgLTEpKihzcGFjZV94KzEyMCpzY2FsZSlcbiAgICAgICAgICAgICAgICBpdGVtLnNob3coKVxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0UG9zaXRpb24ocG9zX3gsIHBhbmVsX3NpemUuaGVpZ2h0LzItMjUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLmF3YXJkX2NvbnRhaW5lci5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHNlbGYuYXdhcmRfY29udGFpbmVyLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBvbkNsaWNrQ2xvc2UoKXtcbiAgICAgICAgdGhpcy5jdHJsLm9wZW5NYWluV2luZG93KGZhbHNlKVxuICAgICAgICBBY3Rpb25Db250cm9sbGVyLmdldEluc3RhbmNlKCkuY2hlY2tPcGVuQWN0aW9uTGltaXRHaWZ0TWFpbldpbmRvdygpXG4gICAgfSxcbiAgICBzZXRFeHRlbmRJbmZvKGNvbmZpZyl7XG4gICAgICAgIGlmKGNvbmZpZyA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIGlmKGNvbmZpZy5pY29uID09IFwiXCIpe1xuICAgICAgICAgICAgc2VsZi5iYWNrX3BhbmVsLnNldENvbnRlbnRTaXplKGNjLnNpemUoU0NSRUVOX1dJRFRILCAzNDkpKVxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IHRoaXMubWFpbl9jb250YWluZXIuaGVpZ2h0IC0gMzQ5XG4gICAgICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyLmhlaWdodCAtPSBoZWlnaHRcbiAgICAgICAgICAgIHNlbGYuZXh0ZW5kX2NvbnRhaW5lci5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBzZWxmLmJhY2tfcGFuZWwuc2V0Q29udGVudFNpemUoY2Muc2l6ZShTQ1JFRU5fV0lEVEgsIDUxOSkpXG4gICAgICAgICAgICBsZXQgcGF0aF9pY29uID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImJpZ2JnL2JhdHRsZWRyYW1hXCIsIGNvbmZpZy5pY29uKVxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHBhdGhfaWNvbixmdW5jdGlvbihyZXMpe1xuICAgICAgICAgICAgICAgIHNlbGYuZXh0ZW5kX2ljb24uZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSByZXNcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgICAgIHNlbGYuZXh0ZW5kX3RpdGxlLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gY29uZmlnLnRpdGxlO1xuICAgICAgICAgICAgc2VsZi5leHRlbmRfZGVzYy5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IGNvbmZpZy5kZXNjO1xuICAgICAgICAgICAgc2VsZi5leHRlbmRfZXh0X2Rlc2MuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBjb25maWcuZXh0X2Rlc2M7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8vIOWFs+mXreeql+S9k+WbnuiwgyzpnIDopoHlnKjov5nph4zosIPnlKjor6XnqpfkvZPmiYDlsZ5jb250cm9sbGVy55qEY2xvc2Xmlrnms5XmsqHnlKjkuo7nva7nqbror6XnqpfkvZPlrp7kvovlr7nosaFcbiAgICBjbG9zZUNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMucGxheV9lZmZlY3Quc2tlbGV0b25EYXRhID0gbnVsbDtcbiAgICAgICAgaWYodGhpcy50aW1lX3RpY2tldCl7XG4gICAgICAgICAgICBnY29yZS5UaW1lci5kZWwodGhpcy50aW1lX3RpY2tldCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVfdGlja2V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBmb3IobGV0IGk9MDtpPHRoaXMuaXRlbV9saXN0Lmxlbmd0aDsrK2kpe1xuICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3RbaV0uZGVsZXRlTWUoKVxuICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3RbaV0gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShTdG9yeUV2ZW50LlBSRVBBUkVfUExBWV9QTE9UKVxuICAgICAgICB0aGlzLmN0cmwub3Blbk1haW5XaW5kb3coZmFsc2UpXG4gICAgfSxcbn0pIl19
|