|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/hero/view/hero_exhibition_item.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, '88431Z3SJVGCqdRuthx3n7Z', 'hero_exhibition_item');
|
// Scripts/mod/hero/view/hero_exhibition_item.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里是描述这个窗体的作用的
|
// <br/>Create: 2019-01-24 11:43:27
|
// --------------------------------------------------------------------
|
var PathTool = require("pathtool");
|
|
var HeroConst = require("hero_const");
|
|
var HeroCalculate = require("hero_calculate");
|
|
var ExhibitionItem = cc.Class({
|
"extends": BasePanel,
|
ctor: function ctor() {
|
this.rleasePrefab = false;
|
this.prefabPath = PathTool.getPrefabPath("hero", "hero_exhibition_item");
|
|
var HeroBagController = require("hero_controller");
|
|
this.ctrl = HeroBagController.getInstance();
|
this.model = this.ctrl.getModel();
|
this.isCache = true; //缓存
|
},
|
// 可以初始化声明一些变量的
|
initConfig: function initConfig() {
|
this.scale = 1;
|
this.data = null;
|
this.id = null;
|
this.is_allow_select = true; // 是否允许选中和取消选中
|
|
this.is_ui_select = false;
|
this.percent = null;
|
this.percent_lab = null;
|
this.str_tips_obj = null;
|
this.effect = true; // 是否响应按钮过滤
|
},
|
// 初始化一些配置数据,可以用于声明一些变量之类的
|
initPanel: function initPanel() {
|
if (this.cur_pos) {
|
this.setPosition(this.cur_pos.x, this.cur_pos.y);
|
this.cur_pos = null;
|
}
|
|
if (this.scale) {
|
this.root_wnd.scale = this.scale;
|
}
|
|
this.star_item_nd = this.seekChild("star_item");
|
this.stars_container_nd = this.seekChild("stars_container");
|
this.head_icon_nd = this.seekChild("head_icon");
|
this.head_icon_sp = this.seekChild("head_icon", cc.Sprite);
|
this.comp_type_nd = this.seekChild("comp_type");
|
this.comp_type_sp = this.seekChild("comp_type", cc.Sprite);
|
this.background_sp = this.seekChild("background", cc.Sprite);
|
this.level_lb = this.seekChild("level", cc.Label);
|
this.fight_nd = this.seekChild("fight");
|
this.select_item_nd = this.seekChild("select_item");
|
this.lock_item_nd = this.seekChild("lock_item");
|
this.lock_item_sp = this.seekChild("lock_item", cc.Sprite);
|
this.red_icon_nd = this.seekChild("red_icon");
|
this.chip_icon_nd = this.seekChild("chip_icon");
|
this.special_nd = this.seekChild("special");
|
this.special_sp = this.seekChild("special", cc.Sprite);
|
this.comp_type_sp.spriteFrame = null;
|
this.level_lb.string = "";
|
this.red_icon_nd.active = this.red_status || false;
|
|
if (this.data) {
|
this.setData(this.data);
|
} else if (this.id != null) {
|
this.setUnitData(this.id);
|
}
|
},
|
// 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
|
registerEvent: function registerEvent() {},
|
// 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
|
onShow: function onShow(params) {
|
if (this.root_wnd && !this.click_event) {
|
this.root_wnd.on(cc.Node.EventType.TOUCH_END, this.onClickRootWnd, this);
|
this.root_wnd.on(cc.Node.EventType.TOUCH_START, this.onClickRootWnd, this);
|
this.root_wnd.on(cc.Node.EventType.TOUCH_CANCEL, this.onClickRootWnd, this);
|
this.click_event = true;
|
}
|
},
|
// 面板设置不可见的回调,这里做一些不可见的屏蔽处理
|
onHide: function onHide() {},
|
// 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
|
onDelete: function onDelete() {
|
this.unBindEvent();
|
|
if (this.head_icon_sp) {
|
this.head_icon_sp.spriteFrame = null;
|
}
|
|
if (this.root_wnd && this.click_event) {
|
this.root_wnd.off(cc.Node.EventType.TOUCH_END, this.onClickRootWnd, this);
|
this.root_wnd.off(cc.Node.EventType.TOUCH_START, this.onClickRootWnd, this);
|
this.root_wnd.off(cc.Node.EventType.TOUCH_CANCEL, this.onClickRootWnd, this);
|
this.click_event = false;
|
}
|
|
ItemsPool.getInstance().cacheItem(this);
|
},
|
addCallBack: function addCallBack(click_cb) {
|
this.click_cb = click_cb;
|
},
|
addTouchCb: function addTouchCb(touch_cb) {
|
this.touch_cb = touch_cb;
|
},
|
onClickRootWnd: function onClickRootWnd(event) {
|
var is_callback = true;
|
|
if (this.from_type == HeroConst.ExhibitionItemType.eFormFight) {
|
if (!this.data) is_callback = false;
|
}
|
|
if (event.type === cc.Node.EventType.TOUCH_START) {
|
if (this.effect) {
|
this.root_wnd.scale = (this.scale || 1) * 0.9;
|
}
|
|
if (this.touch_cb && is_callback) this.touch_cb(this);
|
}
|
|
if (event.type === cc.Node.EventType.TOUCH_CANCEL) {
|
if (this.effect) {
|
this.root_wnd.scale = this.scale || 1;
|
}
|
}
|
|
if (event.type === cc.Node.EventType.TOUCH_END) {
|
if (this.effect) {
|
this.root_wnd.scale = this.scale || 1;
|
}
|
|
if (this.click_cb && is_callback) {
|
Utils.playButtonSound(3);
|
this.click_cb(this);
|
}
|
}
|
},
|
setButtonEffect: function setButtonEffect(status) {
|
this.effect = status;
|
},
|
setExtendData: function setExtendData(extend_data) {
|
if (!extend_data) return;
|
this.scale = extend_data.scale || 1;
|
this.can_click = extend_data.can_click || false;
|
this.from_type = extend_data.from_type || HeroConst.ExhibitionItemType.eNone;
|
this.boold_type = extend_data.boold_type || null;
|
this.click_delay = extend_data.click_delay || 0;
|
this.hide_star = extend_data.hide_star || false;
|
},
|
// ==============================--
|
// desc:根据单位id设置相关现实
|
// @id:
|
// @return
|
// ==============================--
|
setUnitData: function setUnitData(id) {
|
this.id = id;
|
if (!this.root_wnd) return;
|
id = id || 0;
|
var config = Utils.getUnitConfig(id);
|
|
if (config == null) {
|
this.head_icon_nd.active = false;
|
this.stars_container_nd.active = false;
|
this.level_lb.string = "";
|
var background_res = PathTool.getItemQualityBG(0);
|
var common_res_path = PathTool.getCommonIcomPath(background_res);
|
this.loadRes(common_res_path, function (sf_obj) {
|
this.background_sp.spriteFrame = sf_obj;
|
}.bind(this));
|
|
if (this.comp_type_nd) {
|
this.comp_type_nd.active = false;
|
}
|
} else {
|
this.head_icon_nd.active = true;
|
this.stars_container_nd.active = true;
|
var monster_id = config.monster3;
|
|
if (monster_id) {
|
var monster_config = Utils.getUnitConfig(monster_id);
|
|
if (monster_config) {
|
// 设置头像
|
var head_res_path = PathTool.getHeadRes(monster_config.head_icon);
|
this.loadRes(head_res_path, function (head_sf) {
|
this.head_icon_sp.spriteFrame = head_sf;
|
}.bind(this)); // 设置品质框
|
|
var background_res = PathTool.getItemQualityBG(monster_config.star);
|
var common_res_path = PathTool.getCommonIcomPath(background_res);
|
this.loadRes(common_res_path, function (sf_obj) {
|
this.background_sp.spriteFrame = sf_obj;
|
}.bind(this)); // 设置阵营
|
|
var camp_res = PathTool.getHeroCampRes(monster_config.camp_type);
|
var common_res_path = PathTool.getUIIconPath("common", camp_res);
|
this.loadRes(common_res_path, function (sf_obj) {
|
this.comp_type_sp.spriteFrame = sf_obj;
|
}.bind(this)); // -- 设置星数
|
|
this.updateStars(monster_config.star); // 设置等级
|
|
this.level_lb.string = monster_config.lev.toString();
|
}
|
}
|
}
|
},
|
//头像
|
setHeadImg: function setHeadImg(head_icon) {
|
var head_res_path = PathTool.getHeadRes(head_icon);
|
this.loadRes(head_res_path, function (head_sf) {
|
this.head_icon_sp.spriteFrame = head_sf;
|
}.bind(this));
|
},
|
//品质框
|
setQualityImg: function setQualityImg(quality) {
|
var background_res = PathTool.getItemQualityBG(quality);
|
var common_res_path = PathTool.getCommonIcomPath(background_res);
|
this.loadRes(common_res_path, function (sf_obj) {
|
this.background_sp.spriteFrame = sf_obj;
|
}.bind(this));
|
},
|
//阵营
|
setCampImg: function setCampImg(camp_type) {
|
var camp_res = PathTool.getHeroCampRes(camp_type);
|
var common_res_path = PathTool.getUIIconPath("common", camp_res);
|
this.loadRes(common_res_path, function (sf_obj) {
|
this.comp_type_sp.spriteFrame = sf_obj;
|
}.bind(this));
|
},
|
//等级
|
setLev: function setLev(lev) {
|
this.level_lb.string = lev.toString();
|
},
|
init: function init() {
|
this.setRootScale(1);
|
this.cur_pos = null;
|
this.setPosition(0, 0);
|
this.setData(null);
|
this.setExtendData({});
|
this.record_res_id = null;
|
this.showChipIcon(false); // this.setHeadUnEnabled(true)
|
|
this.showRedPoint(false);
|
|
if (this.bgImg) {
|
this.bgImg.node.active = false;
|
}
|
|
if (this.barNode) {
|
this.barNode.active = false;
|
}
|
|
if (this.lock_icon) {
|
this.lock_icon.node.active = false;
|
}
|
|
this.showLockIcon(false);
|
this.setSelected(false);
|
|
if (this.hireHero) {
|
this.hireHero.node.active = false;
|
}
|
|
this.showStrTips(false);
|
this.showHelpImg(false);
|
|
if (this.fight_nd) {
|
this.fight_nd.active = false;
|
}
|
|
this.str_tips_obj = null;
|
this.cur_visible = false;
|
this.id = null;
|
this.is_allow_select = true; // 是否允许选中和取消选中
|
|
this.is_ui_select = false;
|
this.percent = null;
|
this.percent_lab = null;
|
this.effect = true;
|
this.addCallBack(null);
|
this.addTouchCb(null);
|
|
if (this.special_nd) {
|
this.special_nd.active = false;
|
}
|
|
if (this.root_wnd_cb) {
|
this.root_wnd_cb = null;
|
}
|
|
if (this.head_icon_nd) {
|
this.head_icon_nd.active = true;
|
}
|
|
if (this.root_wnd) {
|
Utils.setChildUnEnabled(this.root_wnd, false);
|
}
|
},
|
setData: function setData(data) {
|
if (this.data && this.item_update_event) {
|
this.data.unbind(this.item_update_event);
|
this.item_update_event = null;
|
}
|
|
this.data = data;
|
|
if (this.root_wnd) {
|
if (!data) {
|
this.head_icon_nd.active = false;
|
this.head_icon_sp.spriteFrame = null;
|
this.stars_container_nd.active = false;
|
this.level_lb.string = "";
|
this.comp_type_sp.spriteFrame = null;
|
var background_res = this.record_res_id = PathTool.getItemQualityBG(0);
|
var common_res_path = PathTool.getCommonIcomPath(background_res);
|
this.loadRes(common_res_path, function (sf_obj) {
|
this.background_sp.spriteFrame = sf_obj;
|
}.bind(this));
|
|
if (this.special_nd.active) {
|
this.special_nd.active = false;
|
}
|
} else {
|
this.head_icon_nd.active = true;
|
this.stars_container_nd.active = true;
|
}
|
|
this.setRootScale(this.scale);
|
this.updateWidget(data);
|
}
|
|
;
|
if (this.data && this.data.UPDATE_PARTNER_ATTR) this.addVoBindEvent();
|
},
|
updateWidget: function updateWidget(info) {
|
if (!info) {
|
this.setSelected(false);
|
return;
|
}
|
|
var data = info;
|
|
if (typeof info == "number") {
|
data = Config.partner_data.data_partner_base[data];
|
if (!data) return;
|
} else {
|
if (info.data) data = info.data;
|
}
|
|
if (!data || data.bid === undefined) return;
|
var star = data.star || data.init_star; // 根节点名称
|
|
this.root_wnd.name = "hero" + "_" + data.bid; // 头像
|
|
this.record_head_id = null;
|
var head_res_path = null;
|
|
if (data.bid === 0) {
|
if (this.default_path) {
|
head_res_path = this.default_path;
|
} else if (data.icon) {
|
head_res_path = PathTool.getIconPath("item", data.icon);
|
}
|
} else {
|
var use_skin = this.findUseSkin(info);
|
|
if (use_skin != null && use_skin != 0) {
|
var skin_config = Config.partner_skin_data.data_skin_info[use_skin];
|
|
if (skin_config) {
|
head_res_path = PathTool.getHeadRes(skin_config.head_id);
|
}
|
} else {
|
var star_key = data.bid + "_" + star;
|
var star_cfg = gdata("partner_data", "data_partner_star", star_key);
|
|
if (star_cfg) {
|
var shwo_head_id = star_cfg.head_id;
|
|
if (!this.record_head_id || this.record_head_id !== shwo_head_id) {
|
this.record_head_id = shwo_head_id;
|
head_res_path = PathTool.getHeadRes(this.record_head_id); // if (data.item_id) {
|
// var item_cfg = gdata("item_data", "data_unit5", data.item_id);
|
// head_res_path = PathTool.getIconPath("item", item_cfg.icon);
|
// }
|
}
|
}
|
}
|
}
|
|
if (head_res_path) {
|
this.loadRes(head_res_path, function (head_sf) {
|
if (this.root_wnd && this.root_wnd.isValid) {
|
this.head_icon_sp.spriteFrame = head_sf;
|
}
|
}.bind(this));
|
} // 背景
|
|
|
var background_res = PathTool.getItemQualityBG(star - 1);
|
|
if (!this.record_res_id || this.record_res_id != background_res) {
|
this.record_res_id = background_res;
|
var common_res_path = PathTool.getCommonIcomPath(background_res);
|
this.loadRes(common_res_path, function (sf_obj) {
|
if (this.root_wnd && this.root_wnd.isValid) {
|
this.background_sp.spriteFrame = sf_obj;
|
}
|
}.bind(this));
|
} // 阵营
|
|
|
var camp_type;
|
var par_config = Config.partner_data.data_partner_base[data.bid];
|
|
if (par_config) {
|
camp_type = par_config.camp_type;
|
}
|
|
if (data.bid == 0 && data.camp_type) {
|
camp_type = data.camp_type;
|
}
|
|
if (camp_type === 0) {
|
this.comp_type_nd.active = false;
|
} else {
|
if (camp_type && this.comp_type_nd) {
|
this.comp_type_nd.active = true;
|
var camp_res = PathTool.getHeroCampRes(camp_type);
|
var common_res_path = PathTool.getUIIconPath("common", camp_res);
|
this.loadRes(common_res_path, function (sf_obj) {
|
if (this.root_wnd && this.root_wnd.isValid) {
|
this.comp_type_sp.spriteFrame = sf_obj;
|
}
|
}.bind(this));
|
}
|
} //碎片
|
|
|
if (this.chip_status != null) {
|
this.showChipIcon(this.chip_status);
|
} // 星星
|
|
|
if (this.hide_star) {
|
this.stars_container_nd.active = false;
|
} else {
|
this.stars_container_nd.active = true;
|
this.updateStars(data.star);
|
} // 等级
|
|
|
if (data.lev) {
|
this.level_lb.string = data.lev;
|
} else {
|
this.level_lb.string = "";
|
} // 图鉴显示变灰逻辑
|
|
|
this.setHeadUnEnabled(true);
|
|
if (this.red_status != null) {
|
this.showRedPoint(this.red_status);
|
} else {
|
this.showRedPoint(false);
|
}
|
|
this.fight_nd.active = false;
|
|
if (this.bgImg) {
|
this.bgImg.node.active = false;
|
}
|
|
if (this.barNode) {
|
this.barNode.active = false;
|
}
|
|
if (this.lock_icon) {
|
this.lock_icon.node.active = false;
|
}
|
|
if (this.from_type == HeroConst.ExhibitionItemType.eHeroBag) {
|
// 英雄界面判断红点
|
this.setSelected(false);
|
this.showRedPoint(false);
|
|
if (HeroCalculate.getInstance().isCheckHeroRedPointByHeroVo(data)) {
|
var is_redpoint = HeroCalculate.getInstance().checkSingleHeroRedPoint(data);
|
this.showRedPoint(is_redpoint);
|
}
|
|
this.fight_nd.active = this.data.isFormDrama();
|
} else if (this.from_type == HeroConst.ExhibitionItemType.eHeroChange) {
|
// 英雄转换界面
|
if (this.lock_icon) {
|
this.lock_icon.node.destroy();
|
this.lock_icon = null;
|
}
|
|
if (this.lock_label) {
|
this.lock_label.node.destroy();
|
this.lock_label = null;
|
} // --设置锁住状态
|
|
|
this.showLockIcon(data.is_locked || false, data.lock_str); // --设置选中状态
|
|
this.setSelected(data.is_ui_select == true);
|
} else if (this.from_type == HeroConst.ExhibitionItemType.ePokedex) {
|
// 图鉴界面是否置灰
|
this.showRedPoint(false);
|
var is_have = false;
|
var par_max_star = this.model.getHadHeroStarBybid(data.bid);
|
if (!par_max_star || par_max_star < data.star) this.setHeadUnEnabled(false);
|
} else if (this.from_type == HeroConst.ExhibitionItemType.eFormFight) {
|
// 布阵
|
this.setSelected(data.is_ui_select);
|
} else if (this.from_type == HeroConst.ExhibitionItemType.eHeroSelect) {
|
//
|
this.setSelected(data.is_ui_select);
|
this.showLockIcon(data.is_ui_lock);
|
} else if (this.from_type == HeroConst.ExhibitionItemType.eUpStar) {
|
// 英雄生星
|
this.setGrayHead(data.head_gray);
|
} else if (this.from_type == HeroConst.ExhibitionItemType.eHeroReset) {
|
// 英雄分解
|
if (!data.is_ui_lock) {
|
this.setSelected(data.is_ui_select);
|
}
|
|
this.showLockIcon(data.is_ui_lock);
|
} else if (this.from_type == HeroConst.ExhibitionItemType.eExpeditFight) {
|
//远征
|
// 血条
|
var blood = 100;
|
|
if (this.boold_type == true) {
|
var HeroExpeditController = require("heroexpedit_controller");
|
|
var partner_id = data.partner_id;
|
|
if (data.partner_id > 100000) {
|
partner_id = data.partner_id - 100000;
|
}
|
|
blood = HeroExpeditController.getInstance().getModel().getHeroBloodById(partner_id, data.rid, data.srv_id);
|
var status = false;
|
status = HeroExpeditController.getInstance().getModel().getHireHero(partner_id, data.rid, data.srv_id);
|
|
if (status == true && data.is_used != null) {
|
// -- self:showHelpImg(true)
|
// --远征的支援标志......2019.1.28。20:37 晓勤特地叫改回来的
|
if (!this.hireHero) {
|
this.hireHero = Utils.createImage(this.root_wnd, null, 20, -63, cc.v2(0, 0));
|
} else {
|
this.hireHero.node.active = true;
|
}
|
|
this.loadRes(PathTool.getUIIconPath("heroexpedit", "txt_heroexpedit_1"), function (resObject) {
|
this.hireHero.spriteFrame = resObject;
|
}.bind(this));
|
} else {
|
if (this.hireHero) {
|
this.hireHero.node.active = false;
|
}
|
}
|
} else {
|
blood = data.blood || 0;
|
}
|
|
this.showProgressbar(blood);
|
|
if (blood <= 0) {
|
this.showStrTips(true, Utils.TI18N("已阵亡"), {
|
c3b: new cc.Color(255, 255, 255, 255)
|
});
|
} else {
|
this.showStrTips(false);
|
} // 设置选中状态
|
|
|
this.setSelected(data.is_ui_select == true);
|
} else if (this.from_type == HeroConst.ExhibitionItemType.eEndLessHero) {
|
// 设置选中状态
|
this.setSelected(data.is_ui_select == true); // 是雇佣兵
|
|
if (data.is_endless) {
|
this.showHelpImg(true);
|
} else {
|
this.showHelpImg(false);
|
}
|
|
if (data.hp_per != null) {
|
this.showProgressbar(data.hp_per);
|
|
if (data.hp_per <= 0) {
|
this.showStrTips(true, Utils.TI18N("已阵亡"), {
|
c3b: new cc.Color(255, 255, 255, 255)
|
});
|
} else {
|
this.showStrTips(false);
|
}
|
}
|
} else if (this.from_type == HeroConst.ExhibitionItemType.eHeroFuse) {
|
var need_count = data.need_count || 0;
|
var total_count = data.total_count || 0;
|
var label = cc.js.formatStr("%s/%s", total_count, need_count);
|
|
if (data.cur_redpoint === 1) {
|
this.showRedPoint(true);
|
} else {
|
this.showRedPoint(false);
|
}
|
|
this.showProgressbar(total_count / need_count * 100, label);
|
this.setSelected(data.is_ui_select == true);
|
} else if (this.from_type == HeroConst.ExhibitionItemType.eVoyage) {
|
//远航
|
this.showStrTips(data.in_task, Utils.TI18N("任务中"));
|
} else {
|
this.setSelected(this.is_ui_select);
|
|
if (this.percent != null) {
|
this.showProgressbar(this.percent, this.percent_lab);
|
}
|
|
if (this.str_tips_obj) {
|
this.showStrTips(this.str_tips_obj.status, this.str_tips_obj.str, this.str_tips_obj.color);
|
}
|
}
|
},
|
unBindEvent: function unBindEvent() {
|
if (this.data && this.item_update_event) {
|
this.data.unbind(this.item_update_event);
|
this.item_update_event = null;
|
}
|
},
|
updateStars: function updateStars(star_num) {
|
var star_res = "";
|
var star_scal = 1;
|
var star;
|
this.special_nd.active = false;
|
this.stars_container_nd.width = 0;
|
this.stars_container_nd.removeAllChildren();
|
|
if (star_num > 0 && star_num <= 5) {
|
star_res = "common_90074";
|
} else if (star_num > 5 && star_num <= 9) {
|
star_num = star_num - 5;
|
star_res = "common_90075";
|
} else if (star_num > 9) {
|
star = star_num - 10;
|
star_num = 1;
|
star_res = "common_90073";
|
star_scal = 1.2;
|
this.special_nd.active = true;
|
var path;
|
|
if (star > 0) {
|
path = PathTool.getUIIconPath("common", "common_90084");
|
} else {
|
path = PathTool.getUIIconPath("common", "common_90076");
|
}
|
|
this.loadRes(path, function (res) {
|
this.special_sp.spriteFrame = res;
|
}.bind(this));
|
}
|
|
for (var star_i = 0; star_i < star_num; star_i++) {
|
var star_nd = cc.instantiate(this.star_item_nd);
|
star_nd.scale = star_scal;
|
var star_sp = star_nd.getComponent(cc.Sprite);
|
var common_res_path = PathTool.getCommonIcomPath(star_res);
|
this.loadRes(common_res_path, function (star_sp, sf_obj) {
|
star_sp.spriteFrame = sf_obj;
|
}.bind(this, star_sp));
|
this.stars_container_nd.addChild(star_nd);
|
|
if (star) {
|
var node = new cc.Node();
|
node.y = -1;
|
var lab = node.addComponent(cc.Label);
|
lab.string = star;
|
lab.fontSize = 15;
|
lab.lineHeight = 16;
|
lab.horizontalAlign = cc.macro.TextAlignment.CENTER;
|
lab.verticalAlign = cc.macro.TextAlignment.CENTER;
|
node.addComponent(cc.LabelOutline).color = new cc.color(0, 0, 0);
|
star_nd.addChild(node);
|
}
|
}
|
},
|
setHeadUnEnabled: function setHeadUnEnabled(status) {
|
var sp_status = cc.Sprite.State.NORMAL;
|
|
if (!status) {
|
sp_status = cc.Sprite.State.GRAY;
|
}
|
|
if (this.head_icon_sp) {
|
this.head_icon_sp.setState(sp_status);
|
}
|
|
if (this.comp_type_sp) {
|
this.comp_type_sp.setState(sp_status);
|
}
|
},
|
setSelected: function setSelected(status) {
|
if (!this.is_allow_select) return;
|
this.is_ui_select = status;
|
|
if (this.root_wnd == null) {
|
return;
|
}
|
|
if (status) {
|
this.select_item_nd.active = true;
|
} else {
|
this.select_item_nd.active = false;
|
}
|
},
|
setRootPosition: function setRootPosition(pos) {
|
if (!pos) return;
|
|
if (this.root_wnd) {
|
this.setPosition(pos.x, pos.y);
|
} else {
|
this.cur_pos = pos;
|
}
|
},
|
setRootScale: function setRootScale(scale) {
|
if (!scale) return;
|
this.scale = scale;
|
|
if (this.root_wnd) {
|
this.root_wnd.scale = scale;
|
}
|
},
|
getWorldPos: function getWorldPos() {
|
if (this.root_wnd) {
|
return this.root_wnd.convertToWorldSpaceAR(cc.v2(0, 0));
|
}
|
|
return null;
|
},
|
updagePositon: function updagePositon(new_pos) {
|
if (!new_pos) return;
|
if (this.root_wnd) this.root_wnd.setPosition(new_pos);
|
},
|
addVoBindEvent: function addVoBindEvent() {
|
if (this.data && this.data.id) {
|
if (this.item_update_event) return;
|
this.item_update_event = this.data.bind(this.data.UPDATE_PARTNER_ATTR, function (hero_vo) {
|
if (this.root_wnd) this.setData(hero_vo);
|
}.bind(this));
|
}
|
},
|
setDefaultHead: function setDefaultHead(icon_path) {
|
if (icon_path) this.default_path = icon_path;
|
},
|
setGrayHead: function setGrayHead(status) {
|
var sp_state = cc.Sprite.State.NORMAL;
|
|
if (status) {
|
sp_state = cc.Sprite.State.GRAY;
|
}
|
|
this.head_icon_sp.setState(sp_state);
|
},
|
// --设置锁
|
showLockIcon: function showLockIcon(bool, str) {
|
var self = this;
|
if (bool == false && !self.lock_icon) return;
|
|
if (!self.lock_icon) {
|
var res = PathTool.getUIIconPath("common", "common_90009");
|
|
var _size = cc.size(this.root_wnd.width, this.root_wnd.height);
|
|
self.lock_icon = Utils.createImage(self.root_wnd, res, 0, 0, cc.v2(0.5, 0.5), true, 0, false);
|
this.loadRes(res, function (resObject) {
|
self.lock_icon.spriteFrame = resObject;
|
}.bind(this));
|
}
|
|
if (str) {
|
if (!self.lock_label) {
|
self.lock_label = Utils.createLabel(22, Config.color_data.data_color16[1], Config.color_data.data_color4[9], size.width / 2, 22, "", this.root_wnd, 2, cc.v2(0.5, 0));
|
}
|
|
self.lock_label.string = str;
|
}
|
|
self.lock_icon.node.active = bool; // -- 锁住的时候某些部分要置灰
|
|
self.setHeadUnEnabled(!bool);
|
|
if (self.partner_type) {// setChildUnEnabled(bool, self.partner_type)
|
}
|
|
if (self.lock_label) {
|
self.lock_label.node.active = bool;
|
}
|
},
|
// 显示支援图片
|
showHelpImg: function showHelpImg(bool) {
|
if (bool == false && !this.help_img) return;
|
|
if (!this.help_img) {
|
var res = PathTool.getCommonIcomPath("txt_cn_common_90014");
|
this.help_img = Utils.createImage(this.root_wnd, res, -this.root_wnd.width / 2 + 20, -this.root_wnd.height / 2 + 20, cc.v2(0.5, 0.5), true, 0, false);
|
this.loadRes(res, function (resObject) {
|
this.help_img.spriteFrame = resObject;
|
}.bind(this));
|
}
|
|
this.help_img.node.active = bool;
|
},
|
// @percent 百分比
|
// @label 进度条中间文字描述
|
showProgressbar: function showProgressbar(percent, label) {
|
this.percent = percent;
|
this.percent_lab = label;
|
if (!this.root_wnd) return;
|
var size = cc.size(118, 15);
|
|
if (this.bgImg) {
|
this.bgImg.node.active = true;
|
}
|
|
if (this.barNode) {
|
this.barNode.active = true;
|
}
|
|
if (!this.comp_bar) {
|
var res = PathTool.getCommonIcomPath("common_90005");
|
var res1 = PathTool.getCommonIcomPath("common_90006");
|
this.bgImg = Utils.createImage(this.root_wnd, null, 0, -this.root_wnd.height / 2 - size.height / 2 - 2, cc.v2(0.5, 0.5), true, 0, true);
|
this.bgImg.node.setContentSize(size.width + 2, size.height + 2);
|
this.loadRes(res, function (resObject) {
|
this.bgImg.spriteFrame = resObject;
|
}.bind(this));
|
this.barNode = new cc.Node();
|
this.barNode.setAnchorPoint(cc.v2(0.5, 0.5));
|
this.barNode.setContentSize(size);
|
this.barNode.setPosition(0, -this.root_wnd.height / 2 - size.height / 2 - 2);
|
this.root_wnd.addChild(this.barNode);
|
var barImg = this.barNode.addComponent(cc.Sprite);
|
barImg.type = cc.Sprite.Type.SLICED;
|
barImg.sizeMode = cc.Sprite.SizeMode.CUSTOM;
|
this.loadRes(res1, function (resObject) {
|
barImg.spriteFrame = resObject;
|
}.bind(this));
|
var comp_bar = this.barNode.addComponent(cc.ProgressBar);
|
comp_bar.barSprite = barImg;
|
comp_bar.mode = cc.ProgressBar.Mode.HORIZONTAL;
|
comp_bar.totalLength = size.width;
|
this.comp_bar = comp_bar;
|
}
|
|
if (this.comp_bar_label) {
|
this.comp_bar_label.string = "";
|
}
|
|
if (label) {
|
if (!this.comp_bar_label) {
|
var text_color = new cc.Color(255, 255, 255, 255);
|
var line_color = new cc.Color(0, 0, 0, 255);
|
var size = cc.size(118, 19);
|
this.comp_bar_label = Utils.createLabel(18, text_color, line_color, size.width / 2, 0, "", this.comp_bar.node, 2, cc.v2(0.5, 0.5));
|
}
|
|
this.comp_bar_label.string = label;
|
}
|
|
this.comp_bar.progress = percent / 100;
|
},
|
// 显示文字提示
|
showStrTips: function showStrTips(status, str, color) {
|
this.str_tips_obj = {
|
status: status,
|
str: str,
|
color: color
|
};
|
if (!this.root_wnd) return;
|
|
if (status) {
|
if (this.lay_tips == null) {
|
this.lay_tips = new cc.Node();
|
this.lay_tips.setAnchorPoint(cc.v2(0.5, 0.5));
|
var size = this.root_wnd.getContentSize();
|
this.lay_tips.setContentSize(size);
|
this.lay_tips.setPosition(0, 0);
|
var graphics_cp = this.lay_tips.addComponent(cc.Graphics);
|
graphics_cp.clear();
|
graphics_cp.fillColor = cc.color(0, 0, 0, 150);
|
graphics_cp.rect(-size.width / 2, -size.height / 2, size.width, size.height);
|
graphics_cp.fill();
|
var c3b = new cc.Color(255, 255, 255, 255);
|
var enable = new cc.Color(132, 0, 0, 255);
|
|
if (color) {
|
c3b = color.c3b || c3b;
|
enable = color.enable || enable;
|
}
|
|
var tips_text = Utils.createLabel(26, c3b, enable, 0, 0, str, this.lay_tips, 1, cc.v2(0.5, 0.5));
|
this.root_wnd.addChild(this.lay_tips);
|
}
|
|
this.lay_tips.active = true;
|
} else {
|
if (this.lay_tips) {
|
this.lay_tips.active = false;
|
}
|
}
|
},
|
findUseSkin: function findUseSkin(info) {
|
if (info.ext_data) {
|
var ext = info.ext_data || {};
|
|
for (var i in ext) {
|
var v = ext[i];
|
|
if (v.key == 5) {
|
return v.val;
|
}
|
}
|
}
|
|
if (info.ext != null) {
|
var _ext = info.ext || {};
|
|
for (var _i in _ext) {
|
var _v = _ext[_i];
|
|
if (_v.key == 5) {
|
return _v.val;
|
}
|
}
|
}
|
|
if (info.use_skin) {
|
return info.use_skin;
|
}
|
|
return 0;
|
},
|
getData: function getData() {
|
return this.data || {};
|
},
|
showRedPoint: function showRedPoint(status) {
|
this.red_status = status;
|
if (this.red_icon_nd) this.red_icon_nd.active = !!status;
|
},
|
showChipIcon: function showChipIcon(status) {
|
this.chip_status = status;
|
|
if (this.chip_icon_nd) {
|
this.chip_icon_nd.active = status;
|
}
|
} // showLockIcon: function(status) {
|
// this.lock_item_nd.active = status;
|
// this.lock_item_sp.setState(!status);
|
// if (status) {
|
// this.setHeadUnEnabled(false);
|
// } else {
|
// this.setHeadUnEnabled(true);
|
// }
|
// },
|
|
});
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxoZXJvXFx2aWV3XFxoZXJvX2V4aGliaXRpb25faXRlbS5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJIZXJvQ29uc3QiLCJIZXJvQ2FsY3VsYXRlIiwiRXhoaWJpdGlvbkl0ZW0iLCJjYyIsIkNsYXNzIiwiQmFzZVBhbmVsIiwiY3RvciIsInJsZWFzZVByZWZhYiIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwiSGVyb0JhZ0NvbnRyb2xsZXIiLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJtb2RlbCIsImdldE1vZGVsIiwiaXNDYWNoZSIsImluaXRDb25maWciLCJzY2FsZSIsImRhdGEiLCJpZCIsImlzX2FsbG93X3NlbGVjdCIsImlzX3VpX3NlbGVjdCIsInBlcmNlbnQiLCJwZXJjZW50X2xhYiIsInN0cl90aXBzX29iaiIsImVmZmVjdCIsImluaXRQYW5lbCIsImN1cl9wb3MiLCJzZXRQb3NpdGlvbiIsIngiLCJ5Iiwicm9vdF93bmQiLCJzdGFyX2l0ZW1fbmQiLCJzZWVrQ2hpbGQiLCJzdGFyc19jb250YWluZXJfbmQiLCJoZWFkX2ljb25fbmQiLCJoZWFkX2ljb25fc3AiLCJTcHJpdGUiLCJjb21wX3R5cGVfbmQiLCJjb21wX3R5cGVfc3AiLCJiYWNrZ3JvdW5kX3NwIiwibGV2ZWxfbGIiLCJMYWJlbCIsImZpZ2h0X25kIiwic2VsZWN0X2l0ZW1fbmQiLCJsb2NrX2l0ZW1fbmQiLCJsb2NrX2l0ZW1fc3AiLCJyZWRfaWNvbl9uZCIsImNoaXBfaWNvbl9uZCIsInNwZWNpYWxfbmQiLCJzcGVjaWFsX3NwIiwic3ByaXRlRnJhbWUiLCJzdHJpbmciLCJhY3RpdmUiLCJyZWRfc3RhdHVzIiwic2V0RGF0YSIsInNldFVuaXREYXRhIiwicmVnaXN0ZXJFdmVudCIsIm9uU2hvdyIsInBhcmFtcyIsImNsaWNrX2V2ZW50Iiwib24iLCJOb2RlIiwiRXZlbnRUeXBlIiwiVE9VQ0hfRU5EIiwib25DbGlja1Jvb3RXbmQiLCJUT1VDSF9TVEFSVCIsIlRPVUNIX0NBTkNFTCIsIm9uSGlkZSIsIm9uRGVsZXRlIiwidW5CaW5kRXZlbnQiLCJvZmYiLCJJdGVtc1Bvb2wiLCJjYWNoZUl0ZW0iLCJhZGRDYWxsQmFjayIsImNsaWNrX2NiIiwiYWRkVG91Y2hDYiIsInRvdWNoX2NiIiwiZXZlbnQiLCJpc19jYWxsYmFjayIsImZyb21fdHlwZSIsIkV4aGliaXRpb25JdGVtVHlwZSIsImVGb3JtRmlnaHQiLCJ0eXBlIiwiVXRpbHMiLCJwbGF5QnV0dG9uU291bmQiLCJzZXRCdXR0b25FZmZlY3QiLCJzdGF0dXMiLCJzZXRFeHRlbmREYXRhIiwiZXh0ZW5kX2RhdGEiLCJjYW5fY2xpY2siLCJlTm9uZSIsImJvb2xkX3R5cGUiLCJjbGlja19kZWxheSIsImhpZGVfc3RhciIsImNvbmZpZyIsImdldFVuaXRDb25maWciLCJiYWNrZ3JvdW5kX3JlcyIsImdldEl0ZW1RdWFsaXR5QkciLCJjb21tb25fcmVzX3BhdGgiLCJnZXRDb21tb25JY29tUGF0aCIsImxvYWRSZXMiLCJzZl9vYmoiLCJiaW5kIiwibW9uc3Rlcl9pZCIsIm1vbnN0ZXIzIiwibW9uc3Rlcl9jb25maWciLCJoZWFkX3Jlc19wYXRoIiwiZ2V0SGVhZFJlcyIsImhlYWRfaWNvbiIsImhlYWRfc2YiLCJzdGFyIiwiY2FtcF9yZXMiLCJnZXRIZXJvQ2FtcFJlcyIsImNhbXBfdHlwZSIsImdldFVJSWNvblBhdGgiLCJ1cGRhdGVTdGFycyIsImxldiIsInRvU3RyaW5nIiwic2V0SGVhZEltZyIsInNldFF1YWxpdHlJbWciLCJxdWFsaXR5Iiwic2V0Q2FtcEltZyIsInNldExldiIsImluaXQiLCJzZXRSb290U2NhbGUiLCJyZWNvcmRfcmVzX2lkIiwic2hvd0NoaXBJY29uIiwic2hvd1JlZFBvaW50IiwiYmdJbWciLCJub2RlIiwiYmFyTm9kZSIsImxvY2tfaWNvbiIsInNob3dMb2NrSWNvbiIsInNldFNlbGVjdGVkIiwiaGlyZUhlcm8iLCJzaG93U3RyVGlwcyIsInNob3dIZWxwSW1nIiwiY3VyX3Zpc2libGUiLCJyb290X3duZF9jYiIsInNldENoaWxkVW5FbmFibGVkIiwiaXRlbV91cGRhdGVfZXZlbnQiLCJ1bmJpbmQiLCJ1cGRhdGVXaWRnZXQiLCJVUERBVEVfUEFSVE5FUl9BVFRSIiwiYWRkVm9CaW5kRXZlbnQiLCJpbmZvIiwiQ29uZmlnIiwicGFydG5lcl9kYXRhIiwiZGF0YV9wYXJ0bmVyX2Jhc2UiLCJiaWQiLCJ1bmRlZmluZWQiLCJpbml0X3N0YXIiLCJuYW1lIiwicmVjb3JkX2hlYWRfaWQiLCJkZWZhdWx0X3BhdGgiLCJpY29uIiwiZ2V0SWNvblBhdGgiLCJ1c2Vfc2tpbiIsImZpbmRVc2VTa2luIiwic2tpbl9jb25maWciLCJwYXJ0bmVyX3NraW5fZGF0YSIsImRhdGFfc2tpbl9pbmZvIiwiaGVhZF9pZCIsInN0YXJfa2V5Iiwic3Rhcl9jZmciLCJnZGF0YSIsInNod29faGVhZF9pZCIsImlzVmFsaWQiLCJwYXJfY29uZmlnIiwiY2hpcF9zdGF0dXMiLCJzZXRIZWFkVW5FbmFibGVkIiwiZUhlcm9CYWciLCJpc0NoZWNrSGVyb1JlZFBvaW50QnlIZXJvVm8iLCJpc19yZWRwb2ludCIsImNoZWNrU2luZ2xlSGVyb1JlZFBvaW50IiwiaXNGb3JtRHJhbWEiLCJlSGVyb0NoYW5nZSIsImRlc3Ryb3kiLCJsb2NrX2xhYmVsIiwiaXNfbG9ja2VkIiwibG9ja19zdHIiLCJlUG9rZWRleCIsImlzX2hhdmUiLCJwYXJfbWF4X3N0YXIiLCJnZXRIYWRIZXJvU3RhckJ5YmlkIiwiZUhlcm9TZWxlY3QiLCJpc191aV9sb2NrIiwiZVVwU3RhciIsInNldEdyYXlIZWFkIiwiaGVhZF9ncmF5IiwiZUhlcm9SZXNldCIsImVFeHBlZGl0RmlnaHQiLCJibG9vZCIsIkhlcm9FeHBlZGl0Q29udHJvbGxlciIsInBhcnRuZXJfaWQiLCJnZXRIZXJvQmxvb2RCeUlkIiwicmlkIiwic3J2X2lkIiwiZ2V0SGlyZUhlcm8iLCJpc191c2VkIiwiY3JlYXRlSW1hZ2UiLCJ2MiIsInJlc09iamVjdCIsInNob3dQcm9ncmVzc2JhciIsIlRJMThOIiwiYzNiIiwiQ29sb3IiLCJlRW5kTGVzc0hlcm8iLCJpc19lbmRsZXNzIiwiaHBfcGVyIiwiZUhlcm9GdXNlIiwibmVlZF9jb3VudCIsInRvdGFsX2NvdW50IiwibGFiZWwiLCJqcyIsImZvcm1hdFN0ciIsImN1cl9yZWRwb2ludCIsImVWb3lhZ2UiLCJpbl90YXNrIiwic3RyIiwiY29sb3IiLCJzdGFyX251bSIsInN0YXJfcmVzIiwic3Rhcl9zY2FsIiwid2lkdGgiLCJyZW1vdmVBbGxDaGlsZHJlbiIsInBhdGgiLCJyZXMiLCJzdGFyX2kiLCJzdGFyX25kIiwiaW5zdGFudGlhdGUiLCJzdGFyX3NwIiwiZ2V0Q29tcG9uZW50IiwiYWRkQ2hpbGQiLCJsYWIiLCJhZGRDb21wb25lbnQiLCJmb250U2l6ZSIsImxpbmVIZWlnaHQiLCJob3Jpem9udGFsQWxpZ24iLCJtYWNybyIsIlRleHRBbGlnbm1lbnQiLCJDRU5URVIiLCJ2ZXJ0aWNhbEFsaWduIiwiTGFiZWxPdXRsaW5lIiwic3Bfc3RhdHVzIiwiU3RhdGUiLCJOT1JNQUwiLCJHUkFZIiwic2V0U3RhdGUiLCJzZXRSb290UG9zaXRpb24iLCJwb3MiLCJnZXRXb3JsZFBvcyIsImNvbnZlcnRUb1dvcmxkU3BhY2VBUiIsInVwZGFnZVBvc2l0b24iLCJuZXdfcG9zIiwiaGVyb192byIsInNldERlZmF1bHRIZWFkIiwiaWNvbl9wYXRoIiwic3Bfc3RhdGUiLCJib29sIiwic2VsZiIsInNpemUiLCJoZWlnaHQiLCJjcmVhdGVMYWJlbCIsImNvbG9yX2RhdGEiLCJkYXRhX2NvbG9yMTYiLCJkYXRhX2NvbG9yNCIsInBhcnRuZXJfdHlwZSIsImhlbHBfaW1nIiwiY29tcF9iYXIiLCJyZXMxIiwic2V0Q29udGVudFNpemUiLCJzZXRBbmNob3JQb2ludCIsImJhckltZyIsIlR5cGUiLCJTTElDRUQiLCJzaXplTW9kZSIsIlNpemVNb2RlIiwiQ1VTVE9NIiwiUHJvZ3Jlc3NCYXIiLCJiYXJTcHJpdGUiLCJtb2RlIiwiTW9kZSIsIkhPUklaT05UQUwiLCJ0b3RhbExlbmd0aCIsImNvbXBfYmFyX2xhYmVsIiwidGV4dF9jb2xvciIsImxpbmVfY29sb3IiLCJwcm9ncmVzcyIsImxheV90aXBzIiwiZ2V0Q29udGVudFNpemUiLCJncmFwaGljc19jcCIsIkdyYXBoaWNzIiwiY2xlYXIiLCJmaWxsQ29sb3IiLCJyZWN0IiwiZmlsbCIsImVuYWJsZSIsInRpcHNfdGV4dCIsImV4dF9kYXRhIiwiZXh0IiwiaSIsInYiLCJrZXkiLCJ2YWwiLCJnZXREYXRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsU0FBUyxHQUFHRCxPQUFPLENBQUMsWUFBRCxDQUF2Qjs7QUFDQSxJQUFJRSxhQUFhLEdBQUdGLE9BQU8sQ0FBQyxnQkFBRCxDQUEzQjs7QUFFQSxJQUFJRyxjQUFjLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQzFCLGFBQVNDLFNBRGlCO0FBRTFCQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyxZQUFMLEdBQW9CLEtBQXBCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQlYsUUFBUSxDQUFDVyxhQUFULENBQXVCLE1BQXZCLEVBQStCLHNCQUEvQixDQUFsQjs7QUFDQSxRQUFJQyxpQkFBaUIsR0FBR1gsT0FBTyxDQUFDLGlCQUFELENBQS9COztBQUNBLFNBQUtZLElBQUwsR0FBWUQsaUJBQWlCLENBQUNFLFdBQWxCLEVBQVo7QUFDQSxTQUFLQyxLQUFMLEdBQWEsS0FBS0YsSUFBTCxDQUFVRyxRQUFWLEVBQWI7QUFDQSxTQUFLQyxPQUFMLEdBQWUsSUFBZixDQU5jLENBTU07QUFDdkIsR0FUeUI7QUFXMUI7QUFDQUMsRUFBQUEsVUFBVSxFQUFDLHNCQUFVO0FBQ2pCLFNBQUtDLEtBQUwsR0FBYSxDQUFiO0FBQ0EsU0FBS0MsSUFB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NEIwQixDQUFULENBQXJCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg6L+Z6YeM5piv5o+P6L+w6L+Z5Liq56qX5L2T55qE5L2c55So55qEXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wMS0yNCAxMTo0MzoyN1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKTtcbnZhciBIZXJvQ29uc3QgPSByZXF1aXJlKFwiaGVyb19jb25zdFwiKTtcbnZhciBIZXJvQ2FsY3VsYXRlID0gcmVxdWlyZShcImhlcm9fY2FsY3VsYXRlXCIpO1xuXG52YXIgRXhoaWJpdGlvbkl0ZW0gPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZVBhbmVsLFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5ybGVhc2VQcmVmYWIgPSBmYWxzZTsgICAgICAgIFxuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwiaGVyb1wiLCBcImhlcm9fZXhoaWJpdGlvbl9pdGVtXCIpO1xuICAgICAgICB2YXIgSGVyb0JhZ0NvbnRyb2xsZXIgPSByZXF1aXJlKFwiaGVyb19jb250cm9sbGVyXCIpO1xuICAgICAgICB0aGlzLmN0cmwgPSBIZXJvQmFnQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpO1xuICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5jdHJsLmdldE1vZGVsKCk7XG4gICAgICAgIHRoaXMuaXNDYWNoZSA9IHRydWU7Ly/nvJPlrZhcbiAgICB9LFxuXG4gICAgLy8g5Y+v5Lul5Yid5aeL5YyW5aOw5piO5LiA5Lqb5Y+Y6YeP55qEXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLnNjYWxlID0gMVxuICAgICAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgICAgICB0aGlzLmlkID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc19hbGxvd19zZWxlY3QgPSB0cnVlOyAgICAgICAgICAgLy8g5piv5ZCm5YWB6K646YCJ5Lit5ZKM5Y+W5raI6YCJ5LitXG4gICAgICAgIHRoaXMuaXNfdWlfc2VsZWN0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGVyY2VudCA9IG51bGw7XG4gICAgICAgIHRoaXMucGVyY2VudF9sYWIgPSBudWxsO1xuICAgICAgICB0aGlzLnN0cl90aXBzX29iaiA9IG51bGw7XG4gICAgICAgIHRoaXMuZWZmZWN0ID0gdHJ1ZTsgICAgICAgICAgICAgICAgIC8vIOaYr+WQpuWTjeW6lOaMiemSrui/h+a7pFxuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdFBhbmVsOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmICh0aGlzLmN1cl9wb3MpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24odGhpcy5jdXJfcG9zLngsdGhpcy5jdXJfcG9zLnkpO1xuICAgICAgICAgICAgdGhpcy5jdXJfcG9zID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMuc2NhbGUpe1xuICAgICAgICAgICAgdGhpcy5yb290X3duZC5zY2FsZSA9IHRoaXMuc2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXJfaXRlbV9uZCAgICAgICA9IHRoaXMuc2Vla0NoaWxkKFwic3Rhcl9pdGVtXCIpO1xuICAgICAgICB0aGlzLnN0YXJzX2NvbnRhaW5lcl9uZCA9IHRoaXMuc2Vla0NoaWxkKFwic3RhcnNfY29udGFpbmVyXCIpO1xuICAgICAgICB0aGlzLmhlYWRfaWNvbl9uZCAgICAgICA9IHRoaXMuc2Vla0NoaWxkKFwiaGVhZF9pY29uXCIpO1xuICAgICAgICB0aGlzLmhlYWRfaWNvbl9zcCAgICAgICA9IHRoaXMuc2Vla0NoaWxkKFwiaGVhZF9pY29uXCIsIGNjLlNwcml0ZSk7XG4gICAgICAgIHRoaXMuY29tcF90eXBlX25kICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJjb21wX3R5cGVcIik7XG4gICAgICAgIHRoaXMuY29tcF90eXBlX3NwICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJjb21wX3R5cGVcIiwgY2MuU3ByaXRlKTtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kX3NwICAgICAgPSB0aGlzLnNlZWtDaGlsZChcImJhY2tncm91bmRcIiwgY2MuU3ByaXRlKTtcbiAgICAgICAgdGhpcy5sZXZlbF9sYiAgICAgICAgICAgPSB0aGlzLnNlZWtDaGlsZChcImxldmVsXCIsIGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy5maWdodF9uZCAgICAgICAgICAgPSB0aGlzLnNlZWtDaGlsZChcImZpZ2h0XCIpO1xuICAgICAgICB0aGlzLnNlbGVjdF9pdGVtX25kICAgICA9IHRoaXMuc2Vla0NoaWxkKFwic2VsZWN0X2l0ZW1cIik7XG4gICAgICAgIHRoaXMubG9ja19pdGVtX25kICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJsb2NrX2l0ZW1cIik7XG4gICAgICAgIHRoaXMubG9ja19pdGVtX3NwICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJsb2NrX2l0ZW1cIiwgY2MuU3ByaXRlKTtcbiAgICAgICAgdGhpcy5yZWRfaWNvbl9uZCAgICAgICAgPSB0aGlzLnNlZWtDaGlsZChcInJlZF9pY29uXCIpO1xuICAgICAgICB0aGlzLmNoaXBfaWNvbl9uZCAgICAgICA9IHRoaXMuc2Vla0NoaWxkKFwiY2hpcF9pY29uXCIpXG4gICAgICAgIHRoaXMuc3BlY2lhbF9uZCAgICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJzcGVjaWFsXCIpXG4gICAgICAgIHRoaXMuc3BlY2lhbF9zcCAgICAgICAgID0gdGhpcy5zZWVrQ2hpbGQoXCJzcGVjaWFsXCIsY2MuU3ByaXRlKVxuICAgICAgIFxuXG4gICAgICAgIHRoaXMuY29tcF90eXBlX3NwLnNwcml0ZUZyYW1lID0gbnVsbDtcbiAgICAgICAgdGhpcy5sZXZlbF9sYi5zdHJpbmcgPSBcIlwiO1xuXG4gICAgICAgIHRoaXMucmVkX2ljb25fbmQuYWN0aXZlID0gdGhpcy5yZWRfc3RhdHVzIHx8IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YSh0aGlzLmRhdGEpO1xuICAgICAgICB9ZWxzZSBpZih0aGlzLmlkIT1udWxsKXtcbiAgICAgICAgICAgIHRoaXMuc2V0VW5pdERhdGEodGhpcy5pZCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5LqL5Lu255uR5ZCs55qE5o6l5Y+jLOS4jemcgOimgeaJi+WKqOiwg+eUqCzlpoLmnpzmmK/kvb/nlKhnY29yZS5HbG9iYWxFdmVudOebkeWQrCzlj6/ku6Xnm7TmjqXosIPnlKhhZGRHbG9iYWxFdmVudFxuICAgIHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oKSB7XG5cbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwg+WPr+S7peiuvue9ruS4gOS6m+aVsOaNruS6hlxuICAgIG9uU2hvdzpmdW5jdGlvbihwYXJhbXMpe1xuICAgICAgICBpZiAodGhpcy5yb290X3duZCAmJiAhdGhpcy5jbGlja19ldmVudCkge1xuICAgICAgICAgICAgdGhpcy5yb290X3duZC5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIHRoaXMub25DbGlja1Jvb3RXbmQsIHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5yb290X3duZC5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9TVEFSVCwgdGhpcy5vbkNsaWNrUm9vdFduZCwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLnJvb3Rfd25kLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0NBTkNFTCwgdGhpcy5vbkNsaWNrUm9vdFduZCwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNsaWNrX2V2ZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDpnaLmnb/orr7nva7kuI3lj6/op4HnmoTlm57osIMs6L+Z6YeM5YGa5LiA5Lqb5LiN5Y+v6KeB55qE5bGP6JS95aSE55CGXG4gICAgb25IaWRlOmZ1bmN0aW9uKCl7XG5cbiAgICB9LFxuXG4gICAgLy8g5b2T6Z2i5p2/5LuO5Li76IqC54K56YeK5pS+5o6J55qE6LCD55So5o6l5Y+jLOmcgOimgeaJi+WKqOiwg+eUqCzogIzkuJTkuZ/kuIDlrpropoHosIPnlKhcbiAgICBvbkRlbGV0ZTpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLnVuQmluZEV2ZW50KCk7XG4gICAgICAgIGlmKHRoaXMuaGVhZF9pY29uX3NwKXtcbiAgICAgICAgICAgIHRoaXMuaGVhZF9pY29uX3NwLnNwcml0ZUZyYW1lID0gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQgJiYgdGhpcy5jbGlja19ldmVudCkge1xuICAgICAgICAgICAgdGhpcy5yb290X3duZC5vZmYoY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCB0aGlzLm9uQ2xpY2tSb290V25kLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucm9vdF93bmQub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX1NUQVJULCB0aGlzLm9uQ2xpY2tSb290V25kLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucm9vdF93bmQub2ZmKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0NBTkNFTCwgdGhpcy5vbkNsaWNrUm9vdFduZCwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNsaWNrX2V2ZW50ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgSXRlbXNQb29sLmdldEluc3RhbmNlKCkuY2FjaGVJdGVtKHRoaXMpO1xuXG4gICAgfSxcblxuICAgIGFkZENhbGxCYWNrOiBmdW5jdGlvbihjbGlja19jYikge1xuICAgICAgICB0aGlzLmNsaWNrX2NiID0gY2xpY2tfY2JcbiAgICB9LFxuXG4gICAgYWRkVG91Y2hDYjogZnVuY3Rpb24odG91Y2hfY2IpIHtcbiAgICAgICAgdGhpcy50b3VjaF9jYiA9IHRvdWNoX2NiO1xuICAgIH0sXG5cbiAgICBvbkNsaWNrUm9vdFduZDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgdmFyIGlzX2NhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuZnJvbV90eXBlID09IEhlcm9Db25zdC5FeGhpYml0aW9uSXRlbVR5cGUuZUZvcm1GaWdodCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGEpIFxuICAgICAgICAgICAgICAgIGlzX2NhbGxiYWNrID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfU1RBUlQpIHtcbiAgICAgICAgICAgIGlmKHRoaXMuZWZmZWN0KXtcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3Rfd25kLnNjYWxlID0gKHRoaXMuc2NhbGUgfHwgMSkgKiAwLjk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy50b3VjaF9jYiAmJiBpc19jYWxsYmFjaylcbiAgICAgICAgICAgICAgICB0aGlzLnRvdWNoX2NiKHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0NBTkNFTCkge1xuICAgICAgICAgICAgaWYodGhpcy5lZmZlY3Qpe1xuICAgICAgICAgICAgICAgIHRoaXMucm9vdF93bmQuc2NhbGUgPSB0aGlzLnNjYWxlIHx8IDE7ICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5EKSB7XG4gICAgICAgICAgICBpZih0aGlzLmVmZmVjdCl7XG4gICAgICAgICAgICAgICAgdGhpcy5yb290X3duZC5zY2FsZSA9IHRoaXMuc2NhbGUgfHwgMTsgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jbGlja19jYiAmJiBpc19jYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgzKVxuICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tfY2IodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNldEJ1dHRvbkVmZmVjdChzdGF0dXMpe1xuICAgICAgICB0aGlzLmVmZmVjdCA9IHN0YXR1c1xuICAgIH0sXG4gICAgc2V0RXh0ZW5kRGF0YTogZnVuY3Rpb24oZXh0ZW5kX2RhdGEpIHtcbiAgICAgICAgaWYgKCFleHRlbmRfZGF0YSkgcmV0dXJuO1xuICAgICAgICB0aGlzLnNjYWxlID0gZXh0ZW5kX2RhdGEuc2NhbGUgfHwgMTtcbiAgICAgICAgdGhpcy5jYW5fY2xpY2sgPSBleHRlbmRfZGF0YS5jYW5fY2xpY2sgfHwgZmFsc2U7XG4gICAgICAgIHRoaXMuZnJvbV90eXBlID0gZXh0ZW5kX2RhdGEuZnJvbV90eXBlIHx8IEhlcm9Db25zdC5FeGhpYml0aW9uSXRlbVR5cGUuZU5vbmU7XG4gICAgICAgIHRoaXMuYm9vbGRfdHlwZSA9IGV4dGVuZF9kYXRhLmJvb2xkX3R5cGUgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5jbGlja19kZWxheSA9IGV4dGVuZF9kYXRhLmNsaWNrX2RlbGF5IHx8IDA7XG4gICAgICAgIHRoaXMuaGlkZV9zdGFyID0gZXh0ZW5kX2RhdGEuaGlkZV9zdGFyIHx8IGZhbHNlO1xuICAgIH0sXG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLVxuICAgIC8vIGRlc2M65qC55o2u5Y2V5L2NaWTorr7nva7nm7jlhbPnjrDlrp5cbiAgICAvLyBAaWQ6XG4gICAgLy8gQHJldHVybiBcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLVxuICAgIHNldFVuaXREYXRhOmZ1bmN0aW9uKGlkKXtcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICBpZighdGhpcy5yb290X3duZClyZXR1cm47XG4gICAgICAgIGlkID0gaWQgfHwgMDtcbiAgICAgICAgdmFyIGNvbmZpZyA9IFV0aWxzLmdldFVuaXRDb25maWcoaWQpO1xuICAgICAgICBpZihjb25maWcgPT0gbnVsbCl7XG4gICAgICAgICAgICB0aGlzLmhlYWRfaWNvbl9uZC5hY3RpdmUgPWZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zdGFyc19jb250YWluZXJfbmQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxldmVsX2xiLnN0cmluZyA9IFwiXCI7XG4gICAgICAgICAgICB2YXIgYmFja2dyb3VuZF9yZXMgPSBQYXRoVG9vbC5nZXRJdGVtUXVhbGl0eUJHKDApO1xuICAgICAgICAgICAgdmFyIGNvbW1vbl9yZXNfcGF0aCA9IFBhdGhUb29sLmdldENvbW1vbkljb21QYXRoKGJhY2tncm91bmRfcmVzKTtcbiAgICAgICAgICAgIHRoaXMubG9hZFJlcyhjb21tb25fcmVzX3BhdGgsIGZ1bmN0aW9uKHNmX29iail7XG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kX3NwLnNwcml0ZUZyYW1lID0gc2Zfb2JqO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcblxuICAgICAgICAgICAgaWYodGhpcy5jb21wX3R5cGVfbmQpe1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcF90eXBlX25kLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuaGVhZF9pY29uX25kLmFjdGl2ZSA9dHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnNfY29udGFpbmVyX25kLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIFxuICAgICAgICAgICAgdmFyIG1vbnN0ZXJfaWQgPSBjb25maWcubW9uc3RlcjM7XG4gICAgICAgICAgICBpZihtb25zdGVyX2lkKXtcbiAgICAgICAgICAgICAgICB2YXIgbW9uc3Rlcl9jb25maWcgPSBVdGlscy5nZXRVbml0Q29uZmlnKG1vbnN0ZXJfaWQpO1xuICAgICAgICAgICAgICAgIGlmKG1vbnN0ZXJfY29uZmlnKXtcbiAgICAgICAgICAgICAgICAgICAgLy8g6K6+572u5aS05YOPXG4gICAgICAgICAgICAgICAgICAgIHZhciBoZWFkX3Jlc19wYXRoID0gUGF0aFRvb2wuZ2V0SGVhZFJlcyhtb25zdGVyX2NvbmZpZy5oZWFkX2ljb24pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRSZXMoaGVhZF9yZXNfcGF0aCwgZnVuY3Rpb24oaGVhZF9zZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkX2ljb25fc3Auc3ByaXRlRnJhbWUgPSBoZWFkX3NmO1xuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIOiuvue9ruWTgei0qOahhlxuICAgICAgICAgICAgICAgICAgICB2YXIgYmFja2dyb3VuZF9yZXMgPSBQYXRoVG9vbC5nZXRJdGVtUXVhbGl0eUJHKG1vbnN0ZXJfY29uZmlnLnN0YXIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29tbW9uX3Jlc19wYXRoID0gUGF0aFRvb2wuZ2V0Q29tbW9uSWNvbVBhdGgoYmFja2dyb3VuZF9yZXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRSZXMoY29tbW9uX3Jlc19wYXRoLCBmdW5jdGlvbihzZl9vYmope1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kX3NwLnNwcml0ZUZyYW1lID0gc2Zfb2JqO1xuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIOiuvue9rumYteiQpVxuICAgICAgICAgICAgICAgICAgICB2YXIgY2FtcF9yZXMgPSBQYXRoVG9vbC5nZXRIZXJvQ2FtcFJlcyhtb25zdGVyX2NvbmZpZy5jYW1wX3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29tbW9uX3Jlc19wYXRoID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImNvbW1vblwiLCBjYW1wX3Jlcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFJlcyhjb21tb25fcmVzX3BhdGgsIGZ1bmN0aW9uKHNmX29iail7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBfdHlwZV9zcC5zcHJpdGVGcmFtZSA9IHNmX29iajtcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIC0tIOiuvue9ruaYn+aVsFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXJzKG1vbnN0ZXJfY29uZmlnLnN0YXIpOyBcbiAgICAgICAgICAgICAgICAgICAgLy8g6K6+572u562J57qnXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGV2ZWxfbGIuc3RyaW5nID0gbW9uc3Rlcl9jb25maWcubGV2LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICAvL+WktOWDj1xuICAgIHNldEhlYWRJbWcoaGVhZF9pY29uKXtcbiAgICAgICAgdmFyIGhlYWRfcmVzX3BhdGggPSBQYXRoVG9vbC5nZXRIZWFkUmVzKGhlYWRfaWNvbik7XG4gICAgICAgIHRoaXMubG9hZFJlcyhoZWFkX3Jlc19wYXRoLCBmdW5jdGlvbihoZWFkX3NmKSB7XG4gICAgICAgICAgICB0aGlzLmhlYWRfaWNvbl9zcC5zcHJpdGVGcmFtZSA9IGhlYWRfc2Y7XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgfSxcbiAgICAvL+WTgei0qOahhlxuICAgIHNldFF1YWxpdHlJbWcocXVhbGl0eSl7XG4gICAgICAgIHZhciBiYWNrZ3JvdW5kX3JlcyA9IFBhdGhUb29sLmdldEl0ZW1RdWFsaXR5QkcocXVhbGl0eSk7XG4gICAgICAgIHZhciBjb21tb25fcmVzX3BhdGggPSBQYXRoVG9vbC5nZXRDb21tb25JY29tUGF0aChiYWNrZ3JvdW5kX3Jlcyk7XG4gICAgICAgIHRoaXMubG9hZFJlcyhjb21tb25fcmVzX3BhdGgsIGZ1bmN0aW9uKHNmX29iail7XG4gICAgICAgICAgICB0aGlzLmJhY2tncm91bmRfc3Auc3ByaXRlRnJhbWUgPSBzZl9vYmo7XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgfSxcbiAgICAvL+mYteiQpVxuICAgIHNldENhbXBJbWcoY2FtcF90eXBlKXtcbiAgICAgICAgdmFyIGNhbXBfcmVzID0gUGF0aFRvb2wuZ2V0SGVyb0NhbXBSZXMoY2FtcF90eXBlKTtcbiAgICAgICAgdmFyIGNvbW1vbl9yZXNfcGF0aCA9IFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJjb21tb25cIiwgY2FtcF9yZXMpO1xuICAgICAgICB0aGlzLmxvYWRSZXMoY29tbW9uX3Jlc19wYXRoLCBmdW5jdGlvbihzZl9vYmope1xuICAgICAgICAgICAgdGhpcy5jb21wX3R5cGVfc3Auc3ByaXRlRnJhbWUgPSBzZl9vYmo7XG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICB9LFxuICAgIC8v562J57qnXG4gICAgc2V0TGV2KGxldil7XG4gICAgICAgIHRoaXMubGV2ZWxfbGIuc3RyaW5nID0gbGV2LnRvU3RyaW5nKCk7XG4gICAgfSxcbiAgICBpbml0KCl7XG4gICAgICAgIHRoaXMuc2V0Um9vdFNjYWxlKDEpXG4gICAgICAgIHRoaXMuY3VyX3BvcyA9IG51bGw7XG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oMCwwKVxuICAgICAgICB0aGlzLnNldERhdGEobnVsbClcbiAgICAgICAgdGhpcy5zZXRFeHRlbmREYXRhKHt9KVxuICAgICAgICB0aGlzLnJlY29yZF9yZXNfaWQgPSBudWxsO1xuICAgICAgICB0aGlzLnNob3dDaGlwSWNvbihmYWxzZSlcbiAgICAgICAgLy8gdGhpcy5zZXRIZWFkVW5FbmFibGVkKHRydWUpXG4gICAgICAgIHRoaXMuc2hvd1JlZFBvaW50KGZhbHNlKVxuICAgICAgICBpZih0aGlzLmJnSW1nKXtcbiAgICAgICAgICAgIHRoaXMuYmdJbWcubm9kZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLmJhck5vZGUpe1xuICAgICAgICAgICAgdGhpcy5iYXJOb2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMubG9ja19pY29uKXtcbiAgICAgICAgICAgIHRoaXMubG9ja19pY29uLm5vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93TG9ja0ljb24oZmFsc2UpXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQoZmFsc2UpXG4gICAgICAgIGlmKHRoaXMuaGlyZUhlcm8pe1xuICAgICAgICAgICAgdGhpcy5oaXJlSGVyby5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd1N0clRpcHMoZmFsc2UpO1xuICAgICAgICB0aGlzLnNob3dIZWxwSW1nKGZhbHNlKVxuICAgICAgICBpZih0aGlzLmZpZ2h0X25kKXtcbiAgICAgICAgICAgIHRoaXMuZmlnaHRfbmQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0cl90aXBzX29iaiA9IG51bGw7XG4gICAgICAgIHRoaXMuY3VyX3Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pZCA9IG51bGw7XG4gICAgICAgIHRoaXMuaXNfYWxsb3dfc2VsZWN0ID0gdHJ1ZTsgICAgICAgICAgIC8vIOaYr+WQpuWFgeiuuOmAieS4reWSjOWPlua2iOmAieS4rVxuICAgICAgICB0aGlzLmlzX3VpX3NlbGVjdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBlcmNlbnQgPSBudWxsO1xuICAgICAgICB0aGlzLnBlcmNlbnRfbGFiID0gbnVsbDtcbiAgICAgICAgdGhpcy5lZmZlY3QgPSB0cnVlOyAgICAgIFxuICAgICAgICB0aGlzLmFkZENhbGxCYWNrKG51bGwpO1xuICAgICAgICB0aGlzLmFkZFRvdWNoQ2IobnVsbClcbiAgICAgICAgaWYodGhpcy5zcGVjaWFsX25kKXtcbiAgICAgICAgICAgIHRoaXMuc3BlY2lhbF9uZC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLnJvb3Rfd25kX2NiKXtcbiAgICAgICAgICAgIHRoaXMucm9vdF93bmRfY2IgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuaGVhZF9pY29uX25kKXtcbiAgICAgICAgICAgIHRoaXMuaGVhZF9pY29uX25kLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5yb290X3duZCl7XG4gICAgICAgICAgICBVdGlscy5zZXRDaGlsZFVuRW5hYmxlZCh0aGlzLnJvb3Rfd25kLGZhbHNlKVxuICAgICAgICB9XG4gICAgfSxcbiAgICBzZXREYXRhOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEgJiZ0aGlzLml0ZW1fdXBkYXRlX2V2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEudW5iaW5kKHRoaXMuaXRlbV91cGRhdGVfZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5pdGVtX3VwZGF0ZV9ldmVudCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICBpZiAodGhpcy5yb290X3duZCkge1xuICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkX2ljb25fbmQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkX2ljb25fc3Auc3ByaXRlRnJhbWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnNfY29udGFpbmVyX25kLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMubGV2ZWxfbGIuc3RyaW5nID0gXCJcIjtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBfdHlwZV9zcC5zcHJpdGVGcmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdmFyIGJhY2tncm91bmRfcmVzID0gdGhpcy5yZWNvcmRfcmVzX2lkID0gUGF0aFRvb2wuZ2V0SXRlbVF1YWxpdHlCRygwKTtcbiAgICAgICAgICAgICAgICB2YXIgY29tbW9uX3Jlc19wYXRoID0gUGF0aFRvb2wuZ2V0Q29tbW9uSWNvbVBhdGgoYmFja2dyb3VuZF9yZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZFJlcyhjb21tb25fcmVzX3BhdGgsIGZ1bmN0aW9uKHNmX29iail7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmFja2dyb3VuZF9zcC5zcHJpdGVGcmFtZSA9IHNmX29iajtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zcGVjaWFsX25kLmFjdGl2ZSl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BlY2lhbF9uZC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhZF9pY29uX25kLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFyc19jb250YWluZXJfbmQuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0Um9vdFNjYWxlKHRoaXMuc2NhbGUpXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVdpZGdldChkYXRhKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEuVVBEQVRFX1BBUlRORVJfQVRUUilcbiAgICAgICAgICAgIHRoaXMuYWRkVm9CaW5kRXZlbnQoKTtcbiAgICB9LFxuXG4gICAgdXBkYXRlV2lkZ2V0OiBmdW5jdGlvbihpbmZvKSB7XG4gICAgICAgIGlmICghaW5mbykge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZChmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRhdGEgPSBpbmZvO1xuICAgICAgICBpZiAodHlwZW9mIGluZm8gPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgZGF0YSA9IENvbmZpZy5wYXJ0bmVyX2RhdGEuZGF0YV9wYXJ0bmVyX2Jhc2VbZGF0YV07XG4gICAgICAgICAgICBpZiAoIWRhdGEpIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpbmZvLmRhdGEpXG4gICAgICAgICAgICAgICAgZGF0YSA9IGluZm8uZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRhdGEgfHwgZGF0YS5iaWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG4gICAgICAgIGxldCBzdGFyID0gZGF0YS5zdGFyIHx8IGRhdGEuaW5pdF9zdGFyXG4gICAgICAgIC8vIOagueiKgueCueWQjeensFxuICAgICAgICB0aGlzLnJvb3Rfd25kLm5hbWUgPSBcImhlcm9cIiArIFwiX1wiICsgZGF0YS5iaWRcblxuICAgICAgICAvLyDlpLTlg49cbiAgICAgICAgdGhpcy5yZWNvcmRfaGVhZF9pZCA9IG51bGw7XG4gICAgICAgIHZhciBoZWFkX3Jlc19wYXRoID0gbnVsbDtcbiAgICAgICAgaWYgKGRhdGEuYmlkID09PSAwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0X3BhdGgpe1xuICAgICAgICAgICAgICAgIGhlYWRfcmVzX3BhdGggPSB0aGlzLmRlZmF1bHRfcGF0aDtcbiAgICAgICAgICAgIH1lbHNlIGlmKGRhdGEuaWNvbil7XG4gICAgICAgICAgICAgICAgaGVhZF9yZXNfcGF0aCA9IFBhdGhUb29sLmdldEljb25QYXRoKFwiaXRlbVwiLCBkYXRhLmljb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHVzZV9za2luID0gdGhpcy5maW5kVXNlU2tpbihpbmZvKTtcbiAgICAgICAgICAgIGlmKHVzZV9za2luICE9IG51bGwgJiYgdXNlX3NraW4gIT0gMCl7XG4gICAgICAgICAgICAgICAgbGV0IHNraW5fY29uZmlnID0gQ29uZmlnLnBhcnRuZXJfc2tpbl9kYXRhLmRhdGFfc2tpbl9pbmZvW3VzZV9za2luXTtcbiAgICAgICAgICAgICAgICBpZihza2luX2NvbmZpZyl7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRfcmVzX3BhdGggPSBQYXRoVG9vbC5nZXRIZWFkUmVzKHNraW5fY29uZmlnLmhlYWRfaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHZhciBzdGFyX2tleSA9IGRhdGEuYmlkICsgXCJfXCIgKyBzdGFyO1xuICAgICAgICAgICAgICAgIHZhciBzdGFyX2NmZyA9IGdkYXRhKFwicGFydG5lcl9kYXRhXCIsIFwiZGF0YV9wYXJ0bmVyX3N0YXJcIiwgc3Rhcl9rZXkpO1xuICAgICAgICAgICAgICAgIGlmIChzdGFyX2NmZykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2h3b19oZWFkX2lkID0gc3Rhcl9jZmcuaGVhZF9pZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlY29yZF9oZWFkX2lkIHx8IHRoaXMucmVjb3JkX2hlYWRfaWQgIT09IHNod29faGVhZF9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvcmRfaGVhZF9pZCA9IHNod29faGVhZF9pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRfcmVzX3BhdGggPSBQYXRoVG9vbC5nZXRIZWFkUmVzKHRoaXMucmVjb3JkX2hlYWRfaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAoZGF0YS5pdGVtX2lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdmFyIGl0ZW1fY2ZnID0gZ2RhdGEoXCJpdGVtX2RhdGFcIiwgXCJkYXRhX3VuaXQ1XCIsIGRhdGEuaXRlbV9pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgaGVhZF9yZXNfcGF0aCA9IFBhdGhUb29sLmdldEljb25QYXRoKFwiaXRlbVwiLCBpdGVtX2NmZy5pY29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gICAgICAgICAgIFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhlYWRfcmVzX3BhdGgpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFJlcyhoZWFkX3Jlc19wYXRoLCBmdW5jdGlvbihoZWFkX3NmKSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5yb290X3duZCAmJiB0aGlzLnJvb3Rfd25kLmlzVmFsaWQpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWRfaWNvbl9zcC5zcHJpdGVGcmFtZSA9IGhlYWRfc2Y7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOiDjOaZr1xuICAgICAgICB2YXIgYmFja2dyb3VuZF9yZXMgPSAgUGF0aFRvb2wuZ2V0SXRlbVF1YWxpdHlCRyhzdGFyIC0xKTtcbiAgICAgICAgaWYgKCF0aGlzLnJlY29yZF9yZXNfaWQgfHwgdGhpcy5yZWNvcmRfcmVzX2lkICE9IGJhY2tncm91bmRfcmVzKSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZF9yZXNfaWQgPSBiYWNrZ3JvdW5kX3JlcztcbiAgICAgICAgICAgIHZhciBjb21tb25fcmVzX3BhdGggPSBQYXRoVG9vbC5nZXRDb21tb25JY29tUGF0aChiYWNrZ3JvdW5kX3Jlcyk7XG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMoY29tbW9uX3Jlc19wYXRoLCBmdW5jdGlvbihzZl9vYmope1xuICAgICAgICAgICAgICAgIGlmKHRoaXMucm9vdF93bmQgJiYgdGhpcy5yb290X3duZC5pc1ZhbGlkKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kX3NwLnNwcml0ZUZyYW1lID0gc2Zfb2JqO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8v44CA6Zi16JClXG4gICAgICAgIHZhciBjYW1wX3R5cGVcbiAgICAgICAgdmFyIHBhcl9jb25maWcgPSBDb25maWcucGFydG5lcl9kYXRhLmRhdGFfcGFydG5lcl9iYXNlW2RhdGEuYmlkXTsgXG4gICAgICAgIGlmIChwYXJfY29uZmlnKXtcbiAgICAgICAgICAgIGNhbXBfdHlwZSA9IHBhcl9jb25maWcuY2FtcF90eXBlXG4gICAgICAgIH1cbiAgICAgICAgaWYoZGF0YS5iaWQgPT0gMCAmJiBkYXRhLmNhbXBfdHlwZSl7XG4gICAgICAgICAgICBjYW1wX3R5cGUgPSBkYXRhLmNhbXBfdHlwZVxuICAgICAgICB9XG4gICAgICAgIGlmIChjYW1wX3R5cGUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29tcF90eXBlX25kLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNhbXBfdHlwZSAmJiB0aGlzLmNvbXBfdHlwZV9uZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcF90eXBlX25kLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIGNhbXBfcmVzID0gUGF0aFRvb2wuZ2V0SGVyb0NhbXBSZXMoY2FtcF90eXBlKTtcbiAgICAgICAgICAgICAgICB2YXIgY29tbW9uX3Jlc19wYXRoID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImNvbW1vblwiLCBjYW1wX3Jlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUmVzKGNvbW1vbl9yZXNfcGF0aCwgZnVuY3Rpb24oc2Zfb2JqKXtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5yb290X3duZCAmJiB0aGlzLnJvb3Rfd25kLmlzVmFsaWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wX3R5cGVfc3Auc3ByaXRlRnJhbWUgPSBzZl9vYmo7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/noo7niYdcbiAgICAgICAgaWYodGhpcy5jaGlwX3N0YXR1cyAhPSBudWxsKXtcbiAgICAgICAgICAgIHRoaXMuc2hvd0NoaXBJY29uKHRoaXMuY2hpcF9zdGF0dXMpXG4gICAgICAgIH1cbiAgICAgICAgLy8g5pif5pifXG4gICAgICAgIGlmICh0aGlzLmhpZGVfc3Rhcikge1xuICAgICAgICAgICAgdGhpcy5zdGFyc19jb250YWluZXJfbmQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJzX2NvbnRhaW5lcl9uZC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdGFycyhkYXRhLnN0YXIpOyAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICB9XG5cbiAgICAgICAgLy8g562J57qnXG4gICAgICAgIGlmIChkYXRhLmxldikge1xuICAgICAgICAgICAgdGhpcy5sZXZlbF9sYi5zdHJpbmcgPSBkYXRhLmxldjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGV2ZWxfbGIuc3RyaW5nID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICAvLyDlm77pibTmmL7npLrlj5jngbDpgLvovpFcbiAgICAgICAgdGhpcy5zZXRIZWFkVW5FbmFibGVkKHRydWUpO1xuICAgICAgICBpZih0aGlzLnJlZF9zdGF0dXMgIT0gbnVsbCl7XG4gICAgICAgICAgICB0aGlzLnNob3dSZWRQb2ludCh0aGlzLnJlZF9zdGF0dXMpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5zaG93UmVkUG9pbnQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlnaHRfbmQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmKHRoaXMuYmdJbWcpe1xuICAgICAgICAgICAgdGhpcy5iZ0ltZy5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuYmFyTm9kZSl7XG4gICAgICAgICAgICB0aGlzLmJhck5vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5sb2NrX2ljb24pe1xuICAgICAgICAgICAgdGhpcy5sb2NrX2ljb24ubm9kZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mcm9tX3R5cGUgPT0gSGVyb0NvbnN0LkV4aGliaXRpb25JdGVtVHlwZS5lSGVyb0JhZykgeyAgICAgICAgICAgLy8g6Iux6ZuE55WM6Z2i5Yik5pat57qi54K5XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1JlZFBvaW50KGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChIZXJvQ2FsY3VsYXRlLmdldEluc3RhbmNlKCkuaXNDaGVja0hlcm9SZWRQb2ludEJ5SGVyb1ZvKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlzX3JlZHBvaW50ID0gSGVyb0NhbGN1bGF0ZS5nZXRJbnN0YW5jZSgpLmNoZWNrU2luZ2xlSGVyb1JlZFBvaW50KGRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1JlZFBvaW50KGlzX3JlZHBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmlnaHRfbmQuYWN0aXZlID0gdGhpcy5kYXRhLmlzRm9ybURyYW1hKCk7XG5cbiAgICAgICAgfWVsc2UgaWYodGhpcy5mcm9tX3R5cGUgPT0gSGVyb0NvbnN0LkV4aGliaXRpb25JdGVtVHlwZS5lSGVyb0NoYW5nZSl7ICAgICAvLyDoi7Hpm4TovazmjaLnlYzpnaJcbiAgICAgICAgICAgIGlmKHRoaXMubG9ja19pY29uKXtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2tfaWNvbi5ub2RlLmRlc3Ryb3koKVxuICAgICAgICAgICAgICAgIHRoaXMubG9ja19pY29uID0gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodGhpcy5sb2NrX2xhYmVsKXtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2tfbGFiZWwubm9kZS5kZXN0cm95KClcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2tfbGFiZWwgPSBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAtLeiuvue9rumUgeS9j+eKtuaAgVxuICAgICAgICAgICAgdGhpcy5zaG93TG9ja0ljb24oZGF0YS5pc19sb2NrZWQgfHwgZmFsc2UsIGRhdGEubG9ja19zdHIpXG4gICAgICAgICAgICAvLyAtLeiuvue9rumAieS4reeKtuaAgSBcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQoZGF0YS5pc191aV9zZWxlY3QgPT0gdHJ1ZSlcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZyb21fdHlwZSA9PSBIZXJvQ29uc3QuRXhoaWJpdGlvbkl0ZW1UeXBlLmVQb2tlZGV4KSB7ICAgIC8vIOWbvumJtOeVjOmdouaYr+WQpue9rueBsFxuICAgICAgICAgICAgdGhpcy5zaG93UmVkUG9pbnQoZmFsc2UpO1xuICAgICAgICAgICAgdmFyIGlzX2hhdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBwYXJfbWF4X3N0YXIgPSB0aGlzLm1vZGVsLmdldEhhZEhlcm9TdGFyQnliaWQoZGF0YS5iaWQpO1xuICAgICAgICAgICAgaWYgKCFwYXJfbWF4X3N0YXIgfHwgcGFyX21heF9zdGFyIDwgZGF0YS5zdGFyKVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SGVhZFVuRW5hYmxlZChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5mcm9tX3R5cGUgPT0gSGVyb0NvbnN0LkV4aGliaXRpb25JdGVtVHlwZS5lRm9ybUZpZ2h0KSB7ICAvLyDluIPpmLVcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQoZGF0YS5pc191aV9zZWxlY3QpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZnJvbV90eXBlID09IEhlcm9Db25zdC5FeGhpYml0aW9uSXRlbVR5cGUuZUhlcm9TZWxlY3QpIHsgLy8gXG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkKGRhdGEuaXNfdWlfc2VsZWN0KTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0xvY2tJY29uKGRhdGEuaXNfdWlfbG9jayk7ICAgICAgICAgICAgXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5mcm9tX3R5cGUgPT0gSGVyb0NvbnN0LkV4aGliaXRpb25JdGVtVHlwZS5lVXBTdGFyKSB7ICAgICAvLyDoi7Hpm4TnlJ/mmJ9cbiAgICAgICAgICAgIHRoaXMuc2V0R3JheUhlYWQoZGF0YS5oZWFkX2dyYXkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZnJvbV90eXBlID09ICBIZXJvQ29uc3QuRXhoaWJpdGlvbkl0ZW1UeXBlLmVIZXJvUmVzZXQpIHsgIC8vIOiLsembhOWIhuino1xuICAgICAgICAgICAgaWYgKCFkYXRhLmlzX3VpX2xvY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkKGRhdGEuaXNfdWlfc2VsZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2hvd0xvY2tJY29uKGRhdGEuaXNfdWlfbG9jayk7XG4gICAgICAgIH1lbHNlIGlmKHRoaXMuZnJvbV90eXBlID09IEhlcm9Db25zdC5FeGhpYml0aW9uSXRlbVR5cGUuZUV4cGVkaXRGaWdodCl7IC8v6L+c5b6BXG4gICAgICAgICAgICAvLyDooYDmnaFcbiAgICAgICAgICAgIHZhciBibG9vZCA9IDEwMDtcbiAgICAgICAgICAgIGlmKHRoaXMuYm9vbGRfdHlwZSA9PSB0cnVlKXtcbiAgICAgICAgICAgICAgICB2YXIgSGVyb0V4cGVkaXRDb250cm9sbGVyID0gcmVxdWlyZShcImhlcm9leHBlZGl0X2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICAgICAgdmFyIHBhcnRuZXJfaWQgPSBkYXRhLnBhcnRuZXJfaWQ7XG4gICAgICAgICAgICAgICAgaWYoZGF0YS5wYXJ0bmVyX2lkPjEwMDAwMCl7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRuZXJfaWQgPSBkYXRhLnBhcnRuZXJfaWQtMTAwMDAwOyBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBibG9vZCA9IEhlcm9FeHBlZGl0Q29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldE1vZGVsKCkuZ2V0SGVyb0Jsb29kQnlJZChwYXJ0bmVyX2lkLCBkYXRhLnJpZCwgZGF0YS5zcnZfaWQpO1xuICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSBIZXJvRXhwZWRpdENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldEhpcmVIZXJvKHBhcnRuZXJfaWQsIGRhdGEucmlkLCBkYXRhLnNydl9pZClcbiAgICAgICAgICAgICAgICBpZihzdGF0dXMgPT0gdHJ1ZSAmJiBkYXRhLmlzX3VzZWQhPW51bGwpe1xuICAgICAgICAgICAgICAgICAgICAvLyAtLSBzZWxmOnNob3dIZWxwSW1nKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIC8vIC0t6L+c5b6B55qE5pSv5o+05qCH5b+XLi4uLi4uMjAxOS4xLjI444CCMjA6MzcgIOaZk+WLpOeJueWcsOWPq+aUueWbnuadpeeahFxuICAgICAgICAgICAgICAgICAgICBpZighdGhpcy5oaXJlSGVybyl7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpcmVIZXJvID0gVXRpbHMuY3JlYXRlSW1hZ2UodGhpcy5yb290X3duZCwgbnVsbCwyMCwgLTYzLCBjYy52MigwLDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaXJlSGVyby5ub2RlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJoZXJvZXhwZWRpdFwiLFwidHh0X2hlcm9leHBlZGl0XzFcIiksIChmdW5jdGlvbihyZXNPYmplY3Qpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaXJlSGVyby5zcHJpdGVGcmFtZSA9IHJlc09iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfSkuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuaGlyZUhlcm8pe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaXJlSGVyby5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgYmxvb2QgPSBkYXRhLmJsb29kIHx8IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2hvd1Byb2dyZXNzYmFyKGJsb29kKVxuICAgICAgICAgICAgaWYoYmxvb2QgPD0gMCl7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93U3RyVGlwcyh0cnVlLFV0aWxzLlRJMThOKFwi5bey6Zi15LqhXCIpLHtjM2I6IG5ldyBjYy5Db2xvcigyNTUsMjU1LDI1NSwyNTUpfSlcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N0clRpcHMoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8g6K6+572u6YCJ5Lit54q25oCBIFxuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZChkYXRhLmlzX3VpX3NlbGVjdCA9PSB0cnVlKTtcbiAgICAgICAgfWVsc2UgaWYodGhpcy5mcm9tX3R5cGUgPT0gSGVyb0NvbnN0LkV4aGliaXRpb25JdGVtVHlwZS5lRW5kTGVzc0hlcm8pe1xuICAgICAgICAgICAgLy8g6K6+572u6YCJ5Lit54q25oCBIFxuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZChkYXRhLmlzX3VpX3NlbGVjdCA9PSB0cnVlKTtcbiAgICAgICAgICAgIC8vIOaYr+mbh+S9o+WFtVxuICAgICAgICAgICAgaWYoZGF0YS5pc19lbmRsZXNzKXtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dIZWxwSW1nKHRydWUpO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93SGVscEltZyhmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKGRhdGEuaHBfcGVyIT1udWxsKXtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQcm9ncmVzc2JhcihkYXRhLmhwX3Blcik7XG4gICAgICAgICAgICAgICAgaWYoZGF0YS5ocF9wZXIgPD0gMCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N0clRpcHModHJ1ZSxVdGlscy5USTE4TihcIuW3sumYteS6oVwiKSx7YzNiOiBuZXcgY2MuQ29sb3IoMjU1LDI1NSwyNTUsMjU1KX0pXG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N0clRpcHMoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmKHRoaXMuZnJvbV90eXBlID09IEhlcm9Db25zdC5FeGhpYml0aW9uSXRlbVR5cGUuZUhlcm9GdXNlKXtcbiAgICAgICAgICAgIHZhciBuZWVkX2NvdW50ID0gZGF0YS5uZWVkX2NvdW50IHx8IDA7XG4gICAgICAgICAgICB2YXIgdG90YWxfY291bnQgPSBkYXRhLnRvdGFsX2NvdW50ICB8fCAwO1xuICAgICAgICAgICAgdmFyIGxhYmVsID0gY2MuanMuZm9ybWF0U3RyKFwiJXMvJXNcIiwgdG90YWxfY291bnQsIG5lZWRfY291bnQpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5jdXJfcmVkcG9pbnQgPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dSZWRQb2ludCh0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UmVkUG9pbnQoZmFsc2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNob3dQcm9ncmVzc2Jhcih0b3RhbF9jb3VudCAvIG5lZWRfY291bnQgKiAxMDAsIGxhYmVsKTsgIFxuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZChkYXRhLmlzX3VpX3NlbGVjdCA9PSB0cnVlKVxuICAgICAgICB9ZWxzZSBpZiAodGhpcy5mcm9tX3R5cGUgPT0gSGVyb0NvbnN0LkV4aGliaXRpb25JdGVtVHlwZS5lVm95YWdlKXsgIC8v6L+c6IiqXG4gICAgICAgICAgICB0aGlzLnNob3dTdHJUaXBzKGRhdGEuaW5fdGFzayxVdGlscy5USTE4TihcIuS7u+WKoeS4rVwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQodGhpcy5pc191aV9zZWxlY3QpO1xuICAgICAgICAgICAgaWYodGhpcy5wZXJjZW50IT1udWxsKXtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQcm9ncmVzc2Jhcih0aGlzLnBlcmNlbnQsdGhpcy5wZXJjZW50X2xhYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLnN0cl90aXBzX29iail7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93U3RyVGlwcyh0aGlzLnN0cl90aXBzX29iai5zdGF0dXMsIHRoaXMuc3RyX3RpcHNfb2JqLnN0ciwgdGhpcy5zdHJfdGlwc19vYmouY29sb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIHVuQmluZEV2ZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLml0ZW1fdXBkYXRlX2V2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEudW5iaW5kKHRoaXMuaXRlbV91cGRhdGVfZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5pdGVtX3VwZGF0ZV9ldmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlU3RhcnM6IGZ1bmN0aW9uKHN0YXJfbnVtKSB7XG4gICAgICAgIHZhciBzdGFyX3JlcyA9IFwiXCI7XG4gICAgICAgIHZhciBzdGFyX3NjYWwgPSAxO1xuICAgICAgICBsZXQgc3RhclxuICAgICAgICB0aGlzLnNwZWNpYWxfbmQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhcnNfY29udGFpbmVyX25kLndpZHRoID0gMDtcbiAgICAgICAgdGhpcy5zdGFyc19jb250YWluZXJfbmQucmVtb3ZlQWxsQ2hpbGRyZW4oKTtcbiAgICAgICAgaWYgKHN0YXJfbnVtID4gMCAmJiBzdGFyX251bSA8PSA1KSB7XG4gICAgICAgICAgICBzdGFyX3JlcyA9IFwiY29tbW9uXzkwMDc0XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc3Rhcl9udW0gPiA1ICYmIHN0YXJfbnVtIDw9IDkpIHtcbiAgICAgICAgICAgIHN0YXJfbnVtID0gc3Rhcl9udW0gLSA1O1xuICAgICAgICAgICAgc3Rhcl9yZXMgPSBcImNvbW1vbl85MDA3NVwiO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXJfbnVtID4gOSkge1xuICAgICAgICAgICAgc3RhciA9IHN0YXJfbnVtIC0gMTBcbiAgICAgICAgICAgIHN0YXJfbnVtID0gMTtcbiAgICAgICAgICAgIHN0YXJfcmVzID0gXCJjb21tb25fOTAwNzNcIjtcbiAgICAgICAgICAgIHN0YXJfc2NhbCA9IDEuMjtcbiAgICAgICAgICAgIHRoaXMuc3BlY2lhbF9uZC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgbGV0IHBhdGhcbiAgICAgICAgICAgIGlmKHN0YXIgPiAwKXtcbiAgICAgICAgICAgICAgICBwYXRoID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImNvbW1vblwiLFwiY29tbW9uXzkwMDg0XCIpXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBwYXRoID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImNvbW1vblwiLFwiY29tbW9uXzkwMDc2XCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMocGF0aCxmdW5jdGlvbihyZXMpe1xuICAgICAgICAgICAgICAgIHRoaXMuc3BlY2lhbF9zcC5zcHJpdGVGcmFtZSA9IHJlc1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgc3Rhcl9pID0gMDsgc3Rhcl9pIDwgc3Rhcl9udW07IHN0YXJfaSsrKSB7XG4gICAgICAgICAgICB2YXIgc3Rhcl9uZCA9IGNjLmluc3RhbnRpYXRlKHRoaXMuc3Rhcl9pdGVtX25kKTtcbiAgICAgICAgICAgIHN0YXJfbmQuc2NhbGUgPSBzdGFyX3NjYWw7XG4gICAgICAgICAgICB2YXIgc3Rhcl9zcCA9IHN0YXJfbmQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSk7XG4gICAgICAgICAgICB2YXIgY29tbW9uX3Jlc19wYXRoID0gUGF0aFRvb2wuZ2V0Q29tbW9uSWNvbVBhdGgoc3Rhcl9yZXMpO1xuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKGNvbW1vbl9yZXNfcGF0aCwgZnVuY3Rpb24oc3Rhcl9zcCwgc2Zfb2JqKXtcbiAgICAgICAgICAgICAgICBzdGFyX3NwLnNwcml0ZUZyYW1lID0gc2Zfb2JqO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMsIHN0YXJfc3ApKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5zdGFyc19jb250YWluZXJfbmQuYWRkQ2hpbGQoc3Rhcl9uZCk7XG4gICAgICAgICAgICBpZihzdGFyKXtcbiAgICAgICAgICAgICAgICBsZXQgbm9kZSA9IG5ldyBjYy5Ob2RlKCkgXG4gICAgICAgICAgICAgICAgbm9kZS55ID0gLTFcbiAgICAgICAgICAgICAgICBsZXQgbGFiID0gbm9kZS5hZGRDb21wb25lbnQoY2MuTGFiZWwpXG4gICAgICAgICAgICAgICAgbGFiLnN0cmluZyA9IHN0YXIgXG4gICAgICAgICAgICAgICAgbGFiLmZvbnRTaXplID0gMTU7XG4gICAgICAgICAgICAgICAgbGFiLmxpbmVIZWlnaHQgPSAxNjtcbiAgICAgICAgICAgICAgICBsYWIuaG9yaXpvbnRhbEFsaWduID0gY2MubWFjcm8uVGV4dEFsaWdubWVudC5DRU5URVI7XG4gICAgICAgICAgICAgICAgbGFiLnZlcnRpY2FsQWxpZ24gPSBjYy5tYWNyby5UZXh0QWxpZ25tZW50LkNFTlRFUjtcbiAgICAgICAgICAgICAgICBub2RlLmFkZENvbXBvbmVudChjYy5MYWJlbE91dGxpbmUpLmNvbG9yID0gbmV3IGNjLmNvbG9yKDAsMCwwKTtcbiAgICAgICAgICAgICAgICBzdGFyX25kLmFkZENoaWxkKG5vZGUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0SGVhZFVuRW5hYmxlZDogZnVuY3Rpb24oc3RhdHVzKSB7XG4gICAgICAgIHZhciBzcF9zdGF0dXMgPSBjYy5TcHJpdGUuU3RhdGUuTk9STUFMO1xuICAgICAgICBpZiAoIXN0YXR1cykge1xuICAgICAgICAgICAgc3Bfc3RhdHVzID0gY2MuU3ByaXRlLlN0YXRlLkdSQVk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5oZWFkX2ljb25fc3Ape1xuICAgICAgICAgICAgdGhpcy5oZWFkX2ljb25fc3Auc2V0U3RhdGUoc3Bfc3RhdHVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLmNvbXBfdHlwZV9zcCl7XG4gICAgICAgICAgICB0aGlzLmNvbXBfdHlwZV9zcC5zZXRTdGF0ZShzcF9zdGF0dXMpO1xuICAgICAgICB9XG5cbiAgICB9LFxuXG4gICAgc2V0U2VsZWN0ZWQ6IGZ1bmN0aW9uKHN0YXR1cykge1xuICAgICAgICBpZiAoIXRoaXMuaXNfYWxsb3dfc2VsZWN0KSByZXR1cm47XG4gICAgICAgIHRoaXMuaXNfdWlfc2VsZWN0ID0gc3RhdHVzXG4gICAgICAgIGlmKHRoaXMucm9vdF93bmQ9PW51bGwpe1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RfaXRlbV9uZC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RfaXRlbV9uZC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRSb290UG9zaXRpb246IGZ1bmN0aW9uKHBvcykge1xuICAgICAgICBpZiAoIXBvcykgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5yb290X3duZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihwb3MueCxwb3MueSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VyX3BvcyA9IHBvcztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRSb290U2NhbGU6IGZ1bmN0aW9uKHNjYWxlKSB7XG4gICAgICAgIGlmICghc2NhbGUpIHJldHVybjtcbiAgICAgICAgdGhpcy5zY2FsZSA9IHNjYWxlO1xuICAgICAgICBpZiAodGhpcy5yb290X3duZCkge1xuICAgICAgICAgICAgdGhpcy5yb290X3duZC5zY2FsZSA9IHNjYWxlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGdldFdvcmxkUG9zOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3Rfd25kLmNvbnZlcnRUb1dvcmxkU3BhY2VBUihjYy52MigwLCAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcblxuICAgIHVwZGFnZVBvc2l0b246IGZ1bmN0aW9uKG5ld19wb3MpIHtcbiAgICAgICAgaWYgKCFuZXdfcG9zKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLnJvb3Rfd25kKVxuICAgICAgICAgICAgdGhpcy5yb290X3duZC5zZXRQb3NpdGlvbihuZXdfcG9zKTtcbiAgICB9LFxuXG4gICAgYWRkVm9CaW5kRXZlbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5pZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbV91cGRhdGVfZXZlbnQpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuaXRlbV91cGRhdGVfZXZlbnQgPSAgdGhpcy5kYXRhLmJpbmQodGhpcy5kYXRhLlVQREFURV9QQVJUTkVSX0FUVFIsIGZ1bmN0aW9uKGhlcm9fdm8pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yb290X3duZClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhKGhlcm9fdm8pO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNldERlZmF1bHRIZWFkOiBmdW5jdGlvbihpY29uX3BhdGgpIHtcbiAgICAgICAgaWYgKGljb25fcGF0aClcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdF9wYXRoID0gaWNvbl9wYXRoO1xuICAgIH0sXG5cbiAgICBzZXRHcmF5SGVhZDogZnVuY3Rpb24oc3RhdHVzKSB7XG4gICAgICAgIHZhciBzcF9zdGF0ZSAgPSBjYy5TcHJpdGUuU3RhdGUuTk9STUFMO1xuICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAgc3Bfc3RhdGUgPSBjYy5TcHJpdGUuU3RhdGUuR1JBWTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhlYWRfaWNvbl9zcC5zZXRTdGF0ZShzcF9zdGF0ZSk7XG4gICAgfSxcbiAgICAvLyAtLeiuvue9rumUgVxuICAgIHNob3dMb2NrSWNvbihib29sLHN0cil7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBpZiAoYm9vbCA9PSBmYWxzZSAmJiAhc2VsZi5sb2NrX2ljb24pIHJldHVybiBcbiAgICAgICAgaWYgKCFzZWxmLmxvY2tfaWNvbil7XG4gICAgICAgICAgICBsZXQgcmVzID0gUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImNvbW1vblwiLFwiY29tbW9uXzkwMDA5XCIpXG4gICAgICAgICAgICBsZXQgc2l6ZSA9IGNjLnNpemUodGhpcy5yb290X3duZC53aWR0aCx0aGlzLnJvb3Rfd25kLmhlaWdodClcbiAgICAgICAgICAgIHNlbGYubG9ja19pY29uID0gVXRpbHMuY3JlYXRlSW1hZ2Uoc2VsZi5yb290X3duZCxyZXMsMCwwLGNjLnYyKDAuNSwwLjUpLHRydWUsMCxmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubG9hZFJlcyhyZXMsIChmdW5jdGlvbihyZXNPYmplY3Qpe1xuICAgICAgICAgICAgICAgIHNlbGYubG9ja19pY29uLnNwcml0ZUZyYW1lID0gcmVzT2JqZWN0O1xuICAgICAgICAgICAgfSkuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cil7XG4gICAgICAgICAgICBpZiAoIXNlbGYubG9ja19sYWJlbCl7IFxuICAgICAgICAgICAgICAgIHNlbGYubG9ja19sYWJlbCA9IFV0aWxzLmNyZWF0ZUxhYmVsKDIyLENvbmZpZy5jb2xvcl9kYXRhLmRhdGFfY29sb3IxNlsxXSxDb25maWcuY29sb3JfZGF0YS5kYXRhX2NvbG9yNFs5XSxzaXplLndpZHRoLzIsMjIsXCJcIix0aGlzLnJvb3Rfd25kLDIsIGNjLnYyKDAuNSwwKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYubG9ja19sYWJlbC5zdHJpbmcgPSBzdHIgXG4gICAgICAgIH1cblxuICAgICAgICBzZWxmLmxvY2tfaWNvbi5ub2RlLmFjdGl2ZSA9IGJvb2xcblxuICAgICAgICAvLyAtLSDplIHkvY/nmoTml7blgJnmn5Dkupvpg6jliIbopoHnva7ngbBcbiAgICAgICAgc2VsZi5zZXRIZWFkVW5FbmFibGVkKCFib29sKVxuICAgICAgICBpZiAoc2VsZi5wYXJ0bmVyX3R5cGUpe1xuICAgICAgICAgICAgLy8gc2V0Q2hpbGRVbkVuYWJsZWQoYm9vbCwgc2VsZi5wYXJ0bmVyX3R5cGUpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYubG9ja19sYWJlbCl7ICBcbiAgICAgICAgICAgIHNlbGYubG9ja19sYWJlbC5ub2RlLmFjdGl2ZSA9IGJvb2xcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDmmL7npLrmlK/mj7Tlm77niYdcbiAgICBzaG93SGVscEltZzpmdW5jdGlvbihib29sKXtcbiAgICAgICAgaWYoYm9vbCA9PSBmYWxzZSAmJiAhdGhpcy5oZWxwX2ltZylyZXR1cm47XG4gICAgICAgIGlmKCF0aGlzLmhlbHBfaW1nKXtcbiAgICAgICAgICAgIHZhciByZXMgPSBQYXRoVG9vbC5nZXRDb21tb25JY29tUGF0aChcInR4dF9jbl9jb21tb25fOTAwMTRcIilcbiAgICAgICAgICAgIHRoaXMuaGVscF9pbWcgPSBVdGlscy5jcmVhdGVJbWFnZSh0aGlzLnJvb3Rfd25kLHJlcywtdGhpcy5yb290X3duZC53aWR0aC8yKzIwLCAtdGhpcy5yb290X3duZC5oZWlnaHQvMisyMCxjYy52MigwLjUsMC41KSx0cnVlLDAsZmFsc2UpXG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMocmVzLCAoZnVuY3Rpb24ocmVzT2JqZWN0KXtcbiAgICAgICAgICAgICAgICB0aGlzLmhlbHBfaW1nLnNwcml0ZUZyYW1lID0gcmVzT2JqZWN0O1xuICAgICAgICAgICAgfSkuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oZWxwX2ltZy5ub2RlLmFjdGl2ZSA9IGJvb2w7XG4gICAgfSxcblxuICAgIC8vIEBwZXJjZW50IOeZvuWIhuavlFxuICAgIC8vIEBsYWJlbCDov5vluqbmnaHkuK3pl7TmloflrZfmj4/ov7BcbiAgICBzaG93UHJvZ3Jlc3NiYXI6ZnVuY3Rpb24ocGVyY2VudCwgbGFiZWwpe1xuICAgICAgICB0aGlzLnBlcmNlbnQgPSBwZXJjZW50O1xuICAgICAgICB0aGlzLnBlcmNlbnRfbGFiID0gbGFiZWw7XG5cbiAgICAgICAgaWYoIXRoaXMucm9vdF93bmQpcmV0dXJuO1xuXG4gICAgICAgIHZhciBzaXplID0gY2Muc2l6ZSgxMTgsIDE1KVxuICAgICAgICBpZih0aGlzLmJnSW1nKXtcbiAgICAgICAgICAgIHRoaXMuYmdJbWcubm9kZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuYmFyTm9kZSl7XG4gICAgICAgICAgICB0aGlzLmJhck5vZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZighdGhpcy5jb21wX2Jhcil7XG4gICAgICAgICAgICB2YXIgcmVzID0gUGF0aFRvb2wuZ2V0Q29tbW9uSWNvbVBhdGgoXCJjb21tb25fOTAwMDVcIilcbiAgICAgICAgICAgIHZhciByZXMxID0gUGF0aFRvb2wuZ2V0Q29tbW9uSWNvbVBhdGgoXCJjb21tb25fOTAwMDZcIilcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5iZ0ltZyA9IFV0aWxzLmNyZWF0ZUltYWdlKHRoaXMucm9vdF93bmQsbnVsbCwwLC10aGlzLnJvb3Rfd25kLmhlaWdodC8yLXNpemUuaGVpZ2h0LzItMixjYy52MigwLjUsMC41KSx0cnVlLDAsdHJ1ZSlcbiAgICAgICAgICAgIHRoaXMuYmdJbWcubm9kZS5zZXRDb250ZW50U2l6ZShzaXplLndpZHRoKzIsc2l6ZS5oZWlnaHQrMik7XG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMocmVzLCAoZnVuY3Rpb24ocmVzT2JqZWN0KXtcbiAgICAgICAgICAgICAgICB0aGlzLmJnSW1nLnNwcml0ZUZyYW1lID0gcmVzT2JqZWN0O1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKSlcblxuICAgICAgICAgICAgdGhpcy5iYXJOb2RlID0gbmV3IGNjLk5vZGUoKTtcbiAgICAgICAgICAgIHRoaXMuYmFyTm9kZS5zZXRBbmNob3JQb2ludChjYy52MigwLjUsMC41KSk7XG4gICAgICAgICAgICB0aGlzLmJhck5vZGUuc2V0Q29udGVudFNpemUoc2l6ZSk7XG4gICAgICAgICAgICB0aGlzLmJhck5vZGUuc2V0UG9zaXRpb24oMCwtdGhpcy5yb290X3duZC5oZWlnaHQvMi1zaXplLmhlaWdodC8yLTIpO1xuICAgICAgICAgICAgdGhpcy5yb290X3duZC5hZGRDaGlsZCh0aGlzLmJhck5vZGUpO1xuXG4gICAgICAgICAgICB2YXIgYmFySW1nID0gdGhpcy5iYXJOb2RlLmFkZENvbXBvbmVudChjYy5TcHJpdGUpO1xuICAgICAgICAgICAgYmFySW1nLnR5cGUgPSBjYy5TcHJpdGUuVHlwZS5TTElDRUQ7XG4gICAgICAgICAgICBiYXJJbWcuc2l6ZU1vZGUgPSBjYy5TcHJpdGUuU2l6ZU1vZGUuQ1VTVE9NO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMocmVzMSwgKGZ1bmN0aW9uKHJlc09iamVjdCl7XG4gICAgICAgICAgICAgICAgYmFySW1nLnNwcml0ZUZyYW1lID0gcmVzT2JqZWN0O1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKSk7XG5cbiAgICAgICAgICAgIHZhciBjb21wX2JhciA9IHRoaXMuYmFyTm9kZS5hZGRDb21wb25lbnQoY2MuUHJvZ3Jlc3NCYXIpO1xuICAgICAgICAgICAgY29tcF9iYXIuYmFyU3ByaXRlID0gYmFySW1nO1xuICAgICAgICAgICAgY29tcF9iYXIubW9kZSA9IGNjLlByb2dyZXNzQmFyLk1vZGUuSE9SSVpPTlRBTDtcbiAgICAgICAgICAgIGNvbXBfYmFyLnRvdGFsTGVuZ3RoID0gc2l6ZS53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuY29tcF9iYXIgPSBjb21wX2JhcjtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLmNvbXBfYmFyX2xhYmVsKXtcbiAgICAgICAgICAgIHRoaXMuY29tcF9iYXJfbGFiZWwuc3RyaW5nID0gXCJcIlxuICAgICAgICB9XG4gICAgICAgIGlmKGxhYmVsKXtcbiAgICAgICAgICAgIGlmKCF0aGlzLmNvbXBfYmFyX2xhYmVsKXtcbiAgICAgICAgICAgICAgICB2YXIgdGV4dF9jb2xvciA9IG5ldyBjYy5Db2xvcigyNTUsMjU1LDI1NSwyNTUpXG4gICAgICAgICAgICAgICAgdmFyIGxpbmVfY29sb3IgPSBuZXcgY2MuQ29sb3IoMCwwLDAsMjU1KVxuICAgICAgICAgICAgICAgIHZhciBzaXplID0gY2Muc2l6ZSgxMTgsIDE5KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBfYmFyX2xhYmVsID0gVXRpbHMuY3JlYXRlTGFiZWwoMTgsdGV4dF9jb2xvciwgbGluZV9jb2xvcixzaXplLndpZHRoLzIsIDAsXCJcIix0aGlzLmNvbXBfYmFyLm5vZGUsMixjYy52MigwLjUsIDAuNSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb21wX2Jhcl9sYWJlbC5zdHJpbmcgPSBsYWJlbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBfYmFyLnByb2dyZXNzID0gcGVyY2VudC8xMDA7XG4gICAgfSxcblxuICAgIC8vICDmmL7npLrmloflrZfmj5DnpLpcbiAgICBzaG93U3RyVGlwczpmdW5jdGlvbiggc3RhdHVzLCBzdHIsIGNvbG9yICl7XG4gICAgICAgIHRoaXMuc3RyX3RpcHNfb2JqID0ge3N0YXR1czpzdGF0dXMsc3RyOnN0cixjb2xvcjpjb2xvcn07XG4gICAgICAgIGlmKCF0aGlzLnJvb3Rfd25kKXJldHVybjtcbiAgICAgICAgaWYoc3RhdHVzKXtcbiAgICAgICAgICAgIGlmKHRoaXMubGF5X3RpcHMgPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlfdGlwcyA9IG5ldyBjYy5Ob2RlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlfdGlwcy5zZXRBbmNob3JQb2ludChjYy52MigwLjUsMC41KSlcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IHRoaXMucm9vdF93bmQuZ2V0Q29udGVudFNpemUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxheV90aXBzLnNldENvbnRlbnRTaXplKHNpemUpXG4gICAgICAgICAgICAgICAgdGhpcy5sYXlfdGlwcy5zZXRQb3NpdGlvbigwLDApIFxuICAgICAgICAgICAgICAgIHZhciBncmFwaGljc19jcCA9IHRoaXMubGF5X3RpcHMuYWRkQ29tcG9uZW50KGNjLkdyYXBoaWNzKTtcbiAgICAgICAgICAgICAgICBncmFwaGljc19jcC5jbGVhcigpO1xuICAgICAgICAgICAgICAgIGdyYXBoaWNzX2NwLmZpbGxDb2xvciA9IGNjLmNvbG9yKDAsIDAsIDAsIDE1MCk7XG4gICAgICAgICAgICAgICAgZ3JhcGhpY3NfY3AucmVjdCgtc2l6ZS53aWR0aC8yLCAtc2l6ZS5oZWlnaHQvMiwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIGdyYXBoaWNzX2NwLmZpbGwoKTtcblxuICAgICAgICAgICAgICAgIHZhciBjM2IgPSBuZXcgY2MuQ29sb3IoMjU1LDI1NSwyNTUsMjU1KTtcbiAgICAgICAgICAgICAgICB2YXIgZW5hYmxlID0gbmV3IGNjLkNvbG9yKDEzMiwwLDAsMjU1KTtcbiAgICAgICAgICAgICAgICBpZihjb2xvcil7XG4gICAgICAgICAgICAgICAgICAgIGMzYiA9IGNvbG9yLmMzYiB8fCBjM2I7XG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZSA9IGNvbG9yLmVuYWJsZSB8fCBlbmFibGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHZhciB0aXBzX3RleHQgPSBVdGlscy5jcmVhdGVMYWJlbCgyNixjM2IsZW5hYmxlLDAsMCxzdHIsdGhpcy5sYXlfdGlwcywxLGNjLnYyKDAuNSwgMC41KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb290X3duZC5hZGRDaGlsZCh0aGlzLmxheV90aXBzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sYXlfdGlwcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGlmKHRoaXMubGF5X3RpcHMpe1xuICAgICAgICAgICAgICAgIHRoaXMubGF5X3RpcHMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZmluZFVzZVNraW46ZnVuY3Rpb24oaW5mbyl7XG4gICAgICAgIGlmKGluZm8uZXh0X2RhdGEpe1xuICAgICAgICAgICAgbGV0IGV4dCA9IGluZm8uZXh0X2RhdGEgfHwge307XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZXh0KXtcbiAgICAgICAgICAgICAgICBsZXQgdiA9IGV4dFtpXTtcbiAgICAgICAgICAgICAgICBpZih2LmtleSA9PSA1KXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYudmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZihpbmZvLmV4dCAhPSBudWxsKXtcbiAgICAgICAgICAgIGxldCBleHQgPSBpbmZvLmV4dCB8fCB7fTtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBleHQpe1xuICAgICAgICAgICAgICAgIGxldCB2ID0gZXh0W2ldO1xuICAgICAgICAgICAgICAgIGlmKHYua2V5ID09IDUpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdi52YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBcbiAgICAgICAgfVxuICAgICAgICBpZihpbmZvLnVzZV9za2luKXtcbiAgICAgICAgICAgIHJldHVybiBpbmZvLnVzZV9za2luXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDBcbiAgICB9LFxuXG4gICAgZ2V0RGF0YSgpe1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhIHx8IHt9XG4gICAgfSxcblxuICAgIHNob3dSZWRQb2ludDogZnVuY3Rpb24oc3RhdHVzKSB7XG4gICAgICAgIHRoaXMucmVkX3N0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgaWYgKHRoaXMucmVkX2ljb25fbmQpXG4gICAgICAgICAgICB0aGlzLnJlZF9pY29uX25kLmFjdGl2ZSA9ICEhc3RhdHVzO1xuICAgIH0sXG5cbiAgICBzaG93Q2hpcEljb24oc3RhdHVzKXtcbiAgICAgICAgdGhpcy5jaGlwX3N0YXR1cyA9IHN0YXR1c1xuICAgICAgICBpZih0aGlzLmNoaXBfaWNvbl9uZCl7XG4gICAgICAgICAgICB0aGlzLmNoaXBfaWNvbl9uZC5hY3RpdmUgPSBzdGF0dXM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gc2hvd0xvY2tJY29uOiBmdW5jdGlvbihzdGF0dXMpIHtcbiAgICAvLyAgICAgdGhpcy5sb2NrX2l0ZW1fbmQuYWN0aXZlID0gc3RhdHVzO1xuICAgIC8vICAgICB0aGlzLmxvY2tfaXRlbV9zcC5zZXRTdGF0ZSghc3RhdHVzKTtcbiAgICAvLyAgICAgaWYgKHN0YXR1cykge1xuICAgIC8vICAgICAgICAgdGhpcy5zZXRIZWFkVW5FbmFibGVkKGZhbHNlKTtcbiAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgIHRoaXMuc2V0SGVhZFVuRW5hYmxlZCh0cnVlKTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH0sXG5cbn0pIl19
|