Commit 192a191e authored by liurufeng's avatar liurufeng

资源更新

parent 64284954
{}
\ No newline at end of file
<html>
<head>
<title>www.layabox.com</title>
<meta charset='utf-8' />
<meta name='renderer' content='webkit' />
<meta name='viewport' content='width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no'
/>
<meta name='apple-mobile-web-app-capable' content='yes' />
<meta name='full-screen' content='true' />
<meta name='x5-fullscreen' content='true' />
<meta name='360-fullscreen' content='true' />
<meta name='laya' screenorientation='landscape' />
<meta http-equiv='expires' content='0' />
<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />
<meta http-equiv='expires' content='0' />
<meta http-equiv='Cache-Control' content='no-siteapp' />
</head>
<body>
<script type="text/javascript">
function loadLib(url) {
var script = document.createElement("script");
script.async = false;
script.src = url;
document.body.appendChild(script);
}
</script>
<script type="text/javascript" src="index.js"></script>
</body>
</html>
\ No newline at end of file
/**
* 设置LayaNative屏幕方向,可设置以下值
* landscape 横屏
* portrait 竖屏
* sensor_landscape 横屏(双方向)
* sensor_portrait 竖屏(双方向)
*/
window.screenOrientation = "sensor_landscape";
//-----libs-begin-----
loadLib("libs/laya.core.js")
loadLib("libs/laya.webgl.js")
loadLib("libs/laya.html.js")
loadLib("libs/laya.d3.js")
loadLib("libs/laya.physics3D.js")
//-----libs-end-------
//loadLib("libs/fairygui.js");
loadLib("js/bundle.js");
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
"use strict";
/**This class is automatically generated by LayaAirIDE, please do not make any modifications. */
Object.defineProperty(exports, "__esModule", { value: true });
/*
* 游戏初始化配置;
*/
var GameConfig = /** @class */ (function () {
function GameConfig() {
}
GameConfig.init = function () {
var reg = Laya.ClassUtils.regClass;
};
GameConfig.width = 640;
GameConfig.height = 1136;
GameConfig.scaleMode = "fixedwidth";
GameConfig.screenMode = "none";
GameConfig.alignV = "top";
GameConfig.alignH = "left";
GameConfig.startScene = "";
GameConfig.sceneRoot = "";
GameConfig.debug = false;
GameConfig.stat = false;
GameConfig.physicsDebug = false;
GameConfig.exportSceneToJson = true;
return GameConfig;
}());
exports.default = GameConfig;
GameConfig.init();
},{}],2:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var GameConfig_1 = require("./GameConfig");
var OrbitCamera_1 = require("./OrbitCamera");
var Main = /** @class */ (function () {
function Main() {
this.sceneRes = "res/3d/scene/Conventional/scene.ls";
//根据IDE设置初始化引擎
if (window["Laya3D"])
Laya3D.init(GameConfig_1.default.width, GameConfig_1.default.height);
else
Laya.init(GameConfig_1.default.width, GameConfig_1.default.height, Laya["WebGL"]);
Laya["Physics"] && Laya["Physics"].enable();
Laya["DebugPanel"] && Laya["DebugPanel"].enable();
Laya.stage.scaleMode = GameConfig_1.default.scaleMode;
Laya.stage.screenMode = GameConfig_1.default.screenMode;
//兼容微信不支持加载scene后缀场景
Laya.URL.exportSceneToJson = GameConfig_1.default.exportSceneToJson;
//打开调试面板(通过IDE设置调试模式,或者url地址增加debug=true参数,均可打开调试面板)
if (GameConfig_1.default.debug || Laya.Utils.getQueryString("debug") == "true")
Laya.enableDebugPanel();
if (GameConfig_1.default.physicsDebug && Laya["PhysicsDebugDraw"])
Laya["PhysicsDebugDraw"].enable();
if (GameConfig_1.default.stat)
Laya.Stat.show();
Laya.alertGlobalError = true;
//激活资源版本控制,version.json由IDE发布功能自动生成,如果没有也不影响后续流程
Laya.ResourceVersion.enable("version.json", Laya.Handler.create(this, this.onVersionLoaded), Laya.ResourceVersion.FILENAME_VERSION);
}
Main.prototype.onVersionLoaded = function () {
Laya.Scene3D.load(this.sceneRes, Laya.Handler.create(this, this.onLoadSceneComplete));
};
Main.prototype.onLoadSceneComplete = function (scene) {
this.scene = scene;
Laya.stage.addChild(this.scene);
var cameraTarget = new Laya.Sprite3D();
this.scene.addChild(cameraTarget);
this.camera = this.scene.getChildByName("CameraPivot").getChildAt(0);
var orbit = this.camera.addComponent(OrbitCamera_1.OrbitCamera);
orbit.Target = cameraTarget;
};
return Main;
}());
//激活启动类
new Main();
},{"./GameConfig":1,"./OrbitCamera":4}],3:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var MathHelper = /** @class */ (function () {
function MathHelper() {
}
/**
* 获取两向量角度
*/
MathHelper.Vector3Angle = function (v1, v2) {
Laya.Vector3.normalize(v2, v2);
var dot = Laya.Vector3.dot(v1, v2);
var angle = Math.acos(dot) * 57.29578;
return angle;
};
/**
* 球表面随机
*/
MathHelper.onUnitSphere = function (radius) {
var p1 = this.randomFloat(-radius, radius);
var p2 = this.randomFloat(0, radius);
var p3 = this.randomFloat(-radius, radius);
var v3 = new Laya.Vector3(p1, p2, p3);
//Laya.Vector3.normalize(v3,v3);
Laya.Vector3.scale(v3, radius, v3);
return v3;
};
MathHelper.randomFloat = function (min, max) {
return Math.random() * (max - min) + min;
};
/**
* 随机范围获取整数数值 min<= value <=max
* */
MathHelper.random = function (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
};
/**
* ClampAngle
*/
MathHelper.clampAngle = function (angle, min, max) {
if (angle < min) {
angle = min;
}
else if (angle > max) {
angle = max;
}
return angle;
};
/**
* Clamp
*/
MathHelper.clamp = function (value, min, max) {
if (value < min) {
value = min;
}
else if (value > max) {
value = max;
}
return value;
};
MathHelper.newGuid = function () {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
};
MathHelper.number2BigNumber = function (n, maxLen) {
if (maxLen === void 0) { maxLen = 4; }
var outNum;
var k = 1000;
var base = k;
var pow = 0;
for (pow = 0;; pow++) {
if (n < base) {
break;
}
base *= k;
}
var unit = "";
if (pow < 5) {
unit = pow == 0 ? "" : (pow == 1 ? "k" : (pow == 2 ? "m" : (pow == 3 ? "b" : "t")));
}
else {
var l_a = 97;
var l_A = 65;
var div = Math.floor((pow - 5) / 26);
var mod = (pow - 5) % 26;
unit = div == 0 ? String.fromCharCode(l_a + mod, l_a + mod) : (div == 1 ? String.fromCharCode(l_A + mod, l_a + mod) : String.fromCharCode(l_A + mod, l_A + mod));
}
outNum = String(n / (base * 0.001));
return "." == (outNum = outNum.substr(0, maxLen)).charAt(outNum.length - 1) ? outNum.replace(".", unit) : outNum + unit;
};
MathHelper.getSystemTime = function () {
var curDate = new Date();
var year = curDate.getFullYear();
var month = curDate.getMonth() + 1;
var date = curDate.getDate();
var day = curDate.getDay();
var hour = curDate.getHours();
var minute = curDate.getMinutes();
var second = curDate.getSeconds();
var systemTime = year + "年" + month + "月" + date + "日" + hour + "时" + minute + "分" + second + "秒";
return systemTime;
};
/*对比版本*/
MathHelper.CompareVersion = function (v1, v2) {
var arr1 = v1.split('.');
var arr2 = v2.split('.');
var len = Math.max(arr1.length, arr2.length);
while (arr1.length < len) {
arr1.push('0');
}
while (arr2.length < len) {
arr2.push('0');
}
for (var i = 0; i < len; i++) {
var num1 = parseInt(arr1[i]);
var num2 = parseInt(arr2[i]);
if (num1 > num2) {
return 1;
}
else if (num1 < num2) {
return -1;
}
}
return 0;
};
MathHelper.CountDown = function (time) {
var minute = Math.floor(time / 60);
var second = time % 60;
return (minute < 10 ? "0" + minute : minute) + ":" + (second < 10 ? "0" + second : second);
};
MathHelper.countDay = function (d1, d2) {
var s1 = new Date(d1);
var s2 = new Date(d2);
var days = s1.getTime() - s2.getTime();
var time = days / (1000 * 60 * 60 * 24);
return time;
};
MathHelper.getTime = function () {
var curDate = new Date();
var year = curDate.getFullYear();
var month = curDate.getMonth() + 1;
var date = curDate.getDate();
if (month < 10) {
}
var systemTime = year + "/" + (month < 10 ? "0" + month : month) + "/" + (date < 10 ? "0" + date : date);
return systemTime;
};
MathHelper.prefixInteger = function (num, length) {
return (Array(length).join('0') + num).slice(-length);
};
/**
* Deg2Rad = 0.01745329
*/
MathHelper.Deg2Rad = 0.01745329;
/**
* Rad2Deg = 57.29578
*/
MathHelper.Rad2Deg = 57.29578;
return MathHelper;
}());
exports.MathHelper = MathHelper;
},{}],4:[function(require,module,exports){
"use strict";
/*
* OrbitCamera 360观察物体相机
* unity需要取巧处理
*/
Object.defineProperty(exports, "__esModule", { value: true });
var MouseManager = laya.events.MouseManager;
var Quaternion = laya.d3.math.Quaternion;
var Event = Laya.Event;
var MathHelper_1 = require("./MathHelper");
var OrbitCamera = /** @class */ (function (_super) {
__extends(OrbitCamera, _super);
function OrbitCamera() {
var _this = _super.call(this) || this;
_this.factor = 0.1;
_this.RotateSpeed = 2;
_this.SmoothTime = 1;
_this.YMinLimit = -180;
_this.YMaxLimit = 180;
_this.Distance = 35;
_this.DistanceMin = 15;
_this.DistanceMax = 35;
_this.Pause = false;
_this.isTweening = false;
_this.Radius = 0;
_this.AngleH = 0;
_this.AngleV = 0;
_this.downX = 0;
_this.downY = 0;
_this.isDown = false;
_this.mouseX = 0;
_this.mouseY = 0;
_this.isMoved = false;
_this.tmpOutRotation = new Quaternion(0, 0, 0, 0);
_this.lastDistance = 0;
_this.targetOffsetMoveY = 0;
_this.tweenRotation = new Laya.Quaternion(0, 0, 0, 0);
_this.up = new Laya.Vector3();
return _this;
}
OrbitCamera.prototype.onAwake = function () {
this.modle = this.owner.transform;
this.modleParent = this.modle._parent;
var angles = this.modleParent.localRotationEuler;
this.AngleH = angles.y;
this.AngleV = angles.x;
this.initEvents();
};
OrbitCamera.prototype.onDestroy = function () {
Laya.stage.off(Laya.Event.MOUSE_DOWN, this, this.onMouseDownHandler);
Laya.stage.off(Laya.Event.MOUSE_UP, this, this.onMouseUpHandler);
Laya.stage.off(Laya.Event.MOUSE_WHEEL, this, this.onMouserWheelHandler);
};
OrbitCamera.prototype.getRotation = function () {
return this.modleParent.localRotation;
};
OrbitCamera.prototype.setRotation = function (h, v, useTween) {
if (useTween === void 0) { useTween = false; }
var t = new Laya.Quaternion(this.modleParent.localRotation.x, this.modleParent.localRotation.y, this.modleParent.localRotation.z, this.modleParent.localRotation.w);
this.AngleH = h;
this.AngleV = v;
Quaternion.createFromYawPitchRoll(this.AngleH * 0.005 * this.RotateSpeed, this.AngleV * 0.005 * this.RotateSpeed, 0, this.tmpOutRotation);
if (useTween) {
this.isTweening = true;
fairygui.tween.GTween.to4(t.x, t.y, t.z, t.w, this.tmpOutRotation.x, this.tmpOutRotation.y, this.tmpOutRotation.z, this.tmpOutRotation.w, 1)
.onUpdate(this.onTweenRotationUpdate, this)
.onComplete(this.onTweenRotationCompelte, this);
}
else {
this.modleParent.localRotation = this.tmpOutRotation;
}
};
OrbitCamera.prototype.onTweenRotationUpdate = function (tween) {
this.tmpOutRotation = new Laya.Quaternion(tween.value.x, tween.value.y, tween.value.z, tween.value.w);
this.modleParent.localRotation = this.tmpOutRotation;
};
OrbitCamera.prototype.onTweenRotationCompelte = function () {
this.isTweening = false;
this.Pause = false;
};
OrbitCamera.prototype.onUpdate = function () {
if (this.Pause || this.isTweening) {
return;
}
// let an = 3.14 / 2;
// let moveH = this.mouseX * Math.cos(an) + this.mouseY * Math.sin(an);
// let moveV = this.mouseX * Math.sin(an) + this.mouseY * Math.cos(an)
// this.AngleH += moveH;
// this.AngleV += moveV;
this.modleParent.getUp(this.up);
if (this.up.y > 0) {
this.AngleH -= this.mouseX;
}
else {
this.AngleH += this.mouseX;
}
// if (this.modleParent.right.x > 0) {
// this.AngleV -= this.mouseY ;
// } else {
// this.AngleV += this.mouseY ;
// }
this.AngleV -= this.mouseY;
this.mouseX = 0;
this.mouseY = 0;
};
OrbitCamera.prototype.onLateUpdate = function () {
if (this.Pause || this.isTweening) {
return;
}
if (this.Target != null) {
this.Target.transform.localPosition = new Laya.Vector3(0, this.targetOffsetMoveY, 0);
this.camereRotate();
this.cameraZoom();
}
};
OrbitCamera.prototype.camereRotate = function () {
if (this.Pause || this.isTweening) {
return;
}
if (this.isDown) {
//this.AngleV = MathHelper.Clamp(this.AngleV, this.YMinLimit, this.YMaxLimit);
Quaternion.createFromYawPitchRoll(this.AngleH * 0.005 * this.RotateSpeed, this.AngleV * 0.005 * this.RotateSpeed, 0, this.tmpOutRotation);
this.modleParent.localRotation = this.tmpOutRotation;
}
};
OrbitCamera.prototype.cameraZoom = function () {
if (this.Pause || this.isTweening) {
return;
}
if (this.modle.localPosition.z != this.Distance) {
this.modle.localPosition = new Laya.Vector3(0, this.targetOffsetMoveY, this.Distance);
}
};
OrbitCamera.prototype.initEvents = function () {
Laya.stage.on(Laya.Event.MOUSE_DOWN, this, this.onMouseDownHandler);
Laya.stage.on(Laya.Event.MOUSE_UP, this, this.onMouseUpHandler);
Laya.stage.on(Laya.Event.MOUSE_WHEEL, this, this.onMouserWheelHandler);
};
OrbitCamera.prototype.onMouserWheelHandler = function (e) {
if (this.Pause || this.isTweening) {
return;
}
var distance = this.lastDistance + e.delta;
this.Distance -= (distance - this.lastDistance) * this.factor;
this.Distance = MathHelper_1.MathHelper.clamp(this.Distance, this.DistanceMin, this.DistanceMax);
this.lastDistance = distance;
this.targetOffsetMoveY = -(this.Distance - 8) / this.DistanceMin * this.Radius;
this.targetOffsetMoveY = MathHelper_1.MathHelper.clamp(this.targetOffsetMoveY, 0, this.Radius);
};
OrbitCamera.prototype.onMouseDownHandler = function (e) {
if (this.Pause || this.isTweening) {
return;
}
if (e.touches) {
var touches = e.touches;
if (touches && touches.length == 2) {
this.lastDistance = this.getDistance(touches);
Laya.stage.on(Event.MOUSE_MOVE, this, this.onMouseMoveHandler);
}
else {
this.downX = e.stageX;
this.downY = e.stageY;
Laya.stage.on(Laya.Event.MOUSE_MOVE, this, this.onMouseMoveHandler);
}
}
else {
this.downX = MouseManager.instance.mouseX;
this.downY = MouseManager.instance.mouseY;
Laya.stage.on(Laya.Event.MOUSE_MOVE, this, this.onMouseMoveHandler);
}
this.isDown = true;
this.isMoved = false;
};
OrbitCamera.prototype.onMouseUpHandler = function () {
if (this.Pause || this.isTweening) {
return;
}
this.isDown = false;
this.isMoved = false;
this.mouseX = 0;
this.mouseY = 0;
Laya.stage.off(Laya.Event.MOUSE_MOVE, this, this.onMouseMoveHandler);
};
OrbitCamera.prototype.onMouseMoveHandler = function (e) {
if (this.Pause || this.isTweening) {
return;
}
if (e.touches) {
var touches = e.touches;
if (touches && touches.length == 2) {
var distance = this.getDistance(e.touches);
var factor = 0.01;
this.Distance -= (distance - this.lastDistance) * factor;
this.Distance = MathHelper_1.MathHelper.clamp(this.Distance, this.DistanceMin, this.DistanceMax);
this.lastDistance = distance;
this.targetOffsetMoveY = -(this.Distance - 8) / this.DistanceMin * this.Radius;
this.targetOffsetMoveY = MathHelper_1.MathHelper.clamp(this.targetOffsetMoveY, 0, this.Radius);
}
else {
if (this.isDown) {
this.mouseX = e.stageX - this.downX;
this.mouseY = e.stageY - this.downY;
if (this.downX !== MouseManager.instance.mouseX || this.downY !== MouseManager.instance.mouseY) {
this.isMoved = true;
}
this.downX = e.stageX;
this.downY = e.stageY;
}
}
}
else {
if (this.isDown) {
this.mouseX = MouseManager.instance.mouseX - this.downX;
this.mouseY = MouseManager.instance.mouseY - this.downY;
if (this.downX !== MouseManager.instance.mouseX || this.downY !== MouseManager.instance.mouseY) {
this.isMoved = true;
}
this.downX = MouseManager.instance.mouseX;
this.downY = MouseManager.instance.mouseY;
}
}
};
/**计算两个触摸点之间的距离*/
OrbitCamera.prototype.getDistance = function (points) {
var distance = 0;
if (points && points.length == 2) {
var dx = points[0].stageX - points[1].stageX;
var dy = points[0].stageY - points[1].stageY;
distance = Math.sqrt(dx * dx + dy * dy);
}
return distance;
};
return OrbitCamera;
}(Laya.Script3D));
exports.OrbitCamera = OrbitCamera;
},{"./MathHelper":3}]},{},[2])
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkQ6L1Byb2dyYW0gRmlsZXMgKHg4NikvTGF5YUFpcklERV9iZXRhMi4xLjBiZXRhMS9yZXNvdXJjZXMvYXBwL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvR2FtZUNvbmZpZy50cyIsInNyYy9NYWluLnRzIiwic3JjL01hdGhIZWxwZXIudHMiLCJzcmMvT3JiaXRDYW1lcmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQSxnR0FBZ0c7O0FBRWhHOztFQUVFO0FBQ0Y7SUFhSTtJQUFjLENBQUM7SUFDUixlQUFJLEdBQVg7UUFDSSxJQUFJLEdBQUcsR0FBYSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUVqRCxDQUFDO0lBaEJNLGdCQUFLLEdBQVEsR0FBRyxDQUFDO0lBQ2pCLGlCQUFNLEdBQVEsSUFBSSxDQUFDO0lBQ25CLG9CQUFTLEdBQVEsWUFBWSxDQUFDO0lBQzlCLHFCQUFVLEdBQVEsTUFBTSxDQUFDO0lBQ3pCLGlCQUFNLEdBQVEsS0FBSyxDQUFDO0lBQ3BCLGlCQUFNLEdBQVEsTUFBTSxDQUFDO0lBQ3JCLHFCQUFVLEdBQUssRUFBRSxDQUFDO0lBQ2xCLG9CQUFTLEdBQVEsRUFBRSxDQUFDO0lBQ3BCLGdCQUFLLEdBQVMsS0FBSyxDQUFDO0lBQ3BCLGVBQUksR0FBUyxLQUFLLENBQUM7SUFDbkIsdUJBQVksR0FBUyxLQUFLLENBQUM7SUFDM0IsNEJBQWlCLEdBQVMsSUFBSSxDQUFDO0lBTTFDLGlCQUFDO0NBbEJELEFBa0JDLElBQUE7a0JBbEJvQixVQUFVO0FBbUIvQixVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7Ozs7QUN4QmxCLDJDQUFzQztBQUN0Qyw2Q0FBNEM7QUFDNUM7SUFDQztRQXFCUSxhQUFRLEdBQVcsb0NBQW9DLENBQUM7UUFwQi9ELGdCQUFnQjtRQUNoQixJQUFJLE1BQU0s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O1FBQ2xDLElBQUksUUFBUSxHQUFXLENBQUMsQ0FBQztRQUN6QixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUM5QixJQUFJLEVBQUUsR0FBVyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDckQsSUFBSSxFQUFFLEdBQVcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3JELFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUNMLGtCQUFDO0FBQUQsQ0FwUEEsQUFvUEMsQ0FwUGdDLElBQUksQ0FBQyxRQUFRLEdBb1A3QztBQXBQWSxrQ0FBVyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxuICAgIH07XHJcbn0pKCk7XHJcbihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCIvKipUaGlzIGNsYXNzIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IExheWFBaXJJREUsIHBsZWFzZSBkbyBub3QgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucy4gKi9cclxuXHJcbi8qXHJcbiog5ri45oiP5Yid5aeL5YyW6YWN572uO1xyXG4qL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lQ29uZmlne1xyXG4gICAgc3RhdGljIHdpZHRoOm51bWJlcj02NDA7XHJcbiAgICBzdGF0aWMgaGVpZ2h0Om51bWJlcj0xMTM2O1xyXG4gICAgc3RhdGljIHNjYWxlTW9kZTpzdHJpbmc9XCJmaXhlZHdpZHRoXCI7XHJcbiAgICBzdGF0aWMgc2NyZWVuTW9kZTpzdHJpbmc9XCJub25lXCI7XHJcbiAgICBzdGF0aWMgYWxpZ25WOnN0cmluZz1cInRvcFwiO1xyXG4gICAgc3RhdGljIGFsaWduSDpzdHJpbmc9XCJsZWZ0XCI7XHJcbiAgICBzdGF0aWMgc3RhcnRTY2VuZTphbnk9XCJcIjtcclxuICAgIHN0YXRpYyBzY2VuZVJvb3Q6c3RyaW5nPVwiXCI7XHJcbiAgICBzdGF0aWMgZGVidWc6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBzdGF0OmJvb2xlYW49ZmFsc2U7XHJcbiAgICBzdGF0aWMgcGh5c2ljc0RlYnVnOmJvb2xlYW49ZmFsc2U7XHJcbiAgICBzdGF0aWMgZXhwb3J0U2NlbmVUb0pzb246Ym9vbGVhbj10cnVlO1xyXG4gICAgY29uc3RydWN0b3IoKXt9XHJcbiAgICBzdGF0aWMgaW5pdCgpe1xyXG4gICAgICAgIHZhciByZWc6IEZ1bmN0aW9uID0gTGF5YS5DbGFzc1V0aWxzLnJlZ0NsYXNzO1xyXG5cclxuICAgIH1cclxufVxyXG5HYW1lQ29uZmlnLmluaXQoKTsiLCJpbXBvcnQgR2FtZUNvbmZpZyBmcm9tIFwiLi9HYW1lQ29uZmlnXCI7XHJcbmltcG9ydCB7IE9yYml0Q2FtZXJhIH0gZnJvbSBcIi4vT3JiaXRDYW1lcmFcIjtcclxuY2xhc3MgTWFpbiB7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHQvL+agueaNrklEReiuvue9ruWIneWni+WMluW8leaTjlx0XHRcclxuXHRcdGlmICh3aW5kb3dbXCJMYXlhM0RcIl0pIExheWEzRC5pbml0KEdhbWVDb25maWcud2lkdGgsIEdhbWVDb25maWcuaGVpZ2h0KTtcclxuXHRcdGVsc2UgTGF5YS5pbml0KEdhbWVDb25maWcud2lkdGgsIEdhbWVDb25maWcuaGVpZ2h0LCBMYXlhW1wiV2ViR0xcIl0pO1xyXG5cdFx0TGF5YVtcIlBoeXNpY3NcIl0gJiYgTGF5YVtcIlBoeXNpY3NcIl0uZW5hYmxlKCk7XHJcblx0XHRMYXlhW1wiRGVidWdQYW5lbFwiXSAmJiBMYXlhW1wiRGVidWdQYW5lbFwiXS5lbmFibGUoKTtcclxuXHRcdExheWEuc3RhZ2Uuc2NhbGVNb2RlID0gR2FtZUNvbmZpZy5zY2FsZU1vZGU7XHJcblx0XHRMYXlhLnN0YWdlLnNjcmVlbk1vZGUgPSBHYW1lQ29uZmlnLnNjcmVlbk1vZGU7XHJcblx0XHQvL+WFvOWuueW+ruS/oeS4jeaUr+aMgeWKoOi9vXNjZW5l5ZCO57yA5Zy65pmvXHJcblx0XHRMYXlhLlVSTC5leHBvcnRTY2VuZVRvSnNvbiA9IEdhbWVDb25maWcuZXhwb3J0U2NlbmVUb0pzb247XHJcblxyXG5cdFx0Ly/miZPlvIDosIPor5XpnaLmnb/vvIjpgJrov4dJREXorr7nva7osIPor5XmqKHlvI/vvIzmiJbogIV1cmzlnLDlnYDlop7liqBkZWJ1Zz10cnVl5Y+C5pWw77yM5Z2H5Y+v5omT5byA6LCD6K+V6Z2i5p2/77yJXHJcblx0XHRpZiAoR2FtZUNvbmZpZy5kZWJ1ZyB8fCBMYXlhLlV0aWxzLmdldFF1ZXJ5U3RyaW5nKFwiZGVidWdcIikgPT0gXCJ0cnVlXCIpIExheWEuZW5hYmxlRGVidWdQYW5lbCgpO1xyXG5cdFx0aWYgKEdhbWVDb25maWcucGh5c2ljc0RlYnVnICYmIExheWFbXCJQaHlzaWNzRGVidWdEcmF3XCJdKSBMYXlhW1wiUGh5c2ljc0RlYnVnRHJhd1wiXS5lbmFibGUoKTtcclxuXHRcdGlmIChHYW1lQ29uZmlnLnN0YXQpIExheWEuU3RhdC5zaG93KCk7XHJcblx0XHRMYXlhLmFsZXJ0R2xvYmFsRXJyb3IgPSB0cnVlO1xyXG5cclxuXHRcdC8v5r+A5rS76LWE5rqQ54mI5pys5o6n5Yi277yMdmVyc2lvbi5qc29u55SxSURF5Y+R5biD5Yqf6IO96Ieq5Yqo55Sf5oiQ77yM5aaC5p6c5rKh5pyJ5Lmf5LiN5b2x5ZON5ZCO57ut5rWB56iLXHJcblx0XHRMYXlhLlJlc291cmNlVmVyc2lvbi5lbmFibGUoXCJ2ZXJzaW9uLmpzb25cIiwgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCB0aGlzLm9uVmVyc2lvbkxvYWRlZCksIExheWEuUmVzb3VyY2VWZXJzaW9uLkZJTEVOQU1FX1ZFUlNJT04pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzY2VuZVJlczogc3RyaW5nID0gXCJyZXMvM2Qvc2NlbmUvQ29udmVudGlvbmFsL3NjZW5lLmxzXCI7XHJcblx0cHJpdmF0ZSBzY2VuZTogTGF5YS5TY2VuZTNEO1xyXG5cdHByaXZhdGUgY2FtZXJhOiBMYXlhLkNhbWVyYTtcclxuXHRvblZlcnNpb25Mb2FkZWQoKTogdm9pZCB7XHJcblx0XHRMYXlhLlNjZW5lM0QubG9hZCh0aGlzLnNjZW5lUmVzLCBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsIHRoaXMub25Mb2FkU2NlbmVDb21wbGV0ZSkpXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG9uTG9hZFNjZW5lQ29tcGxldGUoc2NlbmUpIHtcclxuXHRcdHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHRcdExheWEuc3RhZ2UuYWRkQ2hpbGQodGhpcy5zY2VuZSk7XHJcblx0XHRsZXQgY2FtZXJhVGFyZ2V0ID0gbmV3IExheWEuU3ByaXRlM0QoKTtcclxuXHRcdHRoaXMuc2NlbmUuYWRkQ2hpbGQoY2FtZXJhVGFyZ2V0KTtcclxuXHRcdHRoaXMuY2FtZXJhID0gdGhpcy5zY2VuZS5nZXRDaGlsZEJ5TmFtZShcIkNhbWVyYVBpdm90XCIpLmdldENoaWxkQXQoMCkgYXMgTGF5YS5DYW1lcmE7XHJcblx0XHRsZXQgb3JiaXQgPSB0aGlzLmNhbWVyYS5hZGRDb21wb25lbnQoT3JiaXRDYW1lcmEpIGFzIE9yYml0Q2FtZXJhO1xyXG5cdFx0b3JiaXQuVGFyZ2V0ID0gY2FtZXJhVGFyZ2V0O1xyXG5cdH1cclxuXHJcbn1cclxuLy/mv4DmtLvlkK/liqjnsbtcclxubmV3IE1haW4oKTtcclxuIiwiZXhwb3J0IGNsYXNzIE1hdGhIZWxwZXIge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcblxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWcyUmFkID0gMC4wMTc0NTMyOVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIERlZzJSYWQ6IG51bWJlciA9IDAuMDE3NDUzMjk7XHJcbiAgICAvKipcclxuICAgICAqIFJhZDJEZWcgPSA1Ny4yOTU3OFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIFJhZDJEZWc6IG51bWJlciA9IDU3LjI5NTc4O1xyXG4gICAgLyoqXHJcbiAgICAgKiDojrflj5bkuKTlkJHph4/op5LluqZcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBWZWN0b3IzQW5nbGUodjE6IExheWEuVmVjdG9yMywgdjI6IExheWEuVmVjdG9yMyk6IG51bWJlciB7XHJcbiAgICAgICAgTGF5YS5WZWN0b3IzLm5vcm1hbGl6ZSh2MiwgdjIpO1xyXG4gICAgICAgIHZhciBkb3QgPSBMYXlhLlZlY3RvcjMuZG90KHYxLCB2Mik7XHJcbiAgICAgICAgdmFyIGFuZ2xlID0gTWF0aC5hY29zKGRvdCkgKiA1Ny4yOTU3ODtcclxuICAgICAgICByZXR1cm4gYW5nbGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDnkIPooajpnaLpmo/mnLpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBvblVuaXRTcGhlcmUocmFkaXVzOiBudW1iZXIpOiBMYXlhLlZlY3RvcjMge1xyXG4gICAgICAgIHZhciBwMTogbnVtYmVyID0gdGhpcy5yYW5kb21GbG9hdCgtcmFkaXVzLCByYWRpdXMpO1xyXG4gICAgICAgIHZhciBwMjogbnVtYmVyID0gdGhpcy5yYW5kb21GbG9hdCgwLCByYWRpdXMpO1xyXG4gICAgICAgIHZhciBwMzogbnVtYmVyID0gdGhpcy5yYW5kb21GbG9hdCgtcmFkaXVzLCByYWRpdXMpO1xyXG4gICAgICAgIHZhciB2MzogTGF5YS5WZWN0b3IzID0gbmV3IExheWEuVmVjdG9yMyhwMSwgcDIsIHAzKTtcclxuICAgICAgICAvL0xheWEuVmVjdG9yMy5ub3JtYWxpemUodjMsdjMpO1xyXG4gICAgICAgIExheWEuVmVjdG9yMy5zY2FsZSh2MywgcmFkaXVzLCB2Myk7XHJcbiAgICAgICAgcmV0dXJuIHYzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcmFuZG9tRmxvYXQobWluOiBudW1iZXIsIG1heDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOmaj+acuuiMg+WbtOiOt+WPluaVtOaVsOaVsOWAvCBtaW48PSB2YWx1ZSA8PW1heCBcclxuICAgICAqICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHJhbmRvbShtaW46IG51bWJlciwgbWF4OiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSArIG1pbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsYW1wQW5nbGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjbGFtcEFuZ2xlKGFuZ2xlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKGFuZ2xlIDwgbWluKSB7XHJcbiAgICAgICAgICAgIGFuZ2xlID0gbWluO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbmdsZSA+IG1heCkge1xyXG4gICAgICAgICAgICBhbmdsZSA9IG1heDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFuZ2xlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xhbXBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjbGFtcCh2YWx1ZTogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IG1pbikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG1pbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUgPiBtYXgpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBtYXg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIG5ld0d1aWQoKSB7XHJcbiAgICAgICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBudW1iZXIyQmlnTnVtYmVyKG46IG51bWJlciwgbWF4TGVuOiBudW1iZXIgPSA0KTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgb3V0TnVtOiBzdHJpbmc7XHJcbiAgICAgICAgbGV0IGsgPSAxMDAwO1xyXG4gICAgICAgIGxldCBiYXNlOiBudW1iZXIgPSBrO1xyXG4gICAgICAgIGxldCBwb3cgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKHBvdyA9IDA7IDsgcG93KyspIHtcclxuICAgICAgICAgICAgaWYgKG4gPCBiYXNlKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBiYXNlICo9IGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB1bml0ID0gXCJcIjtcclxuICAgICAgICBpZiAocG93IDwgNSkge1xyXG4gICAgICAgICAgICB1bml0ID0gcG93ID09IDAgPyBcIlwiIDogKHBvdyA9PSAxID8gXCJrXCIgOiAocG93ID09IDIgPyBcIm1cIiA6IChwb3cgPT0gMyA/IFwiYlwiIDogXCJ0XCIpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgbF9hID0gOTc7XHJcbiAgICAgICAgICAgIGxldCBsX0EgPSA2NTtcclxuICAgICAgICAgICAgbGV0IGRpdiA9IE1hdGguZmxvb3IoKHBvdyAtIDUpIC8gMjYpO1xyXG4gICAgICAgICAgICBsZXQgbW9kID0gKHBvdyAtIDUpICUgMjY7XHJcbiAgICAgICAgICAgIHVuaXQgPSBkaXYgPT0gMCA/IFN0cmluZy5mcm9tQ2hhckNvZGUobF9hICsgbW9kLCBsX2EgKyBtb2QpIDogKGRpdiA9PSAxID8gU3RyaW5nLmZyb21DaGFyQ29kZShsX0EgKyBtb2QsIGxfYSArIG1vZCkgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGxfQSArIG1vZCwgbF9BICsgbW9kKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dE51bSA9IFN0cmluZyhuIC8gKGJhc2UgKiAwLjAwMSkpO1xyXG4gICAgICAgIHJldHVybiBcIi5cIiA9PSAob3V0TnVtID0gb3V0TnVtLnN1YnN0cigwLCBtYXhMZW4pKS5jaGFyQXQob3V0TnVtLmxlbmd0aCAtIDEpID8gb3V0TnVtLnJlcGxhY2UoXCIuXCIsIHVuaXQpIDogb3V0TnVtICsgdW5pdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFN5c3RlbVRpbWUoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgY3VyRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgdmFyIHllYXI6IG51bWJlciA9IGN1ckRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICB2YXIgbW9udGg6IG51bWJlciA9IGN1ckRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICAgICAgdmFyIGRhdGU6IG51bWJlciA9IGN1ckRhdGUuZ2V0RGF0ZSgpO1xyXG4gICAgICAgIHZhciBkYXk6IG51bWJlciA9IGN1ckRhdGUuZ2V0RGF5KCk7XHJcbiAgICAgICAgdmFyIGhvdXI6IG51bWJlciA9IGN1ckRhdGUuZ2V0SG91cnMoKTtcclxuICAgICAgICB2YXIgbWludXRlOiBudW1iZXIgPSBjdXJEYXRlLmdldE1pbnV0ZXMoKTtcclxuICAgICAgICB2YXIgc2Vjb25kOiBudW1iZXIgPSBjdXJEYXRlLmdldFNlY29uZHMoKTtcclxuICAgICAgICB2YXIgc3lzdGVtVGltZSA9IHllYXIgKyBcIuW5tFwiICsgbW9udGggKyBcIuaciFwiICsgZGF0ZSArIFwi5pelXCIgKyBob3VyICsgXCLml7ZcIiArIG1pbnV0ZSArIFwi5YiGXCIgKyBzZWNvbmQgKyBcIuenklwiO1xyXG4gICAgICAgIHJldHVybiBzeXN0ZW1UaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIC8q5a+55q+U54mI5pysKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgQ29tcGFyZVZlcnNpb24odjE6IHN0cmluZywgdjI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgdmFyIGFycjEgPSB2MS5zcGxpdCgnLicpO1xyXG4gICAgICAgIHZhciBhcnIyID0gdjIuc3BsaXQoJy4nKTtcclxuICAgICAgICB2YXIgbGVuID0gTWF0aC5tYXgoYXJyMS5sZW5ndGgsIGFycjIubGVuZ3RoKTtcclxuICAgICAgICB3aGlsZSAoYXJyMS5sZW5ndGggPCBsZW4pIHtcclxuICAgICAgICAgICAgYXJyMS5wdXNoKCcwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdoaWxlIChhcnIyLmxlbmd0aCA8IGxlbikge1xyXG4gICAgICAgICAgICBhcnIyLnB1c2goJzAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbnVtMSA9IHBhcnNlSW50KGFycjFbaV0pO1xyXG4gICAgICAgICAgICB2YXIgbnVtMiA9IHBhcnNlSW50KGFycjJbaV0pO1xyXG4gICAgICAgICAgICBpZiAobnVtMSA+IG51bTIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bTEgPCBudW0yKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgQ291bnREb3duKHRpbWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IG1pbnV0ZSA9IE1hdGguZmxvb3IodGltZSAvIDYwKTtcclxuICAgICAgICBsZXQgc2Vjb25kID0gdGltZSAlIDYwO1xyXG5cclxuICAgICAgICByZXR1cm4gKG1pbnV0ZSA8IDEwID8gXCIwXCIgKyBtaW51dGUgOiBtaW51dGUpICsgXCI6XCIgKyAoc2Vjb25kIDwgMTAgPyBcIjBcIiArIHNlY29uZCA6IHNlY29uZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBjb3VudERheShkMTogc3RyaW5nLCBkMjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgczEgPSBuZXcgRGF0ZShkMSk7XHJcbiAgICAgICAgbGV0IHMyID0gbmV3IERhdGUoZDIpO1xyXG4gICAgICAgIHZhciBkYXlzID0gczEuZ2V0VGltZSgpIC0gczIuZ2V0VGltZSgpO1xyXG4gICAgICAgIHZhciB0aW1lID0gZGF5cyAvICgxMDAwICogNjAgKiA2MCAqIDI0KTtcclxuICAgICAgICByZXR1cm4gdGltZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFRpbWUoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgY3VyRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgbGV0IHllYXI6IG51bWJlciA9IGN1ckRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICBsZXQgbW9udGg6IG51bWJlciA9IGN1ckRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICAgICAgbGV0IGRhdGU6IG51bWJlciA9IGN1ckRhdGUuZ2V0RGF0ZSgpO1xyXG4gICAgICAgIGlmIChtb250aCA8IDEwKSB7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc3lzdGVtVGltZSA9IHllYXIgKyBcIi9cIiArIChtb250aCA8IDEwID8gXCIwXCIgKyBtb250aCA6IG1vbnRoKSArIFwiL1wiICsgKGRhdGUgPCAxMCA/IFwiMFwiICsgZGF0ZSA6IGRhdGUpO1xyXG4gICAgICAgIHJldHVybiBzeXN0ZW1UaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcHJlZml4SW50ZWdlcihudW0sIGxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiAoQXJyYXkobGVuZ3RoKS5qb2luKCcwJykgKyBudW0pLnNsaWNlKC1sZW5ndGgpO1xyXG4gICAgfVxyXG59IiwiLypcclxuKiBPcmJpdENhbWVyYSAzNjDop4Llr5/niankvZPnm7jmnLpcclxuKiB1bml0eemcgOimgeWPluW3p+WkhOeQhlxyXG4qL1xyXG5cclxuaW1wb3J0IE1vdXNlTWFuYWdlciA9IGxheWEuZXZlbnRzLk1vdXNlTWFuYWdlcjtcclxuaW1wb3J0IFF1YXRlcm5pb24gPSBsYXlhLmQzLm1hdGguUXVhdGVybmlvbjtcclxuaW1wb3J0IEV2ZW50ID0gTGF5YS5FdmVudDtcclxuaW1wb3J0IHsgTWF0aEhlbHBlciB9IGZyb20gXCIuL01hdGhIZWxwZXJcIjtcclxuZXhwb3J0IGNsYXNzIE9yYml0Q2FtZXJhIGV4dGVuZHMgTGF5YS5TY3JpcHQzRCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmFjdG9yOiBudW1iZXIgPSAwLjE7XHJcblxyXG4gICAgcHVibGljIFRhcmdldDogTGF5YS5TcHJpdGUzRDtcclxuICAgIHB1YmxpYyBSb3RhdGVTcGVlZDogbnVtYmVyID0gMjtcclxuICAgIHB1YmxpYyBTbW9vdGhUaW1lOiBudW1iZXIgPSAxO1xyXG4gICAgcHVibGljIFlNaW5MaW1pdDogbnVtYmVyID0gLTE4MDtcclxuICAgIHB1YmxpYyBZTWF4TGltaXQ6IG51bWJlciA9IDE4MDtcclxuICAgIHB1YmxpYyBEaXN0YW5jZTogbnVtYmVyID0gMzU7XHJcbiAgICBwdWJsaWMgRGlzdGFuY2VNaW46IG51bWJlciA9IDE1O1xyXG4gICAgcHVibGljIERpc3RhbmNlTWF4OiBudW1iZXIgPSAzNTtcclxuICAgIHB1YmxpYyBQYXVzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzVHdlZW5pbmcgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBSYWRpdXM6IG51bWJlciA9IDA7XHJcblxyXG4gICAgcHJpdmF0ZSBtb2RsZTogTGF5YS5UcmFuc2Zvcm0zRDtcclxuICAgIHByaXZhdGUgbW9kbGVQYXJlbnQ6IExheWEuVHJhbnNmb3JtM0Q7XHJcblxyXG4gICAgcHJpdmF0ZSBBbmdsZUg6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIEFuZ2xlVjogbnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgZG93blg6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIGRvd25ZOiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBpc0Rvd246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgbW91c2VYOiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBtb3VzZVk6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIGlzTW92ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgdG1wT3V0Um90YXRpb246IFF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigwLCAwLCAwLCAwKTtcclxuICAgIHByaXZhdGUgbGFzdERpc3RhbmNlOiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSB0YXJnZXRPZmZzZXRNb3ZlWTogbnVtYmVyID0gMDtcclxuXHJcbiAgICBvbkF3YWtlKCkge1xyXG4gICAgICAgIHRoaXMubW9kbGUgPSAodGhpcy5vd25lciBhcyBMYXlhLlNwcml0ZTNEKS50cmFuc2Zvcm07XHJcbiAgICAgICAgdGhpcy5tb2RsZVBhcmVudCA9IHRoaXMubW9kbGUuX3BhcmVudDtcclxuICAgICAgICB2YXIgYW5nbGVzID0gdGhpcy5tb2RsZVBhcmVudC5sb2NhbFJvdGF0aW9uRXVsZXI7XHJcbiAgICAgICAgdGhpcy5BbmdsZUggPSBhbmdsZXMueTtcclxuICAgICAgICB0aGlzLkFuZ2xlViA9IGFuZ2xlcy54O1xyXG4gICAgICAgIHRoaXMuaW5pdEV2ZW50cygpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBMYXlhLnN0YWdlLm9mZihMYXlhLkV2ZW50Lk1PVVNFX0RPV04sIHRoaXMsIHRoaXMub25Nb3VzZURvd25IYW5kbGVyKTtcclxuICAgICAgICBMYXlhLnN0YWdlLm9mZihMYXlhLkV2ZW50Lk1PVVNFX1VQLCB0aGlzLCB0aGlzLm9uTW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIExheWEuc3RhZ2Uub2ZmKExheWEuRXZlbnQuTU9VU0VfV0hFRUwsIHRoaXMsIHRoaXMub25Nb3VzZXJXaGVlbEhhbmRsZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRSb3RhdGlvbigpOiBMYXlhLlF1YXRlcm5pb24ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGxlUGFyZW50LmxvY2FsUm90YXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFJvdGF0aW9uKGg6IG51bWJlciwgdjogbnVtYmVyLCB1c2VUd2VlbjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IHQgPSBuZXcgTGF5YS5RdWF0ZXJuaW9uKHRoaXMubW9kbGVQYXJlbnQubG9jYWxSb3RhdGlvbi54LCB0aGlzLm1vZGxlUGFyZW50LmxvY2FsUm90YXRpb24ueSwgdGhpcy5tb2RsZVBhcmVudC5sb2NhbFJvdGF0aW9uLnosIHRoaXMubW9kbGVQYXJlbnQubG9jYWxSb3RhdGlvbi53KTtcclxuICAgICAgICB0aGlzLkFuZ2xlSCA9IGg7XHJcbiAgICAgICAgdGhpcy5BbmdsZVYgPSB2O1xyXG4gICAgICAgIFF1YXRlcm5pb24uY3JlYXRlRnJvbVlhd1BpdGNoUm9sbCh0aGlzLkFuZ2xlSCAqIDAuMDA1ICogdGhpcy5Sb3RhdGVTcGVlZCwgdGhpcy5BbmdsZVYgKiAwLjAwNSAqIHRoaXMuUm90YXRlU3BlZWQsIDAsIHRoaXMudG1wT3V0Um90YXRpb24pO1xyXG4gICAgICAgIGlmICh1c2VUd2Vlbikge1xyXG4gICAgICAgICAgICB0aGlzLmlzVHdlZW5pbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICBmYWlyeWd1aS50d2Vlbi5HVHdlZW4udG80KHQueCwgdC55LCB0LnosIHQudywgdGhpcy50bXBPdXRSb3RhdGlvbi54LCB0aGlzLnRtcE91dFJvdGF0aW9uLnksIHRoaXMudG1wT3V0Um90YXRpb24ueiwgdGhpcy50bXBPdXRSb3RhdGlvbi53LCAxKVxyXG4gICAgICAgICAgICAgICAgLm9uVXBkYXRlKHRoaXMub25Ud2VlblJvdGF0aW9uVXBkYXRlLCB0aGlzKVxyXG4gICAgICAgICAgICAgICAgLm9uQ29tcGxldGUodGhpcy5vblR3ZWVuUm90YXRpb25Db21wZWx0ZSwgdGhpcylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGxlUGFyZW50LmxvY2FsUm90YXRpb24gPSB0aGlzLnRtcE91dFJvdGF0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgdHdlZW5Sb3RhdGlvbiA9IG5ldyBMYXlhLlF1YXRlcm5pb24oMCwgMCwgMCwgMCk7XHJcbiAgICBwcml2YXRlIG9uVHdlZW5Sb3RhdGlvblVwZGF0ZSh0d2VlbjogZmFpcnlndWkudHdlZW4uR1R3ZWVuZXIpIHtcclxuICAgICAgICB0aGlzLnRtcE91dFJvdGF0aW9uID0gbmV3IExheWEuUXVhdGVybmlvbih0d2Vlbi52YWx1ZS54LCB0d2Vlbi52YWx1ZS55LCB0d2Vlbi52YWx1ZS56LCB0d2Vlbi52YWx1ZS53KTtcclxuICAgICAgICB0aGlzLm1vZGxlUGFyZW50LmxvY2FsUm90YXRpb24gPSB0aGlzLnRtcE91dFJvdGF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Ud2VlblJvdGF0aW9uQ29tcGVsdGUoKSB7XHJcbiAgICAgICAgdGhpcy5pc1R3ZWVuaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5QYXVzZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHVwOiBMYXlhLlZlY3RvcjMgPSBuZXcgTGF5YS5WZWN0b3IzKCk7XHJcbiAgICBvblVwZGF0ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5QYXVzZSB8fCB0aGlzLmlzVHdlZW5pbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbGV0IGFuID0gMy4xNCAvIDI7XHJcbiAgICAgICAgLy8gbGV0IG1vdmVIID0gdGhpcy5tb3VzZVggKiBNYXRoLmNvcyhhbikgKyB0aGlzLm1vdXNlWSAqIE1hdGguc2luKGFuKTtcclxuICAgICAgICAvLyBsZXQgbW92ZVYgPSB0aGlzLm1vdXNlWCAqIE1hdGguc2luKGFuKSArIHRoaXMubW91c2VZICogTWF0aC5jb3MoYW4pXHJcbiAgICAgICAgLy8gdGhpcy5BbmdsZUggKz0gbW92ZUg7XHJcbiAgICAgICAgLy8gdGhpcy5BbmdsZVYgKz0gbW92ZVY7XHJcblxyXG4gICAgICAgIHRoaXMubW9kbGVQYXJlbnQuZ2V0VXAodGhpcy51cCk7XHJcbiAgICAgICAgaWYgKHRoaXMudXAueSA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5BbmdsZUggLT0gdGhpcy5tb3VzZVg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5BbmdsZUggKz0gdGhpcy5tb3VzZVg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmICh0aGlzLm1vZGxlUGFyZW50LnJpZ2h0LnggPiAwKSB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuQW5nbGVWIC09IHRoaXMubW91c2VZIDtcclxuICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgIC8vICAgICB0aGlzLkFuZ2xlViArPSB0aGlzLm1vdXNlWSA7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIHRoaXMuQW5nbGVWIC09IHRoaXMubW91c2VZO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5tb3VzZVggPSAwO1xyXG4gICAgICAgIHRoaXMubW91c2VZID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBvbkxhdGVVcGRhdGUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuUGF1c2UgfHwgdGhpcy5pc1R3ZWVuaW5nKSB7IHJldHVybjsgfVxyXG4gICAgICAgIGlmICh0aGlzLlRhcmdldCAhPSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLlRhcmdldC50cmFuc2Zvcm0ubG9jYWxQb3NpdGlvbiA9IG5ldyBMYXlhLlZlY3RvcjMoMCwgdGhpcy50YXJnZXRPZmZzZXRNb3ZlWSwgMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJlUm90YXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhWm9vbSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhbWVyZVJvdGF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5QYXVzZSB8fCB0aGlzLmlzVHdlZW5pbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc0Rvd24pIHtcclxuICAgICAgICAgICAgLy90aGlzLkFuZ2xlViA9IE1hdGhIZWxwZXIuQ2xhbXAodGhpcy5BbmdsZVYsIHRoaXMuWU1pbkxpbWl0LCB0aGlzLllNYXhMaW1pdCk7XHJcbiAgICAgICAgICAgIFF1YXRlcm5pb24uY3JlYXRlRnJvbVlhd1BpdGNoUm9sbCh0aGlzLkFuZ2xlSCAqIDAuMDA1ICogdGhpcy5Sb3RhdGVTcGVlZCwgdGhpcy5BbmdsZVYgKiAwLjAwNSAqIHRoaXMuUm90YXRlU3BlZWQsIDAsIHRoaXMudG1wT3V0Um90YXRpb24pO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGxlUGFyZW50LmxvY2FsUm90YXRpb24gPSB0aGlzLnRtcE91dFJvdGF0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYW1lcmFab29tKCkge1xyXG4gICAgICAgIGlmICh0aGlzLlBhdXNlIHx8IHRoaXMuaXNUd2VlbmluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1vZGxlLmxvY2FsUG9zaXRpb24ueiAhPSB0aGlzLkRpc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kbGUubG9jYWxQb3NpdGlvbiA9IG5ldyBMYXlhLlZlY3RvcjMoMCwgdGhpcy50YXJnZXRPZmZzZXRNb3ZlWSwgdGhpcy5EaXN0YW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdEV2ZW50cygpIHtcclxuICAgICAgICBMYXlhLnN0YWdlLm9uKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5vbk1vdXNlRG93bkhhbmRsZXIpO1xyXG4gICAgICAgIExheWEuc3RhZ2Uub24oTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5vbk1vdXNlVXBIYW5kbGVyKTtcclxuICAgICAgICBMYXlhLnN0YWdlLm9uKExheWEuRXZlbnQuTU9VU0VfV0hFRUwsIHRoaXMsIHRoaXMub25Nb3VzZXJXaGVlbEhhbmRsZXIpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBvbk1vdXNlcldoZWVsSGFuZGxlcihlOiBFdmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLlBhdXNlIHx8IHRoaXMuaXNUd2VlbmluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBkaXN0YW5jZTogbnVtYmVyID0gdGhpcy5sYXN0RGlzdGFuY2UgKyBlLmRlbHRhO1xyXG4gICAgICAgIHRoaXMuRGlzdGFuY2UgLT0gKGRpc3RhbmNlIC0gdGhpcy5sYXN0RGlzdGFuY2UpICogdGhpcy5mYWN0b3I7XHJcbiAgICAgICAgdGhpcy5EaXN0YW5jZSA9IE1hdGhIZWxwZXIuY2xhbXAodGhpcy5EaXN0YW5jZSwgdGhpcy5EaXN0YW5jZU1pbiwgdGhpcy5EaXN0YW5jZU1heCk7XHJcbiAgICAgICAgdGhpcy5sYXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuICAgICAgICB0aGlzLnRhcmdldE9mZnNldE1vdmVZID0gLSh0aGlzLkRpc3RhbmNlIC0gOCkgLyB0aGlzLkRpc3RhbmNlTWluICogdGhpcy5SYWRpdXM7XHJcbiAgICAgICAgdGhpcy50YXJnZXRPZmZzZXRNb3ZlWSA9IE1hdGhIZWxwZXIuY2xhbXAodGhpcy50YXJnZXRPZmZzZXRNb3ZlWSwgMCwgdGhpcy5SYWRpdXMpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTW91c2VEb3duSGFuZGxlcihlOiBFdmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLlBhdXNlIHx8IHRoaXMuaXNUd2VlbmluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlLnRvdWNoZXMpIHtcclxuICAgICAgICAgICAgdmFyIHRvdWNoZXM6IEFycmF5PGFueT4gPSBlLnRvdWNoZXM7XHJcbiAgICAgICAgICAgIGlmICh0b3VjaGVzICYmIHRvdWNoZXMubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdERpc3RhbmNlID0gdGhpcy5nZXREaXN0YW5jZSh0b3VjaGVzKTtcclxuICAgICAgICAgICAgICAgIExheWEuc3RhZ2Uub24oRXZlbnQuTU9VU0VfTU9WRSwgdGhpcywgdGhpcy5vbk1vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kb3duWCA9IGUuc3RhZ2VYO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kb3duWSA9IGUuc3RhZ2VZO1xyXG4gICAgICAgICAgICAgICAgTGF5YS5zdGFnZS5vbihMYXlhLkV2ZW50Lk1PVVNFX01PVkUsIHRoaXMsIHRoaXMub25Nb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG93blggPSBNb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VYO1xyXG4gICAgICAgICAgICB0aGlzLmRvd25ZID0gTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWTtcclxuICAgICAgICAgICAgTGF5YS5zdGFnZS5vbihMYXlhLkV2ZW50Lk1PVVNFX01PVkUsIHRoaXMsIHRoaXMub25Nb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzTW92ZWQgPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25Nb3VzZVVwSGFuZGxlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5QYXVzZSB8fCB0aGlzLmlzVHdlZW5pbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNNb3ZlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubW91c2VYID0gMDtcclxuICAgICAgICB0aGlzLm1vdXNlWSA9IDA7XHJcbiAgICAgICAgTGF5YS5zdGFnZS5vZmYoTGF5YS5FdmVudC5NT1VTRV9NT1ZFLCB0aGlzLCB0aGlzLm9uTW91c2VNb3ZlSGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgb25Nb3VzZU1vdmVIYW5kbGVyKGU6IEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuUGF1c2UgfHwgdGhpcy5pc1R3ZWVuaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGUudG91Y2hlcykge1xyXG4gICAgICAgICAgICB2YXIgdG91Y2hlczogQXJyYXk8YW55PiA9IGUudG91Y2hlcztcclxuICAgICAgICAgICAgaWYgKHRvdWNoZXMgJiYgdG91Y2hlcy5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlOiBudW1iZXIgPSB0aGlzLmdldERpc3RhbmNlKGUudG91Y2hlcyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmYWN0b3I6IG51bWJlciA9IDAuMDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkRpc3RhbmNlIC09IChkaXN0YW5jZSAtIHRoaXMubGFzdERpc3RhbmNlKSAqIGZhY3RvcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuRGlzdGFuY2UgPSBNYXRoSGVscGVyLmNsYW1wKHRoaXMuRGlzdGFuY2UsIHRoaXMuRGlzdGFuY2VNaW4sIHRoaXMuRGlzdGFuY2VNYXgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0T2Zmc2V0TW92ZVkgPSAtKHRoaXMuRGlzdGFuY2UgLSA4KSAvIHRoaXMuRGlzdGFuY2VNaW4gKiB0aGlzLlJhZGl1cztcclxuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0T2Zmc2V0TW92ZVkgPSBNYXRoSGVscGVyLmNsYW1wKHRoaXMudGFyZ2V0T2Zmc2V0TW92ZVksIDAsIHRoaXMuUmFkaXVzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW91c2VYID0gZS5zdGFnZVggLSB0aGlzLmRvd25YO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW91c2VZID0gZS5zdGFnZVkgLSB0aGlzLmRvd25ZO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRvd25YICE9PSBNb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VYIHx8IHRoaXMuZG93blkgIT09IE1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc01vdmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb3duWCA9IGUuc3RhZ2VYO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG93blkgPSBlLnN0YWdlWTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rvd24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW91c2VYID0gTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWCAtIHRoaXMuZG93blg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vdXNlWSA9IE1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVkgLSB0aGlzLmRvd25ZO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZG93blggIT09IE1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVggfHwgdGhpcy5kb3duWSAhPT0gTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNNb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRvd25YID0gTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZG93blkgPSBNb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VZO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKuiuoeeul+S4pOS4quinpuaRuOeCueS5i+mXtOeahOi3neemuyovXHJcbiAgICBwcml2YXRlIGdldERpc3RhbmNlKHBvaW50czogQXJyYXk8YW55Pik6IG51bWJlciB7XHJcbiAgICAgICAgdmFyIGRpc3RhbmNlOiBudW1iZXIgPSAwO1xyXG4gICAgICAgIGlmIChwb2ludHMgJiYgcG9pbnRzLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgIHZhciBkeDogbnVtYmVyID0gcG9pbnRzWzBdLnN0YWdlWCAtIHBvaW50c1sxXS5zdGFnZVg7XHJcbiAgICAgICAgICAgIHZhciBkeTogbnVtYmVyID0gcG9pbnRzWzBdLnN0YWdlWSAtIHBvaW50c1sxXS5zdGFnZVk7XHJcbiAgICAgICAgICAgIGRpc3RhbmNlID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRpc3RhbmNlO1xyXG4gICAgfVxyXG59Il19
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment