|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/mall/view/mall_buy_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, '8ac90kXE79Ht4zO+F6gRbI6', 'mall_buy_window');
|
// Scripts/mod/mall/view/mall_buy_window.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: @syg.com(必填, 创建模块的人员)
|
// @description:
|
// 用户输入框
|
// <br/>Create: new Date().toISOString()
|
// --------------------------------------------------------------------
|
var MallController = require("mall_controller");
|
|
var MallConst = require("mall_const");
|
|
var BackpackController = require("backpack_controller");
|
|
var RoleController = require("role_controller");
|
|
var CommonAlert = require("commonalert");
|
|
var MallBuyWindow = cc.Class({
|
"extends": BaseView,
|
ctor: function ctor() {
|
this.prefabPath = PathTool.getPrefabPath("mall", "mall_buy_panel");
|
this.ctrl = MallController.getInstance();
|
this.is_can_buy_max = false;
|
this.win_type = WinType.Mini;
|
},
|
openCallBack: function openCallBack() {
|
this.background = this.root_wnd.getChildByName("background");
|
this.background.scale = FIT_SCALE;
|
this.main_container = this.root_wnd.getChildByName("main_container");
|
this.title_con = this.main_container.getChildByName("title_con");
|
this.title_label = this.title_con.getChildByName("title_label").getComponent(cc.Label);
|
this.title_label.string = Utils.TI18N("购买");
|
this.ok_btn = this.main_container.getChildByName("ok_btn");
|
this.ok_btn_label = this.ok_btn.getChildByName("Label").getComponent(cc.Label);
|
this.ok_btn_label.string = Utils.TI18N("购买");
|
this.cancel_btn = this.main_container.getChildByName("cancel_btn");
|
this.cancel_btn_label = this.cancel_btn.getChildByName("Label").getComponent(cc.Label);
|
this.cancel_btn_label.string = Utils.TI18N("取消");
|
this.close_btn = this.main_container.getChildByName("close_btn");
|
this.item_con = this.main_container.getChildByName("item_con");
|
this.name = this.item_con.getChildByName("name").getComponent(cc.Label);
|
this.coin = this.item_con.getChildByName("coin").getComponent(cc.Sprite);
|
this.price = this.item_con.getChildByName("price").getComponent(cc.Label);
|
this.limit = this.item_con.getChildByName("limit").getComponent(cc.Label);
|
this.icon_bg_nd = this.seekChild(this.item_con, "Image_1");
|
this.goods = this.main_container.getChildByName("goods");
|
this.goods_item = ItemsPool.getInstance().getItem("backpack_item");
|
this.goods_item.initConfig(false, 1, false, false);
|
this.goods_item.setParent(this.goods);
|
this.goods_item.show();
|
this.info_con = this.main_container.getChildByName("info_con");
|
this.slider = this.info_con.getChildByName("slider").getComponent(cc.Slider);
|
this.progress = this.info_con.getChildByName("ProgressBar").getComponent(cc.ProgressBar); // this.buy_count_title = this.info_con.getChildByName("buy_count_title").getComponent(cc.Label);
|
// this.buy_count_title.string = Utils.TI18N("购买数量:");
|
|
this.plus_btn = this.info_con.getChildByName("plus_btn");
|
this.buy_count = this.info_con.getChildByName("buy_count").getComponent(cc.Label);
|
this.num = 1;
|
this.buy_count.string = this.num;
|
this.min_btn = this.info_con.getChildByName("min_btn");
|
this.max_btn = this.info_con.getChildByName("max_btn");
|
this.total_price_title_lb = this.seekChild(this.info_con, "total_price_title", cc.Label);
|
this.total_price = this.info_con.getChildByName("total_price").getComponent(cc.Label);
|
this.buy_desc_lb = this.seekChild("buy_desc", cc.Label);
|
this.tips_label = this.seekChild("tips_label");
|
this.setData(this.data);
|
},
|
registerEvent: function registerEvent() {
|
if (this.slider) {
|
this.slider.node.on("slide", function () {
|
// if (this.slider.progress == 1 && this.is_can_buy_num >= this.limit_num && this.is_can_buy_max == false)
|
// this.tips_label.active = true;
|
// else
|
// this.tips_label.active = false;
|
this.setCurUseItemInfoByPercent(this.slider.progress);
|
this.progress.progress = this.slider.progress;
|
}, this);
|
}
|
|
if (this.close_btn) {
|
this.close_btn.on(cc.Node.EventType.TOUCH_END, function () {
|
this.ctrl.openMallBuyWindow(false);
|
}, this);
|
}
|
|
if (this.background) {
|
this.background.on(cc.Node.EventType.TOUCH_END, function () {
|
this.ctrl.openMallBuyWindow(false);
|
}, this);
|
}
|
|
if (this.min_btn) {
|
this.min_btn.on(cc.Node.EventType.TOUCH_END, function () {
|
var percent = this.slider.progress;
|
if (percent == 0) return;
|
if (this.num == 0) return;
|
this.num = this.num - 1;
|
this.setCurUseItemInfoByNum(this.num);
|
}, this);
|
}
|
|
if (this.plus_btn) {
|
this.plus_btn.on(cc.Node.EventType.TOUCH_END, function () {
|
var percent = this.slider.progress;
|
if (percent == 1) return;
|
if (this.num >= this.limit_num - this.data.has_buy) return;
|
this.num = this.num + 1;
|
this.setCurUseItemInfoByNum(this.num);
|
}, this);
|
}
|
|
if (this.max_btn) {
|
this.max_btn.on(cc.Node.EventType.TOUCH_END, function () {
|
var percent = this.slider.progress;
|
if (percent == 1) return;
|
if (this.num >= this.limit_num - this.data.has_buy) return;
|
this.num = this.limit_num - this.data.has_buy;
|
this.setCurUseItemInfoByNum(this.num);
|
}, this);
|
}
|
|
if (this.ok_btn) {
|
this.ok_btn.on(cc.Node.EventType.TOUCH_END, function () {
|
if (this.data) {
|
this.ctrl.openMallBuyWindow(false);
|
|
if (this.data.shop_type == 2) {
|
//神格特殊处理
|
this.showAlert(this.data);
|
} else if (this.data.shop_type == MallConst.MallType.ActionShop) {
|
//活动购买
|
this.ctrl.send16661(this.data.bid, this.data.aim, this.num);
|
} else if (this.data.shop_type == MallConst.MallType.SteriousShop) {
|
require("action_controller").getInstance().sender16689(this.data.aim, this.num);
|
} else {
|
if (this.data.shop_type != 4 && this.data.shop_type != 2 && this.data.shop_type != 15) {
|
if (this.data.shop_type == 16) {
|
this.ctrl.sender13407(this.data.order, this.data.shop_type, 1);
|
} else if (this.data.shop_type == MallConst.MallType.SkillShop) {
|
this.showGoldAlert(this.data);
|
} else {
|
this.ctrl.sender13402(this.data.id, this.num);
|
}
|
} else {
|
this.ctrl.sender13407(this.data.order, this.data.shop_type, 1);
|
}
|
}
|
}
|
}, this);
|
}
|
|
if (this.cancel_btn) {
|
this.cancel_btn.on(cc.Node.EventType.TOUCH_END, function () {
|
this.ctrl.openMallBuyWindow(false);
|
}, this);
|
}
|
},
|
//data结构:
|
//data.item_bid data.item_id 道具id
|
//data.name = 道具名字 如果没有 用道具id原本名字
|
//data.limit_num //购买上限
|
//data.discount or data.price //购买价格
|
//data.pay_type 支付类型 道具id
|
setData: function setData(data) {
|
this.data = data;
|
if (this.root_wnd == null) return;
|
var config = Utils.getItemConfig(data.item_bid || data.item_id);
|
config.bid = data.item_bid || data.item_id;
|
config = Utils.deepCopy(config);
|
|
if (data.item_num && data.item_num != 1) {
|
config.num = data.item_num;
|
}
|
|
if (data.shop_type == MallConst.MallType.FestivalAction) {
|
this.goods_item.setData(data.item_bid, data.quantity || data.num);
|
this.num = data.limit_num - data.has_buy;
|
this.buy_desc_lb.string = Utils.TI18N("活跃值购买后仅增加该活动总活跃值");
|
} else if (data.shop_type == MallConst.MallType.SuitShop) {
|
this.goods_item.setData(data.item_bid);
|
} else if (data.shop_type == MallConst.MallType.SteriousShop) {
|
this.goods_item.setData({
|
bid: data.item_bid,
|
num: data.num
|
});
|
this.total_price.node.x = -1000;
|
this.total_price_title_lb.node.x = -1111;
|
this.ok_btn_label.string = Utils.TI18N("兑换");
|
this.title_label.string = Utils.TI18N("兑换");
|
this.icon_bg_nd.x = -1000;
|
this.price.node.active = false;
|
this.coin.node.active = false;
|
this.limit.node.x = -61;
|
} else {
|
this.goods_item.setData(config);
|
}
|
|
if (data.name != null) {
|
this.name.string = data.name;
|
} else {
|
this.name.string = config.name;
|
}
|
|
this.limit_num = this.data.limit_num;
|
|
if (data.discount != null && this.data.discount > 0) {
|
this.price.string = data.discount;
|
this.price_val = data.discount;
|
} else {
|
this.price.string = data.price;
|
this.price_val = data.price;
|
}
|
|
if (data.shop_type == MallConst.MallType.ActionShop) this.is_can_buy_num = this.ctrl.getModel().checkActionMoenyByType(data.pay_type, this.price_val);else this.is_can_buy_num = this.ctrl.getModel().checkMoenyByType(data.pay_type, this.price_val);
|
var pay_config;
|
if (typeof data.pay_type == "number") pay_config = Utils.getItemConfig(data.pay_type);else pay_config = Utils.getItemConfig(gdata("item_data", "data_assets_label2id", [data.pay_type]));
|
var item_res_path = PathTool.getItemRes(pay_config.icon);
|
|
if (item_res_path) {
|
this.loadRes(item_res_path, function (res_object) {
|
this.coin.spriteFrame = res_object;
|
}.bind(this));
|
}
|
|
if (this.limit_num > 0 && data.is_show_limit_label && data.has_buy != null) {
|
this.limit.string = cc.js.formatStr("限购%s个", this.limit_num - data.has_buy);
|
this.is_can_buy_max = true;
|
} else {
|
this.limit.string = "";
|
|
if (data.shop_type != MallConst.MallType.Recovery) {
|
if (this.is_can_buy_num < this.limit_num) {
|
this.limit_num = this.is_can_buy_num; // this.tips_label.active = false;
|
|
this.is_can_buy_max = false;
|
}
|
}
|
}
|
|
this.setCurUseItemInfoByNum(this.num);
|
},
|
setCurUseItemInfoByNum: function setCurUseItemInfoByNum(num) {
|
this.num = num;
|
var percent = this.num / (this.limit_num - this.data.has_buy);
|
this.slider.progress = percent;
|
this.progress.progress = this.slider.progress;
|
this.buy_count.string = this.num;
|
this.total_price.string = this.num * this.price_val;
|
},
|
setCurUseItemInfoByPercent: function setCurUseItemInfoByPercent(percent) {
|
this.num = Math.floor(percent * (this.limit_num - this.data.has_buy));
|
this.buy_count.string = this.num;
|
this.total_price.string = this.num * this.price_val;
|
},
|
showAlert: function showAlert(data) {
|
if (!data) return;
|
this.ctrl.sender13407(data.order, data.shop_type, 1, data);
|
},
|
openRootWnd: function openRootWnd(type) {},
|
// --处理技能商城的购买
|
showGoldAlert: function showGoldAlert(data) {
|
if (!data) return; // --非钻石购买
|
|
if (data.pay_type != 3) {
|
this.ctrl.sender13407(data.order, data.shop_type, 1);
|
} else {
|
var cost = data.price;
|
|
if (data.discount != 0) {
|
cost = data.discount;
|
}
|
|
var role_vo = RoleController.getInstance().getRoleVo();
|
if (!role_vo) return;
|
var cur_gold = role_vo.gold;
|
|
if (cur_gold >= cost) {
|
var item_cfg = Utils.getItemConfig(data.item_id);
|
var good_res_path = "3";
|
var text = StringUtil.parseStr("是否使用<img src=%s visible=true scale=0.4 /><div fontColor=#289b14 fontsize= 26>%s</div>购买<div fontColor=#289b14 fontsize= 26>%s</div>?").string;
|
var frame_arrays = [];
|
var good_path = PathTool.getIconPath("item", "3");
|
frame_arrays.push(good_path);
|
var tips_str = cc.js.formatStr(text, good_res_path, cost, item_cfg.name);
|
CommonAlert.show(tips_str, Utils.TI18N("确定"), function () {
|
this.ctrl.sender13407(data.order, data.shop_type, 1);
|
}.bind(this), Utils.TI18N("取消"), null, null, null, {
|
resArr: frame_arrays
|
});
|
} else {
|
// --钻石不足
|
var config = Utils.getItemConfig(data.pay_type);
|
|
if (config) {
|
BackpackController.getInstance().openTipsSource(true, config);
|
}
|
}
|
}
|
},
|
closeCallBack: function closeCallBack() {
|
if (this.goods_item) this.goods_item.deleteMe();
|
this.goods_item = null;
|
this.ctrl.openMallBuyWindow(false);
|
}
|
});
|
module.exports = MallBuyWindow;
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxtYWxsXFx2aWV3XFxtYWxsX2J1eV93aW5kb3cuanMiXSwibmFtZXMiOlsiTWFsbENvbnRyb2xsZXIiLCJyZXF1aXJlIiwiTWFsbENvbnN0IiwiQmFja3BhY2tDb250cm9sbGVyIiwiUm9sZUNvbnRyb2xsZXIiLCJDb21tb25BbGVydCIsIk1hbGxCdXlXaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsIlBhdGhUb29sIiwiZ2V0UHJlZmFiUGF0aCIsImN0cmwiLCJnZXRJbnN0YW5jZSIsImlzX2Nhbl9idXlfbWF4Iiwid2luX3R5cGUiLCJXaW5UeXBlIiwiTWluaSIsIm9wZW5DYWxsQmFjayIsImJhY2tncm91bmQiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwic2NhbGUiLCJGSVRfU0NBTEUiLCJtYWluX2NvbnRhaW5lciIsInRpdGxlX2NvbiIsInRpdGxlX2xhYmVsIiwiZ2V0Q29tcG9uZW50IiwiTGFiZWwiLCJzdHJpbmciLCJVdGlscyIsIlRJMThOIiwib2tfYnRuIiwib2tfYnRuX2xhYmVsIiwiY2FuY2VsX2J0biIsImNhbmNlbF9idG5fbGFiZWwiLCJjbG9zZV9idG4iLCJpdGVtX2NvbiIsIm5hbWUiLCJjb2luIiwiU3ByaXRlIiwicHJpY2UiLCJsaW1pdCIsImljb25fYmdfbmQiLCJzZWVrQ2hpbGQiLCJnb29kcyIsImdvb2RzX2l0ZW0iLCJJdGVtc1Bvb2wiLCJnZXRJdGVtIiwiaW5pdENvbmZpZyIsInNldFBhcmVudCIsInNob3ciLCJpbmZvX2NvbiIsInNsaWRlciIsIlNsaWRlciIsInByb2dyZXNzIiwiUHJvZ3Jlc3NCYXIiLCJwbHVzX2J0biIsImJ1eV9jb3VudCIsIm51bSIsIm1pbl9idG4iLCJtYXhfYnRuIiwidG90YWxfcHJpY2VfdGl0bGVfbGIiLCJ0b3RhbF9wcmljZSIsImJ1eV9kZXNjX2xiIiwidGlwc19sYWJlbCIsInNldERhdGEiLCJkYXRhIiwicmVnaXN0ZXJFdmVudCIsIm5vZGUiLCJvbiIsInNldEN1clVzZUl0ZW1JbmZvQnlQZXJjZW50IiwiTm9kZSIsIkV2ZW50VHlwZSIsIlRPVUNIX0VORCIsIm9wZW5NYWxsQnV5V2luZG93IiwicGVyY2VudCIsInNldEN1clVzZUl0ZW1JbmZvQnlOdW0iLCJsaW1pdF9udW0iLCJoYXNfYnV5Iiwic2hvcF90eXBlIiwic2hvd0FsZXJ0IiwiTWFsbFR5cGUiLCJBY3Rpb25TaG9wIiwic2VuZDE2NjYxIiwiYmlkIiwiYWltIiwiU3RlcmlvdXNTaG9wIiwic2VuZGVyMTY2ODkiLCJzZW5kZXIxMzQwNyIsIm9yZGVyIiwiU2tpbGxTaG9wIiwic2hvd0dvbGRBbGVydCIsInNlbmRlcjEzNDAyIiwiaWQiLCJjb25maWciLCJnZXRJdGVtQ29uZmlnIiwiaXRlbV9iaWQiLCJpdGVtX2lkIiwiZGVlcENvcHkiLCJpdGVtX251bSIsIkZlc3RpdmFsQWN0aW9uIiwicXVhbnRpdHkiLCJTdWl0U2hvcCIsIngiLCJhY3RpdmUiLCJkaXNjb3VudCIsInByaWNlX3ZhbCIsImlzX2Nhbl9idXlfbnVtIiwiZ2V0TW9kZWwiLCJjaGVja0FjdGlvbk1vZW55QnlUeXBlIiwicGF5X3R5cGUiLCJjaGVja01vZW55QnlUeXBlIiwicGF5X2NvbmZpZyIsImdkYXRhIiwiaXRlbV9yZXNfcGF0aCIsImdldEl0ZW1SZXMiLCJpY29uIiwibG9hZFJlcyIsInJlc19vYmplY3QiLCJzcHJpdGVGcmFtZSIsImJpbmQiLCJpc19zaG93X2xpbWl0X2xhYmVsIiwianMiLCJmb3JtYXRTdHIiLCJSZWNvdmVyeSIsIk1hdGgiLCJmbG9vciIsIm9wZW5Sb290V25kIiwidHlwZSIsImNvc3QiLCJyb2xlX3ZvIiwiZ2V0Um9sZVZvIiwiY3VyX2dvbGQiLCJnb2xkIiwiaXRlbV9jZmciLCJnb29kX3Jlc19wYXRoIiwidGV4dCIsIlN0cmluZ1V0aWwiLCJwYXJzZVN0ciIsImZyYW1lX2FycmF5cyIsImdvb2RfcGF0aCIsImdldEljb25QYXRoIiwicHVzaCIsInRpcHNfc3RyIiwicmVzQXJyIiwib3BlblRpcHNTb3VyY2UiLCJjbG9zZUNhbGxCYWNrIiwiZGVsZXRlTWUiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLGNBQWMsR0FBR0MsT0FBTyxDQUFDLGlCQUFELENBQTVCOztBQUNBLElBQUlDLFNBQVMsR0FBR0QsT0FBTyxDQUFDLFlBQUQsQ0FBdkI7O0FBQ0EsSUFBSUUsa0JBQWtCLEdBQUdGLE9BQU8sQ0FBQyxxQkFBRCxDQUFoQzs7QUFDQSxJQUFJRyxjQUFjLEdBQUdILE9BQU8sQ0FBQyxpQkFBRCxDQUE1Qjs7QUFDQSxJQUFJSSxXQUFXLEdBQUdKLE9BQU8sQ0FBQyxhQUFELENBQXpCOztBQUNBLElBQUlLLGFBQWEsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDekIsYUFBU0MsUUFEZ0I7QUFFekJDLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFNBQUtDLFVBQUwsR0FBa0JDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixNQUF2QixFQUErQixnQkFBL0IsQ0FBbEI7QUFDQSxTQUFLQyxJQUFMLEdBQVlkLGNBQWMsQ0FBQ2UsV0FBZixFQUFaO0FBQ0EsU0FBS0MsY0FBTCxHQUFzQixLQUF0QjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0JDLE9BQU8sQ0FBQ0MsSUFBeEI7QUFDSCxHQVB3QjtBQVN6QkMsRUFBQUEsWUFBWSxFQUFFLHdCQUFZO0FBQ3RCLFNBQUtDLFVBQUwsR0FBa0IsS0FBS0MsUUFBTCxDQUFjQyxjQUFkLENBQTZCLFlBQTdCLENBQWxCO0FBQ0EsU0FBS0YsVUFBTCxDQUFnQkcsS0FBaEIsR0FBd0JDLFNBQXhCO0FBQ0EsU0FBS0MsY0FBTCxHQUFzQixLQUFLSixRQUFMLENBQWNDLGNBQWQsQ0FBNkIsZ0JBQTdCLENBQXRCO0FBQ0EsU0FBS0ksU0FBTCxHQUFpQixLQUFLRCxjQUFMLENBQW9CSCxjQUFwQixDQUFt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QU0sR0FBR2pFLEtBQUssQ0FBQ2tFLGFBQU4sQ0FBb0I3QixJQUFJLENBQUM0QyxRQUF6QixDQUFiOztBQUNBLFlBQUloQixNQUFKLEVBQVk7QUFDUjlGLFVBQUFBLGtCQUFrQixDQUFDWSxXQUFuQixHQUFpQ3FJLGNBQWpDLENBQWdELElBQWhELEVBQXNEbkQsTUFBdEQ7QUFDSDtBQUNKO0FBQ0o7QUFDSixHQXJTd0I7QUFzU3pCb0QsRUFBQUEsYUFBYSxFQUFFLHlCQUFZO0FBQ3ZCLFFBQUksS0FBS3JHLFVBQVQsRUFDSSxLQUFLQSxVQUFMLENBQWdCc0csUUFBaEI7QUFDSixTQUFLdEcsVUFBTCxHQUFrQixJQUFsQjtBQUNBLFNBQUtsQyxJQUFMLENBQVUrRCxpQkFBVixDQUE0QixLQUE1QjtBQUNIO0FBM1N3QixDQUFULENBQXBCO0FBK1NBMEUsTUFBTSxDQUFDQyxPQUFQLEdBQWlCbEosYUFBakIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vIEBhdXRob3I6IEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxyXG4vLyBAZGVzY3JpcHRpb246XHJcbi8vICAgICAg55So5oi36L6T5YWl5qGGXHJcbi8vIDxici8+Q3JlYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxudmFyIE1hbGxDb250cm9sbGVyID0gcmVxdWlyZShcIm1hbGxfY29udHJvbGxlclwiKTtcclxudmFyIE1hbGxDb25zdCA9IHJlcXVpcmUoXCJtYWxsX2NvbnN0XCIpO1xyXG52YXIgQmFja3BhY2tDb250cm9sbGVyID0gcmVxdWlyZShcImJhY2twYWNrX2NvbnRyb2xsZXJcIilcclxudmFyIFJvbGVDb250cm9sbGVyID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKVxyXG52YXIgQ29tbW9uQWxlcnQgPSByZXF1aXJlKFwiY29tbW9uYWxlcnRcIilcclxudmFyIE1hbGxCdXlXaW5kb3cgPSBjYy5DbGFzcyh7XHJcbiAgICBleHRlbmRzOiBCYXNlVmlldyxcclxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwibWFsbFwiLCBcIm1hbGxfYnV5X3BhbmVsXCIpO1xyXG4gICAgICAgIHRoaXMuY3RybCA9IE1hbGxDb250cm9sbGVyLmdldEluc3RhbmNlKCk7XHJcbiAgICAgICAgdGhpcy5pc19jYW5fYnV5X21heCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLk1pbmk7XHJcbiAgICB9LFxyXG5cclxuICAgIG9wZW5DYWxsQmFjazogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZCA9IHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJiYWNrZ3JvdW5kXCIpO1xyXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5zY2FsZSA9IEZJVF9TQ0FMRTtcclxuICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcIm1haW5fY29udGFpbmVyXCIpO1xyXG4gICAgICAgIHRoaXMudGl0bGVfY29uID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInRpdGxlX2NvblwiKTtcclxuICAgICAgICB0aGlzLnRpdGxlX2xhYmVsID0gdGhpcy50aXRsZV9jb24uZ2V0Q2hpbGRCeU5hbWUoXCJ0aXRsZV9sYWJlbFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xyXG4gICAgICAgIHRoaXMudGl0bGVfbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLotK3kubBcIik7XHJcblxyXG4gICAgICAgIHRoaXMub2tfYnRuID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIm9rX2J0blwiKTtcclxuICAgICAgICB0aGlzLm9rX2J0bl9sYWJlbCA9IHRoaXMub2tfYnRuLmdldENoaWxkQnlOYW1lKFwiTGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLm9rX2J0bl9sYWJlbC5zdHJpbmcgPSBVdGlscy5USTE4TihcIui0reS5sFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW5jZWxfYnRuID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImNhbmNlbF9idG5cIik7XHJcbiAgICAgICAgdGhpcy5jYW5jZWxfYnRuX2xhYmVsID0gdGhpcy5jYW5jZWxfYnRuLmdldENoaWxkQnlOYW1lKFwiTGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLmNhbmNlbF9idG5fbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLlj5bmtohcIik7XHJcblxyXG4gICAgICAgIHRoaXMuY2xvc2VfYnRuID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImNsb3NlX2J0blwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5pdGVtX2NvbiA9IHRoaXMubWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJpdGVtX2NvblwiKTtcclxuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLml0ZW1fY29uLmdldENoaWxkQnlOYW1lKFwibmFtZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xyXG4gICAgICAgIHRoaXMuY29pbiA9IHRoaXMuaXRlbV9jb24uZ2V0Q2hpbGRCeU5hbWUoXCJjb2luXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpO1xyXG4gICAgICAgIHRoaXMucHJpY2UgPSB0aGlzLml0ZW1fY29uLmdldENoaWxkQnlOYW1lKFwicHJpY2VcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLmxpbWl0ID0gdGhpcy5pdGVtX2Nvbi5nZXRDaGlsZEJ5TmFtZShcImxpbWl0XCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XHJcbiAgICAgICAgdGhpcy5pY29uX2JnX25kID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5pdGVtX2NvbiwgXCJJbWFnZV8xXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmdvb2RzID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImdvb2RzXCIpO1xyXG4gICAgICAgIHRoaXMuZ29vZHNfaXRlbSA9IEl0ZW1zUG9vbC5nZXRJbnN0YW5jZSgpLmdldEl0ZW0oXCJiYWNrcGFja19pdGVtXCIpO1xyXG4gICAgICAgIHRoaXMuZ29vZHNfaXRlbS5pbml0Q29uZmlnKGZhbHNlLCAxLCBmYWxzZSwgZmFsc2UpXHJcbiAgICAgICAgdGhpcy5nb29kc19pdGVtLnNldFBhcmVudCh0aGlzLmdvb2RzKTtcclxuICAgICAgICB0aGlzLmdvb2RzX2l0ZW0uc2hvdygpO1xyXG5cclxuICAgICAgICB0aGlzLmluZm9fY29uID0gdGhpcy5tYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcImluZm9fY29uXCIpO1xyXG4gICAgICAgIHRoaXMuc2xpZGVyID0gdGhpcy5pbmZvX2Nvbi5nZXRDaGlsZEJ5TmFtZShcInNsaWRlclwiKS5nZXRDb21wb25lbnQoY2MuU2xpZGVyKTtcclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gdGhpcy5pbmZvX2Nvbi5nZXRDaGlsZEJ5TmFtZShcIlByb2dyZXNzQmFyXCIpLmdldENvbXBvbmVudChjYy5Qcm9ncmVzc0Jhcik7XHJcbiAgICAgICAgLy8gdGhpcy5idXlfY291bnRfdGl0bGUgPSB0aGlzLmluZm9fY29uLmdldENoaWxkQnlOYW1lKFwiYnV5X2NvdW50X3RpdGxlXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XHJcbiAgICAgICAgLy8gdGhpcy5idXlfY291bnRfdGl0bGUuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLotK3kubDmlbDph4/vvJpcIik7XHJcbiAgICAgICAgdGhpcy5wbHVzX2J0biA9IHRoaXMuaW5mb19jb24uZ2V0Q2hpbGRCeU5hbWUoXCJwbHVzX2J0blwiKTtcclxuICAgICAgICB0aGlzLmJ1eV9jb3VudCA9IHRoaXMuaW5mb19jb24uZ2V0Q2hpbGRCeU5hbWUoXCJidXlfY291bnRcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLm51bSA9IDE7XHJcbiAgICAgICAgdGhpcy5idXlfY291bnQuc3RyaW5nID0gdGhpcy5udW07XHJcbiAgICAgICAgdGhpcy5taW5fYnRuID0gdGhpcy5pbmZvX2Nvbi5nZXRDaGlsZEJ5TmFtZShcIm1pbl9idG5cIik7XHJcbiAgICAgICAgdGhpcy5tYXhfYnRuID0gdGhpcy5pbmZvX2Nvbi5nZXRDaGlsZEJ5TmFtZShcIm1heF9idG5cIik7XHJcblxyXG4gICAgICAgIHRoaXMudG90YWxfcHJpY2VfdGl0bGVfbGIgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLmluZm9fY29uLCBcInRvdGFsX3ByaWNlX3RpdGxlXCIsIGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLnRvdGFsX3ByaWNlID0gdGhpcy5pbmZvX2Nvbi5nZXRDaGlsZEJ5TmFtZShcInRvdGFsX3ByaWNlXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XHJcblxyXG4gICAgICAgIHRoaXMuYnV5X2Rlc2NfbGIgPSB0aGlzLnNlZWtDaGlsZChcImJ1eV9kZXNjXCIsIGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLnRpcHNfbGFiZWwgPSB0aGlzLnNlZWtDaGlsZChcInRpcHNfbGFiZWxcIik7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKHRoaXMuZGF0YSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHJlZ2lzdGVyRXZlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodGhpcy5zbGlkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5zbGlkZXIubm9kZS5vbihcInNsaWRlXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlmICh0aGlzLnNsaWRlci5wcm9ncmVzcyA9PSAxICYmIHRoaXMuaXNfY2FuX2J1eV9udW0gPj0gdGhpcy5saW1pdF9udW0gJiYgdGhpcy5pc19jYW5fYnV5X21heCA9PSBmYWxzZSlcclxuICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnRpcHNfbGFiZWwuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIGVsc2VcclxuICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnRpcHNfbGFiZWwuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEN1clVzZUl0ZW1JbmZvQnlQZXJjZW50KHRoaXMuc2xpZGVyLnByb2dyZXNzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3MucHJvZ3Jlc3MgPSB0aGlzLnNsaWRlci5wcm9ncmVzcztcclxuICAgICAgICAgICAgfSwgdGhpcylcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VfYnRuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VfYnRuLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5NYWxsQnV5V2luZG93KGZhbHNlKTtcclxuICAgICAgICAgICAgfSwgdGhpcylcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYmFja2dyb3VuZCkge1xyXG4gICAgICAgICAgICB0aGlzLmJhY2tncm91bmQub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN0cmwub3Blbk1hbGxCdXlXaW5kb3coZmFsc2UpO1xyXG4gICAgICAgICAgICB9LCB0aGlzKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5taW5fYnRuKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWluX2J0bi5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwZXJjZW50ID0gdGhpcy5zbGlkZXIucHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgICAgICBpZiAocGVyY2VudCA9PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubnVtID09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm51bSA9IHRoaXMubnVtIC0gMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q3VyVXNlSXRlbUluZm9CeU51bSh0aGlzLm51bSk7XHJcbiAgICAgICAgICAgIH0sIHRoaXMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnBsdXNfYnRuKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1c19idG4ub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGVyY2VudCA9IHRoaXMuc2xpZGVyLnByb2dyZXNzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBlcmNlbnQgPT0gMSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm51bSA+PSAodGhpcy5saW1pdF9udW0gLSB0aGlzLmRhdGEuaGFzX2J1eSkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm51bSA9IHRoaXMubnVtICsgMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q3VyVXNlSXRlbUluZm9CeU51bSh0aGlzLm51bSk7XHJcbiAgICAgICAgICAgIH0sIHRoaXMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1heF9idG4pIHtcclxuICAgICAgICAgICAgdGhpcy5tYXhfYnRuLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBlcmNlbnQgPSB0aGlzLnNsaWRlci5wcm9ncmVzcztcclxuICAgICAgICAgICAgICAgIGlmIChwZXJjZW50ID09IDEpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5udW0gPj0gKHRoaXMubGltaXRfbnVtIC0gdGhpcy5kYXRhLmhhc19idXkpKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICAgICAgdGhpcy5udW0gPSB0aGlzLmxpbWl0X251bSAtIHRoaXMuZGF0YS5oYXNfYnV5O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDdXJVc2VJdGVtSW5mb0J5TnVtKHRoaXMubnVtKTtcclxuICAgICAgICAgICAgfSwgdGhpcylcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub2tfYnRuKSB7XHJcbiAgICAgICAgICAgIHRoaXMub2tfYnRuLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuTWFsbEJ1eVdpbmRvdyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5zaG9wX3R5cGUgPT0gMikgeyAvL+elnuagvOeJueauiuWkhOeQhlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dBbGVydCh0aGlzLmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhLnNob3BfdHlwZSA9PSBNYWxsQ29uc3QuTWFsbFR5cGUuQWN0aW9uU2hvcCkgeyAvL+a0u+WKqOi0reS5sFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwuc2VuZDE2NjYxKHRoaXMuZGF0YS5iaWQsIHRoaXMuZGF0YS5haW0sIHRoaXMubnVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9ICBlbHNlIGlmICh0aGlzLmRhdGEuc2hvcF90eXBlID09IE1hbGxDb25zdC5NYWxsVHlwZS5TdGVyaW91c1Nob3Ape1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlKFwiYWN0aW9uX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKS5zZW5kZXIxNjY4OSh0aGlzLmRhdGEuYWltLHRoaXMubnVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLnNob3BfdHlwZSAhPSA0ICYmIHRoaXMuZGF0YS5zaG9wX3R5cGUgIT0gMiAmJiB0aGlzLmRhdGEuc2hvcF90eXBlICE9IDE1KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLnNob3BfdHlwZSA9PSAxNikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kZXIxMzQwNyh0aGlzLmRhdGEub3JkZXIsIHRoaXMuZGF0YS5zaG9wX3R5cGUsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGEuc2hvcF90eXBlID09IE1hbGxDb25zdC5NYWxsVHlwZS5Ta2lsbFNob3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dHb2xkQWxlcnQodGhpcy5kYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwuc2VuZGVyMTM0MDIodGhpcy5kYXRhLmlkLCB0aGlzLm51bSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwuc2VuZGVyMTM0MDcodGhpcy5kYXRhLm9yZGVyLCB0aGlzLmRhdGEuc2hvcF90eXBlLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgdGhpcylcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbF9idG4pIHtcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxfYnRuLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5NYWxsQnV5V2luZG93KGZhbHNlKTtcclxuICAgICAgICAgICAgfSwgdGhpcylcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuXHJcbiAgICAvL2RhdGHnu5PmnoQ6XHJcbiAgICAvL2RhdGEuaXRlbV9iaWQgZGF0YS5pdGVtX2lkICAg6YGT5YW3aWRcclxuICAgIC8vZGF0YS5uYW1lID0g6YGT5YW35ZCN5a2XICDlpoLmnpzmsqHmnIkg55So6YGT5YW3aWTljp/mnKzlkI3lrZdcclxuICAgIC8vZGF0YS5saW1pdF9udW0gIC8v6LSt5Lmw5LiK6ZmQXHJcbiAgICAvL2RhdGEuZGlzY291bnQgb3IgZGF0YS5wcmljZSAvL+i0reS5sOS7t+agvFxyXG4gICAgLy9kYXRhLnBheV90eXBlIOaUr+S7mOexu+WeiyDpgZPlhbdpZFxyXG4gICAgc2V0RGF0YTogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kID09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIHZhciBjb25maWcgPSBVdGlscy5nZXRJdGVtQ29uZmlnKGRhdGEuaXRlbV9iaWQgfHwgZGF0YS5pdGVtX2lkKTtcclxuICAgICAgICBjb25maWcuYmlkID0gZGF0YS5pdGVtX2JpZCB8fCBkYXRhLml0ZW1faWRcclxuICAgICAgICBjb25maWcgPSBVdGlscy5kZWVwQ29weShjb25maWcpXHJcbiAgICAgICAgaWYgKGRhdGEuaXRlbV9udW0gJiYgZGF0YS5pdGVtX251bSAhPSAxKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5udW0gPSBkYXRhLml0ZW1fbnVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGF0YS5zaG9wX3R5cGUgPT0gTWFsbENvbnN0Lk1hbGxUeXBlLkZlc3RpdmFsQWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ29vZHNfaXRlbS5zZXREYXRhKGRhdGEuaXRlbV9iaWQsIGRhdGEucXVhbnRpdHkgfHwgZGF0YS5udW0pO1xyXG4gICAgICAgICAgICB0aGlzLm51bSA9IGRhdGEubGltaXRfbnVtIC0gZGF0YS5oYXNfYnV5O1xyXG4gICAgICAgICAgICB0aGlzLmJ1eV9kZXNjX2xiLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5rS76LeD5YC86LSt5Lmw5ZCO5LuF5aKe5Yqg6K+l5rS75Yqo5oC75rS76LeD5YC8XCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5zaG9wX3R5cGUgPT0gTWFsbENvbnN0Lk1hbGxUeXBlLlN1aXRTaG9wKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ29vZHNfaXRlbS5zZXREYXRhKGRhdGEuaXRlbV9iaWQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5zaG9wX3R5cGUgPT0gTWFsbENvbnN0Lk1hbGxUeXBlLlN0ZXJpb3VzU2hvcCkge1xyXG4gICAgICAgICAgICB0aGlzLmdvb2RzX2l0ZW0uc2V0RGF0YSh7YmlkOmRhdGEuaXRlbV9iaWQsbnVtOmRhdGEubnVtfSk7XHJcbiAgICAgICAgICAgIHRoaXMudG90YWxfcHJpY2Uubm9kZS54ID0gLTEwMDA7XHJcbiAgICAgICAgICAgIHRoaXMudG90YWxfcHJpY2VfdGl0bGVfbGIubm9kZS54ID0gLTExMTE7XHJcbiAgICAgICAgICAgIHRoaXMub2tfYnRuX2xhYmVsLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5YWR5o2iXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnRpdGxlX2xhYmVsLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5YWR5o2iXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmljb25fYmdfbmQueCA9IC0xMDAwO1xyXG4gICAgICAgICAgICB0aGlzLnByaWNlLm5vZGUuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY29pbi5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmxpbWl0Lm5vZGUueCA9IC02MTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdvb2RzX2l0ZW0uc2V0RGF0YShjb25maWcpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkYXRhLm5hbWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLm5hbWUuc3RyaW5nID0gZGF0YS5uYW1lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubmFtZS5zdHJpbmcgPSBjb25maWcubmFtZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5saW1pdF9udW0gPSB0aGlzLmRhdGEubGltaXRfbnVtO1xyXG4gICAgICAgIGlmIChkYXRhLmRpc2NvdW50ICE9IG51bGwgJiYgdGhpcy5kYXRhLmRpc2NvdW50ID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnByaWNlLnN0cmluZyA9IGRhdGEuZGlzY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMucHJpY2VfdmFsID0gZGF0YS5kaXNjb3VudDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByaWNlLnN0cmluZyA9IGRhdGEucHJpY2U7XHJcbiAgICAgICAgICAgIHRoaXMucHJpY2VfdmFsID0gZGF0YS5wcmljZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkYXRhLnNob3BfdHlwZSA9PSBNYWxsQ29uc3QuTWFsbFR5cGUuQWN0aW9uU2hvcClcclxuICAgICAgICAgICAgdGhpcy5pc19jYW5fYnV5X251bSA9IHRoaXMuY3RybC5nZXRNb2RlbCgpLmNoZWNrQWN0aW9uTW9lbnlCeVR5cGUoZGF0YS5wYXlfdHlwZSwgdGhpcy5wcmljZV92YWwpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5pc19jYW5fYnV5X251bSA9IHRoaXMuY3RybC5nZXRNb2RlbCgpLmNoZWNrTW9lbnlCeVR5cGUoZGF0YS5wYXlfdHlwZSwgdGhpcy5wcmljZV92YWwpO1xyXG5cclxuICAgICAgICB2YXIgcGF5X2NvbmZpZztcclxuICAgICAgICBpZiAodHlwZW9mIChkYXRhLnBheV90eXBlKSA9PSBcIm51bWJlclwiKVxyXG4gICAgICAgICAgICBwYXlfY29uZmlnID0gVXRpbHMuZ2V0SXRlbUNvbmZpZyhkYXRhLnBheV90eXBlKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHBheV9jb25maWcgPSBVdGlscy5nZXRJdGVtQ29uZmlnKGdkYXRhKFwiaXRlbV9kYXRhXCIsIFwiZGF0YV9hc3NldHNfbGFiZWwyaWRcIiwgW2RhdGEucGF5X3R5cGVdKSk7XHJcblxyXG4gICAgICAgIHZhciBpdGVtX3Jlc19wYXRoID0gUGF0aFRvb2wuZ2V0SXRlbVJlcyhwYXlfY29uZmlnLmljb24pXHJcbiAgICAgICAgaWYgKGl0ZW1fcmVzX3BhdGgpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKGl0ZW1fcmVzX3BhdGgsIGZ1bmN0aW9uIChyZXNfb2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvaW4uc3ByaXRlRnJhbWUgPSByZXNfb2JqZWN0O1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5saW1pdF9udW0gPiAwICYmIGRhdGEuaXNfc2hvd19saW1pdF9sYWJlbCAmJiBkYXRhLmhhc19idXkgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmxpbWl0LnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihcIumZkOi0rSVz5LiqXCIsIHRoaXMubGltaXRfbnVtIC0gZGF0YS5oYXNfYnV5KTtcclxuICAgICAgICAgICAgdGhpcy5pc19jYW5fYnV5X21heCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5saW1pdC5zdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5zaG9wX3R5cGUgIT0gTWFsbENvbnN0Lk1hbGxUeXBlLlJlY292ZXJ5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc19jYW5fYnV5X251bSA8IHRoaXMubGltaXRfbnVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW1pdF9udW0gPSB0aGlzLmlzX2Nhbl9idXlfbnVtO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMudGlwc19sYWJlbC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzX2Nhbl9idXlfbWF4ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0Q3VyVXNlSXRlbUluZm9CeU51bSh0aGlzLm51bSk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldEN1clVzZUl0ZW1JbmZvQnlOdW06IGZ1bmN0aW9uIChudW0pIHtcclxuICAgICAgICB0aGlzLm51bSA9IG51bTtcclxuICAgICAgICB2YXIgcGVyY2VudCA9IHRoaXMubnVtIC8gKHRoaXMubGltaXRfbnVtIC0gdGhpcy5kYXRhLmhhc19idXkpO1xyXG4gICAgICAgIHRoaXMuc2xpZGVyLnByb2dyZXNzID0gcGVyY2VudDtcclxuICAgICAgICB0aGlzLnByb2dyZXNzLnByb2dyZXNzID0gdGhpcy5zbGlkZXIucHJvZ3Jlc3M7XHJcbiAgICAgICAgdGhpcy5idXlfY291bnQuc3RyaW5nID0gdGhpcy5udW07XHJcbiAgICAgICAgdGhpcy50b3RhbF9wcmljZS5zdHJpbmcgPSB0aGlzLm51bSAqIHRoaXMucHJpY2VfdmFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBzZXRDdXJVc2VJdGVtSW5mb0J5UGVyY2VudDogZnVuY3Rpb24gKHBlcmNlbnQpIHtcclxuICAgICAgICB0aGlzLm51bSA9IE1hdGguZmxvb3IocGVyY2VudCAqICh0aGlzLmxpbWl0X251bSAtIHRoaXMuZGF0YS5oYXNfYnV5KSk7XHJcbiAgICAgICAgdGhpcy5idXlfY291bnQuc3RyaW5nID0gdGhpcy5udW07XHJcbiAgICAgICAgdGhpcy50b3RhbF9wcmljZS5zdHJpbmcgPSB0aGlzLm51bSAqIHRoaXMucHJpY2VfdmFsO1xyXG4gICAgfSxcclxuXHJcbiAgICBzaG93QWxlcnQ6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgaWYgKCFkYXRhKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB0aGlzLmN0cmwuc2VuZGVyMTM0MDcoZGF0YS5vcmRlciwgZGF0YS5zaG9wX3R5cGUsIDEsIGRhdGEpO1xyXG4gICAgfSxcclxuXHJcbiAgICBvcGVuUm9vdFduZDogZnVuY3Rpb24gKHR5cGUpIHtcclxuICAgIH0sXHJcbiAgICAvLyAtLeWkhOeQhuaKgOiDveWVhuWfjueahOi0reS5sFxyXG4gICAgc2hvd0dvbGRBbGVydChkYXRhKSB7XHJcbiAgICAgICAgaWYgKCFkYXRhKSByZXR1cm47XHJcbiAgICAgICAgLy8gLS3pnZ7pkrvnn7PotK3kubBcclxuICAgICAgICBpZiAoZGF0YS5wYXlfdHlwZSAhPSAzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kZXIxMzQwNyhkYXRhLm9yZGVyLCBkYXRhLnNob3BfdHlwZSwgMSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgY29zdCA9IGRhdGEucHJpY2VcclxuICAgICAgICAgICAgaWYgKGRhdGEuZGlzY291bnQgIT0gMCkge1xyXG4gICAgICAgICAgICAgICAgY29zdCA9IGRhdGEuZGlzY291bnRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcm9sZV92byA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKClcclxuICAgICAgICAgICAgaWYgKCFyb2xlX3ZvKSByZXR1cm47XHJcbiAgICAgICAgICAgIGxldCBjdXJfZ29sZCA9IHJvbGVfdm8uZ29sZFxyXG5cclxuICAgICAgICAgICAgaWYgKGN1cl9nb2xkID49IGNvc3QpIHtcclxuICAgICAgICAgICAgICAgIGxldCBpdGVtX2NmZyA9IFV0aWxzLmdldEl0ZW1Db25maWcoZGF0YS5pdGVtX2lkKVxyXG4gICAgICAgICAgICAgICAgbGV0IGdvb2RfcmVzX3BhdGggPSBcIjNcIjtcclxuICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0gU3RyaW5nVXRpbC5wYXJzZVN0cihcIuaYr+WQpuS9v+eUqDxpbWcgc3JjPSVzIHZpc2libGU9dHJ1ZSBzY2FsZT0wLjQgLz48ZGl2IGZvbnRDb2xvcj0jMjg5YjE0IGZvbnRzaXplPSAyNj4lczwvZGl2Pui0reS5sDxkaXYgZm9udENvbG9yPSMyODliMTQgZm9udHNpemU9IDI2PiVzPC9kaXY+77yfXCIpLnN0cmluZ1xyXG4gICAgICAgICAgICAgICAgbGV0IGZyYW1lX2FycmF5cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgbGV0IGdvb2RfcGF0aCA9IFBhdGhUb29sLmdldEljb25QYXRoKFwiaXRlbVwiLCBcIjNcIik7XHJcbiAgICAgICAgICAgICAgICBmcmFtZV9hcnJheXMucHVzaChnb29kX3BhdGgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRpcHNfc3RyID0gY2MuanMuZm9ybWF0U3RyKHRleHQsIGdvb2RfcmVzX3BhdGgsIGNvc3QsIGl0ZW1fY2ZnLm5hbWUpXHJcbiAgICAgICAgICAgICAgICBDb21tb25BbGVydC5zaG93KHRpcHNfc3RyLCBVdGlscy5USTE4TihcIuehruWumlwiKSwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kZXIxMzQwNyhkYXRhLm9yZGVyLCBkYXRhLnNob3BfdHlwZSwgMSlcclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgVXRpbHMuVEkxOE4oXCLlj5bmtohcIiksIG51bGwsIG51bGwsIG51bGwsIHsgcmVzQXJyOiBmcmFtZV9hcnJheXMgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIC0t6ZK755+z5LiN6LazXHJcbiAgICAgICAgICAgICAgICBsZXQgY29uZmlnID0gVXRpbHMuZ2V0SXRlbUNvbmZpZyhkYXRhLnBheV90eXBlKVxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIEJhY2twYWNrQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5UaXBzU291cmNlKHRydWUsIGNvbmZpZylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBjbG9zZUNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ29vZHNfaXRlbSlcclxuICAgICAgICAgICAgdGhpcy5nb29kc19pdGVtLmRlbGV0ZU1lKCk7XHJcbiAgICAgICAgdGhpcy5nb29kc19pdGVtID0gbnVsbDtcclxuICAgICAgICB0aGlzLmN0cmwub3Blbk1hbGxCdXlXaW5kb3coZmFsc2UpO1xyXG4gICAgfSxcclxuXHJcbn0pO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBNYWxsQnV5V2luZG93OyJdfQ==
|