(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Script/GameManager.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, 'b0432BA295DjIOcuitdGKO1', 'GameManager'); // Script/GameManager.ts "use strict"; 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 __()); }; })(); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); // 主游戏控制类 var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property; var GameManager = /** @class */ (function (_super) { __extends(GameManager, _super); function GameManager() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.Btn_New = null; _this.Btn_Hear = null; _this.Btn_See = null; _this.Btn_Firewood = null; _this.Plant = null; _this.timeNode = null; _this.FoodPlist = null; return _this; } GameManager.prototype.onLoad = function () { this.fit(); this.init(); this.startGame(); }; GameManager.prototype.start = function () { }; //初始化数据 GameManager.prototype.init = function () { this.touchable = false; this.result = -1; this.foodAudioArray = []; this.foodPicArray = []; this.timeTween = null; this.needleTween = null; this.choice = 0; cc.fx.GameConfig.GM_INFO.stepTimeList = 0; cc.fx.GameConfig.GM_INFO.successList = []; cc.fx.GameConfig.GM_INFO.level = 0; this.voiceSpriteFrame = this.Plant.getChildByName("icon").getComponent(cc.Sprite).spriteFrame; this.btnReset(); }; //开始游戏 GameManager.prototype.startGame = function () { var _this = this; cc.tween(this.node.getChildByName("Begin")) .to(0.1, { opacity: 0 }) .to(0.5, { opacity: 255 }) .delay(1) .to(0.5, { opacity: 0 }) .call(function () { _this.createCustom(); }) .start(); }; //根据是否全面屏,做独立适配方面 GameManager.prototype.fit = function () { var jg = cc.fx.GameTool.setFit(); if (!jg) { this.Btn_Hear.y = -330; this.Btn_See.y = -460; this.Btn_Firewood.y = -600; } }; //创建关卡 GameManager.prototype.createCustom = function () { var _this = this; this.choice = 0; this.Plant.opacity = 0; this.timeNode.getChildByName("time").getComponent(cc.Sprite).fillRange = 0; this.timeNode.getChildByName("needle").angle = 0; if (cc.fx.GameConfig.GM_INFO.level >= cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.custom].custom.length) { setTimeout(function () { cc.director.loadScene("OverScene"); }, 1000); return; } this.customData = cc.fx.GameConfig.LEVEL_INFO[cc.fx.GameConfig.GM_INFO.custom].custom[cc.fx.GameConfig.GM_INFO.level]; var name = this.customData.item; //埋点数据设置 cc.fx.GameConfig.CLICK_SET("round", cc.fx.GameConfig.GM_INFO.level + 1); cc.fx.GameConfig.CLICK_SET("levelConfig", (cc.fx.GameConfig.GM_INFO.custom + 1)); cc.fx.GameConfig.CLICK_SET("item", name); cc.fx.GameConfig.CLICK_SET("roundType", this.customData.type); if (this.customData.type == 1) { this.Plant.getChildByName("name").getComponent(cc.Label).string = cc.fx.GameTool.getFoodName(name); name = "prop_" + name; this.Plant.getChildByName("icon").getComponent(cc.Sprite).spriteFrame = this.FoodPlist["_spriteFrames"][name]; this.now_Food = name; cc.tween(this.Plant) .to(0.2, { opacity: 255 }) .call(function () { _this.startTimer(); }) .start(); } else { this.Plant.getChildByName("name").getComponent(cc.Label).string = ""; this.Plant.getChildByName("icon").getComponent(cc.Sprite).spriteFrame = this.voiceSpriteFrame; var audioName = name + "_audio"; name = "audio" + name; this.now_Food = name; cc.fx.AudioManager._instance.playEffect(audioName, this.startTimer.bind(this)); cc.tween(this.Plant) .to(0.2, { opacity: 255 }) .call(function () { }) .start(); } //关卡+1 cc.fx.GameConfig.GM_INFO.level += 1; }; //开始转圈倒计时 GameManager.prototype.startTimer = function () { var _this = this; this.startTime = cc.fx.GameTool.getTime(); this.Btn_Hear.getChildByName("nomal").getComponent(cc.Button).interactable = true; this.Btn_New.getChildByName("nomal").getComponent(cc.Button).interactable = true; this.Btn_See.getChildByName("nomal").getComponent(cc.Button).interactable = true; this.Btn_Firewood.getComponent(cc.Button).interactable = true; // if(this.containsNanana(this.now_Food) == true){ // console.log("可以点火"); // } this.timeNode.getChildByName("time").getComponent(cc.Sprite).fillRange = 0; this.needleTween = cc.tween(this.timeNode.getChildByName("needle")) .to(5, { angle: -360 }) .start(); this.timeTween = cc.tween(this.timeNode.getChildByName("time").getComponent(cc.Sprite)) .to(5, { fillRange: 1 }) .call(function () { _this.Btn_Hear.getChildByName("nomal").getComponent(cc.Button).interactable = false; _this.Btn_New.getChildByName("nomal").getComponent(cc.Button).interactable = false; _this.Btn_See.getChildByName("nomal").getComponent(cc.Button).interactable = false; _this.Btn_Firewood.getComponent(cc.Button).interactable = false; _this.click_Choice(null, null); _this.timeTween = null; }) .start(); }; GameManager.prototype.containsNanana = function (str) { return /muchai/i.test(str); }; //新植物按钮 GameManager.prototype.click_Choice = function (customData, data) { //关掉计时器 处理逻辑之前,先行关掉按钮开关 this.Btn_Hear.getChildByName("nomal").getComponent(cc.Button).interactable = false; this.Btn_New.getChildByName("nomal").getComponent(cc.Button).interactable = false; this.Btn_See.getChildByName("nomal").getComponent(cc.Button).interactable = false; this.Btn_Firewood.getComponent(cc.Button).interactable = false; this.timeTween.stop(); this.timeTween = null; this.needleTween.stop(); this.needleTween = null; //判断是否正确,并把出现的物品存入数组 this.result = this.judgingResult(); if (data == "Btn_New") { if (this.result == -1) { this.result = 1; } else { this.result = -1; } } var tempNode = null; if (data != null) tempNode = this[data]; //设置按钮状态 this.setBtnState(tempNode, data); //获取反应时间 this.setTimeData(); //根据答题,设置上传数据 this.setData(data); //进行下一关 this.nextLevel(); }; //点火按钮 GameManager.prototype.click_Ignition = function () { var _this = this; cc.fx.GameConfig.CLICK_SET("ignite", true); this.Btn_Firewood.getComponent(cc.Button).interactable = false; if (this.containsNanana(this.now_Food) == true) { var igniteCount = cc.fx.GameConfig.GM_INFO.igniteCount + 1; cc.fx.GameConfig.GM_INFO_SET("igniteCount", igniteCount); cc.fx.GameConfig.CLICK_SET("igniteCount", igniteCount); this.Btn_Firewood.getChildByName("fireBg").active = true; this.Btn_Firewood.getChildByName("fire").active = true; setTimeout(function () { if (_this.Btn_Firewood) { _this.Btn_Firewood.getChildByName("fireBg").active = false; _this.Btn_Firewood.getChildByName("fire").active = false; } }, 1050); console.log("正确点火"); } else if (this.customData.flamable == 1) { console.log("错误点火"); // console.log("正确点火"); } }; //判断是否有过的结果 type只为new hear see 三选一 GameManager.prototype.judgingResult = function () { var result = -1; //先检查音频 var name = this.now_Food.substring(5, this.now_Food.length); if (this.foodAudioArray.length > 0) { for (var i = 0; i < this.foodAudioArray.length; i++) { if (name == this.foodAudioArray[i].substring(5, this.now_Food.length)) { result = 2; this.foodAudioArray.splice(i, 1); cc.fx.GameConfig.CLICK_SET("rightChoice", 2); console.log("听到过"); i = 10000; break; } } } //再检查图盘 if (this.foodPicArray.length > 0) { for (var i = 0; i < this.foodPicArray.length; i++) { if (name == this.foodPicArray[i].substring(5, this.now_Food.length)) { //如果图片里面有 result = 3; this.foodPicArray.splice(i, 1); console.log("看到过"); cc.fx.GameConfig.CLICK_SET("rightChoice", 3); i = 10000; break; } } } //把新生成的存放进数组里 if (this.now_Food.substring(0, 4) != "prop") { this.foodAudioArray.push(this.now_Food); } else { this.foodPicArray.push(this.now_Food); } if (result != 2 && result != 3) { console.log("没出险过"); cc.fx.GameConfig.CLICK_SET("rightChoice", 1); } return result; }; //计算反应时间 GameManager.prototype.setTimeData = function () { this.overTime = cc.fx.GameTool.getTime(); var time = this.overTime - this.startTime; //防止溢出 if (time < 0 || time > 5000) time = 5000; cc.fx.GameConfig.CLICK_SET("stepTime", time); cc.fx.GameConfig.GM_INFO.stepTimeList += time; }; //设置按钮状态 GameManager.prototype.setBtnState = function (node, data) { if (data == "Btn_New") this.choice = 1; else if (data == "Btn_Hear") this.choice = 2; else if (data == "Btn_See") this.choice = 3; if (data == null) { this.choice = 0; } if (this.choice != cc.fx.GameConfig.CLICK_DATA.rightChoice) { if (node) { cc.fx.AudioManager._instance.playEffect("err", null); node.getChildByName("err").active = true; node.getChildByName("correct").active = false; } } else { if (node) { cc.fx.AudioManager._instance.playEffect("yes", null); node.getChildByName("err").active = false; node.getChildByName("correct").active = true; } } if (node) node.getChildByName("nomal").active = false; this.Btn_Hear.getChildByName("nomal").getComponent(cc.Button).interactable = false; this.Btn_New.getChildByName("nomal").getComponent(cc.Button).interactable = false; this.Btn_See.getChildByName("nomal").getComponent(cc.Button).interactable = false; }; //下一轮 首先重置按钮状态 GameManager.prototype.nextLevel = function () { var _this = this; cc.tween(this.Plant) .delay(1) .call(function () { _this.btnReset(); }) .to(0.5, { opacity: 0 }) .call(function () { _this.createCustom(); }) .start(); }; GameManager.prototype.btnReset = function () { this.Btn_New.getChildByName("nomal").active = true; this.Btn_New.getChildByName("err").active = false; this.Btn_New.getChildByName("correct").active = false; this.Btn_Hear.getChildByName("nomal").active = true; this.Btn_Hear.getChildByName("err").active = false; this.Btn_Hear.getChildByName("correct").active = false; this.Btn_See.getChildByName("nomal").active = true; this.Btn_See.getChildByName("err").active = false; this.Btn_See.getChildByName("correct").active = false; this.Btn_Hear.getChildByName("nomal").getComponent(cc.Button).interactable = false; this.Btn_New.getChildByName("nomal").getComponent(cc.Button).interactable = false; this.Btn_See.getChildByName("nomal").getComponent(cc.Button).interactable = false; // this.Btn_Firewood.getComponent(cc.Button).interactable = false; }; //返回首页 GameManager.prototype.backScene = function () { cc.director.loadScene("LoadScene"); }; //下一关,或者重新开始,或者返回上一关,根据level决定 GameManager.prototype.reStart = function (type) { }; //获取时间戳 GameManager.prototype.getTime = function () { var timestamp = new Date().getTime(); return timestamp; }; //获胜 GameManager.prototype.passLevel = function () { }; //失败 GameManager.prototype.loseLevel = function (type) { }; //如果是倒计时 调用此方法 GameManager.prototype.startCountDownTime = function () { this.timeNode.getChildByName("time").getComponent(cc.Sprite).fillRange = 0; this.timeNode.getChildByName("needle").angle = 0; }; //上传每次操作数据 GameManager.prototype.setData = function (data) { console.log("进入上传埋点"); if (data == "Btn_New") this.choice = 1; else if (data == "Btn_Hear") this.choice = 2; else if (data == "Btn_See") this.choice = 3; else if (data == null) { this.choice = 0; cc.fx.GameConfig.CLICK_SET("stepTime", 5000); } var jg = false; if (this.choice == cc.fx.GameConfig.CLICK_DATA.rightChoice) { jg = true; cc.fx.GameConfig.GM_INFO.successList.push(jg); } cc.fx.GameConfig.CLICK_SET("choice", this.choice); cc.fx.GameConfig.CLICK_SET("success", jg); console.log("进入GameTool.setGameData", cc.fx.GameConfig.CLICK_DATA); cc.fx.GameTool.setGameData(); }; //上传排行榜数据 GameManager.prototype.gameOver = function (time) { cc.fx.GameTool.setRank(time); this.node.getChildByName("GameOver").active = true; this.node.getChildByName("GameOver").opacity = 0; cc.tween(this.node.getChildByName("GameOver")) .to(0.4, { opacity: 255 }) .delay(2) .to(0.4, { opacity: 50 }) .call(function () { cc.director.loadScene("OverScene"); }) .start(); }; GameManager.prototype.onEnable = function () { // cc.fx.Notifications.on("clickSun", this.clickSun, this); }; GameManager.prototype.onDisable = function () { // cc.fx.Notifications.off("clickSun", this.clickSun); }; GameManager.prototype.update = function (dt) { }; __decorate([ property(cc.Node) ], GameManager.prototype, "Btn_New", void 0); __decorate([ property(cc.Node) ], GameManager.prototype, "Btn_Hear", void 0); __decorate([ property(cc.Node) ], GameManager.prototype, "Btn_See", void 0); __decorate([ property(cc.Node) ], GameManager.prototype, "Btn_Firewood", void 0); __decorate([ property(cc.Node) ], GameManager.prototype, "Plant", void 0); __decorate([ property(cc.Node) ], GameManager.prototype, "timeNode", void 0); __decorate([ property(cc.SpriteAtlas) ], GameManager.prototype, "FoodPlist", void 0); GameManager = __decorate([ ccclass ], GameManager); return GameManager; }(cc.Component)); exports.default = GameManager; 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxHYW1lTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxTQUFTO0FBQ0gsSUFBQSxLQUFzQixFQUFFLENBQUMsVUFBVSxFQUFsQyxPQUFPLGFBQUEsRUFBRSxRQUFRLGNBQWlCLENBQUM7QUFFMUM7SUFBeUMsK0JBQVk7SUFBckQ7UUFBQSxxRUEyWkM7UUF4WkcsYUFBTyxHQUFZLElBQUksQ0FBQztRQUV4QixjQUFRLEdBQVksSUFBSSxDQUFDO1FBRXpCLGFBQU8sR0FBWSxJQUFJLENBQUM7UUFFeEIsa0JBQVksR0FBWSxJQUFJLENBQUM7UUFFN0IsV0FBSyxHQUFZLElBQUksQ0FBQztRQUd0QixjQUFRLEdBQVksSUFBSSxDQUFDO1FBR3pCLGVBQVMsR0FBbUIsSUFBSSxDQUFDOztJQTBZckMsQ0FBQztJQTNYRyw0QkFBTSxHQUFOO1FBQ0ksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1gsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCwyQkFBSyxHQUFMO0lBRUEsQ0FBQztJQUNELE9BQU87SUFDUCwwQkFBSSxHQUFKO1FBQ0ksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMs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Q0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDO2tEQUNRO0lBakJoQixXQUFXO1FBRC9CLE9BQU87T0FDYSxXQUFXLENBMlovQjtJQUFELGtCQUFDO0NBM1pELEFBMlpDLENBM1p3QyxFQUFFLENBQUMsU0FBUyxHQTJacEQ7a0JBM1pvQixXQUFXIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEF1ZGlvTWFuYWdlciBmcm9tIFwiLi9tb2R1bGUvTXVzaWMvQXVkaW9NYW5hZ2VyXCI7XHJcblxyXG4vLyDkuLvmuLjmiI/mjqfliLbnsbtcclxuY29uc3Qge2NjY2xhc3MsIHByb3BlcnR5fSA9IGNjLl9kZWNvcmF0b3I7XHJcbkBjY2NsYXNzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVNYW5hZ2VyIGV4dGVuZHMgY2MuQ29tcG9uZW50IHtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIEJ0bl9OZXc6IGNjLk5vZGUgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBCdG5fSGVhcjogY2MuTm9kZSA9IG51bGw7XHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIEJ0bl9TZWU6IGNjLk5vZGUgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBCdG5fRmlyZXdvb2Q6IGNjLk5vZGUgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBQbGFudDogY2MuTm9kZSA9IG51bGw7XHJcbiAgICBcclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgdGltZU5vZGU6IGNjLk5vZGUgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5TcHJpdGVBdGxhcylcclxuICAgIEZvb2RQbGlzdDogY2MuU3ByaXRlQXRsYXMgPSBudWxsO1xyXG5cclxuICAgIHZvaWNlU3ByaXRlRnJhbWU6IGNjLlNwcml0ZUZyYW1lOyAgICAgLy/mmK/lkKblj6/ngrnlh7tcclxuICAgIHRpbWVUd2VlbjogY2MuVHdlZW47XHJcbiAgICB0b3VjaGFibGU6IGJvb2xlYW47ICAgICAvL+aYr+WQpuWPr+eCueWHu1xyXG4gICAgY291bnRUaW1lOiBudW1iZXI7ICAgICAgLy/mr4/mrKHmuLjmiI/lgJLorqHml7ZcclxuICAgIHN0YXJ0VGltZTogbnVtYmVyOyAgICAgIC8v5ri45oiP5byA5aeL6K6h5pe2XHJcbiAgICBvdmVyVGltZTogbnVtYmVyOyAgICAgICAvL+a4uOaIj+e7k+adn+iuoeaXtlxyXG4gICAgbm93X0Zvb2Q6IHN0cmluZzsgICAgICAgLy/lvZPliY3lhbPljaHlkI3lrZfkv6Hmga9cclxuICAgIHJlc3VsdDogbnVtYmVyOyAgICAgICAgLy/lvZPliY3lhbPljaHlkI3lrZfkv6Hmga9cclxuICAgIGNob2ljZTogbnVtYmVyOyAgICAgICAgLy/lvZPliY3lhbPljaHpgInmi6nnrKzlh6DkuKrmjInpkq5cclxuICAgIGZvb2RQaWNBcnJheTogYW55OyAgICAgIC8v5a2Y5pS+5b2T5YmN5q+P5LiA5aSn5bGA5ri45oiP5omA5pyJ5qSN54mp5Zu+54mHXHJcbiAgICBmb29kQXVkaW9BcnJheTogYW55OyAgICAvL+WtmOaUvuW9k+WJjeavj+S4gOWkp+WxgOa4uOaIj+aJgOacieakjeeJqeWjsOmfs1xyXG4gICAgY3VzdG9tRGF0YTphbnk7ICAgICAgICAgLy/lrZjmlL7lvZPliY3phY3nva5cclxuICAgIG5lZWRsZVR3ZWVuOiBjYy5Ud2VlbjxjYy5TcHJpdGU+O1xyXG4gICAgb25Mb2FkICgpIHtcclxuICAgICAgICB0aGlzLmZpdCgpO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIHRoaXMuc3RhcnRHYW1lKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQgKCkge1xyXG5cclxuICAgIH1cclxuICAgIC8v5Yid5aeL5YyW5pWw5o2uXHJcbiAgICBpbml0KCl7XHJcbiAgICAgICAgdGhpcy50b3VjaGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlc3VsdCA9IC0xO1xyXG4gICAgICAgIHRoaXMuZm9vZEF1ZGlvQXJyYXkgPSBbXTtcclxuICAgICAgICB0aGlzLmZvb2RQaWNBcnJheSA9IFtdO1xyXG4gICAgICAgIHRoaXMudGltZVR3ZWVuID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5lZWRsZVR3ZWVuID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNob2ljZSA9IDA7XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLnN0ZXBUaW1lTGlzdCA9IDA7XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLnN1Y2Nlc3NMaXN0ID0gW107XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsID0gMDtcclxuICAgICAgICB0aGlzLnZvaWNlU3ByaXRlRnJhbWUgPSB0aGlzLlBsYW50LmdldENoaWxkQnlOYW1lKFwiaWNvblwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZTtcclxuICAgICAgICB0aGlzLmJ0blJlc2V0KCk7XHJcbiAgICB9XHJcbiAgICAvL+W8gOWni+a4uOaIj1xyXG4gICAgc3RhcnRHYW1lKCl7XHJcbiAgICAgICAgY2MudHdlZW4odGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmVnaW5cIikpXHJcbiAgICAgICAgLnRvKDAuMSx7b3BhY2l0eTowfSlcclxuICAgICAgICAudG8oMC41LHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgLmRlbGF5KDEpXHJcbiAgICAgICAgLnRvKDAuNSx7b3BhY2l0eTowfSlcclxuICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVDdXN0b20oKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5qC55o2u5piv5ZCm5YWo6Z2i5bGP77yM5YGa54us56uL6YCC6YWN5pa56Z2iXHJcbiAgICBmaXQoKXtcclxuICAgICAgICB2YXIgamcgPSBjYy5meC5HYW1lVG9vbC5zZXRGaXQoKTtcclxuICAgICAgICBpZighamcpe1xyXG4gICAgICAgICAgICB0aGlzLkJ0bl9IZWFyLnkgPSAtMzMwO1xyXG4gICAgICAgICAgICB0aGlzLkJ0bl9TZWUueSAgPSAtNDYwO1xyXG4gICAgICAgICAgICB0aGlzLkJ0bl9GaXJld29vZC55ID0gLTYwMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvL+WIm+W7uuWFs+WNoVxyXG4gICAgY3JlYXRlQ3VzdG9tKCl7XHJcbiAgICAgICAgdGhpcy5jaG9pY2UgPSAwO1xyXG4gICAgICAgIHRoaXMuUGxhbnQub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgdGhpcy50aW1lTm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpbWVcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuZmlsbFJhbmdlID0gMDtcclxuICAgICAgICB0aGlzLnRpbWVOb2RlLmdldENoaWxkQnlOYW1lKFwibmVlZGxlXCIpLmFuZ2xlID0gMDtcclxuICAgICAgICBpZihjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWwgPj0gY2MuZnguR2FtZUNvbmZpZy5MRVZFTF9JTkZPW2NjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5jdXN0b21dLmN1c3RvbS5sZW5ndGgpe1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIk92ZXJTY2VuZVwiKTtcclxuICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXN0b21EYXRhID0gY2MuZnguR2FtZUNvbmZpZy5MRVZFTF9JTkZPW2NjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5jdXN0b21dLmN1c3RvbVtjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWxdO1xyXG4gICAgICAgIGxldCBuYW1lID0gdGhpcy5jdXN0b21EYXRhLml0ZW07XHJcblxyXG4gICAgICAgIC8v5Z+L54K55pWw5o2u6K6+572uXHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJyb3VuZFwiLGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbCsxKTtcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX1NFVChcImxldmVsQ29uZmlnXCIsKGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5jdXN0b20rMSkpO1xyXG4gICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfU0VUKFwiaXRlbVwiLG5hbWUpO1xyXG4gICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfU0VUKFwicm91bmRUeXBlXCIsdGhpcy5jdXN0b21EYXRhLnR5cGUpO1xyXG5cclxuICAgICAgICBpZih0aGlzLmN1c3RvbURhdGEudHlwZSA9PSAxKXtcclxuICAgICAgICAgICAgdGhpcy5QbGFudC5nZXRDaGlsZEJ5TmFtZShcIm5hbWVcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBjYy5meC5HYW1lVG9vbC5nZXRGb29kTmFtZShuYW1lKTtcclxuICAgICAgICAgICAgbmFtZSA9IFwicHJvcF9cIituYW1lO1xyXG4gICAgICAgICAgICB0aGlzLlBsYW50LmdldENoaWxkQnlOYW1lKFwiaWNvblwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuRm9vZFBsaXN0W1wiX3Nwcml0ZUZyYW1lc1wiXVtuYW1lXTtcclxuICAgICAgICAgICAgdGhpcy5ub3dfRm9vZCA9IG5hbWU7XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuUGxhbnQpXHJcbiAgICAgICAgICAgIC50bygwLjIse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAgICAgLmNhbGwoKCk9PntcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lcigpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5QbGFudC5nZXRDaGlsZEJ5TmFtZShcIm5hbWVcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBcIlwiXHJcbiAgICAgICAgICAgIHRoaXMuUGxhbnQuZ2V0Q2hpbGRCeU5hbWUoXCJpY29uXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy52b2ljZVNwcml0ZUZyYW1lO1xyXG4gICAgICAgICAgICBsZXQgYXVkaW9OYW1lID0gbmFtZSArIFwiX2F1ZGlvXCI7XHJcbiAgICAgICAgICAgIG5hbWUgPSBcImF1ZGlvXCIrIG5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMubm93X0Zvb2QgPSBuYW1lO1xyXG4gICAgICAgICAgICBjYy5meC5BdWRpb01hbmFnZXIuX2luc3RhbmNlLnBsYXlFZmZlY3QoYXVkaW9OYW1lLHRoaXMuc3RhcnRUaW1lci5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgY2MudHdlZW4odGhpcy5QbGFudClcclxuICAgICAgICAgICAgLnRvKDAuMix7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgICAgICAuY2FsbCgoKT0+e1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/lhbPljaErMVxyXG4gICAgICAgIGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbCArPSAxO1xyXG5cclxuICAgIH1cclxuICAgIC8v5byA5aeL6L2s5ZyI5YCS6K6h5pe2XHJcbiAgICBzdGFydFRpbWVyKCl7XHJcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBjYy5meC5HYW1lVG9vbC5nZXRUaW1lKCk7XHJcbiAgICAgICAgdGhpcy5CdG5fSGVhci5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5CdG5fTmV3LmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkJ0bl9TZWUuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuQnRuX0ZpcmV3b29kLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IHRydWU7XHJcbiAgICAgICAgLy8gaWYodGhpcy5jb250YWluc05hbmFuYSh0aGlzLm5vd19Gb29kKSA9PSB0cnVlKXtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLlj6/ku6XngrnngatcIik7XHJcbiAgICAgICAgIFxyXG4gICAgICAgIC8vIH1cclxuICAgICAgICB0aGlzLnRpbWVOb2RlLmdldENoaWxkQnlOYW1lKFwidGltZVwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5maWxsUmFuZ2UgPSAwO1xyXG4gICAgICAgIHRoaXMubmVlZGxlVHdlZW4gPSBcclxuICAgICAgICBjYy50d2Vlbih0aGlzLnRpbWVOb2RlLmdldENoaWxkQnlOYW1lKFwibmVlZGxlXCIpKVxyXG4gICAgICAgIC50byg1LHthbmdsZTotMzYwfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICB0aGlzLnRpbWVUd2VlbiA9IFxyXG4gICAgICAgIGNjLnR3ZWVuKHRoaXMudGltZU5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aW1lXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpKVxyXG4gICAgICAgIC50byg1LHtmaWxsUmFuZ2U6MX0pXHJcbiAgICAgICAgLmNhbGwoKCk9PntcclxuICAgICAgICAgICAgdGhpcy5CdG5fSGVhci5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLkJ0bl9OZXcuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5CdG5fU2VlLmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuQnRuX0ZpcmV3b29kLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNsaWNrX0Nob2ljZShudWxsLG51bGwpO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVUd2VlbiA9IG51bGw7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb250YWluc05hbmFuYShzdHIpIHtcclxuICAgICAgICByZXR1cm4gL211Y2hhaS9pLnRlc3Qoc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+aWsOakjeeJqeaMiemSrlxyXG4gICAgY2xpY2tfQ2hvaWNlKGN1c3RvbURhdGEsZGF0YSl7XHJcbiAgICAgICAgLy/lhbPmjonorqHml7blmaggICDlpITnkIbpgLvovpHkuYvliY3vvIzlhYjooYzlhbPmjonmjInpkq7lvIDlhbNcclxuICAgICAgICB0aGlzLkJ0bl9IZWFyLmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5CdG5fTmV3LmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5CdG5fU2VlLmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5CdG5fRmlyZXdvb2QuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50aW1lVHdlZW4uc3RvcCgpO1xyXG4gICAgICAgIHRoaXMudGltZVR3ZWVuID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5lZWRsZVR3ZWVuLnN0b3AoKTtcclxuICAgICAgICB0aGlzLm5lZWRsZVR3ZWVuID0gbnVsbDtcclxuICAgICAgICAvL+WIpOaWreaYr+WQpuato+ehru+8jOW5tuaKiuWHuueOsOeahOeJqeWTgeWtmOWFpeaVsOe7hFxyXG4gICAgICAgIHRoaXMucmVzdWx0ID0gdGhpcy5qdWRnaW5nUmVzdWx0KCk7XHJcbiAgICAgICAgaWYoZGF0YSA9PSBcIkJ0bl9OZXdcIil7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucmVzdWx0ID09IC0xKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0ID0gMTsgXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdCA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBcclxuICAgICAgICB2YXIgdGVtcE5vZGUgPSBudWxsO1xyXG4gICAgICAgIGlmKGRhdGEgIT0gbnVsbCkgdGVtcE5vZGUgPSB0aGlzW2RhdGFdXHJcbiAgICAgICAgLy/orr7nva7mjInpkq7nirbmgIFcclxuICAgICAgICB0aGlzLnNldEJ0blN0YXRlKHRlbXBOb2RlLGRhdGEpO1xyXG4gICAgICAgIC8v6I635Y+W5Y+N5bqU5pe26Ze0XHJcbiAgICAgICAgdGhpcy5zZXRUaW1lRGF0YSgpO1xyXG4gICAgICAgIC8v5qC55o2u562U6aKY77yM6K6+572u5LiK5Lyg5pWw5o2uXHJcbiAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpO1xyXG4gICAgICAgIC8v6L+b6KGM5LiL5LiA5YWzXHJcbiAgICAgICAgdGhpcy5uZXh0TGV2ZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+eCueeBq+aMiemSrlxyXG4gICAgY2xpY2tfSWduaXRpb24oKXtcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX1NFVChcImlnbml0ZVwiLHRydWUpO1xyXG4gICAgICAgIHRoaXMuQnRuX0ZpcmV3b29kLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmKHRoaXMuY29udGFpbnNOYW5hbmEodGhpcy5ub3dfRm9vZCkgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgIGxldCBpZ25pdGVDb3VudCA9IGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5pZ25pdGVDb3VudCArIDE7XHJcbiAgICAgICAgICAgIGNjLmZ4LkdhbWVDb25maWcuR01fSU5GT19TRVQoXCJpZ25pdGVDb3VudFwiLGlnbml0ZUNvdW50KTtcclxuICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJpZ25pdGVDb3VudFwiLGlnbml0ZUNvdW50KTtcclxuICAgICAgICAgICAgdGhpcy5CdG5fRmlyZXdvb2QuZ2V0Q2hpbGRCeU5hbWUoXCJmaXJlQmdcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5CdG5fRmlyZXdvb2QuZ2V0Q2hpbGRCeU5hbWUoXCJmaXJlXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5CdG5fRmlyZXdvb2Qpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuQnRuX0ZpcmV3b29kLmdldENoaWxkQnlOYW1lKFwiZmlyZUJnXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuQnRuX0ZpcmV3b29kLmdldENoaWxkQnlOYW1lKFwiZmlyZVwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgMTA1MCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5q2j56Gu54K554GrXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHRoaXMuY3VzdG9tRGF0YS5mbGFtYWJsZSA9PSAxKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLplJnor6/ngrnngatcIik7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5q2j56Gu54K554GrXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL+WIpOaWreaYr+WQpuaciei/h+eahOe7k+aenCB0eXBl5Y+q5Li6bmV3IGhlYXIgc2VlIOS4iemAieS4gCBcclxuICAgIGp1ZGdpbmdSZXN1bHQoKXtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gLTE7XHJcbiAgICAgICAgLy/lhYjmo4Dmn6Xpn7PpopFcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMubm93X0Zvb2Quc3Vic3RyaW5nKDUsdGhpcy5ub3dfRm9vZC5sZW5ndGgpO1xyXG4gICAgICAgIGlmKHRoaXMuZm9vZEF1ZGlvQXJyYXkubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPHRoaXMuZm9vZEF1ZGlvQXJyYXkubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgICAgICBpZihuYW1lID09IHRoaXMuZm9vZEF1ZGlvQXJyYXlbaV0uc3Vic3RyaW5nKDUsdGhpcy5ub3dfRm9vZC5sZW5ndGgpKXtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9vZEF1ZGlvQXJyYXkuc3BsaWNlKGksMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJyaWdodENob2ljZVwiLDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5ZCs5Yiw6L+HXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGkgPSAxMDAwMDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL+WGjeajgOafpeWbvuebmFxyXG4gICAgICAgIGlmKHRoaXMuZm9vZFBpY0FycmF5Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICBmb3IobGV0IGk9MDsgaTx0aGlzLmZvb2RQaWNBcnJheS5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgICAgIGlmKG5hbWUgPT0gdGhpcy5mb29kUGljQXJyYXlbaV0uc3Vic3RyaW5nKDUsdGhpcy5ub3dfRm9vZC5sZW5ndGgpKXtcclxuICAgICAgICAgICAgICAgICAgICAvL+WmguaenOWbvueJh+mHjOmdouaciVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb29kUGljQXJyYXkuc3BsaWNlKGksMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLnnIvliLDov4dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJyaWdodENob2ljZVwiLDMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGkgPSAxMDAwMDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy/miormlrDnlJ/miJDnmoTlrZjmlL7ov5vmlbDnu4Tph4xcclxuICAgICAgICBpZih0aGlzLm5vd19Gb29kLnN1YnN0cmluZygwLDQpICE9IFwicHJvcFwiKXtcclxuICAgICAgICAgICAgdGhpcy5mb29kQXVkaW9BcnJheS5wdXNoKHRoaXMubm93X0Zvb2QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9vZFBpY0FycmF5LnB1c2godGhpcy5ub3dfRm9vZCk7ICBcclxuICAgICAgICB9XHJcbiAgICAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKHJlc3VsdCAhPSAyICYmIHJlc3VsdCAhPSAzKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLmsqHlh7rpmanov4dcIik7XHJcbiAgICAgICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfU0VUKFwicmlnaHRDaG9pY2VcIiwxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAvL+iuoeeul+WPjeW6lOaXtumXtFxyXG4gICAgc2V0VGltZURhdGEoKXtcclxuICAgICAgICB0aGlzLm92ZXJUaW1lID0gY2MuZnguR2FtZVRvb2wuZ2V0VGltZSgpO1xyXG4gICAgICAgIGxldCB0aW1lID0gdGhpcy5vdmVyVGltZSAtIHRoaXMuc3RhcnRUaW1lO1xyXG4gICAgICAgIC8v6Ziy5q2i5rqi5Ye6XHJcbiAgICAgICAgaWYodGltZSA8IDAgfHwgdGltZSA+IDUwMDApIHRpbWUgPSA1MDAwO1xyXG4gICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfU0VUKFwic3RlcFRpbWVcIix0aW1lKTtcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8uc3RlcFRpbWVMaXN0ICs9IHRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy/orr7nva7mjInpkq7nirbmgIFcclxuICAgIHNldEJ0blN0YXRlKG5vZGUsZGF0YSl7XHJcbiAgICAgICAgaWYoZGF0YSA9PSBcIkJ0bl9OZXdcIikgdGhpcy5jaG9pY2UgPSAxO1xyXG4gICAgICAgIGVsc2UgaWYoZGF0YSA9PSBcIkJ0bl9IZWFyXCIpIHRoaXMuY2hvaWNlID0gMjtcclxuICAgICAgICBlbHNlIGlmKGRhdGEgPT0gXCJCdG5fU2VlXCIpIHRoaXMuY2hvaWNlID0gMztcclxuXHJcbiAgICAgICAgaWYoZGF0YSA9PSBudWxsKXtcclxuICAgICAgICAgICAgdGhpcy5jaG9pY2UgPSAwOyAgXHJcbiAgICAgICAgfSBcclxuXHJcbiAgICAgICAgaWYodGhpcy5jaG9pY2UgIT0gY2MuZnguR2FtZUNvbmZpZy5DTElDS19EQVRBLnJpZ2h0Q2hvaWNlKXtcclxuICAgICAgICAgICAgaWYobm9kZSl7XHJcbiAgICAgICAgICAgICAgICBjYy5meC5BdWRpb01hbmFnZXIuX2luc3RhbmNlLnBsYXlFZmZlY3QoXCJlcnJcIixudWxsKTtcclxuICAgICAgICAgICAgICAgIG5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJlcnJcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIG5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJjb3JyZWN0XCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gXHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgaWYobm9kZSl7XHJcbiAgICAgICAgICAgICAgICBjYy5meC5BdWRpb01hbmFnZXIuX2luc3RhbmNlLnBsYXlFZmZlY3QoXCJ5ZXNcIixudWxsKTtcclxuICAgICAgICAgICAgICAgIG5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJlcnJcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBub2RlLmdldENoaWxkQnlOYW1lKFwiY29ycmVjdFwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gIFxyXG4gICAgICAgIGlmKG5vZGUpIG5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgdGhpcy5CdG5fSGVhci5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuQnRuX05ldy5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuQnRuX1NlZS5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5LiL5LiA6L2uIOmmluWFiOmHjee9ruaMiemSrueKtuaAgVxyXG4gICAgbmV4dExldmVsKCl7XHJcbiAgICAgICAgY2MudHdlZW4odGhpcy5QbGFudClcclxuICAgICAgICAuZGVsYXkoMSlcclxuICAgICAgICAuY2FsbCgoKT0+e1xyXG4gICAgICAgICAgICB0aGlzLmJ0blJlc2V0KCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAudG8oMC41LHtvcGFjaXR5OjB9KVxyXG4gICAgICAgIC5jYWxsKCgpPT57XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ3VzdG9tKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBidG5SZXNldCgpe1xyXG4gICAgICAgIHRoaXMuQnRuX05ldy5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5CdG5fTmV3LmdldENoaWxkQnlOYW1lKFwiZXJyXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuQnRuX05ldy5nZXRDaGlsZEJ5TmFtZShcImNvcnJlY3RcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5CdG5fSGVhci5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5CdG5fSGVhci5nZXRDaGlsZEJ5TmFtZShcImVyclwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9IZWFyLmdldENoaWxkQnlOYW1lKFwiY29ycmVjdFwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9TZWUuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuQnRuX1NlZS5nZXRDaGlsZEJ5TmFtZShcImVyclwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9TZWUuZ2V0Q2hpbGRCeU5hbWUoXCJjb3JyZWN0XCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuQnRuX0hlYXIuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9OZXcuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9TZWUuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICAvLyB0aGlzLkJ0bl9GaXJld29vZC5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvL+i/lOWbnummlumhtVxyXG4gICAgYmFja1NjZW5lKCl7XHJcbiAgICAgICAgY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiTG9hZFNjZW5lXCIpO1xyXG4gICAgfVxyXG4gICAgLy/kuIvkuIDlhbPvvIzmiJbogIXph43mlrDlvIDlp4vvvIzmiJbogIXov5Tlm57kuIrkuIDlhbPvvIzmoLnmja5sZXZlbOWGs+WumlxyXG4gICAgcmVTdGFydCh0eXBlKXtcclxuXHJcbiAgICB9XHJcbiAgICAvL+iOt+WPluaXtumXtOaIs1xyXG4gICAgZ2V0VGltZSgpe1xyXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIHJldHVybiB0aW1lc3RhbXA7XHJcbiAgICB9XHJcbiAgICAvL+iOt+iDnFxyXG4gICAgcGFzc0xldmVsKCl7XHJcblxyXG4gICAgfVxyXG4gICAgLy/lpLHotKVcclxuICAgIGxvc2VMZXZlbCh0eXBlKXtcclxuICBcclxuICAgIH1cclxuXHJcbiAgICAvL+WmguaenOaYr+WAkuiuoeaXtiDosIPnlKjmraTmlrnms5VcclxuICAgIHN0YXJ0Q291bnREb3duVGltZSAoKSB7XHJcbiAgICAgICAgdGhpcy50aW1lTm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpbWVcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuZmlsbFJhbmdlID0gMDtcclxuICAgICAgICB0aGlzLnRpbWVOb2RlLmdldENoaWxkQnlOYW1lKFwibmVlZGxlXCIpLmFuZ2xlID0gMDtcclxuICAgIH1cclxuICAgIC8v5LiK5Lyg5q+P5qyh5pON5L2c5pWw5o2uXHJcbiAgICBzZXREYXRhKGRhdGEpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi6L+b5YWl5LiK5Lyg5Z+L54K5XCIpO1xyXG4gICAgICAgIGlmKGRhdGEgPT0gXCJCdG5fTmV3XCIpIHRoaXMuY2hvaWNlID0gMTtcclxuICAgICAgICBlbHNlIGlmKGRhdGEgPT0gXCJCdG5fSGVhclwiKSB0aGlzLmNob2ljZSA9IDI7XHJcbiAgICAgICAgZWxzZSBpZihkYXRhID09IFwiQnRuX1NlZVwiKSB0aGlzLmNob2ljZSA9IDM7XHJcbiAgICAgICAgZWxzZSBpZihkYXRhID09IG51bGwpe1xyXG4gICAgICAgICAgICB0aGlzLmNob2ljZSA9IDA7XHJcbiAgICAgICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfU0VUKFwic3RlcFRpbWVcIiw1MDAwKTtcclxuICAgICAgICB9IFxyXG4gICAgICAgIHZhciBqZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmKHRoaXMuY2hvaWNlID09IGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfREFUQS5yaWdodENob2ljZSl7XHJcbiAgICAgICAgICAgIGpnID0gdHJ1ZTtcclxuICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLnN1Y2Nlc3NMaXN0LnB1c2goamcpO1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJjaG9pY2VcIix0aGlzLmNob2ljZSk7XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJzdWNjZXNzXCIsamcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi6L+b5YWlR2FtZVRvb2wuc2V0R2FtZURhdGFcIixjYy5meC5HYW1lQ29uZmlnLkNMSUNLX0RBVEEpO1xyXG4gICAgICAgIGNjLmZ4LkdhbWVUb29sLnNldEdhbWVEYXRhKCk7XHJcbiAgICB9XHJcbiAgICAvL+S4iuS8oOaOkuihjOamnOaVsOaNrlxyXG4gICAgZ2FtZU92ZXIodGltZSl7XHJcbiAgICAgICAgIGNjLmZ4LkdhbWVUb29sLnNldFJhbmsodGltZSk7XHJcbiAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiR2FtZU92ZXJcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJHYW1lT3ZlclwiKS5vcGFjaXR5ID0gMDtcclxuICAgICAgICBjYy50d2Vlbih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJHYW1lT3ZlclwiKSlcclxuICAgICAgICAudG8oMC40LHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgLmRlbGF5KDIpXHJcbiAgICAgICAgLnRvKDAuNCx7b3BhY2l0eTo1MH0pXHJcbiAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIk92ZXJTY2VuZVwiKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpXHJcbiAgICB9XHJcblxyXG4gICAgb25FbmFibGUgKCkge1xyXG4gICAgICAgIC8vIGNjLmZ4Lk5vdGlmaWNhdGlvbnMub24oXCJjbGlja1N1blwiLCB0aGlzLmNsaWNrU3VuLCB0aGlzKTtcclxuICAgIH1cclxuICAgIG9uRGlzYWJsZSAoKSB7XHJcbiAgICAgICAgLy8gY2MuZnguTm90aWZpY2F0aW9ucy5vZmYoXCJjbGlja1N1blwiLCB0aGlzLmNsaWNrU3VuKTtcclxuICAgIH1cclxuICAgIHVwZGF0ZSAoZHQpIHtcclxuICAgIH1cclxufVxyXG4iXX0=