1024 lines
140 KiB
JavaScript
1024 lines
140 KiB
JavaScript
|
||
(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.ball = null;
|
||
_this.qiu1 = null;
|
||
_this.qiu2 = null;
|
||
_this.qiu3 = null;
|
||
_this.linePrefab = null;
|
||
_this.hit = null;
|
||
_this.bg1 = null;
|
||
_this.bg2 = null;
|
||
_this.time = null;
|
||
_this.begin = false;
|
||
_this.fuhuo = false;
|
||
_this.over = false;
|
||
_this.show = false;
|
||
_this.levelLabel = null;
|
||
return _this;
|
||
}
|
||
GameManager.prototype.onLoad = function () { };
|
||
GameManager.prototype.start = function () {
|
||
this.fit();
|
||
this.init();
|
||
};
|
||
//初始化数据
|
||
GameManager.prototype.init = function () {
|
||
this.node.getChildByName("GameOver").zIndex = 100;
|
||
this.node.getChildByName("GameOver").active = false;
|
||
this.ball.zIndex = 100;
|
||
this.bg1 = this.node.getChildByName("bg1");
|
||
this.bg2 = this.node.getChildByName("bg2");
|
||
this.time = this.node.getChildByName("Top").getChildByName("time").getComponent(cc.Label);
|
||
this.node.getChildByName("showBtn").active = false;
|
||
this.begin = false;
|
||
this.over = false;
|
||
this.fuhuo = true;
|
||
this.pause = true;
|
||
this.show = false;
|
||
this.round = 0;
|
||
this.level = 2;
|
||
this.countTime = 60;
|
||
if (cc.fx.GameConfig.GM_INFO.custom != 0) {
|
||
this.level = cc.fx.GameConfig.GM_INFO.custom;
|
||
// this.levelLabel.string = this.level + "";
|
||
cc.fx.GameConfig.GM_INFO.custom += 1;
|
||
this.countTime = 12000000;
|
||
}
|
||
// this.levelLabel.string = this.level + "";
|
||
this.timeCount = 0.1;
|
||
this.clickNow = 0;
|
||
this.clickCount = 0;
|
||
this.timeStart = 0;
|
||
this.repeat = -1;
|
||
this.numberRepeat = -1;
|
||
this.route_Array = [];
|
||
this.moveArray = [];
|
||
this.now_Array = [];
|
||
this.ball_Array = [];
|
||
this.Pos_Array = [];
|
||
this.time_Array = [];
|
||
this.color_Array = [];
|
||
cc.fx.GameConfig.GAME_DATA = [];
|
||
cc.fx.GameConfig.GM_INFO.success = false;
|
||
this.startTime = 0;
|
||
this.overTime = 0;
|
||
this.winTime = 0;
|
||
cc.fx.GameConfig.GM_INFO.total = 0;
|
||
cc.fx.GameConfig.GM_INFO.mean_Time = 0;
|
||
this.schedule(this.updateCountDownTime, 1);
|
||
this.startGame();
|
||
};
|
||
//根据是否全面屏,做独立适配方面
|
||
GameManager.prototype.fit = function () {
|
||
this.fitTop = 450; //600
|
||
this.fitBot = -600; //-700
|
||
var jg = this.setFit();
|
||
if (!jg) {
|
||
this.fitTop = 600;
|
||
this.fitBot = -700;
|
||
}
|
||
};
|
||
//判断全面屏
|
||
GameManager.prototype.getSetScreenResolutionFlag = function () {
|
||
var size = cc.winSize;
|
||
var width = size.width;
|
||
var height = size.height;
|
||
if ((height / width) > (16.2 / 9))
|
||
return false;
|
||
return true;
|
||
};
|
||
//判断全面屏适配
|
||
GameManager.prototype.setFit = function () {
|
||
var flag = this.getSetScreenResolutionFlag();
|
||
if (flag) {
|
||
}
|
||
else {
|
||
}
|
||
return flag;
|
||
};
|
||
//返回首页
|
||
GameManager.prototype.backScene = function () {
|
||
cc.director.loadScene("LoadScene");
|
||
};
|
||
//下一关,或者重新开始,或者返回上一关,根据level决定
|
||
GameManager.prototype.reStart = function (type) {
|
||
// if(cc.fx.GameConfig.GM_INFO.custom != 0){
|
||
// cc.director.loadScene("LoadScene");
|
||
// return;
|
||
// }
|
||
this.node.getChildByName("showBtn").active = false;
|
||
this.destroyLine();
|
||
this.timeCount = 0.1;
|
||
this.clickNow = 0;
|
||
this.timeStart = 0;
|
||
this.repeat = -1;
|
||
this.numberRepeat = -1;
|
||
this.begin = false;
|
||
this.route_Array = [];
|
||
this.now_Array = [];
|
||
this.ball_Array = [];
|
||
this.Pos_Array = [];
|
||
this.moveArray = [];
|
||
this.time_Array = [];
|
||
this.color_Array = [];
|
||
if (type == 0) {
|
||
this.bgMove(1);
|
||
}
|
||
else if (type == 1) {
|
||
this.startGame();
|
||
}
|
||
else if (type == 2) {
|
||
this.bgMove(-1);
|
||
}
|
||
};
|
||
//获取时间戳
|
||
GameManager.prototype.getTime = function () {
|
||
var timestamp = new Date().getTime();
|
||
return timestamp;
|
||
};
|
||
//获胜
|
||
GameManager.prototype.passLevel = function () {
|
||
var _this = this;
|
||
this.destroyLine();
|
||
if (this.over == false && this.countTime >= 0) {
|
||
var timeArray_1 = [];
|
||
var timeCount = 0;
|
||
var ball_1 = this.ball_Array[0];
|
||
for (var i = 1; i < this.ball_Array.length; i++) {
|
||
var time = this.calculateDistance(this.ball_Array[i].x, this.ball_Array[i].y, this.ball_Array[i - 1].x, this.ball_Array[i - 1].y, 2);
|
||
timeArray_1.push(time);
|
||
}
|
||
var _loop_1 = function (k) {
|
||
setTimeout(function () {
|
||
cc.tween(ball_1)
|
||
.to(timeArray_1[k - 1], { x: _this.ball_Array[k].x, y: _this.ball_Array[k].y })
|
||
.call(function () {
|
||
_this.ball_Array[k].active = false;
|
||
if (k == _this.ball_Array.length - 1) {
|
||
setTimeout(function () {
|
||
_this.ball.opacity = 255;
|
||
_this.ball.position = cc.v3(ball_1.x, ball_1.y, 0);
|
||
ball_1.active = false;
|
||
_this.clearSun();
|
||
_this.reStart(0);
|
||
}, 200);
|
||
}
|
||
})
|
||
.start();
|
||
}, timeCount * 1000);
|
||
timeCount += (timeArray_1[k - 1] + 0.1);
|
||
};
|
||
for (var k = 1; k < this.ball_Array.length; k++) {
|
||
_loop_1(k);
|
||
}
|
||
}
|
||
};
|
||
//失败
|
||
GameManager.prototype.loseLevel = function (type) {
|
||
var _this = this;
|
||
this.destroyLine();
|
||
if (this.over == false && this.countTime >= 0) {
|
||
var ball_2 = this.ball_Array[0];
|
||
var _loop_2 = function (k) {
|
||
cc.tween(this_1.ball_Array[k])
|
||
.to(2, { x: ball_2.x, y: ball_2.y })
|
||
.call(function () {
|
||
_this.ball_Array[k].active = false;
|
||
if (k == _this.ball_Array.length - 1) {
|
||
_this.ball.opacity = 255;
|
||
_this.ball.position = cc.v3(ball_2.x, ball_2.y, 0);
|
||
_this.clearSun();
|
||
_this.reStart(type);
|
||
}
|
||
})
|
||
.start();
|
||
};
|
||
var this_1 = this;
|
||
for (var k = 1; k < this.ball_Array.length; k++) {
|
||
_loop_2(k);
|
||
}
|
||
}
|
||
};
|
||
//清理太阳
|
||
GameManager.prototype.clearSun = function () {
|
||
for (var k = 0; k < this.ball_Array.length; k++) {
|
||
this.ball_Array[k].removeFromParent();
|
||
this.ball_Array[k] = null;
|
||
}
|
||
};
|
||
//点击太阳执行方法
|
||
GameManager.prototype.clickSun = function (data) {
|
||
var _this = this;
|
||
if (this.begin == true) {
|
||
this.clickCount += 1;
|
||
var clickTime = cc.fx.GameTool.getTime();
|
||
this.time_Array.push((clickTime - this.timeStart));
|
||
this.timeStart = cc.fx.GameTool.getTime();
|
||
if (data == this.clickNow) {
|
||
cc.fx.AudioManager._instance.playAudioButton();
|
||
if (this.clickNow > 0) {
|
||
this.createLine(cc.v2(this.ball_Array[this.clickNow - 1].x, this.ball_Array[this.clickNow - 1].y), cc.v2(this.ball_Array[this.clickNow].x, this.ball_Array[this.clickNow].y), 0.2);
|
||
}
|
||
this.clickNow += 1;
|
||
if (this.ball_Array[this.clickNow - 1])
|
||
this.ball_Array[this.clickNow - 1].getChildByName("guang").active = false;
|
||
if (this.clickNow == this.now_Array.length) {
|
||
this.pause = true;
|
||
cc.fx.GameConfig.GM_INFO.total += this.clickNow;
|
||
this.overTime = cc.fx.GameTool.getTime();
|
||
if (this.startTime > 0 && this.overTime > 0) {
|
||
cc.fx.GameConfig.GM_INFO.mean_Time += (this.overTime - this.startTime);
|
||
}
|
||
var finish_time = parseInt((this.overTime - this.startTime) / 100 + "");
|
||
this.startTime = 0;
|
||
this.overTime = 0;
|
||
var color = "y";
|
||
if (this.level < 4 && this.level > 1)
|
||
color = "yr";
|
||
else if (this.level >= 4)
|
||
color = "yrb";
|
||
var win_1 = this.node.getChildByName("Win");
|
||
win_1.active = true;
|
||
win_1.setScale(0);
|
||
cc.fx.AudioManager._instance.playWin();
|
||
this.round += 1;
|
||
var sunArray = [];
|
||
if (this.moveArray.length > 0) {
|
||
for (var m = 0; m < this.moveArray.length; m++) {
|
||
if (m == this.repeat || m == this.numberRepeat) {
|
||
this.moveArray[m] = 2;
|
||
}
|
||
sunArray.push(this.moveArray[m]);
|
||
}
|
||
}
|
||
else {
|
||
for (var m = 0; m < this.ball_Array.length; m++) {
|
||
if (m == this.repeat || m == this.numberRepeat) {
|
||
sunArray.push(2);
|
||
}
|
||
else
|
||
sunArray.push(0);
|
||
}
|
||
}
|
||
cc.fx.GameConfig.CLICK_DATA =
|
||
{
|
||
type: 1,
|
||
success: true,
|
||
round: this.round,
|
||
totalSunCount: this.now_Array.length,
|
||
movedSunCount: cc.fx.GameConfig.LEVEL_INFO[this.level - 1].moveNumber,
|
||
sunSpeed: cc.fx.GameConfig.LEVEL_INFO[this.level - 1].moveSpeed,
|
||
duration: finish_time / 10,
|
||
difficultyLevel: this.level,
|
||
sunList: sunArray,
|
||
stepTimeList: this.time_Array,
|
||
remainder: this.countTime
|
||
};
|
||
if (cc.fx.GameConfig.CLICK_DATA.duration > 50) {
|
||
cc.fx.GameConfig.CLICK_DATA.duration = 50;
|
||
}
|
||
this.setData();
|
||
cc.tween(win_1)
|
||
.delay(0.4)
|
||
.to(0.01, { scale: 2.5 })
|
||
.to(0.35, { scale: 1 })
|
||
.delay(0.4)
|
||
.call(function () {
|
||
win_1.active = false;
|
||
_this.destroyLine();
|
||
if (_this.over == false && _this.countTime >= 0) {
|
||
if (_this.level >= 15) {
|
||
cc.fx.GameConfig.GM_INFO.success = true;
|
||
_this.level += 0;
|
||
// this.levelLabel.string = this.level + "";
|
||
_this.fuhuo = true;
|
||
_this.passLevel();
|
||
}
|
||
else {
|
||
_this.level += 1;
|
||
// this.levelLabel.string = this.level + "";
|
||
_this.fuhuo = true;
|
||
_this.passLevel();
|
||
}
|
||
}
|
||
})
|
||
.start();
|
||
}
|
||
}
|
||
else {
|
||
this.setLoss();
|
||
}
|
||
}
|
||
};
|
||
//执行失败
|
||
GameManager.prototype.setLoss = function () {
|
||
cc.fx.AudioManager._instance.playWarning();
|
||
this.begin = false;
|
||
this.overTime = cc.fx.GameTool.getTime();
|
||
if (this.startTime > 0 && this.overTime > 0) {
|
||
cc.fx.GameConfig.GM_INFO.mean_Time += (this.overTime - this.startTime);
|
||
}
|
||
var finish_time = parseInt((this.overTime - this.startTime) / 100 + "");
|
||
if (finish_time > 58)
|
||
finish_time = 58;
|
||
this.startTime = 0;
|
||
this.overTime = 0;
|
||
var color = "y";
|
||
if (this.level < 4 && this.level > 1)
|
||
color = "yr";
|
||
else if (this.level >= 4)
|
||
color = "yrb";
|
||
this.round += 1;
|
||
var sunArray = [];
|
||
if (this.moveArray.length > 0) {
|
||
for (var m = 0; m < this.moveArray.length; m++) {
|
||
if (m == this.repeat || m == this.numberRepeat) {
|
||
this.moveArray[m] = 2;
|
||
}
|
||
sunArray.push(this.moveArray[m]);
|
||
}
|
||
}
|
||
else {
|
||
for (var m = 0; m < this.ball_Array.length; m++) {
|
||
if (m == this.repeat || m == this.numberRepeat) {
|
||
sunArray.push(2);
|
||
}
|
||
else
|
||
sunArray.push(0);
|
||
}
|
||
}
|
||
cc.fx.GameConfig.CLICK_DATA =
|
||
{
|
||
type: 1,
|
||
success: false,
|
||
round: this.round,
|
||
totalSunCount: this.now_Array.length,
|
||
movedSunCount: cc.fx.GameConfig.LEVEL_INFO[this.level - 1].moveNumber,
|
||
sunSpeed: cc.fx.GameConfig.LEVEL_INFO[this.level - 1].moveSpeed,
|
||
duration: finish_time / 10,
|
||
difficultyLevel: this.level,
|
||
sunList: sunArray,
|
||
stepTimeList: this.time_Array,
|
||
remainder: this.countTime
|
||
};
|
||
if (cc.fx.GameConfig.CLICK_DATA.duration > 50) {
|
||
cc.fx.GameConfig.CLICK_DATA.duration = 50;
|
||
}
|
||
this.setData();
|
||
if (this.fuhuo == true) {
|
||
this.fuhuo = false;
|
||
this.loseLevel(1);
|
||
}
|
||
else {
|
||
if (this.level > 2) {
|
||
this.level -= 1;
|
||
// this.levelLabel.string = this.level + "";
|
||
this.fuhuo = true;
|
||
// this.fuhuo = false;
|
||
this.loseLevel(2);
|
||
}
|
||
else {
|
||
this.loseLevel(1);
|
||
}
|
||
}
|
||
var over = this.node.getChildByName("Over");
|
||
cc.tween(over)
|
||
.to(0.25, { opacity: 255 })
|
||
.delay(0.1)
|
||
.to(0.2, { opacity: 0 })
|
||
.delay(0.1)
|
||
.to(0.15, { opacity: 255 })
|
||
.delay(0.1)
|
||
.to(0.1, { opacity: 0 })
|
||
.start();
|
||
};
|
||
//开始游戏
|
||
GameManager.prototype.startGame = function () {
|
||
if (this.over == false && this.countTime > 0) {
|
||
this.pause = true;
|
||
this.createSun();
|
||
this.begin = false;
|
||
cc.tween(this.ball)
|
||
.to(0.5, { opacity: 255, scale: 1.3 })
|
||
.start();
|
||
}
|
||
};
|
||
//执行太阳运行动画,以及后面移动动画
|
||
GameManager.prototype.runGame = function () {
|
||
var _this = this;
|
||
var time = -650;
|
||
var _loop_3 = function (i) {
|
||
time = this_2.now_Array[i].time * 1000 + time;
|
||
setTimeout(function () {
|
||
if (_this.over == false) {
|
||
var temp = _this.now_Array[i].timeCount;
|
||
if (temp > 0.5)
|
||
temp = 0.5;
|
||
if (i != 0) {
|
||
if (_this.ball && _this.now_Array[i]) {
|
||
_this.createLine(cc.v2(_this.ball.x, _this.ball.y), cc.v2(_this.now_Array[i].x, _this.now_Array[i].y), _this.now_Array[i].time - temp);
|
||
}
|
||
}
|
||
cc.tween(_this.ball)
|
||
.to(_this.now_Array[i].time - temp, { x: _this.now_Array[i].x, y: _this.now_Array[i].y })
|
||
.to(0.1, { scale: 1 })
|
||
.call(function () {
|
||
_this.createBall(i, _this.now_Array[i].color, _this.now_Array[i].speed, _this.now_Array[i].repeat);
|
||
if (i == _this.now_Array.length - 1) {
|
||
_this.ball.opacity = 0;
|
||
setTimeout(function () {
|
||
_this.destroyLine();
|
||
_this.beginGame();
|
||
if (cc.fx.GameConfig.LEVEL_INFO[_this.level - 1].moveNumber < 1) {
|
||
_this.pause = false;
|
||
}
|
||
else {
|
||
_this.moveAction();
|
||
}
|
||
}, 150);
|
||
}
|
||
})
|
||
.start();
|
||
}
|
||
}, time);
|
||
};
|
||
var this_2 = this;
|
||
for (var i = 0; i < this.now_Array.length; i++) {
|
||
_loop_3(i);
|
||
}
|
||
};
|
||
//设置移动重叠数据
|
||
GameManager.prototype.createMove = function () {
|
||
var _this = this;
|
||
if (this.over == false) {
|
||
var info = cc.fx.GameConfig.LEVEL_INFO[this.level - 1];
|
||
//改变移动速度
|
||
var speed = 7;
|
||
if (info.moveSpeed >= 2) {
|
||
speed = 7 - info.moveSpeed / 2;
|
||
}
|
||
if (info.repeat == 1) {
|
||
this.repeat = parseInt((Math.random() * (info.number - 1) + 1) + "");
|
||
var tempNumber = 0;
|
||
// this.repeat = 4;
|
||
if (this.repeat > 4) {
|
||
this.numberRepeat = parseInt(Math.random() * 4 + "");
|
||
if (this.repeat == (info.number - 1)) //如果是最后一个 不能跟第一个重叠
|
||
this.numberRepeat = this.repeat - parseInt((Math.random() * 3 + 2) + "");
|
||
tempNumber = this.Pos_Array[this.numberRepeat];
|
||
this.Pos_Array[this.repeat] = tempNumber;
|
||
}
|
||
else { // 0 1 2 3 4 5
|
||
// 6 - 3 - 1 = 2 4 01 4
|
||
if (this.repeat == 0)
|
||
this.repeat = 1;
|
||
if ((info.number - 1 - this.repeat) == 2) {
|
||
this.numberRepeat = info.number - 1;
|
||
tempNumber = this.Pos_Array[this.numberRepeat];
|
||
}
|
||
else if ((info.number - 1 - this.repeat) == 1) {
|
||
this.numberRepeat = this.repeat - 2;
|
||
tempNumber = this.Pos_Array[this.numberRepeat];
|
||
}
|
||
else if ((info.number - 1 - this.repeat) == 0) {
|
||
this.numberRepeat = this.repeat - 2;
|
||
tempNumber = this.Pos_Array[this.numberRepeat];
|
||
}
|
||
else if ((info.number - 1 - this.repeat) > 2) {
|
||
this.numberRepeat = parseInt(Math.random() * (info.number - this.repeat - 2) + "") + this.repeat + 2;
|
||
tempNumber = this.Pos_Array[this.numberRepeat];
|
||
}
|
||
else {
|
||
this.numberRepeat = this.repeat - 2;
|
||
tempNumber = this.Pos_Array[this.numberRepeat];
|
||
}
|
||
this.Pos_Array[this.repeat] = tempNumber;
|
||
}
|
||
}
|
||
if (info.moveNumber > 0) {
|
||
//0 1 2 3 4 5 6 7 8 9
|
||
//可移动区分
|
||
var pos_1 = cc.v2(0, 0);
|
||
for (var z = 0; z < info.number; z++) {
|
||
this.moveArray[z] = 0;
|
||
}
|
||
for (var p = 0; p < info.moveNumber; p++) {
|
||
this.moveArray[info.number - 1 - p] = 1;
|
||
}
|
||
var timeOut = 0;
|
||
//打乱可移动顺序
|
||
this.moveArray.sort(function () { return Math.random() - 0.5; });
|
||
if (this.moveArray[0] == 1) {
|
||
for (var r = info.number - 1; r >= 0; r--) {
|
||
if (this.moveArray[r] == 0) {
|
||
this.moveArray[r] = 1;
|
||
this.moveArray[0] = 0;
|
||
r = -1;
|
||
}
|
||
}
|
||
}
|
||
//将重叠的设置为不可移动 1 1 1 1 0 0 1 0 0 0 / 2 7
|
||
for (var k = 0; k < this.moveArray.length; k++) {
|
||
if (this.moveArray[k] == 1 && (k == this.repeat || k == this.numberRepeat)) {
|
||
for (var m = this.moveArray.length - 1; m >= 0; m--) {
|
||
if (m != k && this.moveArray[m] == 0 && m != this.repeat && m != this.numberRepeat) {
|
||
this.moveArray[m] = 1;
|
||
this.moveArray[k] = 0;
|
||
m = -1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
var _loop_4 = function (i) {
|
||
if (this_3.moveArray[i] == 1) {
|
||
timeOut += 1;
|
||
setTimeout(function () {
|
||
pos_1 = _this.getPos2(true, i);
|
||
_this.Pos_Array[i] = pos_1;
|
||
}, timeOut * 300);
|
||
}
|
||
};
|
||
var this_3 = this;
|
||
for (var i = 0; i < this.Pos_Array.length; i++) {
|
||
_loop_4(i);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
//移动后数据 重新刷一遍赋值
|
||
GameManager.prototype.updateArray = function () {
|
||
for (var i = 0; i < this.now_Array.length - 1; i++) {
|
||
this.now_Array[i].x = this.Pos_Array[i].x;
|
||
this.now_Array[i].y = this.Pos_Array[i].y;
|
||
}
|
||
};
|
||
//太阳初始化后移动方法
|
||
GameManager.prototype.moveAction = function () {
|
||
var _this = this;
|
||
this.updateArray();
|
||
var moveArray = this.moveArray;
|
||
var info = cc.fx.GameConfig.LEVEL_INFO[this.level - 1];
|
||
//改变移动速度
|
||
var speed = 7;
|
||
if (info.moveSpeed >= 2) {
|
||
speed = 7 - info.moveSpeed / 2;
|
||
}
|
||
if (info.moveNumber > 0) {
|
||
//0 1 2 3 4 5 6 7 8 9
|
||
//可移动区分
|
||
//将重叠的设置为不可移动 1 1 1 1 0 0 1 0 0 0 / 2 7
|
||
for (var k = 0; k < this.moveArray.length; k++) {
|
||
if (this.moveArray[k] == 1 && (k == this.repeat || k == this.numberRepeat)) {
|
||
for (var m = this.moveArray.length - 1; m >= 0; m--) {
|
||
if (m != k && this.moveArray[m] == 0 && m != this.repeat && m != this.numberRepeat) {
|
||
this.moveArray[m] = 1;
|
||
this.moveArray[k] = 0;
|
||
m = -1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
var lastNumber = 0;
|
||
//锁定最后一个可移动的
|
||
for (var j = 0; j < moveArray.length; j++) {
|
||
if (moveArray[j] == 1) {
|
||
lastNumber = j;
|
||
}
|
||
}
|
||
var _loop_5 = function (i) {
|
||
if (moveArray[i] == 1) {
|
||
if (i != lastNumber) { //如果不是最后一个移动的
|
||
var time = speed * this_4.calculateDistance(this_4.ball_Array[i].x, this_4.ball_Array[i].y, this_4.Pos_Array[i].x, this_4.Pos_Array[i].y, 3);
|
||
this_4.ball_Array[i].getComponent("Sun").move = true;
|
||
cc.tween(this_4.ball_Array[i])
|
||
.to(time, { position: this_4.Pos_Array[i] })
|
||
.call(function () {
|
||
_this.ball_Array[i].getComponent("Sun").move = false;
|
||
})
|
||
.start();
|
||
}
|
||
//如果是最后一个
|
||
else {
|
||
var time = speed * this_4.calculateDistance(this_4.ball_Array[i].x, this_4.ball_Array[i].y, this_4.Pos_Array[i].x, this_4.Pos_Array[i].y, 3);
|
||
this_4.ball_Array[i].getComponent("Sun").move = true;
|
||
cc.tween(this_4.ball_Array[i])
|
||
.to(time, { position: this_4.Pos_Array[i] })
|
||
.call(function () {
|
||
_this.ball_Array[i].getComponent("Sun").move = false;
|
||
})
|
||
.start();
|
||
}
|
||
}
|
||
};
|
||
var this_4 = this;
|
||
for (var i = 0; i < this.ball_Array.length; i++) {
|
||
_loop_5(i);
|
||
}
|
||
}
|
||
};
|
||
//每次重新开始新一轮儿游戏
|
||
GameManager.prototype.beginGame = function () {
|
||
this.begin = true;
|
||
this.startTime = cc.fx.GameTool.getTime();
|
||
this.timeStart = cc.fx.GameTool.getTime();
|
||
this.pause = false;
|
||
// this.node.getChildByName("showBtn").active = true;
|
||
};
|
||
//创建太阳所需数据
|
||
GameManager.prototype.createSun = function () {
|
||
var _this = this;
|
||
var levelData = cc.fx.GameConfig.LEVEL_INFO[this.level - 1];
|
||
var tiemOut = 0;
|
||
var _loop_6 = function (l) {
|
||
tiemOut += 1;
|
||
setTimeout(function () {
|
||
if (_this.over == false) {
|
||
var pos = _this.getPos(false, l);
|
||
_this.Pos_Array.push(pos);
|
||
if (_this.Pos_Array.length == levelData.number) {
|
||
_this.createMove();
|
||
_this.createPos();
|
||
}
|
||
}
|
||
}, tiemOut * 100);
|
||
};
|
||
for (var l = 0; l < levelData.number; l++) {
|
||
_loop_6(l);
|
||
}
|
||
};
|
||
//创建太阳位置,颜色信息等数据
|
||
GameManager.prototype.createPos = function () {
|
||
var data = { x: this.ball.x, y: this.ball.y, time: 0, timeCount: 0, color: 0, speed: 0, repeat: false };
|
||
var levelData = cc.fx.GameConfig.LEVEL_INFO[this.level - 1];
|
||
//颜色区分
|
||
var colorArray = [0, 1];
|
||
for (var j = 0; j < levelData.number - 2; j++) {
|
||
var colorTemp = parseInt(Math.random() * 3 + "");
|
||
if (levelData.number < 6 && colorTemp == 2)
|
||
colorTemp = 0;
|
||
colorArray.push(colorTemp);
|
||
colorArray.sort(function () { return Math.random() - 0.5; });
|
||
}
|
||
colorArray.sort(function () { return Math.random() - 0.5; });
|
||
if (levelData.number == 4)
|
||
colorArray = [0, 0, 0, 0];
|
||
this.color_Array = colorArray;
|
||
//存储太阳数据
|
||
for (var i = 0; i < levelData.number; i++) {
|
||
var timeCount = this.timeCount + (0.6 - this.calculateDistance(this.ball.x, this.ball.y, this.Pos_Array[i].x, this.Pos_Array[i].y, 1));
|
||
var time = this.calculateDistance(this.ball.x, this.ball.y, this.Pos_Array[i].x, this.Pos_Array[i].y, 1) + timeCount;
|
||
data = { x: this.Pos_Array[i].x, y: this.Pos_Array[i].y, time: time, timeCount: timeCount, color: colorArray[i], speed: levelData.moveSpeed, repeat: false };
|
||
if (this.repeat == i) {
|
||
data.repeat = true;
|
||
}
|
||
else if (this.numberRepeat == i) {
|
||
data.repeat = true;
|
||
}
|
||
this.now_Array.push(data);
|
||
}
|
||
this.runGame();
|
||
};
|
||
//获取,N个太阳位置的方法,和POS2分开两个方法,防止递归溢出
|
||
GameManager.prototype.getPos = function (type, num) {
|
||
var posX = Math.random() * 620 - 310;
|
||
var posY = Math.random() * (this.fitTop - this.fitBot) + this.fitBot;
|
||
var point = cc.v2(posX, posY);
|
||
if (this.Pos_Array.length > 0) {
|
||
for (var i = 0; i < this.Pos_Array.length; i++) {
|
||
var distance = false;
|
||
var pd = false;
|
||
if (i == num)
|
||
pd = true;
|
||
distance = this.getDistance(posX, posY, this.Pos_Array[i].x, this.Pos_Array[i].y, pd);
|
||
if (distance == false) {
|
||
i = 10000;
|
||
point = this.getPos(type, num);
|
||
}
|
||
if (distance == true && i == (this.Pos_Array.length - 1)) {
|
||
i = 10000;
|
||
}
|
||
}
|
||
}
|
||
return point;
|
||
};
|
||
//获取,N个太阳可移动位置的方法,和POS分开算防止递归溢出
|
||
GameManager.prototype.getPos2 = function (type, num) {
|
||
var posX = Math.random() * 620 - 310;
|
||
var posY = Math.random() * (this.fitTop - this.fitBot) + this.fitBot;
|
||
var point = cc.v2(posX, posY);
|
||
if (this.Pos_Array.length > 0) {
|
||
for (var i = 0; i < this.Pos_Array.length; i++) {
|
||
var distance = false;
|
||
var pd = false;
|
||
if (i == num)
|
||
pd = true;
|
||
distance = this.getDistance2(posX, posY, this.Pos_Array[i].x, this.Pos_Array[i].y, pd);
|
||
if (distance == false) {
|
||
i = 10000;
|
||
point = this.getPos2(type, num);
|
||
}
|
||
if (distance == true && i == (this.Pos_Array.length - 1)) {
|
||
i = 10000;
|
||
}
|
||
}
|
||
}
|
||
return point;
|
||
};
|
||
//获取两点之间距离,返回判断是否在一定范围内 将来提出到工具类
|
||
GameManager.prototype.getDistance = function (x1, y1, x2, y2, num) {
|
||
var jg = false;
|
||
var dx = x2 - x1;
|
||
var dy = y2 - y1;
|
||
var distance = Math.sqrt(dx * dx + dy * dy);
|
||
if (distance > 160) {
|
||
if (num == true) {
|
||
cc.fx.GameConfig;
|
||
if (distance < cc.fx.GameConfig.LEVEL_INFO[this.level - 1].maxMove) {
|
||
jg = true;
|
||
}
|
||
else
|
||
jg = false;
|
||
}
|
||
else {
|
||
if (distance < cc.fx.GameConfig.LEVEL_INFO[this.level - 1].maxMove) {
|
||
jg = true;
|
||
}
|
||
else
|
||
jg = false;
|
||
}
|
||
}
|
||
return jg;
|
||
};
|
||
//命中动画
|
||
GameManager.prototype.hitAction = function (data) {
|
||
var _this = this;
|
||
this.hit.active = true;
|
||
this.hit.opacity = 0;
|
||
this.hit.setPosition;
|
||
this.hit.setPosition(this.ball_Array[data].x + 35, this.ball_Array[data].y + 35);
|
||
cc.tween(this.hit)
|
||
.to(0, { opacity: 255 })
|
||
.to(0.2, { position: cc.v3(this.hit.x - 35, this.hit.y - 35, 0) })
|
||
.delay(0.2)
|
||
.to(0.1, { opacity: 0 })
|
||
.call(function () {
|
||
_this.hit.active = false;
|
||
})
|
||
.start();
|
||
};
|
||
//创造太阳
|
||
GameManager.prototype.createBall = function (number, color, speed, repeat) {
|
||
var ball = null;
|
||
if (color == 0)
|
||
ball = cc.instantiate(this.qiu1);
|
||
else if (color == 1)
|
||
ball = cc.instantiate(this.qiu2);
|
||
else if (color == 2)
|
||
ball = cc.instantiate(this.qiu3);
|
||
ball.parent = this.node.getChildByName("Sun");
|
||
ball.zIndex = this.now_Array.length - number;
|
||
ball.setPosition(this.ball.x, this.ball.y);
|
||
ball.getComponent("Sun").init(number, color, speed, repeat);
|
||
this.ball_Array.push(ball);
|
||
};
|
||
//销毁连线
|
||
GameManager.prototype.destroyLine = function () {
|
||
for (var i = 0; i < this.node.getChildByName("Line").children.length; i++) {
|
||
if (this.node.getChildByName("Line").children[i]) {
|
||
this.node.getChildByName("Line").children[i].removeFromParent();
|
||
this.node.getChildByName("Line").children[i] = null;
|
||
}
|
||
}
|
||
this.node.getChildByName("Line").removeAllChildren();
|
||
};
|
||
//创建连线
|
||
GameManager.prototype.createLine = function (start, end, time) {
|
||
var line = cc.instantiate(this.linePrefab);
|
||
line.parent = this.node.getChildByName("Line");
|
||
line.setPosition(start.x, start.y);
|
||
var dx = end.x - start.x;
|
||
var dy = end.y - start.y;
|
||
var distance = Math.sqrt(dx * dx + dy * dy);
|
||
line.height = distance;
|
||
line.getComponent(cc.Sprite).fillRange = 0;
|
||
line.angle = -this.calculateAngle(start.x, start.y, end.x, end.y);
|
||
cc.tween(line.getComponent(cc.Sprite))
|
||
.to(time, { fillRange: 1 })
|
||
.start();
|
||
};
|
||
//获取两点之间的角度,将来都可放工具类
|
||
GameManager.prototype.calculateAngle = function (x1, y1, x2, y2) {
|
||
var angle = Math.atan2(y2 - y1, x2 - x1) * 180 / Math.PI - 90;
|
||
return -angle;
|
||
};
|
||
//获取两点之间的距离 返回对应时间
|
||
GameManager.prototype.calculateDistance = function (x1, y1, x2, y2, num) {
|
||
var dx = x2 - x1;
|
||
var dy = y2 - y1;
|
||
var time = 0;
|
||
var distance = Math.sqrt(dx * dx + dy * dy);
|
||
if (num == 1) {
|
||
if (distance > 800)
|
||
distance = 800;
|
||
time = distance / 800 * 0.6;
|
||
}
|
||
else if (num == 2) {
|
||
if (distance > 1200)
|
||
distance = 1200;
|
||
time = distance / 1200 * 1;
|
||
}
|
||
else if (num == 3) {
|
||
if (distance > 1200)
|
||
distance = 1200;
|
||
time = distance / 1200 * 1.5;
|
||
}
|
||
return time;
|
||
};
|
||
//获取两点之间距离 返回距离判断
|
||
GameManager.prototype.getDistance2 = function (x1, y1, x2, y2, num) {
|
||
var jg = false;
|
||
var dx = x2 - x1;
|
||
var dy = y2 - y1;
|
||
var distance = Math.sqrt(dx * dx + dy * dy);
|
||
if (distance > 160) {
|
||
if (num == true) {
|
||
if (distance < cc.fx.GameConfig.LEVEL_INFO[this.level - 1].maxDistance)
|
||
jg = true;
|
||
else
|
||
jg = false;
|
||
}
|
||
else {
|
||
jg = true;
|
||
}
|
||
}
|
||
return jg;
|
||
};
|
||
//背景移动
|
||
GameManager.prototype.bgMove = function (type) {
|
||
var _this = this;
|
||
var random = Math.random() * 300 + 300;
|
||
var posX = Math.random() * 600 - 300;
|
||
var y1 = this.bg1.y - random * type;
|
||
var time1 = 0.7 * (random / 400);
|
||
cc.tween(this.ball)
|
||
.to(0.3, { scale: 1.3 })
|
||
.to(time1, { x: posX })
|
||
.start();
|
||
cc.tween(this.bg1)
|
||
.delay(0.3)
|
||
.to(time1, { y: y1 })
|
||
.start();
|
||
setTimeout(function () {
|
||
if (_this.over == false)
|
||
_this.startGame();
|
||
}, time1 * 1500);
|
||
};
|
||
//如果是倒计时 调用此方法
|
||
GameManager.prototype.updateCountDownTime = function () {
|
||
if (this.countTime > 0 && this.pause == false) {
|
||
this.countTime -= 1;
|
||
this.time.string = cc.fx.GameTool.getTimeMargin(this.countTime);
|
||
if (this.countTime < 5) {
|
||
cc.tween(this.time.node)
|
||
.to(0.25, { scale: 1.5, color: cc.color(255, 0, 0) })
|
||
.to(0.25, { scale: 1, color: cc.color(255, 255, 255) })
|
||
.start();
|
||
var over = this.node.getChildByName("Over");
|
||
cc.tween(over)
|
||
.to(0.2, { opacity: 255 })
|
||
.delay(0.1)
|
||
.to(0.2, { opacity: 0 })
|
||
.start();
|
||
}
|
||
if (this.countTime <= 0) {
|
||
this.begin = false;
|
||
this.over = true;
|
||
this.unschedule(this.updateCountDownTime);
|
||
this.setLoss();
|
||
var time = 0;
|
||
if (this.clickCount > 0)
|
||
time = parseInt(cc.fx.GameConfig.GM_INFO.mean_Time / this.clickCount + "");
|
||
cc.fx.GameConfig.GM_INFO.mean_Time = parseInt(time / 100 + "");
|
||
cc.fx.GameConfig.GM_INFO.mean_Time = cc.fx.GameConfig.GM_INFO.mean_Time / 10;
|
||
if (time > 10000)
|
||
time = (Math.random() * 10 + 5) * 100;
|
||
this.gameOver(time);
|
||
}
|
||
}
|
||
};
|
||
//上传每次操作数据
|
||
GameManager.prototype.setData = function () {
|
||
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.showNumber = function () {
|
||
if (this.show == false)
|
||
this.show = true;
|
||
else if (this.show == true)
|
||
this.show = false;
|
||
for (var i = 0; i < this.ball_Array.length; i++) {
|
||
this.ball_Array[i].getComponent("Sun").showNumber(this.show);
|
||
}
|
||
};
|
||
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, "ball", void 0);
|
||
__decorate([
|
||
property(cc.Prefab)
|
||
], GameManager.prototype, "qiu1", void 0);
|
||
__decorate([
|
||
property(cc.Prefab)
|
||
], GameManager.prototype, "qiu2", void 0);
|
||
__decorate([
|
||
property(cc.Prefab)
|
||
], GameManager.prototype, "qiu3", void 0);
|
||
__decorate([
|
||
property(cc.Prefab)
|
||
], GameManager.prototype, "linePrefab", void 0);
|
||
__decorate([
|
||
property(cc.Node)
|
||
], GameManager.prototype, "hit", void 0);
|
||
__decorate([
|
||
property(cc.Label)
|
||
], GameManager.prototype, "levelLabel", 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxHYW1lTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTO0FBQ0gsSUFBQSxLQUFzQixFQUFFLENBQUMsVUFBVSxFQUFsQyxPQUFPLGFBQUEsRUFBRSxRQUFRLGNBQWlCLENBQUM7QUFFMUM7SUFBeUMsK0JBQVk7SUFBckQ7UUFBQSxxRUF3NUJDO1FBdDVCRyxVQUFJLEdBQVksSUFBSSxDQUFDO1FBRXJCLFVBQUksR0FBYyxJQUFJLENBQUM7UUFFdkIsVUFBSSxHQUFjLElBQUksQ0FBQztRQUV2QixVQUFJLEdBQWMsSUFBSSxDQUFDO1FBRXZCLGdCQUFVLEdBQWMsSUFBSSxDQUFDO1FBRTdCLFNBQUcsR0FBWSxJQUFJLENBQUM7UUFDcEIsU0FBRyxHQUFZLElBQUksQ0FBQztRQUNwQixTQUFHLEdBQVksSUFBSSxDQUFDO1FBQ3BCLFVBQUksR0FBYSxJQUFJLENBQUM7UUFDdEIsV0FBSyxHQUFZLEtBQUssQ0FBQztRQUN2QixXQUFLLEdBQVksS0FBSyxDQUFDO1FBQ3ZCLFVBQUksR0FBWSxLQUFLLENBQUM7UUFDdEIsVUFBSSxHQUFZLEtBQUssQ0FBQztRQW9CdEIsZ0JBQVUsR0FBYSxJQUFJLENBQUM7O0lBaTNCaEMsQ0FBQztJQTEyQkcsNEJBQU0sR0FBTixjQUFXLENBQUM7SUFDWiwyQkFBSyxHQUFMO1FBQ0ksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1gsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPO0lBQ1AsMEJBQUksR0FBSjtRQUNJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNw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b0JBQzFCLElBQUcsQ0FBQyxJQUFJLENBQUMsRUFBQzt3QkFDTixJQUFHLEtBQUksQ0FBQyxJQUFJLElBQUksS0FBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQzs0QkFDOUIsS0FBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxLQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUM3RixLQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDaEM7cUJBQ0o7b0JBRUQsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFJLENBQUMsSUFBSSxDQUFDO3lCQUNsQixFQUFFLENBQUMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUMsSUFBSSxFQUFDLEVBQUMsQ0FBQyxFQUFDLEtBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxLQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDO3lCQUM3RSxFQUFFLENBQUMsR0FBRyxFQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsRUFBQyxDQUFDO3lCQUNqQixJQUFJLENBQUM7d0JBQ0YsS0FBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDNUYsSUFBRyxD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SSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzt3QkFDcEMsVUFBVSxHQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO3FCQUNuRDt5QkFDSSxJQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBRSxJQUFJLENBQUMsRUFBQzt3QkFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzt3QkFDcEMsVUFBVSxHQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO3FCQUNuRDt5QkFDSSxJQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBRSxJQUFJLENBQUMsRUFBQzt3QkFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzt3QkFDcEMsVUFBVSxHQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO3FCQUNuRDt5QkFDSSxJQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBRSxHQUFHLENBQUMsRUFBQzt3QkFDckMsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBQyxJQUFJLENBQUMsTUFBTSxHQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUksQ0FBQyxDQUFFO3dCQUNsRyxVQUFVLEdBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7cUJBQ25EO3lCQUNHO3dCQUNBLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxD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Q0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ0QsNEJBQU0sR0FBTixVQUFRLEVBQUU7SUFDVixDQUFDO0lBcjVCRDtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOzZDQUNHO0lBRXJCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7NkNBQ0c7SUFFdkI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQzs2Q0FDRztJQUV2QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDOzZDQUNHO0lBRXZCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7bURBQ1M7SUFFN0I7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzs0Q0FDRTtJQTJCcEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQzttREFDUztJQXZDWCxXQUFXO1FBRC9CLE9BQU87T0FDYSxXQUFXLENBdzVCL0I7SUFBRCxrQkFBQztDQXg1QkQsQUF3NUJDLENBeDVCd0MsRUFBRSxDQUFDLFNBQVMsR0F3NUJwRDtrQkF4NUJvQixXQUFXIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8g5Li75ri45oiP5o6n5Yi257G7XHJcbmNvbnN0IHtjY2NsYXNzLCBwcm9wZXJ0eX0gPSBjYy5fZGVjb3JhdG9yO1xyXG5AY2NjbGFzc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lTWFuYWdlciBleHRlbmRzIGNjLkNvbXBvbmVudCB7XHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIGJhbGw6IGNjLk5vZGUgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLlByZWZhYilcclxuICAgIHFpdTE6IGNjLlByZWZhYiA9IG51bGw7XHJcbiAgICBAcHJvcGVydHkoY2MuUHJlZmFiKVxyXG4gICAgcWl1MjogY2MuUHJlZmFiID0gbnVsbDtcclxuICAgIEBwcm9wZXJ0eShjYy5QcmVmYWIpXHJcbiAgICBxaXUzOiBjYy5QcmVmYWIgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLlByZWZhYilcclxuICAgIGxpbmVQcmVmYWI6IGNjLlByZWZhYiA9IG51bGw7XHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIGhpdDogY2MuTm9kZSA9IG51bGw7XHJcbiAgICBiZzE6IGNjLk5vZGUgPSBudWxsO1xyXG4gICAgYmcyOiBjYy5Ob2RlID0gbnVsbDtcclxuICAgIHRpbWU6IGNjLkxhYmVsID0gbnVsbDtcclxuICAgIGJlZ2luOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBmdWh1bzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgb3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgc2hvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgY291bnRUaW1lOm51bWJlcjtcclxuICAgIHRpbWVDb3VudDpudW1iZXI7XHJcbiAgICBmaXRUb3A6bnVtYmVyO1xyXG4gICAgZml0Qm90Om51bWJlcjtcclxuICAgIGxldmVsOm51bWJlcjtcclxuICAgIGNsaWNrTm93Om51bWJlcjtcclxuICAgIHN0YXJ0VGltZTpudW1iZXI7XHJcbiAgICBvdmVyVGltZTpudW1iZXI7XHJcbiAgICB3aW5UaW1lOm51bWJlcjtcclxuICAgIGNsaWNrQ291bnQ6bnVtYmVyO1xyXG4gICAgdGltZVN0YXJ0Om51bWJlcjtcclxuICAgIHJvdXRlX0FycmF5OiBhbnlbXTtcclxuICAgIG5vd19BcnJheTogYW55W107XHJcbiAgICBiYWxsX0FycmF5OiBhbnlbXTtcclxuICAgIExpbmVfQXJyYXk6IGFueVtdO1xyXG4gICAgUG9zX0FycmF5OiBhbnlbXTtcclxuICAgIHRpbWVfQXJyYXk6IGFueVtdO1xyXG4gICAgY29sb3JfQXJyYXk6IGFueVtdO1xyXG4gICAgQHByb3BlcnR5KGNjLkxhYmVsKVxyXG4gICAgbGV2ZWxMYWJlbDogY2MuTGFiZWwgPSBudWxsO1xyXG4gICAgc3RhdGljIF9pbnN0YW5jZTogYW55O1xyXG4gICAgbW92ZUFycmF5OiBudW1iZXJbXTtcclxuICAgIHJlcGVhdDogbnVtYmVyO1xyXG4gICAgbnVtYmVyUmVwZWF0OiBudW1iZXI7XHJcbiAgICByb3VuZDogbnVtYmVyO1xyXG4gICAgcGF1c2U6IGJvb2xlYW47XHJcbiAgICBvbkxvYWQgKCkge31cclxuICAgIHN0YXJ0ICgpIHtcclxuICAgICAgICB0aGlzLmZpdCgpO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG4gICAgLy/liJ3lp4vljJbmlbDmja5cclxuICAgIGluaXQoKXtcclxuICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJHYW1lT3ZlclwiKS56SW5kZXggPSAxMDA7XHJcbiAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiR2FtZU92ZXJcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5iYWxsLnpJbmRleCA9IDEwMDtcclxuICAgICAgICB0aGlzLmJnMSA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImJnMVwiKTtcclxuICAgICAgICB0aGlzLmJnMiA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImJnMlwiKTtcclxuICAgICAgICB0aGlzLnRpbWUgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJUb3BcIikuZ2V0Q2hpbGRCeU5hbWUoXCJ0aW1lXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XHJcbiAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwic2hvd0J0blwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmJlZ2luID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vdmVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5mdWh1byA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wYXVzZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IDA7IFxyXG4gICAgICAgIHRoaXMubGV2ZWwgPSAyO1xyXG4gICAgICAgIHRoaXMuY291bnRUaW1lID0gNjA7XHJcbiAgICAgICAgaWYoY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmN1c3RvbSAhPSAwKXtcclxuICAgICAgICAgICAgdGhpcy5sZXZlbCA9IGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5jdXN0b207XHJcbiAgICAgICAgICAgIC8vIHRoaXMubGV2ZWxMYWJlbC5zdHJpbmcgPSB0aGlzLmxldmVsICsgXCJcIjtcclxuICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmN1c3RvbSArPSAxO1xyXG4gICAgICAgICAgICB0aGlzLmNvdW50VGltZSA9IDEyMDAwMDAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0aGlzLmxldmVsTGFiZWwuc3RyaW5nID0gdGhpcy5sZXZlbCArIFwiXCI7XHJcbiAgICAgICAgdGhpcy50aW1lQ291bnQgPSAwLjE7XHJcbiAgICAgICAgdGhpcy5jbGlja05vdyA9IDA7XHJcbiAgICAgICAgdGhpcy5jbGlja0NvdW50ID0gMDtcclxuICAgICAgICB0aGlzLnRpbWVTdGFydCA9IDA7XHJcbiAgICAgICAgdGhpcy5yZXBlYXQgPSAtMTtcclxuICAgICAgICB0aGlzLm51bWJlclJlcGVhdCA9IC0xO1xyXG4gICAgICAgIHRoaXMucm91dGVfQXJyYXkgPSBbXTtcclxuICAgICAgICB0aGlzLm1vdmVBcnJheSA9IFtdO1xyXG4gICAgICAgIHRoaXMubm93X0FycmF5ID0gW107XHJcbiAgICAgICAgdGhpcy5iYWxsX0FycmF5ID0gW107XHJcbiAgICAgICAgdGhpcy5Qb3NfQXJyYXkgPSBbXTtcclxuICAgICAgICB0aGlzLnRpbWVfQXJyYXkgPSBbXTtcclxuICAgICAgICB0aGlzLmNvbG9yX0FycmF5ID0gW107XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HQU1FX0RBVEEgPSBbXTtcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8uc3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDtcclxuICAgICAgICB0aGlzLm92ZXJUaW1lID0gMDtcclxuICAgICAgICB0aGlzLndpblRpbWUgPSAwO1xyXG4gICAgICAgIGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy50b3RhbCA9IDA7XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLm1lYW5fVGltZSA9IDA7XHJcbiAgICAgICAgdGhpcy5zY2hlZHVsZSh0aGlzLnVwZGF0ZUNvdW50RG93blRpbWUsMSk7XHJcbiAgICAgICAgdGhpcy5zdGFydEdhbWUoKTtcclxuICAgIH1cclxuICAgIC8v5qC55o2u5piv5ZCm5YWo6Z2i5bGP77yM5YGa54us56uL6YCC6YWN5pa56Z2iXHJcbiAgICBmaXQoKXtcclxuICAgICAgICB0aGlzLmZpdFRvcCA9IDQ1MDsgIC8vNjAwXHJcbiAgICAgICAgdGhpcy5maXRCb3QgPSAtNjAwOyAvLy03MDBcclxuICAgICAgICB2YXIgamcgPSB0aGlzLnNldEZpdCgpO1xyXG4gICAgICAgIGlmKCFqZyl7XHJcbiAgICAgICAgICAgIHRoaXMuZml0VG9wID0gNjAwO1xyXG4gICAgICAgICAgICB0aGlzLmZpdEJvdCA9IC03MDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy/liKTmlq3lhajpnaLlsY9cclxuICAgIGdldFNldFNjcmVlblJlc29sdXRpb25GbGFnICgpIHtcclxuICAgICAgICBsZXQgc2l6ZSA9IGNjLndpblNpemU7XHJcbiAgICAgICAgbGV0IHdpZHRoID0gc2l6ZS53aWR0aDtcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQ7XHJcbiAgICAgICAgaWYgKChoZWlnaHQgLyB3aWR0aCkgPiAoMTYuMiAvIDkpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAvL+WIpOaWreWFqOmdouWxj+mAgumFjVxyXG4gICAgc2V0Rml0ICgpIHtcclxuICAgICAgICBsZXQgZmxhZyA9IHRoaXMuZ2V0U2V0U2NyZWVuUmVzb2x1dGlvbkZsYWcoKTtcclxuICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmbGFnO1xyXG4gICAgfVxyXG4gICAgLy/ov5Tlm57pppbpobVcclxuICAgIGJhY2tTY2VuZSgpe1xyXG4gICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkxvYWRTY2VuZVwiKTtcclxuICAgIH1cclxuICAgIC8v5LiL5LiA5YWz77yM5oiW6ICF6YeN5paw5byA5aeL77yM5oiW6ICF6L+U5Zue5LiK5LiA5YWz77yM5qC55o2ubGV2ZWzlhrPlrppcclxuICAgIHJlU3RhcnQodHlwZSl7XHJcbiAgICAgICAgLy8gaWYoY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmN1c3RvbSAhPSAwKXtcclxuICAgICAgICAvLyAgICAgY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiTG9hZFNjZW5lXCIpO1xyXG4gICAgICAgIC8vICAgICByZXR1cm47XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInNob3dCdG5cIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95TGluZSgpO1xyXG4gICAgICAgIHRoaXMudGltZUNvdW50ID0gMC4xO1xyXG4gICAgICAgIHRoaXMuY2xpY2tOb3cgPSAwO1xyXG4gICAgICAgIHRoaXMudGltZVN0YXJ0ID0gMDtcclxuICAgICAgICB0aGlzLnJlcGVhdCA9IC0xO1xyXG4gICAgICAgIHRoaXMubnVtYmVyUmVwZWF0ID0gLTE7XHJcbiAgICAgICAgdGhpcy5iZWdpbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucm91dGVfQXJyYXkgPSBbXTtcclxuICAgICAgICB0aGlzLm5vd19BcnJheSA9IFtdO1xyXG4gICAgICAgIHRoaXMuYmFsbF9BcnJheSA9IFtdO1xyXG4gICAgICAgIHRoaXMuUG9zX0FycmF5ID0gW107XHJcbiAgICAgICAgdGhpcy5tb3ZlQXJyYXkgPSBbXTtcclxuICAgICAgICB0aGlzLnRpbWVfQXJyYXkgPSBbXTtcclxuICAgICAgICB0aGlzLmNvbG9yX0FycmF5ID0gW107XHJcbiAgICAgICAgaWYodHlwZSA9PSAwKXtcclxuICAgICAgICAgICAgdGhpcy5iZ01vdmUoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodHlwZSA9PSAxKXtcclxuICAgICAgICAgICAgdGhpcy5zdGFydEdhbWUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDIpe1xyXG4gICAgICAgICAgICB0aGlzLmJnTW92ZSgtMSk7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcbiAgICAvL+iOt+WPluaXtumXtOaIs1xyXG4gICAgZ2V0VGltZSgpe1xyXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIHJldHVybiB0aW1lc3RhbXA7XHJcbiAgICB9XHJcbiAgICAvL+iOt+iDnFxyXG4gICAgcGFzc0xldmVsKCl7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95TGluZSgpO1xyXG4gICAgICAgIGlmKHRoaXMub3ZlciA9PSBmYWxzZSAmJiB0aGlzLmNvdW50VGltZSA+PSAwKXtcclxuICAgICAgICAgICAgbGV0IHRpbWVBcnJheSA9IFtdO1xyXG4gICAgICAgICAgICBsZXQgdGltZUNvdW50ID0gMDtcclxuICAgICAgICAgICAgbGV0IGJhbGwgPSB0aGlzLmJhbGxfQXJyYXlbMF07XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT0xOyBpPCB0aGlzLmJhbGxfQXJyYXkubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICAgICAgbGV0IHRpbWUgPSB0aGlzLmNhbGN1bGF0ZURpc3RhbmNlKHRoaXMuYmFsbF9BcnJheVtpXS54LHRoaXMuYmFsbF9BcnJheVtpXS55LFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmFsbF9BcnJheVtpLTFdLngsdGhpcy5iYWxsX0FycmF5W2ktMV0ueSwyKTtcclxuICAgICAgICAgICAgICAgIHRpbWVBcnJheS5wdXNoKHRpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvcihsZXQgaz0xOyBrPCB0aGlzLmJhbGxfQXJyYXkubGVuZ3RoOyBrKyspe1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MudHdlZW4oYmFsbClcclxuICAgICAgICAgICAgICAgICAgICAudG8odGltZUFycmF5W2stMV0se3g6dGhpcy5iYWxsX0FycmF5W2tdLngseTp0aGlzLmJhbGxfQXJyYXlba10ueX0pXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFsbF9BcnJheVtrXS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoayA9PSB0aGlzLmJhbGxfQXJyYXkubGVuZ3RoLTEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWxsLm9wYWNpdHkgPSAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWxsLnBvc2l0aW9uID0gY2MudjMoYmFsbC54LGJhbGwueSwwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWxsLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTdW4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlU3RhcnQoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgICAgIH0sIHRpbWVDb3VudCoxMDAwKTtcclxuICAgICAgICAgICAgICAgIHRpbWVDb3VudCArPSAodGltZUFycmF5W2stMV0rMC4xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8v5aSx6LSlXHJcbiAgICBsb3NlTGV2ZWwodHlwZSl7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95TGluZSgpO1xyXG4gICAgICAgIGlmKHRoaXMub3ZlciA9PSBmYWxzZSAmJiB0aGlzLmNvdW50VGltZSA+PSAwKXtcclxuICAgICAgICAgICAgbGV0IGJhbGwgPSB0aGlzLmJhbGxfQXJyYXlbMF07XHJcbiAgICAgICAgICAgIGZvcihsZXQgaz0xOyBrPCB0aGlzLmJhbGxfQXJyYXkubGVuZ3RoOyBrKyspe1xyXG4gICAgICAgICAgICAgICAgY2MudHdlZW4odGhpcy5iYWxsX0FycmF5W2tdKVxyXG4gICAgICAgICAgICAgICAgLnRvKDIse3g6YmFsbC54LHk6YmFsbC55fSlcclxuICAgICAgICAgICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmFsbF9BcnJheVtrXS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZihrID09IHRoaXMuYmFsbF9BcnJheS5sZW5ndGgtMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFsbC5vcGFjaXR5ID0gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhbGwucG9zaXRpb24gPSBjYy52MyhiYWxsLngsYmFsbC55LDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU3VuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVTdGFydCh0eXBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0KClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8v5riF55CG5aSq6ZizXHJcbiAgICBjbGVhclN1bigpe1xyXG4gICAgICAgIGZvcihsZXQgaz0wOyBrPCB0aGlzLmJhbGxfQXJyYXkubGVuZ3RoOyBrKyspe1xyXG4gICAgICAgICAgICB0aGlzLmJhbGxfQXJyYXlba10ucmVtb3ZlRnJvbVBhcmVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmJhbGxfQXJyYXlba10gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8v54K55Ye75aSq6Ziz5omn6KGM5pa55rOVXHJcbiAgICBjbGlja1N1bihkYXRhKXtcclxuICAgICAgICBpZih0aGlzLmJlZ2luID09IHRydWUpe1xyXG4gICAgICAgICAgICB0aGlzLmNsaWNrQ291bnQgKz0gMTtcclxuICAgICAgICAgICAgbGV0IGNsaWNrVGltZSA9ICBjYy5meC5HYW1lVG9vbC5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIHRoaXMudGltZV9BcnJheS5wdXNoKChjbGlja1RpbWUgLSB0aGlzLnRpbWVTdGFydCkpXHJcbiAgICAgICAgICAgIHRoaXMudGltZVN0YXJ0ID0gIGNjLmZ4LkdhbWVUb29sLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgaWYoZGF0YSA9PSB0aGlzLmNsaWNrTm93KXtcclxuICAgICAgICAgICAgICAgIGNjLmZ4LkF1ZGlvTWFuYWdlci5faW5zdGFuY2UucGxheUF1ZGlvQnV0dG9uKCk7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmNsaWNrTm93ID4gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVMaW5lKGNjLnYyKHRoaXMuYmFsbF9BcnJheVt0aGlzLmNsaWNrTm93LTFdLngsdGhpcy5iYWxsX0FycmF5W3RoaXMuY2xpY2tOb3ctMV0ueSksXHJcbiAgICAgICAgICAgICAgICAgICAgY2MudjIodGhpcy5iYWxsX0FycmF5W3RoaXMuY2xpY2tOb3ddLngsdGhpcy5iYWxsX0FycmF5W3RoaXMuY2xpY2tOb3ddLnkpLFxyXG4gICAgICAgICAgICAgICAgICAgIDAuMik7ICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsaWNrTm93ICs9IDE7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmJhbGxfQXJyYXlbdGhpcy5jbGlja05vdy0xXSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhbGxfQXJyYXlbdGhpcy5jbGlja05vdy0xXS5nZXRDaGlsZEJ5TmFtZShcImd1YW5nXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5jbGlja05vdyA9PSB0aGlzLm5vd19BcnJheS5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGF1c2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy50b3RhbCArPSB0aGlzLmNsaWNrTm93O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlclRpbWUgPSAgY2MuZnguR2FtZVRvb2wuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhcnRUaW1lID4gMCAmJiB0aGlzLm92ZXJUaW1lID4gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5tZWFuX1RpbWUgKz0gKHRoaXMub3ZlclRpbWUgLSB0aGlzLnN0YXJ0VGltZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaW5pc2hfdGltZSA9IHBhcnNlSW50KCh0aGlzLm92ZXJUaW1lIC0gdGhpcy5zdGFydFRpbWUpLzEwMCtcIlwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7IHRoaXMub3ZlclRpbWUgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2xvciA9IFwieVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMubGV2ZWwgPCA0ICYmIHRoaXMubGV2ZWwgPiAxKWNvbG9yID0gXCJ5clwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYodGhpcy5sZXZlbCA+PSA0KSBjb2xvciA9IFwieXJiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHdpbiA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIldpblwiKTtcclxuICAgICAgICAgICAgICAgICAgICB3aW4uYWN0aXZlID0gdHJ1ZTsgd2luLnNldFNjYWxlKDApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNjLmZ4LkF1ZGlvTWFuYWdlci5faW5zdGFuY2UucGxheVdpbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91bmQgKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3VuQXJyYXkgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLm1vdmVBcnJheS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBtPTAgOyBtPHRoaXMubW92ZUFycmF5Lmxlbmd0aDttKyspe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobSA9PSB0aGlzLnJlcGVhdCB8fCBtID09IHRoaXMubnVtYmVyUmVwZWF0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVBcnJheVttXSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW5BcnJheS5wdXNoKHRoaXMubW92ZUFycmF5W21dKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IG09MCA7IG08dGhpcy5iYWxsX0FycmF5Lmxlbmd0aDttKyspe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobSA9PSB0aGlzLnJlcGVhdCB8fCBtID09IHRoaXMubnVtYmVyUmVwZWF0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW5BcnJheS5wdXNoKDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bkFycmF5LnB1c2goMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19EQVRBID0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6MSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6dHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kOnRoaXMucm91bmQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbFN1bkNvdW50OnRoaXMubm93X0FycmF5Lmxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVkU3VuQ291bnQ6Y2MuZnguR2FtZUNvbmZpZy5MRVZFTF9JTkZPW3RoaXMubGV2ZWwtMV0ubW92ZU51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1blNwZWVkOmNjLmZ4LkdhbWVDb25maWcuTEVWRUxfSU5GT1t0aGlzLmxldmVsLTFdLm1vdmVTcGVlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOmZpbmlzaF90aW1lLzEwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmljdWx0eUxldmVsOnRoaXMubGV2ZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW5MaXN0OnN1bkFycmF5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcFRpbWVMaXN0OnRoaXMudGltZV9BcnJheSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmRlcjp0aGlzLmNvdW50VGltZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY2MuZnguR2FtZUNvbmZpZy5DTElDS19EQVRBLmR1cmF0aW9uID4gNTApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX0RBVEEuZHVyYXRpb24gPSA1MDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MudHdlZW4od2luKVxyXG4gICAgICAgICAgICAgICAgICAgIC5kZWxheSgwLjQpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKDAuMDEse3NjYWxlOjIuNX0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKDAuMzUse3NjYWxlOjF9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5kZWxheSgwLjQpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbi5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95TGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLm92ZXIgPT0gZmFsc2UgJiYgdGhpcy5jb3VudFRpbWUgPj0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmxldmVsID49IDE1KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8uc3VjY2VzcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZXZlbCArPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMubGV2ZWxMYWJlbC5zdHJpbmcgPSB0aGlzLmxldmVsICsgXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZ1aHVvID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhc3NMZXZlbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVsICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5sZXZlbExhYmVsLnN0cmluZyA9IHRoaXMubGV2ZWwgKyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZnVodW8gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFzc0xldmVsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldExvc3MoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8v5omn6KGM5aSx6LSlXHJcbiAgICBzZXRMb3NzKCl7XHJcbiAgICAgICAgY2MuZnguQXVkaW9NYW5hZ2VyLl9pbnN0YW5jZS5wbGF5V2FybmluZygpO1xyXG4gICAgICAgIHRoaXMuYmVnaW4gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm92ZXJUaW1lID0gIGNjLmZ4LkdhbWVUb29sLmdldFRpbWUoKTtcclxuICAgICAgICBpZih0aGlzLnN0YXJ0VGltZSA+IDAgJiYgdGhpcy5vdmVyVGltZSA+IDApe1xyXG4gICAgICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubWVhbl9UaW1lICs9ICh0aGlzLm92ZXJUaW1lIC0gdGhpcy5zdGFydFRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZmluaXNoX3RpbWUgPSBwYXJzZUludCgodGhpcy5vdmVyVGltZSAtIHRoaXMuc3RhcnRUaW1lKS8xMDArXCJcIik7XHJcbiAgICAgICAgaWYoZmluaXNoX3RpbWUgPiA1OCkgZmluaXNoX3RpbWUgPSA1ODtcclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IDA7IHRoaXMub3ZlclRpbWUgPSAwO1xyXG4gICAgICAgIGxldCBjb2xvciA9IFwieVwiO1xyXG4gICAgICAgIGlmKHRoaXMubGV2ZWwgPCA0ICYmIHRoaXMubGV2ZWwgPiAxKWNvbG9yID0gXCJ5clwiO1xyXG4gICAgICAgIGVsc2UgaWYodGhpcy5sZXZlbCA+PSA0KSBjb2xvciA9IFwieXJiXCI7XHJcbiAgICAgICAgdGhpcy5yb3VuZCArPSAxO1xyXG4gICAgICAgIGxldCBzdW5BcnJheSA9IFtdO1xyXG4gICAgICAgIGlmKHRoaXMubW92ZUFycmF5Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICBmb3IobGV0IG09MCA7IG08dGhpcy5tb3ZlQXJyYXkubGVuZ3RoO20rKyl7XHJcbiAgICAgICAgICAgICAgICBpZihtID09IHRoaXMucmVwZWF0IHx8IG0gPT0gdGhpcy5udW1iZXJSZXBlYXQpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZUFycmF5W21dID0gMjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHN1bkFycmF5LnB1c2godGhpcy5tb3ZlQXJyYXlbbV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIGZvcihsZXQgbT0wIDsgbTx0aGlzLmJhbGxfQXJyYXkubGVuZ3RoO20rKyl7XHJcbiAgICAgICAgICAgICAgICBpZihtID09IHRoaXMucmVwZWF0IHx8IG0gPT0gdGhpcy5udW1iZXJSZXBlYXQpe1xyXG4gICAgICAgICAgICAgICAgICAgIHN1bkFycmF5LnB1c2goMik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgc3VuQXJyYXkucHVzaCgwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX0RBVEEgPSBcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6MSxcclxuICAgICAgICAgICAgc3VjY2VzczpmYWxzZSxcclxuICAgICAgICAgICAgcm91bmQ6dGhpcy5yb3VuZCxcclxuICAgICAgICAgICAgdG90YWxTdW5Db3VudDp0aGlzLm5vd19BcnJheS5sZW5ndGgsXHJcbiAgICAgICAgICAgIG1vdmVkU3VuQ291bnQ6Y2MuZnguR2FtZUNvbmZpZy5MRVZFTF9JTkZPW3RoaXMubGV2ZWwtMV0ubW92ZU51bWJlcixcclxuICAgICAgICAgICAgc3VuU3BlZWQ6Y2MuZnguR2FtZUNvbmZpZy5MRVZFTF9JTkZPW3RoaXMubGV2ZWwtMV0ubW92ZVNwZWVkLFxyXG4gICAgICAgICAgICBkdXJhdGlvbjpmaW5pc2hfdGltZS8xMCxcclxuICAgICAgICAgICAgZGlmZmljdWx0eUxldmVsOnRoaXMubGV2ZWwsXHJcbiAgICAgICAgICAgIHN1bkxpc3Q6c3VuQXJyYXksXHJcbiAgICAgICAgICAgIHN0ZXBUaW1lTGlzdDp0aGlzLnRpbWVfQXJyYXksXHJcbiAgICAgICAgICAgIHJlbWFpbmRlcjp0aGlzLmNvdW50VGltZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihjYy5meC5HYW1lQ29uZmlnLkNMSUNLX0RBVEEuZHVyYXRpb24gPiA1MCl7XHJcbiAgICAgICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfREFUQS5kdXJhdGlvbiA9IDUwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgICAgICBpZih0aGlzLmZ1aHVvID09IHRydWUpe1xyXG4gICAgICAgICAgICB0aGlzLmZ1aHVvID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubG9zZUxldmVsKDEpO1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgaWYodGhpcy5sZXZlbCA+IDIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZXZlbCAtPSAxO1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5sZXZlbExhYmVsLnN0cmluZyA9IHRoaXMubGV2ZWwgKyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mdWh1byA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmZ1aHVvID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvc2VMZXZlbCgyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb3NlTGV2ZWwoMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG92ZXIgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJPdmVyXCIpO1xyXG4gICAgICAgIGNjLnR3ZWVuKG92ZXIpXHJcbiAgICAgICAgLnRvKDAuMjUse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAuZGVsYXkoMC4xKVxyXG4gICAgICAgIC50bygwLjIse29wYWNpdHk6MH0pXHJcbiAgICAgICAgLmRlbGF5KDAuMSlcclxuICAgICAgICAudG8oMC4xNSx7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgIC5kZWxheSgwLjEpXHJcbiAgICAgICAgLnRvKDAuMSx7b3BhY2l0eTowfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgIH1cclxuICAgIC8v5byA5aeL5ri45oiPXHJcbiAgICBzdGFydEdhbWUoKXtcclxuICAgICAgICBpZih0aGlzLm92ZXIgPT0gZmFsc2UgJiYgdGhpcy5jb3VudFRpbWUgPiAwKXtcclxuICAgICAgICAgICAgdGhpcy5wYXVzZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlU3VuKCk7XHJcbiAgICAgICAgICAgIHRoaXMuYmVnaW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgY2MudHdlZW4odGhpcy5iYWxsKVxyXG4gICAgICAgICAgICAudG8oMC41LHtvcGFjaXR5OjI1NSxzY2FsZToxLjN9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvL+aJp+ihjOWkqumYs+i/kOihjOWKqOeUu++8jOS7peWPiuWQjumdouenu+WKqOWKqOeUu1xyXG4gICAgcnVuR2FtZSgpe1xyXG4gICAgICAgIGxldCB0aW1lID0gLTY1MDtcclxuICAgICAgICBmb3IobGV0IGk9MDsgaTx0aGlzLm5vd19BcnJheS5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgIHRpbWUgPSB0aGlzLm5vd19BcnJheVtpXS50aW1lKjEwMDAgKyB0aW1lO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMub3ZlciA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXAgPSB0aGlzLm5vd19BcnJheVtpXS50aW1lQ291bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGVtcCA+IDAuNSkgdGVtcCA9IDAuNTtcclxuICAgICAgICAgICAgICAgICAgICBpZihpICE9IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmJhbGwgJiYgdGhpcy5ub3dfQXJyYXlbaV0pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVMaW5lKGNjLnYyKHRoaXMuYmFsbC54LHRoaXMuYmFsbC55KSxjYy52Mih0aGlzLm5vd19BcnJheVtpXS54LHRoaXMubm93X0FycmF5W2ldLnkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3dfQXJyYXlbaV0udGltZS10ZW1wKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBjYy50d2Vlbih0aGlzLmJhbGwpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKHRoaXMubm93X0FycmF5W2ldLnRpbWUtdGVtcCx7eDp0aGlzLm5vd19BcnJheVtpXS54LHk6dGhpcy5ub3dfQXJyYXlbaV0ueX0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKDAuMSx7c2NhbGU6MX0pXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhbGwoKCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVCYWxsKGksdGhpcy5ub3dfQXJyYXlbaV0uY29sb3IsdGhpcy5ub3dfQXJyYXlbaV0uc3BlZWQsdGhpcy5ub3dfQXJyYXlbaV0ucmVwZWF0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaSA9PSB0aGlzLm5vd19BcnJheS5sZW5ndGggLTEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWxsLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95TGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW5HYW1lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2MuZnguR2FtZUNvbmZpZy5MRVZFTF9JTkZPW3RoaXMubGV2ZWwtMV0ubW92ZU51bWJlcjwxKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXVzZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVBY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDE1MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdGFydCgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIHRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8v6K6+572u56e75Yqo6YeN5Y+g5pWw5o2uXHJcbiAgICBjcmVhdGVNb3ZlKCl7XHJcbiAgICAgICAgaWYodGhpcy5vdmVyID09IGZhbHNlKXtcclxuICAgICAgICAgICAgbGV0IGluZm8gPSBjYy5meC5HYW1lQ29uZmlnLkxFVkVMX0lORk9bdGhpcy5sZXZlbC0xXTtcclxuICAgICAgICAgICAgLy/mlLnlj5jnp7vliqjpgJ/luqZcclxuICAgICAgICAgICAgdmFyIHNwZWVkID0gNztcclxuICAgICAgICAgICAgaWYoaW5mby5tb3ZlU3BlZWQgPj0gMil7XHJcbiAgICAgICAgICAgICAgICBzcGVlZCA9IDcgLSBpbmZvLm1vdmVTcGVlZC8yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKGluZm8ucmVwZWF0ID09IDEpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBlYXQgID0gcGFyc2VJbnQoKE1hdGgucmFuZG9tKCkqKGluZm8ubnVtYmVyLTEpKzEpICsgXCJcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGVtcE51bWJlciA9IDA7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnJlcGVhdCA9IDQ7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnJlcGVhdCAgPiA0KXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWJlclJlcGVhdCA9IHBhcnNlSW50KE1hdGgucmFuZG9tKCkqNCArIFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMucmVwZWF0ICA9PSAoaW5mby5udW1iZXItMSkpICAvL+WmguaenOaYr+acgOWQjuS4gOS4qiDkuI3og73ot5/nrKzkuIDkuKrph43lj6BcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWJlclJlcGVhdCA9IHRoaXMucmVwZWF0ICAtIHBhcnNlSW50KCAoTWF0aC5yYW5kb20oKSozICsgMikrIFwiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcE51bWJlciA9ICB0aGlzLlBvc19BcnJheVt0aGlzLm51bWJlclJlcGVhdF07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Qb3NfQXJyYXlbdGhpcy5yZXBlYXQgXSA9IHRlbXBOdW1iZXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNleyAvLyAwIDEgMiAzIDQgNSBcclxuICAgICAgICAgICAgICAgICAgICAvLyA2IC0gMyAtIDEgID0gMiA0ICAwMSA0XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5yZXBlYXQgID09IDApIHRoaXMucmVwZWF0ICA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoKGluZm8ubnVtYmVyLTEtdGhpcy5yZXBlYXQgKSA9PSAyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJSZXBlYXQgPSBpbmZvLm51bWJlciAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBOdW1iZXIgPSAgdGhpcy5Qb3NfQXJyYXlbdGhpcy5udW1iZXJSZXBlYXRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKChpbmZvLm51bWJlci0xLXRoaXMucmVwZWF0ICkgPT0gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyUmVwZWF0ID0gdGhpcy5yZXBlYXQgLSAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTnVtYmVyID0gIHRoaXMuUG9zX0FycmF5W3RoaXMubnVtYmVyUmVwZWF0XTtcclxuICAgICAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoKGluZm8ubnVtYmVyLTEtdGhpcy5yZXBlYXQgKSA9PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJSZXBlYXQgPSB0aGlzLnJlcGVhdCAtIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBOdW1iZXIgPSAgdGhpcy5Qb3NfQXJyYXlbdGhpcy5udW1iZXJSZXBlYXRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZigoaW5mby5udW1iZXItMS10aGlzLnJlcGVhdCApID4gMil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyUmVwZWF0ID0gcGFyc2VJbnQoTWF0aC5yYW5kb20oKSooaW5mby5udW1iZXItdGhpcy5yZXBlYXQgLTIpICsgXCJcIikgKyB0aGlzLnJlcGVhdCAgKyAyIDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcE51bWJlciA9ICB0aGlzLlBvc19BcnJheVt0aGlzLm51bWJlclJlcGVhdF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyUmVwZWF0ID0gdGhpcy5yZXBlYXQgLSAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTnVtYmVyID0gIHRoaXMuUG9zX0FycmF5W3RoaXMubnVtYmVyUmVwZWF0XTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Qb3NfQXJyYXlbdGhpcy5yZXBlYXRdID0gdGVtcE51bWJlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihpbmZvLm1vdmVOdW1iZXIgPiAwKXtcclxuICAgICAgICAgICAgICAgIC8vMCAxIDIgMyA0IDUgNiA3IDggOVxyXG4gICAgICAgICAgICAgICAgLy/lj6/np7vliqjljLrliIZcclxuICAgICAgICAgICAgICAgIGxldCBwb3MgPSBjYy52MigwLDApO1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCB6PTA7IHo8aW5mby5udW1iZXI7IHorKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQXJyYXlbel0gPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBwPTA7IHA8aW5mby5tb3ZlTnVtYmVyOyBwKyspe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZUFycmF5W2luZm8ubnVtYmVyLTEtcF0gPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IHRpbWVPdXQgPSAwO1xyXG4gICAgICAgICAgICAgICAgLy/miZPkubHlj6/np7vliqjpobrluo9cclxuICAgICAgICAgICAgICAgIHRoaXMubW92ZUFycmF5LnNvcnQoKCkgPT4gTWF0aC5yYW5kb20oKSAtIDAuNSk7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vdmVBcnJheVswXSA9PSAxKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IHI9aW5mby5udW1iZXItMTsgcj49MDsgci0tKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5tb3ZlQXJyYXlbcl0gPT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVBcnJheVtyXSA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVBcnJheVswXSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvL+WwhumHjeWPoOeahOiuvue9ruS4uuS4jeWPr+enu+WKqCAgMSAxIDEgMSAwIDAgMSAwIDAgMCAgIC8gMiA3XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IGsgPTA7IGs8dGhpcy5tb3ZlQXJyYXkubGVuZ3RoO2srKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5tb3ZlQXJyYXlba109PTEgJiYgKGsgPT0gdGhpcy5yZXBlYXQgfHwgayA9PSB0aGlzLm51bWJlclJlcGVhdCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IG0gPSB0aGlzLm1vdmVBcnJheS5sZW5ndGgtMTsgbSA+PSAwOyBtLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobSAhPSBrICYmIHRoaXMubW92ZUFycmF5W21dID09IDAgJiYgbSE9IHRoaXMucmVwZWF0ICYmIG0hPSB0aGlzLm51bWJlclJlcGVhdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQXJyYXlbbV0gPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZUFycmF5W2tdID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtICA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBpID0wOyBpPHRoaXMuUG9zX0FycmF5Lmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMubW92ZUFycmF5IFtpXSA9PSAxKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZU91dCArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IHRoaXMuZ2V0UG9zMih0cnVlLGkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5Qb3NfQXJyYXlbaV0gPSBwb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRpbWVPdXQqMzAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy/np7vliqjlkI7mlbDmja4g6YeN5paw5Yi35LiA6YGN6LWL5YC8XHJcbiAgICB1cGRhdGVBcnJheSgpe1xyXG4gICAgICAgIGZvcihsZXQgaT0wOyBpPHRoaXMubm93X0FycmF5Lmxlbmd0aC0xO2krKyl7XHJcbiAgICAgICAgICAgIHRoaXMubm93X0FycmF5W2ldLnggPSB0aGlzLlBvc19BcnJheVtpXS54O1xyXG4gICAgICAgICAgICB0aGlzLm5vd19BcnJheVtpXS55ID0gdGhpcy5Qb3NfQXJyYXlbaV0ueTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvL+WkqumYs+WIneWni+WMluWQjuenu+WKqOaWueazlVxyXG4gICAgbW92ZUFjdGlvbigpe1xyXG4gICAgICAgIHRoaXMudXBkYXRlQXJyYXkoKTtcclxuICAgICAgICBsZXQgbW92ZUFycmF5ID0gdGhpcy5tb3ZlQXJyYXk7XHJcbiAgICAgICAgbGV0IGluZm8gPSBjYy5meC5HYW1lQ29uZmlnLkxFVkVMX0lORk9bdGhpcy5sZXZlbC0xXTtcclxuICAgICAgICAvL+aUueWPmOenu+WKqOmAn+W6plxyXG4gICAgICAgIHZhciBzcGVlZCA9IDc7XHJcbiAgICAgICAgaWYoaW5mby5tb3ZlU3BlZWQgPj0gMil7XHJcbiAgICAgICAgICAgIHNwZWVkID0gNyAtIGluZm8ubW92ZVNwZWVkLzI7XHJcbiAgICAgICAgfSAgXHJcbiAgICAgICAgaWYoaW5mby5tb3ZlTnVtYmVyID4gMCl7XHJcbiAgICAgICAgICAgIC8vMCAxIDIgMyA0IDUgNiA3IDggOVxyXG4gICAgICAgICAgICAvL+WPr+enu+WKqOWMuuWIhlxyXG4gICAgICAgICAgICAvL+WwhumHjeWPoOeahOiuvue9ruS4uuS4jeWPr+enu+WKqCAgMSAxIDEgMSAwIDAgMSAwIDAgMCAgIC8gMiA3XHJcbiAgICAgICAgICAgIGZvcihsZXQgayA9MDsgazx0aGlzLm1vdmVBcnJheS5sZW5ndGg7aysrKXtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubW92ZUFycmF5W2tdPT0xICYmIChrID09IHRoaXMucmVwZWF0IHx8IGsgPT0gdGhpcy5udW1iZXJSZXBlYXQpKXtcclxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IG0gPSB0aGlzLm1vdmVBcnJheS5sZW5ndGgtMTsgbSA+PSAwOyBtLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihtICE9IGsgJiYgdGhpcy5tb3ZlQXJyYXlbbV0gPT0gMCAmJiBtIT0gdGhpcy5yZXBlYXQgJiYgbSE9IHRoaXMubnVtYmVyUmVwZWF0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZUFycmF5W21dID0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZUFycmF5W2tdID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGxhc3ROdW1iZXIgPSAwO1xyXG4gICAgICAgICAgICAvL+mUgeWumuacgOWQjuS4gOS4quWPr+enu+WKqOeahFxyXG4gICAgICAgICAgICBmb3IobGV0IGogPTA7IGo8bW92ZUFycmF5Lmxlbmd0aDtqKyspe1xyXG4gICAgICAgICAgICAgICAgaWYobW92ZUFycmF5W2pdPT0xKXtcclxuICAgICAgICAgICAgICAgICAgICBsYXN0TnVtYmVyID0gajtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IobGV0IGkgPTA7IGk8dGhpcy5iYWxsX0FycmF5Lmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgaWYobW92ZUFycmF5W2ldID09IDEpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGkgIT0gbGFzdE51bWJlcil7ICAgIC8v5aaC5p6c5LiN5piv5pyA5ZCO5LiA5Liq56e75Yqo55qEXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lID0gc3BlZWQqdGhpcy5jYWxjdWxhdGVEaXN0YW5jZSh0aGlzLmJhbGxfQXJyYXlbaV0ueCx0aGlzLmJhbGxfQXJyYXlbaV0ueSx0aGlzLlBvc19BcnJheVtpXS54LHRoaXMuUG9zX0FycmF5W2ldLnksMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFsbF9BcnJheVtpXS5nZXRDb21wb25lbnQoXCJTdW5cIikubW92ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuYmFsbF9BcnJheVtpXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRvKHRpbWUse3Bvc2l0aW9uOnRoaXMuUG9zX0FycmF5W2ldfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhbGxfQXJyYXlbaV0uZ2V0Q29tcG9uZW50KFwiU3VuXCIpLm1vdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8v5aaC5p6c5piv5pyA5ZCO5LiA5LiqXHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpbWUgPSBzcGVlZCp0aGlzLmNhbGN1bGF0ZURpc3RhbmNlKHRoaXMuYmFsbF9BcnJheVtpXS54LHRoaXMuYmFsbF9BcnJheVtpXS55LHRoaXMuUG9zX0FycmF5W2ldLngsdGhpcy5Qb3NfQXJyYXlbaV0ueSwzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWxsX0FycmF5W2ldLmdldENvbXBvbmVudChcIlN1blwiKS5tb3ZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2MudHdlZW4odGhpcy5iYWxsX0FycmF5W2ldKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudG8odGltZSx7cG9zaXRpb246dGhpcy5Qb3NfQXJyYXlbaV19KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhbGxfQXJyYXlbaV0uZ2V0Q29tcG9uZW50KFwiU3VuXCIpLm1vdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8v5q+P5qyh6YeN5paw5byA5aeL5paw5LiA6L2u5YS/5ri45oiPXHJcbiAgICBiZWdpbkdhbWUoKXtcclxuICAgICAgICB0aGlzLmJlZ2luID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9ICBjYy5meC5HYW1lVG9vbC5nZXRUaW1lKCk7XHJcbiAgICAgICAgdGhpcy50aW1lU3RhcnQgPSAgY2MuZnguR2FtZVRvb2wuZ2V0VGltZSgpO1xyXG4gICAgICAgIHRoaXMucGF1c2UgPSBmYWxzZTtcclxuICAgICAgICAvLyB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJzaG93QnRuXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy/liJvlu7rlpKrpmLPmiYDpnIDmlbDmja5cclxuICAgIGNyZWF0ZVN1bigpe1xyXG4gICAgICAgIGxldCBsZXZlbERhdGEgPSBjYy5meC5HYW1lQ29uZmlnLkxFVkVMX0lORk9bdGhpcy5sZXZlbC0xXTtcclxuICAgICAgICBsZXQgdGllbU91dCA9IDA7XHJcbiAgICAgICAgZm9yKGxldCBsPTA7IGw8bGV2ZWxEYXRhLm51bWJlcjtsKyspe1xyXG4gICAgICAgICAgICB0aWVtT3V0ICs9IDE7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5vdmVyID09IGZhbHNlKXtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9zID0gdGhpcy5nZXRQb3MoZmFsc2UsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5Qb3NfQXJyYXkucHVzaChwb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuUG9zX0FycmF5Lmxlbmd0aCA9PSBsZXZlbERhdGEubnVtYmVyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVNb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlUG9zKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSwgdGllbU91dCoxMDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8v5Yib5bu65aSq6Ziz5L2N572u77yM6aKc6Imy5L+h5oGv562J5pWw5o2uXHJcbiAgICBjcmVhdGVQb3MoKXtcclxuICAgICAgICBsZXQgZGF0YSA9IHt4OnRoaXMuYmFsbC54LHk6dGhpcy5iYWxsLnksdGltZTowLHRpbWVDb3VudDowLGNvbG9yOjAsc3BlZWQ6MCxyZXBlYXQ6ZmFsc2V9O1xyXG4gICAgICAgIGxldCBsZXZlbERhdGEgPSBjYy5meC5HYW1lQ29uZmlnLkxFVkVMX0lORk9bdGhpcy5sZXZlbC0xXTtcclxuICAgICAgICAvL+minOiJsuWMuuWIhlxyXG4gICAgICAgIGxldCBjb2xvckFycmF5ID0gWzAsMV07XHJcbiAgICAgICAgZm9yKGxldCBqPTA7IGo8bGV2ZWxEYXRhLm51bWJlci0yO2orKyl7XHJcbiAgICAgICAgICAgIGxldCBjb2xvclRlbXAgPSBwYXJzZUludChNYXRoLnJhbmRvbSgpKjMrXCJcIik7XHJcbiAgICAgICAgICAgIGlmKGxldmVsRGF0YS5udW1iZXIgPCA2ICYmIGNvbG9yVGVtcCA9PSAyKSBjb2xvclRlbXAgPSAwO1xyXG4gICAgICAgICAgICBjb2xvckFycmF5LnB1c2goY29sb3JUZW1wKTtcclxuICAgICAgICAgICAgY29sb3JBcnJheS5zb3J0KCgpID0+IE1hdGgucmFuZG9tKCkgLSAwLjUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb2xvckFycmF5LnNvcnQoKCkgPT4gTWF0aC5yYW5kb20oKSAtIDAuNSk7XHJcbiAgICAgICAgaWYobGV2ZWxEYXRhLm51bWJlciA9PSA0KSBjb2xvckFycmF5ID0gWzAsMCwwLDBdO1xyXG4gICAgICAgIHRoaXMuY29sb3JfQXJyYXkgPSBjb2xvckFycmF5O1xyXG4gICAgICAgIC8v5a2Y5YKo5aSq6Ziz5pWw5o2uXHJcbiAgICAgICAgZm9yKGxldCBpPTA7IGk8bGV2ZWxEYXRhLm51bWJlcjtpKyspe1xyXG4gICAgICAgICAgICBsZXQgdGltZUNvdW50ID0gdGhpcy50aW1lQ291bnQgKyAoMC42LXRoaXMuY2FsY3VsYXRlRGlzdGFuY2UodGhpcy5iYWxsLngsdGhpcy5iYWxsLnksdGhpcy5Qb3NfQXJyYXlbaV0ueCx0aGlzLlBvc19BcnJheVtpXS55LDEpKTtcclxuICAgICAgICAgICAgbGV0IHRpbWUgPSB0aGlzLmNhbGN1bGF0ZURpc3RhbmNlKHRoaXMuYmFsbC54LHRoaXMuYmFsbC55LHRoaXMuUG9zX0FycmF5W2ldLngsdGhpcy5Qb3NfQXJyYXlbaV0ueSwxKSt0aW1lQ291bnQ7XHJcbiAgICAgICAgICAgIGRhdGEgPSB7eDp0aGlzLlBvc19BcnJheVtpXS54LHk6dGhpcy5Qb3NfQXJyYXlbaV0ueSx0aW1lOnRpbWUsdGltZUNvdW50OnRpbWVDb3VudCxjb2xvcjpjb2xvckFycmF5W2ldLHNwZWVkOmxldmVsRGF0YS5tb3ZlU3BlZWQscmVwZWF0OmZhbHNlfTtcclxuICAgICAgICAgICAgaWYodGhpcy5yZXBlYXQgPT0gaSl7XHJcbiAgICAgICAgICAgICAgICBkYXRhLnJlcGVhdCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLm51bWJlclJlcGVhdCA9PSBpKXtcclxuICAgICAgICAgICAgICAgIGRhdGEucmVwZWF0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm5vd19BcnJheS5wdXNoKGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJ1bkdhbWUoKTtcclxuICAgIH1cclxuICAgIC8v6I635Y+W77yMTuS4quWkqumYs+S9jee9rueahOaWueazle+8jOWSjFBPUzLliIblvIDkuKTkuKrmlrnms5XvvIzpmLLmraLpgJLlvZLmuqLlh7pcclxuICAgIGdldFBvcyh0eXBlLG51bSl7XHJcbiAgICAgICAgbGV0IHBvc1ggPSBNYXRoLnJhbmRvbSgpKjYyMCAtIDMxMDtcclxuICAgICAgICBsZXQgcG9zWSA9IE1hdGgucmFuZG9tKCkqKHRoaXMuZml0VG9wLXRoaXMuZml0Qm90KSArIHRoaXMuZml0Qm90O1xyXG4gICAgICAgIGxldCBwb2ludCA9IGNjLnYyKHBvc1gscG9zWSk7XHJcbiAgICAgICAgaWYodGhpcy5Qb3NfQXJyYXkubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPHRoaXMuUG9zX0FycmF5Lmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgbGV0IGRpc3RhbmNlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmKGkgPT0gbnVtKSBwZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBkaXN0YW5jZSA9IHRoaXMuZ2V0RGlzdGFuY2UocG9zWCxwb3NZLHRoaXMuUG9zX0FycmF5W2ldLngsdGhpcy5Qb3NfQXJyYXlbaV0ueSxwZClcclxuICAgICAgICAgICAgICAgIGlmKGRpc3RhbmNlID09IGZhbHNlKXtcclxuICAgICAgICAgICAgICAgICAgICBpID0gMTAwMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnQgPSB0aGlzLmdldFBvcyh0eXBlLG51bSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZihkaXN0YW5jZSA9PSB0cnVlICYmIGkgPT0gKHRoaXMuUG9zX0FycmF5Lmxlbmd0aC0xKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgaSA9IDEwMDAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBvaW50O1xyXG4gICAgfVxyXG4gICAgLy/ojrflj5bvvIxO5Liq5aSq6Ziz5Y+v56e75Yqo5L2N572u55qE5pa55rOV77yM5ZKMUE9T5YiG5byA566X6Ziy5q2i6YCS5b2S5rqi5Ye6XHJcbiAgICBnZXRQb3MyKHR5cGUsbnVtKXtcclxuICAgICAgICBsZXQgcG9zWCA9IE1hdGgucmFuZG9tKCkqNjIwIC0gMzEwO1xyXG4gICAgICAgIGxldCBwb3NZID0gTWF0aC5yYW5kb20oKSoodGhpcy5maXRUb3AtdGhpcy5maXRCb3QpICsgdGhpcy5maXRCb3Q7XHJcbiAgICAgICAgbGV0IHBvaW50ID0gY2MudjIocG9zWCxwb3NZKTtcclxuICAgICAgICBpZih0aGlzLlBvc19BcnJheS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgZm9yKGxldCBpPTA7IGk8dGhpcy5Qb3NfQXJyYXkubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGlzdGFuY2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGxldCBwZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYoaSA9PSBudW0pIHBkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gdGhpcy5nZXREaXN0YW5jZTIocG9zWCxwb3NZLHRoaXMuUG9zX0FycmF5W2ldLngsdGhpcy5Qb3NfQXJyYXlbaV0ueSxwZClcclxuICAgICAgICAgICAgICAgIGlmKGRpc3RhbmNlID09IGZhbHNlKXtcclxuICAgICAgICAgICAgICAgICAgICBpID0gMTAwMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnQgPSB0aGlzLmdldFBvczIodHlwZSxudW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoZGlzdGFuY2UgPT0gdHJ1ZSAmJiBpID09ICh0aGlzLlBvc19BcnJheS5sZW5ndGgtMSkpe1xyXG4gICAgICAgICAgICAgICAgICAgIGkgPSAxMDAwMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwb2ludDtcclxuICAgIH1cclxuICAgIC8v6I635Y+W5Lik54K55LmL6Ze06Led56a777yM6L+U5Zue5Yik5pat5piv5ZCm5Zyo5LiA5a6a6IyD5Zu05YaFIOWwhuadpeaPkOWHuuWIsOW3peWFt+exu1xyXG4gICAgZ2V0RGlzdGFuY2UoeDEsIHkxLCB4MiwgeTIsbnVtKSB7XHJcbiAgICAgICAgdmFyIGpnID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZHggPSB4MiAtIHgxO1xyXG4gICAgICAgIGNvbnN0IGR5ID0geTIgLSB5MTtcclxuICAgICAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHgqZHggKyBkeSpkeSk7XHJcbiAgICAgICAgaWYoZGlzdGFuY2UgPiAxNjApe1xyXG4gICAgICAgICAgICBpZihudW0gPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICBjYy5meC5HYW1lQ29uZmlnXHJcbiAgICAgICAgICAgICAgICBpZihkaXN0YW5jZSA8IGNjLmZ4LkdhbWVDb25maWcuTEVWRUxfSU5GT1t0aGlzLmxldmVsLTFdLm1heE1vdmUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGpnID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICBlbHNlIGpnID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKGRpc3RhbmNlIDwgY2MuZnguR2FtZUNvbmZpZy5MRVZFTF9JTkZPW3RoaXMubGV2ZWwtMV0ubWF4TW92ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgamcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgIGVsc2UgamcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gamc7XHJcbiAgICB9XHJcbiAgICAvL+WRveS4reWKqOeUu1xyXG4gICAgaGl0QWN0aW9uKGRhdGEpe1xyXG4gICAgICAgIHRoaXMuaGl0LmFjdGl2ZSA9IHRydWU7IHRoaXMuaGl0Lm9wYWNpdHkgPSAwO1xyXG4gICAgICAgIHRoaXMuaGl0LnNldFBvc2l0aW9uXHJcbiAgICAgICAgdGhpcy5oaXQuc2V0UG9zaXRpb24odGhpcy5iYWxsX0FycmF5W2RhdGFdLngrMzUsdGhpcy5iYWxsX0FycmF5W2RhdGFdLnkrMzUpO1xyXG4gICAgICAgIGNjLnR3ZWVuKHRoaXMuaGl0KVxyXG4gICAgICAgIC50bygwLHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgLnRvKDAuMix7cG9zaXRpb246Y2MudjModGhpcy5oaXQueC0zNSx0aGlzLmhpdC55LTM1LDApfSlcclxuICAgICAgICAuZGVsYXkoMC4yKVxyXG4gICAgICAgIC50bygwLjEse29wYWNpdHk6MH0pXHJcbiAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgIHRoaXMuaGl0LmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICB9XHJcbiAgICAvL+WIm+mAoOWkqumYs1xyXG4gICAgY3JlYXRlQmFsbChudW1iZXIsY29sb3Isc3BlZWQscmVwZWF0KXtcclxuICAgICAgICBsZXQgYmFsbCA9IG51bGw7XHJcbiAgICAgICAgaWYoY29sb3IgPT0gMCliYWxsID0gY2MuaW5zdGFudGlhdGUodGhpcy5xaXUxKTtcclxuICAgICAgICBlbHNlIGlmKGNvbG9yID09IDEpYmFsbCA9IGNjLmluc3RhbnRpYXRlKHRoaXMucWl1Mik7XHJcbiAgICAgICAgZWxzZSBpZihjb2xvciA9PSAyKWJhbGwgPSBjYy5pbnN0YW50aWF0ZSh0aGlzLnFpdTMpO1xyXG4gICAgICAgIGJhbGwucGFyZW50ID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiU3VuXCIpO1xyXG4gICAgICAgIGJhbGwuekluZGV4ID0gdGhpcy5ub3dfQXJyYXkubGVuZ3RoIC0gbnVtYmVyO1xyXG4gICAgICAgIGJhbGwuc2V0UG9zaXRpb24odGhpcy5iYWxsLngsdGhpcy5iYWxsLnkpO1xyXG4gICAgICAgIGJhbGwuZ2V0Q29tcG9uZW50KFwiU3VuXCIpLmluaXQobnVtYmVyLGNvbG9yLHNwZWVkLHJlcGVhdCk7XHJcbiAgICAgICAgdGhpcy5iYWxsX0FycmF5LnB1c2goYmFsbCk7XHJcbiAgICB9XHJcbiAgICAvL+mUgOavgei/nue6v1xyXG4gICAgZGVzdHJveUxpbmUoKSB7XHJcbiAgICAgICAgZm9yKGxldCBpID0wOyBpPCB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJMaW5lXCIpLmNoaWxkcmVuLmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICBpZih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJMaW5lXCIpLmNoaWxkcmVuW2ldKXtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkxpbmVcIikuY2hpbGRyZW5baV0ucmVtb3ZlRnJvbVBhcmVudCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiTGluZVwiKS5jaGlsZHJlbltpXSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiTGluZVwiKS5yZW1vdmVBbGxDaGlsZHJlbigpO1xyXG4gICAgfVxyXG4gICAgLy/liJvlu7rov57nur9cclxuICAgIGNyZWF0ZUxpbmUoc3RhcnQsZW5kLHRpbWUpe1xyXG4gICAgICAgIGxldCBsaW5lID0gY2MuaW5zdGFudGlhdGUodGhpcy5saW5lUHJlZmFiKTtcclxuICAgICAgICBsaW5lLnBhcmVudCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkxpbmVcIik7XHJcbiAgICAgICAgbGluZS5zZXRQb3NpdGlvbihzdGFydC54LHN0YXJ0LnkpO1xyXG4gICAgICAgIGNvbnN0IGR4ID0gZW5kLnggLSBzdGFydC54O1xyXG4gICAgICAgIGNvbnN0IGR5ID0gZW5kLnkgLSBzdGFydC55O1xyXG4gICAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydChkeCpkeCArIGR5KmR5KTtcclxuICAgICAgICBsaW5lLmhlaWdodCA9IGRpc3RhbmNlO1xyXG4gICAgICAgIGxpbmUuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuZmlsbFJhbmdlID0gMDtcclxuICAgICAgICBsaW5lLmFuZ2xlID0gLXRoaXMuY2FsY3VsYXRlQW5nbGUoc3RhcnQueCxzdGFydC55LGVuZC54LGVuZC55KTtcclxuICAgICAgICBjYy50d2VlbihsaW5lLmdldENvbXBvbmVudChjYy5TcHJpdGUpKVxyXG4gICAgICAgIC50byh0aW1lLHtmaWxsUmFuZ2U6MX0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICB9XHJcbiAgICAvL+iOt+WPluS4pOeCueS5i+mXtOeahOinkuW6pu+8jOWwhuadpemDveWPr+aUvuW3peWFt+exu1xyXG4gICAgY2FsY3VsYXRlQW5nbGUoeDEsIHkxLCB4MiwgeTIpIHtcclxuICAgICAgICB2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKHkyLXkxLHgyLXgxKSoxODAgLyBNYXRoLlBJIC0gOTA7XHJcbiAgICAgICAgcmV0dXJuIC1hbmdsZTtcclxuICAgIH1cclxuICAgIC8v6I635Y+W5Lik54K55LmL6Ze055qE6Led56a7IOi/lOWbnuWvueW6lOaXtumXtFxyXG4gICAgY2FsY3VsYXRlRGlzdGFuY2UoeDEsIHkxLCB4MiwgeTIsIG51bSkge1xyXG4gICAgICAgIGNvbnN0IGR4ID0geDIgLSB4MTtcclxuICAgICAgICBjb25zdCBkeSA9IHkyIC0geTE7XHJcbiAgICAgICAgbGV0IHRpbWUgPSAwO1xyXG4gICAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydChkeCpkeCArIGR5KmR5KTtcclxuICAgICAgICBpZihudW0gPT0gMSl7XHJcbiAgICAgICAgICAgIGlmKGRpc3RhbmNlID4gODAwKSBkaXN0YW5jZSA9IDgwMDtcclxuICAgICAgICAgICAgdGltZSA9IGRpc3RhbmNlLzgwMCAqIDAuNjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihudW0gPT0gMil7XHJcbiAgICAgICAgICAgIGlmKGRpc3RhbmNlID4gMTIwMCkgZGlzdGFuY2UgPSAxMjAwO1xyXG4gICAgICAgICAgICB0aW1lID0gZGlzdGFuY2UvMTIwMCAqIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYobnVtID09IDMpe1xyXG4gICAgICAgICAgICBpZihkaXN0YW5jZSA+IDEyMDApIGRpc3RhbmNlID0gMTIwMDtcclxuICAgICAgICAgICAgdGltZSA9IGRpc3RhbmNlLzEyMDAgKiAxLjU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGltZTtcclxuICAgIH1cclxuICAgIC8v6I635Y+W5Lik54K55LmL6Ze06Led56a7ICDov5Tlm57ot53nprvliKTmlq1cclxuICAgIGdldERpc3RhbmNlMih4MSwgeTEsIHgyLCB5MixudW0pIHtcclxuICAgICAgICB2YXIgamcgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBkeCA9IHgyIC0geDE7XHJcbiAgICAgICAgY29uc3QgZHkgPSB5MiAtIHkxO1xyXG4gICAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydChkeCpkeCArIGR5KmR5KTtcclxuICAgICAgICBpZihkaXN0YW5jZSA+IDE2MCl7XHJcbiAgICAgICAgICAgIGlmKG51bSA9PSB0cnVlKXtcclxuICAgICAgICAgICAgICAgIGlmKGRpc3RhbmNlIDwgY2MuZnguR2FtZUNvbmZpZy5MRVZFTF9JTkZPW3RoaXMubGV2ZWwtMV0ubWF4RGlzdGFuY2UpIGpnID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGVsc2UgamcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgamcgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBqZztcclxuICAgIH1cclxuICAgIC8v6IOM5pmv56e75YqoXHJcbiAgICBiZ01vdmUodHlwZSl7XHJcbiAgICAgICAgbGV0IHJhbmRvbSA9IE1hdGgucmFuZG9tKCkqMzAwICsgMzAwO1xyXG4gICAgICAgIGxldCBwb3NYID0gTWF0aC5yYW5kb20oKSo2MDAgLSAzMDA7XHJcbiAgICAgICAgbGV0IHkxID0gdGhpcy5iZzEueSAtIHJhbmRvbSp0eXBlO1xyXG4gICAgICAgIGxldCB0aW1lMSA9IDAuNyoocmFuZG9tLzQwMCk7XHJcbiAgICAgICAgY2MudHdlZW4odGhpcy5iYWxsKVxyXG4gICAgICAgIC50bygwLjMse3NjYWxlOjEuM30pXHJcbiAgICAgICAgLnRvKHRpbWUxLHt4OnBvc1h9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIGNjLnR3ZWVuKHRoaXMuYmcxKVxyXG4gICAgICAgIC5kZWxheSgwLjMpXHJcbiAgICAgICAgLnRvKHRpbWUxLHt5OnkxfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYodGhpcy5vdmVyID09IGZhbHNlKSB0aGlzLnN0YXJ0R2FtZSgpO1xyXG4gICAgICAgIH0sIHRpbWUxKjE1MDApO1xyXG4gICAgfVxyXG4gICAgLy/lpoLmnpzmmK/lgJLorqHml7Yg6LCD55So5q2k5pa55rOVXHJcbiAgICB1cGRhdGVDb3VudERvd25UaW1lICgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb3VudFRpbWUgPiAwICYmIHRoaXMucGF1c2UgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5jb3VudFRpbWUgLT0gMTtcclxuICAgICAgICAgICAgdGhpcy50aW1lLnN0cmluZyA9ICBjYy5meC5HYW1lVG9vbC5nZXRUaW1lTWFyZ2luKHRoaXMuY291bnRUaW1lKTtcclxuICAgICAgICAgICAgaWYodGhpcy5jb3VudFRpbWUgPCA1KXtcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMudGltZS5ub2RlKVxyXG4gICAgICAgICAgICAgICAgLnRvKDAuMjUse3NjYWxlOjEuNSxjb2xvcjpjYy5jb2xvcigyNTUsMCwwKX0pXHJcbiAgICAgICAgICAgICAgICAudG8oMC4yNSx7c2NhbGU6MSxjb2xvcjpjYy5jb2xvcigyNTUsMjU1LDI1NSl9KVxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0KClcclxuICAgICAgICAgICAgICAgIGxldCBvdmVyID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiT3ZlclwiKTtcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKG92ZXIpXHJcbiAgICAgICAgICAgICAgICAudG8oMC4yLHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgICAgICAgICAuZGVsYXkoMC4xKVxyXG4gICAgICAgICAgICAgICAgLnRvKDAuMix7b3BhY2l0eTowfSlcclxuICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRoaXMuY291bnRUaW1lIDw9IDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iZWdpbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdmVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudW5zY2hlZHVsZSh0aGlzLnVwZGF0ZUNvdW50RG93blRpbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMb3NzKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGltZSA9IDA7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmNsaWNrQ291bnQgPiAwKSB0aW1lID0gcGFyc2VJbnQoY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLm1lYW5fVGltZS90aGlzLmNsaWNrQ291bnQgKyBcIlwiKTtcclxuICAgICAgICAgICAgICAgIGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5tZWFuX1RpbWUgPSBwYXJzZUludCh0aW1lLzEwMCArIFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLm1lYW5fVGltZSA9IGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5tZWFuX1RpbWUgLzEwO1xyXG4gICAgICAgICAgICAgICAgaWYodGltZSA+IDEwMDAwKSB0aW1lID0gKE1hdGgucmFuZG9tKCkqMTArNSkqMTAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nYW1lT3Zlcih0aW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8v5LiK5Lyg5q+P5qyh5pON5L2c5pWw5o2uXHJcbiAgICBzZXREYXRhKCl7XHJcbiAgICAgICAgIGNjLmZ4LkdhbWVUb29sLnNldEdhbWVEYXRhKCk7XHJcbiAgICB9XHJcbiAgICAvL+S4iuS8oOaOkuihjOamnOaVsOaNrlxyXG4gICAgZ2FtZU92ZXIodGltZSl7XHJcbiAgICAgICAgIGNjLmZ4LkdhbWVUb29sLnNldFJhbmsodGltZSk7XHJcbiAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiR2FtZU92ZXJcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJHYW1lT3ZlclwiKS5vcGFjaXR5ID0gMDtcclxuICAgICAgICBjYy50d2Vlbih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJHYW1lT3ZlclwiKSlcclxuICAgICAgICAudG8oMC40LHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgLmRlbGF5KDIpXHJcbiAgICAgICAgLnRvKDAuNCx7b3BhY2l0eTo1MH0pXHJcbiAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIk92ZXJTY2VuZVwiKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpXHJcbiAgICB9XHJcbiAgICAvL+S9nOW8iu+8jOa1i+ivleeUqFxyXG4gICAgc2hvd051bWJlcigpe1xyXG4gICAgICAgIGlmKHRoaXMuc2hvdyA9PSBmYWxzZSkgdGhpcy5zaG93ID0gdHJ1ZTtcclxuICAgICAgICBlbHNlIGlmKHRoaXMuc2hvdyA9PSB0cnVlKSB0aGlzLnNob3cgPSBmYWxzZTtcclxuICAgICAgICBmb3IobGV0IGk9MDsgaTx0aGlzLmJhbGxfQXJyYXkubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICB0aGlzLmJhbGxfQXJyYXlbaV0uZ2V0Q29tcG9uZW50KFwiU3VuXCIpLnNob3dOdW1iZXIodGhpcy5zaG93KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBvbkVuYWJsZSAoKSB7XHJcbiAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5vbihcImNsaWNrU3VuXCIsIHRoaXMuY2xpY2tTdW4sIHRoaXMpO1xyXG4gICAgfVxyXG4gICAgb25EaXNhYmxlICgpIHtcclxuICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLm9mZihcImNsaWNrU3VuXCIsIHRoaXMuY2xpY2tTdW4pO1xyXG4gICAgfVxyXG4gICAgdXBkYXRlIChkdCkge1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|