(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/mod/invitecode/view/invitecode_panel.js'; var __require = nodeEnv ? function (request) { return cc.require(request); } : function (request) { return __quick_compile_project__.require(request, __filename); }; function __define (exports, require, module) { if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict"; cc._RF.push(module, 'f288aA7kZBKlZ0MFyn+KAh5', 'invitecode_panel'); // Scripts/mod/invitecode/view/invitecode_panel.js "use strict"; // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 这里是描述这个窗体的作用的 //
Create: 2019-04-27 17:53:22 // -------------------------------------------------------------------- var PathTool = require("pathtool"); var InviteCodeEvent = require("invitecode_event"); var RoleController = require("role_controller"); var PlayerHead = require("playerhead"); var InvitecodePanel = cc.Class({ "extends": BasePanel, ctor: function ctor() { this.prefabPath = PathTool.getPrefabPath("welfare", "invitecode_panel"); }, // 可以初始化声明一些变量的 initConfig: function initConfig() { this.ctrl = require("invitecode_controller").getInstance(); this.cur_index = null; this.view_list = {}; }, // 初始化一些配置数据,可以用于声明一些变量之类的 initPanel: function initPanel() { this.main_container = this.seekChild("main_container"); this.bg_sp = this.seekChild("bg", cc.Sprite); this.loadRes(PathTool.getBigBg("action/action_invitecode"), function (res) { this.bg_sp.spriteFrame = res; }.bind(this)); this.btn_tips_nd = this.seekChild("btn_tips"); this.btn_copy_nd = this.seekChild("btn_copy"); this.btn_shard_nd = this.seekChild("btn_shard"); var Image_17 = this.seekChild("Image_17"); this.invite_code_lb = this.seekChild(Image_17, "invite_code", cc.Label); this.invite_code_lb.string = ""; this.text_invitecode_lb = this.seekChild("text_invitecode", cc.Label); this.text_invitecode_lb.string = ""; this.tab_tilte = {}; var title_text = [Utils.TI18N("我的推荐码"), Utils.TI18N("已推荐好友")]; for (var i = 1; i <= 2; i++) { var tab = {}; tab.btn = this.seekChild("tab_" + i); tab.normal = this.seekChild(tab.btn, "normal"); tab.select = this.seekChild(tab.btn, "select"); tab.title = this.seekChild(tab.btn, "title", cc.Label); tab.select.active = false; tab.title.node.color = new cc.Color(0xcf, 0xb5, 0x93, 0xff); tab.title.string = title_text[i - 1]; tab.index = i; tab.redpoint = this.seekChild(tab.btn, "redpoint"); tab.redpoint.active = false; this.tab_tilte[i] = tab; } this.tabChangeView(1); // this.edit_box = this.seekChild("edit", cc.EditBox); }, // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent registerEvent: function registerEvent() { var _this = this; this.addGlobalEvent(InviteCodeEvent.Get_InviteCode_Event, function () { this.getInviteCodeData(); }, this); this.addGlobalEvent(InviteCodeEvent.InviteCode_BindRole_Event, function () { this.getAlreadyFriendNum(); }, this); this.addGlobalEvent(InviteCodeEvent.InviteCode_BindRole_Updata_Event, function () { this.getAlreadyFriendNum(); }, this); this.btn_tips_nd.on(cc.Node.EventType.TOUCH_END, function (event) { Utils.playButtonSound(1); var pos = event.touch.getLocation(); var desc = StringUtil.parse(Config.invite_code_data.data_const.tips.desc); require("tips_controller").getInstance().showCommonTips(desc, pos, null, null, 500); }); Utils.onTouchEnd(this.btn_copy_nd, function () { this.copyCode(); }.bind(this), 1); Utils.onTouchEnd(this.btn_shard_nd, function () { this.setShardGame(); }.bind(this), 1); var _loop = function _loop() { var v = _this.tab_tilte[i]; Utils.onTouchEnd(v.btn, function () { this.tabChangeView(v.index); }.bind(_this), 1); }; for (var i in this.tab_tilte) { _loop(); } this.addGlobalEvent(InviteCodeEvent.InviteCode_My_Event, function () { var status = require("invitecode_controller").getInstance().getModel().inviteRedPoint(); if (this.tab_tilte[1] && this.tab_tilte[1].redpoint) { this.tab_tilte[1].redpoint.active = status; } }, this); this.edit_box.node.on("editing-did-ended", function (edit_box) { this.edit_box.string = this.invite_code; }, this); this.edit_box.node.on("text-changed", function (edit_box) { this.edit_box.string = this.invite_code; }, this); }, tabChangeView: function tabChangeView(index) { index = index || 1; if (this.cur_index == index) return; if (this.cur_tab != null) { this.cur_tab.select.active = false; this.cur_tab.title.node.color = new cc.Color(0xcf, 0xb5, 0x93, 0xff); } this.cur_index = index; this.cur_tab = this.tab_tilte[this.cur_index]; if (this.cur_tab != null) { this.cur_tab.select.active = true; this.cur_tab.title.node.color = new cc.Color(0xff, 0xed, 0xd6, 0xff); } if (this.pre_panel != null) { if (this.pre_panel.setVisibleStatus) { this.pre_panel.setVisibleStatus(false); } } this.pre_panel = this.createSubPanel(this.cur_index); if (this.pre_panel != null) { if (this.pre_panel.setVisibleStatus) { this.pre_panel.setVisibleStatus(true); } } }, createSubPanel: function createSubPanel(index) { var panel = this.view_list[index]; if (panel == null) { if (index == 1) { //自己的邀请码 panel = Utils.createClass("invitecode_my_panel"); } else if (index == 2) { //已邀请好友 panel = Utils.createClass("invitecode_friend_panel"); } panel.setParent(this.main_container); panel.setPosition(-360, -404); panel.show(); this.view_list[index] = panel; } return panel; }, getInviteCodeData: function getInviteCodeData() { var invite_code = this.ctrl.getModel().getInviteCode(); if (invite_code) { this.invite_code_lb.string = invite_code; this.invite_code = invite_code; this.edit_box.string = invite_code; } else { message(Utils.TI18N("获取邀请码失败")); } }, //邀请人数 getAlreadyFriendNum: function getAlreadyFriendNum() { if (this.text_invitecode_lb) { var num = this.ctrl.getModel().getFirendNum(); var str = cc.js.formatStr(Utils.TI18N("已邀请好友:%s人"), num || 0); this.text_invitecode_lb.string = str; } }, //分享游戏下载和邀请码 setShardGame: function setShardGame() { //如果存在不处理 if (this.poste_picture) return; var container = require("viewmanager").getInstance().getSceneNode(SCENE_TAG.loading); this.poste_picture = Utils.createImage(container, null, 0, 0, cc.v2(0.5, 0.5)); this.poste_picture.type = cc.Sprite.Type.SIMPLE; this.poste_picture.sizeMode = cc.Sprite.SizeMode.CUSTOM; this.poste_picture.node.setContentSize(720, 1280); this.poste_picture.node.scale = FIT_SCALE; this.layout = new cc.Node(); this.layout.setParent(this.poste_picture.node); this.layout.setPosition(0, 0); var role_vo = require("role_controller").getInstance().getRoleVo(); var apk_data = require("role_controller").getInstance().getApkData(); this.head = new PlayerHead(); this.head.show(); this.head.setPosition(-258, -573); this.head.setHeadRes(role_vo.face_id); this.head.setParent(this.layout); var role_name = Utils.createLabel(30, new cc.Color(0xb9, 0xee, 0xff, 0xff), new cc.Color(0x00, 0x00, 0x00, 0xff), -200, -550, Utils.TI18N(role_vo.name), this.layout, 2, cc.v2(0, 0.5)); var server_name = Utils.createLabel(30, new cc.Color(0xb9, 0xee, 0xff, 0xff), new cc.Color(0x00, 0x00, 0x00, 0xff), 310, -550, Utils.TI18N("服务器: " + role_vo.srv_id), this.layout, 2, cc.v2(1, 0.5)); var login_data = require("login_controller").getInstance().getModel().getLoginData(); if (login_data) { server_name.string = Utils.TI18N("服务器:" + login_data.srv_name); } var shard_text = Utils.createLabel(26, new cc.Color(0xb9, 0xee, 0xff, 0xff), new cc.Color(0x00, 0x00, 0x00, 0xff), -200, -600, Utils.TI18N("我的分享码: "), this.layout, 2, cc.v2(0, 0.5)); var invite_code = require("invitecode_controller").getInstance().getModel().getInviteCode(); shard_text.string = cc.js.formatStr(Utils.TI18N("我的分享码: %s"), invite_code); this.loadRes(PathTool.getIconPath("welfare/welfare_banner", "txt_cn_welfare_bg2"), function (res) { this.poste_picture.spriteFrame = res; var logo_spr = Utils.createImage(this.poste_picture.node, null, 0, 500, cc.v2(0.5, 0.5)); this.loadRes(PathTool.getLogoRes(), function (sp) { logo_spr.spriteFrame = sp; }.bind(this)); logo_spr.type = cc.Sprite.Type.SIMPLE; logo_spr.sizeMode = cc.Sprite.SizeMode.CUSTOM; if (this.time_2) { gcore.Timer.del(this.time_2); this.time_2 = null; } this.time_2 = gcore.Timer.set(function () { var logo_spr = Utils.createImage(this.poste_picture.node, null, 0, 500, cc.v2(0.5, 0.5)); this.loadRes(PathTool.getLogoRes(), function (sp) { logo_spr.spriteFrame = sp; }.bind(this)); logo_spr.type = cc.Sprite.Type.SIMPLE; logo_spr.sizeMode = cc.Sprite.SizeMode.CUSTOM; }.bind(this), 100, 1); // var erweimabg = Utils.createImage(this.poste_picture.node, null, -120, 335, cc.v2(0.5, 0.5)); // this.loadRes(PathTool.getIconPath("welfare/welfare_banner", "txt_cn_welfare_bg3"), function (sp) { // erweimabg.spriteFrame = sp; // }.bind(this)) var erweima = Utils.createImage(this.poste_picture.node, null, -145, -145, cc.v2(0.5, 0.5)); // if(apk_data){ // SDK_.download_qrcode_png(apk_data.message.qrcode_url, function (img) { // var spriteFrame = new cc.SpriteFrame(); // spriteFrame.setTexture(img); // erweima.spriteFrame = spriteFrame; // erweima.node.scale = 340 / erweima.node.width; // }.bind(this)) // } if (USE_SDK) { SDK.download_qrcode_png(function (qrcod_sf) { if (qrcod_sf) this.erweima_img_sp.spriteFrame = spriteFrame; }.bind(this)); } var name = "game_shard"; // SDK.CaptureScreenSaveImg(name,function(bool){ // if(bool==true){ // }else{ // message(Utils.TI18N("保存失败")); // } if (this.time_1) { gcore.Timer.del(this.time_1); this.time_1 = null; } this.time_1 = gcore.Timer.set(function () { if (this.poste_picture) { this.poste_picture.node.removeFromParent(); this.poste_picture = null; } if (this.head) { this.head.deleteMe(); this.head = null; } }.bind(this), 1000, 1); // }.bind(this)); }.bind(this)); }, //复制邀请码 copyCode: function copyCode() { var invite_code = this.ctrl.getModel().getInviteCode(); if (invite_code) { message(Utils.TI18N("复制失败")); } else { message(Utils.TI18N("复制推荐码失败")); } }, setVisibleStatus: function setVisibleStatus(bool) { bool = bool || false; this.setVisible(bool); if (bool == true) { this.ctrl.requestProto(); } }, // 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了 onShow: function onShow(params) { this.getInviteCodeData(); }, // 面板设置不可见的回调,这里做一些不可见的屏蔽处理 onHide: function onHide() {}, // 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用 onDelete: function onDelete() { if (this.poste_picture) { this.poste_picture.node.removeFromParent(); this.poste_picture = null; this.layout = null; } if (this.head) { this.head.deleteMe(); this.head = null; } if (this.time_1) { gcore.Timer.del(this.time_1); this.time_1 = null; } if (this.time_2) { gcore.Timer.del(this.time_2); this.time_2 = null; } for (var i in this.view_list) { this.view_list[i].deleteMe(); this.view_list[i] = null; } this.view_list = null; } }); 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxpbnZpdGVjb2RlXFx2aWV3XFxpbnZpdGVjb2RlX3BhbmVsLmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIkludml0ZUNvZGVFdmVudCIsIlJvbGVDb250cm9sbGVyIiwiUGxheWVySGVhZCIsIkludml0ZWNvZGVQYW5lbCIsImNjIiwiQ2xhc3MiLCJCYXNlUGFuZWwiLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJpbml0Q29uZmlnIiwiY3RybCIsImdldEluc3RhbmNlIiwiY3VyX2luZGV4Iiwidmlld19saXN0IiwiaW5pdFBhbmVsIiwibWFpbl9jb250YWluZXIiLCJzZWVrQ2hpbGQiLCJiZ19zcCIsIlNwcml0ZSIsImxvYWRSZXMiLCJnZXRCaWdCZyIsInJlcyIsInNwcml0ZUZyYW1lIiwiYmluZCIsImJ0bl90aXBzX25kIiwiYnRuX2NvcHlfbmQiLCJidG5fc2hhcmRfbmQiLCJJbWFnZV8xNyIsImludml0ZV9jb2RlX2xiIiwiTGFiZWwiLCJzdHJpbmciLCJ0ZXh0X2ludml0ZWNvZGVfbGIiLCJ0YWJfdGlsdGUiLCJ0aXRsZV90ZXh0IiwiVXRpbHMiLCJUSTE4TiIsImkiLCJ0YWIiLCJidG4iLCJub3JtYWwiLCJzZWxlY3QiLCJ0aXRsZSIsImFjdGl2ZSIsIm5vZGUiLCJjb2xvciIsIkNvbG9yIiwiaW5kZXgiLCJyZWRwb2ludCIsInRhYkNoYW5nZVZpZXciLCJlZGl0X2JveCIsIkVkaXRCb3giLCJyZWdpc3RlckV2ZW50IiwiYWRkR2xvYmFsRXZlbnQiLCJHZXRfSW52aXRlQ29kZV9FdmVudCIsImdldEludml0ZUNvZGVEYXRhIiwiSW52aXRlQ29kZV9CaW5kUm9sZV9FdmVudCIsImdldEFscmVhZHlGcmllbmROdW0iLCJJbnZpdGVDb2RlX0JpbmRSb2xlX1VwZGF0YV9FdmVudCIsIm9uIiwiTm9kZSIsIkV2ZW50VHlwZSIsIlRPVUNIX0VORCIsImV2ZW50IiwicGxheUJ1dHRvblNvdW5kIiwicG9zIiwidG91Y2giLCJnZXRMb2NhdGlvbiIsImRlc2MiLCJTdHJpbmdVdGlsIiwicGFyc2UiLCJDb25maWciLCJpbnZpdGVfY29kZV9kYXRhIiwiZGF0YV9jb25zdCIsInRpcHMiLCJzaG93Q29tbW9uVGlwcyIsIm9uVG91Y2hFbmQiLCJjb3B5Q29kZSIsInNldFNoYXJkR2FtZSIsInYiLCJJbnZpdGVDb2RlX015X0V2ZW50Iiwic3RhdHVzIiwiZ2V0TW9kZWwiLCJpbnZpdGVSZWRQb2ludCIsImludml0ZV9jb2RlIiwiY3VyX3RhYiIsInByZV9wYW5lbCIsInNldFZpc2libGVTdGF0dXMiLCJjcmVhdGVTdWJQYW5lbCIsInBhbmVsIiwiY3JlYXRlQ2xhc3MiLCJzZXRQYXJlbnQiLCJzZXRQb3NpdGlvbiIsInNob3ciLCJnZXRJbnZpdGVDb2RlIiwibWVzc2FnZSIsIm51bSIsImdldEZpcmVuZE51bSIsInN0ciIsImpzIiwiZm9ybWF0U3RyIiwicG9zdGVfcGljdHVyZSIsImNvbnRhaW5lciIsImdldFNjZW5lTm9kZSIsIlNDRU5FX1RBRyIsImxvYWRpbmciLCJjcmVhdGVJbWFnZSIsInYyIiwidHlwZSIsIlR5cGUiLCJTSU1QTEUiLCJzaXplTW9kZSIsIlNpemVNb2RlIiwiQ1VTVE9NIiwic2V0Q29udGVudFNpemUiLCJzY2FsZSIsIkZJVF9TQ0FMRSIsImxheW91dCIsInJvbGVfdm8iLCJnZXRSb2xlVm8iLCJhcGtfZGF0YSIsImdldEFwa0RhdGEiLCJoZWFkIiwic2V0SGVhZFJlcyIsImZhY2VfaWQiLCJyb2xlX25hbWUiLCJjcmVhdGVMYWJlbCIsIm5hbWUiLCJzZXJ2ZXJfbmFtZSIsInNydl9pZCIsImxvZ2luX2RhdGEiLCJnZXRMb2dpbkRhdGEiLCJzcnZfbmFtZSIsInNoYXJkX3RleHQiLCJnZXRJY29uUGF0aCIsImxvZ29fc3ByIiwiZ2V0TG9nb1JlcyIsInNwIiwidGltZV8yIiwiZ2NvcmUiLCJUaW1lciIsImRlbCIsInNldCIsImVyd2VpbWEiLCJVU0VfU0RLIiwiU0RLIiwiZG93bmxvYWRfcXJjb2RlX3BuZyIsInFyY29kX3NmIiwiZXJ3ZWltYV9pbWdfc3AiLCJ0aW1lXzEiLCJyZW1vdmVGcm9tUGFyZW50IiwiZGVsZXRlTWUiLCJib29sIiwic2V0VmlzaWJsZSIsInJlcXVlc3RQcm90byIsIm9uU2hvdyIsInBhcmFtcyIsIm9uSGlkZSIsIm9uRGVsZXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBdEI7O0FBQ0EsSUFBSUMsZUFBZSxHQUFHRCxPQUFPLENBQUMsa0JBQUQsQ0FBN0I7O0FBQ0EsSUFBSUUsY0FBYyxHQUFHRixPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSUcsVUFBVSxHQUFHSCxPQUFPLENBQUMsWUFBRCxDQUF4Qjs7QUFFQSxJQUFJSSxlQUFlLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQzNCLGFBQVNDLFNBRGtCO0FBRTNCQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyxVQUFMLEdBQWtCVixRQUFRLENBQUNXLGFBQVQsQ0FBdUIsU0FBdkIsRUFBa0Msa0JBQWxDLENBQWxCO0FBQ0gsR0FKMEI7QUFNM0I7QUFDQUMsRUFBQUEsVUFBVSxFQUFFLHNCQUFZO0FBQ3BCLFNBQUtDLElBQUwsR0FBWVosT0FBTyxDQUFDLHVCQUFELENBQVAsQ0FBaUNhLFdBQWpDLEVBQVo7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLElBQWpCO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQixFQUFqQjtBQUNILEdBWDBCO0FBYTNCO0FBQ0FDLEVBQUFBLFNBQVMsRUFBRSxxQkFBWTtBQUNuQixTQUFLQyxjQUFMLEdBQXNCLEtBQUtDLFNBQUwsQ0FBZSxnQkFBZixDQUF0QjtBQUVBLFNBQUtDLEtBQUwsR0FBYSxLQUFLRCxTQUFMLENBQWUsSUFBZixFQUFxQmIsRUFBRSxDQUFDZSxNQUF4QixDQUFiO0FBQ0Es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O0FBQ3BCLFdBQUtBLGFBQUwsQ0FBbUJ6RCxJQUFuQixDQUF3QjBHLGdCQUF4QjtBQUNBLFdBQUtqRCxhQUFMLEdBQXFCLElBQXJCO0FBQ0EsV0FBS2dCLE1BQUwsR0FBYyxJQUFkO0FBQ0g7O0FBQ0QsUUFBSSxLQUFLSyxJQUFULEVBQWU7QUFDWCxXQUFLQSxJQUFMLENBQVU2QixRQUFWO0FBQ0EsV0FBSzdCLElBQUwsR0FBWSxJQUFaO0FBQ0g7O0FBQ0QsUUFBRyxLQUFLMkIsTUFBUixFQUFlO0FBQ1hWLE1BQUFBLEtBQUssQ0FBQ0MsS0FBTixDQUFZQyxHQUFaLENBQWdCLEtBQUtRLE1BQXJCO0FBQ0EsV0FBS0EsTUFBTCxHQUFjLElBQWQ7QUFDSDs7QUFDRCxRQUFHLEtBQUtYLE1BQVIsRUFBZTtBQUNYQyxNQUFBQSxLQUFLLENBQUNDLEtBQU4sQ0FBWUMsR0FBWixDQUFnQixLQUFLSCxNQUFyQjtBQUNBLFdBQUtBLE1BQUwsR0FBYyxJQUFkO0FBQ0g7O0FBQ0QsU0FBSSxJQUFJckcsQ0FBUixJQUFhLEtBQUt2QixTQUFsQixFQUE0QjtBQUN4QixXQUFLQSxTQUFMLENBQWV1QixDQUFmLEVBQWtCa0gsUUFBbEI7QUFDQSxXQUFLekksU0FBTCxDQUFldUIsQ0FBZixJQUFvQixJQUFwQjtBQUNIOztBQUNELFNBQUt2QixTQUFMLEdBQWlCLElBQWpCO0FBQ0g7QUE3VDBCLENBQVQsQ0FBdEIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAYXV0aG9yOiB4eHhAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICDov5nph4zmmK/mj4/ov7Dov5nkuKrnqpfkvZPnmoTkvZznlKjnmoRcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA0LTI3IDE3OjUzOjIyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIEludml0ZUNvZGVFdmVudCA9IHJlcXVpcmUoXCJpbnZpdGVjb2RlX2V2ZW50XCIpO1xudmFyIFJvbGVDb250cm9sbGVyID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKTtcbnZhciBQbGF5ZXJIZWFkID0gcmVxdWlyZShcInBsYXllcmhlYWRcIik7XG5cbnZhciBJbnZpdGVjb2RlUGFuZWwgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZVBhbmVsLFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcIndlbGZhcmVcIiwgXCJpbnZpdGVjb2RlX3BhbmVsXCIpO1xuICAgIH0sXG5cbiAgICAvLyDlj6/ku6XliJ3lp4vljJblo7DmmI7kuIDkupvlj5jph4/nmoRcbiAgICBpbml0Q29uZmlnOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY3RybCA9IHJlcXVpcmUoXCJpbnZpdGVjb2RlX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5jdXJfaW5kZXggPSBudWxsO1xuICAgICAgICB0aGlzLnZpZXdfbGlzdCA9IHt9O1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdFBhbmVsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubWFpbl9jb250YWluZXIgPSB0aGlzLnNlZWtDaGlsZChcIm1haW5fY29udGFpbmVyXCIpO1xuXG4gICAgICAgIHRoaXMuYmdfc3AgPSB0aGlzLnNlZWtDaGlsZChcImJnXCIsIGNjLlNwcml0ZSk7XG4gICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRCaWdCZyhcImFjdGlvbi9hY3Rpb25faW52aXRlY29kZVwiKSwgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgdGhpcy5iZ19zcC5zcHJpdGVGcmFtZSA9IHJlc1xuICAgICAgICB9LmJpbmQodGhpcykpXG5cbiAgICAgICAgdGhpcy5idG5fdGlwc19uZCA9IHRoaXMuc2Vla0NoaWxkKFwiYnRuX3RpcHNcIik7XG4gICAgICAgIHRoaXMuYnRuX2NvcHlfbmQgPSB0aGlzLnNlZWtDaGlsZChcImJ0bl9jb3B5XCIpO1xuICAgICAgICB0aGlzLmJ0bl9zaGFyZF9uZCA9IHRoaXMuc2Vla0NoaWxkKFwiYnRuX3NoYXJkXCIpO1xuICAgICAgICB2YXIgSW1hZ2VfMTcgPSB0aGlzLnNlZWtDaGlsZChcIkltYWdlXzE3XCIpO1xuICAgICAgICB0aGlzLmludml0ZV9jb2RlX2xiID0gdGhpcy5zZWVrQ2hpbGQoSW1hZ2VfMTcsIFwiaW52aXRlX2NvZGVcIiwgY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLmludml0ZV9jb2RlX2xiLnN0cmluZyA9IFwiXCI7XG4gICAgICAgIHRoaXMudGV4dF9pbnZpdGVjb2RlX2xiID0gdGhpcy5zZWVrQ2hpbGQoXCJ0ZXh0X2ludml0ZWNvZGVcIiwgY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLnRleHRfaW52aXRlY29kZV9sYi5zdHJpbmcgPSBcIlwiO1xuICAgICAgICB0aGlzLnRhYl90aWx0ZSA9IHt9O1xuICAgICAgICB2YXIgdGl0bGVfdGV4dCA9IFtVdGlscy5USTE4TihcIuaIkeeahOaOqOiNkOeggVwiKSwgVXRpbHMuVEkxOE4oXCLlt7LmjqjojZDlpb3lj4tcIildXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDI7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRhYiA9IHt9O1xuICAgICAgICAgICAgdGFiLmJ0biA9IHRoaXMuc2Vla0NoaWxkKFwidGFiX1wiICsgaSk7XG4gICAgICAgICAgICB0YWIubm9ybWFsID0gdGhpcy5zZWVrQ2hpbGQodGFiLmJ0biwgXCJub3JtYWxcIik7XG4gICAgICAgICAgICB0YWIuc2VsZWN0ID0gdGhpcy5zZWVrQ2hpbGQodGFiLmJ0biwgXCJzZWxlY3RcIik7XG4gICAgICAgICAgICB0YWIudGl0bGUgPSB0aGlzLnNlZWtDaGlsZCh0YWIuYnRuLCBcInRpdGxlXCIsIGNjLkxhYmVsKTtcbiAgICAgICAgICAgIHRhYi5zZWxlY3QuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0YWIudGl0bGUubm9kZS5jb2xvciA9IG5ldyBjYy5Db2xvcigweGNmLCAweGI1LCAweDkzLCAweGZmKTtcbiAgICAgICAgICAgIHRhYi50aXRsZS5zdHJpbmcgPSB0aXRsZV90ZXh0W2kgLSAxXTtcbiAgICAgICAgICAgIHRhYi5pbmRleCA9IGk7XG4gICAgICAgICAgICB0YWIucmVkcG9pbnQgPSB0aGlzLnNlZWtDaGlsZCh0YWIuYnRuLCBcInJlZHBvaW50XCIpO1xuICAgICAgICAgICAgdGFiLnJlZHBvaW50LmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50YWJfdGlsdGVbaV0gPSB0YWI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJDaGFuZ2VWaWV3KDEpO1xuXG4gICAgICAgIC8vXG4gICAgICAgIHRoaXMuZWRpdF9ib3ggPSB0aGlzLnNlZWtDaGlsZChcImVkaXRcIixjYy5FZGl0Qm94KTtcblxuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KEludml0ZUNvZGVFdmVudC5HZXRfSW52aXRlQ29kZV9FdmVudCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5nZXRJbnZpdGVDb2RlRGF0YSgpO1xuICAgICAgICB9LCB0aGlzKVxuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KEludml0ZUNvZGVFdmVudC5JbnZpdGVDb2RlX0JpbmRSb2xlX0V2ZW50LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmdldEFscmVhZHlGcmllbmROdW0oKTtcbiAgICAgICAgfSwgdGhpcylcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChJbnZpdGVDb2RlRXZlbnQuSW52aXRlQ29kZV9CaW5kUm9sZV9VcGRhdGFfRXZlbnQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0QWxyZWFkeUZyaWVuZE51bSgpO1xuICAgICAgICB9LCB0aGlzKVxuICAgICAgICB0aGlzLmJ0bl90aXBzX25kLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMSk7XG4gICAgICAgICAgICB2YXIgcG9zID0gZXZlbnQudG91Y2guZ2V0TG9jYXRpb24oKTtcbiAgICAgICAgICAgIHZhciBkZXNjID0gU3RyaW5nVXRpbC5wYXJzZShDb25maWcuaW52aXRlX2NvZGVfZGF0YS5kYXRhX2NvbnN0LnRpcHMuZGVzYylcbiAgICAgICAgICAgIHJlcXVpcmUoXCJ0aXBzX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKS5zaG93Q29tbW9uVGlwcyhkZXNjLCBwb3MsIG51bGwsIG51bGwsIDUwMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5idG5fY29weV9uZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5jb3B5Q29kZSgpO1xuICAgICAgICB9LmJpbmQodGhpcyksIDEpXG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5idG5fc2hhcmRfbmQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2hhcmRHYW1lKCk7XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMSlcbiAgICAgICAgZm9yICh2YXIgaSBpbiB0aGlzLnRhYl90aWx0ZSkge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMudGFiX3RpbHRlW2ldO1xuICAgICAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh2LmJ0biwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGFiQ2hhbmdlVmlldyh2LmluZGV4KTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSwgMSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoSW52aXRlQ29kZUV2ZW50Lkludml0ZUNvZGVfTXlfRXZlbnQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBzdGF0dXMgPSByZXF1aXJlKFwiaW52aXRlY29kZV9jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS5pbnZpdGVSZWRQb2ludCgpXG4gICAgICAgICAgICBpZih0aGlzLnRhYl90aWx0ZVsxXSAmJiB0aGlzLnRhYl90aWx0ZVsxXS5yZWRwb2ludCl7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJfdGlsdGVbMV0ucmVkcG9pbnQuYWN0aXZlID0gc3RhdHVzXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMpXG4gICAgICAgIHRoaXMuZWRpdF9ib3gubm9kZS5vbihcImVkaXRpbmctZGlkLWVuZGVkXCIsZnVuY3Rpb24oZWRpdF9ib3gpe1xuICAgICAgICAgICAgdGhpcy5lZGl0X2JveC5zdHJpbmcgPSB0aGlzLmludml0ZV9jb2RlO1xuICAgICAgICB9LHRoaXMpXG4gICAgICAgIHRoaXMuZWRpdF9ib3gubm9kZS5vbihcInRleHQtY2hhbmdlZFwiLGZ1bmN0aW9uKGVkaXRfYm94KXtcbiAgICAgICAgICAgIHRoaXMuZWRpdF9ib3guc3RyaW5nID0gdGhpcy5pbnZpdGVfY29kZTtcbiAgICAgICAgfSx0aGlzKVxuICAgIH0sXG5cbiAgICB0YWJDaGFuZ2VWaWV3OiBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgaW5kZXggPSBpbmRleCB8fCAxO1xuICAgICAgICBpZiAodGhpcy5jdXJfaW5kZXggPT0gaW5kZXgpIHJldHVyblxuICAgICAgICBpZiAodGhpcy5jdXJfdGFiICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuY3VyX3RhYi5zZWxlY3QuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmN1cl90YWIudGl0bGUubm9kZS5jb2xvciA9IG5ldyBjYy5Db2xvcigweGNmLCAweGI1LCAweDkzLCAweGZmKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cl9pbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLmN1cl90YWIgPSB0aGlzLnRhYl90aWx0ZVt0aGlzLmN1cl9pbmRleF07XG4gICAgICAgIGlmICh0aGlzLmN1cl90YWIgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5jdXJfdGFiLnNlbGVjdC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jdXJfdGFiLnRpdGxlLm5vZGUuY29sb3IgPSBuZXcgY2MuQ29sb3IoMHhmZiwgMHhlZCwgMHhkNiwgMHhmZik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucHJlX3BhbmVsICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZV9wYW5lbC5zZXRWaXNpYmxlU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVfcGFuZWwuc2V0VmlzaWJsZVN0YXR1cyhmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmVfcGFuZWwgPSB0aGlzLmNyZWF0ZVN1YlBhbmVsKHRoaXMuY3VyX2luZGV4KTtcbiAgICAgICAgaWYgKHRoaXMucHJlX3BhbmVsICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZV9wYW5lbC5zZXRWaXNpYmxlU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVfcGFuZWwuc2V0VmlzaWJsZVN0YXR1cyh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVTdWJQYW5lbDogZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIHZhciBwYW5lbCA9IHRoaXMudmlld19saXN0W2luZGV4XTtcbiAgICAgICAgaWYgKHBhbmVsID09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PSAxKSB7IC8v6Ieq5bex55qE6YKA6K+356CBXG4gICAgICAgICAgICAgICAgcGFuZWwgPSBVdGlscy5jcmVhdGVDbGFzcyhcImludml0ZWNvZGVfbXlfcGFuZWxcIik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09IDIpIHsgIC8v5bey6YKA6K+35aW95Y+LXG4gICAgICAgICAgICAgICAgcGFuZWwgPSBVdGlscy5jcmVhdGVDbGFzcyhcImludml0ZWNvZGVfZnJpZW5kX3BhbmVsXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFuZWwuc2V0UGFyZW50KHRoaXMubWFpbl9jb250YWluZXIpO1xuICAgICAgICAgICAgcGFuZWwuc2V0UG9zaXRpb24oLTM2MCwgLTQwNCk7XG4gICAgICAgICAgICBwYW5lbC5zaG93KCk7XG4gICAgICAgICAgICB0aGlzLnZpZXdfbGlzdFtpbmRleF0gPSBwYW5lbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFuZWxcbiAgICB9LFxuXG4gICAgZ2V0SW52aXRlQ29kZURhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGludml0ZV9jb2RlID0gdGhpcy5jdHJsLmdldE1vZGVsKCkuZ2V0SW52aXRlQ29kZSgpO1xuICAgICAgICBpZiAoaW52aXRlX2NvZGUpIHtcbiAgICAgICAgICAgIHRoaXMuaW52aXRlX2NvZGVfbGIuc3RyaW5nID0gaW52aXRlX2NvZGU7XG4gICAgICAgICAgICB0aGlzLmludml0ZV9jb2RlID0gaW52aXRlX2NvZGU7XG4gICAgICAgICAgICB0aGlzLmVkaXRfYm94LnN0cmluZyA9IGludml0ZV9jb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZShVdGlscy5USTE4TihcIuiOt+WPlumCgOivt+eggeWksei0pVwiKSlcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+mCgOivt+S6uuaVsFxuICAgIGdldEFscmVhZHlGcmllbmROdW06IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMudGV4dF9pbnZpdGVjb2RlX2xiKSB7XG4gICAgICAgICAgICB2YXIgbnVtID0gdGhpcy5jdHJsLmdldE1vZGVsKCkuZ2V0RmlyZW5kTnVtKCk7XG4gICAgICAgICAgICB2YXIgc3RyID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwi5bey6YKA6K+35aW95Y+L77yaJXPkurpcIiksIG51bSB8fCAwKTtcbiAgICAgICAgICAgIHRoaXMudGV4dF9pbnZpdGVjb2RlX2xiLnN0cmluZyA9IHN0cjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+WIhuS6q+a4uOaIj+S4i+i9veWSjOmCgOivt+eggVxuICAgIHNldFNoYXJkR2FtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAvL+WmguaenOWtmOWcqOS4jeWkhOeQhlxuICAgICAgICBpZiAodGhpcy5wb3N0ZV9waWN0dXJlKSByZXR1cm5cbiAgICAgICAgdmFyIGNvbnRhaW5lciA9IHJlcXVpcmUoXCJ2aWV3bWFuYWdlclwiKS5nZXRJbnN0YW5jZSgpLmdldFNjZW5lTm9kZShTQ0VORV9UQUcubG9hZGluZyk7XG4gICAgICAgIHRoaXMucG9zdGVfcGljdHVyZSA9IFV0aWxzLmNyZWF0ZUltYWdlKGNvbnRhaW5lciwgbnVsbCwgMCwgMCwgY2MudjIoMC41LCAwLjUpKTtcbiAgICAgICAgdGhpcy5wb3N0ZV9waWN0dXJlLnR5cGUgPSBjYy5TcHJpdGUuVHlwZS5TSU1QTEU7XG4gICAgICAgIHRoaXMucG9zdGVfcGljdHVyZS5zaXplTW9kZSA9IGNjLlNwcml0ZS5TaXplTW9kZS5DVVNUT007XG4gICAgICAgIHRoaXMucG9zdGVfcGljdHVyZS5ub2RlLnNldENvbnRlbnRTaXplKDcyMCwgMTI4MClcbiAgICAgICAgdGhpcy5wb3N0ZV9waWN0dXJlLm5vZGUuc2NhbGUgPSBGSVRfU0NBTEU7XG5cbiAgICAgICAgdGhpcy5sYXlvdXQgPSBuZXcgY2MuTm9kZSgpO1xuICAgICAgICB0aGlzLmxheW91dC5zZXRQYXJlbnQodGhpcy5wb3N0ZV9waWN0dXJlLm5vZGUpO1xuICAgICAgICB0aGlzLmxheW91dC5zZXRQb3NpdGlvbigwLCAwKVxuXG4gICAgICAgIHZhciByb2xlX3ZvID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKS5nZXRJbnN0YW5jZSgpLmdldFJvbGVWbygpO1xuICAgICAgICB2YXIgYXBrX2RhdGEgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCkuZ2V0QXBrRGF0YSgpO1xuICAgICAgICB0aGlzLmhlYWQgPSBuZXcgUGxheWVySGVhZCgpO1xuICAgICAgICB0aGlzLmhlYWQuc2hvdygpO1xuICAgICAgICB0aGlzLmhlYWQuc2V0UG9zaXRpb24oLTI1OCwgLTU3Myk7XG4gICAgICAgIHRoaXMuaGVhZC5zZXRIZWFkUmVzKHJvbGVfdm8uZmFjZV9pZCk7XG4gICAgICAgIHRoaXMuaGVhZC5zZXRQYXJlbnQodGhpcy5sYXlvdXQpO1xuXG4gICAgICAgIHZhciByb2xlX25hbWUgPSBVdGlscy5jcmVhdGVMYWJlbCgzMCwgbmV3IGNjLkNvbG9yKDB4YjksIDB4ZWUsIDB4ZmYsIDB4ZmYpLCBuZXcgY2MuQ29sb3IoMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiksIC0yMDAsIC01NTAsIFV0aWxzLlRJMThOKHJvbGVfdm8ubmFtZSksIHRoaXMubGF5b3V0LCAyLCBjYy52MigwLCAwLjUpKVxuICAgICAgICB2YXIgc2VydmVyX25hbWUgPSBVdGlscy5jcmVhdGVMYWJlbCgzMCwgbmV3IGNjLkNvbG9yKDB4YjksIDB4ZWUsIDB4ZmYsIDB4ZmYpLCBuZXcgY2MuQ29sb3IoMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiksIDMxMCwgLTU1MCwgVXRpbHMuVEkxOE4oXCLmnI3liqHlmag6IFwiICsgcm9sZV92by5zcnZfaWQpLCB0aGlzLmxheW91dCwgMiwgY2MudjIoMSwgMC41KSk7XG4gICAgICAgIHZhciBsb2dpbl9kYXRhID0gcmVxdWlyZShcImxvZ2luX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKS5nZXRNb2RlbCgpLmdldExvZ2luRGF0YSgpO1xuICAgICAgICBpZiAobG9naW5fZGF0YSkge1xuICAgICAgICAgICAgc2VydmVyX25hbWUuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmnI3liqHlmajvvJpcIiArIGxvZ2luX2RhdGEuc3J2X25hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNoYXJkX3RleHQgPSBVdGlscy5jcmVhdGVMYWJlbCgyNiwgbmV3IGNjLkNvbG9yKDB4YjksIDB4ZWUsIDB4ZmYsIDB4ZmYpLCBuZXcgY2MuQ29sb3IoMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiksIC0yMDAsIC02MDAsIFV0aWxzLlRJMThOKFwi5oiR55qE5YiG5Lqr56CBOiBcIiksIHRoaXMubGF5b3V0LCAyLCBjYy52MigwLCAwLjUpKVxuICAgICAgICB2YXIgaW52aXRlX2NvZGUgPSByZXF1aXJlKFwiaW52aXRlY29kZV9jb250cm9sbGVyXCIpLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS5nZXRJbnZpdGVDb2RlKCk7XG4gICAgICAgIHNoYXJkX3RleHQuc3RyaW5nID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwi5oiR55qE5YiG5Lqr56CBOiAlc1wiKSwgaW52aXRlX2NvZGUpO1xuXG4gICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRJY29uUGF0aChcIndlbGZhcmUvd2VsZmFyZV9iYW5uZXJcIiwgXCJ0eHRfY25fd2VsZmFyZV9iZzJcIiksIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIHRoaXMucG9zdGVfcGljdHVyZS5zcHJpdGVGcmFtZSA9IHJlcztcblxuICAgICAgICAgICAgdmFyIGxvZ29fc3ByID0gVXRpbHMuY3JlYXRlSW1hZ2UodGhpcy5wb3N0ZV9waWN0dXJlLm5vZGUsIG51bGwsIDAsIDUwMCwgY2MudjIoMC41LCAwLjUpKTtcbiAgICAgICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRMb2dvUmVzKCksIGZ1bmN0aW9uIChzcCkge1xuICAgICAgICAgICAgICAgIGxvZ29fc3ByLnNwcml0ZUZyYW1lID0gc3A7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgICAgICBsb2dvX3Nwci50eXBlID0gY2MuU3ByaXRlLlR5cGUuU0lNUExFO1xuICAgICAgICAgICAgbG9nb19zcHIuc2l6ZU1vZGUgPSBjYy5TcHJpdGUuU2l6ZU1vZGUuQ1VTVE9NO1xuXG4gICAgICAgICAgICBpZih0aGlzLnRpbWVfMil7XG4gICAgICAgICAgICAgICAgZ2NvcmUuVGltZXIuZGVsKHRoaXMudGltZV8yKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVfMiA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRpbWVfMiA9IGdjb3JlLlRpbWVyLnNldChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxvZ29fc3ByID0gVXRpbHMuY3JlYXRlSW1hZ2UodGhpcy5wb3N0ZV9waWN0dXJlLm5vZGUsIG51bGwsIDAsIDUwMCwgY2MudjIoMC41LCAwLjUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0TG9nb1JlcygpLCBmdW5jdGlvbiAoc3ApIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nb19zcHIuc3ByaXRlRnJhbWUgPSBzcDtcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgICAgICAgICAgbG9nb19zcHIudHlwZSA9IGNjLlNwcml0ZS5UeXBlLlNJTVBMRTtcbiAgICAgICAgICAgICAgICBsb2dvX3Nwci5zaXplTW9kZSA9IGNjLlNwcml0ZS5TaXplTW9kZS5DVVNUT007IFxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAxMDAsIDEpXG5cbiAgICAgICAgICAgIC8vIHZhciBlcndlaW1hYmcgPSBVdGlscy5jcmVhdGVJbWFnZSh0aGlzLnBvc3RlX3BpY3R1cmUubm9kZSwgbnVsbCwgLTEyMCwgMzM1LCBjYy52MigwLjUsIDAuNSkpO1xuICAgICAgICAgICAgLy8gdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldEljb25QYXRoKFwid2VsZmFyZS93ZWxmYXJlX2Jhbm5lclwiLCBcInR4dF9jbl93ZWxmYXJlX2JnM1wiKSwgZnVuY3Rpb24gKHNwKSB7XG4gICAgICAgICAgICAvLyAgICAgZXJ3ZWltYWJnLnNwcml0ZUZyYW1lID0gc3A7XG4gICAgICAgICAgICAvLyB9LmJpbmQodGhpcykpXG5cbiAgICAgICAgICAgIHZhciBlcndlaW1hID0gVXRpbHMuY3JlYXRlSW1hZ2UodGhpcy5wb3N0ZV9waWN0dXJlLm5vZGUsbnVsbCwgLTE0NSwgLTE0NSwgY2MudjIoMC41LCAwLjUpKTtcbiAgICAgICAgICAgIC8vIGlmKGFwa19kYXRhKXtcbiAgICAgICAgICAgIC8vICAgICBTREtfLmRvd25sb2FkX3FyY29kZV9wbmcoYXBrX2RhdGEubWVzc2FnZS5xcmNvZGVfdXJsLCBmdW5jdGlvbiAoaW1nKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHZhciBzcHJpdGVGcmFtZSA9IG5ldyBjYy5TcHJpdGVGcmFtZSgpO1xuICAgICAgICAgICAgLy8gICAgICAgICBzcHJpdGVGcmFtZS5zZXRUZXh0dXJlKGltZyk7XG4gICAgICAgICAgICAvLyAgICAgICAgIGVyd2VpbWEuc3ByaXRlRnJhbWUgPSBzcHJpdGVGcmFtZTtcbiAgICAgICAgICAgIC8vICAgICAgICAgZXJ3ZWltYS5ub2RlLnNjYWxlID0gMzQwIC8gZXJ3ZWltYS5ub2RlLndpZHRoO1xuICAgICAgICAgICAgLy8gICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgaWYgKFVTRV9TREspIHtcbiAgICAgICAgICAgICAgICBTREsuZG93bmxvYWRfcXJjb2RlX3BuZyhmdW5jdGlvbihxcmNvZF9zZikge1xuICAgICAgICAgICAgICAgICAgICBpZiAocXJjb2Rfc2YpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVyd2VpbWFfaW1nX3NwLnNwcml0ZUZyYW1lID0gc3ByaXRlRnJhbWU7ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBuYW1lID0gXCJnYW1lX3NoYXJkXCI7XG4gICAgICAgICAgICAvLyBTREsuQ2FwdHVyZVNjcmVlblNhdmVJbWcobmFtZSxmdW5jdGlvbihib29sKXtcbiAgICAgICAgICAgIC8vICAgICBpZihib29sPT10cnVlKXtcblxuICAgICAgICAgICAgLy8gICAgIH1lbHNle1xuICAgICAgICAgICAgLy8gICAgICAgICBtZXNzYWdlKFV0aWxzLlRJMThOKFwi5L+d5a2Y5aSx6LSlXCIpKTtcbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICBpZih0aGlzLnRpbWVfMSl7XG4gICAgICAgICAgICAgICAgZ2NvcmUuVGltZXIuZGVsKHRoaXMudGltZV8xKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVfMSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRpbWVfMSA9IGdjb3JlLlRpbWVyLnNldChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucG9zdGVfcGljdHVyZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc3RlX3BpY3R1cmUubm9kZS5yZW1vdmVGcm9tUGFyZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zdGVfcGljdHVyZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkLmRlbGV0ZU1lKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAxMDAwLCAxKVxuXG4gICAgICAgICAgICAvLyB9LmJpbmQodGhpcykpO1xuICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgfSxcblxuICAgIC8v5aSN5Yi26YKA6K+356CBXG4gICAgY29weUNvZGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGludml0ZV9jb2RlID0gdGhpcy5jdHJsLmdldE1vZGVsKCkuZ2V0SW52aXRlQ29kZSgpO1xuICAgICAgICBpZiAoaW52aXRlX2NvZGUpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UoVXRpbHMuVEkxOE4oXCLlpI3liLblpLHotKVcIikpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXNzYWdlKFV0aWxzLlRJMThOKFwi5aSN5Yi25o6o6I2Q56CB5aSx6LSlXCIpKVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNldFZpc2libGVTdGF0dXM6IGZ1bmN0aW9uIChib29sKSB7XG4gICAgICAgIGJvb2wgPSBib29sIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLnNldFZpc2libGUoYm9vbCk7XG4gICAgICAgIGlmIChib29sID09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuY3RybC5yZXF1ZXN0UHJvdG8oKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCD5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb25TaG93OiBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHRoaXMuZ2V0SW52aXRlQ29kZURhdGEoKTtcbiAgICB9LFxuXG4gICAgLy8g6Z2i5p2/6K6+572u5LiN5Y+v6KeB55qE5Zue6LCDLOi/memHjOWBmuS4gOS6m+S4jeWPr+ingeeahOWxj+iUveWkhOeQhlxuICAgIG9uSGlkZTogZnVuY3Rpb24gKCkge1xuXG4gICAgfSxcblxuICAgIC8vIOW9k+mdouadv+S7juS4u+iKgueCuemHiuaUvuaOieeahOiwg+eUqOaOpeWPoyzpnIDopoHmiYvliqjosIPnlKgs6ICM5LiU5Lmf5LiA5a6a6KaB6LCD55SoXG4gICAgb25EZWxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMucG9zdGVfcGljdHVyZSkge1xuICAgICAgICAgICAgdGhpcy5wb3N0ZV9waWN0dXJlLm5vZGUucmVtb3ZlRnJvbVBhcmVudCgpO1xuICAgICAgICAgICAgdGhpcy5wb3N0ZV9waWN0dXJlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oZWFkKSB7XG4gICAgICAgICAgICB0aGlzLmhlYWQuZGVsZXRlTWUoKTtcbiAgICAgICAgICAgIHRoaXMuaGVhZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy50aW1lXzEpe1xuICAgICAgICAgICAgZ2NvcmUuVGltZXIuZGVsKHRoaXMudGltZV8xKTtcbiAgICAgICAgICAgIHRoaXMudGltZV8xID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLnRpbWVfMil7XG4gICAgICAgICAgICBnY29yZS5UaW1lci5kZWwodGhpcy50aW1lXzIpO1xuICAgICAgICAgICAgdGhpcy50aW1lXzIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGZvcihsZXQgaSBpbiB0aGlzLnZpZXdfbGlzdCl7XG4gICAgICAgICAgICB0aGlzLnZpZXdfbGlzdFtpXS5kZWxldGVNZSgpXG4gICAgICAgICAgICB0aGlzLnZpZXdfbGlzdFtpXSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpZXdfbGlzdCA9IG51bGw7XG4gICAgfSxcbn0pIl19