(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/script/plat/PlatformHaiTuoMini.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, '76746E3z+1Nt4pZJRH2UW41', 'PlatformHaiTuoMini'); // script/plat/PlatformHaiTuoMini.ts "use strict"; /** 游戏名称:遮天 SDK文档: https://client2.hhycdk.com/docs/sdkDocs.html?target_id=4e81bdd1-aaf0-46d8-9b3a-50769becbe1b gameId = 319 测试秘钥 = 1d5c5fcb80934b4886cc8a7c61366664 正式秘钥 = fa62a8cbd24941ec83edaf89799a1c4b zoneKey = ztxm_wxml snKey = s218 小程序ID:wx38c033079c5d7490 */ var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var gameCfg_1 = require("../common/gameCfg"); var gameMethod_1 = require("../common/gameMethod"); var Xyc_1 = require("../common/Xyc"); var Config_1 = require("../Config"); var EventConst_1 = require("../data/const/EventConst"); var TypeConst_1 = require("../data/const/TypeConst"); var GameDataCenter_1 = require("../data/GameDataCenter"); var GameController_1 = require("../GameController"); var UIHelp_1 = require("../logic/ui/UIHelp"); var EventMng_1 = require("../manager/EventMng"); var PlatformBase_1 = require("./PlatformBase"); var md5_1 = require("../utils/md5"); var ThinkingDataMgr_1 = require("../utils/ThinkingDataMgr"); var PlatformHaiTuoMini = /** @class */ (function (_super) { __extends(PlatformHaiTuoMini, _super); function PlatformHaiTuoMini() { var _this = _super.call(this) || this; // wx.getLaunchOptionsSync(res => { // this.dealQuery(res) // setTimeout(() => { // let str = "" // for (const key in res.query) { // str += key + "=" + res.query[key] // } // let data: DialogParams = { // content: "内容:" + str // } // UIHelp.ShowDialog(data) // }, 3000); // }) // 屏幕常亮 wx.setKeepScreenOn({ keepScreenOn: true }); // 热启动,或唤醒时触发 wx.onShow(function (res) { _this.dealQuery(res); GameDataCenter_1.default.audio.resumeMusic(); // IOS系统,在后台切回时似乎回失去常亮功能,这里再调用一次 wx.setKeepScreenOn({ keepScreenOn: true }); EventMng_1.default.emit(EventConst_1.GameEvent.ON_SHOW_APP); console.log("-----wx.onShow 回调触发:", res); }); // 切到后台时触发 wx.onHide(function (res) { GameDataCenter_1.default.audio.stopAllEffects(); GameDataCenter_1.default.audio.pauseMusic(); }); // 加载广告组件 wx.showShareMenu({ withShareTicket: false, menus: ['shareAppMessage', 'shareTimeline'] }); // 小程序更新机制 https://developers.weixin.qq.com/minigame/dev/guide/runtime/update-mechanism.html var updateManager = wx.getUpdateManager(); updateManager.onCheckForUpdate(function (res) { // 请求完新版本信息的回调 console.log("请求完新版本信息的回调", res.hasUpdate); }); updateManager.onUpdateReady(function () { wx.showModal({ title: '更新提示', content: '新版本已经准备好,是否重启应用?', success: function (res) { if (res.confirm) { // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启 updateManager.applyUpdate(); } } }); }); updateManager.onUpdateFailed(function () { // 新版本下载失败 }); return _this; } PlatformHaiTuoMini.prototype.dealQuery = function (res) { if (res.scene) { GameDataCenter_1.default.plat.queryparams.scene = res.scene; } if (res.query['inviter']) { GameDataCenter_1.default.plat.queryparams.inviter = res.query['inviter']; } if (res.query['sharer']) { GameDataCenter_1.default.plat.queryparams.sharer = res.query['sharer']; } console.log("-----sharer-----", GameDataCenter_1.default.plat.queryparams.sharer); EventMng_1.default.emit(EventConst_1.PlatEvent.ON_SCENE_CHANGED); }; PlatformHaiTuoMini.prototype.showLoginView = function () { var _this = this; console.log("平台sdk初始化..."); var opts = wx.getLaunchOptionsSync(); EventMng_1.default.emit(EventConst_1.LoadEvent.LOAD_PROGRESS, 0.25, "login"); var packageInfo = gameCfg_1.default.packageInfo.getItem(Config_1.default.pid); window['hitalkOpenSDK'].init(function (res) { var sysInfo = wx.getSystemInfoSync(); GameDataCenter_1.default.plat.instance.deviceOS = sysInfo === null || sysInfo === void 0 ? void 0 : sysInfo.platform; console.log("----当前运行平台信息:", JSON.stringify(sysInfo)); console.log("----当前运行平台:", GameDataCenter_1.default.plat.instance.deviceOS); // do something console.log("----初始化回调:", res); if (res.retCode != 0) { console.log("初始化失败"); return; } console.log("初始化成功"); window['hitalkOpenSDK'].resetConfig(true); // true:正式服; false:测试服 //调用登录接口 EventMng_1.default.emit(EventConst_1.LoadEvent.LOAD_PROGRESS, 0.5, "login"); window['hitalkOpenSDK'].login(function (res) { var _a; if (res.retCode === 0) { console.log('fingerPlayer登录成功: res=>' + JSON.stringify(res)); //可以全局获取的参数 Config_1.default.wxOpenId = window['hitalkOpenSDK'].openId; //用户唯一标识 Config_1.default.wxSign = res.data.sign; //签名 EventMng_1.default.emit(EventConst_1.LoadEvent.LOAD_PROGRESS, 0.75, "login"); var params = { pid: Config_1.default.pid, param: [res.data.openId, res.data.timestamp, res.data.sign, JSON.stringify((_a = res.data) === null || _a === void 0 ? void 0 : _a.snUserInfoJson)] }; GameController_1.default.network.send(Xyc_1.PlayerLogin.url, params, function (result) { console.log("后段验证返回"); if (result.type != 1) { if (gameMethod_1.gameMethod.isEmpty(result.win) || gameMethod_1.gameMethod.isEmpty(result.win.msgOut)) { GameDataCenter_1.default.plat.showErrDialog(TypeConst_1.GameErrCode.errGamePlatLogin); } return; } EventMng_1.default.emit(EventConst_1.LoadEvent.LOAD_PROGRESS, 1, "login"); if (result.type == 1 && result.platBack) { _this.openId = result.platBack.openid; _this.loginParams = [result.platBack.token]; console.log("后端验证成功", _this.openId); // 获取邀请者uuid var inviter = ""; if (wx.getEnterOptionsSync) { var obj = wx.getEnterOptionsSync(); if (obj.query && obj.query['inviter']) { inviter = obj.query['inviter']; } } _this.login(inviter); } else { console.log("PlayerLogin.url 返回数据异常"); if (gameMethod_1.gameMethod.isEmpty(result.win) || gameMethod_1.gameMethod.isEmpty(result.win.msgOut)) { GameDataCenter_1.default.plat.showErrDialog(TypeConst_1.GameErrCode.errGamePlatLogin); } } }); } else { console.log('fingerPlayer登录失败: res=>' + JSON.stringify(res)); //注意:调用登录接口失败后,需要跳转游戏页面显示重新登录的按钮 UIHelp_1.default.ShowDialog({ content: "登录授权失败,请重新登录", onlyConfirm: true, cbConfirm: function () { GameDataCenter_1.default.plat.instance.restart(); } }); } // 获取用户设置信息 console.log("获取用户设置信息"); wx.getSetting({ withSubscriptions: true, success: function (res) { console.log("获取用户设置信息 回调:", res); if (res.authSetting && res.authSetting["scope.userInfo"]) { // 已授权 console.log("已授权"); GameDataCenter_1.default.plat.instance.hasAuthUserInfo = true; } // 整理订阅消息 if (res.subscriptionsSetting && res.subscriptionsSetting.itemSettings) { GameDataCenter_1.default.subscribe.recordSubscribeAlwaysSettings(res.subscriptionsSetting.itemSettings); } } }); }); wx.onShareAppMessage(function () { return { title: "", imageUrl: "", query: "state=" + "" }; }); wx.showShareMenu({ menus: ['shareAppMessage', 'shareTimeline'] }); }, { gameId: parseInt(packageInfo.params[0]), zoneKey: packageInfo.params[1], snKey: packageInfo.params[2] }); }; // 上报用户信息 PlatformHaiTuoMini.prototype.reportUserInfo = function (res) { }; // 上报角色数据 PlatformHaiTuoMini.prototype.reportRole = function (event) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q; //统一由服务端上报 return; if (GameDataCenter_1.default.sevBack == null) { return; } if (((_a = GameDataCenter_1.default.sevBack.userInfo) === null || _a === void 0 ? void 0 : _a.a) == null) { return; } console.log("上报角色数据:" + event + ",uuid:" + ((_c = (_b = GameDataCenter_1.default.sevBack.userInfo) === null || _b === void 0 ? void 0 : _b.a) === null || _c === void 0 ? void 0 : _c.uuid)); var onlineTime = 0; if (GameDataCenter_1.default.time.onlineTime > 0) { onlineTime = GameDataCenter_1.default.time.sevTime - GameDataCenter_1.default.time.onlineTime; } var roleTypeStr = 3; if (event == TypeConst_1.ReportRoleType.create) { roleTypeStr = 2; } else if (event == TypeConst_1.ReportRoleType.levelup) { roleTypeStr = 4; } var param = { "areaId": (_e = (_d = GameDataCenter_1.default.sevBack.userInfo) === null || _d === void 0 ? void 0 : _d.a) === null || _e === void 0 ? void 0 : _e.sid, "areaName": GameDataCenter_1.default.user.serverName, "roleId": (_g = (_f = GameDataCenter_1.default.sevBack.userInfo) === null || _f === void 0 ? void 0 : _f.a) === null || _g === void 0 ? void 0 : _g.uuid, "roleName": (_j = (_h = GameDataCenter_1.default.sevBack.userInfo) === null || _h === void 0 ? void 0 : _h.a) === null || _j === void 0 ? void 0 : _j.name, "roleLevel": (_l = (_k = GameDataCenter_1.default.sevBack.userInfo) === null || _k === void 0 ? void 0 : _k.a) === null || _l === void 0 ? void 0 : _l.level, "vipGrade": 0, "createRoleTime": (_o = (_m = GameDataCenter_1.default.sevBack.userInfo) === null || _m === void 0 ? void 0 : _m.a) === null || _o === void 0 ? void 0 : _o.regtime, "createTime": GameDataCenter_1.default.time.sevTime, "moneyNum": (_q = (_p = GameDataCenter_1.default.sevBack.userInfo) === null || _p === void 0 ? void 0 : _p.a) === null || _q === void 0 ? void 0 : _q.iscz, "rolePower": 0, "roleTurnup": 0, "sign": Config_1.default.wxSign }; //验证 var str = ""; str += "&areaId=" + param["areaId"]; str += "&areaName=" + param["areaName"]; str += "&createRoleTime=" + param["createRoleTime"]; str += "&createTime=" + param["createTime"]; str += "&moneyNum=" + param["moneyNum"]; str += "&roleId=" + param["roleId"]; str += "&roleLevel=" + param["roleLevel"]; str += "&roleName=" + param["roleName"]; str += "&rolePower=" + param["rolePower"]; str += "&roleTurnup=" + param["roleTurnup"]; str += "&vipGrade=" + param["vipGrade"]; str += "fa62a8cbd24941ec83edaf89799a1c4b"; // console.log("md5 str => ", str) var _sign = md5_1.md5(str).toUpperCase(); param.sign = _sign; window['hitalkOpenSDK'].gameReport(roleTypeStr, param, function (res) { console.log("角色数据上报:" + JSON.stringify(res)); if (res.retCode == 0) { //上报成功 } //上报失败 }); }; PlatformHaiTuoMini.prototype.pay = function (orderId, order10cs, param) { window['hitalkOpenSDK'].isGamePay({}, function (res) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; //true:开启(默认值),false:关闭支付 console.log('是否开启支付功能:' + res); if (res) { //开启支付功能 var packageInfo = gameCfg_1.default.packageInfo.getItem(Config_1.default.pid); var price = param.price * 100; var startPaydata = { 'gameId': parseInt(packageInfo.params[0]), 'snKey': packageInfo.params[2], 'openId': window['hitalkOpenSDK'].openId, 'roleId': (_b = (_a = GameDataCenter_1.default.sevBack.userInfo) === null || _a === void 0 ? void 0 : _a.a) === null || _b === void 0 ? void 0 : _b.uuid, 'roleName': (_d = (_c = GameDataCenter_1.default.sevBack.userInfo) === null || _c === void 0 ? void 0 : _c.a) === null || _d === void 0 ? void 0 : _d.name, 'roleLevel': (_f = (_e = GameDataCenter_1.default.sevBack.userInfo) === null || _e === void 0 ? void 0 : _e.a) === null || _f === void 0 ? void 0 : _f.level, 'vipGrade': 0, 'areaId': (_h = (_g = GameDataCenter_1.default.sevBack.userInfo) === null || _g === void 0 ? void 0 : _g.a) === null || _h === void 0 ? void 0 : _h.sid, 'areaName': (_k = (_j = GameDataCenter_1.default.sevBack.userInfo) === null || _j === void 0 ? void 0 : _j.a) === null || _k === void 0 ? void 0 : _k.sid, 'productId': param.productId, 'productName': param.productName, 'productDescribe': param.productDesc, 'amount': price, 'gameOrderNo': orderId, 'timestamp': GameDataCenter_1.default.time.sevTime, 'extension': "", 'callbackUrl': order10cs, 'sign': "" // 签名信息 }; //验证 var str = ""; str += "amount=" + startPaydata["amount"]; str += "&areaId=" + startPaydata["areaId"]; str += "&areaName=" + startPaydata["areaName"]; str += "&callbackUrl=" + startPaydata["callbackUrl"]; if (!gameMethod_1.gameMethod.isEmpty(startPaydata["extension"])) { str += "&extension=" + startPaydata["extension"]; } str += "&gameId=" + startPaydata["gameId"]; str += "&gameOrderNo=" + startPaydata["gameOrderNo"]; str += "&openId=" + startPaydata["openId"]; str += "&productDescribe=" + startPaydata["productDescribe"]; str += "&productId=" + startPaydata["productId"]; str += "&productName=" + startPaydata["productName"]; str += "&roleId=" + startPaydata["roleId"]; str += "&roleLevel=" + startPaydata["roleLevel"]; str += "&roleName=" + startPaydata["roleName"].trim(); str += "&snKey=" + startPaydata["snKey"]; str += "×tamp=" + startPaydata["timestamp"]; str += "&vipGrade=" + startPaydata["vipGrade"]; str += "fa62a8cbd24941ec83edaf89799a1c4b"; console.log("md5 str => ", str); var _sign = md5_1.md5(str).toUpperCase(); startPaydata.sign = _sign; console.log("startPaydata=>", JSON.stringify(startPaydata)); window['hitalkOpenSDK'].gamePay(startPaydata, function (res) { console.log('支付:' + JSON.stringify(res)); if (res.retCode = 0) { if (Config_1.default.paySuccAdokId != null) { clearInterval(Config_1.default.paySuccAdokId); Config_1.default.paySuccAdokId = null; } Config_1.default.paySuccAdokIndex = 0; Config_1.default.paySuccAdokId = setInterval(function () { Config_1.default.paySuccAdokIndex++; if (Config_1.default.paySuccAdokIndex >= 5) { clearInterval(Config_1.default.paySuccAdokId); Config_1.default.paySuccAdokId = null; } GameDataCenter_1.default.time.sendAdok(); }, 1000); } else { UIHelp_1.default.ShowTips("支付异常,请联系客服"); //异常上报服务端 if (window["sendClientErr"]) { window["sendClientErr"]([JSON.stringify(res)]); } } }); } else { //不开启支付功能 UIHelp_1.default.ShowTips("未开启支付,无需支付"); } }); }; PlatformHaiTuoMini.prototype.checkMsg = function (str, cb) { //由服务端校验 cb(); // var switchs = window['hitalkOpenSDK'].switchStatus //获取功能开关状态 // //是否实现敏感字校验功能 // //true:由客户端校验敏感字,false:由服务端接口校验敏感字 // if (switchs.contentCheck && switchs.contentCheck.status) { // // 需要 // //调用敏感字校验接口 // var params = { // scene: 2,//内容应用场景值(1:创角,2:聊天(默认),3:家族改名,4:家族公告) // content: str // } // window['hitalkOpenSDK'].gameExtraAction("contentCheck", params, function (res) { // if (res.retCode == 0) { // //校验通过 // cb() // } else { // //校验失败 // UIHelp.ShowTips("输入文字带有敏感词,请重新输入") // } // }) // } else { // // 不需要 // UIHelp.ShowTips("未开通敏感词检测") // cb() // } }; // 打开客服窗口 PlatformHaiTuoMini.prototype.openService = function () { var switchs = window['hitalkOpenSDK'].switchStatus; //获取功能开关状态 //是否显示客服功能 if (switchs.customerService) { // 显示客服功能 // 打开客服窗口 window['hitalkOpenSDK'].gameExtraAction("customerService", {}, function (res) { //返回结果 }); } else { // 隐藏游戏内客服按钮 UIHelp_1.default.ShowTips("未开通客服功能"); } }; // 订阅消息 PlatformHaiTuoMini.prototype.setSubscribe = function (tmplIds, ids) { var switchs = window['hitalkOpenSDK'].switchStatus; //获取功能开关状态 //是否显示客服功能 //判断渠道是否有订阅功能 if (switchs.subscribe) { //长期订阅状态,该功能暂时关闭,需达到条件才能开启 var subscribeStatus = switchs.subscribe.status; //长期订阅状态(暂停使用); true:已订阅 false:未订阅 var oneStatus = switchs.subscribe.oneStatus; //一次性订阅状态; true:已订阅 false:未订阅 //一次性订阅功能判断,当调用subscribe订阅接口时为true时判断 if (oneStatus) { //用户订阅状态为true要进行的操作 //比如:当用户订阅状态为true时,隐藏"订阅"图标/或者"勾选"订阅功能 } else { //用户订阅状态为false要进行的操作 } wx["showModal"]({ title: "提示", content: "请授权开启服务通知", showCancel: true, success: function (res) { if (res.confirm) { //当(未订阅)用户点击"订阅"按钮,主动订阅时调用 var params = { type: 0, tmplIds: tmplIds //订阅模板ID 数组 }; window['hitalkOpenSDK'].gameExtraAction("subscribe", params, function (res) { console.log("===订阅接口回调===", res); if (res.retCode == 0) { //表示订阅成功 GameDataCenter_1.default.subscribe.setLastSubscribeTime(tmplIds); var acceptList_1 = []; var NoAcceptList_1 = []; tmplIds.forEach(function (element, index) { var _a; if (((_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.indexOf(element)) >= 0) { acceptList_1.push(ids[index]); } else { NoAcceptList_1.push(ids[index]); } }); if (acceptList_1.length > 0) { GameDataCenter_1.default.subscribe.sendSubscribe(acceptList_1); } if (NoAcceptList_1.length > 0) { GameDataCenter_1.default.subscribe.sendSubscribeCancle(NoAcceptList_1); } } else { //表示订阅失败 GameDataCenter_1.default.subscribe.sendSubscribeCancle(tmplIds); } }); } else if (res.cancel) { console.log('用户点击取消'); // 用户点击取消后的逻辑处理 //表示订阅失败 GameDataCenter_1.default.subscribe.sendSubscribeCancle(tmplIds); } } }); } else { //表示该渠道没有订阅功能,游戏不能显示订阅相关功能 UIHelp_1.default.ShowTips("未开通订阅功能"); } }; PlatformHaiTuoMini.prototype.showRewardAd = function (adId, kid, order11Id) { var switchs = window['hitalkOpenSDK'].switchStatus; //获取功能开关状态 //是否需要激励视频功能 if (switchs.videoAd) { //数数上报 var properties = { "ad_platform": "微信小游戏", "ad_id": adId, "ad_type": "激励视频", "ad_placement_name": "home_feed", "ad_placement_id": order11Id, "current_page": kid, }; ThinkingDataMgr_1.default.TDTrack("ad_request", properties); // 开启激励视频功能 //播放视频功能 var params = { adUnitId: adId //不同位置的广告ID,需要游戏传入 }; window['hitalkOpenSDK'].gameExtraAction("videoAd", params, function (res) { var isSuc = res.retCode == 0 ? true : false; //数数上报 var properties = { "ad_platform": "微信小游戏", "ad_id": adId, "ad_type": "激励视频", "ad_placement_name": "home_feed", "ad_placement_id": order11Id, "current_page": kid, // "ad_ecpm": 0, "is_filled_success": isSuc, "error_detail_info": JSON.stringify(res), "error_detail_code": res.retCode }; ThinkingDataMgr_1.default.TDTrack("ad_response", properties); if (res.retCode == 0) { //表示播放视频成功,游戏内给玩家发放奖励 GameDataCenter_1.default.adVideo.onXiadanSucc(); //数数上报 var properties_1 = { "ad_platform": "微信小游戏", "ad_id": adId, "ad_type": "激励视频", "ad_placement_name": "home_feed", "ad_placement_id": order11Id, "current_page": kid, }; ThinkingDataMgr_1.default.TDTrack("ad_show", properties_1); } else { //表示播放视频失败,不发奖励 //数数上报 var properties_2 = { "ad_platform": "微信小游戏", "ad_id": adId, "ad_type": "激励视频", "ad_placement_name": "home_feed", "ad_placement_id": order11Id, "current_page": kid, // "ad_ecpm": 0, // "ad_app_name": "未知", // "ad_duration": 30, // "ad_play_duration": 15, "is_complete_play": false }; ThinkingDataMgr_1.default.TDTrack("ad_close", properties_2); } }); } else { // 关闭激励视频功能 UIHelp_1.default.ShowTips("未开通视频广告"); } }; // 分享上报 PlatformHaiTuoMini.prototype.resportShareEvent = function () { console.log("分享上报"); // window["hitalkOpenSDK"].addShareInfo({ // data: { // to_target: 'wx' // } // }).then(res => { // console.log("分享结果:", res) // }) }; return PlatformHaiTuoMini; }(PlatformBase_1.default)); exports.default = PlatformHaiTuoMini; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0cy9zY3JpcHQvcGxhdC9QbGF0Zm9ybUhhaVR1b01pbmkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7O0FBSUgsNkNBQXdDO0FBQ3hDLG1EQUFrRDtBQUNsRCxxQ0FBNkQ7QUFFN0Qsb0NBQStCO0FBQy9CLHVEQUEyRTtBQUMzRSxxREFBc0g7QUFDdEgseURBQW9EO0FBQ3BELG9EQUErQztBQUMvQyw2Q0FBd0M7QUFDeEMsZ0RBQTJDO0FBQzNDLCtDQUEwQztBQUMxQyxvQ0FBbUM7QUFDbkMsNERBQXVEO0FBQ3ZEO0lBQWdELHNDQUFZO0lBRXhEO1FBQUEsWUFDSSxpQkFBTyxTQThEVjtRQTdERyxtQ0FBbUM7UUFDbkMsMEJBQTBCO1FBQzFCLHlCQUF5QjtRQUN6Qix1QkFBdUI7UUFDdkIseUNBQXlDO1FBQ3pDLGdEQUFnRDtRQUNoRCxZQUFZO1FBQ1oscUNBQXFDO1FBQ3JDLG1DQUFtQztRQUNuQyxZQUFZO1FBQ1osa0NBQWtDO1FBQ2xDLGdCQUFnQjtRQUNoQixLQUFLO1FBQ0wsT0FBTztRQUNQLEVBQUUsQ0FBQyxlQUFlLENBQUM7WUFDZixZQUFZLEVBQUUsSUFBSTtTQUNyQixDQUFDLENBQUE7UUFDRixhQUFhO1FBQ2IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFBLEdBQUc7WUFDVCxLQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ25CLHdCQUFjLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBRWxDLGdDQUFnQztZQUNoQyxFQUFFLENBQUMsZUFBZSxDQUFDO2dCQUNmLFlBQVksRUFBRSxJQUFJO2FBQ3JCLENBQUMsQ0FBQTtZQUVGLGtCQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFTLENBQUMsV0FBVyxDQUFDLENBQUE7WUFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUM1QyxDQUFD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QyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUE7U0FDN0I7SUFFTCxDQUFDO0lBQ0QsT0FBTztJQUNQLDhDQUFpQixHQUFqQjtRQUNJLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDbkIseUNBQXlDO1FBQ3pDLGNBQWM7UUFDZCwwQkFBMEI7UUFDMUIsUUFBUTtRQUNSLG1CQUFtQjtRQUNuQixnQ0FBZ0M7UUFDaEMsS0FBSztJQUNULENBQUM7SUFDTCx5QkFBQztBQUFELENBcGhCQSxBQW9oQkMsQ0FwaEIrQyxzQkFBWSxHQW9oQjNEIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG7muLjmiI/lkI3np7A66YGu5aSpXG5TREvmlofmoaPvvJpcbmh0dHBzOi8vY2xpZW50Mi5oaHljZGsuY29tL2RvY3Mvc2RrRG9jcy5odG1sP3RhcmdldF9pZD00ZTgxYmRkMS1hYWYwLTQ2ZDgtOWIzYS01MDc2OWJlY2JlMWJcbmdhbWVJZCA9IDMxOSDmtYvor5Xnp5jpkqUgPSAxZDVjNWZjYjgwOTM0YjQ4ODZjYzhhN2M2MTM2NjY2NCDmraPlvI/np5jpkqUgPSBmYTYyYThjYmQyNDk0MWVjODNlZGFmODk3OTlhMWM0YiB6b25lS2V5ID0genR4bV93eG1sIHNuS2V5ID0gczIxOFxu5bCP56iL5bqPSUQ6d3gzOGMwMzMwNzljNWQ3NDkwXG4gKi9cblxuLy8g5a+85YWlY3J5cHRvLWpz55qEbWQ15Yqg5a+G5Yqf6IO9XG5pbXBvcnQgKiBhcyBDcnlwdG9KUyBmcm9tICdjcnlwdG8tanMnO1xuaW1wb3J0IEdhbWVjZmcgZnJvbSBcIi4uL2NvbW1vbi9nYW1lQ2ZnXCI7XG5pbXBvcnQgeyBnYW1lTWV0aG9kIH0gZnJvbSBcIi4uL2NvbW1vbi9nYW1lTWV0aG9kXCI7XG5pbXBvcnQgeyBQbGF5ZXJMb2dpbiwgUGxheWVyTG9naW5QcmFtIH0gZnJvbSBcIi4uL2NvbW1vbi9YeWNcIjtcbmltcG9ydCB7IFNldkJhY2sgfSBmcm9tIFwiLi4vY29tbW9uL1h5c1wiO1xuaW1wb3J0IENvbmZpZyBmcm9tIFwiLi4vQ29uZmlnXCI7XG5pbXBvcnQgeyBHYW1lRXZlbnQsIExvYWRFdmVudCwgUGxhdEV2ZW50IH0gZnJvbSBcIi4uL2RhdGEvY29uc3QvRXZlbnRDb25zdFwiO1xuaW1wb3J0IHsgQURfVklERU9fS0VZLCBHYW1lRXJyQ29kZSwgUGF5UHJvZHVjdFBhcmFtLCBSZXBvcnRSb2xlVHlwZSwgUGxhdEZvcm1EZXZUeXBlIH0gZnJvbSBcIi4uL2RhdGEvY29uc3QvVHlwZUNvbnN0XCI7XG5pbXBvcnQgR2FtZURhdGFDZW50ZXIgZnJvbSBcIi4uL2RhdGEvR2FtZURhdGFDZW50ZXJcIjtcbmltcG9ydCBHYW1lQ29udHJvbGxlciBmcm9tIFwiLi4vR2FtZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBVSUhlbHAgZnJvbSBcIi4uL2xvZ2ljL3VpL1VJSGVscFwiO1xuaW1wb3J0IEV2ZW50TW5nIGZyb20gXCIuLi9tYW5hZ2VyL0V2ZW50TW5nXCI7XG5pbXBvcnQgUGxhdGZvcm1CYXNlIGZyb20gXCIuL1BsYXRmb3JtQmFzZVwiO1xuaW1wb3J0IHsgbWQ1IH0gZnJvbSBcIi4uL3V0aWxzL21kNVwiO1xuaW1wb3J0IFRoaW5raW5nRGF0YU1nciBmcm9tICcuLi91dGlscy9UaGlua2luZ0RhdGFNZ3InO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxhdGZvcm1IYWlUdW9NaW5pIGV4dGVuZHMgUGxhdGZvcm1CYXNlIHtcbiAgICByZXdhcmRWaWRlbzogYW55XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKClcbiAgICAgICAgLy8gd3guZ2V0TGF1bmNoT3B0aW9uc1N5bmMocmVzID0+IHtcbiAgICAgICAgLy8gICAgIHRoaXMuZGVhbFF1ZXJ5KHJlcylcbiAgICAgICAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgIGxldCBzdHIgPSBcIlwiXG4gICAgICAgIC8vICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmVzLnF1ZXJ5KSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIHN0ciArPSBrZXkgKyBcIj1cIiArIHJlcy5xdWVyeVtrZXldXG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgIGxldCBkYXRhOiBEaWFsb2dQYXJhbXMgPSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnRlbnQ6IFwi5YaF5a65OlwiICsgc3RyXG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgIFVJSGVscC5TaG93RGlhbG9nKGRhdGEpXG4gICAgICAgIC8vICAgICB9LCAzMDAwKTtcbiAgICAgICAgLy8gfSlcbiAgICAgICAgLy8g5bGP5bmV5bi45LquXG4gICAgICAgIHd4LnNldEtlZXBTY3JlZW5Pbih7XG4gICAgICAgICAgICBrZWVwU2NyZWVuT246IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgLy8g54Ot5ZCv5YqoLOaIluWUpOmGkuaXtuinpuWPkVxuICAgICAgICB3eC5vblNob3cocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVhbFF1ZXJ5KHJlcylcbiAgICAgICAgICAgIEdhbWVEYXRhQ2VudGVyLmF1ZGlvLnJlc3VtZU11c2ljKClcblxuICAgICAgICAgICAgLy8gSU9T57O757ufLOWcqOWQjuWPsOWIh+WbnuaXtuS8vOS5juWbnuWkseWOu+W4uOS6ruWKn+iDvSzov5nph4zlho3osIPnlKjkuIDmrKFcbiAgICAgICAgICAgIHd4LnNldEtlZXBTY3JlZW5Pbih7XG4gICAgICAgICAgICAgICAga2VlcFNjcmVlbk9uOiB0cnVlXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBFdmVudE1uZy5lbWl0KEdhbWVFdmVudC5PTl9TSE9XX0FQUClcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiLS0tLS13eC5vblNob3cg5Zue6LCD6Kem5Y+ROlwiLCByZXMpXG4gICAgICAgIH0pXG4gICAgICAgIC8vIOWIh+WIsOWQjuWPsOaXtuinpuWPkVxuICAgICAgICB3eC5vbkhpZGUocmVzID0+IHtcbiAgICAgICAgICAgIEdhbWVEYXRhQ2VudGVyLmF1ZGlvLnN0b3BBbGxFZmZlY3RzKClcbiAgICAgICAgICAgIEdhbWVEYXRhQ2VudGVyLmF1ZGlvLnBhdXNlTXVzaWMoKVxuICAgICAgICB9KVxuICAgICAgICAvLyDliqDovb3lub/lkYrnu4Tku7ZcbiAgICAgICAgd3guc2hvd1NoYXJlTWVudSh7XG4gICAgICAgICAgICB3aXRoU2hhcmVUaWNrZXQ6IGZhbHNlLFxuICAgICAgICAgICAgbWVudXM6IFsnc2hhcmVBcHBNZXNzYWdlJywgJ3NoYXJlVGltZWxpbmUnXVxuICAgICAgICB9KVxuICAgICAgICAvLyDlsI/nqIvluo/mm7TmlrDmnLrliLYgaHR0cHM6Ly9kZXZlbG9wZXJzLndlaXhpbi5xcS5jb20vbWluaWdhbWUvZGV2L2d1aWRlL3J1bnRpbWUvdXBkYXRlLW1lY2hhbmlzbS5odG1sXG4gICAgICAgIGNvbnN0IHVwZGF0ZU1hbmFnZXIgPSB3eC5nZXRVcGRhdGVNYW5hZ2VyKClcbiAgICAgICAgdXBkYXRlTWFuYWdlci5vbkNoZWNrRm9yVXBkYXRlKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgIC8vIOivt+axguWujOaWsOeJiOacrOS/oeaBr+eahOWbnuiwg1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCLor7fmsYLlrozmlrDniYjmnKzkv6Hmga/nmoTlm57osINcIiwgcmVzLmhhc1VwZGF0ZSlcbiAgICAgICAgfSlcbiAgICAgICAgdXBkYXRlTWFuYWdlci5vblVwZGF0ZVJlYWR5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHd4LnNob3dNb2RhbCh7XG4gICAgICAgICAgICAgICAgdGl0bGU6ICfmm7TmlrDmj5DnpLonLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICfmlrDniYjmnKzlt7Lnu4/lh4blpIflpb3vvIzmmK/lkKbph43lkK/lupTnlKjvvJ8nLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3MocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuY29uZmlybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5paw55qE54mI5pys5bey57uP5LiL6L295aW977yM6LCD55SoIGFwcGx5VXBkYXRlIOW6lOeUqOaWsOeJiOacrOW5tumHjeWQr1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlTWFuYWdlci5hcHBseVVwZGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgICB1cGRhdGVNYW5hZ2VyLm9uVXBkYXRlRmFpbGVkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIOaWsOeJiOacrOS4i+i9veWksei0pVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByaXZhdGUgZGVhbFF1ZXJ5KHJlcykge1xuICAgICAgICBpZiAocmVzLnNjZW5lKSB7XG4gICAgICAgICAgICBHYW1lRGF0YUNlbnRlci5wbGF0LnF1ZXJ5cGFyYW1zLnNjZW5lID0gcmVzLnNjZW5lXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcy5xdWVyeVsnaW52aXRlciddKSB7XG4gICAgICAgICAgICBHYW1lRGF0YUNlbnRlci5wbGF0LnF1ZXJ5cGFyYW1zLmludml0ZXIgPSByZXMucXVlcnlbJ2ludml0ZXInXVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXMucXVlcnlbJ3NoYXJlciddKSB7XG4gICAgICAgICAgICBHYW1lRGF0YUNlbnRlci5wbGF0LnF1ZXJ5cGFyYW1zLnNoYXJlciA9IHJlcy5xdWVyeVsnc2hhcmVyJ11cbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhcIi0tLS0tc2hhcmVyLS0tLS1cIiwgR2FtZURhdGFDZW50ZXIucGxhdC5xdWVyeXBhcmFtcy5zaGFyZXIpXG4gICAgICAgIEV2ZW50TW5nLmVtaXQoUGxhdEV2ZW50Lk9OX1NDRU5FX0NIQU5HRUQpXG4gICAgfVxuXG4gICAgc2hvd0xvZ2luVmlldygpOiB2b2lkIHtcbiAgICAgICAgY29uc29sZS5sb2coXCLlubPlj7BzZGvliJ3lp4vljJYuLi5cIilcbiAgICAgICAgbGV0IG9wdHMgPSB3eC5nZXRMYXVuY2hPcHRpb25zU3luYygpXG4gICAgICAgIEV2ZW50TW5nLmVtaXQoTG9hZEV2ZW50LkxPQURfUFJPR1JFU1MsIDAuMjUsIFwibG9naW5cIilcbiAgICAgICAgbGV0IHBhY2thZ2VJbmZvID0gR2FtZWNmZy5wYWNrYWdlSW5mby5nZXRJdGVtKENvbmZpZy5waWQpXG4gICAgICAgIHdpbmRvd1snaGl0YWxrT3BlblNESyddLmluaXQoKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICBsZXQgc3lzSW5mbyA9IHd4LmdldFN5c3RlbUluZm9TeW5jKCk7XG4gICAgICAgICAgICBHYW1lRGF0YUNlbnRlci5wbGF0Lmluc3RhbmNlLmRldmljZU9TID0gc3lzSW5mbz8ucGxhdGZvcm1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiLS0tLeW9k+WJjei/kOihjOW5s+WPsOS/oeaBrzpcIiwgSlNPTi5zdHJpbmdpZnkoc3lzSW5mbykpXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIi0tLS3lvZPliY3ov5DooYzlubPlj7A6XCIsIEdhbWVEYXRhQ2VudGVyLnBsYXQuaW5zdGFuY2UuZGV2aWNlT1MpXG4gICAgICAgICAgICAvLyBkbyBzb21ldGhpbmdcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiLS0tLeWIneWni+WMluWbnuiwgzpcIiwgcmVzKVxuICAgICAgICAgICAgaWYgKHJlcy5yZXRDb2RlICE9IDApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuWIneWni+WMluWksei0pVwiKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLliJ3lp4vljJbmiJDlip9cIilcbiAgICAgICAgICAgIHdpbmRvd1snaGl0YWxrT3BlblNESyddLnJlc2V0Q29uZmlnKHRydWUpLy8gdHJ1ZTrmraPlvI/mnI07IGZhbHNlOua1i+ivleacjVxuICAgICAgICAgICAgLy/osIPnlKjnmbvlvZXmjqXlj6NcbiAgICAgICAgICAgIEV2ZW50TW5nLmVtaXQoTG9hZEV2ZW50LkxPQURfUFJPR1JFU1MsIDAuNSwgXCJsb2dpblwiKVxuICAgICAgICAgICAgd2luZG93WydoaXRhbGtPcGVuU0RLJ10ubG9naW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5yZXRDb2RlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdmaW5nZXJQbGF5ZXLnmbvlvZXmiJDlip86IHJlcz0+JyArIEpTT04uc3RyaW5naWZ5KHJlcykpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8v5Y+v5Lul5YWo5bGA6I635Y+W55qE5Y+C5pWwXG4gICAgICAgICAgICAgICAgICAgIENvbmZpZy53eE9wZW5JZCA9IHdpbmRvd1snaGl0YWxrT3BlblNESyddLm9wZW5JZCAvL+eUqOaIt+WUr+S4gOagh+ivhlxuICAgICAgICAgICAgICAgICAgICBDb25maWcud3hTaWduID0gcmVzLmRhdGEuc2lnbiAvL+etvuWQjVxuICAgICAgICAgICAgICAgICAgICBFdmVudE1uZy5lbWl0KExvYWRFdmVudC5MT0FEX1BST0dSRVNTLCAwLjc1LCBcImxvZ2luXCIpXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbXM6IFBsYXllckxvZ2luUHJhbSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpZDogQ29uZmlnLnBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtOiBbcmVzLmRhdGEub3BlbklkLCByZXMuZGF0YS50aW1lc3RhbXAsIHJlcy5kYXRhLnNpZ24sIEpTT04uc3RyaW5naWZ5KHJlcy5kYXRhPy5zblVzZXJJbmZvSnNvbildXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgR2FtZUNvbnRyb2xsZXIubmV0d29yay5zZW5kKFBsYXllckxvZ2luLnVybCwgcGFyYW1zLCAocmVzdWx0OiBTZXZCYWNrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuWQjuautemqjOivgei/lOWbnlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50eXBlICE9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2FtZU1ldGhvZC5pc0VtcHR5KHJlc3VsdC53aW4pIHx8IGdhbWVNZXRob2QuaXNFbXB0eShyZXN1bHQud2luLm1zZ091dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FtZURhdGFDZW50ZXIucGxhdC5zaG93RXJyRGlhbG9nKEdhbWVFcnJDb2RlLmVyckdhbWVQbGF0TG9naW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRNbmcuZW1pdChMb2FkRXZlbnQuTE9BRF9QUk9HUkVTUywgMSwgXCJsb2dpblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IDEgJiYgcmVzdWx0LnBsYXRCYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuSWQgPSByZXN1bHQucGxhdEJhY2sub3BlbmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dpblBhcmFtcyA9IFtyZXN1bHQucGxhdEJhY2sudG9rZW5dXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLlkI7nq6/pqozor4HmiJDlip9cIiwgdGhpcy5vcGVuSWQpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDojrflj5bpgoDor7fogIV1dWlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGludml0ZXIgPSBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHd4LmdldEVudGVyT3B0aW9uc1N5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9iaiA9IHd4LmdldEVudGVyT3B0aW9uc1N5bmMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqLnF1ZXJ5ICYmIG9iai5xdWVyeVsnaW52aXRlciddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZpdGVyID0gb2JqLnF1ZXJ5WydpbnZpdGVyJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2luKGludml0ZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUGxheWVyTG9naW4udXJsIOi/lOWbnuaVsOaNruW8guW4uFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnYW1lTWV0aG9kLmlzRW1wdHkocmVzdWx0LndpbikgfHwgZ2FtZU1ldGhvZC5pc0VtcHR5KHJlc3VsdC53aW4ubXNnT3V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHYW1lRGF0YUNlbnRlci5wbGF0LnNob3dFcnJEaWFsb2coR2FtZUVyckNvZGUuZXJyR2FtZVBsYXRMb2dpbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2ZpbmdlclBsYXllcueZu+W9leWksei0pTogcmVzPT4nICsgSlNPTi5zdHJpbmdpZnkocmVzKSk7XG4gICAgICAgICAgICAgICAgICAgIC8v5rOo5oSPOuiwg+eUqOeZu+W9leaOpeWPo+Wksei0peWQjizpnIDopoHot7PovazmuLjmiI/pobXpnaLmmL7npLrph43mlrDnmbvlvZXnmoTmjInpkq5cbiAgICAgICAgICAgICAgICAgICAgVUlIZWxwLlNob3dEaWFsb2coe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogXCLnmbvlvZXmjojmnYPlpLHotKXvvIzor7fph43mlrDnmbvlvZVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlDb25maXJtOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2JDb25maXJtOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FtZURhdGFDZW50ZXIucGxhdC5pbnN0YW5jZS5yZXN0YXJ0KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyDojrflj5bnlKjmiLforr7nva7kv6Hmga9cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuiOt+WPlueUqOaIt+iuvue9ruS/oeaBr1wiKVxuICAgICAgICAgICAgICAgIHd4LmdldFNldHRpbmcoe1xuICAgICAgICAgICAgICAgICAgICB3aXRoU3Vic2NyaXB0aW9uczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyhyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi6I635Y+W55So5oi36K6+572u5L+h5oGvIOWbnuiwgzpcIiwgcmVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5hdXRoU2V0dGluZyAmJiByZXMuYXV0aFNldHRpbmdbXCJzY29wZS51c2VySW5mb1wiXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOW3suaOiOadg1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5bey5o6I5p2DXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FtZURhdGFDZW50ZXIucGxhdC5pbnN0YW5jZS5oYXNBdXRoVXNlckluZm8gPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmlbTnkIborqLpmIXmtojmga9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc3Vic2NyaXB0aW9uc1NldHRpbmcgJiYgcmVzLnN1YnNjcmlwdGlvbnNTZXR0aW5nLml0ZW1TZXR0aW5ncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdhbWVEYXRhQ2VudGVyLnN1YnNjcmliZS5yZWNvcmRTdWJzY3JpYmVBbHdheXNTZXR0aW5ncyhyZXMuc3Vic2NyaXB0aW9uc1NldHRpbmcuaXRlbVNldHRpbmdzKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB3eC5vblNoYXJlQXBwTWVzc2FnZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIGltYWdlVXJsOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeTogYHN0YXRlPSR7XCJcIn1gXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHd4LnNob3dTaGFyZU1lbnUoe1xuICAgICAgICAgICAgICAgIG1lbnVzOiBbJ3NoYXJlQXBwTWVzc2FnZScsICdzaGFyZVRpbWVsaW5lJ11cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sIHsgZ2FtZUlkOiBwYXJzZUludChwYWNrYWdlSW5mby5wYXJhbXNbMF0pLCB6b25lS2V5OiBwYWNrYWdlSW5mby5wYXJhbXNbMV0sIHNuS2V5OiBwYWNrYWdlSW5mby5wYXJhbXNbMl0gfSlcbiAgICB9XG4gICAgLy8g5LiK5oql55So5oi35L+h5oGvXG4gICAgcmVwb3J0VXNlckluZm8ocmVzKSB7XG4gICAgfVxuICAgIC8vIOS4iuaKpeinkuiJsuaVsOaNrlxuICAgIHJlcG9ydFJvbGUoZXZlbnQ6IFJlcG9ydFJvbGVUeXBlKTogdm9pZCB7XG4gICAgICAgIC8v57uf5LiA55Sx5pyN5Yqh56uv5LiK5oqlXG4gICAgICAgIHJldHVyblxuICAgICAgICBpZiAoR2FtZURhdGFDZW50ZXIuc2V2QmFjayA9PSBudWxsKSB7IHJldHVybiB9XG4gICAgICAgIGlmIChHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvPy5hID09IG51bGwpIHsgcmV0dXJuIH1cbiAgICAgICAgY29uc29sZS5sb2coXCLkuIrmiqXop5LoibLmlbDmja46XCIgKyBldmVudCArIFwiLHV1aWQ6XCIgKyBHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvPy5hPy51dWlkKVxuICAgICAgICBsZXQgb25saW5lVGltZSA9IDBcbiAgICAgICAgaWYgKEdhbWVEYXRhQ2VudGVyLnRpbWUub25saW5lVGltZSA+IDApIHtcbiAgICAgICAgICAgIG9ubGluZVRpbWUgPSBHYW1lRGF0YUNlbnRlci50aW1lLnNldlRpbWUgLSBHYW1lRGF0YUNlbnRlci50aW1lLm9ubGluZVRpbWVcbiAgICAgICAgfVxuICAgICAgICBsZXQgcm9sZVR5cGVTdHIgPSAzXG4gICAgICAgIGlmIChldmVudCA9PSBSZXBvcnRSb2xlVHlwZS5jcmVhdGUpIHtcbiAgICAgICAgICAgIHJvbGVUeXBlU3RyID0gMlxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50ID09IFJlcG9ydFJvbGVUeXBlLmxldmVsdXApIHtcbiAgICAgICAgICAgIHJvbGVUeXBlU3RyID0gNFxuICAgICAgICB9XG4gICAgICAgIGxldCBwYXJhbSA9IHtcbiAgICAgICAgICAgIFwiYXJlYUlkXCI6IEdhbWVEYXRhQ2VudGVyLnNldkJhY2sudXNlckluZm8/LmE/LnNpZCxcbiAgICAgICAgICAgIFwiYXJlYU5hbWVcIjogR2FtZURhdGFDZW50ZXIudXNlci5zZXJ2ZXJOYW1lLFxuICAgICAgICAgICAgXCJyb2xlSWRcIjogR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mbz8uYT8udXVpZCxcbiAgICAgICAgICAgIFwicm9sZU5hbWVcIjogR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mbz8uYT8ubmFtZSxcbiAgICAgICAgICAgIFwicm9sZUxldmVsXCI6IEdhbWVEYXRhQ2VudGVyLnNldkJhY2sudXNlckluZm8/LmE/LmxldmVsLFxuICAgICAgICAgICAgXCJ2aXBHcmFkZVwiOiAwLFxuICAgICAgICAgICAgXCJjcmVhdGVSb2xlVGltZVwiOiBHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvPy5hPy5yZWd0aW1lLFxuICAgICAgICAgICAgXCJjcmVhdGVUaW1lXCI6IEdhbWVEYXRhQ2VudGVyLnRpbWUuc2V2VGltZSxcbiAgICAgICAgICAgIFwibW9uZXlOdW1cIjogR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mbz8uYT8uaXNjeixcbiAgICAgICAgICAgIFwicm9sZVBvd2VyXCI6IDAsXG4gICAgICAgICAgICBcInJvbGVUdXJudXBcIjogMCxcbiAgICAgICAgICAgIFwic2lnblwiOiBDb25maWcud3hTaWduXG4gICAgICAgIH1cbiAgICAgICAgLy/pqozor4FcbiAgICAgICAgbGV0IHN0cjogc3RyaW5nID0gXCJcIlxuICAgICAgICBzdHIgKz0gXCImYXJlYUlkPVwiICsgcGFyYW1bXCJhcmVhSWRcIl1cbiAgICAgICAgc3RyICs9IFwiJmFyZWFOYW1lPVwiICsgcGFyYW1bXCJhcmVhTmFtZVwiXVxuICAgICAgICBzdHIgKz0gXCImY3JlYXRlUm9sZVRpbWU9XCIgKyBwYXJhbVtcImNyZWF0ZVJvbGVUaW1lXCJdXG4gICAgICAgIHN0ciArPSBcIiZjcmVhdGVUaW1lPVwiICsgcGFyYW1bXCJjcmVhdGVUaW1lXCJdXG4gICAgICAgIHN0ciArPSBcIiZtb25leU51bT1cIiArIHBhcmFtW1wibW9uZXlOdW1cIl1cbiAgICAgICAgc3RyICs9IFwiJnJvbGVJZD1cIiArIHBhcmFtW1wicm9sZUlkXCJdXG4gICAgICAgIHN0ciArPSBcIiZyb2xlTGV2ZWw9XCIgKyBwYXJhbVtcInJvbGVMZXZlbFwiXVxuICAgICAgICBzdHIgKz0gXCImcm9sZU5hbWU9XCIgKyBwYXJhbVtcInJvbGVOYW1lXCJdXG4gICAgICAgIHN0ciArPSBcIiZyb2xlUG93ZXI9XCIgKyBwYXJhbVtcInJvbGVQb3dlclwiXVxuICAgICAgICBzdHIgKz0gXCImcm9sZVR1cm51cD1cIiArIHBhcmFtW1wicm9sZVR1cm51cFwiXVxuICAgICAgICBzdHIgKz0gXCImdmlwR3JhZGU9XCIgKyBwYXJhbVtcInZpcEdyYWRlXCJdXG4gICAgICAgIHN0ciArPSBcImZhNjJhOGNiZDI0OTQxZWM4M2VkYWY4OTc5OWExYzRiXCJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJtZDUgc3RyID0+IFwiLCBzdHIpXG4gICAgICAgIGxldCBfc2lnbiA9IG1kNShzdHIpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHBhcmFtLnNpZ24gPSBfc2lnblxuICAgICAgICB3aW5kb3dbJ2hpdGFsa09wZW5TREsnXS5nYW1lUmVwb3J0KHJvbGVUeXBlU3RyLCBwYXJhbSwgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIuinkuiJsuaVsOaNruS4iuaKpTpcIiArIEpTT04uc3RyaW5naWZ5KHJlcykpO1xuICAgICAgICAgICAgaWYgKHJlcy5yZXRDb2RlID09IDApIHtcbiAgICAgICAgICAgICAgICAvL+S4iuaKpeaIkOWKn1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy/kuIrmiqXlpLHotKVcbiAgICAgICAgfSlcbiAgICB9XG4gICAgcGF5KG9yZGVySWQ6IHN0cmluZywgb3JkZXIxMGNzOiBzdHJpbmcsIHBhcmFtOiBQYXlQcm9kdWN0UGFyYW0pOiB2b2lkIHtcbiAgICAgICAgd2luZG93WydoaXRhbGtPcGVuU0RLJ10uaXNHYW1lUGF5KHt9LCBmdW5jdGlvbiAocmVzOiBhbnkpIHtcbiAgICAgICAgICAgIC8vdHJ1ZTrlvIDlkK8o6buY6K6k5YC8KSxmYWxzZTrlhbPpl63mlK/ku5hcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCfmmK/lkKblvIDlkK/mlK/ku5jlip/og706JyArIHJlcylcbiAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAvL+W8gOWQr+aUr+S7mOWKn+iDvVxuICAgICAgICAgICAgICAgIGxldCBwYWNrYWdlSW5mbyA9IEdhbWVjZmcucGFja2FnZUluZm8uZ2V0SXRlbShDb25maWcucGlkKVxuICAgICAgICAgICAgICAgIGxldCBwcmljZSA9IHBhcmFtLnByaWNlICogMTAwXG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0UGF5ZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ2dhbWVJZCc6IHBhcnNlSW50KHBhY2thZ2VJbmZvLnBhcmFtc1swXSksIC8vXHTmuLjmiI/llK/kuIDmoIfor4ZcbiAgICAgICAgICAgICAgICAgICAgJ3NuS2V5JzogcGFja2FnZUluZm8ucGFyYW1zWzJdLCAvL1x05YyF5ZSv5LiA56CBXG4gICAgICAgICAgICAgICAgICAgICdvcGVuSWQnOiB3aW5kb3dbJ2hpdGFsa09wZW5TREsnXS5vcGVuSWQsIC8v55So5oi35ZSv5LiA5qCH6K+GXG4gICAgICAgICAgICAgICAgICAgICdyb2xlSWQnOiBHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvPy5hPy51dWlkLCAvL1x06KeS6ImySWRcbiAgICAgICAgICAgICAgICAgICAgJ3JvbGVOYW1lJzogR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mbz8uYT8ubmFtZSwgLy/op5LoibLlkI3np7BcbiAgICAgICAgICAgICAgICAgICAgJ3JvbGVMZXZlbCc6IEdhbWVEYXRhQ2VudGVyLnNldkJhY2sudXNlckluZm8/LmE/LmxldmVsLCAvL+inkuiJsuetiee6p1xuICAgICAgICAgICAgICAgICAgICAndmlwR3JhZGUnOiAwLCAvL1ZJUOetiee6p1xuICAgICAgICAgICAgICAgICAgICAnYXJlYUlkJzogR2FtZURhdGFDZW50ZXIuc2V2QmFjay51c2VySW5mbz8uYT8uc2lkLCAgIC8vIOWMuuacjWlkLOWQiOacjeS5i+WQjuS8oOaXp+eahGFyZWFJZCzkuI7mlbDmja7kuIrmiqXnmoTljLrmnI1JROebuOWQjFxuICAgICAgICAgICAgICAgICAgICAnYXJlYU5hbWUnOiBHYW1lRGF0YUNlbnRlci5zZXZCYWNrLnVzZXJJbmZvPy5hPy5zaWQsIC8vIOWMuuacjeWQjeensFxuICAgICAgICAgICAgICAgICAgICAncHJvZHVjdElkJzogcGFyYW0ucHJvZHVjdElkLCAvLyDllYblk4FJRFxuICAgICAgICAgICAgICAgICAgICAncHJvZHVjdE5hbWUnOiBwYXJhbS5wcm9kdWN0TmFtZSwgICAvLyDllYblk4HlkI3np7BcbiAgICAgICAgICAgICAgICAgICAgJ3Byb2R1Y3REZXNjcmliZSc6IHBhcmFtLnByb2R1Y3REZXNjLCAgIC8vIOWVhuWTgeaPj+i/sFxuICAgICAgICAgICAgICAgICAgICAnYW1vdW50JzogcHJpY2UsIC8vIOWVhuWTgemHkeminSjljZXkvY065YiGKVxuICAgICAgICAgICAgICAgICAgICAnZ2FtZU9yZGVyTm8nOiBvcmRlcklkLCAvLyDmuLjmiI/mlrnmlK/ku5jorqLljZXlj7dcbiAgICAgICAgICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IEdhbWVEYXRhQ2VudGVyLnRpbWUuc2V2VGltZSwgICAvLyDml7bpl7TmiLMs5Y2V5L2NOuenklxuICAgICAgICAgICAgICAgICAgICAnZXh0ZW5zaW9uJzogXCJcIiwgLy/pgI/kvKDlrZfmrrUs5pSv5LuY5Zue6LCD5pe25Lya5Y6f5qC36L+U5ZueLOm7mOiupOWAvDpcIlwiXG4gICAgICAgICAgICAgICAgICAgICdjYWxsYmFja1VybCc6IG9yZGVyMTBjcywgICAvLyDmlK/ku5jlm57osIPlnLDlnYAgXG4gICAgICAgICAgICAgICAgICAgICdzaWduJzogXCJcIiAgIC8vIOetvuWQjeS/oeaBr1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvL+mqjOivgVxuICAgICAgICAgICAgICAgIGxldCBzdHI6IHN0cmluZyA9IFwiXCJcbiAgICAgICAgICAgICAgICBzdHIgKz0gXCJhbW91bnQ9XCIgKyBzdGFydFBheWRhdGFbXCJhbW91bnRcIl1cbiAgICAgICAgICAgICAgICBzdHIgKz0gXCImYXJlYUlkPVwiICsgc3RhcnRQYXlkYXRhW1wiYXJlYUlkXCJdXG4gICAgICAgICAgICAgICAgc3RyICs9IFwiJmFyZWFOYW1lPVwiICsgc3RhcnRQYXlkYXRhW1wiYXJlYU5hbWVcIl1cbiAgICAgICAgICAgICAgICBzdHIgKz0gXCImY2FsbGJhY2tVcmw9XCIgKyBzdGFydFBheWRhdGFbXCJjYWxsYmFja1VybFwiXVxuICAgICAgICAgICAgICAgIGlmICghZ2FtZU1ldGhvZC5pc0VtcHR5KHN0YXJ0UGF5ZGF0YVtcImV4dGVuc2lvblwiXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9IFwiJmV4dGVuc2lvbj1cIiArIHN0YXJ0UGF5ZGF0YVtcImV4dGVuc2lvblwiXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHIgKz0gXCImZ2FtZUlkPVwiICsgc3RhcnRQYXlkYXRhW1wiZ2FtZUlkXCJdXG4gICAgICAgICAgICAgICAgc3RyICs9IFwiJmdhbWVPcmRlck5vPVwiICsgc3RhcnRQYXlkYXRhW1wiZ2FtZU9yZGVyTm9cIl1cbiAgICAgICAgICAgICAgICBzdHIgKz0gXCImb3BlbklkPVwiICsgc3RhcnRQYXlkYXRhW1wib3BlbklkXCJdXG4gICAgICAgICAgICAgICAgc3RyICs9IFwiJnByb2R1Y3REZXNjcmliZT1cIiArIHN0YXJ0UGF5ZGF0YVtcInByb2R1Y3REZXNjcmliZVwiXVxuICAgICAgICAgICAgICAgIHN0ciArPSBcIiZwcm9kdWN0SWQ9XCIgKyBzdGFydFBheWRhdGFbXCJwcm9kdWN0SWRcIl1cbiAgICAgICAgICAgICAgICBzdHIgKz0gXCImcHJvZHVjdE5hbWU9XCIgKyBzdGFydFBheWRhdGFbXCJwcm9kdWN0TmFtZVwiXVxuICAgICAgICAgICAgICAgIHN0ciArPSBcIiZyb2xlSWQ9XCIgKyBzdGFydFBheWRhdGFbXCJyb2xlSWRcIl1cbiAgICAgICAgICAgICAgICBzdHIgKz0gXCImcm9sZUxldmVsPVwiICsgc3RhcnRQYXlkYXRhW1wicm9sZUxldmVsXCJdXG4gICAgICAgICAgICAgICAgc3RyICs9IFwiJnJvbGVOYW1lPVwiICsgc3RhcnRQYXlkYXRhW1wicm9sZU5hbWVcIl0udHJpbSgpXG4gICAgICAgICAgICAgICAgc3RyICs9IFwiJnNuS2V5PVwiICsgc3RhcnRQYXlkYXRhW1wic25LZXlcIl1cbiAgICAgICAgICAgICAgICBzdHIgKz0gXCImdGltZXN0YW1wPVwiICsgc3RhcnRQYXlkYXRhW1widGltZXN0YW1wXCJdXG4gICAgICAgICAgICAgICAgc3RyICs9IFwiJnZpcEdyYWRlPVwiICsgc3RhcnRQYXlkYXRhW1widmlwR3JhZGVcIl1cbiAgICAgICAgICAgICAgICBzdHIgKz0gXCJmYTYyYThjYmQyNDk0MWVjODNlZGFmODk3OTlhMWM0YlwiXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJtZDUgc3RyID0+IFwiLCBzdHIpXG4gICAgICAgICAgICAgICAgbGV0IF9zaWduID0gbWQ1KHN0cikudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBzdGFydFBheWRhdGEuc2lnbiA9IF9zaWduXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJzdGFydFBheWRhdGE9PlwiLCBKU09OLnN0cmluZ2lmeShzdGFydFBheWRhdGEpKVxuICAgICAgICAgICAgICAgIHdpbmRvd1snaGl0YWxrT3BlblNESyddLmdhbWVQYXkoc3RhcnRQYXlkYXRhLCAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+aUr+S7mDonICsgSlNPTi5zdHJpbmdpZnkocmVzKSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5yZXRDb2RlID0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKENvbmZpZy5wYXlTdWNjQWRva0lkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKENvbmZpZy5wYXlTdWNjQWRva0lkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZy5wYXlTdWNjQWRva0lkID0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnLnBheVN1Y2NBZG9rSW5kZXggPSAwXG4gICAgICAgICAgICAgICAgICAgICAgICBDb25maWcucGF5U3VjY0Fkb2tJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWcucGF5U3VjY0Fkb2tJbmRleCsrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKENvbmZpZy5wYXlTdWNjQWRva0luZGV4ID49IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChDb25maWcucGF5U3VjY0Fkb2tJZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnLnBheVN1Y2NBZG9rSWQgPSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdhbWVEYXRhQ2VudGVyLnRpbWUuc2VuZEFkb2soKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwMClcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFVJSGVscC5TaG93VGlwcyhcIuaUr+S7mOW8guW4uO+8jOivt+iBlOezu+WuouacjVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLy/lvILluLjkuIrmiqXmnI3liqHnq69cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3dbXCJzZW5kQ2xpZW50RXJyXCJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93W1wic2VuZENsaWVudEVyclwiXShbSlNPTi5zdHJpbmdpZnkocmVzKV0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvL+S4jeW8gOWQr+aUr+S7mOWKn+iDvVxuICAgICAgICAgICAgICAgIFVJSGVscC5TaG93VGlwcyhcIuacquW8gOWQr+aUr+S7mO+8jOaXoOmcgOaUr+S7mFwiKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgfVxuXG4gICAgY2hlY2tNc2coc3RyOiBzdHJpbmcsIGNiOiBGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICAvL+eUseacjeWKoeerr+agoemqjFxuICAgICAgICBjYigpXG4gICAgICAgIC8vIHZhciBzd2l0Y2hzID0gd2luZG93WydoaXRhbGtPcGVuU0RLJ10uc3dpdGNoU3RhdHVzIC8v6I635Y+W5Yqf6IO95byA5YWz54q25oCBXG4gICAgICAgIC8vIC8v5piv5ZCm5a6e546w5pWP5oSf5a2X5qCh6aqM5Yqf6IO9XG4gICAgICAgIC8vIC8vdHJ1ZTrnlLHlrqLmiLfnq6/moKHpqozmlY/mhJ/lrZcsZmFsc2U655Sx5pyN5Yqh56uv5o6l5Y+j5qCh6aqM5pWP5oSf5a2XXG4gICAgICAgIC8vIGlmIChzd2l0Y2hzLmNvbnRlbnRDaGVjayAmJiBzd2l0Y2hzLmNvbnRlbnRDaGVjay5zdGF0dXMpIHtcbiAgICAgICAgLy8gICAgIC8vIOmcgOimgVxuICAgICAgICAvLyAgICAgLy/osIPnlKjmlY/mhJ/lrZfmoKHpqozmjqXlj6NcbiAgICAgICAgLy8gICAgIHZhciBwYXJhbXMgPSB7XG4gICAgICAgIC8vICAgICAgICAgc2NlbmU6IDIsLy/lhoXlrrnlupTnlKjlnLrmma/lgLwoMTrliJvop5LvvIwyOuiBiuWkqSjpu5jorqQp77yMMzrlrrbml4/mlLnlkI3vvIw0OuWutuaXj+WFrOWRiilcbiAgICAgICAgLy8gICAgICAgICBjb250ZW50OiBzdHJcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICAgIHdpbmRvd1snaGl0YWxrT3BlblNESyddLmdhbWVFeHRyYUFjdGlvbihcImNvbnRlbnRDaGVja1wiLCBwYXJhbXMsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgLy8gICAgICAgICBpZiAocmVzLnJldENvZGUgPT0gMCkge1xuICAgICAgICAvLyAgICAgICAgICAgICAvL+agoemqjOmAmui/h1xuICAgICAgICAvLyAgICAgICAgICAgICBjYigpXG4gICAgICAgIC8vICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgLy/moKHpqozlpLHotKVcbiAgICAgICAgLy8gICAgICAgICAgICAgVUlIZWxwLlNob3dUaXBzKFwi6L6T5YWl5paH5a2X5bim5pyJ5pWP5oSf6K+NLOivt+mHjeaWsOi+k+WFpVwiKVxuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH0pXG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICAvLyDkuI3pnIDopoFcbiAgICAgICAgLy8gICAgIFVJSGVscC5TaG93VGlwcyhcIuacquW8gOmAmuaVj+aEn+ivjeajgOa1i1wiKVxuICAgICAgICAvLyAgICAgY2IoKVxuICAgICAgICAvLyB9XG5cbiAgICB9XG4gICAgLy8g5omT5byA5a6i5pyN56qX5Y+jXG4gICAgb3BlblNlcnZpY2UoKSB7XG4gICAgICAgIHZhciBzd2l0Y2hzID0gd2luZG93WydoaXRhbGtPcGVuU0RLJ10uc3dpdGNoU3RhdHVzIC8v6I635Y+W5Yqf6IO95byA5YWz54q25oCBXG4gICAgICAgIC8v5piv5ZCm5pi+56S65a6i5pyN5Yqf6IO9XG4gICAgICAgIGlmIChzd2l0Y2hzLmN1c3RvbWVyU2VydmljZSkge1xuICAgICAgICAgICAgLy8g5pi+56S65a6i5pyN5Yqf6IO9XG4gICAgICAgICAgICAvLyDmiZPlvIDlrqLmnI3nqpflj6NcbiAgICAgICAgICAgIHdpbmRvd1snaGl0YWxrT3BlblNESyddLmdhbWVFeHRyYUFjdGlvbihcImN1c3RvbWVyU2VydmljZVwiLCB7fSwgZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgICAgICAgIC8v6L+U5Zue57uT5p6cXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOmakOiXj+a4uOaIj+WGheWuouacjeaMiemSrlxuICAgICAgICAgICAgVUlIZWxwLlNob3dUaXBzKFwi5pyq5byA6YCa5a6i5pyN5Yqf6IO9XCIpXG4gICAgICAgIH1cblxuICAgIH1cbiAgICAvLyDorqLpmIXmtojmga9cbiAgICBzZXRTdWJzY3JpYmUodG1wbElkczogc3RyaW5nW10sIGlkczogc3RyaW5nW10pIHtcbiAgICAgICAgdmFyIHN3aXRjaHMgPSB3aW5kb3dbJ2hpdGFsa09wZW5TREsnXS5zd2l0Y2hTdGF0dXMgLy/ojrflj5blip/og73lvIDlhbPnirbmgIFcbiAgICAgICAgLy/mmK/lkKbmmL7npLrlrqLmnI3lip/og71cbiAgICAgICAgLy/liKTmlq3muKDpgZPmmK/lkKbmnInorqLpmIXlip/og71cbiAgICAgICAgaWYgKHN3aXRjaHMuc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICAvL+mVv+acn+iuoumYheeKtuaAgSzor6Xlip/og73mmoLml7blhbPpl60s6ZyA6L6+5Yiw5p2h5Lu25omN6IO95byA5ZCvXG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlU3RhdHVzID0gc3dpdGNocy5zdWJzY3JpYmUuc3RhdHVzIC8v6ZW/5pyf6K6i6ZiF54q25oCBKOaaguWBnOS9v+eUqCk7ICB0cnVlOuW3suiuoumYhSAgZmFsc2U65pyq6K6i6ZiFXG4gICAgICAgICAgICB2YXIgb25lU3RhdHVzID0gc3dpdGNocy5zdWJzY3JpYmUub25lU3RhdHVzLy/kuIDmrKHmgKforqLpmIXnirbmgIE7ICAgdHJ1ZTrlt7LorqLpmIUgIGZhbHNlOuacquiuoumYhVxuXG4gICAgICAgICAgICAvL+S4gOasoeaAp+iuoumYheWKn+iDveWIpOaWrSzlvZPosIPnlKhzdWJzY3JpYmXorqLpmIXmjqXlj6Pml7bkuLp0cnVl5pe25Yik5patXG4gICAgICAgICAgICBpZiAob25lU3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgLy/nlKjmiLforqLpmIXnirbmgIHkuLp0cnVl6KaB6L+b6KGM55qE5pON5L2cXG4gICAgICAgICAgICAgICAgLy/mr5TlpoI65b2T55So5oi36K6i6ZiF54q25oCB5Li6dHJ1ZeaXtizpmpDol49cIuiuoumYhVwi5Zu+5qCHL+aIluiAhVwi5Yu+6YCJXCLorqLpmIXlip/og71cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy/nlKjmiLforqLpmIXnirbmgIHkuLpmYWxzZeimgei/m+ihjOeahOaTjeS9nFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3hbXCJzaG93TW9kYWxcIl0oe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBcIuaPkOekulwiLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwi6K+35o6I5p2D5byA5ZCv5pyN5Yqh6YCa55+lXCIsXG4gICAgICAgICAgICAgICAgc2hvd0NhbmNlbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuY29uZmlybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy/lvZMo5pyq6K6i6ZiFKeeUqOaIt+eCueWHu1wi6K6i6ZiFXCLmjInpkq4s5Li75Yqo6K6i6ZiF5pe26LCD55SoXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDAsICAvLzA66ZW/5pyf6K6i6ZiFICAxOuS4gOasoeaAp+iuoumYhSAo6buY6K6k5Lyg5YWlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcGxJZHM6IHRtcGxJZHMgLy/orqLpmIXmqKHmnb9JRCDmlbDnu4RcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1snaGl0YWxrT3BlblNESyddLmdhbWVFeHRyYUFjdGlvbihcInN1YnNjcmliZVwiLCBwYXJhbXMsIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIj09PeiuoumYheaOpeWPo+Wbnuiwgz09PVwiLCByZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5yZXRDb2RlID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy/ooajnpLrorqLpmIXmiJDlip9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FtZURhdGFDZW50ZXIuc3Vic2NyaWJlLnNldExhc3RTdWJzY3JpYmVUaW1lKHRtcGxJZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhY2NlcHRMaXN0OiBzdHJpbmdbXSA9IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBOb0FjY2VwdExpc3Q6IHN0cmluZ1tdID0gW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wbElkcy5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcz8uZGF0YT8uaW5kZXhPZihlbGVtZW50KSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0TGlzdC5wdXNoKGlkc1tpbmRleF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vQWNjZXB0TGlzdC5wdXNoKGlkc1tpbmRleF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWNjZXB0TGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHYW1lRGF0YUNlbnRlci5zdWJzY3JpYmUuc2VuZFN1YnNjcmliZShhY2NlcHRMaXN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOb0FjY2VwdExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FtZURhdGFDZW50ZXIuc3Vic2NyaWJlLnNlbmRTdWJzY3JpYmVDYW5jbGUoTm9BY2NlcHRMaXN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy/ooajnpLrorqLpmIXlpLHotKVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FtZURhdGFDZW50ZXIuc3Vic2NyaWJlLnNlbmRTdWJzY3JpYmVDYW5jbGUodG1wbElkcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn55So5oi354K55Ye75Y+W5raIJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDnlKjmiLfngrnlh7vlj5bmtojlkI7nmoTpgLvovpHlpITnkIZcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v6KGo56S66K6i6ZiF5aSx6LSlXG4gICAgICAgICAgICAgICAgICAgICAgICBHYW1lRGF0YUNlbnRlci5zdWJzY3JpYmUuc2VuZFN1YnNjcmliZUNhbmNsZSh0bXBsSWRzKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvL+ihqOekuuivpea4oOmBk+ayoeacieiuoumYheWKn+iDvSzmuLjmiI/kuI3og73mmL7npLrorqLpmIXnm7jlhbPlip/og71cbiAgICAgICAgICAgIFVJSGVscC5TaG93VGlwcyhcIuacquW8gOmAmuiuoumYheWKn+iDvVwiKVxuICAgICAgICB9XG5cbiAgICB9XG4gICAgc2hvd1Jld2FyZEFkKGFkSWQ6IHN0cmluZywga2lkOiBzdHJpbmcsIG9yZGVyMTFJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHZhciBzd2l0Y2hzID0gd2luZG93WydoaXRhbGtPcGVuU0RLJ10uc3dpdGNoU3RhdHVzIC8v6I635Y+W5Yqf6IO95byA5YWz54q25oCBXG4gICAgICAgIC8v5piv5ZCm6ZyA6KaB5r+A5Yqx6KeG6aKR5Yqf6IO9XG4gICAgICAgIGlmIChzd2l0Y2hzLnZpZGVvQWQpIHtcbiAgICAgICAgICAgIC8v5pWw5pWw5LiK5oqlXG4gICAgICAgICAgICBsZXQgcHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgICAgICBcImFkX3BsYXRmb3JtXCI6IFwi5b6u5L+h5bCP5ri45oiPXCIsXG4gICAgICAgICAgICAgICAgXCJhZF9pZFwiOiBhZElkLFxuICAgICAgICAgICAgICAgIFwiYWRfdHlwZVwiOiBcIua/gOWKseinhumikVwiLFxuICAgICAgICAgICAgICAgIFwiYWRfcGxhY2VtZW50X25hbWVcIjogXCJob21lX2ZlZWRcIixcbiAgICAgICAgICAgICAgICBcImFkX3BsYWNlbWVudF9pZFwiOiBvcmRlcjExSWQsXG4gICAgICAgICAgICAgICAgXCJjdXJyZW50X3BhZ2VcIjoga2lkLFxuICAgICAgICAgICAgICAgIC8vIFwiYWRfZWNwbVwiOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBUaGlua2luZ0RhdGFNZ3IuVERUcmFjayhcImFkX3JlcXVlc3RcIiwgcHJvcGVydGllcylcbiAgICAgICAgICAgIC8vIOW8gOWQr+a/gOWKseinhumikeWKn+iDvVxuICAgICAgICAgICAgLy/mkq3mlL7op4bpopHlip/og70gICAgXG4gICAgICAgICAgICB2YXIgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIGFkVW5pdElkOiBhZElkLy/kuI3lkIzkvY3nva7nmoTlub/lkYpJRCzpnIDopoHmuLjmiI/kvKDlhaVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpbmRvd1snaGl0YWxrT3BlblNESyddLmdhbWVFeHRyYUFjdGlvbihcInZpZGVvQWRcIiwgcGFyYW1zLCBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGlzU3VjID0gcmVzLnJldENvZGUgPT0gMCA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgICAgIC8v5pWw5pWw5LiK5oqlXG4gICAgICAgICAgICAgICAgbGV0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIFwiYWRfcGxhdGZvcm1cIjogXCLlvq7kv6HlsI/muLjmiI9cIixcbiAgICAgICAgICAgICAgICAgICAgXCJhZF9pZFwiOiBhZElkLFxuICAgICAgICAgICAgICAgICAgICBcImFkX3R5cGVcIjogXCLmv4DlirHop4bpopFcIixcbiAgICAgICAgICAgICAgICAgICAgXCJhZF9wbGFjZW1lbnRfbmFtZVwiOiBcImhvbWVfZmVlZFwiLFxuICAgICAgICAgICAgICAgICAgICBcImFkX3BsYWNlbWVudF9pZFwiOiBvcmRlcjExSWQsXG4gICAgICAgICAgICAgICAgICAgIFwiY3VycmVudF9wYWdlXCI6IGtpZCxcbiAgICAgICAgICAgICAgICAgICAgLy8gXCJhZF9lY3BtXCI6IDAsXG4gICAgICAgICAgICAgICAgICAgIFwiaXNfZmlsbGVkX3N1Y2Nlc3NcIjogaXNTdWMsXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JfZGV0YWlsX2luZm9cIjogSlNPTi5zdHJpbmdpZnkocmVzKSxcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvcl9kZXRhaWxfY29kZVwiOiByZXMucmV0Q29kZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBUaGlua2luZ0RhdGFNZ3IuVERUcmFjayhcImFkX3Jlc3BvbnNlXCIsIHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5yZXRDb2RlID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy/ooajnpLrmkq3mlL7op4bpopHmiJDlip8s5ri45oiP5YaF57uZ546p5a625Y+R5pS+5aWW5YqxXG4gICAgICAgICAgICAgICAgICAgIEdhbWVEYXRhQ2VudGVyLmFkVmlkZW8ub25YaWFkYW5TdWNjKClcbiAgICAgICAgICAgICAgICAgICAgLy/mlbDmlbDkuIrmiqVcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImFkX3BsYXRmb3JtXCI6IFwi5b6u5L+h5bCP5ri45oiPXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFkX2lkXCI6IGFkSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFkX3R5cGVcIjogXCLmv4DlirHop4bpopFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRfcGxhY2VtZW50X25hbWVcIjogXCJob21lX2ZlZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRfcGxhY2VtZW50X2lkXCI6IG9yZGVyMTFJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY3VycmVudF9wYWdlXCI6IGtpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFwiYWRfZWNwbVwiOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gXCJhZF9hcHBfbmFtZVwiOiBcIuacquefpVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgVGhpbmtpbmdEYXRhTWdyLlREVHJhY2soXCJhZF9zaG93XCIsIHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy/ooajnpLrmkq3mlL7op4bpopHlpLHotKUs5LiN5Y+R5aWW5YqxXG4gICAgICAgICAgICAgICAgICAgIC8v5pWw5pWw5LiK5oqlXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJhZF9wbGF0Zm9ybVwiOiBcIuW+ruS/oeWwj+a4uOaIj1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhZF9pZFwiOiBhZElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhZF90eXBlXCI6IFwi5r+A5Yqx6KeG6aKRXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFkX3BsYWNlbWVudF9uYW1lXCI6IFwiaG9tZV9mZWVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFkX3BsYWNlbWVudF9pZFwiOiBvcmRlcjExSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImN1cnJlbnRfcGFnZVwiOiBraWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBcImFkX2VjcG1cIjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFwiYWRfYXBwX25hbWVcIjogXCLmnKrnn6VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFwiYWRfZHVyYXRpb25cIjogMzAsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBcImFkX3BsYXlfZHVyYXRpb25cIjogMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImlzX2NvbXBsZXRlX3BsYXlcIjogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBUaGlua2luZ0RhdGFNZ3IuVERUcmFjayhcImFkX2Nsb3NlXCIsIHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDlhbPpl63mv4DlirHop4bpopHlip/og71cblxuICAgICAgICAgICAgVUlIZWxwLlNob3dUaXBzKFwi5pyq5byA6YCa6KeG6aKR5bm/5ZGKXCIpXG4gICAgICAgIH1cblxuICAgIH1cbiAgICAvLyDliIbkuqvkuIrmiqVcbiAgICByZXNwb3J0U2hhcmVFdmVudCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCLliIbkuqvkuIrmiqVcIilcbiAgICAgICAgLy8gd2luZG93W1wiaGl0YWxrT3BlblNES1wiXS5hZGRTaGFyZUluZm8oe1xuICAgICAgICAvLyAgICAgZGF0YToge1xuICAgICAgICAvLyAgICAgICAgIHRvX3RhcmdldDogJ3d4J1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9KS50aGVuKHJlcyA9PiB7XG4gICAgICAgIC8vICAgICBjb25zb2xlLmxvZyhcIuWIhuS6q+e7k+aenDpcIiwgcmVzKVxuICAgICAgICAvLyB9KVxuICAgIH1cbn0iXX0=