Sun_moves/temp/quick-scripts/dst/assets/Script/GameManager.js
2024-05-31 10:16:31 +08:00

1140 lines
157 KiB
JavaScript
Raw 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";
// Learn TypeScript:
// - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
// Learn Attribute:
// - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
// - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html
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 GameData_1 = require("./GameData");
var Notification_1 = require("./Notification");
var serverAPI_1 = require("./crypto/serverAPI");
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;
// LIFE-CYCLE CALLBACKS:
_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.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.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 (GameData_1.default._instance.GM_INFO.custom != 0) {
this.level = GameData_1.default._instance.GM_INFO.custom;
// this.levelLabel.string = this.level + "";
GameData_1.default._instance.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 = [];
GameData_1.default._instance.GAME_DATA = [];
GameData_1.default._instance.GM_INFO.success = false;
this.startTime = 0;
this.overTime = 0;
this.winTime = 0;
GameData_1.default._instance.GM_INFO.total = 0;
GameData_1.default._instance.GM_INFO.mean_Time = 0;
this.schedule(this.updateCountDownTime, 1);
this.startGame();
};
GameManager.prototype.backScene = function () {
cc.director.loadScene("LoadScene");
};
//下一关或者重新开始或者返回上一关根据level决定
GameManager.prototype.reStart = function (type) {
// if(GameData._instance.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.begin_Guide = function () {
};
//获取时间戳
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.calculateDistance2(this.ball_Array[i].x, this.ball_Array[i].y, this.ball_Array[i - 1].x, this.ball_Array[i - 1].y);
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 = this.getTime();
this.time_Array.push((clickTime - this.timeStart));
this.timeStart = this.getTime();
if (data == this.clickNow) {
GameData_1.default._instance.AudioManager.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;
// GameData._instance.GM_INFO.total += 1;
if (this.ball_Array[this.clickNow - 1])
this.ball_Array[this.clickNow - 1].getChildByName("guang").active = false;
// setTimeout(() => {
// }, 200);
if (this.clickNow == this.now_Array.length) {
this.pause = true;
GameData_1.default._instance.GM_INFO.total += this.clickNow;
this.overTime = this.getTime();
if (this.startTime > 0 && this.overTime > 0) {
GameData_1.default._instance.GM_INFO.mean_Time += (this.overTime - this.startTime);
}
// console.log("成功",GameData._instance.GM_INFO.mean_Time,this.overTime,this.startTime);
// console.log(GameData._instance.GM_INFO.mean_Time);
var finish_time = parseInt((this.overTime - this.startTime) / 100 + "");
this.startTime = 0;
this.overTime = 0;
// console.log("33333333");
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);
GameData_1.default._instance.AudioManager.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);
}
}
GameData_1.default._instance.CLICK_DATA =
{
type: 1,
success: true,
round: this.round,
totalSunCount: this.now_Array.length,
movedSunCount: GameData_1.default._instance.LEVEL_INFO[this.level - 1].moveNumber,
sunSpeed: GameData_1.default._instance.LEVEL_INFO[this.level - 1].moveSpeed,
overlapSunCount: GameData_1.default._instance.LEVEL_INFO[this.level - 1].repeat,
colorList: this.color_Array,
duration: finish_time / 10,
difficultyLevel: this.level,
sunList: sunArray,
stepTimeList: this.time_Array,
remainder: this.countTime
};
this.outPut();
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) {
GameData_1.default._instance.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();
}
// this.hitAction(data)
}
};
GameManager.prototype.setLoss = function () {
GameData_1.default._instance.AudioManager.playWarning();
this.begin = false;
this.overTime = this.getTime();
if (this.startTime > 0 && this.overTime > 0) {
GameData_1.default._instance.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";
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);
}
}
GameData_1.default._instance.CLICK_DATA =
{
type: 1,
success: false,
round: this.round,
totalSunCount: this.now_Array.length,
movedSunCount: GameData_1.default._instance.LEVEL_INFO[this.level - 1].moveNumber,
sunSpeed: GameData_1.default._instance.LEVEL_INFO[this.level - 1].moveSpeed,
overlapSunCount: GameData_1.default._instance.LEVEL_INFO[this.level - 1].repeat,
colorList: this.color_Array,
duration: finish_time / 10,
difficultyLevel: this.level,
sunList: sunArray,
stepTimeList: this.time_Array,
remainder: this.countTime
};
this.outPut();
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.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.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();
// this.runGame()
}
};
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 (GameData_1.default._instance.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 = GameData_1.default._instance.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;
}
}
}
// debugger;
//设置重叠
// this.repeat = -1;
// this.numberRepeat = -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 = GameData_1.default._instance.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
//可移动区分
var pos = cc.v2(0, 0);
// this.repeat = -1;
// this.numberRepeat = -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 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.calculateDistance3(this_4.ball_Array[i].x, this_4.ball_Array[i].y, this_4.Pos_Array[i].x, this_4.Pos_Array[i].y);
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.calculateDistance3(this_4.ball_Array[i].x, this_4.ball_Array[i].y, this_4.Pos_Array[i].x, this_4.Pos_Array[i].y);
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 = this.getTime();
this.timeStart = this.getTime();
this.pause = false;
// this.node.getChildByName("showBtn").active = true;
};
GameManager.prototype.getRandomArray = function (lastNumber) {
var num = parseInt(Math.random() * 8 - 4 + "");
var jg = num + lastNumber;
if (num > 1 || num < -1) {
if (num == 0 || (jg < 0 || jg >= this.Pos_Array.length)) {
jg = this.getRandomArray(lastNumber);
}
}
else {
jg = this.getRandomArray(lastNumber);
}
return jg;
};
//创建太阳所需数据
GameManager.prototype.createSun = function () {
var _this = this;
var levelData = GameData_1.default._instance.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);
}
// 0 0 0 0 0 0 0 0 0 0 0
};
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 = GameData_1.default._instance.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));
var time = this.calculateDistance(this.ball.x, this.ball.y, this.Pos_Array[i].x, this.Pos_Array[i].y) + 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();
};
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;
};
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) {
if (distance < GameData_1.default._instance.LEVEL_INFO[this.level - 1].maxMove) {
jg = true;
}
else
jg = false;
}
else {
if (distance < GameData_1.default._instance.LEVEL_INFO[this.level - 1].maxMove) {
jg = true;
}
else
jg = false;
}
}
return jg;
};
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 < GameData_1.default._instance.LEVEL_INFO[this.level - 1].maxDistance)
jg = true;
else
jg = false;
}
else {
jg = true;
}
}
return jg;
};
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) {
var dx = x2 - x1;
var dy = y2 - y1;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 800)
distance = 800;
var time = distance / 800 * 0.6;
return time;
};
GameManager.prototype.calculateDistance2 = function (x1, y1, x2, y2) {
var dx = x2 - x1;
var dy = y2 - y1;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 1200)
distance = 1200;
var time = distance / 1200 * 1;
return time;
};
GameManager.prototype.calculateDistance3 = function (x1, y1, x2, y2) {
var dx = x2 - x1;
var dy = y2 - y1;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 1200)
distance = 1200;
var time = distance / 1200 * 1.5;
return time;
};
//背景移动
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;
// let y2 = this.bg2.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();
// cc.tween(this.bg2)
// .delay(0.3)
// .to(time1,{y:y2})
// .start();
setTimeout(function () {
// if(this.over == false && GameData._instance.GM_INFO.custom == 0){
// this.startGame();
// }
if (_this.over == false) {
_this.startGame();
}
}, time1 * 1500);
};
//时间格式转换
GameManager.prototype.getTimeMargin = function (second) {
var total = 0;
total = second;
var hour = 0;
hour = parseInt((total / 3600) + ""); //计算整数小时数
var afterHour = total - hour * 60 * 60; //取得算出小时数后剩余的秒数
var min = parseInt((afterHour / 60) + ""); //计算整数分
var m = "" + min;
if (min < 10)
m = "0" + min;
var afterMin = total - hour * 60 * 60 - min * 60; //取得算出分后剩余的秒数
var miao = afterMin + "";
if (afterMin < 10)
miao = "0" + afterMin;
return m + ':' + miao;
};
//如果是倒计时 调用此方法
GameManager.prototype.updateCountDownTime = function () {
if (this.countTime > 0 && this.pause == false) {
this.countTime -= 1;
this.time.string = this.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;
// console.log(GameData._instance.GM_INFO.mean_Time,this.clickCount);
if (this.clickCount > 0)
time = parseInt(GameData_1.default._instance.GM_INFO.mean_Time / this.clickCount + "");
GameData_1.default._instance.GM_INFO.mean_Time = parseInt(time / 100 + "");
GameData_1.default._instance.GM_INFO.mean_Time = GameData_1.default._instance.GM_INFO.mean_Time / 10;
// console.log( GameData._instance.GM_INFO.mean_Time,time);
// debugger;
if (time > 10000)
time = (Math.random() * 10 + 5) * 100;
this.setRank(time);
}
}
};
GameManager.prototype.setData = function () {
var data = GameData_1.default._instance.GAME_DATA;
var matchId = this.getMatchId();
console.log(matchId);
var postData = {
"matchId": matchId,
"data": data
};
console.log("上传数据:");
serverAPI_1.default.uploadUserLogData(postData, function () { });
};
GameManager.prototype.getMatchId = function () {
var matchId = cc.sys.localStorage.getItem("matchId");
if (matchId == "undifend" || matchId == null) {
matchId = this.setMatchId();
}
else {
if (this.containsNanana(matchId) == true) {
matchId = this.setMatchId();
}
else {
var char = parseInt(matchId[10]);
if (this.round == 1) {
char += 1;
}
matchId = matchId.slice(0, 10) + char + "";
GameData_1.default._instance.GM_INFO.matchId = matchId;
cc.sys.localStorage.setItem("matchId", matchId);
}
}
return matchId;
};
GameManager.prototype.containsNanana = function (str) {
return /na/i.test(str);
};
GameManager.prototype.setMatchId = function () {
// 定义包含可用字符的字符集
var characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
// 创建一个数组以保存随机字符
var uuidArray = [];
// 循环10次 生成10位的UUID
for (var i = 0; i < 10; i++) {
// 生成随机索引,范围是字符集的长度
var randomIndex = Math.floor(Math.random() * characters.length);
// 从字符集中获取随机字符
var randomChar = characters.charAt(randomIndex);
// 将字符添加到数组中
uuidArray.push(randomChar);
}
var data = uuidArray.join('') + 1 + "";
cc.sys.localStorage.setItem("matchNumber", 1);
cc.sys.localStorage.setItem("matchId", data);
GameData_1.default._instance.GM_INFO.matchId = data;
return data;
};
GameManager.prototype.setRank = function (time) {
var postData = {
"type": 1,
"reactionTime": time,
"totalSunCount": GameData_1.default._instance.GM_INFO.total,
"success": GameData_1.default._instance.GM_INFO.success
};
// console.log(postData);
serverAPI_1.default.rankData(1, function () { }, postData);
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.outPut = function () {
var data = GameData_1.default._instance.CLICK_DATA;
GameData_1.default._instance.GAME_DATA = [];
GameData_1.default._instance.GAME_DATA.push(GameData_1.default._instance.CLICK_DATA);
GameData_1.default._instance.CLICK_init();
};
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 () {
Notification_1.Notification.on("clickSun", this.clickSun, this);
// Notification.on("HammerPlay", this.HammerPlay, this);
};
GameManager.prototype.onDisable = function () {
// Notification.off("rightAnswers", this.rightAnswers);
Notification_1.Notification.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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxHYW1lTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0JBQW9CO0FBQ3BCLHdFQUF3RTtBQUN4RSxtQkFBbUI7QUFDbkIsa0ZBQWtGO0FBQ2xGLDhCQUE4QjtBQUM5QixrRkFBa0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU1RSxJQUFBLEtBQXNCLEVBQUUsQ0FBQyxVQUFVLEVBQWxDLE9BQU8sYUFBQSxFQUFFLFFBQVEsY0FBaUIsQ0FBQztBQUMxQyx1Q0FBa0M7QUFDbEMsK0NBQThDO0FBQzlDLGdEQUEwQztBQUUxQztJQUF5QywrQkFBWTtJQUFyRDtRQUFBLHFFQXFuQ0M7UUFsbkNHLFVBQUksR0FBWSxJQUFJLENBQUM7UUFFckIsVUFBSSxHQUFjLElBQUksQ0FBQztRQUV2QixVQUFJLEdBQWMsSUFBSSxDQUFDO1FBRXZCLFVBQUksR0FBYyxJQUFJLENBQUM7UUFFdkIsZ0JBQVUsR0FBYyxJQUFJLENBQUM7UUFFN0IsU0FBRyxHQUFZLElBQUksQ0FBQztRQUVwQixTQUFHLEdBQVksSUFBSSxDQUFDO1FBQ3BCLFNBQUcsR0FBWSxJQUFJLENBQUM7UUFDcEIsVUFBSSxHQUFhLElBQUksQ0FBQztRQUV0Qix3QkFBd0I7UUFDeEIsV0FBSyxHQUFZLEtBQUssQ0FBQztRQUN2QixXQUFLLEdBQVksS0FBSyxDQUFDO1FBQ3ZCLFVBQUksR0FBWSxLQUFLLENBQUM7UUFDdEIsVUFBSSxHQUFZLEtBQUssQ0FBQztRQXNCdEIsZ0JBQVUsR0FBYSxJQUFJLENBQUM7O0lBd2tDaEMsQ0FBQztJQWhrQ0csNEJBQU0sR0FBTjtJQUVBLENBQUM7SUFFRCwyQkFBSyxHQUFMO1FBQ0ksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1gsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFDRCx5QkFBRyxHQUFIO1FBQ0ksSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMs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QyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFHOUIsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxFQUFFLEVBQUM7WUFDaEMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsR0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9ILElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLFNBQVMsQ0FBQztZQUM3RyxJQUFJLEdBQUcsRUFBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxLQUFLLEVBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxTQUFTLENBQUMsU0FBUyxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMsQ0FBQztZQUM5SSxJQUFHLElBQUksQ0FBQyxNQUFNLElBQUksQ0FB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USxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7NkNBQ0c7SUFFckI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQzs2Q0FDRztJQUV2QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDOzZDQUNHO0lBRXZCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7NkNBQ0c7SUFFdkI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQzttREFDUztJQUU3QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOzRDQUNFO0lBZ0NwQjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO21EQUNTO0lBN0NYLFdBQVc7UUFEL0IsT0FBTztPQUNhLFdBQVcsQ0FxbkMvQjtJQUFELGtCQUFDO0NBcm5DRCxBQXFuQ0MsQ0FybkN3QyxFQUFFLENBQUMsU0FBUyxHQXFuQ3BEO2tCQXJuQ29CLFdBQVciLCJmaWxlIjoiIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBMZWFybiBUeXBlU2NyaXB0OlxyXG4vLyAgLSBodHRwczovL2RvY3MuY29jb3MuY29tL2NyZWF0b3IvbWFudWFsL2VuL3NjcmlwdGluZy90eXBlc2NyaXB0Lmh0bWxcclxuLy8gTGVhcm4gQXR0cmlidXRlOlxyXG4vLyAgLSBodHRwczovL2RvY3MuY29jb3MuY29tL2NyZWF0b3IvbWFudWFsL2VuL3NjcmlwdGluZy9yZWZlcmVuY2UvYXR0cmlidXRlcy5odG1sXHJcbi8vIExlYXJuIGxpZmUtY3ljbGUgY2FsbGJhY2tzOlxyXG4vLyAgLSBodHRwczovL2RvY3MuY29jb3MuY29tL2NyZWF0b3IvbWFudWFsL2VuL3NjcmlwdGluZy9saWZlLWN5Y2xlLWNhbGxiYWNrcy5odG1sXHJcblxyXG5jb25zdCB7Y2NjbGFzcywgcHJvcGVydHl9ID0gY2MuX2RlY29yYXRvcjtcclxuaW1wb3J0IEdhbWVEYXRhIGZyb20gJy4vR2FtZURhdGEnO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb24gfSBmcm9tICcuL05vdGlmaWNhdGlvbic7XHJcbmltcG9ydCBIdHRwVXRpbCBmcm9tICcuL2NyeXB0by9zZXJ2ZXJBUEknO1xyXG5AY2NjbGFzc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lTWFuYWdlciBleHRlbmRzIGNjLkNvbXBvbmVudCB7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBiYWxsOiBjYy5Ob2RlID0gbnVsbDtcclxuICAgIEBwcm9wZXJ0eShjYy5QcmVmYWIpXHJcbiAgICBxaXUxOiBjYy5QcmVmYWIgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLlByZWZhYilcclxuICAgIHFpdTI6IGNjLlByZWZhYiA9IG51bGw7XHJcbiAgICBAcHJvcGVydHkoY2MuUHJlZmFiKVxyXG4gICAgcWl1MzogY2MuUHJlZmFiID0gbnVsbDtcclxuICAgIEBwcm9wZXJ0eShjYy5QcmVmYWIpXHJcbiAgICBsaW5lUHJlZmFiOiBjYy5QcmVmYWIgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBoaXQ6IGNjLk5vZGUgPSBudWxsO1xyXG5cclxuICAgIGJnMTogY2MuTm9kZSA9IG51bGw7XHJcbiAgICBiZzI6IGNjLk5vZGUgPSBudWxsO1xyXG4gICAgdGltZTogY2MuTGFiZWwgPSBudWxsO1xyXG5cclxuICAgIC8vIExJRkUtQ1lDTEUgQ0FMTEJBQ0tTOlxyXG4gICAgYmVnaW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGZ1aHVvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBvdmVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBzaG93OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBjb3VudFRpbWU6bnVtYmVyO1xyXG4gICAgdGltZUNvdW50Om51bWJlcjtcclxuICAgIGZpdFRvcDpudW1iZXI7XHJcbiAgICBmaXRCb3Q6bnVtYmVyO1xyXG4gICAgbGV2ZWw6bnVtYmVyO1xyXG4gICAgY2xpY2tOb3c6bnVtYmVyO1xyXG4gICAgc3RhcnRUaW1lOm51bWJlcjtcclxuICAgIG92ZXJUaW1lOm51bWJlcjtcclxuICAgIHdpblRpbWU6bnVtYmVyO1xyXG4gICAgY2xpY2tDb3VudDpudW1iZXI7XHJcbiAgICB0aW1lU3RhcnQ6bnVtYmVyO1xyXG4gICAgcm91dGVfQXJyYXk6IGFueVtdO1xyXG4gICAgbm93X0FycmF5OiBhbnlbXTtcclxuICAgIGJhbGxfQXJyYXk6IGFueVtdO1xyXG4gICAgTGluZV9BcnJheTogYW55W107XHJcbiAgICBQb3NfQXJyYXk6IGFueVtdO1xyXG4gICAgdGltZV9BcnJheTogYW55W107XHJcbiAgICBjb2xvcl9BcnJheTogYW55W107XHJcblxyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5MYWJlbClcclxuICAgIGxldmVsTGFiZWw6IGNjLkxhYmVsID0gbnVsbDtcclxuICAgIHN0YXRpYyBfaW5zdGFuY2U6IGFueTtcclxuICAgIG1vdmVBcnJheTogbnVtYmVyW107XHJcbiAgICByZXBlYXQ6IG51bWJlcjtcclxuICAgIG51bWJlclJlcGVhdDogbnVtYmVyO1xyXG4gICAgcm91bmQ6IG51bWJlcjtcclxuICAgIHBhdXNlOiBib29sZWFuO1xyXG5cclxuICAgIG9uTG9hZCAoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0ICgpIHtcclxuICAgICAgICB0aGlzLmZpdCgpO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG4gICAgZml0KCl7XHJcbiAgICAgICAgdGhpcy5maXRUb3AgPSA0NTA7ICAvLzYwMFxyXG4gICAgICAgIHRoaXMuZml0Qm90ID0gLTYwMDsgLy8tNzAwXHJcbiAgICAgICAgdmFyIGpnID0gdGhpcy5zZXRGaXQoKTtcclxuICAgICAgICBpZighamcpe1xyXG4gICAgICAgICAgICB0aGlzLmZpdFRvcCA9IDYwMDtcclxuICAgICAgICAgICAgdGhpcy5maXRCb3QgPSAtNzAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRTZXRTY3JlZW5SZXNvbHV0aW9uRmxhZyAoKSB7XHJcbiAgICAgICAgbGV0IHNpemUgPSBjYy53aW5TaXplO1xyXG4gICAgICAgIGxldCB3aWR0aCA9IHNpemUud2lkdGg7XHJcbiAgICAgICAgbGV0IGhlaWdodCA9IHNpemUuaGVpZ2h0O1xyXG4gICAgICAgIGlmICgoaGVpZ2h0IC8gd2lkdGgpID4gKDE2LjIgLyA5KSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLy/liKTmlq3lhajpnaLlsY/pgILphY1cclxuICAgIHNldEZpdCAoKSB7XHJcbiAgICAgICAgbGV0IGZsYWcgPSB0aGlzLmdldFNldFNjcmVlblJlc29sdXRpb25GbGFnKCk7XHJcbiAgICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmxhZztcclxuICAgIH1cclxuXHJcbiAgICAvL+WIneWni+WMluaVsOaNrlxyXG4gICAgaW5pdCgpe1xyXG4gICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkdhbWVPdmVyXCIpLnpJbmRleCA9IDEwMDtcclxuICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJHYW1lT3ZlclwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmJhbGwuekluZGV4ID0gMTAwO1xyXG4gICAgICAgIHRoaXMuYmcxID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiYmcxXCIpO1xyXG4gICAgICAgIHRoaXMuYmcyID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiYmcyXCIpO1xyXG4gICAgICAgIHRoaXMudGltZSA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIlRvcFwiKS5nZXRDaGlsZEJ5TmFtZShcInRpbWVcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJzaG93QnRuXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYmVnaW4gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm92ZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZ1aHVvID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBhdXNlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJvdW5kID0gMDsgXHJcbiAgICAgICAgdGhpcy5sZXZlbCA9IDI7XHJcbiAgICAgICAgdGhpcy5jb3VudFRpbWUgPSA2MDtcclxuICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5jdXN0b20gIT0gMCl7XHJcbiAgICAgICAgICAgIHRoaXMubGV2ZWwgPSBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5jdXN0b207XHJcbiAgICAgICAgICAgIC8vIHRoaXMubGV2ZWxMYWJlbC5zdHJpbmcgPSB0aGlzLmxldmVsICsgXCJcIjtcclxuICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uY3VzdG9tICs9IDE7XHJcbiAgICAgICAgICAgIHRoaXMuY291bnRUaW1lID0gMTIwMDAwMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMubGV2ZWxMYWJlbC5zdHJpbmcgPSB0aGlzLmxldmVsICsgXCJcIjtcclxuIFxyXG4gICAgICAgIHRoaXMudGltZUNvdW50ID0gMC4xO1xyXG4gICAgICAgIHRoaXMuY2xpY2tOb3cgPSAwO1xyXG4gICAgICAgIHRoaXMuY2xpY2tDb3VudCA9IDA7XHJcbiAgICAgICAgdGhpcy50aW1lU3RhcnQgPSAwO1xyXG4gICAgICAgIHRoaXMucmVwZWF0ID0gLTE7XHJcbiAgICAgICAgdGhpcy5udW1iZXJSZXBlYXQgPSAtMTtcclxuICAgICAgICB0aGlzLnJvdXRlX0FycmF5ID0gW107XHJcbiAgICAgICAgdGhpcy5tb3ZlQXJyYXkgPSBbXTtcclxuICAgICAgICB0aGlzLm5vd19BcnJheSA9IFtdO1xyXG4gICAgICAgIHRoaXMuYmFsbF9BcnJheSA9IFtdO1xyXG4gICAgICAgIHRoaXMuUG9zX0FycmF5ID0gW107XHJcbiAgICAgICAgdGhpcy50aW1lX0FycmF5ID0gW107XHJcbiAgICAgICAgdGhpcy5jb2xvcl9BcnJheSA9IFtdO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HQU1FX0RBVEEgPSBbXTtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5zdWNjZXNzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSAwO1xyXG4gICAgICAgIHRoaXMub3ZlclRpbWUgPSAwO1xyXG4gICAgICAgIHRoaXMud2luVGltZSA9IDA7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8udG90YWwgPSAwO1xyXG5cclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5tZWFuX1RpbWUgPSAwO1xyXG4gICAgICAgIHRoaXMuc2NoZWR1bGUodGhpcy51cGRhdGVDb3VudERvd25UaW1lLDEpO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5zdGFydEdhbWUoKTtcclxuICAgIH1cclxuXHJcbiAgICBiYWNrU2NlbmUoKXtcclxuICAgICAgICBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJMb2FkU2NlbmVcIik7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8v5LiL5LiA5YWz77yM5oiW6ICF6YeN5paw5byA5aeL77yM5oiW6ICF6L+U5Zue5LiK5LiA5YWz77yM5qC55o2ubGV2ZWzlhrPlrppcclxuICAgIHJlU3RhcnQodHlwZSl7XHJcbiAgICAgICAgLy8gaWYoR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uY3VzdG9tICE9IDApe1xyXG4gICAgICAgIC8vICAgICBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJMb2FkU2NlbmVcIik7XHJcbiAgICAgICAgLy8gICAgIHJldHVybjtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwic2hvd0J0blwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3lMaW5lKCk7XHJcbiAgICAgICAgdGhpcy50aW1lQ291bnQgPSAwLjE7XHJcbiAgICAgICAgdGhpcy5jbGlja05vdyA9IDA7XHJcbiAgICAgICAgdGhpcy50aW1lU3RhcnQgPSAwO1xyXG4gICAgICAgIHRoaXMucmVwZWF0ID0gLTE7XHJcbiAgICAgICAgdGhpcy5udW1iZXJSZXBlYXQgPSAtMTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmJlZ2luID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yb3V0ZV9BcnJheSA9IFtdO1xyXG4gICAgICAgIHRoaXMubm93X0FycmF5ID0gW107XHJcbiAgICAgICAgdGhpcy5iYWxsX0FycmF5ID0gW107XHJcbiAgICAgICAgdGhpcy5Qb3NfQXJyYXkgPSBbXTtcclxuICAgICAgICB0aGlzLm1vdmVBcnJheSA9IFtdO1xyXG4gICAgICAgIHRoaXMudGltZV9BcnJheSA9IFtdO1xyXG4gICAgICAgIHRoaXMuY29sb3JfQXJyYXkgPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBpZih0eXBlID09IDApe1xyXG4gICAgICAgICAgICB0aGlzLmJnTW92ZSgxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDEpe1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0R2FtZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGUgPT0gMil7XHJcbiAgICAgICAgICAgIHRoaXMuYmdNb3ZlKC0xKTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBiZWdpbl9HdWlkZSgpe1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvL+iOt+WPluaXtumXtOaIs1xyXG4gICAgZ2V0VGltZSgpe1xyXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIHJldHVybiB0aW1lc3RhbXA7XHJcbiAgICB9XHJcblxyXG4gICAgLy/ojrfog5xcclxuICAgIHBhc3NMZXZlbCgpe1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUxpbmUoKTtcclxuICAgICAgICBpZih0aGlzLm92ZXIgPT0gZmFsc2UgJiYgdGhpcy5jb3VudFRpbWUgPj0gMCl7XHJcbiAgICAgICAgICAgIGxldCB0aW1lQXJyYXkgPSBbXTtcclxuICAgICAgICAgICAgbGV0IHRpbWVDb3VudCA9IDA7XHJcbiAgICAgICAgICAgIGxldCBiYWxsID0gdGhpcy5iYWxsX0FycmF5WzBdO1xyXG4gICAgICAgICAgICBmb3IobGV0IGk9MTsgaTwgdGhpcy5iYWxsX0FycmF5Lmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgICAgIGxldCB0aW1lID0gdGhpcy5jYWxjdWxhdGVEaXN0YW5jZTIodGhpcy5iYWxsX0FycmF5W2ldLngsdGhpcy5iYWxsX0FycmF5W2ldLnksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWxsX0FycmF5W2ktMV0ueCx0aGlzLmJhbGxfQXJyYXlbaS0xXS55KTtcclxuICAgICAgICAgICAgICAgIHRpbWVBcnJheS5wdXNoKHRpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvcihsZXQgaz0xOyBrPCB0aGlzLmJhbGxfQXJyYXkubGVuZ3RoOyBrKyspe1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MudHdlZW4oYmFsbClcclxuICAgICAgICAgICAgICAgICAgICAudG8odGltZUFycmF5W2stMV0se3g6dGhpcy5iYWxsX0FycmF5W2tdLngseTp0aGlzLmJhbGxfQXJyYXlba10ueX0pXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFsbF9BcnJheVtrXS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoayA9PSB0aGlzLmJhbGxfQXJyYXkubGVuZ3RoLTEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWxsLm9wYWNpdHkgPSAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWxsLnBvc2l0aW9uID0gY2MudjMoYmFsbC54LGJhbGwueSwwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWxsLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTdW4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlU3RhcnQoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgICAgIH0sIHRpbWVDb3VudCoxMDAwKTtcclxuICAgICAgICAgICAgICAgIHRpbWVDb3VudCArPSAodGltZUFycmF5W2stMV0rMC4xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICAvL+Wksei0pVxyXG4gICAgbG9zZUxldmVsKHR5cGUpe1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUxpbmUoKTtcclxuICAgICAgICBpZih0aGlzLm92ZXIgPT0gZmFsc2UgJiYgdGhpcy5jb3VudFRpbWUgPj0gMCl7XHJcbiAgICAgICAgICAgIGxldCBiYWxsID0gdGhpcy5iYWxsX0FycmF5WzBdO1xyXG4gICAgICAgICAgICBmb3IobGV0IGs9MTsgazwgdGhpcy5iYWxsX0FycmF5Lmxlbmd0aDsgaysrKXtcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuYmFsbF9BcnJheVtrXSlcclxuICAgICAgICAgICAgICAgIC50bygyLHt4OmJhbGwueCx5OmJhbGwueX0pXHJcbiAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhbGxfQXJyYXlba10uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoayA9PSB0aGlzLmJhbGxfQXJyYXkubGVuZ3RoLTEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJhbGwub3BhY2l0eSA9IDI1NTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWxsLnBvc2l0aW9uID0gY2MudjMoYmFsbC54LGJhbGwueSwwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhclN1bigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlU3RhcnQodHlwZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5zdGFydCgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyU3VuKCl7XHJcbiAgICAgICAgZm9yKGxldCBrPTA7IGs8IHRoaXMuYmFsbF9BcnJheS5sZW5ndGg7IGsrKyl7XHJcbiAgICAgICAgICAgIHRoaXMuYmFsbF9BcnJheVtrXS5yZW1vdmVGcm9tUGFyZW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMuYmFsbF9BcnJheVtrXSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8v54K55Ye75aSq6Ziz5omn6KGM5pa55rOVXHJcbiAgICBjbGlja1N1bihkYXRhKXtcclxuICAgICAgICBpZih0aGlzLmJlZ2luID09IHRydWUpe1xyXG4gICAgICAgICAgICB0aGlzLmNsaWNrQ291bnQgKz0gMTtcclxuICAgICAgICAgICAgbGV0IGNsaWNrVGltZSA9IHRoaXMuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVfQXJyYXkucHVzaCgoY2xpY2tUaW1lIC0gdGhpcy50aW1lU3RhcnQpKVxyXG4gICAgICAgICAgICB0aGlzLnRpbWVTdGFydCA9IHRoaXMuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBpZihkYXRhID09IHRoaXMuY2xpY2tOb3cpe1xyXG4gICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkF1ZGlvTWFuYWdlci5wbGF5QXVkaW9CdXR0b24oKTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuY2xpY2tOb3cgPiAwKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUxpbmUoY2MudjIodGhpcy5iYWxsX0FycmF5W3RoaXMuY2xpY2tOb3ctMV0ueCx0aGlzLmJhbGxfQXJyYXlbdGhpcy5jbGlja05vdy0xXS55KSxcclxuICAgICAgICAgICAgICAgICAgICBjYy52Mih0aGlzLmJhbGxfQXJyYXlbdGhpcy5jbGlja05vd10ueCx0aGlzLmJhbGxfQXJyYXlbdGhpcy5jbGlja05vd10ueSksXHJcbiAgICAgICAgICAgICAgICAgICAgMC4yKTsgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tOb3cgKz0gMTtcclxuICAgICAgICAgICAgICAgIC8vIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLnRvdGFsICs9IDE7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmJhbGxfQXJyYXlbdGhpcy5jbGlja05vdy0xXSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhbGxfQXJyYXlbdGhpcy5jbGlja05vdy0xXS5nZXRDaGlsZEJ5TmFtZShcImd1YW5nXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIH0sIDIwMCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmNsaWNrTm93ID09IHRoaXMubm93X0FycmF5Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXVzZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8udG90YWwgKz0gdGhpcy5jbGlja05vdztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVyVGltZSA9IHRoaXMuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhcnRUaW1lID4gMCAmJiB0aGlzLm92ZXJUaW1lID4gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLm1lYW5fVGltZSArPSAodGhpcy5vdmVyVGltZSAtIHRoaXMuc3RhcnRUaW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLmiJDlip9cIixHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5tZWFuX1RpbWUsdGhpcy5vdmVyVGltZSx0aGlzLnN0YXJ0VGltZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubWVhbl9UaW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmluaXNoX3RpbWUgPSBwYXJzZUludCgodGhpcy5vdmVyVGltZSAtIHRoaXMuc3RhcnRUaW1lKS8xMDArXCJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydFRpbWUgPSAwOyB0aGlzLm92ZXJUaW1lID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIjMzMzMzMzMzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2xvciA9IFwieVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMubGV2ZWwgPCA0ICYmIHRoaXMubGV2ZWwgPiAxKWNvbG9yID0gXCJ5clwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYodGhpcy5sZXZlbCA+PSA0KSBjb2xvciA9IFwieXJiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHdpbiA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIldpblwiKTtcclxuICAgICAgICAgICAgICAgICAgICB3aW4uYWN0aXZlID0gdHJ1ZTsgd2luLnNldFNjYWxlKDApO1xyXG4gICAgICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5BdWRpb01hbmFnZXIucGxheVdpbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91bmQgKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc3VuQXJyYXkgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLm1vdmVBcnJheS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBtPTAgOyBtPHRoaXMubW92ZUFycmF5Lmxlbmd0aDttKyspe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobSA9PSB0aGlzLnJlcGVhdCB8fCBtID09IHRoaXMubnVtYmVyUmVwZWF0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVBcnJheVttXSA9IDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW5BcnJheS5wdXNoKHRoaXMubW92ZUFycmF5W21dKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IG09MCA7IG08dGhpcy5iYWxsX0FycmF5Lmxlbmd0aDttKyspe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobSA9PSB0aGlzLnJlcGVhdCB8fCBtID09IHRoaXMubnVtYmVyUmVwZWF0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW5BcnJheS5wdXNoKDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bkFycmF5LnB1c2goMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEgPSBcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZToxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzczp0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmQ6dGhpcy5yb3VuZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsU3VuQ291bnQ6dGhpcy5ub3dfQXJyYXkubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZWRTdW5Db3VudDpHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GT1t0aGlzLmxldmVsLTFdLm1vdmVOdW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW5TcGVlZDpHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GT1t0aGlzLmxldmVsLTFdLm1vdmVTcGVlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXBTdW5Db3VudDpHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GT1t0aGlzLmxldmVsLTFdLnJlcGVhdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yTGlzdDp0aGlzLmNvbG9yX0FycmF5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ZmluaXNoX3RpbWUvMTAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmaWN1bHR5TGV2ZWw6dGhpcy5sZXZlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bkxpc3Q6c3VuQXJyYXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwVGltZUxpc3Q6dGhpcy50aW1lX0FycmF5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluZGVyOnRoaXMuY291bnRUaW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3V0UHV0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MudHdlZW4od2luKVxyXG4gICAgICAgICAgICAgICAgICAgIC5kZWxheSgwLjQpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKDAuMDEse3NjYWxlOjIuNX0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKDAuMzUse3NjYWxlOjF9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5kZWxheSgwLjQpXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbi5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95TGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLm92ZXIgPT0gZmFsc2UgJiYgdGhpcy5jb3VudFRpbWUgPj0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmxldmVsID49IDE1KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5zdWNjZXNzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVsICs9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5sZXZlbExhYmVsLnN0cmluZyA9IHRoaXMubGV2ZWwgKyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZnVodW8gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXNzTGV2ZWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZXZlbCArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMubGV2ZWxMYWJlbC5zdHJpbmcgPSB0aGlzLmxldmVsICsgXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZ1aHVvID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXNzTGV2ZWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldExvc3MoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyB0aGlzLmhpdEFjdGlvbihkYXRhKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgc2V0TG9zcygpe1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5BdWRpb01hbmFnZXIucGxheVdhcm5pbmcoKTtcclxuICAgICAgICB0aGlzLmJlZ2luID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vdmVyVGltZSA9IHRoaXMuZ2V0VGltZSgpO1xyXG4gICAgICAgIGlmKHRoaXMuc3RhcnRUaW1lID4gMCAmJiB0aGlzLm92ZXJUaW1lID4gMCl7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLm1lYW5fVGltZSArPSAodGhpcy5vdmVyVGltZSAtIHRoaXMuc3RhcnRUaW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGZpbmlzaF90aW1lID0gcGFyc2VJbnQoKHRoaXMub3ZlclRpbWUgLSB0aGlzLnN0YXJ0VGltZSkvMTAwK1wiXCIpO1xyXG4gICAgICAgIHRoaXMuc3RhcnRUaW1lID0gMDsgdGhpcy5vdmVyVGltZSA9IDA7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gXCJ5XCI7XHJcbiAgICAgICAgaWYodGhpcy5sZXZlbCA8IDQgJiYgdGhpcy5sZXZlbCA+IDEpY29sb3IgPSBcInlyXCI7XHJcbiAgICAgICAgZWxzZSBpZih0aGlzLmxldmVsID49IDQpIGNvbG9yID0gXCJ5cmJcIjtcclxuICAgICAgICB0aGlzLnJvdW5kICs9IDE7XHJcbiAgICAgICAgbGV0IHN1bkFycmF5ID0gW107XHJcbiAgICAgICAgaWYodGhpcy5tb3ZlQXJyYXkubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIGZvcihsZXQgbT0wIDsgbTx0aGlzLm1vdmVBcnJheS5sZW5ndGg7bSsrKXtcclxuICAgICAgICAgICAgICAgIGlmKG0gPT0gdGhpcy5yZXBlYXQgfHwgbSA9PSB0aGlzLm51bWJlclJlcGVhdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQXJyYXlbbV0gPSAyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc3VuQXJyYXkucHVzaCh0aGlzLm1vdmVBcnJheVttXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgZm9yKGxldCBtPTAgOyBtPHRoaXMuYmFsbF9BcnJheS5sZW5ndGg7bSsrKXtcclxuICAgICAgICAgICAgICAgIGlmKG0gPT0gdGhpcy5yZXBlYXQgfHwgbSA9PSB0aGlzLm51bWJlclJlcGVhdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VuQXJyYXkucHVzaCgyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBzdW5BcnJheS5wdXNoKDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gXHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEgPSBcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6MSxcclxuICAgICAgICAgICAgc3VjY2VzczpmYWxzZSxcclxuICAgICAgICAgICAgcm91bmQ6dGhpcy5yb3VuZCxcclxuICAgICAgICAgICAgdG90YWxTdW5Db3VudDp0aGlzLm5vd19BcnJheS5sZW5ndGgsXHJcbiAgICAgICAgICAgIG1vdmVkU3VuQ291bnQ6R2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk9bdGhpcy5sZXZlbC0xXS5tb3ZlTnVtYmVyLFxyXG4gICAgICAgICAgICBzdW5TcGVlZDpHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GT1t0aGlzLmxldmVsLTFdLm1vdmVTcGVlZCxcclxuICAgICAgICAgICAgb3ZlcmxhcFN1bkNvdW50OkdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPW3RoaXMubGV2ZWwtMV0ucmVwZWF0LFxyXG4gICAgICAgICAgICBjb2xvckxpc3Q6dGhpcy5jb2xvcl9BcnJheSxcclxuICAgICAgICAgICAgZHVyYXRpb246ZmluaXNoX3RpbWUvMTAsXHJcbiAgICAgICAgICAgIGRpZmZpY3VsdHlMZXZlbDp0aGlzLmxldmVsLFxyXG4gICAgICAgICAgICBzdW5MaXN0OnN1bkFycmF5LFxyXG4gICAgICAgICAgICBzdGVwVGltZUxpc3Q6dGhpcy50aW1lX0FycmF5LFxyXG4gICAgICAgICAgICByZW1haW5kZXI6dGhpcy5jb3VudFRpbWVcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vdXRQdXQoKTtcclxuICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgICAgICBpZih0aGlzLmZ1aHVvID09IHRydWUpe1xyXG4gICAgICAgICAgICB0aGlzLmZ1aHVvID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubG9zZUxldmVsKDEpO1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgaWYodGhpcy5sZXZlbCA+IDIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZXZlbCAtPSAxO1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5sZXZlbExhYmVsLnN0cmluZyA9IHRoaXMubGV2ZWwgKyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mdWh1byA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmZ1aHVvID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvc2VMZXZlbCgyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb3NlTGV2ZWwoMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG92ZXIgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJPdmVyXCIpO1xyXG4gICAgICAgIGNjLnR3ZWVuKG92ZXIpXHJcbiAgICAgICAgLnRvKDAuMjUse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAuZGVsYXkoMC4xKVxyXG4gICAgICAgIC50bygwLjIse29wYWNpdHk6MH0pXHJcbiAgICAgICAgLmRlbGF5KDAuMSlcclxuICAgICAgICAudG8oMC4xNSx7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgIC5kZWxheSgwLjEpXHJcbiAgICAgICAgLnRvKDAuMSx7b3BhY2l0eTowfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBoaXRBY3Rpb24oZGF0YSl7XHJcbiAgICAgICAgdGhpcy5oaXQuYWN0aXZlID0gdHJ1ZTsgdGhpcy5oaXQub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgdGhpcy5oaXQuc2V0UG9zaXRpb25cclxuICAgICAgICB0aGlzLmhpdC5zZXRQb3NpdGlvbih0aGlzLmJhbGxfQXJyYXlbZGF0YV0ueCszNSx0aGlzLmJhbGxfQXJyYXlbZGF0YV0ueSszNSk7XHJcbiAgICAgICAgY2MudHdlZW4odGhpcy5oaXQpXHJcbiAgICAgICAgLnRvKDAse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAudG8oMC4yLHtwb3NpdGlvbjpjYy52Myh0aGlzLmhpdC54LTM1LHRoaXMuaGl0LnktMzUsMCl9KVxyXG4gICAgICAgIC5kZWxheSgwLjIpXHJcbiAgICAgICAgLnRvKDAuMSx7b3BhY2l0eTowfSlcclxuICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgdGhpcy5oaXQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+W8gOWni+a4uOaIj1xyXG4gICAgc3RhcnRHYW1lKCl7XHJcbiAgICAgICAgaWYodGhpcy5vdmVyID09IGZhbHNlICYmIHRoaXMuY291bnRUaW1lID4gMCl7XHJcbiAgICAgICAgICAgIHRoaXMucGF1c2UgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVN1bigpO1xyXG4gICAgICAgICAgICB0aGlzLmJlZ2luID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuYmFsbClcclxuICAgICAgICAgICAgLnRvKDAuNSx7b3BhY2l0eToyNTUsc2NhbGU6MS4zfSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMucnVuR2FtZSgpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJ1bkdhbWUoKXtcclxuICAgICAgICBsZXQgdGltZSA9IC02NTA7XHJcbiAgICAgICAgZm9yKGxldCBpPTA7IGk8dGhpcy5ub3dfQXJyYXkubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICB0aW1lID0gdGhpcy5ub3dfQXJyYXlbaV0udGltZSoxMDAwICsgdGltZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm92ZXIgPT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gdGhpcy5ub3dfQXJyYXlbaV0udGltZUNvdW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRlbXAgPiAwLjUpIHRlbXAgPSAwLjU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaSAhPSAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5iYWxsICYmIHRoaXMubm93X0FycmF5W2ldKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlTGluZShjYy52Mih0aGlzLmJhbGwueCx0aGlzLmJhbGwueSksY2MudjIodGhpcy5ub3dfQXJyYXlbaV0ueCx0aGlzLm5vd19BcnJheVtpXS55KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm93X0FycmF5W2ldLnRpbWUtdGVtcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgY2MudHdlZW4odGhpcy5iYWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIC50byh0aGlzLm5vd19BcnJheVtpXS50aW1lLXRlbXAse3g6dGhpcy5ub3dfQXJyYXlbaV0ueCx5OnRoaXMubm93X0FycmF5W2ldLnl9KVxyXG4gICAgICAgICAgICAgICAgICAgIC50bygwLjEse3NjYWxlOjF9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYWxsKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQmFsbChpLHRoaXMubm93X0FycmF5W2ldLmNvbG9yLHRoaXMubm93X0FycmF5W2ldLnNwZWVkLHRoaXMubm93X0FycmF5W2ldLnJlcGVhdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGkgPT0gdGhpcy5ub3dfQXJyYXkubGVuZ3RoIC0xKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFsbC5vcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveUxpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luR2FtZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPW3RoaXMubGV2ZWwtMV0ubW92ZU51bWJlcjwxKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXVzZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVBY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDE1MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdGFydCgpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9LCB0aW1lKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVNb3ZlKCl7XHJcbiAgICAgICAgaWYodGhpcy5vdmVyID09IGZhbHNlKXtcclxuICAgICAgICAgICAgbGV0IGluZm8gPSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GT1t0aGlzLmxldmVsLTFdO1xyXG4gICAgICAgICAgICAvL+aUueWPmOenu+WKqOmAn+W6plxyXG4gICAgICAgICAgICB2YXIgc3BlZWQgPSA3O1xyXG4gICAgICAgICAgICBpZihpbmZvLm1vdmVTcGVlZCA+PSAyKXtcclxuICAgICAgICAgICAgICAgIHNwZWVkID0gNyAtIGluZm8ubW92ZVNwZWVkLzI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoaW5mby5yZXBlYXQgPT0gMSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcGVhdCAgPSBwYXJzZUludCgoTWF0aC5yYW5kb20oKSooaW5mby5udW1iZXItMSkrMSkgKyBcIlwiKTtcclxuICAgICAgICAgICAgICAgIGxldCB0ZW1wTnVtYmVyID0gMDtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMucmVwZWF0ID0gNDtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMucmVwZWF0ICA+IDQpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyUmVwZWF0ID0gcGFyc2VJbnQoTWF0aC5yYW5kb20oKSo0ICsgXCJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5yZXBlYXQgID09IChpbmZvLm51bWJlci0xKSkgIC8v5aaC5p6c5piv5pyA5ZCO5LiA5LiqIOS4jeiDvei3n+esrOS4gOS4qumHjeWPoFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyUmVwZWF0ID0gdGhpcy5yZXBlYXQgIC0gcGFyc2VJbnQoIChNYXRoLnJhbmRvbSgpKjMgKyAyKSsgXCJcIilcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wTnVtYmVyID0gIHRoaXMuUG9zX0FycmF5W3RoaXMubnVtYmVyUmVwZWF0XTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlBvc19BcnJheVt0aGlzLnJlcGVhdCBdID0gdGVtcE51bWJlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2V7IC8vIDAgMSAyIDMgNCA1IFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIDYgLSAzIC0gMSAgPSAyIDQgIDAxIDRcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnJlcGVhdCAgPT0gMCkgdGhpcy5yZXBlYXQgID0gMTtcclxuICAgICAgICAgICAgICAgICAgICBpZigoaW5mby5udW1iZXItMS10aGlzLnJlcGVhdCApID09IDIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWJlclJlcGVhdCA9IGluZm8ubnVtYmVyIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcE51bWJlciA9ICB0aGlzLlBvc19BcnJheVt0aGlzLm51bWJlclJlcGVhdF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoKGluZm8ubnVtYmVyLTEtdGhpcy5yZXBlYXQgKSA9PSAxKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJSZXBlYXQgPSB0aGlzLnJlcGVhdCAtIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBOdW1iZXIgPSAgdGhpcy5Qb3NfQXJyYXlbdGhpcy5udW1iZXJSZXBlYXRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZigoaW5mby5udW1iZXItMS10aGlzLnJlcGVhdCApID09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWJlclJlcGVhdCA9IHRoaXMucmVwZWF0IC0gMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcE51bWJlciA9ICB0aGlzLlBvc19BcnJheVt0aGlzLm51bWJlclJlcGVhdF07XHJcbiAgICAgICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKChpbmZvLm51bWJlci0xLXRoaXMucmVwZWF0ICkgPiAyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJSZXBlYXQgPSBwYXJzZUludChNYXRoLnJhbmRvbSgpKihpbmZvLm51bWJlci10aGlzLnJlcGVhdCAtMikgKyBcIlwiKSArIHRoaXMucmVwZWF0ICArIDIgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wTnVtYmVyID0gIHRoaXMuUG9zX0FycmF5W3RoaXMubnVtYmVyUmVwZWF0XTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1iZXJSZXBlYXQgPSB0aGlzLnJlcGVhdCAtIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBOdW1iZXIgPSAgdGhpcy5Qb3NfQXJyYXlbdGhpcy5udW1iZXJSZXBlYXRdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlBvc19BcnJheVt0aGlzLnJlcGVhdF0gPSB0ZW1wTnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKGluZm8ubW92ZU51bWJlciA+IDApe1xyXG4gICAgICAgICAgICAgICAgLy8wIDEgMiAzIDQgNSA2IDcgOCA5XHJcbiAgICAgICAgICAgICAgICAvL+WPr+enu+WKqOWMuuWIhlxyXG4gICAgICAgICAgICAgICAgbGV0IHBvcyA9IGNjLnYyKDAsMCk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgej0wOyB6PGluZm8ubnVtYmVyOyB6Kyspe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZUFycmF5W3pdID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvcihsZXQgcD0wOyBwPGluZm8ubW92ZU51bWJlcjsgcCsrKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVBcnJheVtpbmZvLm51bWJlci0xLXBdID0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCB0aW1lT3V0ID0gMDtcclxuICAgICAgICAgICAgICAgIC8v5omT5Lmx5Y+v56e75Yqo6aG65bqPXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVBcnJheS5zb3J0KCgpID0+IE1hdGgucmFuZG9tKCkgLSAwLjUpO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5tb3ZlQXJyYXlbMF0gPT0gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCByPWluZm8ubnVtYmVyLTE7IHI+PTA7IHItLSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRoaXMubW92ZUFycmF5W3JdID09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQXJyYXlbcl0gPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQXJyYXlbMF0gPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gZGVidWdnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v6K6+572u6YeN5Y+gXHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnJlcGVhdCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5udW1iZXJSZXBlYXQgPSAtMTtcclxuXHJcbiAgICAgICAgICAgICAgICAvL+WwhumHjeWPoOeahOiuvue9ruS4uuS4jeWPr+enu+WKqCAgMSAxIDEgMSAwIDAgMSAwIDAgMCAgIC8gMiA3XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IGsgPTA7IGs8dGhpcy5tb3ZlQXJyYXkubGVuZ3RoO2srKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5tb3ZlQXJyYXlba109PTEgJiYgKGsgPT0gdGhpcy5yZXBlYXQgfHwgayA9PSB0aGlzLm51bWJlclJlcGVhdCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IG0gPSB0aGlzLm1vdmVBcnJheS5sZW5ndGgtMTsgbSA+PSAwOyBtLS0pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobSAhPSBrICYmIHRoaXMubW92ZUFycmF5W21dID09IDAgJiYgbSE9IHRoaXMucmVwZWF0ICYmIG0hPSB0aGlzLm51bWJlclJlcGVhdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQXJyYXlbbV0gPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZUFycmF5W2tdID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtICA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBpID0wOyBpPHRoaXMuUG9zX0FycmF5Lmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMubW92ZUFycmF5IFtpXSA9PSAxKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZU91dCArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IHRoaXMuZ2V0UG9zMih0cnVlLGkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5Qb3NfQXJyYXlbaV0gPSBwb3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRpbWVPdXQqMzAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIC8v56e75Yqo5ZCO5pWw5o2uIOmHjeaWsOWIt+S4gOmBjei1i+WAvFxyXG4gICAgdXBkYXRlQXJyYXkoKXtcclxuICAgICAgICBmb3IobGV0IGk9MDsgaTx0aGlzLm5vd19BcnJheS5sZW5ndGgtMTtpKyspe1xyXG4gICAgICAgICAgICB0aGlzLm5vd19BcnJheVtpXS54ID0gdGhpcy5Qb3NfQXJyYXlbaV0ueDtcclxuICAgICAgICAgICAgdGhpcy5ub3dfQXJyYXlbaV0ueSA9IHRoaXMuUG9zX0FycmF5W2ldLnk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy/lpKrpmLPliJ3lp4vljJblkI7np7vliqjmlrnms5VcclxuICAgICBtb3ZlQWN0aW9uKCl7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBcnJheSgpO1xyXG4gICAgICAgIGxldCBtb3ZlQXJyYXkgPSB0aGlzLm1vdmVBcnJheTtcclxuICAgICAgICBsZXQgaW5mbyA9IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPW3RoaXMubGV2ZWwtMV07XHJcbiAgICAgICAgLy/mlLnlj5jnp7vliqjpgJ/luqZcclxuICAgICAgICB2YXIgc3BlZWQgPSA3O1xyXG4gICAgICAgIGlmKGluZm8ubW92ZVNwZWVkID49IDIpe1xyXG4gICAgICAgICAgICBzcGVlZCA9IDcgLSBpbmZvLm1vdmVTcGVlZC8yO1xyXG4gICAgICAgIH0gIFxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZihpbmZvLm1vdmVOdW1iZXIgPiAwKXtcclxuICAgICAgICAgICAgLy8wIDEgMiAzIDQgNSA2IDcgOCA5XHJcbiAgICAgICAgICAgIC8v5Y+v56e75Yqo5Yy65YiGXHJcbiAgICAgICAgICAgIGxldCBwb3MgPSBjYy52MigwLDApO1xyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIHRoaXMucmVwZWF0ID0gLTE7XHJcbiAgICAgICAgICAgIC8vIHRoaXMubnVtYmVyUmVwZWF0ID0gLTE7XHJcblxyXG4gICAgICAgICAgICAgICAgLy/lsIbph43lj6DnmoTorr7nva7kuLrkuI3lj6/np7vliqggIDEgMSAxIDEgMCAwIDEgMCAwIDAgICAvIDIgN1xyXG4gICAgICAgICAgICBmb3IobGV0IGsgPTA7IGs8dGhpcy5tb3ZlQXJyYXkubGVuZ3RoO2srKyl7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm1vdmVBcnJheVtrXT09MSAmJiAoayA9PSB0aGlzLnJlcGVhdCB8fCBrID09IHRoaXMubnVtYmVyUmVwZWF0KSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBtID0gdGhpcy5tb3ZlQXJyYXkubGVuZ3RoLTE7IG0gPj0gMDsgbS0tKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYobSAhPSBrICYmIHRoaXMubW92ZUFycmF5W21dID09IDAgJiYgbSE9IHRoaXMucmVwZWF0ICYmIG0hPSB0aGlzLm51bWJlclJlcGVhdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVBcnJheVttXSA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVBcnJheVtrXSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtICA9IC0xO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgbGFzdE51bWJlciA9IDA7XHJcbiAgICAgICAgICAgIC8v6ZSB5a6a5pyA5ZCO5LiA5Liq5Y+v56e75Yqo55qEXHJcbiAgICAgICAgICAgIGZvcihsZXQgaiA9MDsgajxtb3ZlQXJyYXkubGVuZ3RoO2orKyl7XHJcbiAgICAgICAgICAgICAgICBpZihtb3ZlQXJyYXlbal09PTEpe1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3ROdW1iZXIgPSBqO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IobGV0IGkgPTA7IGk8dGhpcy5iYWxsX0FycmF5Lmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgaWYobW92ZUFycmF5W2ldID09IDEpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGkgIT0gbGFzdE51bWJlcil7ICAgIC8v5aaC5p6c5LiN5piv5pyA5ZCO5LiA5Liq56e75Yqo55qEXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aW1lID0gc3BlZWQqdGhpcy5jYWxjdWxhdGVEaXN0YW5jZTModGhpcy5iYWxsX0FycmF5W2ldLngsdGhpcy5iYWxsX0FycmF5W2ldLnksdGhpcy5Qb3NfQXJyYXlbaV0ueCx0aGlzLlBvc19BcnJheVtpXS55KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWxsX0FycmF5W2ldLmdldENvbXBvbmVudChcIlN1blwiKS5tb3ZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2MudHdlZW4odGhpcy5iYWxsX0FycmF5W2ldKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudG8odGltZSx7cG9zaXRpb246dGhpcy5Qb3NfQXJyYXlbaV19KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFsbF9BcnJheVtpXS5nZXRDb21wb25lbnQoXCJTdW5cIikubW92ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy/lpoLmnpzmmK/mnIDlkI7kuIDkuKpcclxuICAgICAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGltZSA9IHNwZWVkKnRoaXMuY2FsY3VsYXRlRGlzdGFuY2UzKHRoaXMuYmFsbF9BcnJheVtpXS54LHRoaXMuYmFsbF9BcnJheVtpXS55LHRoaXMuUG9zX0FycmF5W2ldLngsdGhpcy5Qb3NfQXJyYXlbaV0ueSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFsbF9BcnJheVtpXS5nZXRDb21wb25lbnQoXCJTdW5cIikubW92ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuYmFsbF9BcnJheVtpXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRvKHRpbWUse3Bvc2l0aW9uOnRoaXMuUG9zX0FycmF5W2ldfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWxsX0FycmF5W2ldLmdldENvbXBvbmVudChcIlN1blwiKS5tb3ZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYmVnaW5HYW1lKCl7XHJcbiAgICAgICAgdGhpcy5iZWdpbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGFydFRpbWUgPSB0aGlzLmdldFRpbWUoKTtcclxuICAgICAgICB0aGlzLnRpbWVTdGFydCA9IHRoaXMuZ2V0VGltZSgpO1xyXG4gICAgICAgIHRoaXMucGF1c2UgPSBmYWxzZTtcclxuICAgICAgICAvLyB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJzaG93QnRuXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UmFuZG9tQXJyYXkobGFzdE51bWJlcil7XHJcbiAgICAgICAgbGV0IG51bSA9ICBwYXJzZUludChNYXRoLnJhbmRvbSgpKjggLSA0ICsgXCJcIik7XHJcbiAgICAgICAgbGV0IGpnID0gbnVtICsgbGFzdE51bWJlcjtcclxuICAgICAgICBpZihudW0gPiAxIHx8IG51bSA8LTEpe1xyXG4gICAgICAgICAgICBpZiggbnVtID09IDAgfHwgKCBqZzwwIHx8IGpnID49IHRoaXMuUG9zX0FycmF5Lmxlbmd0aCkpe1xyXG4gICAgICAgICAgICAgICAgamcgPSB0aGlzLmdldFJhbmRvbUFycmF5KGxhc3ROdW1iZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIGpnID0gdGhpcy5nZXRSYW5kb21BcnJheShsYXN0TnVtYmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICBcclxuICAgICAgICByZXR1cm4gamc7XHJcbiAgICB9XHJcblxyXG4gICAgLy/liJvlu7rlpKrpmLPmiYDpnIDmlbDmja5cclxuICAgIGNyZWF0ZVN1bigpe1xyXG4gICAgICAgIGxldCBsZXZlbERhdGEgPSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GT1t0aGlzLmxldmVsLTFdO1xyXG4gICAgICAgIGxldCB0aWVtT3V0ID0gMDtcclxuICAgICAgICBmb3IobGV0IGw9MDsgbDxsZXZlbERhdGEubnVtYmVyO2wrKyl7XHJcbiAgICAgICAgICAgIHRpZW1PdXQgKz0gMTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm92ZXIgPT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3MgPSB0aGlzLmdldFBvcyhmYWxzZSxsKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlBvc19BcnJheS5wdXNoKHBvcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5Qb3NfQXJyYXkubGVuZ3RoID09IGxldmVsRGF0YS5udW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZU1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVQb3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9LCB0aWVtT3V0KjEwMCk7XHJcbiBcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gMCAwIDAgMCAwIDAgICAgIDAgICAgMCAwIDAgMFxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVQb3MoKXtcclxuICAgICAgICBsZXQgZGF0YSA9IHt4OnRoaXMuYmFsbC54LHk6dGhpcy5iYWxsLnksdGltZTowLHRpbWVDb3VudDowLGNvbG9yOjAsc3BlZWQ6MCxyZXBlYXQ6ZmFsc2V9O1xyXG4gICAgICAgIGxldCBsZXZlbERhdGEgPSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GT1t0aGlzLmxldmVsLTFdO1xyXG4gICAgICAgIC8v6aKc6Imy5Yy65YiGXHJcbiAgICAgICAgbGV0IGNvbG9yQXJyYXkgPSBbMCwxXTtcclxuICAgICAgICBmb3IobGV0IGo9MDsgajxsZXZlbERhdGEubnVtYmVyLTI7aisrKXtcclxuICAgICAgICAgICAgbGV0IGNvbG9yVGVtcCA9IHBhcnNlSW50KE1hdGgucmFuZG9tKCkqMytcIlwiKTtcclxuICAgICAgICAgICAgaWYobGV2ZWxEYXRhLm51bWJlciA8IDYgJiYgY29sb3JUZW1wID09IDIpIGNvbG9yVGVtcCA9IDA7XHJcbiAgICAgICAgICAgIGNvbG9yQXJyYXkucHVzaChjb2xvclRlbXApO1xyXG4gICAgICAgICAgICBjb2xvckFycmF5LnNvcnQoKCkgPT4gTWF0aC5yYW5kb20oKSAtIDAuNSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbG9yQXJyYXkuc29ydCgoKSA9PiBNYXRoLnJhbmRvbSgpIC0gMC41KTtcclxuICAgICAgICBpZihsZXZlbERhdGEubnVtYmVyID09IDQpIGNvbG9yQXJyYXkgPSBbMCwwLDAsMF07XHJcbiAgICAgICAgdGhpcy5jb2xvcl9BcnJheSA9IGNvbG9yQXJyYXk7XHJcblxyXG5cclxuICAgICAgICBmb3IobGV0IGk9MDsgaTxsZXZlbERhdGEubnVtYmVyO2krKyl7XHJcbiAgICAgICAgICAgIGxldCB0aW1lQ291bnQgPSB0aGlzLnRpbWVDb3VudCArICgwLjYtdGhpcy5jYWxjdWxhdGVEaXN0YW5jZSh0aGlzLmJhbGwueCx0aGlzLmJhbGwueSx0aGlzLlBvc19BcnJheVtpXS54LHRoaXMuUG9zX0FycmF5W2ldLnkpKTtcclxuICAgICAgICAgICAgbGV0IHRpbWUgPSB0aGlzLmNhbGN1bGF0ZURpc3RhbmNlKHRoaXMuYmFsbC54LHRoaXMuYmFsbC55LHRoaXMuUG9zX0FycmF5W2ldLngsdGhpcy5Qb3NfQXJyYXlbaV0ueSkrdGltZUNvdW50O1xyXG4gICAgICAgICAgICBkYXRhID0ge3g6dGhpcy5Qb3NfQXJyYXlbaV0ueCx5OnRoaXMuUG9zX0FycmF5W2ldLnksdGltZTp0aW1lLHRpbWVDb3VudDp0aW1lQ291bnQsY29sb3I6Y29sb3JBcnJheVtpXSxzcGVlZDpsZXZlbERhdGEubW92ZVNwZWVkLHJlcGVhdDpmYWxzZX07XHJcbiAgICAgICAgICAgIGlmKHRoaXMucmVwZWF0ID09IGkpe1xyXG4gICAgICAgICAgICAgICAgZGF0YS5yZXBlYXQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5udW1iZXJSZXBlYXQgPT0gaSl7XHJcbiAgICAgICAgICAgICAgICBkYXRhLnJlcGVhdCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5ub3dfQXJyYXkucHVzaChkYXRhKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJ1bkdhbWUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQb3ModHlwZSxudW0pe1xyXG4gICAgICAgIGxldCBwb3NYID0gTWF0aC5yYW5kb20oKSo2MjAgLSAzMTA7XHJcbiAgICAgICAgbGV0IHBvc1kgPSBNYXRoLnJhbmRvbSgpKih0aGlzLmZpdFRvcC10aGlzLmZpdEJvdCkgKyB0aGlzLmZpdEJvdDtcclxuXHJcbiAgICAgICAgbGV0IHBvaW50ID0gY2MudjIocG9zWCxwb3NZKTtcclxuICAgICAgIFxyXG4gICAgICAgIGlmKHRoaXMuUG9zX0FycmF5Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICBmb3IobGV0IGk9MDsgaTx0aGlzLlBvc19BcnJheS5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgICAgIGxldCBkaXN0YW5jZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgbGV0IHBkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZihpID09IG51bSkgcGQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgZGlzdGFuY2UgPSB0aGlzLmdldERpc3RhbmNlKHBvc1gscG9zWSx0aGlzLlBvc19BcnJheVtpXS54LHRoaXMuUG9zX0FycmF5W2ldLnkscGQpXHJcbiAgICAgICAgICAgICAgICBpZihkaXN0YW5jZSA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgaSA9IDEwMDAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50ID0gdGhpcy5nZXRQb3ModHlwZSxudW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoZGlzdGFuY2UgPT0gdHJ1ZSAmJiBpID09ICh0aGlzLlBvc19BcnJheS5sZW5ndGgtMSkpe1xyXG4gICAgICAgICAgICAgICAgICAgIGkgPSAxMDAwMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwb2ludDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQb3MyKHR5cGUsbnVtKXtcclxuXHJcbiAgICAgICAgbGV0IHBvc1ggPSBNYXRoLnJhbmRvbSgpKjYyMCAtIDMxMDtcclxuICAgICAgICBsZXQgcG9zWSA9IE1hdGgucmFuZG9tKCkqKHRoaXMuZml0VG9wLXRoaXMuZml0Qm90KSArIHRoaXMuZml0Qm90O1xyXG5cclxuICAgICAgICBsZXQgcG9pbnQgPSBjYy52Mihwb3NYLHBvc1kpO1xyXG4gICAgICAgXHJcbiBcclxuICAgICAgICBpZih0aGlzLlBvc19BcnJheS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgZm9yKGxldCBpPTA7IGk8dGhpcy5Qb3NfQXJyYXkubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGlzdGFuY2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGxldCBwZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYoaSA9PSBudW0pIHBkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gdGhpcy5nZXREaXN0YW5jZTIocG9zWCxwb3NZLHRoaXMuUG9zX0FycmF5W2ldLngsdGhpcy5Qb3NfQXJyYXlbaV0ueSxwZClcclxuICAgICAgICAgICAgICAgIGlmKGRpc3RhbmNlID09IGZhbHNlKXtcclxuICAgICAgICAgICAgICAgICAgICBpID0gMTAwMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnQgPSB0aGlzLmdldFBvczIodHlwZSxudW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoZGlzdGFuY2UgPT0gdHJ1ZSAmJiBpID09ICh0aGlzLlBvc19BcnJheS5sZW5ndGgtMSkpe1xyXG4gICAgICAgICAgICAgICAgICAgIGkgPSAxMDAwMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwb2ludDtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXN0YW5jZSh4MSwgeTEsIHgyLCB5MixudW0pIHtcclxuICAgICAgICB2YXIgamcgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBkeCA9IHgyIC0geDE7XHJcbiAgICAgICAgY29uc3QgZHkgPSB5MiAtIHkxO1xyXG4gICAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydChkeCpkeCArIGR5KmR5KTtcclxuICAgICAgICBpZihkaXN0YW5jZSA+IDE2MCl7XHJcbiAgICAgICAgICAgIGlmKG51bSA9PSB0cnVlKXtcclxuICAgICAgICAgICAgICAgIGlmKGRpc3RhbmNlIDwgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk9bdGhpcy5sZXZlbC0xXS5tYXhNb3ZlKXtcclxuICAgICAgICAgICAgICAgICAgICBqZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgZWxzZSBqZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZihkaXN0YW5jZSA8IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPW3RoaXMubGV2ZWwtMV0ubWF4TW92ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgamcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgIGVsc2UgamcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gamc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGlzdGFuY2UyKHgxLCB5MSwgeDIsIHkyLG51bSkge1xyXG4gICAgICAgIHZhciBqZyA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGR4ID0geDIgLSB4MTtcclxuICAgICAgICBjb25zdCBkeSA9IHkyIC0geTE7XHJcbiAgICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KGR4KmR4ICsgZHkqZHkpO1xyXG4gICAgICAgIGlmKGRpc3RhbmNlID4gMTYwKXtcclxuICAgICAgICAgICAgaWYobnVtID09IHRydWUpe1xyXG4gICAgICAgICAgICAgICAgaWYoZGlzdGFuY2UgPCBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GT1t0aGlzLmxldmVsLTFdLm1heERpc3RhbmNlKSBqZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGpnID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIGpnID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gamc7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNyZWF0ZUJhbGwobnVtYmVyLGNvbG9yLHNwZWVkLHJlcGVhdCl7XHJcbiAgICAgICAgbGV0IGJhbGwgPSBudWxsO1xyXG4gICAgICAgIGlmKGNvbG9yID09IDApYmFsbCA9IGNjLmluc3RhbnRpYXRlKHRoaXMucWl1MSk7XHJcbiAgICAgICAgZWxzZSBpZihjb2xvciA9PSAxKWJhbGwgPSBjYy5pbnN0YW50aWF0ZSh0aGlzLnFpdTIpO1xyXG4gICAgICAgIGVsc2UgaWYoY29sb3IgPT0gMiliYWxsID0gY2MuaW5zdGFudGlhdGUodGhpcy5xaXUzKTtcclxuICAgICAgICBiYWxsLnBhcmVudCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIlN1blwiKTtcclxuICAgICAgICBiYWxsLnpJbmRleCA9IHRoaXMubm93X0FycmF5Lmxlbmd0aCAtIG51bWJlcjtcclxuICAgICAgICBiYWxsLnNldFBvc2l0aW9uKHRoaXMuYmFsbC54LHRoaXMuYmFsbC55KTtcclxuICAgICAgICBiYWxsLmdldENvbXBvbmVudChcIlN1blwiKS5pbml0KG51bWJlcixjb2xvcixzcGVlZCxyZXBlYXQpO1xyXG4gICAgICAgIHRoaXMuYmFsbF9BcnJheS5wdXNoKGJhbGwpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlc3Ryb3lMaW5lKCkge1xyXG4gICAgICAgIGZvcihsZXQgaSA9MDsgaTwgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiTGluZVwiKS5jaGlsZHJlbi5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgaWYodGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiTGluZVwiKS5jaGlsZHJlbltpXSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJMaW5lXCIpLmNoaWxkcmVuW2ldLnJlbW92ZUZyb21QYXJlbnQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkxpbmVcIikuY2hpbGRyZW5baV0gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkxpbmVcIikucmVtb3ZlQWxsQ2hpbGRyZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVMaW5lKHN0YXJ0LGVuZCx0aW1lKXtcclxuICAgICAgICBsZXQgbGluZSA9IGNjLmluc3RhbnRpYXRlKHRoaXMubGluZVByZWZhYik7XHJcbiAgICAgICAgbGluZS5wYXJlbnQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJMaW5lXCIpO1xyXG4gICAgICAgIGxpbmUuc2V0UG9zaXRpb24oc3RhcnQueCxzdGFydC55KTtcclxuICAgIFxyXG4gICAgICAgIGNvbnN0IGR4ID0gZW5kLnggLSBzdGFydC54O1xyXG4gICAgICAgIGNvbnN0IGR5ID0gZW5kLnkgLSBzdGFydC55O1xyXG4gICAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydChkeCpkeCArIGR5KmR5KTtcclxuICAgICAgICBsaW5lLmhlaWdodCA9IGRpc3RhbmNlO1xyXG4gICAgICAgIGxpbmUuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuZmlsbFJhbmdlID0gMDtcclxuICAgICAgICBsaW5lLmFuZ2xlID0gLXRoaXMuY2FsY3VsYXRlQW5nbGUoc3RhcnQueCxzdGFydC55LGVuZC54LGVuZC55KTtcclxuICAgICAgICBjYy50d2VlbihsaW5lLmdldENvbXBvbmVudChjYy5TcHJpdGUpKVxyXG4gICAgICAgIC50byh0aW1lLHtmaWxsUmFuZ2U6MX0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsY3VsYXRlQW5nbGUoeDEsIHkxLCB4MiwgeTIpIHtcclxuICAgICAgICB2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKHkyLXkxLHgyLXgxKSoxODAgLyBNYXRoLlBJIC0gOTA7XHJcbiAgICAgICAgcmV0dXJuIC1hbmdsZTtcclxuICAgIH1cclxuXHJcbiAgICBjYWxjdWxhdGVEaXN0YW5jZSh4MSwgeTEsIHgyLCB5Mikge1xyXG4gICAgICAgIGNvbnN0IGR4ID0geDIgLSB4MTtcclxuICAgICAgICBjb25zdCBkeSA9IHkyIC0geTE7XHJcbiAgICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KGR4KmR4ICsgZHkqZHkpO1xyXG4gICAgICAgIGlmKGRpc3RhbmNlID4gODAwKSBkaXN0YW5jZSA9IDgwMDtcclxuICAgICAgICBjb25zdCB0aW1lID0gZGlzdGFuY2UvODAwICogMC42O1xyXG4gICAgICAgIHJldHVybiB0aW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGN1bGF0ZURpc3RhbmNlMih4MSwgeTEsIHgyLCB5Mikge1xyXG4gICAgICAgIGNvbnN0IGR4ID0geDIgLSB4MTtcclxuICAgICAgICBjb25zdCBkeSA9IHkyIC0geTE7XHJcbiAgICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KGR4KmR4ICsgZHkqZHkpO1xyXG4gICAgICAgIGlmKGRpc3RhbmNlID4gMTIwMCkgZGlzdGFuY2UgPSAxMjAwO1xyXG4gICAgICAgIGNvbnN0IHRpbWUgPSBkaXN0YW5jZS8xMjAwICogMTtcclxuICAgICAgICByZXR1cm4gdGltZTtcclxuICAgIH1cclxuXHJcbiAgICBjYWxjdWxhdGVEaXN0YW5jZTMoeDEsIHkxLCB4MiwgeTIpIHtcclxuICAgICAgICBjb25zdCBkeCA9IHgyIC0geDE7XHJcbiAgICAgICAgY29uc3QgZHkgPSB5MiAtIHkxO1xyXG4gICAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydChkeCpkeCArIGR5KmR5KTtcclxuICAgICAgICBpZihkaXN0YW5jZSA+IDEyMDApIGRpc3RhbmNlID0gMTIwMDtcclxuICAgICAgICBjb25zdCB0aW1lID0gZGlzdGFuY2UvMTIwMCAqIDEuNTtcclxuICAgICAgICByZXR1cm4gdGltZTtcclxuICAgIH1cclxuXHJcbiAgICAvL+iDjOaZr+enu+WKqFxyXG4gICAgYmdNb3ZlKHR5cGUpe1xyXG4gICAgICAgIGxldCByYW5kb20gPSBNYXRoLnJhbmRvbSgpKjMwMCArIDMwMDtcclxuICAgICAgICBsZXQgcG9zWCA9IE1hdGgucmFuZG9tKCkqNjAwIC0gMzAwO1xyXG4gICAgXHJcbiAgICAgICAgbGV0IHkxID0gdGhpcy5iZzEueSAtIHJhbmRvbSp0eXBlO1xyXG4gICAgICAgIC8vIGxldCB5MiA9IHRoaXMuYmcyLnkgLSByYW5kb20qdHlwZTtcclxuICAgICAgICBsZXQgdGltZTEgPSAwLjcqKHJhbmRvbS80MDApO1xyXG5cclxuICAgICAgICBjYy50d2Vlbih0aGlzLmJhbGwpXHJcbiAgICAgICAgLnRvKDAuMyx7c2NhbGU6MS4zfSlcclxuICAgICAgICAudG8odGltZTEse3g6cG9zWH0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcblxyXG4gICAgICAgIGNjLnR3ZWVuKHRoaXMuYmcxKVxyXG4gICAgICAgIC5kZWxheSgwLjMpXHJcbiAgICAgICAgLnRvKHRpbWUxLHt5OnkxfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuXHJcbiAgICAgICAgLy8gY2MudHdlZW4odGhpcy5iZzIpXHJcbiAgICAgICAgLy8gLmRlbGF5KDAuMylcclxuICAgICAgICAvLyAudG8odGltZTEse3k6eTJ9KVxyXG4gICAgICAgIC8vIC5zdGFydCgpO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgLy8gaWYodGhpcy5vdmVyID09IGZhbHNlICYmIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmN1c3RvbSA9PSAwKXtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuc3RhcnRHYW1lKCk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgaWYodGhpcy5vdmVyID09IGZhbHNlKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRHYW1lKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgXHJcbiAgICAgICAgfSwgdGltZTEqMTUwMCk7XHJcbiAgICB9XHJcbiAgICAvL+aXtumXtOagvOW8j+i9rOaNolxyXG4gICAgZ2V0VGltZU1hcmdpbihzZWNvbmQ6bnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IHRvdGFsID0gMDtcclxuICAgICAgICB0b3RhbCA9IHNlY29uZDtcclxuICAgICAgICBsZXQgaG91ciA9IDA7XHJcbiAgICAgICAgaG91ciA9IHBhcnNlSW50KCh0b3RhbCAvIDM2MDApICsgXCJcIik7Ly/orqHnrpfmlbTmlbDlsI/ml7bmlbBcclxuICAgICAgICBsZXQgYWZ0ZXJIb3VyID0gdG90YWwgLSBob3VyICogNjAgKiA2MDsvL+WPluW+l+eul+WHuuWwj+aXtuaVsOWQjuWJqeS9meeahOenkuaVsFxyXG4gICAgICAgIGxldCBtaW4gPSBwYXJzZUludCgoYWZ0ZXJIb3VyIC8gNjApK1wiXCIpOy8v6K6h566X5pW05pWw5YiGXHJcbiAgICAgICAgbGV0IG0gPSBcIlwiICsgbWluOyAgXHJcbiAgICAgICAgaWYobWluIDwgMTApIG0gPSBcIjBcIittaW47XHJcbiAgICAgICAgbGV0IGFmdGVyTWluID0gdG90YWwgLSBob3VyICogNjAgKiA2MCAtIG1pbiAqIDYwOy8v5Y+W5b6X566X5Ye65YiG5ZCO5Ymp5L2Z55qE56eS5pWwXHJcbiAgICAgICAgbGV0IG1pYW8gPSBhZnRlck1pbiArIFwiXCI7XHJcbiAgICAgICAgaWYoYWZ0ZXJNaW4gPCAxMCkgbWlhbyA9IFwiMFwiICsgYWZ0ZXJNaW47XHJcbiAgICAgICAgcmV0dXJuIG0gKyAnOicgKyBtaWFvXHJcbiAgICB9XHJcblxyXG4gICAgXHJcbiAgICAvL+WmguaenOaYr+WAkuiuoeaXtiDosIPnlKjmraTmlrnms5VcclxuICAgIHVwZGF0ZUNvdW50RG93blRpbWUgKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvdW50VGltZSA+IDAgJiYgdGhpcy5wYXVzZSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvdW50VGltZSAtPSAxO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWUuc3RyaW5nID0gdGhpcy5nZXRUaW1lTWFyZ2luKHRoaXMuY291bnRUaW1lKTtcclxuICAgICAgICAgICAgaWYodGhpcy5jb3VudFRpbWUgPCA1KXtcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMudGltZS5ub2RlKVxyXG4gICAgICAgICAgICAgICAgLnRvKDAuMjUse3NjYWxlOjEuNSxjb2xvcjpjYy5jb2xvcigyNTUsMCwwKX0pXHJcbiAgICAgICAgICAgICAgICAudG8oMC4yNSx7c2NhbGU6MSxjb2xvcjpjYy5jb2xvcigyNTUsMjU1LDI1NSl9KVxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0KClcclxuICAgICAgICAgICAgICAgIGxldCBvdmVyID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiT3ZlclwiKTtcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKG92ZXIpXHJcbiAgICAgICAgICAgICAgICAudG8oMC4yLHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgICAgICAgICAuZGVsYXkoMC4xKVxyXG4gICAgICAgICAgICAgICAgLnRvKDAuMix7b3BhY2l0eTowfSlcclxuICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRoaXMuY291bnRUaW1lIDw9IDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iZWdpbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdmVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudW5zY2hlZHVsZSh0aGlzLnVwZGF0ZUNvdW50RG93blRpbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMb3NzKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGltZSA9IDA7XHJcbiAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLm1lYW5fVGltZSx0aGlzLmNsaWNrQ291bnQpO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5jbGlja0NvdW50ID4gMCkgdGltZSA9IHBhcnNlSW50KEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLm1lYW5fVGltZS90aGlzLmNsaWNrQ291bnQgKyBcIlwiKTtcclxuICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLm1lYW5fVGltZSA9IHBhcnNlSW50KHRpbWUvMTAwICsgXCJcIik7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5tZWFuX1RpbWUgPSBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5tZWFuX1RpbWUgLzEwO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLm1lYW5fVGltZSx0aW1lKTtcclxuICAgICAgICAgICAgICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgICAgICAgICAgICAgaWYodGltZSA+IDEwMDAwKSB0aW1lID0gKE1hdGgucmFuZG9tKCkqMTArNSkqMTAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSYW5rKHRpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldERhdGEoKXtcclxuICAgICAgICBsZXQgZGF0YSA9IEdhbWVEYXRhLl9pbnN0YW5jZS5HQU1FX0RBVEE7XHJcbiAgICAgICAgbGV0IG1hdGNoSWQgPSB0aGlzLmdldE1hdGNoSWQoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhtYXRjaElkKTtcclxuICAgICAgICBsZXQgcG9zdERhdGEgPSB7XHJcbiAgICAgICAgICAgIFwibWF0Y2hJZFwiOm1hdGNoSWQsXHJcbiAgICAgICAgICAgIFwiZGF0YVwiOiBkYXRhXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIuS4iuS8oOaVsOaNrjpcIilcclxuICAgICAgICBIdHRwVXRpbC51cGxvYWRVc2VyTG9nRGF0YShwb3N0RGF0YSxmdW5jdGlvbigpe30pXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWF0Y2hJZCAoKXtcclxuICAgICAgICBsZXQgbWF0Y2hJZCA9IGNjLnN5cy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIm1hdGNoSWRcIik7XHJcblxyXG4gICAgICAgIGlmKG1hdGNoSWQgPT0gXCJ1bmRpZmVuZFwiIHx8IG1hdGNoSWQ9PW51bGwpe1xyXG4gICAgICAgICAgICBtYXRjaElkID0gIHRoaXMuc2V0TWF0Y2hJZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBpZih0aGlzLmNvbnRhaW5zTmFuYW5hKG1hdGNoSWQpID09IHRydWUpe1xyXG4gICAgICAgICAgICAgICAgbWF0Y2hJZCA9ICB0aGlzLnNldE1hdGNoSWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgbGV0IGNoYXIgPSBwYXJzZUludChtYXRjaElkWzEwXSk7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnJvdW5kID09IDEpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNoYXIgKz0gMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG1hdGNoSWQgID0gbWF0Y2hJZC5zbGljZSgwLCAxMCkgKyBjaGFyICsgXCJcIjtcclxuICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLm1hdGNoSWQgPSBtYXRjaElkO1xyXG4gICAgICAgICAgICAgICAgY2Muc3lzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwibWF0Y2hJZFwiLG1hdGNoSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWF0Y2hJZDtcclxuICAgIH1cclxuXHJcbiAgICBjb250YWluc05hbmFuYShzdHIpIHtcclxuICAgICAgICByZXR1cm4gL25hL2kudGVzdChzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldE1hdGNoSWQgKCl7XHJcbiAgICAgICAgLy8g5a6a5LmJ5YyF5ZCr5Y+v55So5a2X56ym55qE5a2X56ym6ZuGXHJcbiAgICAgICAgY29uc3QgY2hhcmFjdGVycyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OSc7XHJcbiAgICAgICAgLy8g5Yib5bu65LiA5Liq5pWw57uE5Lul5L+d5a2Y6ZqP5py65a2X56ymXHJcbiAgICAgICAgY29uc3QgdXVpZEFycmF5ID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5b6q546vMTDmrKEg55Sf5oiQMTDkvY3nmoRVVUlEXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyDnlJ/miJDpmo/mnLrntKLlvJXvvIzojIPlm7TmmK/lrZfnrKbpm4bnmoTplb/luqZcclxuICAgICAgICAgICAgY29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyYWN0ZXJzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIC8vIOS7juWtl+espumbhuS4reiOt+WPlumaj+acuuWtl+esplxyXG4gICAgICAgICAgICBjb25zdCByYW5kb21DaGFyID0gY2hhcmFjdGVycy5jaGFyQXQocmFuZG9tSW5kZXgpO1xyXG4gICAgICAgICAgICAvLyDlsIblrZfnrKbmt7vliqDliLDmlbDnu4TkuK1cclxuICAgICAgICAgICAgdXVpZEFycmF5LnB1c2gocmFuZG9tQ2hhcik7XHJcbiAgICAgICAgfVxyXG4gICAgIFxyXG4gICAgICAgIGxldCBkYXRhID0gIHV1aWRBcnJheS5qb2luKCcnKSArIDEgKyBcIlwiO1xyXG4gICAgICAgIGNjLnN5cy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIm1hdGNoTnVtYmVyXCIsMSk7XHJcbiAgICAgICAgY2Muc3lzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwibWF0Y2hJZFwiLGRhdGEpO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLm1hdGNoSWQgPSBkYXRhO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFJhbmsodGltZSl7XHJcbiAgICAgICAgbGV0IHBvc3REYXRhID0ge1xyXG4gICAgICAgICAgICBcInR5cGVcIjoxLFxyXG4gICAgICAgICAgICBcInJlYWN0aW9uVGltZVwiOiB0aW1lLFxyXG4gICAgICAgICAgICBcInRvdGFsU3VuQ291bnRcIjogR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8udG90YWwsXHJcbiAgICAgICAgICAgIFwic3VjY2Vzc1wiOiBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5zdWNjZXNzXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocG9zdERhdGEpO1xyXG4gICAgICAgIEh0dHBVdGlsLnJhbmtEYXRhKDEsZnVuY3Rpb24oKXt9LHBvc3REYXRhKTtcclxuICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJHYW1lT3ZlclwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkdhbWVPdmVyXCIpLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgIGNjLnR3ZWVuKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkdhbWVPdmVyXCIpKVxyXG4gICAgICAgIC50bygwLjQse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAuZGVsYXkoMilcclxuICAgICAgICAudG8oMC40LHtvcGFjaXR5OjUwfSlcclxuICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiT3ZlclNjZW5lXCIpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0YXJ0KClcclxuICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgb3V0UHV0KCl7XHJcblxyXG4gICAgICAgIGxldCBkYXRhID0gR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEE7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkdBTUVfREFUQSA9IFtdO1xyXG5cclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR0FNRV9EQVRBLnB1c2goR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEpO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd051bWJlcigpe1xyXG4gICAgICAgIGlmKHRoaXMuc2hvdyA9PSBmYWxzZSkgdGhpcy5zaG93ID0gdHJ1ZTtcclxuICAgICAgICBlbHNlIGlmKHRoaXMuc2hvdyA9PSB0cnVlKSB0aGlzLnNob3cgPSBmYWxzZTtcclxuICAgICAgICBmb3IobGV0IGk9MDsgaTx0aGlzLmJhbGxfQXJyYXkubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICB0aGlzLmJhbGxfQXJyYXlbaV0uZ2V0Q29tcG9uZW50KFwiU3VuXCIpLnNob3dOdW1iZXIodGhpcy5zaG93KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIG9uRW5hYmxlICgpIHtcclxuICAgICAgICBOb3RpZmljYXRpb24ub24oXCJjbGlja1N1blwiLCB0aGlzLmNsaWNrU3VuLCB0aGlzKTtcclxuICAgICAgICAvLyBOb3RpZmljYXRpb24ub24oXCJIYW1tZXJQbGF5XCIsIHRoaXMuSGFtbWVyUGxheSwgdGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25EaXNhYmxlICgpIHtcclxuICAgICAgICAvLyBOb3RpZmljYXRpb24ub2ZmKFwicmlnaHRBbnN3ZXJzXCIsIHRoaXMucmlnaHRBbnN3ZXJzKTtcclxuICAgICAgICBOb3RpZmljYXRpb24ub2ZmKFwiY2xpY2tTdW5cIiwgdGhpcy5jbGlja1N1bik7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHVwZGF0ZSAoZHQpIHtcclxuICBcclxuICAgIH1cclxufVxyXG4iXX0=