(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/newfirstcharge/view/newfirstcharge1_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, 'bdd33ZaLJVAp5HTRLGTDcyY', 'newfirstcharge1_window'); // Scripts/mod/newfirstcharge/view/newfirstcharge1_window.js "use strict"; // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 这里是描述这个窗体的作用的 //
Create: 2019-08-15 17:44:42 // -------------------------------------------------------------------- var PathTool = require("pathtool"); var VipController = require("vip_controller"); var NewFirstChargeEvent = require("newfirstcharge_event"); var RoleController = require("role_controller"); var Newfirstcharge1Window = cc.Class({ "extends": BaseView, ctor: function ctor() { this.prefabPath = PathTool.getPrefabPath("newfirstcharge", "newfirstcharge1_window"); this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意 this.win_type = WinType.Big; //是否是全屏窗体 WinType.Full, WinType.Big, WinType.Mini, WinType.Tips this.ctrl = arguments[0]; this.model = this.ctrl.getModel(); }, // 初始化一些配置数据,可以用于声明一些变量之类的 initConfig: function initConfig() { this.effect_list = []; this.cur_node = null; this.item_list = {}; this.recharge_list = {}; this.select = new cc.Color().fromHEX("#AB382B"); this.notSelect = new cc.Color().fromHEX("#EC9A3B"); this.item_reward_list = []; for (var i = 1; i <= 3; i++) { this.item_reward_list[i] = {}; } }, // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件 openCallBack: function openCallBack() { var _this = this; this.background = this.root_wnd.getChildByName("background"); this.background.scale = FIT_SCALE; var bg_sp = this.seekChild("bg", cc.Sprite); this.loadRes(PathTool.getBigBg("action/txt_cn_action_bigbg_30506"), function (res) { bg_sp.spriteFrame = res; }.bind(this)); this.close_btn = this.seekChild("newfirstcharge_btn_close"); this.btn_recharge = this.seekChild("newfirstcharge_btn_bottom"); this.loadRes(PathTool.getUIIconPath("newfirstcharge", "newfirstcharge_btn_bottom"), function (res) { this.btn_recharge.getComponent(cc.Sprite).spriteFrame = res; }.bind(this)); this.recharge_6_nd = this.seekChild("toggle1"); this.recharge_6_lb = this.seekChild(this.recharge_6_nd, "Label", cc.Label); this.recharge_100_nd = this.seekChild("toggle2"); this.recharge_100_lb = this.seekChild(this.recharge_100_nd, "Label", cc.Label); this.text_rt = this.seekChild("Text", cc.RichText); this.text_rt.string = Utils.TI18N("机会仅1次!以下仅可选择一个充值档位获得四倍钻石!"); this.recharge_6_lb.string = Utils.TI18N("首充赠礼"); this.recharge_100_lb.string = Utils.TI18N("100元赠礼"); this.tab_view = [this.recharge_6_nd, this.recharge_100_nd]; this.remain_charge = this.seekChild("recharge_num", cc.Label); this.remain_charge.string = Utils.TI18N("已累充: "); var _loop = function _loop(_i) { _this.tab_view[_i].index = _i; _this.tab_view[_i].on("toggle", function (event) { this.changeTabView(_i); }, _this); }; for (var _i = 0; _i < this.tab_view.length; ++_i) { _loop(_i); } this.model.setFirstRechargeNewData(); this.recharge_info_nd = this.seekChild("rechargeInfo"); this.help_nd = this.seekChild(this.recharge_info_nd, "help"); for (var i = 1; i <= 3; i++) { var item = this.recharge_info_nd.getChildByName("item_" + i); if (item) { var object = {}; object.scroll = item.getChildByName("scroll").getChildByName("content"); object.finish_icon = item.getChildByName("finish_icon"); object.finish_icon.active = false; object.title = item.getChildByName("title").getComponent(cc.Label); object.title.string = Utils.TI18N("第") + i + Utils.TI18N("天免费领"); object.list = {}; this.item_list[i] = object; } } this.btn_label = this.btn_recharge.getChildByName("Label").getComponent(cc.Label); this.btn_label.string = Utils.TI18N("前往充值"); var chargeBtn = this.seekChild("newfirstcharge_effect"); var _loop2 = function _loop2(_i2) { var obj = {}; obj.node = chargeBtn.getChildByName("charge_item_" + _i2); obj.node.active = false; obj.bg = obj.node.getComponent(cc.Sprite); obj.node.getChildByName("title_img").getChildByName("num").getComponent(cc.Label).string = Utils.TI18N("4倍"); obj.rmbNum = obj.node.getChildByName("layout").getChildByName("rmb").getComponent(cc.Label); obj.goldNum = obj.node.getChildByName("layout").getChildByName("goldIcon").getChildByName("goldNum").getComponent(cc.Label); obj.referral = obj.node.getChildByName("referral"); obj.referral.active = false; _this.recharge_list[_i2] = obj; var icon_sp = obj.node.getChildByName("layout").getChildByName("goldIcon").getChildByName("gold").getComponent(cc.Sprite); _this.loadRes(PathTool.getItemRes("3"), function (res) { icon_sp.spriteFrame = res; }); obj.node.on('click', function () { Utils.playButtonSound(1); var config = Config.charge_data.data_quadruple_rebate[_i2]; SDK.pay(config.val, null, config.charge_id, config.name, config.name); }, _this); }; for (var _i2 = 1; _i2 < 5; ++_i2) { _loop2(_i2); } }, // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent registerEvent: function registerEvent() { this.addGlobalEvent(NewFirstChargeEvent.New_First_Charge_Event, function (data) { this.updata_charge_data = data; var role_vo = RoleController.getInstance().getRoleVo(); var totle_str = cc.js.formatStr(Utils.TI18N("已累充: %d"), Math.floor(role_vo.vip_exp * 0.1)); this.remain_charge.string = totle_str; this.setRedPointTab(); this.updateData(data); }.bind(this)); this.close_btn.on("click", function () { Utils.playButtonSound(2); this.ctrl.openNewFirstChargeView(false); }, this); this.btn_recharge.on('click', function () { var first_data = this.model.getFirstRechargeData(this.cur_node.index + 1); if (this.get_gift_id == 0) { this.setVisible(false); VipController.getInstance().openVipMainWindow(true, VIPTABCONST.CHARGE, null, function () { this.setVisible(true); }.bind(this)); } else if (this.get_gift_id == 1) { if (first_data[this.gift_index]) { this.ctrl.sender21001(first_data[this.gift_index].id); } } else { this.ctrl.openNewFirstChargeView(false); } }, this); this.help_nd.on("click", function (event) { Utils.playButtonSound(3); var config = Config.holiday_client_data.data_constant.shouchong_rules; var pos = event.node.convertToWorldSpaceAR(cc.v2(0, 0)); require("tips_controller").getInstance().showCommonTips(config.desc, pos); }, this); this.role_vo = RoleController.getInstance().getRoleVo(); if (this.role_assets_event == null) { this.role_assets_event = this.role_vo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, value) { if (key == "vip_exp") { this.updateData(); } }.bind(this)); } }, // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了 openRootWnd: function openRootWnd(index) { index = index || 1; this.tab_view[index - 1].getComponent(cc.Toggle).check(); if (index == 1) { this.changeTabView(index - 1); } this.ctrl.sender21000(); }, changeTabView: function changeTabView(index) { var temp = this.cur_node; if (temp) { temp.getChildByName("Label").color = this.notSelect; } else { for (var i = 0; i < this.tab_view.length; ++i) { this.tab_view[i].getChildByName("Label").color = this.notSelect; } } this.cur_node = this.tab_view[index]; this.cur_node.getChildByName("Label").color = this.select; var first_data = this.model.getFirstRechargeData(index + 1); this.fillItemList(first_data); if (this.updata_charge_data) { this.updateData(this.updata_charge_data); } }, updateData: function updateData() { var _this2 = this; var status_list = [[1, 2, 3], [4, 5, 6]]; var charge_list = []; var index = this.cur_node.index; for (var _i3 = 0; _i3 < status_list[index].length; ++_i3) { var status = this.model.getFirstBtnStatus(status_list[index][_i3]); charge_list[_i3] = status; this.item_list[parseInt(_i3) + 1].finish_icon.active = status == 2; } this.gift_index = 0; //领取的位置 var totle = 0; this.get_gift_id = 10; for (var i = 0; i < charge_list.length; ++i) { totle = totle + charge_list[i]; if (charge_list[i] == 1) { this.get_gift_id = 1; this.gift_index = i; } } this.btn_recharge.active = false; var role_vo = RoleController.getInstance().getRoleVo(); if (role_vo.vip_exp * 0.1 < 6) { var _loop3 = function _loop3(_i4) { var config = Config.charge_data.data_quadruple_rebate[_i4]; var obj = _this2.recharge_list[_i4]; obj.node.active = true; obj.rmbNum.string = Utils.TI18N(config.val + "元"); obj.goldNum.string = config.gold; if (config.star == 1) { obj.referral.active = true; _this2.loadRes(PathTool.getUIIconPath("newfirstcharge", "newfirstcharge_btn_top"), function (res) { obj.bg.spriteFrame = res; }.bind(_this2)); } else { obj.referral.active = false; _this2.loadRes(PathTool.getUIIconPath("newfirstcharge", "newfirstcharge_btn_bottom"), function (res) { obj.bg.spriteFrame = res; }.bind(_this2)); } }; for (var _i4 in this.recharge_list) { _loop3(_i4); } } else { this.text_rt.string = Utils.TI18N("累充100元可领取更多豪礼!"); for (var _i5 in this.recharge_list) { var obj = this.recharge_list[_i5]; obj.node.active = false; } this.btn_recharge.active = true; if (totle == 0) { this.get_gift_id = 0; this.btn_label.string = Utils.TI18N("前往充值"); } else if (totle == 1 || totle == 3 || totle == 5) { this.btn_label.string = Utils.TI18N("领取奖励"); } else if (totle == 2 || totle == 4) { this.btn_label.string = Utils.TI18N("明日再来"); } else if (totle == 6) { this.btn_label.string = Utils.TI18N("领取完毕"); } } }, setRedPointTab: function setRedPointTab() { var status_1 = false; for (var i = 1; i <= 3; i++) { var get_data = this.model.getFirstBtnStatus(i); if (get_data) { if (get_data == 1) { status_1 = true; break; } } } Utils.addRedPointToNodeByStatus(this.tab_view[0], status_1); var status_2 = false; for (var i = 4; i <= 6; i++) { var get_data = this.model.getFirstBtnStatus(i); if (get_data) { if (get_data == 1) { status_2 = true; break; } } } Utils.addRedPointToNodeByStatus(this.tab_view[1], status_2); }, fillItemList: function fillItemList(list) { var _this3 = this; var scale = 0.7; var size = 119 * scale; var create_index = 1; for (var i = 0; i < list.length; i++) { var object = this.item_list[i + 1]; var num = list[i].item_list.length; object.scroll.setContentSize(cc.size(size * num + (list.length - 1) * 10, object.scroll.getContentSize().height)); for (var k = 0; k < num; k++) { var _x = size * (k + 1) - size * 0.5 + k * 10; var _y = size * 0.5; if (!this.item_reward_list[i + 1][k]) { this.item_reward_list[i + 1][k] = ItemsPool.getInstance().getItem("backpack_item"); this.item_reward_list[i + 1][k].setParent(object.scroll); this.item_reward_list[i + 1][k].setExtendData({ scale: scale, is_show_tips: true }); this.item_reward_list[i + 1][k].show(); if (list[i].effect_list) { var spine = new cc.Node().addComponent(sp.Skeleton); object.scroll.addChild(spine.node, 6 + create_index); this.effect_list[create_index - 1] = spine; spine.node.active = false; } } if (this.item_reward_list[i + 1][k]) { this.item_reward_list[i + 1][k].setPosition(_x, _y); this.item_reward_list[i + 1][k].setData({ bid: list[i].item_list[k][0], num: list[i].item_list[k][1] }); this.effect_list[create_index - 1].node.active = true; this.effect_list[create_index - 1].node.setPosition(_x, _y); if (list[i].effect_list) { (function () { var effect_action = "action"; var scale1 = 1.0; if (list[i].effect_list[0][k] == 263) { effect_action = "action1"; scale1 = 1.1; } _this3.effect_list[create_index - 1].node.scale = scale * scale1; var index = create_index - 1; _this3.loadRes(PathTool.getSpinePath(PathTool.getEffectRes(list[i].effect_list[0][k])), function (res) { this.effect_list[index].skeletonData = res; this.effect_list[index].setAnimation(0, effect_action, true); }.bind(_this3)); })(); } } create_index = create_index + 1; } } }, // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象 closeCallBack: function closeCallBack() { if (this.item_reward_list) { for (var i = 1; i <= 3; i++) { for (var j in this.item_reward_list[i]) { this.item_reward_list[i][j].deleteMe(); this.item_reward_list[i][j] = null; } this.item_reward_list[i] = null; } this.item_reward_list = null; } if (this.role_vo != null) { if (this.role_assets_event != null) { this.role_vo.unbind(this.role_assets_event); this.role_assets_event = null; } } if (this.effect_list) { for (var _i6 = 0; _i6 < this.effect_list.length; ++_i6) { if (this.effect_list[_i6]) { this.effect_list[_i6].destroy(); this.effect_list[_i6] = null; } } this.effect_list = null; } var GuideEvent = require("guide_event"); gcore.GlobalEvent.fire(GuideEvent.CloseTaskEffect); this.ctrl.openNewFirstChargeView(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxuZXdmaXJzdGNoYXJnZVxcdmlld1xcbmV3Zmlyc3RjaGFyZ2UxX3dpbmRvdy5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJWaXBDb250cm9sbGVyIiwiTmV3Rmlyc3RDaGFyZ2VFdmVudCIsIlJvbGVDb250cm9sbGVyIiwiTmV3Zmlyc3RjaGFyZ2UxV2luZG93IiwiY2MiLCJDbGFzcyIsIkJhc2VWaWV3IiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwidmlld1RhZyIsIlNDRU5FX1RBRyIsImRpYWxvZ3VlIiwid2luX3R5cGUiLCJXaW5UeXBlIiwiQmlnIiwiY3RybCIsImFyZ3VtZW50cyIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJpbml0Q29uZmlnIiwiZWZmZWN0X2xpc3QiLCJjdXJfbm9kZSIsIml0ZW1fbGlzdCIsInJlY2hhcmdlX2xpc3QiLCJzZWxlY3QiLCJDb2xvciIsImZyb21IRVgiLCJub3RTZWxlY3QiLCJpdGVtX3Jld2FyZF9saXN0IiwiaSIsIm9wZW5DYWxsQmFjayIsImJhY2tncm91bmQiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwic2NhbGUiLCJGSVRfU0NBTEUiLCJiZ19zcCIsInNlZWtDaGlsZCIsIlNwcml0ZSIsImxvYWRSZXMiLCJnZXRCaWdCZyIsInJlcyIsInNwcml0ZUZyYW1lIiwiYmluZCIsImNsb3NlX2J0biIsImJ0bl9yZWNoYXJnZSIsImdldFVJSWNvblBhdGgiLCJnZXRDb21wb25lbnQiLCJyZWNoYXJnZV82X25kIiwicmVjaGFyZ2VfNl9sYiIsIkxhYmVsIiwicmVjaGFyZ2VfMTAwX25kIiwicmVjaGFyZ2VfMTAwX2xiIiwidGV4dF9ydCIsIlJpY2hUZXh0Iiwic3RyaW5nIiwiVXRpbHMiLCJUSTE4TiIsInRhYl92aWV3IiwicmVtYWluX2NoYXJnZSIsImluZGV4Iiwib24iLCJldmVudCIsImNoYW5nZVRhYlZpZXciLCJsZW5ndGgiLCJzZXRGaXJzdFJlY2hhcmdlTmV3RGF0YSIsInJlY2hhcmdlX2luZm9fbmQiLCJoZWxwX25kIiwiaXRlbSIsIm9iamVjdCIsInNjcm9sbCIsImZpbmlzaF9pY29uIiwiYWN0aXZlIiwidGl0bGUiLCJsaXN0IiwiYnRuX2xhYmVsIiwiY2hhcmdlQnRuIiwib2JqIiwibm9kZSIsImJnIiwicm1iTnVtIiwiZ29sZE51bSIsInJlZmVycmFsIiwiaWNvbl9zcCIsImdldEl0ZW1SZXMiLCJwbGF5QnV0dG9uU291bmQiLCJjb25maWciLCJDb25maWciLCJjaGFyZ2VfZGF0YSIsImRhdGFfcXVhZHJ1cGxlX3JlYmF0ZSIsIlNESyIsInBheSIsInZhbCIsImNoYXJnZV9pZCIsIm5hbWUiLCJyZWdpc3RlckV2ZW50IiwiYWRkR2xvYmFsRXZlbnQiLCJOZXdfRmlyc3RfQ2hhcmdlX0V2ZW50IiwiZGF0YSIsInVwZGF0YV9jaGFyZ2VfZGF0YSIsInJvbGVfdm8iLCJnZXRJbnN0YW5jZSIsImdldFJvbGVWbyIsInRvdGxlX3N0ciIsImpzIiwiZm9ybWF0U3RyIiwiTWF0aCIsImZsb29yIiwidmlwX2V4cCIsInNldFJlZFBvaW50VGFiIiwidXBkYXRlRGF0YSIsIm9wZW5OZXdGaXJzdENoYXJnZVZpZXciLCJmaXJzdF9kYXRhIiwiZ2V0Rmlyc3RSZWNoYXJnZURhdGEiLCJnZXRfZ2lmdF9pZCIsInNldFZpc2libGUiLCJvcGVuVmlwTWFpbldpbmRvdyIsIlZJUFRBQkNPTlNUIiwiQ0hBUkdFIiwiZ2lmdF9pbmRleCIsInNlbmRlcjIxMDAxIiwiaWQiLCJob2xpZGF5X2NsaWVudF9kYXRhIiwiZGF0YV9jb25zdGFudCIsInNob3VjaG9uZ19ydWxlcyIsInBvcyIsImNvbnZlcnRUb1dvcmxkU3BhY2VBUiIsInYyIiwic2hvd0NvbW1vblRpcHMiLCJkZXNjIiwicm9sZV9hc3NldHNfZXZlbnQiLCJFdmVudElkIiwiVVBEQVRFX1JPTEVfQVRUUklCVVRFIiwia2V5IiwidmFsdWUiLCJvcGVuUm9vdFduZCIsIlRvZ2dsZSIsImNoZWNrIiwic2VuZGVyMjEwMDAiLCJ0ZW1wIiwiY29sb3IiLCJmaWxsSXRlbUxpc3QiLCJzdGF0dXNfbGlzdCIsImNoYXJnZV9saXN0Iiwic3RhdHVzIiwiZ2V0Rmlyc3RCdG5TdGF0dXMiLCJwYXJzZUludCIsInRvdGxlIiwiZ29sZCIsInN0YXIiLCJzdGF0dXNfMSIsImdldF9kYXRhIiwiYWRkUmVkUG9pbnRUb05vZGVCeVN0YXR1cyIsInN0YXR1c18yIiwic2l6ZSIsImNyZWF0ZV9pbmRleCIsIm51bSIsInNldENvbnRlbnRTaXplIiwiZ2V0Q29udGVudFNpemUiLCJoZWlnaHQiLCJrIiwiX3giLCJfeSIsIkl0ZW1zUG9vbCIsImdldEl0ZW0iLCJzZXRQYXJlbnQiLCJzZXRFeHRlbmREYXRhIiwiaXNfc2hvd190aXBzIiwic2hvdyIsInNwaW5lIiwiTm9kZSIsImFkZENvbXBvbmVudCIsInNwIiwiU2tlbGV0b24iLCJhZGRDaGlsZCIsInNldFBvc2l0aW9uIiwic2V0RGF0YSIsImJpZCIsImVmZmVjdF9hY3Rpb24iLCJzY2FsZTEiLCJnZXRTcGluZVBhdGgiLCJnZXRFZmZlY3RSZXMiLCJza2VsZXRvbkRhdGEiLCJzZXRBbmltYXRpb24iLCJjbG9zZUNhbGxCYWNrIiwiaiIsImRlbGV0ZU1lIiwidW5iaW5kIiwiZGVzdHJveSIsIkd1aWRlRXZlbnQiLCJnY29yZSIsIkdsb2JhbEV2ZW50IiwiZmlyZSIsIkNsb3NlVGFza0VmZmVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGFBQWEsR0FBR0QsT0FBTyxDQUFDLGdCQUFELENBQTNCOztBQUNBLElBQUlFLG1CQUFtQixHQUFHRixPQUFPLENBQUMsc0JBQUQsQ0FBakM7O0FBQ0EsSUFBSUcsY0FBYyxHQUFHSCxPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSUkscUJBQXFCLEdB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TyxDQUFDLGFBQUQsQ0FBeEI7O0FBQ0FnTSxJQUFBQSxLQUFLLENBQUNDLFdBQU4sQ0FBa0JDLElBQWxCLENBQXVCSCxVQUFVLENBQUNJLGVBQWxDO0FBQ0EsU0FBS2xMLElBQUwsQ0FBVWdHLHNCQUFWLENBQWlDLEtBQWpDO0FBQ0g7QUE1VWdDLENBQVQsQ0FBNUIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAYXV0aG9yOiB4eHhAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICDov5nph4zmmK/mj4/ov7Dov5nkuKrnqpfkvZPnmoTkvZznlKjnmoRcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA4LTE1IDE3OjQ0OjQyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIFZpcENvbnRyb2xsZXIgPSByZXF1aXJlKFwidmlwX2NvbnRyb2xsZXJcIik7XG52YXIgTmV3Rmlyc3RDaGFyZ2VFdmVudCA9IHJlcXVpcmUoXCJuZXdmaXJzdGNoYXJnZV9ldmVudFwiKTtcbnZhciBSb2xlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIik7XG52YXIgTmV3Zmlyc3RjaGFyZ2UxV2luZG93ID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcIm5ld2ZpcnN0Y2hhcmdlXCIsIFwibmV3Zmlyc3RjaGFyZ2UxX3dpbmRvd1wiKTtcbiAgICAgICAgdGhpcy52aWV3VGFnID0gU0NFTkVfVEFHLmRpYWxvZ3VlOyAgICAgICAgICAgICAgICAvL+ivpeeql+S9k+aJgOWxnnVp5bGC57qnLOWFqOWxj3Vp6ZyA6KaB5ZyodWnlsYIs6Z2e5YWo5bGPdWnlnKhkaWFsb2d1ZeWxgizov5nkuKropoHms6jmhI9cbiAgICAgICAgdGhpcy53aW5fdHlwZSA9IFdpblR5cGUuQmlnOyAgICAgICAgICAgICAgIC8v5piv5ZCm5piv5YWo5bGP56qX5L2TICBXaW5UeXBlLkZ1bGwsIFdpblR5cGUuQmlnLCBXaW5UeXBlLk1pbmksIFdpblR5cGUuVGlwc1xuICAgICAgICB0aGlzLmN0cmwgPSBhcmd1bWVudHNbMF07XG4gICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKTtcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW5LiA5Lqb6YWN572u5pWw5o2uLOWPr+S7peeUqOS6juWjsOaYjuS4gOS6m+WPmOmHj+S5i+exu+eahFxuICAgIGluaXRDb25maWc6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5lZmZlY3RfbGlzdCA9IFtdXG4gICAgICAgIHRoaXMuY3VyX25vZGUgPSBudWxsXG4gICAgICAgIHRoaXMuaXRlbV9saXN0ID0ge31cbiAgICAgICAgdGhpcy5yZWNoYXJnZV9saXN0ID0ge31cbiAgICAgICAgdGhpcy5zZWxlY3QgPSBuZXcgY2MuQ29sb3IoKS5mcm9tSEVYKFwiI0FCMzgyQlwiKVxuICAgICAgICB0aGlzLm5vdFNlbGVjdCA9IG5ldyBjYy5Db2xvcigpLmZyb21IRVgoXCIjRUM5QTNCXCIpXG4gICAgICAgIHRoaXMuaXRlbV9yZXdhcmRfbGlzdCA9IFtdO1xuICAgICAgICBmb3IodmFyIGkgPSAxO2k8PTM7aSsrKXtcbiAgICAgICAgICAgIHRoaXMuaXRlbV9yZXdhcmRfbGlzdFtpXSA9IHt9O1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjueahOWbnuiwgyzlj6/ku6XlnKjov5nph4zmjZXojrfnm7jlhbPoioLngrnmiJbogIXnu4Tku7ZcbiAgICBvcGVuQ2FsbEJhY2s6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcImJhY2tncm91bmRcIik7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5zY2FsZSA9IEZJVF9TQ0FMRTtcbiAgICAgICAgbGV0IGJnX3NwID0gdGhpcy5zZWVrQ2hpbGQoXCJiZ1wiLGNjLlNwcml0ZSlcbiAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldEJpZ0JnKFwiYWN0aW9uL3R4dF9jbl9hY3Rpb25fYmlnYmdfMzA1MDZcIiksZnVuY3Rpb24ocmVzKXtcbiAgICAgICAgICAgIGJnX3NwLnNwcml0ZUZyYW1lID0gcmVzXG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgdGhpcy5jbG9zZV9idG4gPSB0aGlzLnNlZWtDaGlsZChcIm5ld2ZpcnN0Y2hhcmdlX2J0bl9jbG9zZVwiKTtcbiAgICAgICAgdGhpcy5idG5fcmVjaGFyZ2UgPSB0aGlzLnNlZWtDaGlsZChcIm5ld2ZpcnN0Y2hhcmdlX2J0bl9ib3R0b21cIilcbiAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJuZXdmaXJzdGNoYXJnZVwiLFwibmV3Zmlyc3RjaGFyZ2VfYnRuX2JvdHRvbVwiKSxmdW5jdGlvbihyZXMpe1xuICAgICAgICAgICAgdGhpcy5idG5fcmVjaGFyZ2UuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSByZXNcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB0aGlzLnJlY2hhcmdlXzZfbmQgPSB0aGlzLnNlZWtDaGlsZChcInRvZ2dsZTFcIik7XG4gICAgICAgIHRoaXMucmVjaGFyZ2VfNl9sYiA9IHRoaXMuc2Vla0NoaWxkKHRoaXMucmVjaGFyZ2VfNl9uZCxcIkxhYmVsXCIsY2MuTGFiZWwpXG4gICAgICAgIHRoaXMucmVjaGFyZ2VfMTAwX25kID0gdGhpcy5zZWVrQ2hpbGQoXCJ0b2dnbGUyXCIpO1xuICAgICAgICB0aGlzLnJlY2hhcmdlXzEwMF9sYiA9IHRoaXMuc2Vla0NoaWxkKHRoaXMucmVjaGFyZ2VfMTAwX25kLFwiTGFiZWxcIixjYy5MYWJlbClcbiAgICAgICAgdGhpcy50ZXh0X3J0ID0gdGhpcy5zZWVrQ2hpbGQoXCJUZXh0XCIsY2MuUmljaFRleHQpXG4gICAgICAgIHRoaXMudGV4dF9ydC5zdHJpbmcgPSBVdGlscy5USTE4TihcIjxjb2xvcj0jNjQzMjIzPuacuuS8muS7hTwvY29sb3I+PGNvbG9yPSMxNTdlMjI+MTwvY29sb3I+PGNvbG9yPSM2NDMyMjM+5qyh77yB5Lul5LiL5LuF5Y+v6YCJ5oup5LiA5Liq5YWF5YC85qGj5L2N6I635b6XPC9jb2xvcj48Y29sb3I9IzE1N2UyMj7lm5vlgI08L2NvbG9yPjxjb2xvcj0jNjQzMjIzPumSu+efs++8gTwvY29sb3I+XCIpXG4gICAgICAgIHRoaXMucmVjaGFyZ2VfNl9sYi5zdHJpbmcgPSBVdGlscy5USTE4TihcIummluWFhei1oOekvFwiKVxuICAgICAgICB0aGlzLnJlY2hhcmdlXzEwMF9sYi5zdHJpbmcgPSBVdGlscy5USTE4TihcIjEwMOWFg+i1oOekvFwiKVxuICAgICAgICB0aGlzLnRhYl92aWV3ID0gW3RoaXMucmVjaGFyZ2VfNl9uZCx0aGlzLnJlY2hhcmdlXzEwMF9uZF1cbiAgICAgICAgdGhpcy5yZW1haW5fY2hhcmdlID0gdGhpcy5zZWVrQ2hpbGQoXCJyZWNoYXJnZV9udW1cIixjYy5MYWJlbClcbiAgICAgICAgdGhpcy5yZW1haW5fY2hhcmdlLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5bey57Sv5YWFOiBcIik7XG4gICAgICAgIGZvcihsZXQgaT0wO2k8dGhpcy50YWJfdmlldy5sZW5ndGg7KytpKXtcbiAgICAgICAgICAgIHRoaXMudGFiX3ZpZXdbaV0uaW5kZXggPSBpO1xuICAgICAgICAgICAgdGhpcy50YWJfdmlld1tpXS5vbihcInRvZ2dsZVwiLGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVRhYlZpZXcoaSlcbiAgICAgICAgICAgIH0sdGhpcylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vZGVsLnNldEZpcnN0UmVjaGFyZ2VOZXdEYXRhKCk7XG4gICAgICAgIHRoaXMucmVjaGFyZ2VfaW5mb19uZCA9IHRoaXMuc2Vla0NoaWxkKFwicmVjaGFyZ2VJbmZvXCIpXG4gICAgICAgIHRoaXMuaGVscF9uZCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMucmVjaGFyZ2VfaW5mb19uZCxcImhlbHBcIilcbiAgICAgICAgZm9yKHZhciBpID0gMTtpPD0zO2krKyl7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMucmVjaGFyZ2VfaW5mb19uZC5nZXRDaGlsZEJ5TmFtZShcIml0ZW1fXCIraSk7XG4gICAgICAgICAgICBpZihpdGVtKXtcbiAgICAgICAgICAgICAgICB2YXIgb2JqZWN0ID0ge31cbiAgICAgICAgICAgICAgICBvYmplY3Quc2Nyb2xsID0gaXRlbS5nZXRDaGlsZEJ5TmFtZShcInNjcm9sbFwiKS5nZXRDaGlsZEJ5TmFtZShcImNvbnRlbnRcIik7XG4gICAgICAgICAgICAgICAgb2JqZWN0LmZpbmlzaF9pY29uID0gaXRlbS5nZXRDaGlsZEJ5TmFtZShcImZpbmlzaF9pY29uXCIpXG4gICAgICAgICAgICAgICAgb2JqZWN0LmZpbmlzaF9pY29uLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIG9iamVjdC50aXRsZSA9IGl0ZW0uZ2V0Q2hpbGRCeU5hbWUoXCJ0aXRsZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICAgICAgICAgIG9iamVjdC50aXRsZS5zdHJpbmcgPSBVdGlscy5USTE4TihcIuesrFwiKStpK1V0aWxzLlRJMThOKFwi5aSp5YWN6LS56aKGXCIpO1xuICAgICAgICAgICAgICAgIG9iamVjdC5saXN0ID0ge31cbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtpXSA9IG9iamVjdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ0bl9sYWJlbCA9IHRoaXMuYnRuX3JlY2hhcmdlLmdldENoaWxkQnlOYW1lKFwiTGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKVxuICAgICAgICB0aGlzLmJ0bl9sYWJlbC5zdHJpbmcgPSAoVXRpbHMuVEkxOE4oXCLliY3lvoDlhYXlgLxcIikpXG4gICAgICAgIGxldCBjaGFyZ2VCdG4gPSB0aGlzLnNlZWtDaGlsZChcIm5ld2ZpcnN0Y2hhcmdlX2VmZmVjdFwiKVxuICAgICAgICBmb3IobGV0IGk9MTtpPDU7KytpKXtcbiAgICAgICAgICAgIGxldCBvYmogPSB7fVxuICAgICAgICAgICAgb2JqLm5vZGUgPSBjaGFyZ2VCdG4uZ2V0Q2hpbGRCeU5hbWUoXCJjaGFyZ2VfaXRlbV9cIitpKVxuICAgICAgICAgICAgb2JqLm5vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICBvYmouYmcgPSBvYmoubm9kZS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKVxuICAgICAgICAgICAgb2JqLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXRsZV9pbWdcIikuZ2V0Q2hpbGRCeU5hbWUoXCJudW1cIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBVdGlscy5USTE4TihcIjTlgI1cIilcbiAgICAgICAgICAgIG9iai5ybWJOdW0gPSBvYmoubm9kZS5nZXRDaGlsZEJ5TmFtZShcImxheW91dFwiKS5nZXRDaGlsZEJ5TmFtZShcInJtYlwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICAgICAgb2JqLmdvbGROdW0gPSBvYmoubm9kZS5nZXRDaGlsZEJ5TmFtZShcImxheW91dFwiKS5nZXRDaGlsZEJ5TmFtZShcImdvbGRJY29uXCIpLmdldENoaWxkQnlOYW1lKFwiZ29sZE51bVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICAgICAgb2JqLnJlZmVycmFsID0gb2JqLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJyZWZlcnJhbFwiKVxuICAgICAgICAgICAgb2JqLnJlZmVycmFsLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZWNoYXJnZV9saXN0W2ldID0gb2JqO1xuICAgICAgICAgICAgbGV0IGljb25fc3AgPSBvYmoubm9kZS5nZXRDaGlsZEJ5TmFtZShcImxheW91dFwiKS5nZXRDaGlsZEJ5TmFtZShcImdvbGRJY29uXCIpLmdldENoaWxkQnlOYW1lKFwiZ29sZFwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKVxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldEl0ZW1SZXMoXCIzXCIpLGZ1bmN0aW9uKHJlcyl7XG4gICAgICAgICAgICAgICAgaWNvbl9zcC5zcHJpdGVGcmFtZSA9IHJlc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIG9iai5ub2RlLm9uKCdjbGljaycsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMSlcbiAgICAgICAgICAgICAgICBsZXQgY29uZmlnID0gQ29uZmlnLmNoYXJnZV9kYXRhLmRhdGFfcXVhZHJ1cGxlX3JlYmF0ZVtpXVxuICAgICAgICAgICAgICAgIFNESy5wYXkoY29uZmlnLnZhbCxudWxsLGNvbmZpZy5jaGFyZ2VfaWQsY29uZmlnLm5hbWUsY29uZmlnLm5hbWUpXG4gICAgICAgICAgICB9LHRoaXMpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5LqL5Lu255uR5ZCs55qE5o6l5Y+jLOS4jemcgOimgeaJi+WKqOiwg+eUqCzlpoLmnpzmmK/kvb/nlKhnY29yZS5HbG9iYWxFdmVudOebkeWQrCzlj6/ku6Xnm7TmjqXosIPnlKhhZGRHbG9iYWxFdmVudFxuICAgIHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChOZXdGaXJzdENoYXJnZUV2ZW50Lk5ld19GaXJzdF9DaGFyZ2VfRXZlbnQsZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgICAgICB0aGlzLnVwZGF0YV9jaGFyZ2VfZGF0YSA9IGRhdGFcbiAgICAgICAgICAgIGxldCByb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKVxuICAgICAgICAgICAgbGV0IHRvdGxlX3N0ciA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIuW3sue0r+WFhTogJWRcIiksTWF0aC5mbG9vcihyb2xlX3ZvLnZpcF9leHAqMC4xKSlcbiAgICAgICAgICAgIHRoaXMucmVtYWluX2NoYXJnZS5zdHJpbmcgPSB0b3RsZV9zdHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmVkUG9pbnRUYWIoKVxuICAgICAgICAgICAgdGhpcy51cGRhdGVEYXRhKGRhdGEpXG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuY2xvc2VfYnRuLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe1xuICAgICAgICAgICAgVXRpbHMucGxheUJ1dHRvblNvdW5kKDIpXG4gICAgICAgICAgICB0aGlzLmN0cmwub3Blbk5ld0ZpcnN0Q2hhcmdlVmlldyhmYWxzZSk7XG4gICAgICAgIH0sdGhpcylcbiAgICAgICAgdGhpcy5idG5fcmVjaGFyZ2Uub24oJ2NsaWNrJyxmdW5jdGlvbigpe1xuICAgICAgICAgICAgbGV0IGZpcnN0X2RhdGEgPSB0aGlzLm1vZGVsLmdldEZpcnN0UmVjaGFyZ2VEYXRhKHRoaXMuY3VyX25vZGUuaW5kZXgrMSlcbiAgICAgICAgICAgIGlmKHRoaXMuZ2V0X2dpZnRfaWQgPT0gMCl7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWaXNpYmxlKGZhbHNlKVxuICAgICAgICAgICAgICAgIFZpcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuVmlwTWFpbldpbmRvdyh0cnVlLCBWSVBUQUJDT05TVC5DSEFSR0UsbnVsbCxmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZpc2libGUodHJ1ZSlcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgICAgICB9ZWxzZSBpZih0aGlzLmdldF9naWZ0X2lkID09IDEpe1xuICAgICAgICAgICAgICAgIGlmKGZpcnN0X2RhdGFbdGhpcy5naWZ0X2luZGV4XSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kZXIyMTAwMShmaXJzdF9kYXRhW3RoaXMuZ2lmdF9pbmRleF0uaWQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5OZXdGaXJzdENoYXJnZVZpZXcoZmFsc2UpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sdGhpcylcbiAgICAgICAgdGhpcy5oZWxwX25kLm9uKFwiY2xpY2tcIixmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMylcbiAgICAgICAgICAgIHZhciBjb25maWcgPSBDb25maWcuaG9saWRheV9jbGllbnRfZGF0YS5kYXRhX2NvbnN0YW50LnNob3VjaG9uZ19ydWxlc1xuICAgICAgICAgICAgbGV0IHBvcyA9IGV2ZW50Lm5vZGUuY29udmVydFRvV29ybGRTcGFjZUFSKGNjLnYyKDAsIDApKVxuICAgICAgICAgICAgcmVxdWlyZShcInRpcHNfY29udHJvbGxlclwiKS5nZXRJbnN0YW5jZSgpLnNob3dDb21tb25UaXBzKGNvbmZpZy5kZXNjLHBvcylcbiAgICAgICAgfSx0aGlzKVxuICAgICAgICB0aGlzLnJvbGVfdm8gPSBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldFJvbGVWbygpXG4gICAgICAgIGlmICh0aGlzLnJvbGVfYXNzZXRzX2V2ZW50ID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMucm9sZV9hc3NldHNfZXZlbnQgPSB0aGlzLnJvbGVfdm8uYmluZChFdmVudElkLlVQREFURV9ST0xFX0FUVFJJQlVURSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09IFwidmlwX2V4cFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YSgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBcbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwgyzkuZ/lsLHmmK/kuIDkuKrnqpfkvZPnmoTmraPlvI/lhaXlj6Ms5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb3BlblJvb3RXbmQ6ZnVuY3Rpb24oaW5kZXgpe1xuICAgICAgICBpbmRleCA9IGluZGV4IHx8IDE7XG4gICAgICAgIHRoaXMudGFiX3ZpZXdbaW5kZXgtMV0uZ2V0Q29tcG9uZW50KGNjLlRvZ2dsZSkuY2hlY2soKVxuICAgICAgICBpZihpbmRleCA9PSAxKXtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlVGFiVmlldyhpbmRleC0xKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3RybC5zZW5kZXIyMTAwMCgpO1xuICAgIH0sXG4gICAgY2hhbmdlVGFiVmlldyhpbmRleCl7XG4gICAgICAgIGxldCB0ZW1wID0gdGhpcy5jdXJfbm9kZVxuICAgICAgICBpZih0ZW1wKXtcbiAgICAgICAgICAgIHRlbXAuZ2V0Q2hpbGRCeU5hbWUoXCJMYWJlbFwiKS5jb2xvciA9IHRoaXMubm90U2VsZWN0IFxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8dGhpcy50YWJfdmlldy5sZW5ndGg7KytpKXtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYl92aWV3W2ldLmdldENoaWxkQnlOYW1lKFwiTGFiZWxcIikuY29sb3IgPSB0aGlzLm5vdFNlbGVjdCBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cl9ub2RlID0gdGhpcy50YWJfdmlld1tpbmRleF1cbiAgICAgICAgdGhpcy5jdXJfbm9kZS5nZXRDaGlsZEJ5TmFtZShcIkxhYmVsXCIpLmNvbG9yID0gdGhpcy5zZWxlY3RcbiAgICAgICAgbGV0IGZpcnN0X2RhdGEgPSB0aGlzLm1vZGVsLmdldEZpcnN0UmVjaGFyZ2VEYXRhKGluZGV4KzEpXG4gICAgICAgIHRoaXMuZmlsbEl0ZW1MaXN0KGZpcnN0X2RhdGEpXG4gICAgICAgIGlmKHRoaXMudXBkYXRhX2NoYXJnZV9kYXRhKXtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YSh0aGlzLnVwZGF0YV9jaGFyZ2VfZGF0YSlcbiAgICAgICAgfVxuICAgIH0sXG4gICAgdXBkYXRlRGF0YSgpe1xuICAgICAgICB2YXIgc3RhdHVzX2xpc3QgPSBbWzEsMiwzXSxbNCw1LDZdXTtcbiAgICAgICAgdmFyIGNoYXJnZV9saXN0ID0gW107XG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuY3VyX25vZGUuaW5kZXhcbiAgICAgICAgZm9yKGxldCBpPTA7aTxzdGF0dXNfbGlzdFtpbmRleF0ubGVuZ3RoOysraSl7XG4gICAgICAgICAgICBsZXQgc3RhdHVzID0gdGhpcy5tb2RlbC5nZXRGaXJzdEJ0blN0YXR1cyhzdGF0dXNfbGlzdFtpbmRleF1baV0pO1xuICAgICAgICAgICAgY2hhcmdlX2xpc3RbaV0gPSBzdGF0dXM7XG4gICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtwYXJzZUludChpKSsxXS5maW5pc2hfaWNvbi5hY3RpdmUgPSBzdGF0dXM9PTI7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdpZnRfaW5kZXggPSAwIC8v6aKG5Y+W55qE5L2N572uXG4gICAgICAgIHZhciB0b3RsZSA9IDA7XG4gICAgICAgIHRoaXMuZ2V0X2dpZnRfaWQgPSAxMDtcbiAgICAgICAgZm9yKHZhciBpPTA7aTxjaGFyZ2VfbGlzdC5sZW5ndGg7KytpKXtcbiAgICAgICAgICAgIHRvdGxlID0gdG90bGUgKyBjaGFyZ2VfbGlzdFtpXTtcbiAgICAgICAgICAgIGlmKGNoYXJnZV9saXN0W2ldID09IDEpe1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0X2dpZnRfaWQgPSAxO1xuXHRcdFx0ICAgIHRoaXMuZ2lmdF9pbmRleCA9IGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idG5fcmVjaGFyZ2UuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGxldCByb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKVxuICAgICAgICBpZihyb2xlX3ZvLnZpcF9leHAqMC4xIDwgNil7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gdGhpcy5yZWNoYXJnZV9saXN0KXtcbiAgICAgICAgICAgICAgICBsZXQgY29uZmlnID0gQ29uZmlnLmNoYXJnZV9kYXRhLmRhdGFfcXVhZHJ1cGxlX3JlYmF0ZVtpXVxuICAgICAgICAgICAgICAgIGxldCBvYmogPSB0aGlzLnJlY2hhcmdlX2xpc3RbaV1cbiAgICAgICAgICAgICAgICBvYmoubm9kZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG9iai5ybWJOdW0uc3RyaW5nID0gVXRpbHMuVEkxOE4oY29uZmlnLnZhbCArIFwi5YWDXCIpIFxuICAgICAgICAgICAgICAgIG9iai5nb2xkTnVtLnN0cmluZyA9IGNvbmZpZy5nb2xkXG4gICAgICAgICAgICAgICAgaWYoY29uZmlnLnN0YXIgPT0gMSl7XG4gICAgICAgICAgICAgICAgICAgIG9iai5yZWZlcnJhbC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcIm5ld2ZpcnN0Y2hhcmdlXCIsXCJuZXdmaXJzdGNoYXJnZV9idG5fdG9wXCIpLGZ1bmN0aW9uKHJlcyl7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmouYmcuc3ByaXRlRnJhbWUgPSByZXNcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICBvYmoucmVmZXJyYWwuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRVSUljb25QYXRoKFwibmV3Zmlyc3RjaGFyZ2VcIixcIm5ld2ZpcnN0Y2hhcmdlX2J0bl9ib3R0b21cIiksZnVuY3Rpb24ocmVzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai5iZy5zcHJpdGVGcmFtZSA9IHJlc1xuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMudGV4dF9ydC5zdHJpbmcgPSBVdGlscy5USTE4TihcIjxjb2xvcj0jNjQzMjIzPue0r+WFhTEwMOWFg+WPr+mihuWPluabtOWkmuixquekvO+8gTwvY29sb3I+XCIpXG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gdGhpcy5yZWNoYXJnZV9saXN0KXtcbiAgICAgICAgICAgICAgICBsZXQgb2JqID0gdGhpcy5yZWNoYXJnZV9saXN0W2ldXG4gICAgICAgICAgICAgICAgb2JqLm5vZGUuYWN0aXZlID0gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYnRuX3JlY2hhcmdlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICBpZih0b3RsZSA9PSAwKXtcbiAgICAgICAgICAgICAgICB0aGlzLmdldF9naWZ0X2lkID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmJ0bl9sYWJlbC5zdHJpbmcgPSBVdGlscy5USTE4TihcIuWJjeW+gOWFheWAvFwiKTtcbiAgICAgICAgICAgIH1lbHNlIGlmKHRvdGxlID09IDEgfHwgdG90bGUgPT0gMyB8fCB0b3RsZSA9PSA1KXtcbiAgICAgICAgICAgICAgICB0aGlzLmJ0bl9sYWJlbC5zdHJpbmcgPSBVdGlscy5USTE4TihcIumihuWPluWlluWKsVwiKTtcbiAgICAgICAgICAgIH1lbHNlIGlmKHRvdGxlID09IDIgfHwgdG90bGUgPT0gNCl7XG4gICAgICAgICAgICAgICAgdGhpcy5idG5fbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmmI7ml6Xlho3mnaVcIik7XG4gICAgICAgICAgICB9ZWxzZSBpZih0b3RsZSA9PSA2KXtcbiAgICAgICAgICAgICAgICB0aGlzLmJ0bl9sYWJlbC5zdHJpbmcgPSBVdGlscy5USTE4TihcIumihuWPluWujOavlVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgc2V0UmVkUG9pbnRUYWIoKXtcbiAgICAgICAgdmFyIHN0YXR1c18xID0gZmFsc2U7XG4gICAgICAgIGZvcih2YXIgaSA9IDE7aTw9MztpKyspe1xuICAgICAgICAgICAgdmFyIGdldF9kYXRhID0gdGhpcy5tb2RlbC5nZXRGaXJzdEJ0blN0YXR1cyhpKTtcbiAgICAgICAgICAgIGlmKGdldF9kYXRhKXtcbiAgICAgICAgICAgICAgICBpZihnZXRfZGF0YSA9PSAxKXtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzXzEgPSB0cnVlO1xuXHRcdFx0XHQgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFV0aWxzLmFkZFJlZFBvaW50VG9Ob2RlQnlTdGF0dXModGhpcy50YWJfdmlld1swXSxzdGF0dXNfMSlcbiAgICAgICAgdmFyIHN0YXR1c18yID0gZmFsc2U7XG4gICAgICAgIGZvcih2YXIgaSA9IDQ7aTw9NjtpKyspe1xuICAgICAgICAgICAgdmFyIGdldF9kYXRhID0gdGhpcy5tb2RlbC5nZXRGaXJzdEJ0blN0YXR1cyhpKTtcbiAgICAgICAgICAgIGlmKGdldF9kYXRhKXtcbiAgICAgICAgICAgICAgICBpZihnZXRfZGF0YSA9PSAxKXtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzXzIgPSB0cnVlO1xuXHRcdFx0XHQgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFV0aWxzLmFkZFJlZFBvaW50VG9Ob2RlQnlTdGF0dXModGhpcy50YWJfdmlld1sxXSxzdGF0dXNfMilcbiAgICB9LFxuICAgIGZpbGxJdGVtTGlzdDpmdW5jdGlvbihsaXN0KXtcbiAgICAgICAgdmFyIHNjYWxlID0gMC43O1xuICAgICAgICB2YXIgc2l6ZSA9IDExOSAqIHNjYWxlO1xuICAgICAgICB2YXIgY3JlYXRlX2luZGV4ID0gMTtcbiAgICAgICAgZm9yKGxldCBpPTA7aTxsaXN0Lmxlbmd0aDtpKyspe1xuICAgICAgICAgICAgdmFyIG9iamVjdCA9IHRoaXMuaXRlbV9saXN0W2krMV07XG4gICAgICAgICAgICB2YXIgbnVtID0gbGlzdFtpXS5pdGVtX2xpc3QubGVuZ3RoO1xuICAgICAgICAgICAgb2JqZWN0LnNjcm9sbC5zZXRDb250ZW50U2l6ZShjYy5zaXplKHNpemUqbnVtICsgKGxpc3QubGVuZ3RoIC0gMSkqMTAsIG9iamVjdC5zY3JvbGwuZ2V0Q29udGVudFNpemUoKS5oZWlnaHQpKTtcbiAgICAgICAgICAgIGZvcihsZXQgaz0wO2s8bnVtO2srKyl7XG4gICAgICAgICAgICAgICAgdmFyIF94ID0gc2l6ZSAqIChrKzEpIC0gc2l6ZSAqIDAuNSArKGsgKiAxMCk7XG4gICAgICAgICAgICAgICAgdmFyIF95ID0gc2l6ZSAqIDAuNTtcbiAgICAgICAgICAgICAgICBpZighdGhpcy5pdGVtX3Jld2FyZF9saXN0W2krMV1ba10pe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1fcmV3YXJkX2xpc3RbaSsxXVtrXSA9IEl0ZW1zUG9vbC5nZXRJbnN0YW5jZSgpLmdldEl0ZW0oXCJiYWNrcGFja19pdGVtXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1fcmV3YXJkX2xpc3RbaSsxXVtrXS5zZXRQYXJlbnQob2JqZWN0LnNjcm9sbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9yZXdhcmRfbGlzdFtpKzFdW2tdLnNldEV4dGVuZERhdGEoe3NjYWxlOiBzY2FsZSxpc19zaG93X3RpcHM6dHJ1ZX0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1fcmV3YXJkX2xpc3RbaSsxXVtrXS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGxpc3RbaV0uZWZmZWN0X2xpc3Qpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNwaW5lID0gbmV3IGNjLk5vZGUoKS5hZGRDb21wb25lbnQoc3AuU2tlbGV0b24pXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2Nyb2xsLmFkZENoaWxkKHNwaW5lLm5vZGUsNitjcmVhdGVfaW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVmZmVjdF9saXN0W2NyZWF0ZV9pbmRleC0xXSA9IHNwaW5lXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGluZS5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYodGhpcy5pdGVtX3Jld2FyZF9saXN0W2krMV1ba10pe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1fcmV3YXJkX2xpc3RbaSsxXVtrXS5zZXRQb3NpdGlvbihfeCwgX3kpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9yZXdhcmRfbGlzdFtpKzFdW2tdLnNldERhdGEoe2JpZDpsaXN0W2ldLml0ZW1fbGlzdFtrXVswXSxudW06bGlzdFtpXS5pdGVtX2xpc3Rba11bMV19KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVmZmVjdF9saXN0W2NyZWF0ZV9pbmRleC0xXS5ub2RlLmFjdGl2ZSA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RfbGlzdFtjcmVhdGVfaW5kZXgtMV0ubm9kZS5zZXRQb3NpdGlvbihfeCwgX3kpXG4gICAgICAgICAgICAgICAgICAgIGlmKGxpc3RbaV0uZWZmZWN0X2xpc3Qpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVmZmVjdF9hY3Rpb24gPSBcImFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2NhbGUxID0gMS4wXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihsaXN0W2ldLmVmZmVjdF9saXN0WzBdW2tdID09IDI2Myl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0X2FjdGlvbiA9IFwiYWN0aW9uMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUxID0gMS4xXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVmZmVjdF9saXN0W2NyZWF0ZV9pbmRleC0xXS5ub2RlLnNjYWxlID0gc2NhbGUgKiBzY2FsZTFcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IGNyZWF0ZV9pbmRleC0xXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0U3BpbmVQYXRoKFBhdGhUb29sLmdldEVmZmVjdFJlcyhsaXN0W2ldLmVmZmVjdF9saXN0WzBdW2tdKSksZnVuY3Rpb24ocmVzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVmZmVjdF9saXN0W2luZGV4XS5za2VsZXRvbkRhdGEgPSByZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lZmZlY3RfbGlzdFtpbmRleF0uc2V0QW5pbWF0aW9uKDAsIGVmZmVjdF9hY3Rpb24sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY3JlYXRlX2luZGV4ID0gY3JlYXRlX2luZGV4ICsgMVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICAvLyDlhbPpl63nqpfkvZPlm57osIMs6ZyA6KaB5Zyo6L+Z6YeM6LCD55So6K+l56qX5L2T5omA5bGeY29udHJvbGxlcueahGNsb3Nl5pa55rOV5rKh55So5LqO572u56m66K+l56qX5L2T5a6e5L6L5a+56LGhXG4gICAgY2xvc2VDYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICBpZih0aGlzLml0ZW1fcmV3YXJkX2xpc3Qpe1xuICAgICAgICAgICAgZm9yKHZhciBpPSAxO2k8PTM7aSsrKXtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGogaW4gdGhpcy5pdGVtX3Jld2FyZF9saXN0W2ldKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtX3Jld2FyZF9saXN0W2ldW2pdLmRlbGV0ZU1lKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9yZXdhcmRfbGlzdFtpXVtqXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9yZXdhcmRfbGlzdFtpXSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLml0ZW1fcmV3YXJkX2xpc3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJvbGVfdm8gIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucm9sZV9hc3NldHNfZXZlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm9sZV92by51bmJpbmQodGhpcy5yb2xlX2Fzc2V0c19ldmVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlX2Fzc2V0c19ldmVudCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5lZmZlY3RfbGlzdCl7XG4gICAgICAgICAgICBmb3IobGV0IGk9MDtpPHRoaXMuZWZmZWN0X2xpc3QubGVuZ3RoOysraSl7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5lZmZlY3RfbGlzdFtpXSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWZmZWN0X2xpc3RbaV0uZGVzdHJveSgpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWZmZWN0X2xpc3RbaV0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZWZmZWN0X2xpc3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciBHdWlkZUV2ZW50ID0gcmVxdWlyZShcImd1aWRlX2V2ZW50XCIpO1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKEd1aWRlRXZlbnQuQ2xvc2VUYXNrRWZmZWN0KVxuICAgICAgICB0aGlzLmN0cmwub3Blbk5ld0ZpcnN0Q2hhcmdlVmlldyhmYWxzZSk7XG4gICAgfSxcbn0pIl19