|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/mod/vip/vip_controller.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, 'fc753Pu5ktBOZoyuaPREqO7', 'vip_controller');
|
// Scripts/mod/vip/vip_controller.js
|
|
"use strict";
|
|
// --------------------------------------------------------------------
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
// @description:
|
// 这里填写详细说明,主要填写该模块的功能简要
|
// <br/>Create: 2019-02-26 21:07:32
|
// --------------------------------------------------------------------
|
var RoleController = require("role_controller");
|
|
var VipEvent = require("vip_event");
|
|
var VipController = cc.Class({
|
"extends": BaseController,
|
ctor: function ctor() {},
|
// 初始化配置数据
|
initConfig: function initConfig() {
|
var VipModel = require("vip_model");
|
|
this.model = new VipModel();
|
this.model.initConfig();
|
this.vip_redpoint_status = {};
|
this.vip_privilege_redpoint = {}; //vip特权 item 红点
|
|
this.is_first = true;
|
},
|
// 返回当前的model
|
getModel: function getModel() {
|
return this.model;
|
},
|
// 注册监听事件
|
registerEvents: function registerEvents() {
|
if (this.login_event_success == null) {
|
this.login_event_success = gcore.GlobalEvent.bind(EventId.EVT_ROLE_CREATE_SUCCESS, function () {
|
gcore.GlobalEvent.unbind(this.login_event_success);
|
this.login_event_success = null;
|
this.role_vo = RoleController.getInstance().getRoleVo();
|
|
if (this.role_vo) {
|
if (this.role_assets_event == null) {
|
this.role_assets_event = this.role_vo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, value) {
|
if (key == "vip_lev") {
|
this.setIsFirst(true);
|
var get_list = this.model.getGetGiftList();
|
var item_status = get_list[this.role_vo.vip_lev] == null && this.getIsFirst();
|
this.setTipsVIPStstus(VIPREDPOINT.VIP_TAB, item_status);
|
gcore.GlobalEvent.fire(VipEvent.UPDATA_ITEM_REDPOINT);
|
}
|
}.bind(this));
|
}
|
} // this.sender16707() //月卡领取
|
// this.sender16710() //VIP礼包红点用
|
// this.sender16712() //累充红点
|
// this.sender21006() //每日礼包
|
// this.sender24502() //特权礼包
|
|
}, this);
|
}
|
|
if (this.re_link_game_event == null) {
|
this.re_link_game_event = gcore.GlobalEvent.bind(EventId.EVT_RE_LINK_GAME, function () {// this.sender21006();
|
}, this);
|
}
|
},
|
// 注册协议接受事件
|
registerProtocals: function registerProtocals() {
|
this.RegisterProtocal(16700, this.handle16700); //获取充值列表信息
|
|
this.RegisterProtocal(16710, this.handle16710); //VIP礼包领取信息
|
|
this.RegisterProtocal(16711, this.handle16711); //VIP等级奖励领取
|
|
this.RegisterProtocal(16712, this.handle16712); //获取永久累充信息
|
|
this.RegisterProtocal(16713, this.handle16713); //领取累充奖励
|
|
this.RegisterProtocal(21005, this.handle21005); //三倍返利信息
|
|
this.RegisterProtocal(21006, this.handle21006); //每日礼包数据
|
|
this.RegisterProtocal(24501, this.handle24501); //购买VIP特权礼包
|
|
this.RegisterProtocal(24502, this.handle24502); //VIP特权礼包数据
|
|
this.RegisterProtocal(16707, this.handle16707);
|
this.RegisterProtocal(16708, this.handle16708);
|
this.RegisterProtocal(16730, this.handle16730);
|
this.RegisterProtocal(16731, this.handle16731);
|
this.RegisterProtocal(21020, this.handle21020); //每日一元红点
|
},
|
setPrivilegeRedpoint: function setPrivilegeRedpoint(index, status) {
|
this.vip_privilege_redpoint[index] = status;
|
},
|
getPrivilegeRedpoint: function getPrivilegeRedpoint(index) {
|
var status = this.vip_privilege_redpoint[index];
|
return status;
|
},
|
getIsFirst: function getIsFirst() {
|
return this.is_first;
|
},
|
setIsFirst: function setIsFirst(status) {
|
this.is_first = status;
|
},
|
//获取充值列表信息
|
sender16700: function sender16700() {
|
this.SendProtocal(16700, {});
|
},
|
handle16700: function handle16700(data) {
|
gcore.GlobalEvent.fire(VipEvent.UPDATE_CHARGE_LIST, data.list);
|
},
|
//三倍返利信息
|
sender21005: function sender21005() {
|
this.SendProtocal(21005, {});
|
},
|
handle21005: function handle21005(data) {
|
gcore.GlobalEvent.fire(VipEvent.THREE_RECHARGE, data);
|
},
|
//请求每次礼包数据
|
sender21006: function sender21006() {
|
this.SendProtocal(21006, {});
|
},
|
handle21006: function handle21006(data) {
|
if (data) {
|
this.model.setDailyGiftData(data.first_gift);
|
gcore.GlobalEvent.fire(VipEvent.DAILY_GIFT_INFO);
|
}
|
},
|
//请求购买VIP特权礼包
|
sender24501: function sender24501(id) {
|
var protocal = {};
|
protocal.id = id;
|
this.SendProtocal(24501, protocal);
|
},
|
handle24501: function handle24501(data) {
|
if (data.msg) {
|
message(data.msg);
|
}
|
},
|
//请求VIP特权礼包数据
|
sender24502: function sender24502() {
|
this.SendProtocal(24502, {});
|
},
|
handle24502: function handle24502(data) {
|
if (data) {
|
this.model.setPrivilegeList(data.list);
|
var status = this.model.getPrivilegeRedStatus();
|
this.setTipsVIPStstus(VIPREDPOINT.PRIVILEGE, status);
|
gcore.GlobalEvent.fire(VipEvent.PRIVILEGE_INFO);
|
}
|
},
|
//VIP界面月卡领取
|
sender16707: function sender16707() {
|
this.SendProtocal(16707, {});
|
},
|
handle16707: function handle16707(data) {
|
var status = false;
|
|
if (data.status == 1) {
|
status = true;
|
}
|
|
this.model.setMonthCard(data.status);
|
this.setTipsVIPStstus(VIPREDPOINT.MONTH_CARD, status);
|
gcore.GlobalEvent.fire(VipEvent.SUPRE_CARD_GET, data.status);
|
},
|
sender16708: function sender16708() {
|
this.SendProtocal(16708, {});
|
},
|
handle16708: function handle16708(data) {
|
message(data.msg);
|
},
|
//VIP礼包领取信息
|
sender16710: function sender16710() {
|
this.SendProtocal(16710, {});
|
},
|
handle16710: function handle16710(data) {
|
this.model.setGetGiftList(data.list);
|
|
if (this.role_vo == null) {
|
this.role_vo = RoleController.getInstance().getRoleVo();
|
}
|
|
var get_list = this.model.getGetGiftList();
|
var item_status = get_list[this.role_vo.vip_lev] == null && this.getIsFirst();
|
this.setTipsVIPStstus(VIPREDPOINT.VIP_TAB, item_status);
|
gcore.GlobalEvent.fire(VipEvent.UPDATA_ITEM_REDPOINT);
|
},
|
//红点
|
setTipsVIPStstus: function setTipsVIPStstus(bid, status) {
|
this.vip_redpoint_status[bid] = status;
|
var redpoint = false;
|
|
for (var i in this.vip_redpoint_status) {
|
var v = this.vip_redpoint_status[i];
|
|
if (v == true) {
|
redpoint = true;
|
break;
|
}
|
}
|
|
var MainuiController = require("mainui_controller");
|
|
var MainuiConst = require("mainui_const");
|
|
MainuiController.getInstance().setFunctionTipsStatus(MainuiConst.icon.charge, redpoint);
|
},
|
//VIP等级奖励领取
|
sender16711: function sender16711(lev) {
|
var protocal = {};
|
protocal.lev = lev;
|
this.SendProtocal(16711, protocal);
|
},
|
handle16711: function handle16711(data) {
|
message(data.msg);
|
},
|
//累充奖励信息
|
sender16712: function sender16712() {
|
this.SendProtocal(16712, {});
|
},
|
handle16712: function handle16712(data) {
|
this.charge_sum = data.charge_sum; //当前总充值数
|
|
this.model.setAccList(data.list);
|
gcore.GlobalEvent.fire(VipEvent.ACC_RECHARGE_INFO, data);
|
},
|
getChargeSum: function getChargeSum() {
|
return this.charge_sum || 0;
|
},
|
//领取累充奖励
|
sender16713: function sender16713(id) {
|
var protocal = {};
|
protocal.id = id;
|
this.SendProtocal(16713, protocal);
|
},
|
handle16713: function handle16713(data) {
|
message(data.msg);
|
},
|
//
|
sender16730: function sender16730() {
|
var protocal = {};
|
this.SendProtocal(16730, protocal);
|
},
|
// time
|
// state
|
handle16730: function handle16730(data) {
|
this.model.setGiveVipInfo(data);
|
this.model.setGiveVipStatus();
|
gcore.GlobalEvent.fire(VipEvent.GIVE_VIP_UPDATE);
|
},
|
//
|
sender16731: function sender16731() {
|
var protocal = {};
|
this.SendProtocal(16731, protocal);
|
},
|
//领取vip
|
handle16731: function handle16731(data) {
|
message(data.msg);
|
|
if (data.code == 1) {
|
this.openVipAwardWindow();
|
this.sender16730();
|
}
|
},
|
//index是大标签页 VIPTABCONST
|
//sub_type是vip特权界面的 要跳哪个等级就传哪个等级
|
openVipMainWindow: function openVipMainWindow(status, index, sub_type, callFunc) {
|
if (status) {
|
if (IS_SHOW_CHARGE == false) {
|
message(Utils.TI18N("功能暂未开放,敬请期待"));
|
return;
|
}
|
|
var charge_cfg = gdata("charge_data", "data_constant", ["open_lv"]);
|
|
if (charge_cfg) {
|
if (this.role_vo && this.role_vo.lev < charge_cfg.val) {
|
message(charge_cfg.desc);
|
return;
|
}
|
}
|
|
if (!this.vip_window) {
|
this.vip_window = Utils.createClass("vip_main_window");
|
}
|
|
index = index || 1;
|
|
if (this.vip_window) {
|
this.vip_window.open(index, sub_type);
|
}
|
|
if (callFunc) {
|
this.deleteCallFunc = callFunc;
|
}
|
} else {
|
if (this.vip_window) {
|
this.vip_window.close();
|
this.vip_window = null;
|
|
if (this.deleteCallFunc) {
|
this.deleteCallFunc();
|
this.deleteCallFunc = null;
|
}
|
}
|
}
|
},
|
// 打开奖励VIP界面
|
openVipAwardWindow: function openVipAwardWindow(status) {
|
if (status == true) {
|
if (!this.vip_award_window) {
|
this.vip_award_window = Utils.createClass("vip_award_window", this);
|
}
|
|
if (this.vip_award_window && this.vip_award_window.isOpen() == false) {
|
this.vip_award_window.open();
|
}
|
} else {
|
if (this.vip_award_window) {
|
this.vip_award_window.close();
|
this.vip_award_window = null;
|
}
|
}
|
},
|
//切换vip面板的标签页
|
changeMainWindowTab: function changeMainWindowTab(index) {
|
if (this.vip_window) {
|
this.vip_window.changeTabView(index);
|
}
|
},
|
handle21020: function handle21020(data) {
|
var status = false;
|
|
if (data.code == 1) {
|
status = true;
|
}
|
|
var MainuiController = require("mainui_controller");
|
|
var MainuiConst = require("mainui_const");
|
|
MainuiController.getInstance().setFunctionTipsStatus(MainuiConst.icon.one_gift, status);
|
}
|
});
|
module.exports = VipController;
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx2aXBcXHZpcF9jb250cm9sbGVyLmpzIl0sIm5hbWVzIjpbIlJvbGVDb250cm9sbGVyIiwicmVxdWlyZSIsIlZpcEV2ZW50IiwiVmlwQ29udHJvbGxlciIsImNjIiwiQ2xhc3MiLCJCYXNlQ29udHJvbGxlciIsImN0b3IiLCJpbml0Q29uZmlnIiwiVmlwTW9kZWwiLCJtb2RlbCIsInZpcF9yZWRwb2ludF9zdGF0dXMiLCJ2aXBfcHJpdmlsZWdlX3JlZHBvaW50IiwiaXNfZmlyc3QiLCJnZXRNb2RlbCIsInJlZ2lzdGVyRXZlbnRzIiwibG9naW5fZXZlbnRfc3VjY2VzcyIsImdjb3JlIiwiR2xvYmFsRXZlbnQiLCJiaW5kIiwiRXZlbnRJZCIsIkVWVF9ST0xFX0NSRUFURV9TVUNDRVNTIiwidW5iaW5kIiwicm9sZV92byIsImdldEluc3RhbmNlIiwiZ2V0Um9sZVZvIiwicm9sZV9hc3NldHNfZXZlbnQiLCJVUERBVEVfUk9MRV9BVFRSSUJVVEUiLCJrZXkiLCJ2YWx1ZSIsInNldElzRmlyc3QiLCJnZXRfbGlzdCIsImdldEdldEdpZnRMaXN0IiwiaXRlbV9zdGF0dXMiLCJ2aXBfbGV2IiwiZ2V0SXNGaXJzdCIsInNldFRpcHNWSVBTdHN0dXMiLCJWSVBSRURQT0lOVCIsIlZJUF9UQUIiLCJmaXJlIiwiVVBEQVRBX0lURU1fUkVEUE9JTlQiLCJyZV9saW5rX2dhbWVfZXZlbnQiLCJFVlRfUkVfTElOS19HQU1FIiwicmVnaXN0ZXJQcm90b2NhbHMiLCJSZWdpc3RlclByb3RvY2FsIiwiaGFuZGxlMTY3MDAiLCJoYW5kbGUxNjcxMCIsImhhbmRsZTE2NzExIiwiaGFuZGxlMTY3MTIiLCJoYW5kbGUxNjcxMyIsImhhbmRsZTIxMDA1IiwiaGFuZGxlMjEwMDYiLCJoYW5kbGUyNDUwMSIsImhhbmRsZTI0NTAyIiwiaGFuZGxlMTY3MDciLCJoYW5kbGUxNjcwOCIsImhhbmRsZTE2NzMwIiwiaGFuZGxlMTY3MzEiLCJoYW5kbGUyMTAyMCIsInNldFByaXZpbGVnZVJlZHBvaW50IiwiaW5kZXgiLCJzdGF0dXMiLCJnZXRQcml2aWxlZ2VSZWRwb2ludCIsInNlbmRlcjE2NzAwIiwiU2VuZFByb3RvY2FsIiwiZGF0YSIsIlVQREFURV9DSEFSR0VfTElTVCIsImxpc3QiLCJzZW5kZXIyMTAwNSIsIlRIUkVFX1JFQ0hBUkdFIiwic2VuZGVyMjEwMDYiLCJzZXREYWlseUdpZnREYXRhIiwiZmlyc3RfZ2lmdCIsIkRBSUxZX0dJRlRfSU5GTyIsInNlbmRlcjI0NTAxIiwiaWQiLCJwcm90b2NhbCIsIm1zZyIsIm1lc3NhZ2UiLCJzZW5kZXIyNDUwMiIsInNldFByaXZpbGVnZUxpc3QiLCJnZXRQcml2aWxlZ2VSZWRTdGF0dXMiLCJQUklWSUxFR0UiLCJQUklWSUxFR0VfSU5GTyIsInNlbmRlcjE2NzA3Iiwic2V0TW9udGhDYXJkIiwiTU9OVEhfQ0FSRCIsIlNVUFJFX0NBUkRfR0VUIiwic2VuZGVyMTY3MDgiLCJzZW5kZXIxNjcxMCIsInNldEdldEdpZnRMaXN0IiwiYmlkIiwicmVkcG9pbnQiLCJpIiwidiIsIk1haW51aUNvbnRyb2xsZXIiLCJNYWludWlDb25zdCIsInNldEZ1bmN0aW9uVGlwc1N0YXR1cyIsImljb24iLCJjaGFyZ2UiLCJzZW5kZXIxNjcxMSIsImxldiIsInNlbmRlcjE2NzEyIiwiY2hhcmdlX3N1bSIsInNldEFjY0xpc3QiLCJBQ0NfUkVDSEFSR0VfSU5GTyIsImdldENoYXJnZVN1bSIsInNlbmRlcjE2NzEzIiwic2VuZGVyMTY3MzAiLCJzZXRHaXZlVmlwSW5mbyIsInNldEdpdmVWaXBTdGF0dXMiLCJHSVZFX1ZJUF9VUERBVEUiLCJzZW5kZXIxNjczMSIsImNvZGUiLCJvcGVuVmlwQXdhcmRXaW5kb3ciLCJvcGVuVmlwTWFpbldpbmRvdyIsInN1Yl90eXBlIiwiY2FsbEZ1bmMiLCJJU19TSE9XX0NIQVJHRSIsIlV0aWxzIiwiVEkxOE4iLCJjaGFyZ2VfY2ZnIiwiZ2RhdGEiLCJ2YWwiLCJkZXNjIiwidmlwX3dpbmRvdyIsImNyZWF0ZUNsYXNzIiwib3BlbiIsImRlbGV0ZUNhbGxGdW5jIiwiY2xvc2UiLCJ2aXBfYXdhcmRfd2luZG93IiwiaXNPcGVuIiwiY2hhbmdlTWFpbldpbmRvd1RhYiIsImNoYW5nZVRhYlZpZXciLCJvbmVfZ2lmdCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsY0FBYyxHQUFHQyxPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSUMsUUFBUSxHQUFHRCxPQUFPLENBQUMsV0FBRCxDQUF0Qjs7QUFFQSxJQUFJRSxhQUFhLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQ3pCLGFBQVNDLGNBRGdCO0FBRXpCQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVksQ0FDakIsQ0FId0I7QUFLekI7QUFDQUMsRUFBQUEsVUFBVSxFQUFFLHNCQUFZO0FBQ3BCLFFBQUlDLFFBQVEsR0FBR1IsT0FBTyxDQUFDLFdBQUQsQ0FBdEI7O0FBRUEsU0FBS1MsS0FBTCxHQUFhLElBQUlELFFBQUosRUFBYjtBQUNBLFNBQUtDLEtBQUwsQ0FBV0YsVUFBWDtBQUVBLFNBQUtHLG1CQUFMLEdBQTJCLEVBQTNCO0FBQ0EsU0FBS0Msc0JBQUwsR0FBOEIsRUFBOUIsQ0FQb0IsQ0FPYTs7QUFDakMsU0FBS0MsUUFBTCxHQUFnQixJQUFoQjtBQUNILEdBZndCO0FBaUJ6QjtBQUNBQyxFQUFBQSxRQUFRLEVBQUUsb0JBQVk7QUFDbEIsV0FBTyxLQUFLSixLQUFaO0FBQ0gsR0FwQndCO0FBc0J6QjtBQUNBSyxFQUFBQSxjQUFjLEVBQUUsMEJBQVk7QUFDeEIsUUFBSSxLQUFLQyxtQkFBTCxJQUE0QixJQUFoQyxFQUFzQztBQUNsQyxXQUFLQSxtQkFBTCxHQUEyQkMsS0FBSyxDQUFDQyxXQUFOLENBQWtCQyxJQUFsQixDQUF1QkMsT0FBTyxDQUFDQyx1QkFBL0IsRUFBd0QsWUFBWTtBQUMzRkosUUFBQUEsS0FB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a0JBQWxCLEVBQXFDLElBQXJDLENBQXhCO0FBQ0g7O0FBQ0QsVUFBRyxLQUFLSSxnQkFBTCxJQUF5QixLQUFLQSxnQkFBTCxDQUFzQkMsTUFBdEIsTUFBa0MsS0FBOUQsRUFBb0U7QUFDaEUsYUFBS0QsZ0JBQUwsQ0FBc0JILElBQXRCO0FBQ0g7QUFFSixLQVJELE1BUUs7QUFDRCxVQUFHLEtBQUtHLGdCQUFSLEVBQTRCO0FBQ3hCLGFBQUtBLGdCQUFMLENBQXNCRCxLQUF0QjtBQUNBLGFBQUtDLGdCQUFMLEdBQXdCLElBQXhCO0FBQ0g7QUFDSjtBQUNKLEdBeFV3QjtBQTBVekI7QUFDQUUsRUFBQUEsbUJBQW1CLEVBQUUsNkJBQVV4RSxLQUFWLEVBQWlCO0FBQ2xDLFFBQUksS0FBS2lFLFVBQVQsRUFBcUI7QUFDakIsV0FBS0EsVUFBTCxDQUFnQlEsYUFBaEIsQ0FBOEJ6RSxLQUE5QjtBQUNIO0FBQ0osR0EvVXdCO0FBaVZ6QkYsRUFBQUEsV0FqVnlCLHVCQWlWYk8sSUFqVmEsRUFpVlI7QUFDYixRQUFJSixNQUFNLEdBQUcsS0FBYjs7QUFDQSxRQUFHSSxJQUFJLENBQUNnRCxJQUFMLElBQWEsQ0FBaEIsRUFBa0I7QUFDZHBELE1BQUFBLE1BQU0sR0FBRyxJQUFUO0FBQ0g7O0FBQ0QsUUFBSWtDLGdCQUFnQixHQUFHOUYsT0FBTyxDQUFDLG1CQUFELENBQTlCOztBQUNBLFFBQUkrRixXQUFXLEdBQUcvRixPQUFPLENBQUMsY0FBRCxDQUF6Qjs7QUFDQThGLElBQUFBLGdCQUFnQixDQUFDdkUsV0FBakIsR0FBK0J5RSxxQkFBL0IsQ0FBcURELFdBQVcsQ0FBQ0UsSUFBWixDQUFpQm9DLFFBQXRFLEVBQWdGekUsTUFBaEY7QUFDSDtBQXpWd0IsQ0FBVCxDQUFwQjtBQTRWQTBFLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQnJJLGFBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAgIOi/memHjOWhq+WGmeivpue7huivtOaYjizkuLvopoHloavlhpnor6XmqKHlnZfnmoTlip/og73nroDopoFcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTAyLTI2IDIxOjA3OjMyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFJvbGVDb250cm9sbGVyID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKTtcbnZhciBWaXBFdmVudCA9IHJlcXVpcmUoXCJ2aXBfZXZlbnRcIik7XG5cbnZhciBWaXBDb250cm9sbGVyID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VDb250cm9sbGVyLFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW6YWN572u5pWw5o2uXG4gICAgaW5pdENvbmZpZzogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgVmlwTW9kZWwgPSByZXF1aXJlKFwidmlwX21vZGVsXCIpO1xuXG4gICAgICAgIHRoaXMubW9kZWwgPSBuZXcgVmlwTW9kZWwoKTtcbiAgICAgICAgdGhpcy5tb2RlbC5pbml0Q29uZmlnKCk7XG5cbiAgICAgICAgdGhpcy52aXBfcmVkcG9pbnRfc3RhdHVzID0ge307XG4gICAgICAgIHRoaXMudmlwX3ByaXZpbGVnZV9yZWRwb2ludCA9IHt9Oy8vdmlw54m55p2DIGl0ZW0g57qi54K5XG4gICAgICAgIHRoaXMuaXNfZmlyc3QgPSB0cnVlO1xuICAgIH0sXG5cbiAgICAvLyDov5Tlm57lvZPliY3nmoRtb2RlbFxuICAgIGdldE1vZGVsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhoznm5HlkKzkuovku7ZcbiAgICByZWdpc3RlckV2ZW50czogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5sb2dpbl9ldmVudF9zdWNjZXNzID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubG9naW5fZXZlbnRfc3VjY2VzcyA9IGdjb3JlLkdsb2JhbEV2ZW50LmJpbmQoRXZlbnRJZC5FVlRfUk9MRV9DUkVBVEVfU1VDQ0VTUywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LnVuYmluZCh0aGlzLmxvZ2luX2V2ZW50X3N1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9naW5fZXZlbnRfc3VjY2VzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5yb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yb2xlX3ZvKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvbGVfYXNzZXRzX2V2ZW50ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm9sZV9hc3NldHNfZXZlbnQgPSB0aGlzLnJvbGVfdm8uYmluZChFdmVudElkLlVQREFURV9ST0xFX0FUVFJJQlVURSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09IFwidmlwX2xldlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SXNGaXJzdCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdldF9saXN0ID0gdGhpcy5tb2RlbC5nZXRHZXRHaWZ0TGlzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbV9zdGF0dXMgPSAoZ2V0X2xpc3RbdGhpcy5yb2xlX3ZvLnZpcF9sZXZdID09IG51bGwpICYmIHRoaXMuZ2V0SXNGaXJzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRpcHNWSVBTdHN0dXMoVklQUkVEUE9JTlQuVklQX1RBQiwgaXRlbV9zdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFZpcEV2ZW50LlVQREFUQV9JVEVNX1JFRFBPSU5UKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyB0aGlzLnNlbmRlcjE2NzA3KCkgLy/mnIjljaHpooblj5ZcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnNlbmRlcjE2NzEwKCkgLy9WSVDnpLzljIXnuqLngrnnlKhcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnNlbmRlcjE2NzEyKCkgLy/ntK/lhYXnuqLngrlcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnNlbmRlcjIxMDA2KCkgLy/mr4/ml6XnpLzljIVcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnNlbmRlcjI0NTAyKCkgLy/nibnmnYPnpLzljIVcbiAgICAgICAgICAgIH0sIHRoaXMpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yZV9saW5rX2dhbWVfZXZlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5yZV9saW5rX2dhbWVfZXZlbnQgPSBnY29yZS5HbG9iYWxFdmVudC5iaW5kKEV2ZW50SWQuRVZUX1JFX0xJTktfR0FNRSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMuc2VuZGVyMjEwMDYoKTtcbiAgICAgICAgICAgIH0sIHRoaXMpXG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5Y2P6K6u5o6l5Y+X5LqL5Lu2XG4gICAgcmVnaXN0ZXJQcm90b2NhbHM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDE2NzAwLCB0aGlzLmhhbmRsZTE2NzAwKSAvL+iOt+WPluWFheWAvOWIl+ihqOS/oeaBr1xuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTY3MTAsIHRoaXMuaGFuZGxlMTY3MTApIC8vVklQ56S85YyF6aKG5Y+W5L+h5oGvXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxNjcxMSwgdGhpcy5oYW5kbGUxNjcxMSkgLy9WSVDnrYnnuqflpZblirHpooblj5ZcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDE2NzEyLCB0aGlzLmhhbmRsZTE2NzEyKSAvL+iOt+WPluawuOS5hee0r+WFheS/oeaBr1xuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTY3MTMsIHRoaXMuaGFuZGxlMTY3MTMpIC8v6aKG5Y+W57Sv5YWF5aWW5YqxXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgyMTAwNSwgdGhpcy5oYW5kbGUyMTAwNSkgLy/kuInlgI3ov5TliKnkv6Hmga9cbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDIxMDA2LCB0aGlzLmhhbmRsZTIxMDA2KSAvL+avj+aXpeekvOWMheaVsOaNrlxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMjQ1MDEsIHRoaXMuaGFuZGxlMjQ1MDEpIC8v6LSt5LmwVklQ54m55p2D56S85YyFXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgyNDUwMiwgdGhpcy5oYW5kbGUyNDUwMikgLy9WSVDnibnmnYPnpLzljIXmlbDmja5cblxuICAgICAgICB0aGlzLlJlZ2lzdGVyUHJvdG9jYWwoMTY3MDcsIHRoaXMuaGFuZGxlMTY3MDcpXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxNjcwOCwgdGhpcy5oYW5kbGUxNjcwOClcbiAgICAgICAgXG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxNjczMCwgdGhpcy5oYW5kbGUxNjczMCk7XG4gICAgICAgIHRoaXMuUmVnaXN0ZXJQcm90b2NhbCgxNjczMSwgdGhpcy5oYW5kbGUxNjczMSk7XG4gICAgICBcbiAgICAgICAgdGhpcy5SZWdpc3RlclByb3RvY2FsKDIxMDIwLCB0aGlzLmhhbmRsZTIxMDIwKTsvL+avj+aXpeS4gOWFg+e6oueCuVxuICAgIH0sXG5cbiAgICBzZXRQcml2aWxlZ2VSZWRwb2ludDogZnVuY3Rpb24gKGluZGV4LCBzdGF0dXMpIHtcbiAgICAgICAgdGhpcy52aXBfcHJpdmlsZWdlX3JlZHBvaW50W2luZGV4XSA9IHN0YXR1cztcbiAgICB9LFxuXG4gICAgZ2V0UHJpdmlsZWdlUmVkcG9pbnQ6IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICB2YXIgc3RhdHVzID0gdGhpcy52aXBfcHJpdmlsZWdlX3JlZHBvaW50W2luZGV4XTtcbiAgICAgICAgcmV0dXJuIHN0YXR1c1xuICAgIH0sXG5cbiAgICBnZXRJc0ZpcnN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzX2ZpcnN0XG4gICAgfSxcblxuICAgIHNldElzRmlyc3Q6IGZ1bmN0aW9uIChzdGF0dXMpIHtcbiAgICAgICAgdGhpcy5pc19maXJzdCA9IHN0YXR1c1xuICAgIH0sXG5cbiAgICAvL+iOt+WPluWFheWAvOWIl+ihqOS/oeaBr1xuICAgIHNlbmRlcjE2NzAwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDE2NzAwLCB7fSlcbiAgICB9LFxuXG4gICAgaGFuZGxlMTY3MDA6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoVmlwRXZlbnQuVVBEQVRFX0NIQVJHRV9MSVNULCBkYXRhLmxpc3QpO1xuICAgIH0sXG5cbiAgICAvL+S4ieWAjei/lOWIqeS/oeaBr1xuICAgIHNlbmRlcjIxMDA1OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDIxMDA1LCB7fSlcbiAgICB9LFxuXG4gICAgaGFuZGxlMjEwMDU6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoVmlwRXZlbnQuVEhSRUVfUkVDSEFSR0UsIGRhdGEpO1xuICAgIH0sXG5cbiAgICAvL+ivt+axguavj+asoeekvOWMheaVsOaNrlxuICAgIHNlbmRlcjIxMDA2OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDIxMDA2LCB7fSlcbiAgICB9LFxuXG4gICAgaGFuZGxlMjEwMDY6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNldERhaWx5R2lmdERhdGEoZGF0YS5maXJzdF9naWZ0KTtcbiAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoVmlwRXZlbnQuREFJTFlfR0lGVF9JTkZPKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+ivt+axgui0reS5sFZJUOeJueadg+ekvOWMhVxuICAgIHNlbmRlcjI0NTAxOiBmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgdmFyIHByb3RvY2FsID0ge307XG4gICAgICAgIHByb3RvY2FsLmlkID0gaWQ7XG4gICAgICAgIHRoaXMuU2VuZFByb3RvY2FsKDI0NTAxLCBwcm90b2NhbCk7XG4gICAgfSxcblxuICAgIGhhbmRsZTI0NTAxOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YS5tc2cpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v6K+35rGCVklQ54m55p2D56S85YyF5pWw5o2uXG4gICAgc2VuZGVyMjQ1MDI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMjQ1MDIsIHt9KTtcbiAgICB9LFxuXG4gICAgaGFuZGxlMjQ1MDI6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNldFByaXZpbGVnZUxpc3QoZGF0YS5saXN0KTtcbiAgICAgICAgICAgIHZhciBzdGF0dXMgPSB0aGlzLm1vZGVsLmdldFByaXZpbGVnZVJlZFN0YXR1cygpO1xuICAgICAgICAgICAgdGhpcy5zZXRUaXBzVklQU3RzdHVzKFZJUFJFRFBPSU5ULlBSSVZJTEVHRSwgc3RhdHVzKTtcbiAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoVmlwRXZlbnQuUFJJVklMRUdFX0lORk8pO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vVklQ55WM6Z2i5pyI5Y2h6aKG5Y+WXG4gICAgc2VuZGVyMTY3MDc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTY3MDcsIHt9KTtcbiAgICB9LFxuXG4gICAgaGFuZGxlMTY3MDc6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHZhciBzdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgaWYgKGRhdGEuc3RhdHVzID09IDEpIHtcbiAgICAgICAgICAgIHN0YXR1cyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RlbC5zZXRNb250aENhcmQoZGF0YS5zdGF0dXMpO1xuICAgICAgICB0aGlzLnNldFRpcHNWSVBTdHN0dXMoVklQUkVEUE9JTlQuTU9OVEhfQ0FSRCwgc3RhdHVzKTtcbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShWaXBFdmVudC5TVVBSRV9DQVJEX0dFVCwgZGF0YS5zdGF0dXMpO1xuICAgIH0sXG5cbiAgICBzZW5kZXIxNjcwODogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxNjcwOCwge30pO1xuICAgIH0sXG5cbiAgICBoYW5kbGUxNjcwODogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZylcbiAgICB9LFxuXG4gICAgLy9WSVDnpLzljIXpooblj5bkv6Hmga9cbiAgICBzZW5kZXIxNjcxMDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxNjcxMCwge30pO1xuICAgIH0sXG5cbiAgICBoYW5kbGUxNjcxMDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5zZXRHZXRHaWZ0TGlzdChkYXRhLmxpc3QpO1xuICAgICAgICBpZiAodGhpcy5yb2xlX3ZvID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMucm9sZV92byA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdldF9saXN0ID0gdGhpcy5tb2RlbC5nZXRHZXRHaWZ0TGlzdCgpO1xuICAgICAgICB2YXIgaXRlbV9zdGF0dXMgPSAoZ2V0X2xpc3RbdGhpcy5yb2xlX3ZvLnZpcF9sZXZdID09IG51bGwpICYmIHRoaXMuZ2V0SXNGaXJzdCgpO1xuICAgICAgICB0aGlzLnNldFRpcHNWSVBTdHN0dXMoVklQUkVEUE9JTlQuVklQX1RBQiwgaXRlbV9zdGF0dXMpO1xuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFZpcEV2ZW50LlVQREFUQV9JVEVNX1JFRFBPSU5UKVxuICAgIH0sXG5cbiAgICAvL+e6oueCuVxuICAgIHNldFRpcHNWSVBTdHN0dXM6IGZ1bmN0aW9uIChiaWQsIHN0YXR1cykge1xuICAgICAgICB0aGlzLnZpcF9yZWRwb2ludF9zdGF0dXNbYmlkXSA9IHN0YXR1c1xuICAgICAgICBsZXQgcmVkcG9pbnQgPSBmYWxzZVxuICAgICAgICBmb3IgKGxldCBpIGluIHRoaXMudmlwX3JlZHBvaW50X3N0YXR1cykge1xuICAgICAgICAgICAgbGV0IHYgPSB0aGlzLnZpcF9yZWRwb2ludF9zdGF0dXNbaV1cbiAgICAgICAgICAgIGlmICh2ID09IHRydWUpIHtcbiAgICAgICAgICAgICAgICByZWRwb2ludCA9IHRydWVcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBNYWludWlDb250cm9sbGVyID0gcmVxdWlyZShcIm1haW51aV9jb250cm9sbGVyXCIpXG4gICAgICAgIHZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIilcbiAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnNldEZ1bmN0aW9uVGlwc1N0YXR1cyhNYWludWlDb25zdC5pY29uLmNoYXJnZSwgcmVkcG9pbnQpXG4gICAgfSxcblxuICAgIC8vVklQ562J57qn5aWW5Yqx6aKG5Y+WXG4gICAgc2VuZGVyMTY3MTE6IGZ1bmN0aW9uIChsZXYpIHtcbiAgICAgICAgdmFyIHByb3RvY2FsID0ge307XG4gICAgICAgIHByb3RvY2FsLmxldiA9IGxldjtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTY3MTEsIHByb3RvY2FsKTtcbiAgICB9LFxuXG4gICAgaGFuZGxlMTY3MTE6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpXG4gICAgfSxcblxuICAgIC8v57Sv5YWF5aWW5Yqx5L+h5oGvXG4gICAgc2VuZGVyMTY3MTI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTY3MTIsIHt9KTtcbiAgICB9LFxuXG4gICAgaGFuZGxlMTY3MTI6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMuY2hhcmdlX3N1bSA9IGRhdGEuY2hhcmdlX3N1bSAvL+W9k+WJjeaAu+WFheWAvOaVsFxuICAgICAgICB0aGlzLm1vZGVsLnNldEFjY0xpc3QoZGF0YS5saXN0KTtcbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShWaXBFdmVudC5BQ0NfUkVDSEFSR0VfSU5GTywgZGF0YSk7XG4gICAgfSxcblxuICAgIGdldENoYXJnZVN1bTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFyZ2Vfc3VtIHx8IDA7XG4gICAgfSxcblxuICAgIC8v6aKG5Y+W57Sv5YWF5aWW5YqxXG4gICAgc2VuZGVyMTY3MTM6IGZ1bmN0aW9uIChpZCkge1xuICAgICAgICB2YXIgcHJvdG9jYWwgPSB7fTtcbiAgICAgICAgcHJvdG9jYWwuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTY3MTMsIHByb3RvY2FsKTtcbiAgICB9LFxuXG4gICAgaGFuZGxlMTY3MTM6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIG1lc3NhZ2UoZGF0YS5tc2cpO1xuICAgIH0sXG5cbiAgICAvL1xuICAgIHNlbmRlcjE2NzMwOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwcm90b2NhbCA9IHt9O1xuICAgICAgICB0aGlzLlNlbmRQcm90b2NhbCgxNjczMCwgcHJvdG9jYWwpO1xuICAgIH0sXG5cbiAgICAvLyB0aW1lXG4gICAgLy8gc3RhdGVcbiAgICBoYW5kbGUxNjczMDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5zZXRHaXZlVmlwSW5mbyhkYXRhKTtcbiAgICAgICAgdGhpcy5tb2RlbC5zZXRHaXZlVmlwU3RhdHVzKCk7XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoVmlwRXZlbnQuR0lWRV9WSVBfVVBEQVRFKTtcbiAgICB9LFxuXG4gICAgLy9cbiAgICBzZW5kZXIxNjczMTogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJvdG9jYWwgPSB7fTtcbiAgICAgICAgdGhpcy5TZW5kUHJvdG9jYWwoMTY3MzEsIHByb3RvY2FsKTtcbiAgICB9LFxuXG4gICAgLy/pooblj5Z2aXBcbiAgICBoYW5kbGUxNjczMTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIGlmKGRhdGEuY29kZSA9PSAxKXtcbiAgICAgICAgICAgIHRoaXMub3BlblZpcEF3YXJkV2luZG93KCk7XG4gICAgICAgICAgICB0aGlzLnNlbmRlcjE2NzMwKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy9pbmRleOaYr+Wkp+agh+etvumhtSBWSVBUQUJDT05TVFxuICAgIC8vc3ViX3R5cGXmmK92aXDnibnmnYPnlYzpnaLnmoQg6KaB6Lez5ZOq5Liq562J57qn5bCx5Lyg5ZOq5Liq562J57qnXG4gICAgb3BlblZpcE1haW5XaW5kb3c6IGZ1bmN0aW9uIChzdGF0dXMsIGluZGV4LCBzdWJfdHlwZSAsY2FsbEZ1bmMpIHtcbiAgICAgICAgaWYgKHN0YXR1cykge1xuICAgICAgICAgICAgaWYgKElTX1NIT1dfQ0hBUkdFID09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIuWKn+iDveaaguacquW8gOaUvu+8jOaVrOivt+acn+W+hVwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBjaGFyZ2VfY2ZnID0gZ2RhdGEoXCJjaGFyZ2VfZGF0YVwiLCBcImRhdGFfY29uc3RhbnRcIiwgW1wib3Blbl9sdlwiXSk7XG4gICAgICAgICAgICBpZiAoY2hhcmdlX2NmZykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvbGVfdm8gJiYgdGhpcy5yb2xlX3ZvLmxldiA8IGNoYXJnZV9jZmcudmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UoY2hhcmdlX2NmZy5kZXNjKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMudmlwX3dpbmRvdykge1xuICAgICAgICAgICAgICAgIHRoaXMudmlwX3dpbmRvdyA9IFV0aWxzLmNyZWF0ZUNsYXNzKFwidmlwX21haW5fd2luZG93XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5kZXggPSBpbmRleCB8fCAxO1xuICAgICAgICAgICAgaWYgKHRoaXMudmlwX3dpbmRvdykge1xuICAgICAgICAgICAgICAgIHRoaXMudmlwX3dpbmRvdy5vcGVuKGluZGV4LCBzdWJfdHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihjYWxsRnVuYyl7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVDYWxsRnVuYyA9IGNhbGxGdW5jXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy52aXBfd2luZG93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aXBfd2luZG93LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy52aXBfd2luZG93ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmRlbGV0ZUNhbGxGdW5jKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVDYWxsRnVuYygpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlQ2FsbEZ1bmMgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDmiZPlvIDlpZblirFWSVDnlYzpnaJcbiAgICBvcGVuVmlwQXdhcmRXaW5kb3c6ZnVuY3Rpb24oc3RhdHVzKXtcbiAgICAgICAgaWYoc3RhdHVzID09IHRydWUpe1xuICAgICAgICAgICAgaWYoIXRoaXMudmlwX2F3YXJkX3dpbmRvdyl7XG4gICAgICAgICAgICAgICAgdGhpcy52aXBfYXdhcmRfd2luZG93ID0gVXRpbHMuY3JlYXRlQ2xhc3MoXCJ2aXBfYXdhcmRfd2luZG93XCIsdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLnZpcF9hd2FyZF93aW5kb3cgJiYgdGhpcy52aXBfYXdhcmRfd2luZG93LmlzT3BlbigpID09IGZhbHNlKXtcbiAgICAgICAgICAgICAgICB0aGlzLnZpcF9hd2FyZF93aW5kb3cub3BlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYodGhpcy52aXBfYXdhcmRfd2luZG93KSAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpcF9hd2FyZF93aW5kb3cuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpcF9hd2FyZF93aW5kb3cgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8v5YiH5o2idmlw6Z2i5p2/55qE5qCH562+6aG1XG4gICAgY2hhbmdlTWFpbldpbmRvd1RhYjogZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLnZpcF93aW5kb3cpIHtcbiAgICAgICAgICAgIHRoaXMudmlwX3dpbmRvdy5jaGFuZ2VUYWJWaWV3KGluZGV4KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBoYW5kbGUyMTAyMChkYXRhKXtcbiAgICAgICAgdmFyIHN0YXR1cyA9IGZhbHNlO1xuICAgICAgICBpZihkYXRhLmNvZGUgPT0gMSl7XG4gICAgICAgICAgICBzdGF0dXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBNYWludWlDb250cm9sbGVyID0gcmVxdWlyZShcIm1haW51aV9jb250cm9sbGVyXCIpXG4gICAgICAgIHZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIilcbiAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLnNldEZ1bmN0aW9uVGlwc1N0YXR1cyhNYWludWlDb25zdC5pY29uLm9uZV9naWZ0LCBzdGF0dXMpXG4gICAgfSxcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZpcENvbnRyb2xsZXI7Il19
|