|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/redbag/view/redbag_send_panel.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, '9c0d5vfkGBJN7b1Ocs11bzH', 'redbag_send_panel');
|
// Scripts/mod/redbag/view/redbag_send_panel.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: @syg.com(必填, 创建模块的人员)
|
// @description:
|
// 抢红包
|
// <br/>Create: new Date().toISOString()
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var RedbagController = require("redbag_controller");
|
|
var RedbagEvent = require("redbag_event");
|
|
var RedBagItem = require("redbag_item");
|
|
var RedBagListPanel = require("redbag_list_panel");
|
|
var BackpackController = require("backpack_controller");
|
|
var BackPackConst = require("backpack_const");
|
|
var RedBagGetPanel = cc.Class({
|
"extends": BasePanel,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("redbag", "redbag_send");
|
this.ctrl = RedbagController.getInstance();
|
this.size = cc.v2(644, 740);
|
this.is_can_save = false;
|
this.item_list = {};
|
this.need_list = {};
|
this.default_msg = Utils.TI18N("身为土豪,有钱任性");
|
this.is_send_proto = false;
|
this.use_assert = 0; //使用道具还是资产法红包
|
|
this.msg_list = {};
|
this.extend_id = arguments[0] || this.ctrl.getModel().getHaveItemID() || 1;
|
this.select_msg = null;
|
},
|
initPanel: function initPanel() {
|
// this.background = this.seekChild("background");
|
this.main_panel = this.seekChild("main_panel");
|
this.top_panel = this.seekChild(this.main_panel, "top_panel");
|
this.bottom_panel = this.seekChild(this.main_panel, "bottom_panel");
|
this.num_panel = this.seekChild(this.bottom_panel, "num_panel");
|
this.send_btn = this.seekChild(this.bottom_panel, "send_btn");
|
this.send_btn_red_point = this.seekChild(this.send_btn, "red_point");
|
this.send_btn_red_point.active = false;
|
this.btn_label = this.seekChild(this.send_btn, "label", cc.RichText);
|
this.send_tips_lb = this.seekChild("send_tips", cc.Label);
|
this.left_btn = this.seekChild(this.top_panel, "left_btn");
|
this.right_btn = this.seekChild(this.top_panel, "right_btn");
|
this.right_btn_red_point = this.seekChild(this.right_btn, "red_point");
|
this.right_btn_red_point.active = false;
|
this.left_btn_red_point = this.seekChild(this.left_btn, "red_point");
|
this.left_btn_red_point.active = false;
|
this.item_container = this.seekChild(this.bottom_panel, "item_container");
|
this.num_label = this.seekChild(this.bottom_panel, "num_label", cc.Label);
|
this.send_content = this.seekChild(this.bottom_panel, "send_content", cc.Label);
|
this.createDesc();
|
this.requireProto();
|
},
|
createDesc: function createDesc() {
|
this.send_notice = this.seekChild(this.top_panel, "send_notice", cc.RichText);
|
this.send_notice.string = cc.js.formatStr(Utils.TI18N("(今日还可发<color=#249003>%s</c>)"), 100); //红包金额
|
|
this.coin_label = this.seekChild(this.bottom_panel, "coin_label", cc.RichText);
|
this.coin_img = this.seekChild(this.bottom_panel, "coin_img", cc.Sprite);
|
this.updateBagList();
|
},
|
requireProto: function requireProto() {
|
this.ctrl.send13546();
|
},
|
registerEvent: function registerEvent() {
|
this.send_btn.on(cc.Node.EventType.TOUCH_END, function () {
|
if (this.red_send_info == null || this.select_vo == null) return;
|
|
if (this.cost_item_bid && this.cost_item_bid != 0) {
|
this.ctrl.sender13535(this.select_vo.id, 1);
|
} else {
|
var charge_config = gdata("charge_data", "data_charge_data", [this.select_vo.charge_id]);
|
|
if (charge_config) {
|
SDK.pay(charge_config.val, null, charge_config.id, charge_config.name, charge_config.name, null, null);
|
}
|
}
|
}.bind(this));
|
this.left_btn.on(cc.Node.EventType.TOUCH_END, function () {
|
if (this.list_view) {
|
this.list_view.runLeftPostion();
|
}
|
}.bind(this));
|
this.right_btn.on(cc.Node.EventType.TOUCH_END, function () {
|
if (this.list_view) {
|
this.list_view.runRightPostion();
|
}
|
}.bind(this));
|
this.addGlobalEvent(RedbagEvent.Update_Red_Bag_Event, function (data) {
|
this.updateRedInfo(data);
|
}.bind(this)); //道具数量更新
|
|
this.addGlobalEvent(EventId.ADD_GOODS, function (bag_code, data_list) {
|
this.updateItemNum(bag_code, data_list);
|
}.bind(this));
|
this.addGlobalEvent(EventId.DELETE_GOODS, function (bag_code, data_list) {
|
this.updateItemNum(bag_code, data_list);
|
}.bind(this));
|
this.addGlobalEvent(EventId.MODIFY_GOODS_NUM, function (bag_code, data_list) {
|
this.updateItemNum(bag_code, data_list);
|
}.bind(this));
|
},
|
openRootWnd: function openRootWnd() {},
|
updateBagList: function updateBagList() {
|
if (this.list_view == null) {
|
var list_size = cc.size(580, 370);
|
var setting = {
|
item_class: RedBagItem,
|
// 单元类
|
start_x: 0,
|
// 第一个单元的X起点
|
space_x: 0,
|
// x方向的间隔
|
start_y: 2,
|
// 第一个单元的Y起点
|
space_y: 0,
|
// y方向的间隔
|
item_width: 262,
|
// 单元的尺寸width
|
item_height: 327,
|
// 单元的尺寸height
|
row: 1,
|
// 行数,作用于水平滚动类型
|
col: 1 // 列数,作用于垂直滚动类型
|
|
};
|
this.list_view = new RedBagListPanel();
|
this.list_view.createScroll(this.top_panel, cc.v2(270, 20), ScrollViewDir.horizontal, ScrollViewStartPos.top, list_size, setting, cc.v2(0.5, 0.5));
|
}
|
|
var config = Config.guild_data.data_guild_red_bag;
|
var list = [];
|
var index = 0;
|
|
for (var i in config) {
|
var v = config[i];
|
list[index] = {
|
data: v,
|
open_type: 1
|
};
|
index = index + 1;
|
}
|
|
for (var i in list) {
|
var v = list[i];
|
v.sort_index = 1;
|
if (v.data.id == this.extend_id) v.sort_index = 0;
|
}
|
|
list.sort(Utils.tableLowerSorter(["sort_index", "id"]));
|
this.list_view.setData(list);
|
this.list_view.addEndCallBack(function () {
|
this.updateMessage();
|
}.bind(this));
|
this.list_view.setData(list);
|
},
|
updateMessage: function updateMessage() {
|
var item = this.list_view.getSelectItem();
|
var vo = null;
|
|
if (item) {
|
vo = item.getData();
|
}
|
|
if (item == null) return;
|
if (this.select_vo && this.select_vo == vo) return;
|
this.select_vo = vo;
|
if (!this.select_vo) return;
|
var data = this.select_vo; //红包金额
|
|
var coint = data.assets;
|
var item_id = gdata("item_data", "data_assets_label2id", [coint]);
|
var item_config = Utils.getItemConfig(item_id);
|
|
if (item_config) {
|
this.coin_label.string = String(data.val);
|
var res = PathTool.getItemRes(item_config.icon);
|
this.loadRes(res, function (res_object) {
|
this.coin_img.spriteFrame = res_object;
|
}.bind(this));
|
}
|
|
this.send_content.string = data.msg;
|
this.num_label.string = data.num;
|
this.fileRewardsItem(data.reward);
|
this.showRedSendNum();
|
},
|
fileRewardsItem: function fileRewardsItem(list) {
|
if (list == null || Utils.next(list) == null) return;
|
|
for (var k in this.item_list) {
|
var v = this.item_list[k];
|
v.setVisible(false);
|
}
|
|
var scale = 0.7;
|
var off = 10;
|
|
for (var i in list) {
|
var v = list[i];
|
|
if (this.item_list[i] == null) {
|
var item = ItemsPool.getInstance().getItem("backpack_item");
|
item.initConfig(false, scale, false, false);
|
item.show();
|
var x = 20 + (120 * scale + off) * (i - 1) + 120 * scale * 0.5 - 388 / 2 + 60 * scale;
|
item.setPosition(x, 50);
|
item.setParent(this.item_container);
|
this.item_list[i] = item;
|
}
|
|
var item = this.item_list[i];
|
item.setData({
|
bid: v[0],
|
num: v[1]
|
});
|
item.setVisible(true);
|
}
|
},
|
//设置红包可发次数
|
updateRedInfo: function updateRedInfo(data) {
|
this.red_send_info = data;
|
this.showRedSendNum();
|
},
|
updateItemNum: function updateItemNum(bag_code, data_list) {
|
if (this.cost_item_bid) {
|
if (bag_code != null && data_list != null) {
|
if (bag_code == BackPackConst.Bag_Code.BACKPACK) {
|
for (var i in data_list) {
|
var v = data_list[i];
|
|
if (v && v.base_id != null && this.cost_item_bid == v.base_id) {
|
this.showRedSendNum();
|
break;
|
}
|
}
|
}
|
}
|
}
|
},
|
showRedSendNum: function showRedSendNum() {
|
if (this.red_send_info == null || this.select_vo == null) return;
|
var red_config = Config.guild_data.data_guild_red_bag[this.select_vo.id];
|
if (!red_config) return;
|
this.cost_item_bid = 0; //可以消耗道具发红包的道具bid
|
|
this.send_tips_lb.node.active = false;
|
var send_num = 0;
|
|
for (var i in this.red_send_info) {
|
var v = this.red_send_info[i];
|
|
if (v.id == this.select_vo.id) {
|
send_num = v.num;
|
break;
|
}
|
}
|
|
send_num = this.select_vo.limit - send_num;
|
|
if (send_num < 0) {
|
send_num = 0;
|
}
|
|
this.send_notice.string = cc.js.formatStr(Utils.TI18N("(今日还可发<color=#249003>%s</c>)"), send_num);
|
|
if (send_num == 0) {
|
this.btn_label.string = Utils.TI18N("次数已达上限");
|
} else {
|
var charge_config = gdata("charge_data", "data_charge_data", [this.select_vo.charge_id]);
|
|
if (this.checkLossItemIsEnough(red_config.loss_item)) {
|
var bid = red_config.loss_item[0][0];
|
var num = red_config.loss_item[0][1];
|
var item_cfg = Utils.getItemConfig(bid);
|
|
if (item_cfg) {
|
this.cost_item_bid = bid;
|
var res = PathTool.getItemRes(item_cfg.icon);
|
this.btn_label.string = cc.js.formatStr(Utils.TI18N("<img src='%s'/><outline width=2 color=#6C2B00>%s 发红包</outline>"), item_cfg.icon, num);
|
this.loadRes(res, function (resObject) {
|
this.btn_label.addSpriteFrame(resObject);
|
}.bind(this));
|
this.send_tips_lb.string = cc.js.formatStr(Utils.TI18N("当前拥有红包令,消耗%s个可发放1次该红包"), num);
|
this.send_tips_lb.node.active = true;
|
}
|
} else if (charge_config) this.btn_label.string = cc.js.formatStr(Utils.TI18N("<outline width=2 color=#6C2B00>%s元 发红包</outline>"), charge_config.val);
|
}
|
|
if (this.cur_send_num != send_num) {
|
this.cur_send_num = send_num;
|
|
if (send_num == 0) {
|
Utils.setGreyButton(this.send_btn, true); // this.btn_label
|
} else {
|
Utils.setGreyButton(this.send_btn, false); // enableOutline
|
}
|
}
|
},
|
//判断道具数量是否足够发红包
|
checkLossItemIsEnough: function checkLossItemIsEnough(loss_item) {
|
var is_enough = false;
|
|
if (loss_item && loss_item[0] != null) {
|
var bid = loss_item[0][0];
|
var need_num = loss_item[0][1];
|
var have_num = BackpackController.getInstance().getModel().getItemNumByBid(bid);
|
|
if (have_num >= need_num) {
|
is_enough = true;
|
}
|
}
|
|
return is_enough;
|
},
|
setVisibleStatus: function setVisibleStatus(bool) {
|
this.setVisible(bool);
|
},
|
onShow: function onShow() {},
|
setData: function setData(data) {},
|
onDelete: function onDelete() {
|
if (this.list_view) {
|
this.list_view.deleteMe();
|
this.list_view = null;
|
}
|
|
if (this.item_list) {
|
for (var k in this.item_list) {
|
var v = this.item_list[k];
|
v.deleteMe();
|
}
|
|
this.item_list = null;
|
}
|
}
|
});
|
module.exports = RedBagGetPanel;
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxyZWRiYWdcXHZpZXdcXHJlZGJhZ19zZW5kX3BhbmVsLmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIlJlZGJhZ0NvbnRyb2xsZXIiLCJSZWRiYWdFdmVudCIsIlJlZEJhZ0l0ZW0iLCJSZWRCYWdMaXN0UGFuZWwiLCJCYWNrcGFja0NvbnRyb2xsZXIiLCJCYWNrUGFja0NvbnN0IiwiUmVkQmFnR2V0UGFuZWwiLCJjYyIsIkNsYXNzIiwiQmFzZVBhbmVsIiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwiY3RybCIsImdldEluc3RhbmNlIiwic2l6ZSIsInYyIiwiaXNfY2FuX3NhdmUiLCJpdGVtX2xpc3QiLCJuZWVkX2xpc3QiLCJkZWZhdWx0X21zZyIsIlV0aWxzIiwiVEkxOE4iLCJpc19zZW5kX3Byb3RvIiwidXNlX2Fzc2VydCIsIm1zZ19saXN0IiwiZXh0ZW5kX2lkIiwiYXJndW1lbnRzIiwiZ2V0TW9kZWwiLCJnZXRIYXZlSXRlbUlEIiwic2VsZWN0X21zZyIsImluaXRQYW5lbCIsIm1haW5fcGFuZWwiLCJzZWVrQ2hpbGQiLCJ0b3BfcGFuZWwiLCJib3R0b21fcGFuZWwiLCJudW1fcGFuZWwiLCJzZW5kX2J0biIsInNlbmRfYnRuX3JlZF9wb2ludCIsImFjdGl2ZSIsImJ0bl9sYWJlbCIsIlJpY2hUZXh0Iiwic2VuZF90aXBzX2xiIiwiTGFiZWwiLCJsZWZ0X2J0biIsInJpZ2h0X2J0biIsInJpZ2h0X2J0bl9yZWRfcG9pbnQiLCJsZWZ0X2J0bl9yZWRfcG9pbnQiLCJpdGVtX2NvbnRhaW5lciIsIm51bV9sYWJlbCIsInNlbmRfY29udGVudCIsImNyZWF0ZURlc2MiLCJyZXF1aXJlUHJvdG8iLCJzZW5kX25vdGljZSIsInN0cmluZyIsImpzIiwiZm9ybWF0U3RyIiwiY29pbl9sYWJlbCIsImNvaW5faW1nIiwiU3ByaXRlIiwidXBkYXRlQmFnTGlzdCIsInNlbmQxMzU0NiIsInJlZ2lzdGVyRXZlbnQiLCJvbiIsIk5vZGUiLCJFdmVudFR5cGUiLCJUT1VDSF9FTkQiLCJyZWRfc2VuZF9pbmZvIiwic2VsZWN0X3ZvIiwiY29zdF9pdGVtX2JpZCIsInNlbmRlcjEzNTM1IiwiaWQiLCJjaGFyZ2VfY29uZmlnIiwiZ2RhdGEiLCJjaGFyZ2VfaWQiLCJTREsiLCJwYXkiLCJ2YWwiLCJuYW1lIiwiYmluZCIsImxpc3RfdmlldyIsInJ1bkxlZnRQb3N0aW9uIiwicnVuUmlnaHRQb3N0aW9uIiwiYWRkR2xvYmFsRXZlbnQiLCJVcGRhdGVfUmVkX0JhZ19FdmVudCIsImRhdGEiLCJ1cGRhdGVSZWRJbmZvIiwiRXZlbnRJZCIsIkFERF9HT09EUyIsImJhZ19jb2RlIiwiZGF0YV9saXN0IiwidXBkYXRlSXRlbU51bSIsIkRFTEVURV9HT09EUyIsIk1PRElGWV9HT09EU19OVU0iLCJvcGVuUm9vdFduZCIsImxpc3Rfc2l6ZSIsInNldHRpbmciLCJpdGVtX2NsYXNzIiwic3RhcnRfeCIsInNwYWNlX3giLCJzdGFydF95Iiwic3BhY2VfeSIsIml0ZW1fd2lkdGgiLCJpdGVtX2hlaWdodCIsInJvdyIsImNvbCIsImNyZWF0ZVNjcm9sbCIsIlNjcm9sbFZpZXdEaXIiLCJob3Jpem9udGFsIiwiU2Nyb2xsVmlld1N0YXJ0UG9zIiwidG9wIiwiY29uZmlnIiwiQ29uZmlnIiwiZ3VpbGRfZGF0YSIsImRhdGFfZ3VpbGRfcmVkX2JhZyIsImxpc3QiLCJpbmRleCIsImkiLCJ2Iiwib3Blbl90eXBlIiwic29ydF9pbmRleCIsInNvcnQiLCJ0YWJsZUxvd2VyU29ydGVyIiwic2V0RGF0YSIsImFkZEVuZENhbGxCYWNrIiwidXBkYXRlTWVzc2FnZSIsIml0ZW0iLCJnZXRTZWxlY3RJdGVtIiwidm8iLCJnZXREYXRhIiwiY29pbnQiLCJhc3NldHMiLCJpdGVtX2lkIiwiaXRlbV9jb25maWciLCJnZXRJdGVtQ29uZmlnIiwiU3RyaW5nIiwicmVzIiwiZ2V0SXRlbVJlcyIsImljb24iLCJsb2FkUmVzIiwicmVzX29iamVjdCIsInNwcml0ZUZyYW1lIiwibXNnIiwibnVtIiwiZmlsZVJld2FyZHNJdGVtIiwicmV3YXJkIiwic2hvd1JlZFNlbmROdW0iLCJuZXh0IiwiayIsInNldFZpc2libGUiLCJzY2FsZSIsIm9mZiIsIkl0ZW1zUG9vbCIsImdldEl0ZW0iLCJpbml0Q29uZmlnIiwic2hvdyIsIngiLCJzZXRQb3NpdGlvbiIsInNldFBhcmVudCIsImJpZCIsIkJhZ19Db2RlIiwiQkFDS1BBQ0siLCJiYXNlX2lkIiwicmVkX2NvbmZpZyIsIm5vZGUiLCJzZW5kX251bSIsImxpbWl0IiwiY2hlY2tMb3NzSXRlbUlzRW5vdWdoIiwibG9zc19pdGVtIiwiaXRlbV9jZmciLCJyZXNPYmplY3QiLCJhZGRTcHJpdGVGcmFtZSIsImN1cl9zZW5kX251bSIsInNldEdyZXlCdXR0b24iLCJpc19lbm91Z2giLCJuZWVkX251bSIsImhhdmVfbnVtIiwiZ2V0SXRlbU51bUJ5QmlkIiwic2V0VmlzaWJsZVN0YXR1cyIsImJvb2wiLCJvblNob3ciLCJvbkRlbGV0ZSIsImRlbGV0ZU1lIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGdCQUFnQixHQUFHRCxPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUUsV0FBVyxHQUFHRixPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFDQSxJQUFJRyxVQUFVLEdBQUdILE9BQU8sQ0FBQyxhQUFELENBQXhCOztBQUNBLElBQUlJLGVBQWUsR0FBR0osT0FBTyxDQUFDLG1CQUFELENBQTdCOztBQUNBLElBQUlLLGtCQUFrQixHQUFHTCxPQUFPLENBQUMscUJBQUQsQ0FBaEM7O0FBQ0EsSUFBSU0sYUFBYSxHQUFHTixPQUFPLENBQUMsZ0JBQUQsQ0FBM0I7O0FBRUEsSUFBSU8sY0FBYyxHQUFHQyxF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QUFLOUQsU0FBVCxFQUFvQjtBQUNoQixXQUFLLElBQUlrSSxDQUFULElBQWMsS0FBS2xJLFNBQW5CLEVBQThCO0FBQzFCLFlBQUlvRyxDQUFDLEdBQUcsS0FBS3BHLFNBQUwsQ0FBZWtJLENBQWYsQ0FBUjtBQUNBOUIsUUFBQUEsQ0FBQyxDQUFDZ0UsUUFBRjtBQUNIOztBQUNELFdBQUtwSyxTQUFMLEdBQWlCLElBQWpCO0FBQ0g7QUFDSjtBQTlUeUIsQ0FBVCxDQUFyQjtBQWlVQXFLLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQmxMLGNBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyBAYXV0aG9yOiBAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcclxuLy8gQGRlc2NyaXB0aW9uOlxyXG4vLyAgICAgIOaKoue6ouWMhVxyXG4vLyA8YnIvPkNyZWF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XHJcbnZhciBSZWRiYWdDb250cm9sbGVyID0gcmVxdWlyZShcInJlZGJhZ19jb250cm9sbGVyXCIpO1xyXG52YXIgUmVkYmFnRXZlbnQgPSByZXF1aXJlKFwicmVkYmFnX2V2ZW50XCIpO1xyXG52YXIgUmVkQmFnSXRlbSA9IHJlcXVpcmUoXCJyZWRiYWdfaXRlbVwiKTtcclxudmFyIFJlZEJhZ0xpc3RQYW5lbCA9IHJlcXVpcmUoXCJyZWRiYWdfbGlzdF9wYW5lbFwiKTtcclxudmFyIEJhY2twYWNrQ29udHJvbGxlciA9IHJlcXVpcmUoXCJiYWNrcGFja19jb250cm9sbGVyXCIpO1xyXG52YXIgQmFja1BhY2tDb25zdCA9IHJlcXVpcmUoXCJiYWNrcGFja19jb25zdFwiKTtcclxuXHJcbnZhciBSZWRCYWdHZXRQYW5lbCA9IGNjLkNsYXNzKHtcclxuICAgIGV4dGVuZHM6IEJhc2VQYW5lbCxcclxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwicmVkYmFnXCIsIFwicmVkYmFnX3NlbmRcIik7XHJcbiAgICAgICAgdGhpcy5jdHJsID0gUmVkYmFnQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpO1xyXG4gICAgICAgIHRoaXMuc2l6ZSA9IGNjLnYyKDY0NCwgNzQwKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc19jYW5fc2F2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXRlbV9saXN0ID0ge307XHJcbiAgICAgICAgdGhpcy5uZWVkX2xpc3QgPSB7fTtcclxuICAgICAgICB0aGlzLmRlZmF1bHRfbXNnID0gVXRpbHMuVEkxOE4oXCLouqvkuLrlnJ/osarvvIzmnInpkrHku7vmgKdcIik7XHJcbiAgICAgICAgdGhpcy5pc19zZW5kX3Byb3RvID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy51c2VfYXNzZXJ0ID0gMDsgLy/kvb/nlKjpgZPlhbfov5jmmK/otYTkuqfms5XnuqLljIVcclxuICAgICAgICB0aGlzLm1zZ19saXN0ID0ge307XHJcbiAgICAgICAgdGhpcy5leHRlbmRfaWQgPSBhcmd1bWVudHNbMF0gfHwgdGhpcy5jdHJsLmdldE1vZGVsKCkuZ2V0SGF2ZUl0ZW1JRCgpIHx8IDE7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RfbXNnID0gbnVsbDtcclxuICAgIH0sXHJcblxyXG4gICAgaW5pdFBhbmVsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy8gdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5zZWVrQ2hpbGQoXCJiYWNrZ3JvdW5kXCIpO1xyXG4gICAgICAgIHRoaXMubWFpbl9wYW5lbCA9IHRoaXMuc2Vla0NoaWxkKFwibWFpbl9wYW5lbFwiKTtcclxuICAgICAgICB0aGlzLnRvcF9wYW5lbCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl9wYW5lbCwgXCJ0b3BfcGFuZWxcIik7XHJcbiAgICAgICAgdGhpcy5ib3R0b21fcGFuZWwgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm1haW5fcGFuZWwsIFwiYm90dG9tX3BhbmVsXCIpO1xyXG4gICAgICAgIHRoaXMubnVtX3BhbmVsID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5ib3R0b21fcGFuZWwsIFwibnVtX3BhbmVsXCIpO1xyXG4gICAgICAgIHRoaXMuc2VuZF9idG4gPSB0aGlzLnNlZWtDaGlsZCh0aGlzLmJvdHRvbV9wYW5lbCwgXCJzZW5kX2J0blwiKTtcclxuICAgICAgICB0aGlzLnNlbmRfYnRuX3JlZF9wb2ludCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuc2VuZF9idG4sIFwicmVkX3BvaW50XCIpO1xyXG4gICAgICAgIHRoaXMuc2VuZF9idG5fcmVkX3BvaW50LmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYnRuX2xhYmVsID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5zZW5kX2J0biwgXCJsYWJlbFwiLCBjYy5SaWNoVGV4dCk7XHJcbiAgICAgICAgdGhpcy5zZW5kX3RpcHNfbGIgPSB0aGlzLnNlZWtDaGlsZChcInNlbmRfdGlwc1wiLCBjYy5MYWJlbCk7XHJcblxyXG4gICAgICAgIHRoaXMubGVmdF9idG4gPSB0aGlzLnNlZWtDaGlsZCh0aGlzLnRvcF9wYW5lbCwgXCJsZWZ0X2J0blwiKTtcclxuICAgICAgICB0aGlzLnJpZ2h0X2J0biA9IHRoaXMuc2Vla0NoaWxkKHRoaXMudG9wX3BhbmVsLCBcInJpZ2h0X2J0blwiKTtcclxuICAgICAgICB0aGlzLnJpZ2h0X2J0bl9yZWRfcG9pbnQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLnJpZ2h0X2J0biwgXCJyZWRfcG9pbnRcIik7XHJcbiAgICAgICAgdGhpcy5yaWdodF9idG5fcmVkX3BvaW50LmFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmxlZnRfYnRuX3JlZF9wb2ludCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubGVmdF9idG4sIFwicmVkX3BvaW50XCIpO1xyXG4gICAgICAgIHRoaXMubGVmdF9idG5fcmVkX3BvaW50LmFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLml0ZW1fY29udGFpbmVyID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5ib3R0b21fcGFuZWwsIFwiaXRlbV9jb250YWluZXJcIik7XHJcbiAgICAgICAgdGhpcy5udW1fbGFiZWwgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLmJvdHRvbV9wYW5lbCwgXCJudW1fbGFiZWxcIiwgY2MuTGFiZWwpO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmRfY29udGVudCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuYm90dG9tX3BhbmVsLCBcInNlbmRfY29udGVudFwiLCBjYy5MYWJlbCk7XHJcblxyXG4gICAgICAgIHRoaXMuY3JlYXRlRGVzYygpO1xyXG4gICAgICAgIHRoaXMucmVxdWlyZVByb3RvKCk7XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICBjcmVhdGVEZXNjOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5zZW5kX25vdGljZSA9IHRoaXMuc2Vla0NoaWxkKHRoaXMudG9wX3BhbmVsLCBcInNlbmRfbm90aWNlXCIsIGNjLlJpY2hUZXh0KTtcclxuICAgICAgICB0aGlzLnNlbmRfbm90aWNlLnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIijku4rml6Xov5jlj6/lj5E8Y29sb3I9IzI0OTAwMz4lczwvYz4pXCIpLCAxMDApXHJcblxyXG4gICAgICAgIC8v57qi5YyF6YeR6aKdXHJcbiAgICAgICAgdGhpcy5jb2luX2xhYmVsID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5ib3R0b21fcGFuZWwsIFwiY29pbl9sYWJlbFwiLCBjYy5SaWNoVGV4dCk7XHJcbiAgICAgICAgdGhpcy5jb2luX2ltZyA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuYm90dG9tX3BhbmVsLCBcImNvaW5faW1nXCIsIGNjLlNwcml0ZSk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlQmFnTGlzdCgpO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXF1aXJlUHJvdG86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmN0cmwuc2VuZDEzNTQ2KCk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlZ2lzdGVyRXZlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnNlbmRfYnRuLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZWRfc2VuZF9pbmZvID09IG51bGwgfHwgdGhpcy5zZWxlY3Rfdm8gPT0gbnVsbCkgcmV0dXJuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvc3RfaXRlbV9iaWQgJiYgdGhpcy5jb3N0X2l0ZW1fYmlkICE9IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kZXIxMzUzNSh0aGlzLnNlbGVjdF92by5pZCwgMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2hhcmdlX2NvbmZpZyA9IGdkYXRhKFwiY2hhcmdlX2RhdGFcIiwgXCJkYXRhX2NoYXJnZV9kYXRhXCIsIFt0aGlzLnNlbGVjdF92by5jaGFyZ2VfaWRdKTtcclxuICAgICAgICAgICAgICAgIGlmIChjaGFyZ2VfY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgU0RLLnBheShjaGFyZ2VfY29uZmlnLnZhbCwgbnVsbCwgY2hhcmdlX2NvbmZpZy5pZCwgY2hhcmdlX2NvbmZpZy5uYW1lLCBjaGFyZ2VfY29uZmlnLm5hbWUsIG51bGwsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG5cclxuICAgICAgICB0aGlzLmxlZnRfYnRuLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5saXN0X3ZpZXcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdF92aWV3LnJ1bkxlZnRQb3N0aW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LmJpbmQodGhpcykpXHJcbiAgICAgICAgdGhpcy5yaWdodF9idG4ub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxpc3Rfdmlldykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0X3ZpZXcucnVuUmlnaHRQb3N0aW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LmJpbmQodGhpcykpXHJcblxyXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoUmVkYmFnRXZlbnQuVXBkYXRlX1JlZF9CYWdfRXZlbnQsIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUmVkSW5mbyhkYXRhKTtcclxuICAgICAgICB9LmJpbmQodGhpcykpXHJcblxyXG4gICAgICAgIC8v6YGT5YW35pWw6YeP5pu05pawXHJcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChFdmVudElkLkFERF9HT09EUywgZnVuY3Rpb24gKGJhZ19jb2RlLCBkYXRhX2xpc3QpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtTnVtKGJhZ19jb2RlLCBkYXRhX2xpc3QpO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKSlcclxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KEV2ZW50SWQuREVMRVRFX0dPT0RTLCBmdW5jdGlvbiAoYmFnX2NvZGUsIGRhdGFfbGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1OdW0oYmFnX2NvZGUsIGRhdGFfbGlzdCk7XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoRXZlbnRJZC5NT0RJRllfR09PRFNfTlVNLCBmdW5jdGlvbiAoYmFnX2NvZGUsIGRhdGFfbGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1OdW0oYmFnX2NvZGUsIGRhdGFfbGlzdCk7XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgfSxcclxuXHJcbiAgICBvcGVuUm9vdFduZDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgdXBkYXRlQmFnTGlzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxpc3RfdmlldyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZhciBsaXN0X3NpemUgPSBjYy5zaXplKDU4MCwgMzcwKTtcclxuICAgICAgICAgICAgdmFyIHNldHRpbmcgPSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtX2NsYXNzOiBSZWRCYWdJdGVtLCAgICAgIC8vIOWNleWFg+exu1xyXG4gICAgICAgICAgICAgICAgc3RhcnRfeDogMCwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFjotbfngrlcclxuICAgICAgICAgICAgICAgIHNwYWNlX3g6IDAsICAgICAgICAgICAgICAgICAgICAvLyB45pa55ZCR55qE6Ze06ZqUXHJcbiAgICAgICAgICAgICAgICBzdGFydF95OiAyLCAgICAgICAgICAgICAgICAgICAgLy8g56ys5LiA5Liq5Y2V5YWD55qEWei1t+eCuVxyXG4gICAgICAgICAgICAgICAgc3BhY2VfeTogMCwgICAgICAgICAgICAgICAgICAgLy8geeaWueWQkeeahOmXtOmalFxyXG4gICAgICAgICAgICAgICAgaXRlbV93aWR0aDogMjYyLCAgICAgICAgICAgICAgIC8vIOWNleWFg+eahOWwuuWvuHdpZHRoXHJcbiAgICAgICAgICAgICAgICBpdGVtX2hlaWdodDogMzI3LCAgICAgICAgICAgICAgLy8g5Y2V5YWD55qE5bC65a+4aGVpZ2h0XHJcbiAgICAgICAgICAgICAgICByb3c6IDEsICAgICAgICAgICAgICAgICAgICAgICAgLy8g6KGM5pWw77yM5L2c55So5LqO5rC05bmz5rua5Yqo57G75Z6LXHJcbiAgICAgICAgICAgICAgICBjb2w6IDEsICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX5pWw77yM5L2c55So5LqO5Z6C55u05rua5Yqo57G75Z6LXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5saXN0X3ZpZXcgPSBuZXcgUmVkQmFnTGlzdFBhbmVsKClcclxuICAgICAgICAgICAgdGhpcy5saXN0X3ZpZXcuY3JlYXRlU2Nyb2xsKHRoaXMudG9wX3BhbmVsLCBjYy52MigyNzAsIDIwKSwgU2Nyb2xsVmlld0Rpci5ob3Jpem9udGFsLCBTY3JvbGxWaWV3U3RhcnRQb3MudG9wLCBsaXN0X3NpemUsIHNldHRpbmcsIGNjLnYyKDAuNSwgMC41KSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBjb25maWcgPSBDb25maWcuZ3VpbGRfZGF0YS5kYXRhX2d1aWxkX3JlZF9iYWc7XHJcbiAgICAgICAgdmFyIGxpc3QgPSBbXTtcclxuICAgICAgICB2YXIgaW5kZXggPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgaW4gY29uZmlnKSB7XHJcbiAgICAgICAgICAgIHZhciB2ID0gY29uZmlnW2ldO1xyXG4gICAgICAgICAgICBsaXN0W2luZGV4XSA9IHsgZGF0YTogdiwgb3Blbl90eXBlOiAxIH07XHJcbiAgICAgICAgICAgIGluZGV4ID0gaW5kZXggKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpIGluIGxpc3QpIHtcclxuICAgICAgICAgICAgdmFyIHYgPSBsaXN0W2ldO1xyXG4gICAgICAgICAgICB2LnNvcnRfaW5kZXggPSAxO1xyXG4gICAgICAgICAgICBpZiAodi5kYXRhLmlkID09IHRoaXMuZXh0ZW5kX2lkKVxyXG4gICAgICAgICAgICAgICAgdi5zb3J0X2luZGV4ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGlzdC5zb3J0KFV0aWxzLnRhYmxlTG93ZXJTb3J0ZXIoW1wic29ydF9pbmRleFwiLCBcImlkXCJdKSk7XHJcbiAgICAgICAgdGhpcy5saXN0X3ZpZXcuc2V0RGF0YShsaXN0KTtcclxuICAgICAgICB0aGlzLmxpc3Rfdmlldy5hZGRFbmRDYWxsQmFjayhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTWVzc2FnZSgpO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKSlcclxuXHJcbiAgICAgICAgdGhpcy5saXN0X3ZpZXcuc2V0RGF0YShsaXN0KTtcclxuXHJcbiAgICB9LFxyXG5cclxuICAgIHVwZGF0ZU1lc3NhZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgaXRlbSA9IHRoaXMubGlzdF92aWV3LmdldFNlbGVjdEl0ZW0oKTtcclxuICAgICAgICB2YXIgdm8gPSBudWxsO1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHZvID0gaXRlbS5nZXREYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtID09IG51bGwpIHJldHVyblxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdF92byAmJiB0aGlzLnNlbGVjdF92byA9PSB2bykgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5zZWxlY3Rfdm8gPSB2bztcclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0X3ZvKSByZXR1cm5cclxuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuc2VsZWN0X3ZvO1xyXG4gICAgICAgIC8v57qi5YyF6YeR6aKdXHJcbiAgICAgICAgdmFyIGNvaW50ID0gZGF0YS5hc3NldHM7XHJcbiAgICAgICAgdmFyIGl0ZW1faWQgPSBnZGF0YShcIml0ZW1fZGF0YVwiLCBcImRhdGFfYXNzZXRzX2xhYmVsMmlkXCIsIFtjb2ludF0pO1xyXG4gICAgICAgIHZhciBpdGVtX2NvbmZpZyA9IFV0aWxzLmdldEl0ZW1Db25maWcoaXRlbV9pZCk7XHJcbiAgICAgICAgaWYgKGl0ZW1fY29uZmlnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29pbl9sYWJlbC5zdHJpbmcgPSBTdHJpbmcoZGF0YS52YWwpO1xyXG4gICAgICAgICAgICB2YXIgcmVzID0gUGF0aFRvb2wuZ2V0SXRlbVJlcyhpdGVtX2NvbmZpZy5pY29uKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKHJlcywgZnVuY3Rpb24gKHJlc19vYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29pbl9pbWcuc3ByaXRlRnJhbWUgPSByZXNfb2JqZWN0O1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VuZF9jb250ZW50LnN0cmluZyA9IGRhdGEubXNnO1xyXG4gICAgICAgIHRoaXMubnVtX2xhYmVsLnN0cmluZyA9IGRhdGEubnVtO1xyXG4gICAgICAgIHRoaXMuZmlsZVJld2FyZHNJdGVtKGRhdGEucmV3YXJkKTtcclxuICAgICAgICB0aGlzLnNob3dSZWRTZW5kTnVtKCk7XHJcbiAgICB9LFxyXG5cclxuICAgIGZpbGVSZXdhcmRzSXRlbTogZnVuY3Rpb24gKGxpc3QpIHtcclxuICAgICAgICBpZiAobGlzdCA9PSBudWxsIHx8IFV0aWxzLm5leHQobGlzdCkgPT0gbnVsbCkgcmV0dXJuXHJcbiAgICAgICAgZm9yICh2YXIgayBpbiB0aGlzLml0ZW1fbGlzdCkge1xyXG4gICAgICAgICAgICB2YXIgdiA9IHRoaXMuaXRlbV9saXN0W2tdO1xyXG4gICAgICAgICAgICB2LnNldFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHNjYWxlID0gMC43O1xyXG4gICAgICAgIHZhciBvZmYgPSAxMDtcclxuICAgICAgICBmb3IgKHZhciBpIGluIGxpc3QpIHtcclxuICAgICAgICAgICAgdmFyIHYgPSBsaXN0W2ldO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtX2xpc3RbaV0gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBJdGVtc1Bvb2wuZ2V0SW5zdGFuY2UoKS5nZXRJdGVtKFwiYmFja3BhY2tfaXRlbVwiKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uaW5pdENvbmZpZyhmYWxzZSwgc2NhbGUsIGZhbHNlLCBmYWxzZSlcclxuICAgICAgICAgICAgICAgIGl0ZW0uc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHggPSAyMCArICgxMjAgKiBzY2FsZSArIG9mZikgKiAoaSAtIDEpICsgMTIwICogc2NhbGUgKiAwLjUgLSAzODggLyAyICsgNjAgKiBzY2FsZTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0UG9zaXRpb24oeCwgNTApO1xyXG4gICAgICAgICAgICAgICAgaXRlbS5zZXRQYXJlbnQodGhpcy5pdGVtX2NvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtpXSA9IGl0ZW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1fbGlzdFtpXTtcclxuICAgICAgICAgICAgaXRlbS5zZXREYXRhKHsgYmlkOiB2WzBdLCBudW06IHZbMV0gfSk7XHJcbiAgICAgICAgICAgIGl0ZW0uc2V0VmlzaWJsZSh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8v6K6+572u57qi5YyF5Y+v5Y+R5qyh5pWwXHJcbiAgICB1cGRhdGVSZWRJbmZvOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgIHRoaXMucmVkX3NlbmRfaW5mbyA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5zaG93UmVkU2VuZE51bSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICB1cGRhdGVJdGVtTnVtOiBmdW5jdGlvbiAoYmFnX2NvZGUsIGRhdGFfbGlzdCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvc3RfaXRlbV9iaWQpIHtcclxuICAgICAgICAgICAgaWYgKGJhZ19jb2RlICE9IG51bGwgJiYgZGF0YV9saXN0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChiYWdfY29kZSA9PSBCYWNrUGFja0NvbnN0LkJhZ19Db2RlLkJBQ0tQQUNLKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBkYXRhX2xpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSBkYXRhX2xpc3RbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICYmIHYuYmFzZV9pZCAhPSBudWxsICYmIHRoaXMuY29zdF9pdGVtX2JpZCA9PSB2LmJhc2VfaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1JlZFNlbmROdW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHNob3dSZWRTZW5kTnVtOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVkX3NlbmRfaW5mbyA9PSBudWxsIHx8IHRoaXMuc2VsZWN0X3ZvID09IG51bGwpIHJldHVyblxyXG4gICAgICAgIGxldCByZWRfY29uZmlnID0gQ29uZmlnLmd1aWxkX2RhdGEuZGF0YV9ndWlsZF9yZWRfYmFnW3RoaXMuc2VsZWN0X3ZvLmlkXTtcclxuICAgICAgICBpZiAoIXJlZF9jb25maWcpIHJldHVyblxyXG5cclxuICAgICAgICB0aGlzLmNvc3RfaXRlbV9iaWQgPSAwOyAgICAgLy/lj6/ku6XmtojogJfpgZPlhbflj5HnuqLljIXnmoTpgZPlhbdiaWRcclxuICAgICAgICB0aGlzLnNlbmRfdGlwc19sYi5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB2YXIgc2VuZF9udW0gPSAwO1xyXG4gICAgICAgIGZvciAodmFyIGkgaW4gdGhpcy5yZWRfc2VuZF9pbmZvKSB7XHJcbiAgICAgICAgICAgIHZhciB2ID0gdGhpcy5yZWRfc2VuZF9pbmZvW2ldO1xyXG4gICAgICAgICAgICBpZiAodi5pZCA9PSB0aGlzLnNlbGVjdF92by5pZCkge1xyXG4gICAgICAgICAgICAgICAgc2VuZF9udW0gPSB2Lm51bTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlbmRfbnVtID0gdGhpcy5zZWxlY3Rfdm8ubGltaXQgLSBzZW5kX251bTtcclxuICAgICAgICBpZiAoc2VuZF9udW0gPCAwKSB7XHJcbiAgICAgICAgICAgIHNlbmRfbnVtID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZW5kX25vdGljZS5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCIo5LuK5pel6L+Y5Y+v5Y+RPGNvbG9yPSMyNDkwMDM+JXM8L2M+KVwiKSwgc2VuZF9udW0pO1xyXG4gICAgICAgIGlmIChzZW5kX251bSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnRuX2xhYmVsLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5qyh5pWw5bey6L6+5LiK6ZmQXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBjaGFyZ2VfY29uZmlnID0gZ2RhdGEoXCJjaGFyZ2VfZGF0YVwiLCBcImRhdGFfY2hhcmdlX2RhdGFcIiwgW3RoaXMuc2VsZWN0X3ZvLmNoYXJnZV9pZF0pO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja0xvc3NJdGVtSXNFbm91Z2gocmVkX2NvbmZpZy5sb3NzX2l0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYmlkID0gcmVkX2NvbmZpZy5sb3NzX2l0ZW1bMF1bMF07XHJcbiAgICAgICAgICAgICAgICBsZXQgbnVtID0gcmVkX2NvbmZpZy5sb3NzX2l0ZW1bMF1bMV07XHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbV9jZmcgPSBVdGlscy5nZXRJdGVtQ29uZmlnKGJpZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbV9jZmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvc3RfaXRlbV9iaWQgPSBiaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlcyA9IFBhdGhUb29sLmdldEl0ZW1SZXMoaXRlbV9jZmcuaWNvbilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ0bl9sYWJlbC5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCI8aW1nIHNyYz0nJXMnLz48b3V0bGluZSB3aWR0aD0yIGNvbG9yPSM2QzJCMDA+JXMg5Y+R57qi5YyFPC9vdXRsaW5lPlwiKSwgaXRlbV9jZmcuaWNvbiwgbnVtKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRSZXMocmVzLCAoZnVuY3Rpb24gKHJlc09iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ0bl9sYWJlbC5hZGRTcHJpdGVGcmFtZShyZXNPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZF90aXBzX2xiLnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIuW9k+WJjeaLpeaciee6ouWMheS7pO+8jOa2iOiAlyVz5Liq5Y+v5Y+R5pS+Measoeivpee6ouWMhVwiKSwgbnVtKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmRfdGlwc19sYi5ub2RlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY2hhcmdlX2NvbmZpZylcclxuICAgICAgICAgICAgICAgIHRoaXMuYnRuX2xhYmVsLnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIjxvdXRsaW5lIHdpZHRoPTIgY29sb3I9IzZDMkIwMD4lc+WFgyDlj5HnuqLljIU8L291dGxpbmU+XCIpLCBjaGFyZ2VfY29uZmlnLnZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmN1cl9zZW5kX251bSAhPSBzZW5kX251bSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cl9zZW5kX251bSA9IHNlbmRfbnVtO1xyXG4gICAgICAgICAgICBpZiAoc2VuZF9udW0gPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgVXRpbHMuc2V0R3JleUJ1dHRvbih0aGlzLnNlbmRfYnRuLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMuYnRuX2xhYmVsXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBVdGlscy5zZXRHcmV5QnV0dG9uKHRoaXMuc2VuZF9idG4sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIC8vIGVuYWJsZU91dGxpbmVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy/liKTmlq3pgZPlhbfmlbDph4/mmK/lkKbotrPlpJ/lj5HnuqLljIVcclxuICAgIGNoZWNrTG9zc0l0ZW1Jc0Vub3VnaDogZnVuY3Rpb24gKGxvc3NfaXRlbSkge1xyXG4gICAgICAgIGxldCBpc19lbm91Z2ggPSBmYWxzZTtcclxuICAgICAgICBpZiAobG9zc19pdGVtICYmIGxvc3NfaXRlbVswXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBiaWQgPSBsb3NzX2l0ZW1bMF1bMF07XHJcbiAgICAgICAgICAgIGxldCBuZWVkX251bSA9IGxvc3NfaXRlbVswXVsxXTtcclxuICAgICAgICAgICAgbGV0IGhhdmVfbnVtID0gQmFja3BhY2tDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS5nZXRJdGVtTnVtQnlCaWQoYmlkKTtcclxuICAgICAgICAgICAgaWYgKGhhdmVfbnVtID49IG5lZWRfbnVtKSB7XHJcbiAgICAgICAgICAgICAgICBpc19lbm91Z2ggPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc19lbm91Z2hcclxuICAgIH0sXHJcblxyXG4gICAgc2V0VmlzaWJsZVN0YXR1czogZnVuY3Rpb24gKGJvb2wpIHtcclxuICAgICAgICB0aGlzLnNldFZpc2libGUoYm9vbCk7XHJcbiAgICB9LFxyXG5cclxuICAgIG9uU2hvdzogZnVuY3Rpb24gKCkge1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXREYXRhOiBmdW5jdGlvbiAoZGF0YSkge1xyXG5cclxuICAgIH0sXHJcblxyXG5cclxuICAgIG9uRGVsZXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubGlzdF92aWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdF92aWV3LmRlbGV0ZU1lKCk7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdF92aWV3ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbV9saXN0KSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gdGhpcy5pdGVtX2xpc3QpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2ID0gdGhpcy5pdGVtX2xpc3Rba107XHJcbiAgICAgICAgICAgICAgICB2LmRlbGV0ZU1lKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3QgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFJlZEJhZ0dldFBhbmVsOyJdfQ==
|