ShenNong_Simple/temp/quick-scripts/dst/assets/Script/GameManager.js
2024-10-30 15:28:42 +08:00

396 lines
50 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(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_Old = 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.setMap = 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_Old.y = -450;
this.Btn_New.y = -300;
}
};
//创建关卡
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);
cc.tween(this.Plant)
.to(0.2, { opacity: 255 })
.call(function () {
_this.startTimer();
})
.start();
}
//关卡+1
cc.fx.GameConfig.GM_INFO.level += 1;
};
//开始转圈倒计时
GameManager.prototype.startTimer = function () {
var _this = this;
this.startTime = cc.fx.GameTool.getTime();
this.Btn_Old.getChildByName("nomal").getComponent(cc.Button).interactable = true;
this.Btn_New.getChildByName("nomal").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(8, { angle: -360 })
.start();
this.timeTween =
cc.tween(this.timeNode.getChildByName("time").getComponent(cc.Sprite))
.to(8, { fillRange: 1 })
.call(function () {
_this.Btn_Old.getChildByName("nomal").getComponent(cc.Button).interactable = false;
_this.Btn_New.getChildByName("nomal").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_Old.getChildByName("nomal").getComponent(cc.Button).interactable = false;
this.Btn_New.getChildByName("nomal").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 () {
};
//判断是否有过的结果 type只为new hear see 三选一
GameManager.prototype.judgingResult = function () {
var result = -1;
var name = this.now_Food.substring(5, this.now_Food.length);
//再检查图盘
if (this.foodPicArray.length > 0) {
for (var i = 0; i < this.foodPicArray.length; i++) {
console.log(name, this.foodPicArray[i].substring(5, this.foodPicArray[i].length));
if (name == this.foodPicArray[i].substring(5, this.foodPicArray[i].length)) {
//如果图片里面有
result = 2;
console.log("出现过", name);
cc.fx.GameConfig.CLICK_SET("rightChoice", 2);
i = 10000;
break;
}
}
}
if (result != 2) {
console.log("没出险过", name);
cc.fx.GameConfig.CLICK_SET("rightChoice", 1);
//把新生成的存放进数组里
this.foodPicArray.push(this.now_Food);
}
return result;
};
//计算反应时间
GameManager.prototype.setTimeData = function () {
this.overTime = cc.fx.GameTool.getTime();
var time = this.overTime - this.startTime;
//防止溢出
if (time < 0 || time > 8000)
time = 8000;
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_Old")
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_Old.getChildByName("nomal").getComponent(cc.Button).interactable = false;
this.Btn_New.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_Old.getChildByName("nomal").active = true;
this.Btn_Old.getChildByName("err").active = false;
this.Btn_Old.getChildByName("correct").active = false;
this.Btn_Old.getChildByName("nomal").getComponent(cc.Button).interactable = false;
this.Btn_New.getChildByName("nomal").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_Old")
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_Old", 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxHYW1lTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxTQUFTO0FBQ0gsSUFBQSxLQUFzQixFQUFFLENBQUMsVUFBVSxFQUFsQyxPQUFPLGFBQUEsRUFBRSxRQUFRLGNBQWlCLENBQUM7QUFFMUM7SUFBeUMsK0JBQVk7SUFBckQ7UUFBQSxxRUFvWEM7UUFqWEcsYUFBTyxHQUFZLElBQUksQ0FBQztRQUV4QixhQUFPLEdBQVksSUFBSSxDQUFDO1FBSXhCLFdBQUssR0FBWSxJQUFJLENBQUM7UUFHdEIsY0FBUSxHQUFZLElBQUksQ0FBQztRQUd6QixlQUFTLEdBQW1CLElBQUksQ0FBQzs7SUFxV3JDLENBQUM7SUF0VkcsNEJBQU0sR0FBTjtRQUNJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNYLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsMkJBQUssR0FBTDtJQUVBLENBQUM7SUFFRCxNQUFNO0lBQ04sNEJBQU0sR0FBTjtJQUVBLENBQUM7SUFFRCxPQUFPO0lBQ1AsMEJBQUksR0FBSjtRQUNJLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDaEIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxDQUFDLENB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QkFwWG9CLFdBQVciLCJmaWxlIjoiIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQXVkaW9NYW5hZ2VyIGZyb20gXCIuL21vZHVsZS9NdXNpYy9BdWRpb01hbmFnZXJcIjtcclxuXHJcbi8vIOS4u+a4uOaIj+aOp+WItuexu1xyXG5jb25zdCB7Y2NjbGFzcywgcHJvcGVydHl9ID0gY2MuX2RlY29yYXRvcjtcclxuQGNjY2xhc3NcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FtZU1hbmFnZXIgZXh0ZW5kcyBjYy5Db21wb25lbnQge1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgQnRuX05ldzogY2MuTm9kZSA9IG51bGw7XHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIEJ0bl9PbGQ6IGNjLk5vZGUgPSBudWxsO1xyXG5cclxuXHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIFBsYW50OiBjYy5Ob2RlID0gbnVsbDtcclxuICAgIFxyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICB0aW1lTm9kZTogY2MuTm9kZSA9IG51bGw7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLlNwcml0ZUF0bGFzKVxyXG4gICAgRm9vZFBsaXN0OiBjYy5TcHJpdGVBdGxhcyA9IG51bGw7XHJcblxyXG4gICAgdm9pY2VTcHJpdGVGcmFtZTogY2MuU3ByaXRlRnJhbWU7ICAgICAvL+aYr+WQpuWPr+eCueWHu1xyXG4gICAgdGltZVR3ZWVuOiBjYy5Ud2VlbjtcclxuICAgIHRvdWNoYWJsZTogYm9vbGVhbjsgICAgIC8v5piv5ZCm5Y+v54K55Ye7XHJcbiAgICBjb3VudFRpbWU6IG51bWJlcjsgICAgICAvL+avj+asoea4uOaIj+WAkuiuoeaXtlxyXG4gICAgc3RhcnRUaW1lOiBudW1iZXI7ICAgICAgLy/muLjmiI/lvIDlp4vorqHml7ZcclxuICAgIG92ZXJUaW1lOiBudW1iZXI7ICAgICAgIC8v5ri45oiP57uT5p2f6K6h5pe2XHJcbiAgICBub3dfRm9vZDogc3RyaW5nOyAgICAgICAvL+W9k+WJjeWFs+WNoeWQjeWtl+S/oeaBr1xyXG4gICAgcmVzdWx0OiBudW1iZXI7ICAgICAgICAvL+W9k+WJjeWFs+WNoeWQjeWtl+S/oeaBr1xyXG4gICAgY2hvaWNlOiBudW1iZXI7ICAgICAgICAvL+W9k+WJjeWFs+WNoemAieaLqeesrOWHoOS4quaMiemSrlxyXG4gICAgZm9vZFBpY0FycmF5OiBhbnk7ICAgICAgLy/lrZjmlL7lvZPliY3mr4/kuIDlpKflsYDmuLjmiI/miYDmnInmpI3nianlm77niYdcclxuICAgIGZvb2RBdWRpb0FycmF5OiBhbnk7ICAgIC8v5a2Y5pS+5b2T5YmN5q+P5LiA5aSn5bGA5ri45oiP5omA5pyJ5qSN54mp5aOw6Z+zXHJcbiAgICBjdXN0b21EYXRhOmFueTsgICAgICAgICAvL+WtmOaUvuW9k+WJjemFjee9rlxyXG4gICAgbmVlZGxlVHdlZW46IGNjLlR3ZWVuPGNjLlNwcml0ZT47XHJcbiAgICBvbkxvYWQgKCkge1xyXG4gICAgICAgIHRoaXMuZml0KCk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgdGhpcy5zdGFydEdhbWUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCAoKSB7XHJcblxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvL+WkhOeQhuWcsOWbvlxyXG4gICAgc2V0TWFwKCl7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8v5Yid5aeL5YyW5pWw5o2uXHJcbiAgICBpbml0KCl7XHJcbiAgICAgICAgdGhpcy50b3VjaGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlc3VsdCA9IC0xO1xyXG4gICAgICAgIHRoaXMuZm9vZEF1ZGlvQXJyYXkgPSBbXTtcclxuICAgICAgICB0aGlzLmZvb2RQaWNBcnJheSA9IFtdO1xyXG4gICAgICAgIHRoaXMudGltZVR3ZWVuID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5lZWRsZVR3ZWVuID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNob2ljZSA9IDA7XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLnN0ZXBUaW1lTGlzdCA9IDA7XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLnN1Y2Nlc3NMaXN0ID0gW107XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsID0gMDtcclxuICAgICAgICB0aGlzLnZvaWNlU3ByaXRlRnJhbWUgPSB0aGlzLlBsYW50LmdldENoaWxkQnlOYW1lKFwiaWNvblwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZTtcclxuICAgICAgICB0aGlzLmJ0blJlc2V0KCk7XHJcbiAgICB9XHJcbiAgICAvL+W8gOWni+a4uOaIj1xyXG4gICAgc3RhcnRHYW1lKCl7XHJcbiAgICAgICAgY2MudHdlZW4odGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmVnaW5cIikpXHJcbiAgICAgICAgLnRvKDAuMSx7b3BhY2l0eTowfSlcclxuICAgICAgICAudG8oMC41LHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgLmRlbGF5KDEpXHJcbiAgICAgICAgLnRvKDAuNSx7b3BhY2l0eTowfSlcclxuICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVDdXN0b20oKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5qC55o2u5piv5ZCm5YWo6Z2i5bGP77yM5YGa54us56uL6YCC6YWN5pa56Z2iXHJcbiAgICBmaXQoKXtcclxuICAgICAgICB2YXIgamcgPSBjYy5meC5HYW1lVG9vbC5zZXRGaXQoKTtcclxuICAgICAgICBpZighamcpe1xyXG4gICAgICAgICAgICB0aGlzLkJ0bl9PbGQueSA9IC00NTA7XHJcbiAgICAgICAgICAgIHRoaXMuQnRuX05ldy55ID0gLTMwMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvL+WIm+W7uuWFs+WNoVxyXG4gICAgY3JlYXRlQ3VzdG9tKCl7XHJcbiAgICAgICAgdGhpcy5jaG9pY2UgPSAwO1xyXG4gICAgICAgIHRoaXMuUGxhbnQub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgdGhpcy50aW1lTm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpbWVcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuZmlsbFJhbmdlID0gMDtcclxuICAgICAgICB0aGlzLnRpbWVOb2RlLmdldENoaWxkQnlOYW1lKFwibmVlZGxlXCIpLmFuZ2xlID0gMDtcclxuICAgICAgICBpZihjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWwgPj0gY2MuZnguR2FtZUNvbmZpZy5MRVZFTF9JTkZPW2NjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5jdXN0b21dLmN1c3RvbS5sZW5ndGgpe1xyXG5cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJPdmVyU2NlbmVcIik7XHJcbiAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY3VzdG9tRGF0YSA9IGNjLmZ4LkdhbWVDb25maWcuTEVWRUxfSU5GT1tjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8uY3VzdG9tXS5jdXN0b21bY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsXTtcclxuXHJcbiAgICAgICAgbGV0IG5hbWUgPSB0aGlzLmN1c3RvbURhdGEuaXRlbTtcclxuXHJcbiAgICAgICAgLy/ln4vngrnmlbDmja7orr7nva5cclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX1NFVChcInJvdW5kXCIsY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsKzEpO1xyXG4gICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfU0VUKFwibGV2ZWxDb25maWdcIiwoY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmN1c3RvbSsxKSk7XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJpdGVtXCIsbmFtZSk7XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJyb3VuZFR5cGVcIix0aGlzLmN1c3RvbURhdGEudHlwZSk7XHJcblxyXG4gICAgICAgIGlmKHRoaXMuY3VzdG9tRGF0YS50eXBlID09IDEpe1xyXG4gICAgICAgICAgICB0aGlzLlBsYW50LmdldENoaWxkQnlOYW1lKFwibmFtZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IGNjLmZ4LkdhbWVUb29sLmdldEZvb2ROYW1lKG5hbWUpO1xyXG4gICAgICAgICAgICBuYW1lID0gXCJwcm9wX1wiK25hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuUGxhbnQuZ2V0Q2hpbGRCeU5hbWUoXCJpY29uXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5Gb29kUGxpc3RbXCJfc3ByaXRlRnJhbWVzXCJdW25hbWVdO1xyXG4gICAgICAgICAgICB0aGlzLm5vd19Gb29kID0gbmFtZTtcclxuICAgICAgICAgICAgY2MudHdlZW4odGhpcy5QbGFudClcclxuICAgICAgICAgICAgLnRvKDAuMix7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgICAgICAuY2FsbCgoKT0+e1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFRpbWVyKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICB0aGlzLlBsYW50LmdldENoaWxkQnlOYW1lKFwibmFtZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFwiXCJcclxuICAgICAgICAgICAgdGhpcy5QbGFudC5nZXRDaGlsZEJ5TmFtZShcImljb25cIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLnZvaWNlU3ByaXRlRnJhbWU7XHJcbiAgICAgICAgICAgIGxldCBhdWRpb05hbWUgPSBuYW1lICsgXCJfYXVkaW9cIjtcclxuICAgICAgICAgICAgbmFtZSA9IFwiYXVkaW9cIisgbmFtZTtcclxuICAgICAgICAgICAgdGhpcy5ub3dfRm9vZCA9IG5hbWU7XHJcbiAgICAgICAgICAgIGNjLmZ4LkF1ZGlvTWFuYWdlci5faW5zdGFuY2UucGxheUVmZmVjdChhdWRpb05hbWUpO1xyXG4gICAgICAgICAgICBjYy50d2Vlbih0aGlzLlBsYW50KVxyXG4gICAgICAgICAgICAudG8oMC4yLHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgICAgIC5jYWxsKCgpPT57XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VGltZXIoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v5YWz5Y2hKzFcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWwgKz0gMTtcclxuXHJcbiAgICB9XHJcbiAgICAvL+W8gOWni+i9rOWciOWAkuiuoeaXtlxyXG4gICAgc3RhcnRUaW1lcigpe1xyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gY2MuZnguR2FtZVRvb2wuZ2V0VGltZSgpO1xyXG4gICAgICAgIHRoaXMuQnRuX09sZC5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5CdG5fTmV3LmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gaWYodGhpcy5jb250YWluc05hbmFuYSh0aGlzLm5vd19Gb29kKSA9PSB0cnVlKXtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLlj6/ku6XngrnngatcIik7XHJcbiAgICAgICAgIFxyXG4gICAgICAgIC8vIH1cclxuICAgICAgICB0aGlzLnRpbWVOb2RlLmdldENoaWxkQnlOYW1lKFwidGltZVwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5maWxsUmFuZ2UgPSAwO1xyXG4gICAgICAgIHRoaXMubmVlZGxlVHdlZW4gPSBcclxuICAgICAgICBjYy50d2Vlbih0aGlzLnRpbWVOb2RlLmdldENoaWxkQnlOYW1lKFwibmVlZGxlXCIpKVxyXG4gICAgICAgIC50byg4LHthbmdsZTotMzYwfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICB0aGlzLnRpbWVUd2VlbiA9IFxyXG4gICAgICAgIGNjLnR3ZWVuKHRoaXMudGltZU5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aW1lXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpKVxyXG4gICAgICAgIC50byg4LHtmaWxsUmFuZ2U6MX0pXHJcbiAgICAgICAgLmNhbGwoKCk9PntcclxuICAgICAgICAgICAgdGhpcy5CdG5fT2xkLmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuQnRuX05ldy5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmdldENvbXBvbmVudChjYy5CdXR0b24pLmludGVyYWN0YWJsZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jbGlja19DaG9pY2UobnVsbCxudWxsKTtcclxuICAgICAgICAgICAgdGhpcy50aW1lVHdlZW4gPSBudWxsO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29udGFpbnNOYW5hbmEoc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuIC9tdWNoYWkvaS50ZXN0KHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLy/mlrDmpI3nianmjInpkq5cclxuICAgIGNsaWNrX0Nob2ljZShjdXN0b21EYXRhLGRhdGEpe1xyXG4gICAgICAgIC8v5YWz5o6J6K6h5pe25ZmoICAg5aSE55CG6YC76L6R5LmL5YmN77yM5YWI6KGM5YWz5o6J5oyJ6ZKu5byA5YWzXHJcbiAgICAgICAgdGhpcy5CdG5fT2xkLmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5CdG5fTmV3LmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuZ2V0Q29tcG9uZW50KGNjLkJ1dHRvbikuaW50ZXJhY3RhYmxlID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudGltZVR3ZWVuLnN0b3AoKTtcclxuICAgICAgICB0aGlzLnRpbWVUd2VlbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5uZWVkbGVUd2Vlbi5zdG9wKCk7XHJcbiAgICAgICAgdGhpcy5uZWVkbGVUd2VlbiA9IG51bGw7XHJcbiAgICAgICAgLy/liKTmlq3mmK/lkKbmraPnoa7vvIzlubbmiorlh7rnjrDnmoTnianlk4HlrZjlhaXmlbDnu4RcclxuICAgICAgICB0aGlzLnJlc3VsdCA9IHRoaXMuanVkZ2luZ1Jlc3VsdCgpO1xyXG4gICAgICAgIGlmKGRhdGEgPT0gXCJCdG5fTmV3XCIpe1xyXG4gICAgICAgICAgICBpZih0aGlzLnJlc3VsdCA9PSAtMSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdCA9IDE7IFxyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSAtMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gXHJcbiAgICAgICAgdmFyIHRlbXBOb2RlID0gbnVsbDtcclxuICAgICAgICBpZihkYXRhICE9IG51bGwpIHRlbXBOb2RlID0gdGhpc1tkYXRhXVxyXG4gICAgICAgIC8v6K6+572u5oyJ6ZKu54q25oCBXHJcbiAgICAgICAgdGhpcy5zZXRCdG5TdGF0ZSh0ZW1wTm9kZSxkYXRhKTtcclxuICAgICAgICAvL+iOt+WPluWPjeW6lOaXtumXtFxyXG4gICAgICAgIHRoaXMuc2V0VGltZURhdGEoKTtcclxuICAgICAgICAvL+agueaNruetlOmimO+8jOiuvue9ruS4iuS8oOaVsOaNrlxyXG4gICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKTtcclxuICAgICAgICAvL+i/m+ihjOS4i+S4gOWFs1xyXG4gICAgICAgIHRoaXMubmV4dExldmVsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy/ngrnngavmjInpkq5cclxuICAgIGNsaWNrX0lnbml0aW9uKCl7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8v5Yik5pat5piv5ZCm5pyJ6L+H55qE57uT5p6cIHR5cGXlj6rkuLpuZXcgaGVhciBzZWUg5LiJ6YCJ5LiAIFxyXG4gICAganVkZ2luZ1Jlc3VsdCgpe1xyXG4gICAgICAgIGxldCByZXN1bHQgPSAtMTtcclxuICAgICAgICBsZXQgbmFtZSA9IHRoaXMubm93X0Zvb2Quc3Vic3RyaW5nKDUsdGhpcy5ub3dfRm9vZC5sZW5ndGgpO1xyXG4gICAgICAgIC8v5YaN5qOA5p+l5Zu+55uYXHJcbiAgICAgICAgaWYodGhpcy5mb29kUGljQXJyYXkubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPHRoaXMuZm9vZFBpY0FycmF5Lmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cobmFtZSx0aGlzLmZvb2RQaWNBcnJheVtpXS5zdWJzdHJpbmcoNSx0aGlzLmZvb2RQaWNBcnJheVtpXS5sZW5ndGgpKTtcclxuICAgICAgICAgICAgICAgIGlmKG5hbWUgPT0gdGhpcy5mb29kUGljQXJyYXlbaV0uc3Vic3RyaW5nKDUsdGhpcy5mb29kUGljQXJyYXlbaV0ubGVuZ3RoKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy/lpoLmnpzlm77niYfph4zpnaLmnIlcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5Ye6546w6L+HXCIsbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJyaWdodENob2ljZVwiLDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGkgPSAxMDAwMDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYocmVzdWx0ICE9IDIgKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLmsqHlh7rpmanov4dcIixuYW1lKTtcclxuICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJyaWdodENob2ljZVwiLDEpO1xyXG4gICAgICAgICAgICAvL+aKiuaWsOeUn+aIkOeahOWtmOaUvui/m+aVsOe7hOmHjFxyXG4gICAgICAgICAgICB0aGlzLmZvb2RQaWNBcnJheS5wdXNoKHRoaXMubm93X0Zvb2QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAvL+iuoeeul+WPjeW6lOaXtumXtFxyXG4gICAgc2V0VGltZURhdGEoKXtcclxuICAgICAgICB0aGlzLm92ZXJUaW1lID0gY2MuZnguR2FtZVRvb2wuZ2V0VGltZSgpO1xyXG4gICAgICAgIGxldCB0aW1lID0gdGhpcy5vdmVyVGltZSAtIHRoaXMuc3RhcnRUaW1lO1xyXG4gICAgICAgIC8v6Ziy5q2i5rqi5Ye6XHJcbiAgICAgICAgaWYodGltZSA8IDAgfHwgdGltZSA+IDgwMDApIHRpbWUgPSA4MDAwO1xyXG4gICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfU0VUKFwic3RlcFRpbWVcIix0aW1lKTtcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8uc3RlcFRpbWVMaXN0ICs9IHRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy/orr7nva7mjInpkq7nirbmgIFcclxuICAgIHNldEJ0blN0YXRlKG5vZGUsZGF0YSl7XHJcbiAgICAgICAgaWYoZGF0YSA9PSBcIkJ0bl9OZXdcIikgdGhpcy5jaG9pY2UgPSAxO1xyXG4gICAgICAgIGVsc2UgaWYoZGF0YSA9PSBcIkJ0bl9PbGRcIikgdGhpcy5jaG9pY2UgPSAyO1xyXG4gICAgICAgIC8vIGVsc2UgaWYoZGF0YSA9PSBcIkJ0bl9TZWVcIikgdGhpcy5jaG9pY2UgPSAzO1xyXG5cclxuICAgICAgICBpZihkYXRhID09IG51bGwpe1xyXG4gICAgICAgICAgICB0aGlzLmNob2ljZSA9IDA7ICBcclxuICAgICAgICB9IFxyXG5cclxuICAgICAgICBpZih0aGlzLmNob2ljZSAhPSBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX0RBVEEucmlnaHRDaG9pY2Upe1xyXG4gICAgICAgICAgICBpZihub2RlKXtcclxuICAgICAgICAgICAgICAgIGNjLmZ4LkF1ZGlvTWFuYWdlci5faW5zdGFuY2UucGxheUVmZmVjdChcImVyclwiLG51bGwpO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5nZXRDaGlsZEJ5TmFtZShcImVyclwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5nZXRDaGlsZEJ5TmFtZShcImNvcnJlY3RcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBcclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBpZihub2RlKXtcclxuICAgICAgICAgICAgICAgIGNjLmZ4LkF1ZGlvTWFuYWdlci5faW5zdGFuY2UucGxheUVmZmVjdChcInllc1wiLG51bGwpO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5nZXRDaGlsZEJ5TmFtZShcImVyclwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIG5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJjb3JyZWN0XCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSAgXHJcbiAgICAgICAgaWYobm9kZSkgbm9kZS5nZXRDaGlsZEJ5TmFtZShcIm5vbWFsXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLkJ0bl9PbGQuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9OZXcuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy/kuIvkuIDova4g6aaW5YWI6YeN572u5oyJ6ZKu54q25oCBXHJcbiAgICBuZXh0TGV2ZWwoKXtcclxuICAgICAgICBjYy50d2Vlbih0aGlzLlBsYW50KVxyXG4gICAgICAgIC5kZWxheSgxKVxyXG4gICAgICAgIC5jYWxsKCgpPT57XHJcbiAgICAgICAgICAgIHRoaXMuYnRuUmVzZXQoKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC50bygwLjUse29wYWNpdHk6MH0pXHJcbiAgICAgICAgLmNhbGwoKCk9PntcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVDdXN0b20oKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGJ0blJlc2V0KCl7XHJcbiAgICAgICAgdGhpcy5CdG5fTmV3LmdldENoaWxkQnlOYW1lKFwibm9tYWxcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkJ0bl9OZXcuZ2V0Q2hpbGRCeU5hbWUoXCJlcnJcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5CdG5fTmV3LmdldENoaWxkQnlOYW1lKFwiY29ycmVjdFwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9PbGQuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuQnRuX09sZC5nZXRDaGlsZEJ5TmFtZShcImVyclwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9PbGQuZ2V0Q2hpbGRCeU5hbWUoXCJjb3JyZWN0XCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLkJ0bl9PbGQuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkJ0bl9OZXcuZ2V0Q2hpbGRCeU5hbWUoXCJub21hbFwiKS5nZXRDb21wb25lbnQoY2MuQnV0dG9uKS5pbnRlcmFjdGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy/ov5Tlm57pppbpobVcclxuICAgIGJhY2tTY2VuZSgpe1xyXG4gICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkxvYWRTY2VuZVwiKTtcclxuICAgIH1cclxuICAgIC8v5LiL5LiA5YWz77yM5oiW6ICF6YeN5paw5byA5aeL77yM5oiW6ICF6L+U5Zue5LiK5LiA5YWz77yM5qC55o2ubGV2ZWzlhrPlrppcclxuICAgIHJlU3RhcnQodHlwZSl7XHJcblxyXG4gICAgfVxyXG4gICAgLy/ojrflj5bml7bpl7TmiLNcclxuICAgIGdldFRpbWUoKXtcclxuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICByZXR1cm4gdGltZXN0YW1wO1xyXG4gICAgfVxyXG4gICAgLy/ojrfog5xcclxuICAgIHBhc3NMZXZlbCgpe1xyXG5cclxuICAgIH1cclxuICAgIC8v5aSx6LSlXHJcbiAgICBsb3NlTGV2ZWwodHlwZSl7XHJcbiAgXHJcbiAgICB9XHJcblxyXG4gICAgLy/lpoLmnpzmmK/lgJLorqHml7Yg6LCD55So5q2k5pa55rOVXHJcbiAgICBzdGFydENvdW50RG93blRpbWUgKCkge1xyXG4gICAgICAgIHRoaXMudGltZU5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aW1lXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpLmZpbGxSYW5nZSA9IDA7XHJcbiAgICAgICAgdGhpcy50aW1lTm9kZS5nZXRDaGlsZEJ5TmFtZShcIm5lZWRsZVwiKS5hbmdsZSA9IDA7XHJcbiAgICB9XHJcbiAgICAvL+S4iuS8oOavj+asoeaTjeS9nOaVsOaNrlxyXG4gICAgc2V0RGF0YShkYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIui/m+WFpeS4iuS8oOWfi+eCuVwiKTtcclxuICAgICAgICBpZihkYXRhID09IFwiQnRuX05ld1wiKSB0aGlzLmNob2ljZSA9IDE7XHJcbiAgICAgICAgZWxzZSBpZihkYXRhID09IFwiQnRuX09sZFwiKSB0aGlzLmNob2ljZSA9IDI7XHJcbiAgICAgICAgLy8gZWxzZSBpZihkYXRhID09IFwiQnRuX1NlZVwiKSB0aGlzLmNob2ljZSA9IDM7XHJcbiAgICAgICAgZWxzZSBpZihkYXRhID09IG51bGwpe1xyXG4gICAgICAgICAgICB0aGlzLmNob2ljZSA9IDA7XHJcbiAgICAgICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfU0VUKFwic3RlcFRpbWVcIiw1MDAwKTtcclxuICAgICAgICB9IFxyXG4gICAgICAgIHZhciBqZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmKHRoaXMuY2hvaWNlID09IGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfREFUQS5yaWdodENob2ljZSl7XHJcbiAgICAgICAgICAgIGpnID0gdHJ1ZTtcclxuICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLnN1Y2Nlc3NMaXN0LnB1c2goamcpO1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJjaG9pY2VcIix0aGlzLmNob2ljZSk7XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19TRVQoXCJzdWNjZXNzXCIsamcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi6L+b5YWlR2FtZVRvb2wuc2V0R2FtZURhdGFcIixjYy5meC5HYW1lQ29uZmlnLkNMSUNLX0RBVEEpO1xyXG4gICAgICAgIGNjLmZ4LkdhbWVUb29sLnNldEdhbWVEYXRhKCk7XHJcbiAgICB9XHJcbiAgICAvL+S4iuS8oOaOkuihjOamnOaVsOaNrlxyXG4gICAgZ2FtZU92ZXIodGltZSl7XHJcbiAgICAgICAgIGNjLmZ4LkdhbWVUb29sLnNldFJhbmsodGltZSk7XHJcbiAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiR2FtZU92ZXJcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJHYW1lT3ZlclwiKS5vcGFjaXR5ID0gMDtcclxuICAgICAgICBjYy50d2Vlbih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJHYW1lT3ZlclwiKSlcclxuICAgICAgICAudG8oMC40LHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgLmRlbGF5KDIpXHJcbiAgICAgICAgLnRvKDAuNCx7b3BhY2l0eTo1MH0pXHJcbiAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIk92ZXJTY2VuZVwiKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpXHJcbiAgICB9XHJcblxyXG4gICAgb25FbmFibGUgKCkge1xyXG4gICAgICAgIC8vIGNjLmZ4Lk5vdGlmaWNhdGlvbnMub24oXCJjbGlja1N1blwiLCB0aGlzLmNsaWNrU3VuLCB0aGlzKTtcclxuICAgIH1cclxuICAgIG9uRGlzYWJsZSAoKSB7XHJcbiAgICAgICAgLy8gY2MuZnguTm90aWZpY2F0aW9ucy5vZmYoXCJjbGlja1N1blwiLCB0aGlzLmNsaWNrU3VuKTtcclxuICAgIH1cclxuICAgIHVwZGF0ZSAoZHQpIHtcclxuICAgIH1cclxufVxyXG4iXX0=