12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751 |
- 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 = 720;
- GameConfig.height = 1280;
- GameConfig.scaleMode = "fixedwidth";
- GameConfig.screenMode = "none";
- GameConfig.alignV = "middle";
- GameConfig.alignH = "center";
- GameConfig.startScene = "game_ui.scene";
- 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 ViewManager_1 = require("./game_logic/ViewManager");
- var WXSdk_1 = require("./game_module/WXSdk");
- var FYHD_Sdk_1 = require("./game_module/FYHD_Sdk");
- var GameSceneController_1 = require("./game_logic/GameSceneController");
- var Main = /** @class */ (function () {
- function Main() {
- var _this = this;
- //根据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;
- Main.nowratio = Laya.stage.width / Laya.stage.height;
- Main.IsWx = Laya.Browser.onWeiXin;
- if (Main.IsWx) {
- WXSdk_1.WXSdk.Instance.init(function (shareTicket, shareid, scene, appid) {
- _this.onShowHandler(shareTicket, shareid, scene, appid);
- });
- FYHD_Sdk_1.FYHD_Sdk.InitSdk();
- }
- //激活资源版本控制,version.json由IDE发布功能自动生成,如果没有也不影响后续流程
- Laya.ResourceVersion.enable("version.json", Laya.Handler.create(this, this.onVersionLoaded), Laya.ResourceVersion.FILENAME_VERSION);
- this.IsNeedUpdate();
- }
- Main.prototype.IsNeedUpdate = function () {
- if (!Main.IsWx)
- return;
- var updateManager = Laya.Browser.window.wx.getUpdateManager();
- updateManager.onCheckForUpdate(function (res) {
- console.log("最新版本:" + res.hasUpdate);
- });
- updateManager.onUpdateReady(function () {
- Laya.Browser.window.wx.showModal({
- showCancel: false,
- title: '更新提示',
- content: '新版本已经准备好,是否重启应用?',
- success: function (res) {
- updateManager.applyUpdate();
- },
- fail: function (res) {
- updateManager.applyUpdate();
- }
- });
- });
- };
- Main.prototype.onShowHandler = function (shareTicket, shareId, scene, appid) {
- console.log("[LOG]: 分享进入: shareTicket:", shareTicket, ", openId=", shareId, ", scene=", scene);
- // if (!Main.mSharePeopleScene) {
- // Main.mSharePeopleScene = scene;
- // }
- // if (!Main.appid) {
- // Main.appid = appid;
- // }
- if (scene != null && scene != "") {
- WXSdk_1.WXSdk.Instance.ShareScene = scene;
- }
- if (shareId != null && shareId != "") {
- console.log("设置分享id" + shareId);
- WXSdk_1.WXSdk.Instance.setShareId(shareId);
- }
- };
- Main.prototype.onVersionLoaded = function () {
- //激活大小图映射,加载小图的时候,如果发现小图在大图合集里面,则优先加载大图合集,而不是小图
- Laya.AtlasInfoManager.enable("fileconfig.json", Laya.Handler.create(this, this.onConfigLoaded));
- Laya.MouseManager.multiTouchEnabled = false;
- };
- Main.prototype.onConfigLoaded = function () {
- this.LoadUI();
- };
- Main.prototype.LoadUI = function () {
- ViewManager_1.default.Instance.OpenView(ViewManager_1.ViewType.game_ui);
- GameSceneController_1.default.Instance.CreateScene();
- //this.test();
- };
- Main.prototype.test = function () {
- var v1 = new Laya.Vector3(-3, 0, 1);
- var v2 = new Laya.Vector3(0, 0, -1);
- var v3 = new Laya.Vector3(0, 0, 0);
- Laya.Vector3.cross(v1, v2, v3);
- console.log(v3);
- };
- Main.IsWx = false;
- Main.VRE = "1.0.5";
- Main.CFG = "CFG";
- Main.wxValue = "";
- return Main;
- }());
- exports.Main = Main;
- //激活启动类
- new Main();
- },{"./GameConfig":1,"./game_logic/GameSceneController":5,"./game_logic/ViewManager":11,"./game_module/FYHD_Sdk":13,"./game_module/WXSdk":18}],3:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var GameDefined_1 = require("../game_module/GameDefined");
- var Vector3 = Laya.Vector3;
- var Ray = Laya.Ray;
- var HitResult = Laya.HitResult;
- var GameSceneController_1 = require("./GameSceneController");
- var BulletController_1 = require("./BulletController");
- var Game_Tool_1 = require("../game_tool/Game_Tool");
- var Bullet = /** @class */ (function (_super) {
- __extends(Bullet, _super);
- function Bullet() {
- return _super.call(this) || this;
- }
- Bullet.prototype.onAwake = function () {
- this.self = this.owner;
- this.forw = new Vector3(0, 0, 0);
- this._transform = this.self.transform;
- this._corss = new Vector3(0, 0, 0);
- };
- Bullet.prototype.CreateRay = function (pos, _rotation) {
- if (!this.go) {
- this.go = BulletController_1.default.Instance.CreateBullet();
- var gs = this.go.getComponent(Bullet);
- if (!gs)
- this.goS = this.go.addComponent(Bullet);
- }
- else {
- this.go.active = true;
- }
- this.go.transform.position = pos.clone();
- this.go.transform.rotationEuler = _rotation;
- // this._transform.getForward(this.forw);
- this.go.transform.getForward(this.forw);
- this.forw = new Vector3(-this.forw.x, -this.forw.y, -this.forw.z);
- var temp = this.forw.clone();
- Vector3.normalize(temp, temp);
- // this.forw = new Vector3(this.forW.x * this.speed, this.forW.y * this.speed, this.forW.z * this.speed);
- // var temp = new Vector3(-this.forw.x * 0.01, -this.forw.y * 0.01, -this.forw.z * 0.01);
- pos.x = pos.x + temp.x * 0.01;
- pos.y = pos.y + temp.y * 0.01;
- pos.z = pos.z + temp.z * 0.01;
- if (!this._ray) {
- this._ray = new Ray(pos, this.forw);
- this._hit = new HitResult();
- }
- else {
- this._ray.origin = pos;
- this._ray.direction = this.forw;
- }
- var isS = GameSceneController_1.default.Instance.game_scene.physicsSimulation.rayCast(this._ray, this._hit);
- if (isS) {
- var poi = this._hit.point;
- var dis = Vector3.distance(pos, poi);
- this.go.transform.localScaleZ = dis;
- var other = this._hit.collider.owner;
- if (other.layer == GameDefined_1.default.player_layer) {
- this.goS.SetNextNotActive();
- }
- else {
- var nor = this._hit.normal;
- console.log(nor);
- Vector3.cross(this.forw, nor, this._corss); //大于0在左方 小于0在右方
- var a = Game_Tool_1.default.getReflectAng(this.forw);
- var ang = this._transform.rotationEuler.clone();
- this._corss.y >= 0 ? ang.y = ang.y + 2 * a : ang.y = ang.y - 2 * a;
- this.goS.CreateRay(poi, ang);
- }
- }
- else {
- this.go.transform.localScaleZ = 50;
- this.goS.SetNextNotActive();
- }
- };
- Bullet.prototype.SetNextNotActive = function () {
- if (this.go) {
- this.go.active = false;
- if (this.goS)
- this.goS.SetNextNotActive();
- }
- };
- return Bullet;
- }(Laya.Script));
- exports.Bullet = Bullet;
- },{"../game_module/GameDefined":14,"../game_tool/Game_Tool":20,"./BulletController":4,"./GameSceneController":5}],4:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Pool_Manager_1 = require("./Pool_Manager");
- var GameDefined_1 = require("../game_module/GameDefined");
- var GameSceneController_1 = require("./GameSceneController");
- var BulletController = /** @class */ (function () {
- function BulletController() {
- }
- Object.defineProperty(BulletController, "Instance", {
- get: function () {
- return this.instance || (this.instance = new BulletController());
- },
- enumerable: true,
- configurable: true
- });
- BulletController.prototype.init = function (bullet) {
- bullet.removeSelf();
- this.bulletPref = bullet;
- Pool_Manager_1.Pool_Manager.Instance.InitData(GameDefined_1.default.poolName.bullet, this.bulletPref);
- };
- BulletController.prototype.CreateBullet = function () {
- //if (this.bullet) return this.bullet;
- var go = Pool_Manager_1.Pool_Manager.Instance.SetActiveObject(GameDefined_1.default.poolName.bullet);
- GameSceneController_1.default.Instance.game_scene.addChild(go);
- // this.bullet = go;
- return go;
- };
- return BulletController;
- }());
- exports.default = BulletController;
- },{"../game_module/GameDefined":14,"./GameSceneController":5,"./Pool_Manager":7}],5:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var ResourceLoad_1 = require("../game_module/ResourceLoad");
- var BulletController_1 = require("./BulletController");
- var RoleController_1 = require("./RoleController");
- var GameSceneController = /** @class */ (function () {
- function GameSceneController() {
- this.path = "res/LayaScene_main/Conventional/main.ls";
- }
- Object.defineProperty(GameSceneController, "Instance", {
- get: function () {
- return this.instance || (this.instance = new GameSceneController());
- },
- enumerable: true,
- configurable: true
- });
- GameSceneController.prototype.CreateScene = function () {
- var _this = this;
- ResourceLoad_1.default.LoadResource([this.path], function () {
- var t = Laya.loader.getRes(_this.path);
- Laya.stage.addChild(t);
- _this.game_scene = t;
- var _bullet = t.getChildByName("bullet");
- BulletController_1.default.Instance.init(_bullet);
- var _role = t.getChildByName("role");
- RoleController_1.RoleController.Instance.init(_role);
- RoleController_1.RoleController.Instance.CreateRay();
- });
- };
- return GameSceneController;
- }());
- exports.default = GameSceneController;
- },{"../game_module/ResourceLoad":15,"./BulletController":4,"./RoleController":9}],6:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Role_1 = require("./Role");
- var GameDefined_1 = require("../game_module/GameDefined");
- var Vector3 = Laya.Vector3;
- var Ray = Laya.Ray;
- var HitResult = Laya.HitResult;
- var GameSceneController_1 = require("./GameSceneController");
- var BulletController_1 = require("./BulletController");
- var Bullet_1 = require("./Bullet");
- var Game_Tool_1 = require("../game_tool/Game_Tool");
- var Player = /** @class */ (function (_super) {
- __extends(Player, _super);
- function Player() {
- return _super.call(this) || this;
- }
- Player.prototype.onAwake = function () {
- _super.prototype.onAwake.call(this);
- this._type = GameDefined_1.CheckType.Player;
- this.forw = new Vector3(0, 0, 0);
- this._corss = new Vector3(0, 0, 0);
- };
- Player.prototype.CreateRay = function () {
- this._transform.getForward(this.forw);
- this.forw = new Vector3(-this.forw.x, -this.forw.y, -this.forw.z);
- if (!this._ray) {
- this._ray = new Ray(this._bulletPos.transform.position, this.forw);
- this._hit = new HitResult();
- }
- else {
- this._ray.origin = this._bulletPos.transform.position;
- this._ray.direction = this.forw;
- }
- if (!this.go) {
- this.go = BulletController_1.default.Instance.CreateBullet();
- var gs = this.go.getComponent(Bullet_1.Bullet);
- if (!gs)
- this.goS = this.go.addComponent(Bullet_1.Bullet);
- }
- this.go.transform.position = this._bulletPos.transform.position;
- this.go.transform.rotation = this._transform.rotation;
- // this.go.transform.getForward(this.forw);
- var isS = GameSceneController_1.default.Instance.game_scene.physicsSimulation.rayCast(this._ray, this._hit);
- if (isS) {
- var poi = this._hit.point;
- var dis = Vector3.distance(this._bulletPos.transform.position, poi);
- this.go.transform.localScaleZ = dis;
- var nor = this._hit.normal;
- Vector3.cross(this.forw, nor, this._corss); //大于0在左方 小于0在右方
- var a = Game_Tool_1.default.getReflectAng(this.forw);
- var ang = this._transform.rotationEuler.clone();
- this._corss.y >= 0 ? ang.y = ang.y + 2 * a : ang.y = ang.y - 2 * a;
- this.goS.CreateRay(poi, ang);
- }
- else {
- this.go.transform.localScaleZ = 50;
- this.goS.SetNextNotActive();
- }
- // console.log(go.transform.localScaleZ);
- };
- Player.prototype.RotationSelf = function (rota) {
- this._transform.rotate(rota);
- this.CreateRay();
- };
- return Player;
- }(Role_1.Role));
- exports.Player = Player;
- },{"../game_module/GameDefined":14,"../game_tool/Game_Tool":20,"./Bullet":3,"./BulletController":4,"./GameSceneController":5,"./Role":8}],7:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Dictionary_1 = require("../game_tool/Dictionary");
- var Vector3 = Laya.Vector3;
- var Pool_Manager = /** @class */ (function () {
- function Pool_Manager() {
- this.poolDic = new Dictionary_1.default();
- this.prefabDic = new Dictionary_1.default();
- }
- Object.defineProperty(Pool_Manager, "Instance", {
- get: function () {
- return Pool_Manager.instance || (Pool_Manager.instance = new Pool_Manager());
- },
- enumerable: true,
- configurable: true
- });
- // [ "Coin" "Key" "Role" "Body1" "Train" ]
- Pool_Manager.prototype.InitData = function (name, prefab) {
- if (prefab != null) {
- if (!this.prefabDic.has(name))
- this.prefabDic.set(name, prefab);
- }
- };
- Pool_Manager.prototype.SetActiveObject = function (name, scale) {
- if (this.poolDic.has(name)) {
- if (this.poolDic.get(name).length > 0) {
- var result = this.poolDic.get(name).shift();
- result.active = true;
- return result;
- }
- else {
- if (this.prefabDic.has(name)) {
- var curObj = Laya.Sprite3D.instantiate(this.prefabDic.get(name));
- if (scale != null) {
- curObj.transform.localScale = new Vector3(scale, scale, scale);
- }
- curObj.name = name;
- return curObj;
- }
- else {
- return null;
- }
- }
- }
- else {
- if (this.prefabDic.has(name)) {
- var curObj = Laya.Sprite3D.instantiate(this.prefabDic.get(name));
- if (scale != null) {
- curObj.transform.localScale = new Vector3(scale, scale, scale);
- }
- curObj.name = name;
- return curObj;
- }
- else {
- return null;
- }
- }
- };
- //隐藏对象到dic
- Pool_Manager.prototype.SetDisableObject = function (go) {
- if (go)
- go.active = false;
- var key = go.name;
- if (!this.poolDic.has(key)) {
- this.poolDic.set(key, new Array());
- }
- this.poolDic.get(key).push(go);
- };
- Pool_Manager.prototype.DestoryObj = function (go) {
- if (go)
- go.destroy(true);
- };
- //延时隐藏对象到dic
- Pool_Manager.prototype.SetDisableMutiObject = function (go, timer) {
- var _this = this;
- Laya.timer.once(timer, this, function () {
- if (go)
- go.active = false;
- var key = go.name;
- if (!_this.poolDic.has(key)) {
- _this.poolDic.set(key, new Array());
- }
- _this.poolDic.get(key).push(go);
- });
- };
- return Pool_Manager;
- }());
- exports.Pool_Manager = Pool_Manager;
- },{"../game_tool/Dictionary":19}],8:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Role = /** @class */ (function (_super) {
- __extends(Role, _super);
- function Role() {
- return _super.call(this) || this;
- }
- Role.prototype.onAwake = function () {
- this.self = this.owner;
- this._transform = this.self.transform;
- this._bulletPos = this.self.getChildByName("bulltePos");
- };
- return Role;
- }(Laya.Script3D));
- exports.Role = Role;
- },{}],9:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Player_1 = require("./Player");
- var RoleController = /** @class */ (function () {
- function RoleController() {
- }
- Object.defineProperty(RoleController, "Instance", {
- get: function () {
- return this.instasnce || (this.instasnce = new RoleController());
- },
- enumerable: true,
- configurable: true
- });
- RoleController.prototype.init = function (role) {
- if (role) {
- this.player = role;
- this.playerS = this.player.addComponent(Player_1.Player);
- }
- };
- RoleController.prototype.CreateRay = function () {
- if (this.playerS)
- this.playerS.CreateRay();
- };
- RoleController.prototype.RoleRotation = function (rota) {
- if (this.playerS)
- this.playerS.RotationSelf(rota);
- };
- return RoleController;
- }());
- exports.RoleController = RoleController;
- },{"./Player":6}],10:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var SoundManager = Laya.SoundManager;
- var WXSdk_1 = require("../game_module/WXSdk");
- var SettingController = /** @class */ (function () {
- function SettingController() {
- this.vibrate = true;
- this.sound = true;
- this.temp = 0;
- this.badMove = "res/Sound/BadMove.mp3";
- this.click = "res/Sound/click.mp3";
- this.Continue = "res/Sound/Continue.mp3";
- this.LevelComp = "res/Sound/LevelComp.mp3";
- this.TrainCrash = "res/Sound/TrainCrash.mp3";
- this.TrainLoop = "res/Sound/TrainLoop.mp3";
- this.TrainStop = "res/Sound/TrainStop.mp3";
- this.Coin = "res/Sound/Coin1.mp3";
- this.Jump = [
- "res/Sound/PassengerJumpIn1.mp3",
- "res/Sound/PassengerJumpIn2.mp3",
- "res/Sound/PassengerJumpIn3.mp3",
- "res/Sound/PassengerJumpIn4.mp3",
- "res/Sound/PassengerJumpIn5.mp3",
- "res/Sound/PassengerJumpIn6.mp3",
- "res/Sound/PassengerJumpIn7.mp3",
- "res/Sound/PassengerJumpIn8.mp3",
- ];
- }
- Object.defineProperty(SettingController, "Instance", {
- get: function () {
- return this.instasnce || (this.instasnce = new SettingController());
- },
- enumerable: true,
- configurable: true
- });
- SettingController.prototype.SettingSound = function (value) {
- if (!this.sound)
- return;
- SoundManager.setSoundVolume(value);
- SoundManager.setMusicVolume(value);
- };
- SettingController.prototype._playMusic = function (on) {
- if (!this.sound)
- return;
- if (on) {
- if (this.soundChannel == null) {
- this.soundChannel = SoundManager.playMusic(this.TrainLoop, 0);
- this.soundChannel.volume = 0.5;
- }
- this.soundChannel.resume();
- }
- else {
- if (this.soundChannel) {
- this.soundChannel.pause();
- }
- }
- };
- SettingController.prototype._playBadMove = function () {
- WXSdk_1.WXSdk.ShortVibrate();
- if (!this.sound)
- return;
- SoundManager.playSound(this.badMove);
- };
- SettingController.prototype._Click = function () {
- if (!this.sound)
- return;
- SoundManager.playSound(this.click);
- };
- SettingController.prototype._Continue = function (on) {
- if (!this.sound)
- return;
- if (on) {
- SoundManager.playSound(this.Continue);
- }
- else {
- SoundManager.stopSound(this.Continue);
- }
- };
- SettingController.prototype._LevelComp = function () {
- if (!this.sound)
- return;
- SoundManager.playSound(this.LevelComp);
- };
- SettingController.prototype._TrainCrash = function () {
- WXSdk_1.WXSdk.LongVibrate();
- if (!this.sound)
- return;
- SoundManager.playSound(this.TrainCrash);
- };
- SettingController.prototype._TrainStop = function () {
- if (!this.sound)
- return;
- SoundManager.playSound(this.TrainStop);
- };
- SettingController.prototype._Coin = function () {
- WXSdk_1.WXSdk.ShortVibrate();
- if (!this.sound)
- return;
- SoundManager.playSound(this.Coin);
- };
- SettingController.prototype._Jump = function () {
- WXSdk_1.WXSdk.ShortVibrate();
- if (!this.sound)
- return;
- SoundManager.playSound(this.Jump[this.temp]);
- this.temp++;
- if (this.temp == 8)
- this.temp = 0;
- };
- return SettingController;
- }());
- exports.SettingController = SettingController;
- },{"../game_module/WXSdk":18}],11:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Dictionary_1 = require("../game_tool/Dictionary");
- var game_ui_1 = require("../game_ui/game_ui");
- var ViewType;
- (function (ViewType) {
- ViewType[ViewType["game_ui"] = 0] = "game_ui";
- })(ViewType = exports.ViewType || (exports.ViewType = {}));
- var ViewManager = /** @class */ (function () {
- function ViewManager() {
- this.viewDic = [];
- this.addViewDic = new Dictionary_1.default();
- this.init();
- }
- Object.defineProperty(ViewManager, "Instance", {
- get: function () {
- return this.instance || (this.instance = new ViewManager());
- },
- enumerable: true,
- configurable: true
- });
- ViewManager.prototype.init = function () {
- this.viewDic[ViewType.game_ui] = game_ui_1.game_ui;
- };
- ViewManager.prototype.OpenView = function (view, data) {
- if (this.curView != null) {
- this.curView.OnClose();
- Laya.stage.removeChild(this.curView);
- // var a:Laya.Scene;
- // a.destroy()
- this.curView.destroy(true);
- this.curView = null;
- }
- this.curView = new this.viewDic[view];
- Laya.stage.addChild(this.curView);
- // this.curView.resizeHander();
- this.curView.OnShow(data);
- };
- Object.defineProperty(ViewManager.prototype, "getCurView", {
- get: function () {
- return this.curView;
- },
- enumerable: true,
- configurable: true
- });
- ViewManager.prototype.AddView = function (view, data) {
- if (this.addViewDic.has(view))
- return;
- var t_view = new this.viewDic[view];
- this.addViewDic.set(view, t_view);
- Laya.stage.addChild(t_view);
- t_view.OnShow(data);
- };
- ViewManager.prototype.RemoveView = function () {
- if (this.curView != null) {
- this.curView.OnClose();
- Laya.stage.removeChild(this.curView);
- this.curView.destroy(true);
- this.curView = null;
- }
- };
- ViewManager.prototype.CloseView = function (view) {
- if (!this.addViewDic.has(view))
- return;
- var t_view = this.addViewDic.get(view);
- t_view.OnClose();
- Laya.stage.removeChild(t_view);
- t_view.destroy(true);
- this.addViewDic.delete(view);
- };
- ViewManager.prototype.OpenMask = function () {
- if (this.curMask != null) {
- return;
- }
- // this.curMask = new Mask_ui();
- if (!this.curMask)
- return;
- Laya.stage.addChild(this.curMask);
- };
- ViewManager.prototype.CloseMask = function () {
- if (this.curMask != null) {
- this.curMask.OnClose();
- Laya.stage.removeChild(this.curMask);
- this.curMask.destroy(true);
- this.curMask = null;
- }
- };
- return ViewManager;
- }());
- exports.default = ViewManager;
- },{"../game_tool/Dictionary":19,"../game_ui/game_ui":21}],12:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var EventManager = /** @class */ (function () {
- function EventManager() {
- }
- Object.defineProperty(EventManager, "Disispatcher", {
- get: function () {
- return EventManager.disispatcher || (EventManager.disispatcher = new Laya.EventDispatcher());
- },
- enumerable: true,
- configurable: true
- });
- EventManager.on = function (type, call, data) {
- this.Disispatcher.on(type, call, data);
- };
- EventManager.off = function (type, call, data) {
- this.Disispatcher.off(type, call, data);
- };
- EventManager.event = function (type, data) {
- if (data === void 0) { data = null; }
- this.Disispatcher.event(type, data);
- };
- return EventManager;
- }());
- exports.EventManager = EventManager;
- },{}],13:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var UserModel_1 = require("./UserModel");
- var Main_1 = require("../Main");
- var EventManager_1 = require("./EventManager");
- var FYHD_Sdk = /** @class */ (function () {
- function FYHD_Sdk() {
- }
- //初始化sdk
- FYHD_Sdk.InitSdk = function () {
- Laya.Browser.window.sdk.getFyhd().startSdk();
- FYHD_Sdk.UserInfoAuth();
- };
- //用户授权
- FYHD_Sdk.UserInfoAuth = function () {
- if (!Main_1.Main.IsWx)
- return;
- Laya.Browser.window.sdk.getFyhd().getFyhdUserInfo(null, false, function (data) {
- console.log("无授权回调:" + JSON.stringify(data));
- if (data.result.user) {
- FYHD_Sdk.openid = data.result.user.openid;
- FYHD_Sdk.AuthInfo();
- }
- });
- };
- FYHD_Sdk.AuthInfo = function () {
- var args = {
- openid: FYHD_Sdk.openid,
- };
- Laya.Browser.window.sdk.getFyhd().loginData(args, function (data) {
- console.log("授权上报回调:" + JSON.stringify(data));
- FYHD_Sdk.ValueUser();
- });
- };
- FYHD_Sdk.ValueUser = function () {
- var args = {
- openid: FYHD_Sdk.openid,
- };
- Laya.Browser.window.sdk.getFyhd().valueuser(args, function (data) {
- console.log("有效用户上报:" + JSON.stringify(data));
- });
- };
- //创角色
- FYHD_Sdk.RoleData = function () {
- if (!Main_1.Main.IsWx)
- return;
- var args = {
- openid: FYHD_Sdk.openid,
- role_id: UserModel_1.default.Instance.CurModel.userid,
- create_time: UserModel_1.default.Instance.CurModel.ServerTime
- };
- Laya.Browser.window.sdk.getFyhd().roleData(args, function (data) {
- console.log("创建角色:" + JSON.stringify(data));
- FYHD_Sdk.Login();
- });
- };
- //登录信息上报
- FYHD_Sdk.Login = function () {
- if (!Main_1.Main.IsWx)
- return;
- var openid = FYHD_Sdk.openid ? FYHD_Sdk.openid : UserModel_1.default.Instance.CurModel.openid;
- var args = {
- openid: openid,
- role_id: UserModel_1.default.Instance.CurModel.userid,
- create_time: UserModel_1.default.Instance.CurModel.ServerTime.toString()
- };
- console.log("登录参数:" + JSON.stringify(args));
- Laya.Browser.window.sdk.getFyhd().uploginData(args, function (data) {
- console.log("登录结果:" + JSON.stringify(data));
- // FYHD_Sdk.PushData();
- });
- };
- //点击事件上报
- FYHD_Sdk.ClickAd = function (ad_type) {
- if (!Main_1.Main.IsWx)
- return;
- var param = {
- ad_type: ad_type,
- };
- console.log("点击参数:" + param);
- Laya.Browser.window.sdk.getFyhd().advertisement(param, function (data) {
- console.log("点击结果:" + JSON.stringify(data));
- });
- };
- FYHD_Sdk.PushData = function () {
- if (!Main_1.Main.IsWx)
- return;
- var param = {};
- Laya.Browser.window.sdk.getFyhd().shareRecommend(param, function (data) {
- if (data.data) {
- FYHD_Sdk.pushData = data.data;
- FYHD_Sdk.pushData.sort(FYHD_Sdk.ListSort);
- EventManager_1.EventManager.event(FYHD_Sdk.ShowAd);
- FYHD_Sdk.isHaveDate = true;
- }
- console.log("获取互推信息:" + JSON.stringify(FYHD_Sdk.pushData));
- });
- };
- FYHD_Sdk.ShowHuTuiJump = function (data) {
- if (!Main_1.Main.IsWx)
- return;
- if (data.jump_type == 2) //二维码跳转方法
- {
- Laya.Browser.window.wx.previewImage({ current: data.qrcode, urls: [data.qrcode] });
- }
- else if (data.jump_type == 1) //直跳方法
- {
- Laya.Browser.window.wx.navigateToMiniProgram({
- appId: data.to_appid,
- path: data.jump_path,
- success: function (res) {
- // 打开成功
- console.log("上报成功:" + JSON.stringify(res));
- FYHD_Sdk.PushClick(data.to_appid);
- }
- });
- }
- else if (data.jump_type == 0) //平台跳转方法
- {
- Laya.Browser.window.wx.navigateToMiniProgram({
- appId: data.platform_appid,
- path: data.jump_path,
- success: function (res) {
- // 打开成功
- console.log("上报成功:" + JSON.stringify(res));
- FYHD_Sdk.PushClick(data.to_appid);
- }
- });
- }
- };
- FYHD_Sdk.PushClick = function (to_appid) {
- if (!Main_1.Main.IsWx)
- return;
- var param = {
- openid: FYHD_Sdk.openid,
- to_appid: to_appid,
- };
- Laya.Browser.window.sdk.getFyhd().sharePlay(param, function (data) {
- console.log("点击上报结果:" + JSON.stringify(data));
- });
- };
- FYHD_Sdk.ListSort = function (a, b) {
- if (Number(a["panel"]) < Number(b["panel"])) {
- return -1;
- }
- if (Number(a["panel"]) == Number(b["panel"])) {
- return 0;
- }
- if (Number(a["panel"]) > Number(b["panel"])) {
- return 1;
- }
- };
- FYHD_Sdk.Ad_ClickType = {
- Video: "video_click",
- Watch: "watch",
- Share: "share",
- Banner: "banner",
- Push: "push"
- };
- FYHD_Sdk.pushData = [];
- FYHD_Sdk.isHaveDate = false;
- FYHD_Sdk.ShowAd = "ShowAd";
- return FYHD_Sdk;
- }());
- exports.FYHD_Sdk = FYHD_Sdk;
- },{"../Main":2,"./EventManager":12,"./UserModel":17}],14:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var GameDefined = /** @class */ (function () {
- function GameDefined() {
- }
- GameDefined.player_layer = 9;
- GameDefined.wall_layer = 8;
- GameDefined.moster_layer = 10;
- GameDefined.boss_layer = 11;
- GameDefined.tree_layer = 12;
- GameDefined.bomb_layer = 13;
- GameDefined.poolName = {
- bullet: "bullet"
- };
- return GameDefined;
- }());
- exports.default = GameDefined;
- var CheckType;
- (function (CheckType) {
- CheckType[CheckType["Player"] = 0] = "Player";
- CheckType[CheckType["Moster"] = 1] = "Moster";
- CheckType[CheckType["Boss"] = 2] = "Boss";
- CheckType[CheckType["Bomb"] = 3] = "Bomb";
- CheckType[CheckType["Tree"] = 4] = "Tree";
- })(CheckType = exports.CheckType || (exports.CheckType = {}));
- },{}],15:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var ResourceLoad = /** @class */ (function () {
- function ResourceLoad() {
- }
- ResourceLoad.LoadResource = function (path, complet) {
- Laya.loader.retryNum = 2;
- Laya.loader.maxLoader = 3;
- Laya.loader.retryDelay = 100;
- Laya.loader.create(path, new Laya.Handler(this, complet));
- Laya.loader.on(Laya.Event.ERROR, this, function (data) {
- console.log(data + " 资源加载失败");
- });
- };
- return ResourceLoad;
- }());
- exports.default = ResourceLoad;
- },{}],16:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var WXSdk_1 = require("./WXSdk");
- var FYHD_Sdk_1 = require("./FYHD_Sdk");
- var ShareModule = /** @class */ (function () {
- function ShareModule() {
- }
- ShareModule.GoShare = function (callBack) {
- ShareModule.ShareTime = new Date().getTime();
- console.log("分享点击时间=" + ShareModule.ShareTime);
- ShareModule.IsSharing = true;
- ShareModule.callback = callBack;
- };
- ShareModule.OnShowHandle = function () {
- if (Laya.Browser.window.wx) {
- Laya.Browser.window.wx.onShow(function (option) {
- console.log("onshow share start");
- console.log("进入微信");
- //Laya.timer.scale=1;
- if (ShareModule.IsSharing) {
- ShareModule.IsSharing = false;
- var time = new Date().getTime();
- console.log("分享回到游戏时间" + time);
- var wait = (time - ShareModule.ShareTime) / 1000;
- console.log("分享停留时间为:" + wait);
- var shareSuccess = false;
- var realSuccess = false;
- if (wait >= 2) {
- if (Math.random() <= 0.5) {
- shareSuccess = true;
- FYHD_Sdk_1.FYHD_Sdk.ClickAd(FYHD_Sdk_1.FYHD_Sdk.Ad_ClickType.Share);
- if (!ShareModule.callback)
- return;
- ShareModule.callback(true);
- Laya.Browser.window.wx.showToast({ title: "分享成功!" });
- }
- else {
- if (!ShareModule.callback)
- return;
- if (Math.random() <= 0.5) {
- Laya.Browser.window.wx.showToast({ title: "分享失败!" });
- }
- else {
- WXSdk_1.WXSdk.ShowToast("请分享到不同群^-^", false);
- }
- ShareModule.callback(false);
- }
- }
- }
- });
- }
- };
- ShareModule.IsSharing = false;
- return ShareModule;
- }());
- exports.ShareModule = ShareModule;
- },{"./FYHD_Sdk":13,"./WXSdk":18}],17:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var UserConfigName;
- (function (UserConfigName) {
- UserConfigName[UserConfigName["train"] = 0] = "train";
- UserConfigName[UserConfigName["sign"] = 1] = "sign";
- UserConfigName[UserConfigName["rewards"] = 2] = "rewards";
- })(UserConfigName = exports.UserConfigName || (exports.UserConfigName = {}));
- //用户信息属性
- var UserAttr;
- (function (UserAttr) {
- UserAttr[UserAttr["equip_train"] = 0] = "equip_train";
- UserAttr[UserAttr["user_id"] = 1] = "user_id";
- UserAttr[UserAttr["stage"] = 2] = "stage";
- UserAttr[UserAttr["get_trains"] = 3] = "get_trains";
- UserAttr[UserAttr["money"] = 4] = "money";
- UserAttr[UserAttr["progress_trains"] = 5] = "progress_trains";
- })(UserAttr = exports.UserAttr || (exports.UserAttr = {}));
- var NetUserModel = /** @class */ (function () {
- function NetUserModel(_token, _config, _appSetting, _user, _userbase, _useInvite, _user_lottery, _user_treasure, t, _user_achievement, _user_sign, _user_arena) {
- this.loginSeverTime = 0;
- this.localTime = Laya.timer.currTimer;
- this.loginSeverTime = t;
- this.m_token = _token;
- this.m_configs = _config;
- this.m_app_setting = _appSetting;
- this.m_user = _user;
- this.m_user_base = _userbase;
- this.m_user_invite = _useInvite;
- this.m_user_lottery = _user_lottery;
- this.m_user_treasure = _user_treasure;
- this.m_user_achievement = _user_achievement;
- this.m_user_sign = _user_sign;
- this.m_user_arena = _user_arena;
- this.userid = this.m_user["user_id"];
- this.openid = this.m_user_base["openid"];
- this.nickname = this.m_user_base["nickname"];
- }
- Object.defineProperty(NetUserModel.prototype, "Cfg", {
- set: function (cfg) {
- this.m_configs = cfg;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "sharetitle", {
- get: function () {
- if (this.m_app_setting["sharetitle"]) {
- return this.m_app_setting["sharetitle"];
- }
- return "";
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "shareimage", {
- get: function () {
- if (this.m_app_setting["shareimage"]) {
- return this.m_app_setting["shareimage"];
- }
- return "";
- },
- enumerable: true,
- configurable: true
- });
- NetUserModel.prototype.GetCfg = function (type) {
- var _type = UserConfigName[type];
- return this.m_configs[_type];
- };
- NetUserModel.prototype.GetUserAttr = function (_attr) {
- var attr = UserAttr[_attr];
- return this.m_user[attr];
- };
- Object.defineProperty(NetUserModel.prototype, "ServerTime", {
- get: function () {
- var time = Laya.timer.currTimer;
- var stime = this.loginSeverTime + Math.ceil((time - this.localTime) / 1000);
- return stime;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "GuideLevel", {
- get: function () {
- if (this.m_app_setting["GuideLevel"]) {
- return Number(this.m_app_setting["GuideLevel"]);
- }
- return 1;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "BannerMoveTime", {
- get: function () {
- if (this.m_app_setting["BannerMoveTime"]) {
- return Number(this.m_app_setting["BannerMoveTime"]);
- }
- return 0;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "HaveBanner", {
- get: function () {
- if (this.m_app_setting["HaveBanner"]) {
- return Number(this.m_app_setting["HaveBanner"]);
- }
- return 0;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "IsShare", {
- get: function () {
- if (this.m_app_setting["IsShare"]) {
- return Number(this.m_app_setting["IsShare"]);
- }
- return 0;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "BtnCanMove", {
- get: function () {
- if (this.m_app_setting["BtnCanMove"]) {
- return Number(this.m_app_setting["BtnCanMove"]);
- }
- return 0;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "ISShareThenVideo", {
- get: function () {
- if (this.m_app_setting["ISShareThenVideo"]) {
- return Number(this.m_app_setting["ISShareThenVideo"]);
- }
- return 0;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "OpenSceneValue", {
- get: function () {
- if (this.m_app_setting["OpenSceneValue"]) {
- return Number(this.m_app_setting["OpenSceneValue"]);
- }
- return 0;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(NetUserModel.prototype, "IsOpenTryOut", {
- get: function () {
- if (this.m_app_setting["IsOpenTryOut"]) {
- var num = Number(this.m_app_setting["IsOpenTryOut"]);
- if (num == 0)
- return 0;
- if (Math.random() < num) {
- return 1;
- }
- else {
- return 0;
- }
- }
- return 0;
- },
- enumerable: true,
- configurable: true
- });
- return NetUserModel;
- }());
- exports.NetUserModel = NetUserModel;
- var UserModel = /** @class */ (function () {
- function UserModel(code, nickname, avatar, gender, country, province, city, device, share_id, scene) {
- UserModel.instance = this;
- this.m_code = code;
- this.m_nickname = nickname ? nickname : "游客";
- this.m_avatar = avatar ? avatar : "";
- this.m_gender = gender ? gender : 0;
- this.m_city = city ? city : "";
- this.m_device = device ? device : "";
- this.m_share_id = share_id ? share_id : "";
- this.m_scene = scene ? scene : "";
- this.m_country = country ? country : "";
- this.m_province = province ? province : "";
- }
- Object.defineProperty(UserModel.prototype, "CurModel", {
- get: function () {
- return this.curModel;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(UserModel, "Instance", {
- get: function () {
- if (UserModel.instance) {
- return UserModel.instance;
- }
- else {
- UserModel.instance = new UserModel("11", "游客", "", null, "", "", "", "iphone6s", "", "");
- return UserModel.instance;
- }
- },
- enumerable: true,
- configurable: true
- });
- UserModel.prototype.SetUserModel = function (_model) {
- this.curModel = _model;
- };
- return UserModel;
- }());
- exports.default = UserModel;
- },{}],18:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Main_1 = require("../Main");
- var ViewManager_1 = require("../game_logic/ViewManager");
- var SettingController_1 = require("../game_logic/SettingController");
- var ShareModule_1 = require("./ShareModule");
- var UserModel_1 = require("./UserModel");
- var WXSdk = /** @class */ (function () {
- function WXSdk() {
- this.shareId = "";
- this.shareScene = "";
- }
- WXSdk.prototype.setShareId = function (tid) {
- if (tid != "" && tid != null) {
- this.shareId = tid;
- console.log("[LOG]: setShareOpenId.tid=", this.shareId);
- }
- };
- Object.defineProperty(WXSdk, "Instance", {
- get: function () {
- return WXSdk.instance || (WXSdk.instance = new WXSdk());
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(WXSdk.prototype, "getShareId", {
- get: function () {
- return this.shareId;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(WXSdk.prototype, "ShareScene", {
- get: function () {
- return this.shareScene;
- },
- set: function (sceneS) {
- if (sceneS != "" && sceneS != null) {
- this.shareScene = sceneS;
- }
- },
- enumerable: true,
- configurable: true
- });
- WXSdk.prototype.init = function (cb) {
- Laya.Browser.window.wx.showShareMenu({
- withShareTicket: true
- });
- //this.shezhiShareMessage(null, null);
- Laya.Browser.window.wx.onShow(function (option) {
- var shareTicket = option.shareTicket;
- var shareid = option.query.shareid;
- var scene = decodeURIComponent(option.query.scene);
- console.log("全局path=:", option.path);
- console.log("decodeURIComponent", option.query.scene);
- var sceneQuery = JSON.stringify(option.query);
- if (Main_1.Main.wxValue == "") {
- Main_1.Main.wxValue = option.scene;
- }
- console.log("scene", option.scene);
- console.log("sceneQuery", sceneQuery);
- var channel = option.query.channel;
- var appid;
- if (option.referrerInfo) {
- console.log("referrerInfo:" + JSON.stringify(option.referrerInfo));
- appid = option.referrerInfo.appId;
- if (appid) {
- console.log("onShow appis is:", appid);
- }
- else {
- console.log("onShow appis is null");
- }
- }
- else {
- console.log("referrerInfo为空");
- }
- if (channel != null) {
- console.log("onShow channel is:", channel);
- }
- cb(shareTicket, shareid, channel, appid);
- });
- };
- WXSdk.ShareMessage = function (title, imageUrl) {
- if (!Main_1.Main.IsWx)
- return;
- var t = UserModel_1.default.Instance.CurModel.ServerTime;
- var _title = title;
- var _url = imageUrl;
- if (!_title) {
- _title = UserModel_1.default.Instance.CurModel.sharetitle;
- _url = UserModel_1.default.Instance.CurModel.shareimage;
- }
- Laya.Browser.window.wx.onShareAppMessage(function () { return ({
- title: _title,
- imageUrl: _url,
- query: "shareid=" + UserModel_1.default.Instance.CurModel.userid + "_" + t + "_" + Math.floor(9999 * Math.random()).toString()
- }); });
- };
- WXSdk.prototype.wx_login = function (cb) {
- if (WXSdk.Lodining) {
- return;
- }
- WXSdk.Lodining = true;
- console.log("Excute wx.login! shareOpenId: " + this.shareId);
- Laya.Browser.window.wx.login({
- success: function (res) {
- console.log("wx.login: success! res.code=" + res.code);
- if (res.code) {
- WXSdk.Lodining = false;
- console.log("将要传递的参数:" + res);
- cb(res);
- }
- else {
- console.log('获取用户登录态失败!' + res.errMsg);
- cb("error");
- }
- },
- fail: function (res) { console.log("wx.login: failed, res=" + res); WXSdk.Lodining = false; cb("error"); }
- });
- };
- //显示加载信息
- WXSdk.ShowLoading = function (title, isShowWx) {
- if (title === void 0) { title = "加载中..."; }
- if (isShowWx === void 0) { isShowWx = true; }
- if (Laya.Browser.window && Laya.Browser.window.wx) {
- if (isShowWx) {
- Laya.Browser.window.wx.showLoading({ title: title, mask: true });
- }
- ViewManager_1.default.Instance.OpenMask();
- }
- };
- WXSdk.SystemInfo = function () {
- if (Laya.Browser.window.wx) {
- return Laya.Browser.window.wx.getSystemInfoSync();
- }
- };
- // private static button;
- // public static showbjWxGameQuan(flag: boolean): void {
- // if (Laya.Browser.window.wx == null) {
- // return;
- // }
- // if (flag) {
- // if (WeiXinSDK.button == null) {
- // let info = Laya.Browser.window.wx.getSystemInfoSync();
- // if (!info) return;
- // var top = 474 * info.windowHeight / Laya.stage.height;
- // var height = 94 * info.windowHeight / Laya.stage.height;
- // var width = height * 95 / 94;
- // WeiXinSDK.button = Laya.Browser.window.wx.createGameClubButton
- // ({
- // type: "image",
- // image: 'res/wx.png',
- // style:
- // {
- // left: 0,
- // top: top,
- // width: width,
- // height: height
- // }
- // })
- // }
- // WeiXinSDK.button.show();
- // }
- // else {
- // if (WeiXinSDK.button) {
- // WeiXinSDK.button.hide();
- // }
- // }
- // }
- //退出
- // 显示提示信息//
- WXSdk.ShowToast = function (text, icon) {
- if (icon === void 0) { icon = true; }
- if (Laya.Browser.window.wx) {
- var t_icon = icon ? "success" : "none";
- Laya.Browser.window.wx.showToast({ title: text, icon: t_icon });
- }
- else {
- console.log(text);
- }
- };
- //1:pet 2:人物
- // public static XianShi_Model(content: string, callback: Function = null, type = 1, title = "") {
- // if (Laya.Browser.window && Laya.Browser.window.wx) {
- // if (type == 1) {
- // var cancelText = "残忍丢掉";
- // var confirmText = "带上一起";
- // } else {
- // var cancelText = "不想";
- // var confirmText = "想";
- // }
- // Laya.Browser.window.wx.showModal({
- // title: title,
- // content: content,
- // cancelText: cancelText,
- // confirmText: confirmText,
- // success(res) {
- // if (res.confirm) {
- // console.log('用户点击确定');
- // callback(true);
- // } else if (res.cancel) {
- // console.log('用户点击取消');
- // callback(false);
- // }
- // },
- // fail(res?) {
- // console.log('用户点击取消');
- // callback(false);
- // }
- // })
- // }
- // }
- WXSdk.ShortVibrate = function () {
- if (Laya.Browser.window.wx && SettingController_1.SettingController.Instance.vibrate) {
- Laya.Browser.window.wx.vibrateShort({});
- }
- };
- WXSdk.LongVibrate = function () {
- if (Laya.Browser.window.wx && SettingController_1.SettingController.Instance.vibrate) {
- Laya.Browser.window.wx.vibrateLong({});
- }
- };
- WXSdk.HideLoading = function (isShowWx) {
- if (isShowWx === void 0) { isShowWx = true; }
- if (Laya.Browser.window && Laya.Browser.window.wx) {
- if (isShowWx) {
- Laya.Browser.window.wx.hideLoading();
- }
- ViewManager_1.default.Instance.CloseMask();
- }
- };
- WXSdk.Success = function (stageId) {
- if (!Main_1.Main.IsWx)
- return;
- Laya.Browser.window.wx.aldStage.onEnd({
- stageId: stageId,
- stageName: "第" + stageId + "关",
- event: "complete",
- params: {
- desc: "关卡完成" //描述
- }
- });
- };
- //记录阿拉丁事件
- WXSdk.AldEvent = function (eventName, key, value) {
- if (Laya.Browser.window && Laya.Browser.window.wx) {
- if (!key)
- key = "用户id";
- if (!value) {
- value = "";
- console.log(value);
- }
- Laya.Browser.window.wx.aldSendEvent(eventName, { key: value });
- }
- };
- WXSdk.Fail = function (stageId) {
- if (!Main_1.Main.IsWx)
- return;
- Laya.Browser.window.wx.aldStage.onEnd({
- stageId: stageId,
- stageName: "第" + stageId + "关",
- event: "fail",
- params: {
- desc: "关卡失败",
- }
- });
- };
- // public static leveleRuning(stageId: string, userid: string, eventtype: number, itemName: string) {
- // if (Laya.Browser.window && Laya.Browser.window.wx) {
- // //Laya.Browser.window.wx.aldStage.onRunning({"stageId":stageId,"stageName":stageName,"userId":userid});
- // var eventT = eventtype == 0 ? "award" : "revive";
- // Laya.Browser.window.wx.aldStage.onRunning({
- // stageId: stageId,
- // stageName: "第" + stageId + "关",
- // userId: userid,
- // event: eventT,
- // params: {
- // itemName: itemName,
- // }
- // })
- // }
- // }
- WXSdk.Start = function (stageId) {
- if (!Main_1.Main.IsWx)
- return;
- Laya.Browser.window.wx.aldStage.onStart({
- stageId: stageId,
- stageName: "第" + stageId + "关",
- });
- };
- WXSdk.Game_Share = function (callback, channel) {
- if (callback === void 0) { callback = null; }
- if (channel === void 0) { channel = ""; }
- if (!Main_1.Main.IsWx) {
- return;
- }
- var url;
- var title;
- url = UserModel_1.default.Instance.CurModel.shareimage;
- title = UserModel_1.default.Instance.CurModel.sharetitle;
- console.log(url + " " + title);
- if (channel != null) {
- // WeiXinSDK.AldEvent("用户分享");
- }
- var t; // = UserModel.Get_Instance.CurModel.HuoQu_ServerTime;
- var path = "";
- Laya.Browser.window.wx.aldShareAppMessage({
- title: title,
- imageUrl: url,
- query: "shareid=" + UserModel_1.default.Instance.CurModel.userid + "_" + "other" + "_" + t + "_" + Math.floor(9999 * Math.random()).toString(),
- });
- ShareModule_1.ShareModule.GoShare(callback);
- };
- WXSdk.Lodining = false;
- return WXSdk;
- }());
- exports.WXSdk = WXSdk;
- },{"../Main":2,"../game_logic/SettingController":10,"../game_logic/ViewManager":11,"./ShareModule":16,"./UserModel":17}],19:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Dictionary = /** @class */ (function () {
- function Dictionary() {
- this._container = {};
- this._length = 0;
- }
- Object.defineProperty(Dictionary.prototype, "container", {
- get: function () {
- return this._container;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Dictionary.prototype, "size", {
- //获取字典长度
- get: function () {
- return this._length;
- },
- enumerable: true,
- configurable: true
- });
- //添加
- Dictionary.prototype.set = function (key, value) {
- if (!this._container.hasOwnProperty(key)) {
- this._length++;
- }
- this._container[key] = value;
- };
- //删除
- Dictionary.prototype.delete = function (key) {
- if (this._container.hasOwnProperty(key)) {
- delete this._container[key];
- this._length--;
- }
- };
- //查找
- Dictionary.prototype.has = function (key) {
- return this._container.hasOwnProperty(key) ? true : false;
- };
- //获取
- Dictionary.prototype.get = function (key) {
- if (this._container.hasOwnProperty(key)) {
- return this._container[key];
- }
- else {
- return undefined;
- }
- };
- //清空
- Dictionary.prototype.clear = function () {
- this._container = {};
- this._length = 0;
- };
- return Dictionary;
- }());
- exports.default = Dictionary;
- },{}],20:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Game_Tool = /** @class */ (function () {
- function Game_Tool() {
- }
- Game_Tool.GetObjKey = function (obj) {
- if (obj == null)
- return null;
- for (var key in obj) {
- if (obj.hasOwnProperty(key)) {
- return key;
- }
- }
- };
- //返回一个随机整数[min,max]
- Game_Tool.randomInt = function (min, max) {
- return parseInt(Math.random() * (max - min + 1) + min);
- };
- //p1 左向量 p2
- Game_Tool.getAng = function (xx, yy, obl) {
- return 180 / Math.PI * this.getRad(xx, yy, obl);
- };
- //返回角度
- Game_Tool.getRad = function (xx, yy, obl) {
- // 方法一:asin()
- // var rad:Number = xx > 0 ? ((Math.PI * 3)/2 + Math.asin(-yy/obl)) : (Math.PI / 2 - Math.asin(-yy/obl));
- // 方法二:acos()
- var rad = yy < 0 ? Math.acos(xx / obl) : (Math.PI * 2 - Math.acos(xx / obl));
- // 方法三:atan2()
- // var rad:Number = yy < 0 ? Math.atan2(-yy, xx) : Math.PI * 2 + Math.atan2(-yy, xx);
- return rad;
- };
- Game_Tool.getM_Vector = function (v1, v2) {
- var temp = new Laya.Vector3();
- Laya.Vector3.add(v1, v2, temp);
- return new Laya.Vector3(temp.x * 0.5, temp.y * 0.5, temp.z * 0.5);
- };
- Game_Tool.getReflectAng = function (dir) {
- var xx = Math.abs(dir.x);
- var zz = Math.abs(dir.z);
- var obl = Math.sqrt(Math.pow(dir.x, 2) + Math.pow(dir.z, 2));
- return 180 / Math.PI * Math.acos(xx / obl);
- };
- Game_Tool.random_1to1 = function () {
- var iszheng = Math.random() > 0.5 ? -1 : 1;
- return Math.random() * iszheng;
- };
- Game_Tool.get64Encode = function (str) {
- var c1, c2, c3;
- var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- var i = 0, len = str.length, string = '';
- while (i < len) {
- c1 = str.charCodeAt(i++) & 0xff;
- if (i == len) {
- string += base64EncodeChars.charAt(c1 >> 2);
- string += base64EncodeChars.charAt((c1 & 0x3) << 4);
- string += "==";
- break;
- }
- c2 = str.charCodeAt(i++);
- if (i == len) {
- string += base64EncodeChars.charAt(c1 >> 2);
- string += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
- string += base64EncodeChars.charAt((c2 & 0xF) << 2);
- string += "=";
- break;
- }
- c3 = str.charCodeAt(i++);
- string += base64EncodeChars.charAt(c1 >> 2);
- string += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
- string += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
- string += base64EncodeChars.charAt(c3 & 0x3F);
- }
- return string;
- };
- return Game_Tool;
- }());
- exports.default = Game_Tool;
- },{}],21:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var layaMaxUI_1 = require("../ui/layaMaxUI");
- var EventManager_1 = require("../game_module/EventManager");
- var RoleController_1 = require("../game_logic/RoleController");
- var game_ui = /** @class */ (function (_super) {
- __extends(game_ui, _super);
- function game_ui() {
- var _this = _super.call(this) || this;
- _this.isdown = false;
- _this.resizeHander();
- EventManager_1.EventManager.on(Laya.Event.RESIZE, _this, _this.resizeHander);
- return _this;
- }
- game_ui.prototype.resizeHander = function () {
- this.height = Laya.stage.height;
- };
- game_ui.prototype.OnShow = function (data) {
- this.UiEventHandler();
- };
- game_ui.prototype.UiEventHandler = function () {
- this.on(Laya.Event.MOUSE_DOWN, this, this.OnClickDown);
- this.on(Laya.Event.MOUSE_UP, this, this.OnClickUp);
- this.on(Laya.Event.MOUSE_OUT, this, this.OnClickUp);
- };
- game_ui.prototype.OnClickDown = function (e) {
- if (e.target instanceof Laya.UIComponent)
- return;
- this.isdown = true;
- this.on(Laya.Event.MOUSE_MOVE, this, this.OnSlider);
- this.curMousePos = new Laya.Vector2(Laya.MouseManager.instance.mouseX, Laya.MouseManager.instance.mouseY);
- };
- game_ui.prototype.OnClickUp = function () {
- if (!this.isdown)
- return;
- this.isdown = false;
- this.off(Laya.Event.MOUSE_MOVE, this, this.OnSlider);
- };
- game_ui.prototype.OnSlider = function () {
- var MousePos = new Laya.Vector2(Laya.MouseManager.instance.mouseX, Laya.MouseManager.instance.mouseY);
- var offestX = MousePos.x - this.curMousePos.x;
- if (offestX > 0)
- offestX = offestX < 5 ? offestX : 5;
- if (offestX < 0)
- offestX = offestX > -5 ? offestX : -5;
- var rotateDir = new Laya.Vector3(0, -offestX * 0.01, 0);
- RoleController_1.RoleController.Instance.RoleRotation(rotateDir);
- this.curMousePos = new Laya.Vector2(Laya.MouseManager.instance.mouseX, Laya.MouseManager.instance.mouseY);
- ;
- };
- game_ui.prototype.OnClose = function () {
- EventManager_1.EventManager.off(Laya.Event.RESIZE, this, this.resizeHander);
- this.off(Laya.Event.MOUSE_DOWN, this, this.OnClickDown);
- this.off(Laya.Event.MOUSE_UP, this, this.OnClickUp);
- this.off(Laya.Event.MOUSE_OUT, this, this.OnClickUp);
- };
- return game_ui;
- }(layaMaxUI_1.ui.game_uiUI));
- exports.game_ui = game_ui;
- },{"../game_logic/RoleController":9,"../game_module/EventManager":12,"../ui/layaMaxUI":22}],22:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Scene = Laya.Scene;
- var REG = Laya.ClassUtils.regClass;
- var ui;
- (function (ui) {
- var game_uiUI = /** @class */ (function (_super) {
- __extends(game_uiUI, _super);
- function game_uiUI() {
- return _super.call(this) || this;
- }
- game_uiUI.prototype.createChildren = function () {
- _super.prototype.createChildren.call(this);
- this.createView(game_uiUI.uiView);
- };
- game_uiUI.uiView = { "type": "Scene", "props": { "width": 720, "height": 1280 }, "loadList": [], "loadList3D": [] };
- return game_uiUI;
- }(Scene));
- ui.game_uiUI = game_uiUI;
- REG("ui.game_uiUI", game_uiUI);
- })(ui = exports.ui || (exports.ui = {}));
- },{}]},{},[2])
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkQ6L0xheWFCb3gvTGF5YTIuMS4wYmVhdC9MYXlhQWlySURFX2JldGEvcmVzb3VyY2VzL2FwcC9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwic3JjL0dhbWVDb25maWcudHMiLCJzcmMvTWFpbi50cyIsInNyYy9nYW1lX2xvZ2ljL0J1bGxldC50cyIsInNyYy9nYW1lX2xvZ2ljL0J1bGxldENvbnRyb2xsZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9HYW1lU2NlbmVDb250cm9sbGVyLnRzIiwic3JjL2dhbWVfbG9naWMvUGxheWVyLnRzIiwic3JjL2dhbWVfbG9naWMvUG9vbF9NYW5hZ2VyLnRzIiwic3JjL2dhbWVfbG9naWMvUm9sZS50cyIsInNyYy9nYW1lX2xvZ2ljL1JvbGVDb250cm9sbGVyLnRzIiwic3JjL2dhbWVfbG9naWMvU2V0dGluZ0NvbnRyb2xsZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9WaWV3TWFuYWdlci50cyIsInNyYy9nYW1lX21vZHVsZS9FdmVudE1hbmFnZXIudHMiLCJzcmMvZ2FtZV9tb2R1bGUvRllIRF9TZGsudHMiLCJzcmMvZ2FtZV9tb2R1bGUvR2FtZURlZmluZWQudHMiLCJzcmMvZ2FtZV9tb2R1bGUvUmVzb3VyY2VMb2FkLnRzIiwic3JjL2dhbWVfbW9kdWxlL1NoYXJlTW9kdWxlLnRzIiwic3JjL2dhbWVfbW9kdWxlL1VzZXJNb2RlbC50cyIsInNyYy9nYW1lX21vZHVsZS9XWFNkay50cyIsInNyYy9nYW1lX3Rvb2wvRGljdGlvbmFyeS50cyIsInNyYy9nYW1lX3Rvb2wvR2FtZV9Ub29sLnRzIiwic3JjL2dhbWVfdWkvZ2FtZV91aS50cyIsInNyYy91aS9sYXlhTWF4VUkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQSxnR0FBZ0c7O0FBRWhHOztFQUVFO0FBQ0Y7SUFhSTtJQUFjLENBQUM7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QUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsRUFBQyxPQUFPLEVBQUMsR0FBRyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxVQUFVLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsQ0FBQztRQU1sSCxnQkFBQztLQVBELEFBT0MsQ0FQOEIsS0FBSyxHQU9uQztJQVBZLFlBQVMsWUFPckIsQ0FBQTtJQUNELEdBQUcsQ0FBQyxjQUFjLEVBQUMsU0FBUyxDQUFDLENBQUM7QUFDbEMsQ0FBQyxFQVZhLEVBQUUsR0FBRixVQUFFLEtBQUYsVUFBRSxRQVVmIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxufSkoKTtcclxuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlRoaXMgY2xhc3MgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgTGF5YUFpcklERSwgcGxlYXNlIGRvIG5vdCBtYWtlIGFueSBtb2RpZmljYXRpb25zLiAqL1xyXG5cclxuLypcclxuKiDmuLjmiI/liJ3lp4vljJbphY3nva47XHJcbiovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVDb25maWd7XHJcbiAgICBzdGF0aWMgd2lkdGg6bnVtYmVyPTcyMDtcclxuICAgIHN0YXRpYyBoZWlnaHQ6bnVtYmVyPTEyODA7XHJcbiAgICBzdGF0aWMgc2NhbGVNb2RlOnN0cmluZz1cImZpeGVkd2lkdGhcIjtcclxuICAgIHN0YXRpYyBzY3JlZW5Nb2RlOnN0cmluZz1cIm5vbmVcIjtcclxuICAgIHN0YXRpYyBhbGlnblY6c3RyaW5nPVwibWlkZGxlXCI7XHJcbiAgICBzdGF0aWMgYWxpZ25IOnN0cmluZz1cImNlbnRlclwiO1xyXG4gICAgc3RhdGljIHN0YXJ0U2NlbmU6YW55PVwiZ2FtZV91aS5zY2VuZVwiO1xyXG4gICAgc3RhdGljIHNjZW5lUm9vdDpzdHJpbmc9XCJcIjtcclxuICAgIHN0YXRpYyBkZWJ1Zzpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIHN0YXQ6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBwaHlzaWNzRGVidWc6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBleHBvcnRTY2VuZVRvSnNvbjpib29sZWFuPXRydWU7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe31cclxuICAgIHN0YXRpYyBpbml0KCl7XHJcbiAgICAgICAgdmFyIHJlZzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XHJcblxyXG4gICAgfVxyXG59XHJcbkdhbWVDb25maWcuaW5pdCgpOyIsImltcG9ydCBHYW1lQ29uZmlnIGZyb20gXCIuL0dhbWVDb25maWdcIjtcclxuaW1wb3J0IFZpZXdNYW5hZ2VyLCB7IFZpZXdUeXBlIH0gZnJvbSBcIi4vZ2FtZV9sb2dpYy9WaWV3TWFuYWdlclwiO1xyXG5pbXBvcnQgUmVzb3VyY2VMb2FkIGZyb20gXCIuL2dhbWVfbW9kdWxlL1Jlc291cmNlTG9hZFwiO1xyXG5pbXBvcnQgR2FtZURlZmluZWQgZnJvbSBcIi4vZ2FtZV9tb2R1bGUvR2FtZURlZmluZWRcIjtcclxuaW1wb3J0IHsgV1hTZGsgfSBmcm9tIFwiLi9nYW1lX21vZHVsZS9XWFNka1wiO1xyXG5pbXBvcnQgeyBGWUhEX1NkayB9IGZyb20gXCIuL2dhbWVfbW9kdWxlL0ZZSERfU2RrXCI7XHJcbmltcG9ydCBBc3NldENvbnRyb2xsZXIgZnJvbSBcIi4vZ2FtZV9sb2dpYy9Bc3NldENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IEdhbWVTY2VuZUNvbnRyb2xsZXIgZnJvbSBcIi4vZ2FtZV9sb2dpYy9HYW1lU2NlbmVDb250cm9sbGVyXCI7XHJcbmV4cG9ydCBjbGFzcyBNYWluIHtcclxuXHJcblx0cHVibGljIHN0YXRpYyBub3dyYXRpbzogbnVtYmVyO1xyXG5cdHB1YmxpYyBzdGF0aWMgSXNXeDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdHB1YmxpYyBzdGF0aWMgVlJFID0gXCIxLjAuNVwiO1xyXG5cdHB1YmxpYyBzdGF0aWMgQ0ZHID0gXCJDRkdcIjtcclxuXHRwdWJsaWMgc3RhdGljIHd4VmFsdWUgPSBcIlwiO1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0Ly/moLnmja5JREXorr7nva7liJ3lp4vljJblvJXmk45cdFx0XHJcblx0XHRpZiAod2luZG93W1wiTGF5YTNEXCJdKSBMYXlhM0QuaW5pdChHYW1lQ29uZmlnLndpZHRoLCBHYW1lQ29uZmlnLmhlaWdodCk7XHJcblx0XHRlbHNlIExheWEuaW5pdChHYW1lQ29uZmlnLndpZHRoLCBHYW1lQ29uZmlnLmhlaWdodCwgTGF5YVtcIldlYkdMXCJdKTtcclxuXHRcdExheWFbXCJQaHlzaWNzXCJdICYmIExheWFbXCJQaHlzaWNzXCJdLmVuYWJsZSgpO1xyXG5cdFx0TGF5YVtcIkRlYnVnUGFuZWxcIl0gJiYgTGF5YVtcIkRlYnVnUGFuZWxcIl0uZW5hYmxlKCk7XHJcblx0XHRMYXlhLnN0YWdlLnNjYWxlTW9kZSA9IEdhbWVDb25maWcuc2NhbGVNb2RlO1xyXG5cdFx0TGF5YS5zdGFnZS5zY3JlZW5Nb2RlID0gR2FtZUNvbmZpZy5zY3JlZW5Nb2RlO1xyXG5cdFx0Ly/lhbzlrrnlvq7kv6HkuI3mlK/mjIHliqDovb1zY2VuZeWQjue8gOWcuuaZr1xyXG5cdFx0TGF5YS5VUkwuZXhwb3J0U2NlbmVUb0pzb24gPSBHYW1lQ29uZmlnLmV4cG9ydFNjZW5lVG9Kc29uO1xyXG5cclxuXHRcdC8v5omT5byA6LCD6K+V6Z2i5p2/77yI6YCa6L+HSURF6K6+572u6LCD6K+V5qih5byP77yM5oiW6ICFdXJs5Zyw5Z2A5aKe5YqgZGVidWc9dHJ1ZeWPguaVsO+8jOWdh+WPr+aJk+W8gOiwg+ivlemdouadv++8iVxyXG5cdFx0aWYgKEdhbWVDb25maWcuZGVidWcgfHwgTGF5YS5VdGlscy5nZXRRdWVyeVN0cmluZyhcImRlYnVnXCIpID09IFwidHJ1ZVwiKSBMYXlhLmVuYWJsZURlYnVnUGFuZWwoKTtcclxuXHRcdGlmIChHYW1lQ29uZmlnLnBoeXNpY3NEZWJ1ZyAmJiBMYXlhW1wiUGh5c2ljc0RlYnVnRHJhd1wiXSkgTGF5YVtcIlBoeXNpY3NEZWJ1Z0RyYXdcIl0uZW5hYmxlKCk7XHJcblx0XHRpZiAoR2FtZUNvbmZpZy5zdGF0KSBMYXlhLlN0YXQuc2hvdygpO1xyXG5cdFx0TGF5YS5hbGVydEdsb2JhbEVycm9yID0gdHJ1ZTtcclxuXHRcdE1haW4ubm93cmF0aW8gPSBMYXlhLnN0YWdlLndpZHRoIC8gTGF5YS5zdGFnZS5oZWlnaHQ7XHJcblxyXG5cdFx0TWFpbi5Jc1d4ID0gTGF5YS5Ccm93c2VyLm9uV2VpWGluO1xyXG5cclxuXHRcdGlmIChNYWluLklzV3gpIHtcclxuXHRcdFx0V1hTZGsuSW5zdGFuY2UuaW5pdCgoc2hhcmVUaWNrZXQ6IHN0cmluZywgc2hhcmVpZDogc3RyaW5nLCBzY2VuZTogc3RyaW5nLCBhcHBpZDogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5vblNob3dIYW5kbGVyKHNoYXJlVGlja2V0LCBzaGFyZWlkLCBzY2VuZSwgYXBwaWQpO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0RllIRF9TZGsuSW5pdFNkaygpO1xyXG5cdFx0fVxyXG5cdFx0Ly/mv4DmtLvotYTmupDniYjmnKzmjqfliLbvvIx2ZXJzaW9uLmpzb27nlLFJREXlj5HluIPlip/og73oh6rliqjnlJ/miJDvvIzlpoLmnpzmsqHmnInkuZ/kuI3lvbHlk43lkI7nu63mtYHnqItcclxuXHRcdExheWEuUmVzb3VyY2VWZXJzaW9uLmVuYWJsZShcInZlcnNpb24uanNvblwiLCBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsIHRoaXMub25WZXJzaW9uTG9hZGVkKSwgTGF5YS5SZXNvdXJjZVZlcnNpb24uRklMRU5BTUVfVkVSU0lPTik7XHJcblx0XHR0aGlzLklzTmVlZFVwZGF0ZSgpO1xyXG5cdH1cclxuXHRwcml2YXRlIElzTmVlZFVwZGF0ZSgpIHtcclxuXHRcdGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcblx0XHRjb25zdCB1cGRhdGVNYW5hZ2VyID0gTGF5YS5Ccm93c2VyLndpbmRvdy53eC5nZXRVcGRhdGVNYW5hZ2VyKCk7XHJcblx0XHR1cGRhdGVNYW5hZ2VyLm9uQ2hlY2tGb3JVcGRhdGUoZnVuY3Rpb24gKHJlcykge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhcIuacgOaWsOeJiOacrDpcIiArIHJlcy5oYXNVcGRhdGUpO1xyXG5cdFx0fVxyXG5cdFx0KTtcclxuXHRcdHVwZGF0ZU1hbmFnZXIub25VcGRhdGVSZWFkeShmdW5jdGlvbiAoKSB7XHJcblx0XHRcdExheWEuQnJvd3Nlci53aW5kb3cud3guc2hvd01vZGFsKHtcclxuXHRcdFx0XHRzaG93Q2FuY2VsOiBmYWxzZSxcclxuXHRcdFx0XHR0aXRsZTogJ+abtOaWsOaPkOekuicsXHJcblx0XHRcdFx0Y29udGVudDogJ+aWsOeJiOacrOW3sue7j+WHhuWkh+Wlve+8jOaYr+WQpumHjeWQr+W6lOeUqO+8nycsXHJcblx0XHRcdFx0c3VjY2VzcyhyZXMpIHtcclxuXHRcdFx0XHRcdHVwZGF0ZU1hbmFnZXIuYXBwbHlVcGRhdGUoKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGZhaWwocmVzPykge1xyXG5cdFx0XHRcdFx0dXBkYXRlTWFuYWdlci5hcHBseVVwZGF0ZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgb25TaG93SGFuZGxlcihzaGFyZVRpY2tldDogc3RyaW5nLCBzaGFyZUlkOiBzdHJpbmcsIHNjZW5lOiBzdHJpbmcsIGFwcGlkOiBzdHJpbmcpIHtcclxuXHRcdGNvbnNvbGUubG9nKFwiW0xPR106IOWIhuS6q+i/m+WFpTogc2hhcmVUaWNrZXQ6XCIsIHNoYXJlVGlja2V0LCBcIiwgb3BlbklkPVwiLCBzaGFyZUlkLCBcIiwgc2NlbmU9XCIsIHNjZW5lKTtcclxuXHRcdC8vIGlmICghTWFpbi5tU2hhcmVQZW9wbGVTY2VuZSkge1xyXG5cdFx0Ly8gXHRNYWluLm1TaGFyZVBlb3BsZVNjZW5lID0gc2NlbmU7XHJcblx0XHQvLyB9XHJcblx0XHQvLyBpZiAoIU1haW4uYXBwaWQpIHtcclxuXHRcdC8vIFx0TWFpbi5hcHBpZCA9IGFwcGlkO1xyXG5cdFx0Ly8gfVxyXG5cdFx0aWYgKHNjZW5lICE9IG51bGwgJiYgc2NlbmUgIT0gXCJcIikge1xyXG5cdFx0XHRXWFNkay5JbnN0YW5jZS5TaGFyZVNjZW5lID0gc2NlbmU7XHJcblx0XHR9XHJcblx0XHRpZiAoc2hhcmVJZCAhPSBudWxsICYmIHNoYXJlSWQgIT0gXCJcIikge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhcIuiuvue9ruWIhuS6q2lkXCIgKyBzaGFyZUlkKTtcclxuXHRcdFx0V1hTZGsuSW5zdGFuY2Uuc2V0U2hhcmVJZChzaGFyZUlkKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG9uVmVyc2lvbkxvYWRlZCgpOiB2b2lkIHtcclxuXHRcdC8v5r+A5rS75aSn5bCP5Zu+5pig5bCE77yM5Yqg6L295bCP5Zu+55qE5pe25YCZ77yM5aaC5p6c5Y+R546w5bCP5Zu+5Zyo5aSn5Zu+5ZCI6ZuG6YeM6Z2i77yM5YiZ5LyY5YWI5Yqg6L295aSn5Zu+5ZCI6ZuG77yM6ICM5LiN5piv5bCP5Zu+XHJcblx0XHRMYXlhLkF0bGFzSW5mb01hbmFnZXIuZW5hYmxlKFwiZmlsZWNvbmZpZy5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vbkNvbmZpZ0xvYWRlZCkpO1xyXG5cdFx0TGF5YS5Nb3VzZU1hbmFnZXIubXVsdGlUb3VjaEVuYWJsZWQgPSBmYWxzZTtcclxuXHR9XHJcblxyXG5cdG9uQ29uZmlnTG9hZGVkKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5Mb2FkVUkoKTtcclxuXHR9XHJcblx0TG9hZFVJKCkge1xyXG5cdFx0Vmlld01hbmFnZXIuSW5zdGFuY2UuT3BlblZpZXcoVmlld1R5cGUuZ2FtZV91aSk7XHJcblx0XHRHYW1lU2NlbmVDb250cm9sbGVyLkluc3RhbmNlLkNyZWF0ZVNjZW5lKCk7XHJcblx0XHRcdC8vdGhpcy50ZXN0KCk7XHJcblx0fVxyXG5cclxuXHR0ZXN0KCkge1xyXG5cdFx0dmFyIHYxPW5ldyBMYXlhLlZlY3RvcjMoLTMsMCwxKTtcclxuXHRcdHZhciB2Mj1uZXcgTGF5YS5WZWN0b3IzKDAsMCwtMSk7XHJcblx0XHR2YXIgdjM9bmV3IExheWEuVmVjdG9yMygwLDAsMCk7XHJcblx0XHRMYXlhLlZlY3RvcjMuY3Jvc3ModjEsdjIsdjMpO1xyXG5cdFx0Y29uc29sZS5sb2codjMpO1xyXG5cdH1cclxufVxyXG4vL+a/gOa0u+WQr+WKqOexu1xyXG5uZXcgTWFpbigpO1xyXG4iLCJpbXBvcnQgeyBSb2xlIH0gZnJvbSBcIi4vUm9sZVwiO1xyXG5pbXBvcnQgR2FtZURlZmluZWQsIHsgQ2hlY2tUeXBlIH0gZnJvbSBcIi4uL2dhbWVfbW9kdWxlL0dhbWVEZWZpbmVkXCI7XHJcbmltcG9ydCBWZWN0b3IzID0gTGF5YS5WZWN0b3IzO1xyXG5pbXBvcnQgUmF5ID0gTGF5YS5SYXk7XHJcbmltcG9ydCBIaXRSZXN1bHQgPSBMYXlhLkhpdFJlc3VsdDtcclxuaW1wb3J0IEdhbWVTY2VuZUNvbnRyb2xsZXIgZnJvbSBcIi4vR2FtZVNjZW5lQ29udHJvbGxlclwiO1xyXG5pbXBvcnQgQnVsbGV0Q29udHJvbGxlciBmcm9tIFwiLi9CdWxsZXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCBTcHJpdGUzRCA9IExheWEuU3ByaXRlM0Q7XHJcbmltcG9ydCBUcmFuc2Zvcm0zRCA9IExheWEuVHJhbnNmb3JtM0Q7XHJcbmltcG9ydCBHYW1lX1Rvb2wgZnJvbSBcIi4uL2dhbWVfdG9vbC9HYW1lX1Rvb2xcIjtcclxuZXhwb3J0IGNsYXNzIEJ1bGxldCBleHRlbmRzIExheWEuU2NyaXB0IHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdHJhbnNmb3JtOiBUcmFuc2Zvcm0zRDtcclxuICAgIHByaXZhdGUgc2VsZjogU3ByaXRlM0Q7XHJcbiAgICBvbkF3YWtlKCkge1xyXG4gICAgICAgIHRoaXMuc2VsZiA9IHRoaXMub3duZXIgYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgdGhpcy5mb3J3ID0gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XHJcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtID0gdGhpcy5zZWxmLnRyYW5zZm9ybTtcclxuICAgICAgICB0aGlzLl9jb3JzcyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZm9ydzogVmVjdG9yMztcclxuICAgIHByaXZhdGUgX3JheTogUmF5O1xyXG4gICAgcHJpdmF0ZSBfaGl0OiBIaXRSZXN1bHQ7XHJcbiAgICBwcml2YXRlIGdvOiBTcHJpdGUzRDtcclxuICAgIHByaXZhdGUgZ29TOiBCdWxsZXQ7XHJcbiAgICBwcml2YXRlIF9jb3JzczogVmVjdG9yMztcclxuICAgIENyZWF0ZVJheShwb3M6IFZlY3RvcjMsIF9yb3RhdGlvbikge1xyXG4gICAgICAgIGlmICghdGhpcy5nbykge1xyXG4gICAgICAgICAgICB0aGlzLmdvID0gQnVsbGV0Q29udHJvbGxlci5JbnN0YW5jZS5DcmVhdGVCdWxsZXQoKTtcclxuICAgICAgICAgICAgdmFyIGdzID0gdGhpcy5nby5nZXRDb21wb25lbnQoQnVsbGV0KTtcclxuICAgICAgICAgICAgaWYgKCFncykgdGhpcy5nb1MgPSB0aGlzLmdvLmFkZENvbXBvbmVudChCdWxsZXQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ28uYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ucG9zaXRpb24gPSBwb3MuY2xvbmUoKTtcclxuICAgICAgICB0aGlzLmdvLnRyYW5zZm9ybS5yb3RhdGlvbkV1bGVyID0gX3JvdGF0aW9uO1xyXG4gICAgICAgIC8vIHRoaXMuX3RyYW5zZm9ybS5nZXRGb3J3YXJkKHRoaXMuZm9ydyk7XHJcbiAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0uZ2V0Rm9yd2FyZCh0aGlzLmZvcncpO1xyXG4gICAgICAgIHRoaXMuZm9ydyA9IG5ldyBWZWN0b3IzKC10aGlzLmZvcncueCwgLXRoaXMuZm9ydy55LCAtdGhpcy5mb3J3LnopO1xyXG4gICAgICAgIHZhciB0ZW1wPXRoaXMuZm9ydy5jbG9uZSgpO1xyXG4gICAgICAgIFZlY3RvcjMubm9ybWFsaXplKHRlbXAsIHRlbXApO1xyXG4gICAgICAgIC8vICAgIHRoaXMuZm9ydyA9IG5ldyBWZWN0b3IzKHRoaXMuZm9yVy54ICogdGhpcy5zcGVlZCwgdGhpcy5mb3JXLnkgKiB0aGlzLnNwZWVkLCB0aGlzLmZvclcueiAqIHRoaXMuc3BlZWQpO1xyXG5cclxuXHJcbiAgICAgICAvLyB2YXIgdGVtcCA9IG5ldyBWZWN0b3IzKC10aGlzLmZvcncueCAqIDAuMDEsIC10aGlzLmZvcncueSAqIDAuMDEsIC10aGlzLmZvcncueiAqIDAuMDEpO1xyXG5cclxuICAgICAgICBwb3MueCA9IHBvcy54ICsgdGVtcC54KjAuMDE7XHJcbiAgICAgICAgcG9zLnkgPSBwb3MueSArIHRlbXAueSowLjAxO1xyXG4gICAgICAgIHBvcy56ID0gcG9zLnogKyB0ZW1wLnoqMC4wMTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9yYXkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmF5ID0gbmV3IFJheShwb3MsIHRoaXMuZm9ydyk7XHJcbiAgICAgICAgICAgIHRoaXMuX2hpdCA9IG5ldyBIaXRSZXN1bHQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9yYXkub3JpZ2luID0gcG9zO1xyXG4gICAgICAgICAgICB0aGlzLl9yYXkuZGlyZWN0aW9uID0gdGhpcy5mb3J3O1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIHZhciBpc1MgPSBHYW1lU2NlbmVDb250cm9sbGVyLkluc3RhbmNlLmdhbWVfc2NlbmUucGh5c2ljc1NpbXVsYXRpb24ucmF5Q2FzdCh0aGlzLl9yYXksIHRoaXMuX2hpdCk7XHJcbiAgICAgICAgaWYgKGlzUykge1xyXG4gICAgICAgICAgICB2YXIgcG9pID0gdGhpcy5faGl0LnBvaW50O1xyXG4gICAgICAgICAgICB2YXIgZGlzID0gVmVjdG9yMy5kaXN0YW5jZShwb3MsIHBvaSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ28udHJhbnNmb3JtLmxvY2FsU2NhbGVaID0gZGlzO1xyXG4gICAgICAgICAgICB2YXIgb3RoZXIgPSB0aGlzLl9oaXQuY29sbGlkZXIub3duZXIgYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgIGlmIChvdGhlci5sYXllciA9PSBHYW1lRGVmaW5lZC5wbGF5ZXJfbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29TLlNldE5leHROb3RBY3RpdmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBub3IgPSB0aGlzLl9oaXQubm9ybWFsO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cobm9yKTtcclxuICAgICAgICAgICAgICAgIFZlY3RvcjMuY3Jvc3ModGhpcy5mb3J3LCBub3IsIHRoaXMuX2NvcnNzKTsvL+Wkp+S6jjDlnKjlt6bmlrkg5bCP5LqOMOWcqOWPs+aWuVxyXG4gICAgICAgICAgICAgICAgdmFyIGEgPSBHYW1lX1Rvb2wuZ2V0UmVmbGVjdEFuZyh0aGlzLmZvcncpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFuZyA9IHRoaXMuX3RyYW5zZm9ybS5yb3RhdGlvbkV1bGVyLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb3Jzcy55ID49IDAgPyBhbmcueSA9IGFuZy55ICsgMiAqIGEgOiBhbmcueSA9IGFuZy55IC0gMiAqIGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvUy5DcmVhdGVSYXkocG9pLCBhbmcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ28udHJhbnNmb3JtLmxvY2FsU2NhbGVaID0gNTA7XHJcbiAgICAgICAgICAgIHRoaXMuZ29TLlNldE5leHROb3RBY3RpdmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIFNldE5leHROb3RBY3RpdmUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ28pIHtcclxuICAgICAgICAgICAgdGhpcy5nby5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ29TKSB0aGlzLmdvUy5TZXROZXh0Tm90QWN0aXZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IFNwcml0ZTNEID0gTGF5YS5TcHJpdGUzRDtcclxuaW1wb3J0IHsgUG9vbF9NYW5hZ2VyIH0gZnJvbSBcIi4vUG9vbF9NYW5hZ2VyXCI7XHJcbmltcG9ydCBHYW1lRGVmaW5lZCBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvR2FtZURlZmluZWRcIjtcclxuaW1wb3J0IEdhbWVTY2VuZUNvbnRyb2xsZXIgZnJvbSBcIi4vR2FtZVNjZW5lQ29udHJvbGxlclwiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCdWxsZXRDb250cm9sbGVyIHtcclxuICAgIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBCdWxsZXRDb250cm9sbGVyO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogQnVsbGV0Q29udHJvbGxlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2UgfHwgKHRoaXMuaW5zdGFuY2UgPSBuZXcgQnVsbGV0Q29udHJvbGxlcigpKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgYnVsbGV0UHJlZjogU3ByaXRlM0Q7XHJcbiAgICBwdWJsaWMgaW5pdChidWxsZXQ6IFNwcml0ZTNEKSB7XHJcbiAgICAgICAgYnVsbGV0LnJlbW92ZVNlbGYoKTtcclxuICAgICAgICB0aGlzLmJ1bGxldFByZWYgPSBidWxsZXQ7XHJcbiAgICAgICAgUG9vbF9NYW5hZ2VyLkluc3RhbmNlLkluaXREYXRhKEdhbWVEZWZpbmVkLnBvb2xOYW1lLmJ1bGxldCwgdGhpcy5idWxsZXRQcmVmKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1bGxldDogU3ByaXRlM0Q7XHJcbiAgICBwdWJsaWMgQ3JlYXRlQnVsbGV0KCk6IFNwcml0ZTNEIHtcclxuICAgICAgICAvL2lmICh0aGlzLmJ1bGxldCkgcmV0dXJuIHRoaXMuYnVsbGV0O1xyXG4gICAgICAgIHZhciBnbyA9IFBvb2xfTWFuYWdlci5JbnN0YW5jZS5TZXRBY3RpdmVPYmplY3QoR2FtZURlZmluZWQucG9vbE5hbWUuYnVsbGV0KTtcclxuICAgICAgICBHYW1lU2NlbmVDb250cm9sbGVyLkluc3RhbmNlLmdhbWVfc2NlbmUuYWRkQ2hpbGQoZ28pO1xyXG4gICAgICAgLy8gdGhpcy5idWxsZXQgPSBnbztcclxuICAgICAgICByZXR1cm4gZ287XHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IFJlc291cmNlTG9hZCBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvUmVzb3VyY2VMb2FkXCI7XHJcblxyXG5pbXBvcnQgU2NlbmUzRCA9IExheWEuU2NlbmUzRDtcclxuaW1wb3J0IEJ1bGxldENvbnRyb2xsZXIgZnJvbSBcIi4vQnVsbGV0Q29udHJvbGxlclwiO1xyXG5pbXBvcnQgeyBSb2xlQ29udHJvbGxlciB9IGZyb20gXCIuL1JvbGVDb250cm9sbGVyXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVTY2VuZUNvbnRyb2xsZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IEdhbWVTY2VuZUNvbnRyb2xsZXI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBHYW1lU2NlbmVDb250cm9sbGVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZSB8fCAodGhpcy5pbnN0YW5jZSA9IG5ldyBHYW1lU2NlbmVDb250cm9sbGVyKCkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgZ2FtZV9zY2VuZTogU2NlbmUzRDtcclxuICAgIHB1YmxpYyBwYXRoID0gXCJyZXMvTGF5YVNjZW5lX21haW4vQ29udmVudGlvbmFsL21haW4ubHNcIjtcclxuICAgIHB1YmxpYyBDcmVhdGVTY2VuZSgpIHtcclxuICAgICAgICBSZXNvdXJjZUxvYWQuTG9hZFJlc291cmNlKFt0aGlzLnBhdGhdLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciB0ID0gTGF5YS5sb2FkZXIuZ2V0UmVzKHRoaXMucGF0aCkgYXMgTGF5YS5TY2VuZTNEO1xyXG4gICAgICAgICAgICBMYXlhLnN0YWdlLmFkZENoaWxkKHQpO1xyXG4gICAgICAgICAgICB0aGlzLmdhbWVfc2NlbmUgPSB0O1xyXG4gICAgICAgICAgICB2YXIgX2J1bGxldCA9IHQuZ2V0Q2hpbGRCeU5hbWUoXCJidWxsZXRcIikgYXMgTGF5YS5TcHJpdGUzRDtcclxuICAgICAgICAgICAgQnVsbGV0Q29udHJvbGxlci5JbnN0YW5jZS5pbml0KF9idWxsZXQpO1xyXG4gICAgICAgICAgICB2YXIgX3JvbGUgPSB0LmdldENoaWxkQnlOYW1lKFwicm9sZVwiKSBhcyBMYXlhLlNwcml0ZTNEO1xyXG4gICAgICAgICAgICBSb2xlQ29udHJvbGxlci5JbnN0YW5jZS5pbml0KF9yb2xlKTtcclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgUm9sZUNvbnRyb2xsZXIuSW5zdGFuY2UuQ3JlYXRlUmF5KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgUm9sZSB9IGZyb20gXCIuL1JvbGVcIjtcclxuaW1wb3J0IHsgQ2hlY2tUeXBlIH0gZnJvbSBcIi4uL2dhbWVfbW9kdWxlL0dhbWVEZWZpbmVkXCI7XHJcbmltcG9ydCBWZWN0b3IzID0gTGF5YS5WZWN0b3IzO1xyXG5pbXBvcnQgUmF5ID0gTGF5YS5SYXk7XHJcbmltcG9ydCBIaXRSZXN1bHQgPSBMYXlhLkhpdFJlc3VsdDtcclxuaW1wb3J0IEdhbWVTY2VuZUNvbnRyb2xsZXIgZnJvbSBcIi4vR2FtZVNjZW5lQ29udHJvbGxlclwiO1xyXG5pbXBvcnQgQnVsbGV0Q29udHJvbGxlciBmcm9tIFwiLi9CdWxsZXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCBTcHJpdGUzRCA9IExheWEuU3ByaXRlM0Q7XHJcbmltcG9ydCB7IEJ1bGxldCB9IGZyb20gXCIuL0J1bGxldFwiO1xyXG5pbXBvcnQgR2FtZV9Ub29sIGZyb20gXCIuLi9nYW1lX3Rvb2wvR2FtZV9Ub29sXCI7XHJcbmV4cG9ydCBjbGFzcyBQbGF5ZXIgZXh0ZW5kcyBSb2xlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Bd2FrZSgpIHtcclxuICAgICAgICBzdXBlci5vbkF3YWtlKCk7XHJcbiAgICAgICAgdGhpcy5fdHlwZSA9IENoZWNrVHlwZS5QbGF5ZXI7XHJcbiAgICAgICAgdGhpcy5mb3J3ID0gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XHJcbiAgICAgICAgdGhpcy5fY29yc3MgPSBuZXcgVmVjdG9yMygwLCAwLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZvcnc6IFZlY3RvcjM7XHJcbiAgICBwcml2YXRlIF9yYXk6IFJheTtcclxuICAgIHByaXZhdGUgX2hpdDogSGl0UmVzdWx0O1xyXG5cclxuICAgIHByaXZhdGUgX2NvcnNzOiBWZWN0b3IzO1xyXG5cclxuICAgIHByaXZhdGUgZ286IFNwcml0ZTNEO1xyXG4gICAgcHJpdmF0ZSBnb1M6IEJ1bGxldDtcclxuICAgIENyZWF0ZVJheSgpIHtcclxuICAgICAgICB0aGlzLl90cmFuc2Zvcm0uZ2V0Rm9yd2FyZCh0aGlzLmZvcncpO1xyXG4gICAgICAgIHRoaXMuZm9ydyA9IG5ldyBWZWN0b3IzKC10aGlzLmZvcncueCwgLXRoaXMuZm9ydy55LCAtdGhpcy5mb3J3LnopO1xyXG4gICAgICAgIGlmICghdGhpcy5fcmF5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JheSA9IG5ldyBSYXkodGhpcy5fYnVsbGV0UG9zLnRyYW5zZm9ybS5wb3NpdGlvbiwgdGhpcy5mb3J3KTtcclxuICAgICAgICAgICAgdGhpcy5faGl0ID0gbmV3IEhpdFJlc3VsdCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JheS5vcmlnaW4gPSB0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uO1xyXG4gICAgICAgICAgICB0aGlzLl9yYXkuZGlyZWN0aW9uID0gdGhpcy5mb3J3O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuZ28pIHtcclxuICAgICAgICAgICAgdGhpcy5nbyA9IEJ1bGxldENvbnRyb2xsZXIuSW5zdGFuY2UuQ3JlYXRlQnVsbGV0KCk7XHJcbiAgICAgICAgICAgIHZhciBncyA9IHRoaXMuZ28uZ2V0Q29tcG9uZW50KEJ1bGxldCk7XHJcbiAgICAgICAgICAgIGlmICghZ3MpIHRoaXMuZ29TID0gdGhpcy5nby5hZGRDb21wb25lbnQoQnVsbGV0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ucG9zaXRpb24gPSB0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uO1xyXG4gICAgICAgIHRoaXMuZ28udHJhbnNmb3JtLnJvdGF0aW9uID0gdGhpcy5fdHJhbnNmb3JtLnJvdGF0aW9uO1xyXG4gICAgICAgIC8vICB0aGlzLmdvLnRyYW5zZm9ybS5nZXRGb3J3YXJkKHRoaXMuZm9ydyk7XHJcbiAgICAgICAgdmFyIGlzUyA9IEdhbWVTY2VuZUNvbnRyb2xsZXIuSW5zdGFuY2UuZ2FtZV9zY2VuZS5waHlzaWNzU2ltdWxhdGlvbi5yYXlDYXN0KHRoaXMuX3JheSwgdGhpcy5faGl0KTtcclxuXHJcbiAgICAgICAgaWYgKGlzUykge1xyXG4gICAgICAgICAgICB2YXIgcG9pID0gdGhpcy5faGl0LnBvaW50O1xyXG4gICAgICAgICAgICB2YXIgZGlzID0gVmVjdG9yMy5kaXN0YW5jZSh0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uLCBwb2kpO1xyXG4gICAgICAgICAgICB0aGlzLmdvLnRyYW5zZm9ybS5sb2NhbFNjYWxlWiA9IGRpcztcclxuICAgICAgICAgICAgdmFyIG5vciA9IHRoaXMuX2hpdC5ub3JtYWw7XHJcbiAgICAgICAgICAgIFZlY3RvcjMuY3Jvc3ModGhpcy5mb3J3LCBub3IsIHRoaXMuX2NvcnNzKTsvL+Wkp+S6jjDlnKjlt6bmlrkg5bCP5LqOMOWcqOWPs+aWuVxyXG4gICAgICAgICAgICB2YXIgYSA9IEdhbWVfVG9vbC5nZXRSZWZsZWN0QW5nKHRoaXMuZm9ydyk7XHJcbiAgICAgICAgICAgIHZhciBhbmcgPSB0aGlzLl90cmFuc2Zvcm0ucm90YXRpb25FdWxlci5jbG9uZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9jb3Jzcy55ID49IDAgPyBhbmcueSA9IGFuZy55ICsgMiAqIGEgOiBhbmcueSA9IGFuZy55IC0gMiAqIGE7XHJcbiAgICAgICAgICAgIHRoaXMuZ29TLkNyZWF0ZVJheShwb2ksIGFuZyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ubG9jYWxTY2FsZVogPSA1MDtcclxuICAgICAgICAgICAgdGhpcy5nb1MuU2V0TmV4dE5vdEFjdGl2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAgY29uc29sZS5sb2coZ28udHJhbnNmb3JtLmxvY2FsU2NhbGVaKTtcclxuICAgIH1cclxuXHJcbiAgICBSb3RhdGlvblNlbGYocm90YTogVmVjdG9yMykge1xyXG4gICAgICAgIHRoaXMuX3RyYW5zZm9ybS5yb3RhdGUocm90YSk7XHJcbiAgICAgICAgdGhpcy5DcmVhdGVSYXkoKTtcclxuICAgIH1cclxufSIsImltcG9ydCBEaWN0aW9uYXJ5IGZyb20gXCIuLi9nYW1lX3Rvb2wvRGljdGlvbmFyeVwiO1xyXG5pbXBvcnQgVmVjdG9yMz1MYXlhLlZlY3RvcjM7XHJcbmV4cG9ydCBjbGFzcyBQb29sX01hbmFnZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IFBvb2xfTWFuYWdlcjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IFBvb2xfTWFuYWdlciB7XHJcbiAgICAgICAgcmV0dXJuIFBvb2xfTWFuYWdlci5pbnN0YW5jZSB8fCAoUG9vbF9NYW5hZ2VyLmluc3RhbmNlID0gbmV3IFBvb2xfTWFuYWdlcigpKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnBvb2xEaWMgPSBuZXcgRGljdGlvbmFyeSgpO1xyXG4gICAgICAgIHRoaXMucHJlZmFiRGljID0gbmV3IERpY3Rpb25hcnkoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+WtmOWCqOWkmuS4qlxyXG4gICAgcHJpdmF0ZSBwb29sRGljOiBEaWN0aW9uYXJ5O1xyXG5cclxuICAgIC8v6aKE6K6+5a+56LGhXHJcbiAgICBwcml2YXRlIHByZWZhYkRpYzogRGljdGlvbmFyeTtcclxuXHJcbiAgICAvLyBbIFwiQ29pblwiICBcIktleVwiICBcIlJvbGVcIiAgXCJCb2R5MVwiICAgXCJUcmFpblwiIF1cclxuICAgIHB1YmxpYyBJbml0RGF0YShuYW1lOiBzdHJpbmcsIHByZWZhYikge1xyXG4gICAgICAgIGlmIChwcmVmYWIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucHJlZmFiRGljLmhhcyhuYW1lKSlcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlZmFiRGljLnNldChuYW1lLCBwcmVmYWIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBTZXRBY3RpdmVPYmplY3QobmFtZTogc3RyaW5nLHNjYWxlPykge1xyXG4gICAgICAgIGlmICh0aGlzLnBvb2xEaWMuaGFzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvb2xEaWMuZ2V0KG5hbWUpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnBvb2xEaWMuZ2V0KG5hbWUpLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuYWN0aXZlPXRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZWZhYkRpYy5oYXMobmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY3VyT2JqID0gTGF5YS5TcHJpdGUzRC5pbnN0YW50aWF0ZSh0aGlzLnByZWZhYkRpYy5nZXQobmFtZSkpIGFzIExheWEuU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoc2NhbGUhPW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJPYmoudHJhbnNmb3JtLmxvY2FsU2NhbGU9bmV3IFZlY3RvcjMoc2NhbGUsc2NhbGUsc2NhbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjdXJPYmoubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1ck9iajtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucHJlZmFiRGljLmhhcyhuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1ck9iaiA9IExheWEuU3ByaXRlM0QuaW5zdGFudGlhdGUodGhpcy5wcmVmYWJEaWMuZ2V0KG5hbWUpKSBhcyBMYXlhLlNwcml0ZTNEO1xyXG4gICAgICAgICAgICAgICAgaWYoc2NhbGUhPW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIGN1ck9iai50cmFuc2Zvcm0ubG9jYWxTY2FsZT1uZXcgVmVjdG9yMyhzY2FsZSxzY2FsZSxzY2FsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjdXJPYmoubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VyT2JqO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8v6ZqQ6JeP5a+56LGh5YiwZGljXHJcbiAgICBwdWJsaWMgU2V0RGlzYWJsZU9iamVjdChnbzogTGF5YS5TcHJpdGUzRCkge1xyXG4gICAgICAgIGlmIChnbykgZ28uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGtleSA9IGdvLm5hbWU7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBvb2xEaWMuaGFzKGtleSkpIHtcclxuICAgICAgICAgICAgdGhpcy5wb29sRGljLnNldChrZXksIG5ldyBBcnJheTxhbnk+KCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvb2xEaWMuZ2V0KGtleSkucHVzaChnbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIERlc3RvcnlPYmooZ286TGF5YS5TcHJpdGUzRCl7XHJcbiAgICAgICAgaWYgKGdvKSBnby5kZXN0cm95KHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5bu25pe26ZqQ6JeP5a+56LGh5YiwZGljXHJcbiAgICBwdWJsaWMgU2V0RGlzYWJsZU11dGlPYmplY3QoZ286IExheWEuU3ByaXRlM0QsIHRpbWVyKSB7XHJcbiAgICAgICAgTGF5YS50aW1lci5vbmNlKHRpbWVyLCB0aGlzLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChnbykgZ28uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBnby5uYW1lO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucG9vbERpYy5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb29sRGljLnNldChrZXksIG5ldyBBcnJheTxhbnk+KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucG9vbERpYy5nZXQoa2V5KS5wdXNoKGdvKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IFNwcml0ZTNEPUxheWEuU3ByaXRlM0Q7XHJcbmltcG9ydCBUcmFuc2Zvcm0zRD1MYXlhLlRyYW5zZm9ybTNEO1xyXG5pbXBvcnQgeyBDaGVja1R5cGUgfSBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvR2FtZURlZmluZWRcIjtcclxuZXhwb3J0IGNsYXNzIFJvbGUgZXh0ZW5kcyBMYXlhLlNjcmlwdDNEIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNlbGY6U3ByaXRlM0Q7XHJcbiAgICBwcm90ZWN0ZWQgX3RyYW5zZm9ybTpUcmFuc2Zvcm0zRDtcclxuICAgIHByb3RlY3RlZCBfdHlwZTpDaGVja1R5cGU7XHJcbiAgICBwcm90ZWN0ZWQgX2J1bGxldFBvczpTcHJpdGUzRDtcclxuICAgIG9uQXdha2UoKSB7XHJcbiAgICAgICAgdGhpcy5zZWxmID0gdGhpcy5vd25lciBhcyBTcHJpdGUzRDtcclxuICAgICAgICB0aGlzLl90cmFuc2Zvcm0gPSB0aGlzLnNlbGYudHJhbnNmb3JtO1xyXG4gICAgICAgIHRoaXMuX2J1bGxldFBvcz10aGlzLnNlbGYuZ2V0Q2hpbGRCeU5hbWUoXCJidWxsdGVQb3NcIilhcyBTcHJpdGUzRDtcclxuICAgIH1cclxufSIsIlxyXG5pbXBvcnQgU3ByaXRlM0Q9TGF5YS5TcHJpdGUzRDtcclxuaW1wb3J0IHsgUGxheWVyIH0gZnJvbSBcIi4vUGxheWVyXCI7XHJcbmltcG9ydCBWZWN0b3IzPUxheWEuVmVjdG9yMztcclxuZXhwb3J0IGNsYXNzIFJvbGVDb250cm9sbGVyIHtcclxuICAgIHByaXZhdGUgc3RhdGljIGluc3Rhc25jZTogUm9sZUNvbnRyb2xsZXI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBSb2xlQ29udHJvbGxlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFzbmNlIHx8ICh0aGlzLmluc3Rhc25jZSA9IG5ldyBSb2xlQ29udHJvbGxlcigpKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIHBsYXllcjpTcHJpdGUzRDtcclxuICAgIHB1YmxpYyBwbGF5ZXJTOlBsYXllcjtcclxuICAgIHB1YmxpYyBpbml0KHJvbGU6U3ByaXRlM0Qpe1xyXG4gICAgICAgIGlmKHJvbGUpe1xyXG4gICAgICAgICAgICB0aGlzLnBsYXllcj1yb2xlO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXllclM9dGhpcy5wbGF5ZXIuYWRkQ29tcG9uZW50KFBsYXllcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIENyZWF0ZVJheSgpe1xyXG4gICAgICAgIGlmKHRoaXMucGxheWVyUyl0aGlzLnBsYXllclMuQ3JlYXRlUmF5KCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgUm9sZVJvdGF0aW9uKHJvdGE6VmVjdG9yMyl7XHJcbiAgICAgICAgaWYodGhpcy5wbGF5ZXJTKXRoaXMucGxheWVyUy5Sb3RhdGlvblNlbGYocm90YSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgU291bmRNYW5hZ2VyID0gTGF5YS5Tb3VuZE1hbmFnZXI7XHJcbmltcG9ydCB7IFdYU2RrIH0gZnJvbSBcIi4uL2dhbWVfbW9kdWxlL1dYU2RrXCI7XHJcbmV4cG9ydCBjbGFzcyBTZXR0aW5nQ29udHJvbGxlciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YXNuY2U6IFNldHRpbmdDb250cm9sbGVyO1xyXG4gICAgcHVibGljIHZpYnJhdGUgPSB0cnVlO1xyXG4gICAgcHVibGljIHNvdW5kPXRydWU7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBTZXR0aW5nQ29udHJvbGxlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFzbmNlIHx8ICh0aGlzLmluc3Rhc25jZSA9IG5ldyBTZXR0aW5nQ29udHJvbGxlcigpKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBTZXR0aW5nU291bmQodmFsdWU/OiBudW1iZXIpIHtcclxuICAgICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgICAgIFNvdW5kTWFuYWdlci5zZXRTb3VuZFZvbHVtZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIFNvdW5kTWFuYWdlci5zZXRNdXNpY1ZvbHVtZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzb3VuZENoYW5uZWw6IExheWEuU291bmRDaGFubmVsO1xyXG4gICAgcHVibGljIF9wbGF5TXVzaWMob24pIHtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgaWYgKG9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdW5kQ2hhbm5lbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvdW5kQ2hhbm5lbCA9IFNvdW5kTWFuYWdlci5wbGF5TXVzaWModGhpcy5UcmFpbkxvb3AsIDApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zb3VuZENoYW5uZWwudm9sdW1lID0gMC41XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zb3VuZENoYW5uZWwucmVzdW1lKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc291bmRDaGFubmVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvdW5kQ2hhbm5lbC5wYXVzZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBfcGxheUJhZE1vdmUoKSB7XHJcbiAgICAgICBcclxuICAgICAgICBXWFNkay5TaG9ydFZpYnJhdGUoKTtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLmJhZE1vdmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBfQ2xpY2soKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuc291bmQpcmV0dXJuO1xyXG4gICAgICAgIFNvdW5kTWFuYWdlci5wbGF5U291bmQodGhpcy5jbGljayk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIF9Db250aW51ZShvbikge1xyXG4gICAgICAgIGlmKCF0aGlzLnNvdW5kKXJldHVybjtcclxuICAgICAgICBpZiAob24pIHtcclxuICAgICAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLkNvbnRpbnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBTb3VuZE1hbmFnZXIuc3RvcFNvdW5kKHRoaXMuQ29udGludWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIF9MZXZlbENvbXAoKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuc291bmQpcmV0dXJuO1xyXG4gICAgICAgIFNvdW5kTWFuYWdlci5wbGF5U291bmQodGhpcy5MZXZlbENvbXApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBfVHJhaW5DcmFzaCgpIHtcclxuICAgICAgICBXWFNkay5Mb25nVmlicmF0ZSgpO1xyXG4gICAgICAgIGlmKCF0aGlzLnNvdW5kKXJldHVybjtcclxuICAgICAgICBTb3VuZE1hbmFnZXIucGxheVNvdW5kKHRoaXMuVHJhaW5DcmFzaCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgX1RyYWluU3RvcCgpIHtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLlRyYWluU3RvcCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgX0NvaW4oKSB7XHJcbiAgICAgICAgV1hTZGsuU2hvcnRWaWJyYXRlKCk7XHJcbiAgICAgICAgaWYoIXRoaXMuc291bmQpcmV0dXJuO1xyXG4gICAgICAgIFNvdW5kTWFuYWdlci5wbGF5U291bmQodGhpcy5Db2luKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSB0ZW1wID0gMDtcclxuICAgIHB1YmxpYyBfSnVtcCgpIHtcclxuICAgICAgICBXWFNkay5TaG9ydFZpYnJhdGUoKTtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLkp1bXBbdGhpcy50ZW1wXSk7XHJcbiAgICAgICAgdGhpcy50ZW1wKys7XHJcbiAgICAgICAgaWYgKHRoaXMudGVtcCA9PSA4KSB0aGlzLnRlbXAgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYmFkTW92ZSA9IFwicmVzL1NvdW5kL0JhZE1vdmUubXAzXCI7XHJcbiAgICBwcml2YXRlIGNsaWNrID0gXCJyZXMvU291bmQvY2xpY2subXAzXCI7XHJcbiAgICBwcml2YXRlIENvbnRpbnVlID0gXCJyZXMvU291bmQvQ29udGludWUubXAzXCI7XHJcbiAgICBwcml2YXRlIExldmVsQ29tcCA9IFwicmVzL1NvdW5kL0xldmVsQ29tcC5tcDNcIjtcclxuICAgIHByaXZhdGUgVHJhaW5DcmFzaCA9IFwicmVzL1NvdW5kL1RyYWluQ3Jhc2gubXAzXCI7XHJcbiAgICBwcml2YXRlIFRyYWluTG9vcCA9IFwicmVzL1NvdW5kL1RyYWluTG9vcC5tcDNcIjtcclxuICAgIHByaXZhdGUgVHJhaW5TdG9wID0gXCJyZXMvU291bmQvVHJhaW5TdG9wLm1wM1wiO1xyXG4gICAgcHJpdmF0ZSBDb2luPVwicmVzL1NvdW5kL0NvaW4xLm1wM1wiO1xyXG4gICAgcHJpdmF0ZSBKdW1wID1cclxuICAgICAgICBbXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjEubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjIubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjMubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjQubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjUubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjYubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjcubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjgubXAzXCIsXHJcbiAgICAgICAgXTtcclxuXHJcbn0iLCJpbXBvcnQgRGljdGlvbmFyeSBmcm9tIFwiLi4vZ2FtZV90b29sL0RpY3Rpb25hcnlcIjtcclxuaW1wb3J0IHsgZ2FtZV91aSB9IGZyb20gXCIuLi9nYW1lX3VpL2dhbWVfdWlcIjtcclxuXHJcblxyXG5leHBvcnQgZW51bSBWaWV3VHlwZSB7XHJcbiAgICBnYW1lX3VpXHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlld01hbmFnZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IFZpZXdNYW5hZ2VyO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogVmlld01hbmFnZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlIHx8ICh0aGlzLmluc3RhbmNlID0gbmV3IFZpZXdNYW5hZ2VyKCkpO1xyXG4gICAgfVxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHZpZXdEaWMgPSBbXTtcclxuICAgIHByaXZhdGUgY3VyVmlldzogYW55O1xyXG4gICAgcHJpdmF0ZSBhZGRWaWV3RGljID0gbmV3IERpY3Rpb25hcnkoKTtcclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgdGhpcy52aWV3RGljW1ZpZXdUeXBlLmdhbWVfdWldPWdhbWVfdWk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgT3BlblZpZXcodmlldzogVmlld1R5cGUsIGRhdGE/OiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJWaWV3ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJWaWV3Lk9uQ2xvc2UoKTtcclxuICAgICAgICAgICAgTGF5YS5zdGFnZS5yZW1vdmVDaGlsZCh0aGlzLmN1clZpZXcpO1xyXG4gICAgICAgICAgICAvLyAgICB2YXIgIGE6TGF5YS5TY2VuZTtcclxuICAgICAgICAgICAgLy8gICAgYS5kZXN0cm95KClcclxuICAgICAgICAgICAgdGhpcy5jdXJWaWV3LmRlc3Ryb3kodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyVmlldyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY3VyVmlldyA9IG5ldyB0aGlzLnZpZXdEaWNbdmlld107XHJcblxyXG4gICAgICAgIExheWEuc3RhZ2UuYWRkQ2hpbGQodGhpcy5jdXJWaWV3KTtcclxuICAgICAgICAvLyB0aGlzLmN1clZpZXcucmVzaXplSGFuZGVyKCk7XHJcbiAgICAgICAgdGhpcy5jdXJWaWV3Lk9uU2hvdyhkYXRhKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBnZXRDdXJWaWV3KCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VyVmlldztcclxuICAgIH1cclxuICAgIHB1YmxpYyBBZGRWaWV3KHZpZXc6IFZpZXdUeXBlLCBkYXRhPzogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWRkVmlld0RpYy5oYXModmlldykpIHJldHVybjtcclxuICAgICAgICBsZXQgdF92aWV3ID0gbmV3IHRoaXMudmlld0RpY1t2aWV3XTtcclxuICAgICAgICB0aGlzLmFkZFZpZXdEaWMuc2V0KHZpZXcsIHRfdmlldyk7XHJcbiAgICAgICAgTGF5YS5zdGFnZS5hZGRDaGlsZCh0X3ZpZXcpO1xyXG4gICAgICAgIHRfdmlldy5PblNob3coZGF0YSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgUmVtb3ZlVmlldygpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJWaWV3ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJWaWV3Lk9uQ2xvc2UoKTtcclxuICAgICAgICAgICAgTGF5YS5zdGFnZS5yZW1vdmVDaGlsZCh0aGlzLmN1clZpZXcpO1xyXG4gICAgICAgICAgICB0aGlzLmN1clZpZXcuZGVzdHJveSh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJWaWV3ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgQ2xvc2VWaWV3KHZpZXc6IFZpZXdUeXBlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFkZFZpZXdEaWMuaGFzKHZpZXcpKSByZXR1cm47XHJcbiAgICAgICAgbGV0IHRfdmlldyA9IHRoaXMuYWRkVmlld0RpYy5nZXQodmlldyk7XHJcbiAgICAgICAgdF92aWV3Lk9uQ2xvc2UoKTtcclxuICAgICAgICBMYXlhLnN0YWdlLnJlbW92ZUNoaWxkKHRfdmlldyk7XHJcbiAgICAgICAgdF92aWV3LmRlc3Ryb3kodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5hZGRWaWV3RGljLmRlbGV0ZSh2aWV3KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgY3VyTWFzazogYW55O1xyXG4gICAgcHVibGljIE9wZW5NYXNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1ck1hc2sgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAvLyAgdGhpcy5jdXJNYXNrID0gbmV3IE1hc2tfdWkoKTtcclxuICAgICAgICBpZiAoIXRoaXMuY3VyTWFzaykgcmV0dXJuO1xyXG4gICAgICAgIExheWEuc3RhZ2UuYWRkQ2hpbGQodGhpcy5jdXJNYXNrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBDbG9zZU1hc2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VyTWFzayAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyTWFzay5PbkNsb3NlKCk7XHJcbiAgICAgICAgICAgIExheWEuc3RhZ2UucmVtb3ZlQ2hpbGQodGhpcy5jdXJNYXNrKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJNYXNrLmRlc3Ryb3kodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyTWFzayA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBFdmVudE1hbmFnZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZGlzaXNwYXRjaGVyOiBMYXlhLkV2ZW50RGlzcGF0Y2hlcjtcclxuICAgIHByaXZhdGUgc3RhdGljIGdldCBEaXNpc3BhdGNoZXIoKTogTGF5YS5FdmVudERpc3BhdGNoZXIge1xyXG4gICAgICAgIHJldHVybiBFdmVudE1hbmFnZXIuZGlzaXNwYXRjaGVyIHx8IChFdmVudE1hbmFnZXIuZGlzaXNwYXRjaGVyID0gbmV3IExheWEuRXZlbnREaXNwYXRjaGVyKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgb24odHlwZTogc3RyaW5nLCBjYWxsOiBhbnksIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuRGlzaXNwYXRjaGVyLm9uKHR5cGUsIGNhbGwsIGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBvZmYodHlwZTogc3RyaW5nLCBjYWxsOiBhbnksIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuRGlzaXNwYXRjaGVyLm9mZih0eXBlLCBjYWxsLCBkYXRhKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZXZlbnQodHlwZTogc3RyaW5nLCBkYXRhOiBhbnkgPSBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5EaXNpc3BhdGNoZXIuZXZlbnQodHlwZSwgZGF0YSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgVXNlck1vZGVsIGZyb20gXCIuL1VzZXJNb2RlbFwiO1xyXG5pbXBvcnQgeyBNYWluIH0gZnJvbSBcIi4uL01haW5cIjtcclxuaW1wb3J0IHsgRXZlbnRNYW5hZ2VyIH0gZnJvbSBcIi4vRXZlbnRNYW5hZ2VyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRllIRF9TZGsge1xyXG4gICAgcHVibGljIHN0YXRpYyBBZF9DbGlja1R5cGUgPSB7XHJcbiAgICAgICAgVmlkZW86IFwidmlkZW9fY2xpY2tcIixcclxuICAgICAgICBXYXRjaDogXCJ3YXRjaFwiLFxyXG4gICAgICAgIFNoYXJlOiBcInNoYXJlXCIsXHJcbiAgICAgICAgQmFubmVyOiBcImJhbm5lclwiLFxyXG4gICAgICAgIFB1c2g6IFwicHVzaFwiXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBwdXNoRGF0YSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgb3BlbmlkOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBpc0hhdmVEYXRlID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBTaG93QWQgPSBcIlNob3dBZFwiO1xyXG4gICAgLy/liJ3lp4vljJZzZGtcclxuICAgIHB1YmxpYyBzdGF0aWMgSW5pdFNkaygpIHtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkuc3RhcnRTZGsoKTtcclxuICAgICAgICBGWUhEX1Nkay5Vc2VySW5mb0F1dGgoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+eUqOaIt+aOiOadg1xyXG4gICAgcHVibGljIHN0YXRpYyBVc2VySW5mb0F1dGgoKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkuZ2V0RnloZFVzZXJJbmZvKG51bGwsIGZhbHNlLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIuaXoOaOiOadg+WbnuiwgzpcIiArIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICAgICAgaWYgKGRhdGEucmVzdWx0LnVzZXIpIHtcclxuICAgICAgICAgICAgICAgIEZZSERfU2RrLm9wZW5pZCA9IGRhdGEucmVzdWx0LnVzZXIub3BlbmlkO1xyXG4gICAgICAgICAgICAgICAgRllIRF9TZGsuQXV0aEluZm8oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgQXV0aEluZm8oKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSB7XHJcbiAgICAgICAgICAgIG9wZW5pZDogRllIRF9TZGsub3BlbmlkLFxyXG4gICAgICAgIH1cclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkubG9naW5EYXRhKGFyZ3MsIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5o6I5p2D5LiK5oql5Zue6LCDOlwiICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgICBGWUhEX1Nkay5WYWx1ZVVzZXIoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc3RhdGljIFZhbHVlVXNlcigpIHtcclxuICAgICAgICB2YXIgYXJncyA9IHtcclxuICAgICAgICAgICAgb3BlbmlkOiBGWUhEX1Nkay5vcGVuaWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cuc2RrLmdldEZ5aGQoKS52YWx1ZXVzZXIoYXJncywgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLmnInmlYjnlKjmiLfkuIrmiqU6XCIgKyBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy/liJvop5LoibJcclxuICAgIHB1YmxpYyBzdGF0aWMgUm9sZURhdGEoKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICB2YXIgYXJncyA9IHtcclxuICAgICAgICAgICAgb3BlbmlkOiBGWUhEX1Nkay5vcGVuaWQsXHJcbiAgICAgICAgICAgIHJvbGVfaWQ6IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC51c2VyaWQsXHJcbiAgICAgICAgICAgIGNyZWF0ZV90aW1lOiBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwuU2VydmVyVGltZVxyXG4gICAgICAgIH1cclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkucm9sZURhdGEoYXJncywgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLliJvlu7rop5LoibI6XCIgKyBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgICAgIEZZSERfU2RrLkxvZ2luKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvL+eZu+W9leS/oeaBr+S4iuaKpVxyXG4gICAgcHVibGljIHN0YXRpYyBMb2dpbigpIHtcclxuICAgICAgICBpZiAoIU1haW4uSXNXeCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBvcGVuaWQgPSBGWUhEX1Nkay5vcGVuaWQgPyBGWUhEX1Nkay5vcGVuaWQgOiBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwub3BlbmlkO1xyXG4gICAgICAgIHZhciBhcmdzID0ge1xyXG4gICAgICAgICAgICBvcGVuaWQ6IG9wZW5pZCxcclxuICAgICAgICAgICAgcm9sZV9pZDogVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLnVzZXJpZCxcclxuICAgICAgICAgICAgY3JlYXRlX3RpbWU6IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC5TZXJ2ZXJUaW1lLnRvU3RyaW5nKClcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCLnmbvlvZXlj4LmlbA6XCIgKyBKU09OLnN0cmluZ2lmeShhcmdzKSk7XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy5zZGsuZ2V0RnloZCgpLnVwbG9naW5EYXRhKGFyZ3MsIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi55m75b2V57uT5p6cOlwiICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgICAvLyBGWUhEX1Nkay5QdXNoRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8v54K55Ye75LqL5Lu25LiK5oqlXHJcbiAgICBwdWJsaWMgc3RhdGljIENsaWNrQWQoYWRfdHlwZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICB2YXIgcGFyYW0gPSB7XHJcbiAgICAgICAgICAgIGFkX3R5cGU6IGFkX3R5cGUsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi54K55Ye75Y+C5pWwOlwiICsgcGFyYW0pO1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cuc2RrLmdldEZ5aGQoKS5hZHZlcnRpc2VtZW50KHBhcmFtLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIueCueWHu+e7k+aenDpcIiArIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFB1c2hEYXRhKCkge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcbiAgICAgICAgdmFyIHBhcmFtID0ge307XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy5zZGsuZ2V0RnloZCgpLnNoYXJlUmVjb21tZW5kKHBhcmFtLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBGWUhEX1Nkay5wdXNoRGF0YSA9IGRhdGEuZGF0YTtcclxuICAgICAgICAgICAgICAgIEZZSERfU2RrLnB1c2hEYXRhLnNvcnQoRllIRF9TZGsuTGlzdFNvcnQpO1xyXG4gICAgICAgICAgICAgICAgRXZlbnRNYW5hZ2VyLmV2ZW50KEZZSERfU2RrLlNob3dBZCk7XHJcbiAgICAgICAgICAgICAgICBGWUhEX1Nkay5pc0hhdmVEYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIuiOt+WPluS6kuaOqOS/oeaBrzpcIiArIEpTT04uc3RyaW5naWZ5KEZZSERfU2RrLnB1c2hEYXRhKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIFNob3dIdVR1aUp1bXAoZGF0YSkge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcbiAgICAgICAgaWYgKGRhdGEuanVtcF90eXBlID09IDIpIC8v5LqM57u056CB6Lez6L2s5pa55rOVXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LnByZXZpZXdJbWFnZSh7IGN1cnJlbnQ6IGRhdGEucXJjb2RlLCB1cmxzOiBbZGF0YS5xcmNvZGVdIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChkYXRhLmp1bXBfdHlwZSA9PSAxKSAvL+ebtOi3s+aWueazlVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5uYXZpZ2F0ZVRvTWluaVByb2dyYW0oe1xyXG4gICAgICAgICAgICAgICAgYXBwSWQ6IGRhdGEudG9fYXBwaWQsXHJcbiAgICAgICAgICAgICAgICBwYXRoOiBkYXRhLmp1bXBfcGF0aCxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3MocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5omT5byA5oiQ5YqfXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLkuIrmiqXmiJDlip86XCIgKyBKU09OLnN0cmluZ2lmeShyZXMpKTtcclxuICAgICAgICAgICAgICAgICAgICBGWUhEX1Nkay5QdXNoQ2xpY2soZGF0YS50b19hcHBpZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGRhdGEuanVtcF90eXBlID09IDApLy/lubPlj7Dot7Povazmlrnms5VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3gubmF2aWdhdGVUb01pbmlQcm9ncmFtKHtcclxuICAgICAgICAgICAgICAgIGFwcElkOiBkYXRhLnBsYXRmb3JtX2FwcGlkLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogZGF0YS5qdW1wX3BhdGgsXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzKHJlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOaJk+W8gOaIkOWKn1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5LiK5oql5oiQ5YqfOlwiICsgSlNPTi5zdHJpbmdpZnkocmVzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgRllIRF9TZGsuUHVzaENsaWNrKGRhdGEudG9fYXBwaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgUHVzaENsaWNrKHRvX2FwcGlkKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICB2YXIgcGFyYW0gPSB7XHJcbiAgICAgICAgICAgIG9wZW5pZDogRllIRF9TZGsub3BlbmlkLFxyXG4gICAgICAgICAgICB0b19hcHBpZDogdG9fYXBwaWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cuc2RrLmdldEZ5aGQoKS5zaGFyZVBsYXkocGFyYW0sIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi54K55Ye75LiK5oql57uT5p6cOlwiICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIExpc3RTb3J0KGEsIGIpOiBudW1iZXIge1xyXG4gICAgICAgIGlmIChOdW1iZXIoYVtcInBhbmVsXCJdKSA8IE51bWJlcihiW1wicGFuZWxcIl0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE51bWJlcihhW1wicGFuZWxcIl0pID09IE51bWJlcihiW1wicGFuZWxcIl0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTnVtYmVyKGFbXCJwYW5lbFwiXSkgPiBOdW1iZXIoYltcInBhbmVsXCJdKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FtZURlZmluZWQge1xyXG4gICAgcHVibGljIHN0YXRpYyBwbGF5ZXJfbGF5ZXI9OTtcclxuICAgIHB1YmxpYyBzdGF0aWMgd2FsbF9sYXllcj04O1xyXG4gICAgcHVibGljIHN0YXRpYyBtb3N0ZXJfbGF5ZXI9MTA7XHJcbiAgICBwdWJsaWMgc3RhdGljIGJvc3NfbGF5ZXI9MTE7XHJcbiAgICBwdWJsaWMgc3RhdGljIHRyZWVfbGF5ZXI9MTI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGJvbWJfbGF5ZXI9MTM7XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcG9vbE5hbWU9e1xyXG4gICAgICAgIGJ1bGxldDpcImJ1bGxldFwiXHJcbiAgICB9XHJcbn1cclxuZXhwb3J0IGVudW0gQ2hlY2tUeXBle1xyXG4gICAgUGxheWVyLFxyXG4gICAgTW9zdGVyLFxyXG4gICAgQm9zcyxcclxuICAgIEJvbWIsXHJcbiAgICBUcmVlXHJcbn1cclxuIiwiXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlc291cmNlTG9hZCB7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBMb2FkUmVzb3VyY2UocGF0aDpBcnJheTxhbnk+LGNvbXBsZXQ/OkZ1bmN0aW9uKXtcclxuICAgICAgICBMYXlhLmxvYWRlci5yZXRyeU51bT0yO1xyXG4gICAgICAgIExheWEubG9hZGVyLm1heExvYWRlcj0zO1xyXG4gICAgICAgIExheWEubG9hZGVyLnJldHJ5RGVsYXk9MTAwO1xyXG4gICAgICAgIExheWEubG9hZGVyLmNyZWF0ZShwYXRoLG5ldyBMYXlhLkhhbmRsZXIodGhpcyxjb21wbGV0KSk7XHJcbiAgICAgICAgTGF5YS5sb2FkZXIub24oTGF5YS5FdmVudC5FUlJPUix0aGlzLChkYXRhKT0+e1xyXG4gICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGErXCIg6LWE5rqQ5Yqg6L295aSx6LSlXCIpO1xyXG4gICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgeyBXWFNkayB9IGZyb20gXCIuL1dYU2RrXCI7XHJcbmltcG9ydCB7IEZZSERfU2RrIH0gZnJvbSBcIi4vRllIRF9TZGtcIjtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgU2hhcmVNb2R1bGUge1xyXG4gICAgcHVibGljIHN0YXRpYyBJc1NoYXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBHb1NoYXJlKGNhbGxCYWNrKTogdm9pZCB7XHJcbiAgICAgICAgU2hhcmVNb2R1bGUuU2hhcmVUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCLliIbkuqvngrnlh7vml7bpl7Q9XCIgKyBTaGFyZU1vZHVsZS5TaGFyZVRpbWUpO1xyXG4gICAgICAgIFNoYXJlTW9kdWxlLklzU2hhcmluZyA9IHRydWU7XHJcbiAgICAgICAgU2hhcmVNb2R1bGUuY2FsbGJhY2sgPSBjYWxsQmFjaztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgU2hhcmVUaW1lOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgc3RhdGljIE9uU2hvd0hhbmRsZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdy53eCkge1xyXG4gICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4Lm9uU2hvdyhmdW5jdGlvbiAob3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm9uc2hvdyBzaGFyZSBzdGFydFwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi6L+b5YWl5b6u5L+hXCIpO1xyXG4gICAgICAgICAgICAgICAgLy9MYXlhLnRpbWVyLnNjYWxlPTE7XHJcbiAgICAgICAgICAgICAgICBpZiAoU2hhcmVNb2R1bGUuSXNTaGFyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgU2hhcmVNb2R1bGUuSXNTaGFyaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuWIhuS6q+WbnuWIsOa4uOaIj+aXtumXtFwiICsgdGltZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHdhaXQgPSAodGltZSAtIFNoYXJlTW9kdWxlLlNoYXJlVGltZSkgLyAxMDAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5YiG5Lqr5YGc55WZ5pe26Ze05Li677yaXCIgKyB3YWl0KTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2hhcmVTdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlYWxTdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdhaXQgPj0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTWF0aC5yYW5kb20oKSA8PSAwLjUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlU3VjY2VzcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWUhEX1Nkay5DbGlja0FkKEZZSERfU2RrLkFkX0NsaWNrVHlwZS5TaGFyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVNoYXJlTW9kdWxlLmNhbGxiYWNrKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZU1vZHVsZS5jYWxsYmFjayh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guc2hvd1RvYXN0KHsgdGl0bGU6IFwi5YiG5Lqr5oiQ5Yqf77yBXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVNoYXJlTW9kdWxlLmNhbGxiYWNrKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTWF0aC5yYW5kb20oKSA8PSAwLjUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LnNob3dUb2FzdCh7IHRpdGxlOiBcIuWIhuS6q+Wksei0pe+8gVwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXWFNkay5TaG93VG9hc3QoXCLor7fliIbkuqvliLDkuI3lkIznvqReLV5cIiwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhcmVNb2R1bGUuY2FsbGJhY2soZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIGNhbGxiYWNrO1xyXG59IiwiaW1wb3J0IHsgTWFpbiB9IGZyb20gXCIuLi9NYWluXCI7XHJcbmltcG9ydCBOZXRNYW5hZ2VyIGZyb20gXCIuL05ldE1hbmFnZXJcIjtcclxuaW1wb3J0IHsgRGF0ZUNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vZ2FtZV9sb2dpYy9EYXRlQ29udHJvbGxlclwiO1xyXG5cclxuXHJcbmV4cG9ydCBlbnVtIFVzZXJDb25maWdOYW1lIHtcclxuICAgIHRyYWluLCBzaWduLCByZXdhcmRzXHJcbn1cclxuLy/nlKjmiLfkv6Hmga/lsZ7mgKdcclxuZXhwb3J0IGVudW0gVXNlckF0dHIge1xyXG4gICAgZXF1aXBfdHJhaW4sIHVzZXJfaWQsIHN0YWdlLCBnZXRfdHJhaW5zLCBtb25leSwgcHJvZ3Jlc3NfdHJhaW5zXHJcbn1cclxuZXhwb3J0IGNsYXNzIE5ldFVzZXJNb2RlbCB7XHJcbiAgICBwdWJsaWMgbV91c2VyX2Jhc2U6IE9iamVjdDtcclxuICAgIHB1YmxpYyBtX3VzZXJfaW52aXRlOiBPYmplY3Q7XHJcbiAgICBwdWJsaWMgbV91c2VyX2xvdHRlcnk6IG9iamVjdFxyXG4gICAgcHJpdmF0ZSBsb2dpblNldmVyVGltZTogbnVtYmVyID0gMDtcclxuICAgIHB1YmxpYyBtX3VzZXJfdHJlYXN1cmU6IG9iamVjdDtcclxuICAgIHB1YmxpYyBtX3VzZXJfYWNoaWV2ZW1lbnQ6IG9iamVjdDtcclxuICAgIHB1YmxpYyBtX3VzZXJfc2lnbjogT2JqZWN0O1xyXG4gICAgcHJpdmF0ZSBtX3VzZXJfYXJlbmE6IE9iamVjdDtcclxuICAgIHByaXZhdGUgbG9jYWxUaW1lOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbmlja25hbWU6IHN0cmluZztcclxuICAgIHB1YmxpYyBvcGVuaWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyB1c2VyaWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBtX3Rva2VuOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbV9jb25maWdzOiBPYmplY3Q7XHJcbiAgICBwdWJsaWMgbV9hcHBfc2V0dGluZzogT2JqZWN0O1xyXG4gICAgcHVibGljIG1fdXNlcjogT2JqZWN0O1xyXG4gICAgY29uc3RydWN0b3IoX3Rva2VuOiBzdHJpbmcsIF9jb25maWc6IE9iamVjdCwgX2FwcFNldHRpbmc6IE9iamVjdCwgX3VzZXI6IE9iamVjdCwgX3VzZXJiYXNlOiBPYmplY3QsIF91c2VJbnZpdGU6IE9iamVjdCwgX3VzZXJfbG90dGVyeTogT2JqZWN0LCBfdXNlcl90cmVhc3VyZTogT2JqZWN0LCB0LCBfdXNlcl9hY2hpZXZlbWVudCwgX3VzZXJfc2lnbiwgX3VzZXJfYXJlbmEpIHtcclxuICAgICAgICB0aGlzLmxvY2FsVGltZSA9IExheWEudGltZXIuY3VyclRpbWVyO1xyXG4gICAgICAgIHRoaXMubG9naW5TZXZlclRpbWUgPSB0O1xyXG4gICAgICAgIHRoaXMubV90b2tlbiA9IF90b2tlbjtcclxuICAgICAgICB0aGlzLm1fY29uZmlncyA9IF9jb25maWc7XHJcbiAgICAgICAgdGhpcy5tX2FwcF9zZXR0aW5nID0gX2FwcFNldHRpbmc7XHJcbiAgICAgICAgdGhpcy5tX3VzZXIgPSBfdXNlcjtcclxuICAgICAgICB0aGlzLm1fdXNlcl9iYXNlID0gX3VzZXJiYXNlO1xyXG4gICAgICAgIHRoaXMubV91c2VyX2ludml0ZSA9IF91c2VJbnZpdGU7XHJcbiAgICAgICAgdGhpcy5tX3VzZXJfbG90dGVyeSA9IF91c2VyX2xvdHRlcnk7XHJcbiAgICAgICAgdGhpcy5tX3VzZXJfdHJlYXN1cmUgPSBfdXNlcl90cmVhc3VyZTtcclxuICAgICAgICB0aGlzLm1fdXNlcl9hY2hpZXZlbWVudCA9IF91c2VyX2FjaGlldmVtZW50O1xyXG4gICAgICAgIHRoaXMubV91c2VyX3NpZ24gPSBfdXNlcl9zaWduO1xyXG4gICAgICAgIHRoaXMubV91c2VyX2FyZW5hID0gX3VzZXJfYXJlbmE7XHJcbiAgICAgICAgdGhpcy51c2VyaWQgPSB0aGlzLm1fdXNlcltcInVzZXJfaWRcIl07XHJcbiAgICAgICAgdGhpcy5vcGVuaWQgPSB0aGlzLm1fdXNlcl9iYXNlW1wib3BlbmlkXCJdO1xyXG4gICAgICAgIHRoaXMubmlja25hbWUgPSB0aGlzLm1fdXNlcl9iYXNlW1wibmlja25hbWVcIl07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0IENmZyhjZmcpIHtcclxuICAgICAgICB0aGlzLm1fY29uZmlncyA9IGNmZztcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgc2hhcmV0aXRsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLm1fYXBwX3NldHRpbmdbXCJzaGFyZXRpdGxlXCJdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1fYXBwX3NldHRpbmdbXCJzaGFyZXRpdGxlXCJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgc2hhcmVpbWFnZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLm1fYXBwX3NldHRpbmdbXCJzaGFyZWltYWdlXCJdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1fYXBwX3NldHRpbmdbXCJzaGFyZWltYWdlXCJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBHZXRDZmcodHlwZTogVXNlckNvbmZpZ05hbWUpOiBhbnkge1xyXG4gICAgICAgIHZhciBfdHlwZSA9IFVzZXJDb25maWdOYW1lW3R5cGVdO1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1fY29uZmlnc1tfdHlwZV07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgR2V0VXNlckF0dHIoX2F0dHI6IFVzZXJBdHRyKSB7XHJcbiAgICAgICAgdmFyIGF0dHIgPSBVc2VyQXR0cltfYXR0cl07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubV91c2VyW2F0dHJdO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBTZXJ2ZXJUaW1lKCk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IHRpbWUgPSBMYXlhLnRpbWVyLmN1cnJUaW1lcjtcclxuICAgICAgICBsZXQgc3RpbWUgPSB0aGlzLmxvZ2luU2V2ZXJUaW1lICsgTWF0aC5jZWlsKCh0aW1lIC0gdGhpcy5sb2NhbFRpbWUpIC8gMTAwMCk7XHJcbiAgICAgICAgcmV0dXJuIHN0aW1lO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBHdWlkZUxldmVsKCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMubV9hcHBfc2V0dGluZ1tcIkd1aWRlTGV2ZWxcIl0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0aGlzLm1fYXBwX3NldHRpbmdbXCJHdWlkZUxldmVsXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBCYW5uZXJNb3ZlVGltZSgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLm1fYXBwX3NldHRpbmdbXCJCYW5uZXJNb3ZlVGltZVwiXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMubV9hcHBfc2V0dGluZ1tcIkJhbm5lck1vdmVUaW1lXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IEhhdmVCYW5uZXIoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5tX2FwcF9zZXR0aW5nW1wiSGF2ZUJhbm5lclwiXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMubV9hcHBfc2V0dGluZ1tcIkhhdmVCYW5uZXJcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgSXNTaGFyZSgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLm1fYXBwX3NldHRpbmdbXCJJc1NoYXJlXCJdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGhpcy5tX2FwcF9zZXR0aW5nW1wiSXNTaGFyZVwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBCdG5DYW5Nb3ZlKCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMubV9hcHBfc2V0dGluZ1tcIkJ0bkNhbk1vdmVcIl0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0aGlzLm1fYXBwX3NldHRpbmdbXCJCdG5DYW5Nb3ZlXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IElTU2hhcmVUaGVuVmlkZW8oKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5tX2FwcF9zZXR0aW5nW1wiSVNTaGFyZVRoZW5WaWRlb1wiXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMubV9hcHBfc2V0dGluZ1tcIklTU2hhcmVUaGVuVmlkZW9cIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgT3BlblNjZW5lVmFsdWUoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5tX2FwcF9zZXR0aW5nW1wiT3BlblNjZW5lVmFsdWVcIl0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0aGlzLm1fYXBwX3NldHRpbmdbXCJPcGVuU2NlbmVWYWx1ZVwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgSXNPcGVuVHJ5T3V0KCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMubV9hcHBfc2V0dGluZ1tcIklzT3BlblRyeU91dFwiXSkge1xyXG4gICAgICAgICAgICB2YXIgbnVtID0gTnVtYmVyKHRoaXMubV9hcHBfc2V0dGluZ1tcIklzT3BlblRyeU91dFwiXSk7XHJcbiAgICAgICAgICAgIGlmIChudW0gPT0gMCkgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpIDwgbnVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHB1YmxpYyBKdW5kZ0NmZ0ZvckNkbihjYWxsYmFsbDogRnVuY3Rpb24pIHtcclxuICAgIC8vICAgICB0aGlzLm1fY29uZmlncyA9IG51bGw7XHJcbiAgICAvLyAgICAgaWYgKHRoaXMubV9jb25maWdzKSB7XHJcbiAgICAvLyAgICAgICAgIGNhbGxiYWxsKCk7XHJcbiAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgdmFyIGNmZyA9IExheWEuTG9jYWxTdG9yYWdlLmdldEpTT04oTWFpbi5jZmcpO1xyXG4gICAgLy8gICAgICAgICBpZiAoY2ZnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoY2ZnLlZFUiA9PSB0aGlzLkdldENmZ1Zlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMubV9jb25maWdzID0gY2ZnO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2Zn5a2Y5ZyoXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNhbGxiYWxsKCk7XHJcbiAgICAvLyAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2Zn5a2Y5Zyo5L2G5piv6L+H5pyf5LqGXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTWFpbi5jZmcpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIExheWEubG9hZGVyLmxvYWQoXCJjZmcuanNvblwiLCBuZXcgTGF5YS5IYW5kbGVyKHRoaXMsIChkYXRhKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2Zn5LiL6L295a6M5oiQXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgTGF5YS5Mb2NhbFN0b3JhZ2Uuc2V0SlNPTihNYWluLmNmZywgZGF0YSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5tX2NvbmZpZ3MgPSBkYXRhO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjYWxsYmFsbCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0pKTtcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgICAgIExheWEubG9hZGVyLmxvYWQoXCJjZmcuanNvblwiLCBuZXcgTGF5YS5IYW5kbGVyKHRoaXMsIChkYXRhKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjZmfkuIvovb3lrozmiJBcIik7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgTGF5YS5Mb2NhbFN0b3JhZ2Uuc2V0SlNPTihNYWluLmNmZywgZGF0YSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMubV9jb25maWdzID0gZGF0YTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjYWxsYmFsbCgpO1xyXG4gICAgLy8gICAgICAgICAgICAgfSkpO1xyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIHB1YmxpYyBKdW5kZ0NmZyh2ZXIsIGNhbGxiYWxsOiBGdW5jdGlvbikge1xyXG4gICAgLy8gICAgIHRoaXMubV9jb25maWdzID0gbnVsbDtcclxuICAgIC8vICAgICBpZiAodGhpcy5tX2NvbmZpZ3MpIHtcclxuICAgIC8vICAgICAgICAgY2FsbGJhbGwodHJ1ZSk7XHJcbiAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgdmFyIGNmZyA9IExheWEuTG9jYWxTdG9yYWdlLmdldEpTT04oTWFpbi5DRkcpO1xyXG4gICAgLy8gICAgICAgICBpZiAoY2ZnKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoY2ZnLlZFUiA9PSB2ZXIpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLkNmZyA9IGNmZztcclxuXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLlt7Lnu4/mi6XmnIks5LiN55So5pu05pawXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIERhdGVDb250cm9sbGVyLlNldENmZygpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNhbGxiYWxsKHRydWUpO1xyXG4gICAgLy8gICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNmZ+WtmOWcqOS9huaYr+i/h+acn+S6hlwiKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBMYXlhLkxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKE1haW4uQ0ZHKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBOZXRNYW5hZ2VyLkluc3RhbmNlLlBvc3RDZmdSZXF1ZXN0KChkYXRhKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGRhdGEuVkVSID0gdmVyO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBMYXlhLkxvY2FsU3RvcmFnZS5zZXRKU09OKE1haW4uQ0ZHLCBkYXRhKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5DZmcgPSBkYXRhO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBEYXRlQ29udHJvbGxlci5TZXRDZmcoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY2FsbGJhbGwodHJ1ZSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfSwgKGRhdGEpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLphY3nva7ojrflj5blpLHotKVcIiArIGRhdGEpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjYWxsYmFsbChmYWxzZSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9KTtcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5pys5Zyw5rKh5pyJY2ZnXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgTmV0TWFuYWdlci5JbnN0YW5jZS5Qb3N0Q2ZnUmVxdWVzdCgoZGF0YSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2ZnXCIgKyBkYXRhKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBkYXRhLlZFUiA9IHZlcjtcclxuICAgIC8vICAgICAgICAgICAgICAgICBMYXlhLkxvY2FsU3RvcmFnZS5zZXRKU09OKE1haW4uQ0ZHLCBkYXRhKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLkNmZyA9IGRhdGE7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgRGF0ZUNvbnRyb2xsZXIuU2V0Q2ZnKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY2FsbGJhbGwodHJ1ZSk7XHJcbiAgICAvLyAgICAgICAgICAgICB9LCAoZGF0YSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi6YWN572u6I635Y+W5aSx6LSlXCIgKyBkYXRhKTtcclxuICAgIC8vICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVc2VyTW9kZWwge1xyXG4gICAgcHVibGljIGdldCBDdXJNb2RlbCgpOiBOZXRVc2VyTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1ck1vZGVsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U7XHJcbiAgICBwdWJsaWMgbV9jb2RlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbV9nZW5kZXI6IG51bWJlcjtcclxuICAgIHB1YmxpYyBtX2NvdW50cnk6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKGNvZGU6IHN0cmluZywgbmlja25hbWU6IHN0cmluZywgYXZhdGFyOiBzdHJpbmcsIGdlbmRlcjogbnVtYmVyLCBjb3VudHJ5OiBzdHJpbmcsIHByb3ZpbmNlOiBzdHJpbmcsIGNpdHk6IHN0cmluZywgZGV2aWNlOiBzdHJpbmcsIHNoYXJlX2lkOiBzdHJpbmcsIHNjZW5lOiBzdHJpbmcpIHtcclxuICAgICAgICBVc2VyTW9kZWwuaW5zdGFuY2UgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMubV9jb2RlID0gY29kZTtcclxuICAgICAgICB0aGlzLm1fbmlja25hbWUgPSBuaWNrbmFtZSA/IG5pY2tuYW1lIDogXCLmuLjlrqJcIjtcclxuICAgICAgICB0aGlzLm1fYXZhdGFyID0gYXZhdGFyID8gYXZhdGFyIDogXCJcIjtcclxuICAgICAgICB0aGlzLm1fZ2VuZGVyID0gZ2VuZGVyID8gZ2VuZGVyIDogMDtcclxuICAgICAgICB0aGlzLm1fY2l0eSA9IGNpdHkgPyBjaXR5IDogXCJcIjtcclxuICAgICAgICB0aGlzLm1fZGV2aWNlID0gZGV2aWNlID8gZGV2aWNlIDogXCJcIjtcclxuICAgICAgICB0aGlzLm1fc2hhcmVfaWQgPSBzaGFyZV9pZCA/IHNoYXJlX2lkIDogXCJcIjtcclxuICAgICAgICB0aGlzLm1fc2NlbmUgPSBzY2VuZSA/IHNjZW5lIDogXCJcIjtcclxuICAgICAgICB0aGlzLm1fY291bnRyeSA9IGNvdW50cnkgPyBjb3VudHJ5IDogXCJcIjtcclxuICAgICAgICB0aGlzLm1fcHJvdmluY2UgPSBwcm92aW5jZSA/IHByb3ZpbmNlIDogXCJcIjtcclxuICAgIH1cclxuICAgIHB1YmxpYyBtX2NpdHk6IHN0cmluZztcclxuICAgIHB1YmxpYyBtX2RldmljZTogc3RyaW5nO1xyXG4gICAgcHVibGljIG1fc2hhcmVfaWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBtX3NjZW5lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBVc2VyTW9kZWwge1xyXG4gICAgICAgIGlmIChVc2VyTW9kZWwuaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFVzZXJNb2RlbC5pbnN0YW5jZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIFVzZXJNb2RlbC5pbnN0YW5jZSA9IG5ldyBVc2VyTW9kZWwoXCIxMVwiLCBcIua4uOWuolwiLCBcIlwiLCBudWxsLCBcIlwiLCBcIlwiLCBcIlwiLCBcImlwaG9uZTZzXCIsIFwiXCIsIFwiXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gVXNlck1vZGVsLmluc3RhbmNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBtX3Byb3ZpbmNlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbV9uaWNrbmFtZTogc3RyaW5nO1xyXG4gICAgcHVibGljIG1fYXZhdGFyOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGN1ck1vZGVsOiBOZXRVc2VyTW9kZWw7XHJcbiAgICBwdWJsaWMgU2V0VXNlck1vZGVsKF9tb2RlbDogTmV0VXNlck1vZGVsKSB7XHJcbiAgICAgICAgdGhpcy5jdXJNb2RlbCA9IF9tb2RlbDtcclxuICAgIH1cclxuXHJcblxyXG59XHJcbiIsImltcG9ydCB7IE1haW4gfSBmcm9tIFwiLi4vTWFpblwiO1xyXG5pbXBvcnQgVmlld01hbmFnZXIgZnJvbSBcIi4uL2dhbWVfbG9naWMvVmlld01hbmFnZXJcIjtcclxuaW1wb3J0IHsgU2V0dGluZ0NvbnRyb2xsZXIgfSBmcm9tIFwiLi4vZ2FtZV9sb2dpYy9TZXR0aW5nQ29udHJvbGxlclwiO1xyXG5pbXBvcnQgeyBTaGFyZU1vZHVsZSB9IGZyb20gXCIuL1NoYXJlTW9kdWxlXCI7XHJcbmltcG9ydCBVc2VyTW9kZWwgZnJvbSBcIi4vVXNlck1vZGVsXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgV1hTZGsge1xyXG4gICAgcHVibGljIHNldFNoYXJlSWQodGlkKSB7XHJcbiAgICAgICAgaWYgKHRpZCAhPSBcIlwiICYmIHRpZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hhcmVJZCA9IHRpZDtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJbTE9HXTogc2V0U2hhcmVPcGVuSWQudGlkPVwiLCB0aGlzLnNoYXJlSWQpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IFdYU2RrO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogV1hTZGsge1xyXG4gICAgICAgIHJldHVybiBXWFNkay5pbnN0YW5jZSB8fCAoV1hTZGsuaW5zdGFuY2UgPSBuZXcgV1hTZGsoKSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIExvZGluaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZ2V0IGdldFNoYXJlSWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hhcmVJZDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgU2hhcmVTY2VuZShzY2VuZVMpIHtcclxuICAgICAgICBpZiAoc2NlbmVTICE9IFwiXCIgJiYgc2NlbmVTICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5zaGFyZVNjZW5lID0gc2NlbmVTO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBpbml0KGNiOiBhbnkpIHtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LnNob3dTaGFyZU1lbnUoe1xyXG4gICAgICAgICAgICB3aXRoU2hhcmVUaWNrZXQ6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICAvL3RoaXMuc2hlemhpU2hhcmVNZXNzYWdlKG51bGwsIG51bGwpO1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3gub25TaG93KGZ1bmN0aW9uIChvcHRpb24pIHtcclxuICAgICAgICAgICAgdmFyIHNoYXJlVGlja2V0ID0gb3B0aW9uLnNoYXJlVGlja2V0O1xyXG4gICAgICAgICAgICB2YXIgc2hhcmVpZCA9IG9wdGlvbi5xdWVyeS5zaGFyZWlkO1xyXG4gICAgICAgICAgICB2YXIgc2NlbmUgPSBkZWNvZGVVUklDb21wb25lbnQob3B0aW9uLnF1ZXJ5LnNjZW5lKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLlhajlsYBwYXRoPTpcIiwgb3B0aW9uLnBhdGgpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImRlY29kZVVSSUNvbXBvbmVudFwiLCBvcHRpb24ucXVlcnkuc2NlbmUpO1xyXG4gICAgICAgICAgICB2YXIgc2NlbmVRdWVyeSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbi5xdWVyeSk7XHJcbiAgICAgICAgICAgIGlmIChNYWluLnd4VmFsdWUgPT1cIlwiKSAge1xyXG4gICAgICAgICAgICAgICAgTWFpbi53eFZhbHVlID0gb3B0aW9uLnNjZW5lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic2NlbmVcIiwgb3B0aW9uLnNjZW5lKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJzY2VuZVF1ZXJ5XCIsIHNjZW5lUXVlcnkpO1xyXG4gICAgICAgICAgICB2YXIgY2hhbm5lbCA9IG9wdGlvbi5xdWVyeS5jaGFubmVsO1xyXG4gICAgICAgICAgICB2YXIgYXBwaWQ7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb24ucmVmZXJyZXJJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInJlZmVycmVySW5mbzpcIiArIEpTT04uc3RyaW5naWZ5KG9wdGlvbi5yZWZlcnJlckluZm8pKTtcclxuICAgICAgICAgICAgICAgIGFwcGlkID0gb3B0aW9uLnJlZmVycmVySW5mby5hcHBJZDtcclxuICAgICAgICAgICAgICAgIGlmIChhcHBpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib25TaG93IGFwcGlzIGlzOlwiLCBhcHBpZCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib25TaG93IGFwcGlzIGlzIG51bGxcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInJlZmVycmVySW5mb+S4uuepulwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2hhbm5lbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm9uU2hvdyBjaGFubmVsIGlzOlwiLCBjaGFubmVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYihzaGFyZVRpY2tldCwgc2hhcmVpZCwgY2hhbm5lbCwgYXBwaWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBTaGFyZVNjZW5lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNoYXJlU2NlbmU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIFNoYXJlTWVzc2FnZSh0aXRsZT8sIGltYWdlVXJsPykge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcbiAgICAgICAgdmFyIHQ6IG51bWJlciA9IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC5TZXJ2ZXJUaW1lO1xyXG4gICAgICAgIHZhciBfdGl0bGUgPSB0aXRsZTtcclxuICAgICAgICB2YXIgX3VybCA9IGltYWdlVXJsO1xyXG4gICAgICAgIGlmICghX3RpdGxlKSB7XHJcbiAgICAgICAgICAgIF90aXRsZSA9IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC5zaGFyZXRpdGxlO1xyXG4gICAgICAgICAgICBfdXJsID0gVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLnNoYXJlaW1hZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3gub25TaGFyZUFwcE1lc3NhZ2UoKCkgPT4gKHtcclxuICAgICAgICAgICAgdGl0bGU6IF90aXRsZSxcclxuICAgICAgICAgICAgaW1hZ2VVcmw6IF91cmwsXHJcbiAgICAgICAgICAgIHF1ZXJ5OiBcInNoYXJlaWQ9XCIgKyBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwudXNlcmlkICsgXCJfXCIgKyB0ICsgXCJfXCIgKyBNYXRoLmZsb29yKDk5OTkgKiBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygpXHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHd4X2xvZ2luKGNiOiBGdW5jdGlvbikge1xyXG4gICAgICAgIGlmIChXWFNkay5Mb2RpbmluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFdYU2RrLkxvZGluaW5nID0gdHJ1ZTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkV4Y3V0ZSB3eC5sb2dpbiEgc2hhcmVPcGVuSWQ6IFwiICsgdGhpcy5zaGFyZUlkKTtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmxvZ2luKHtcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlcykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJ3eC5sb2dpbjogc3VjY2VzcyEgcmVzLmNvZGU9XCIgKyByZXMuY29kZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzLmNvZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBXWFNkay5Mb2RpbmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5bCG6KaB5Lyg6YCS55qE5Y+C5pWwOlwiICsgcmVzKTtcclxuICAgICAgICAgICAgICAgICAgICBjYihyZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+iOt+WPlueUqOaIt+eZu+W9leaAgeWksei0pe+8gScgKyByZXMuZXJyTXNnKTtcclxuICAgICAgICAgICAgICAgICAgICBjYihcImVycm9yXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmFpbDogZnVuY3Rpb24gKHJlcykgeyBjb25zb2xlLmxvZyhcInd4LmxvZ2luOiBmYWlsZWQsIHJlcz1cIiArIHJlcyk7IFdYU2RrLkxvZGluaW5nID0gZmFsc2U7IGNiKFwiZXJyb3JcIik7IH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc2hhcmVJZCA9IFwiXCI7XHJcbiAgICBwcml2YXRlIHNoYXJlU2NlbmUgPSBcIlwiO1xyXG4gICAgLy/mmL7npLrliqDovb3kv6Hmga9cclxuICAgIHB1YmxpYyBzdGF0aWMgU2hvd0xvYWRpbmcodGl0bGU6IHN0cmluZyA9IFwi5Yqg6L295LitLi4uXCIsIGlzU2hvd1d4ID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmIChMYXlhLkJyb3dzZXIud2luZG93ICYmIExheWEuQnJvd3Nlci53aW5kb3cud3gpIHtcclxuICAgICAgICAgICAgaWYgKGlzU2hvd1d4KSB7XHJcbiAgICAgICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LnNob3dMb2FkaW5nKHsgdGl0bGU6IHRpdGxlLCBtYXNrOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFZpZXdNYW5hZ2VyLkluc3RhbmNlLk9wZW5NYXNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBTeXN0ZW1JbmZvKCkge1xyXG4gICAgICAgIGlmIChMYXlhLkJyb3dzZXIud2luZG93Lnd4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmdldFN5c3RlbUluZm9TeW5jKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gcHJpdmF0ZSBzdGF0aWMgYnV0dG9uO1xyXG4gICAgLy8gcHVibGljIHN0YXRpYyBzaG93YmpXeEdhbWVRdWFuKGZsYWc6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIC8vICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdy53eCA9PSBudWxsKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybjtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgaWYgKGZsYWcpIHtcclxuICAgIC8vICAgICAgICAgaWYgKFdlaVhpblNESy5idXR0b24gPT0gbnVsbCkge1xyXG4gICAgLy8gICAgICAgICAgICAgbGV0IGluZm8gPSBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmdldFN5c3RlbUluZm9TeW5jKCk7XHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoIWluZm8pIHJldHVybjtcclxuICAgIC8vICAgICAgICAgICAgIHZhciB0b3AgPSA0NzQgKiBpbmZvLndpbmRvd0hlaWdodCAvIExheWEuc3RhZ2UuaGVpZ2h0O1xyXG4gICAgLy8gICAgICAgICAgICAgdmFyIGhlaWdodCA9IDk0ICogaW5mby53aW5kb3dIZWlnaHQgLyBMYXlhLnN0YWdlLmhlaWdodDtcclxuICAgIC8vICAgICAgICAgICAgIHZhciB3aWR0aCA9IGhlaWdodCAqIDk1IC8gOTQ7XHJcbiAgICAvLyAgICAgICAgICAgICBXZWlYaW5TREsuYnV0dG9uID0gTGF5YS5Ccm93c2VyLndpbmRvdy53eC5jcmVhdGVHYW1lQ2x1YkJ1dHRvblxyXG4gICAgLy8gICAgICAgICAgICAgICAgICh7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW1hZ2VcIixcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgaW1hZ2U6ICdyZXMvd3gucG5nJyxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgc3R5bGU6XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IHRvcCxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHRcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgICAgICB9KVxyXG5cclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICBXZWlYaW5TREsuYnV0dG9uLnNob3coKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgZWxzZSB7XHJcbiAgICAvLyAgICAgICAgIGlmIChXZWlYaW5TREsuYnV0dG9uKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBXZWlYaW5TREsuYnV0dG9uLmhpZGUoKTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuICAgIC8v6YCA5Ye6XHJcblxyXG5cclxuICAgIC8vIOaYvuekuuaPkOekuuS/oeaBry8vXHJcbiAgICBwdWJsaWMgc3RhdGljIFNob3dUb2FzdCh0ZXh0OiBzdHJpbmcsIGljb24gPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cud3gpIHtcclxuICAgICAgICAgICAgdmFyIHRfaWNvbiA9IGljb24gPyBcInN1Y2Nlc3NcIiA6IFwibm9uZVwiO1xyXG4gICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LnNob3dUb2FzdCh7IHRpdGxlOiB0ZXh0LCBpY29uOiB0X2ljb24gfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLzE6cGV0IDI65Lq654mpXHJcbiAgICAvLyBwdWJsaWMgc3RhdGljIFhpYW5TaGlfTW9kZWwoY29udGVudDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24gPSBudWxsLCB0eXBlID0gMSwgdGl0bGUgPSBcIlwiKSB7XHJcbiAgICAvLyAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cgJiYgTGF5YS5Ccm93c2VyLndpbmRvdy53eCkge1xyXG4gICAgLy8gICAgICAgICBpZiAodHlwZSA9PSAxKSB7XHJcbiAgICAvLyAgICAgICAgICAgICB2YXIgY2FuY2VsVGV4dCA9IFwi5q6L5b+N5Lii5o6JXCI7XHJcbiAgICAvLyAgICAgICAgICAgICB2YXIgY29uZmlybVRleHQgPSBcIuW4puS4iuS4gOi1t1wiO1xyXG4gICAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICAgICAgdmFyIGNhbmNlbFRleHQgPSBcIuS4jeaDs1wiO1xyXG4gICAgLy8gICAgICAgICAgICAgdmFyIGNvbmZpcm1UZXh0ID0gXCLmg7NcIjtcclxuICAgIC8vICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5zaG93TW9kYWwoe1xyXG4gICAgLy8gICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgLy8gICAgICAgICAgICAgY29udGVudDogY29udGVudCxcclxuICAgIC8vICAgICAgICAgICAgIGNhbmNlbFRleHQ6IGNhbmNlbFRleHQsXHJcbiAgICAvLyAgICAgICAgICAgICBjb25maXJtVGV4dDogY29uZmlybVRleHQsXHJcbiAgICAvLyAgICAgICAgICAgICBzdWNjZXNzKHJlcykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGlmIChyZXMuY29uZmlybSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn55So5oi354K55Ye756Gu5a6aJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRydWUpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmNhbmNlbCkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn55So5oi354K55Ye75Y+W5raIJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICB9LFxyXG4gICAgLy8gICAgICAgICAgICAgZmFpbChyZXM/KSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+eUqOaIt+eCueWHu+WPlua2iCcpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlKTtcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfSlcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcbiAgICBwdWJsaWMgc3RhdGljIFNob3J0VmlicmF0ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdy53eCAmJiBTZXR0aW5nQ29udHJvbGxlci5JbnN0YW5jZS52aWJyYXRlKSB7XHJcbiAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3gudmlicmF0ZVNob3J0KHt9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBMb25nVmlicmF0ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdy53eCAmJiBTZXR0aW5nQ29udHJvbGxlci5JbnN0YW5jZS52aWJyYXRlKSB7XHJcbiAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3gudmlicmF0ZUxvbmcoe30pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgSGlkZUxvYWRpbmcoaXNTaG93V3ggPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cgJiYgTGF5YS5Ccm93c2VyLndpbmRvdy53eCkge1xyXG4gICAgICAgICAgICBpZiAoaXNTaG93V3gpIHtcclxuICAgICAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guaGlkZUxvYWRpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBWaWV3TWFuYWdlci5JbnN0YW5jZS5DbG9zZU1hc2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIFN1Y2Nlc3Moc3RhZ2VJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmFsZFN0YWdlLm9uRW5kKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGFnZUlkOiBzdGFnZUlkLCAgICAgLy/lhbPljaFJRCDor6XlrZfmrrXlv4XkvKBcclxuICAgICAgICAgICAgICAgIHN0YWdlTmFtZTogXCLnrKxcIiArIHN0YWdlSWQgKyBcIuWFs1wiLCAvL+WFs+WNoeWQjeensCAg6K+l5a2X5q615b+F5LygXHJcbiAgICAgICAgICAgICAgICBldmVudDogXCJjb21wbGV0ZVwiLCAgIC8v5YWz5Y2h5a6M5oiQICDlhbPljaHov5vooYzkuK3vvIznlKjmiLfop6blj5HnmoTmk43kvZwgICAg6K+l5a2X5q615b+F5LygXHJcbiAgICAgICAgICAgICAgICBwYXJhbXM6XHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcIuWFs+WNoeWujOaIkFwiICAgLy/mj4/ov7BcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgIH1cclxuICAgIC8v6K6w5b2V6Zi/5ouJ5LiB5LqL5Lu2XHJcbiAgICBwdWJsaWMgc3RhdGljIEFsZEV2ZW50KGV2ZW50TmFtZTogc3RyaW5nLCBrZXk/OiBzdHJpbmcsIHZhbHVlPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cgJiYgTGF5YS5Ccm93c2VyLndpbmRvdy53eCkge1xyXG4gICAgICAgICAgICBpZiAoIWtleSkga2V5ID0gXCLnlKjmiLdpZFwiO1xyXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2codmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guYWxkU2VuZEV2ZW50KGV2ZW50TmFtZSwgeyBrZXk6IHZhbHVlIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgRmFpbChzdGFnZUlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIU1haW4uSXNXeCkgcmV0dXJuO1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guYWxkU3RhZ2Uub25FbmQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YWdlSWQ6IHN0YWdlSWQsICAgICAvL+WFs+WNoUlEIOivpeWtl+auteW/heS8oFxyXG4gICAgICAgICAgICAgICAgc3RhZ2VOYW1lOiBcIuesrFwiICsgc3RhZ2VJZCArIFwi5YWzXCIsIC8v5YWz5Y2h5ZCN56ewICDor6XlrZfmrrXlv4XkvKBcclxuICAgICAgICAgICAgICAgIGV2ZW50OiBcImZhaWxcIiwgICAvL+WFs+WNoeWujOaIkCAg5YWz5Y2h6L+b6KGM5Lit77yM55So5oi36Kem5Y+R55qE5pON5L2cICAgIOivpeWtl+auteW/heS8oFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zOlxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXCLlhbPljaHlpLHotKVcIixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgIH1cclxuICAgIC8vIHB1YmxpYyBzdGF0aWMgbGV2ZWxlUnVuaW5nKHN0YWdlSWQ6IHN0cmluZywgdXNlcmlkOiBzdHJpbmcsIGV2ZW50dHlwZTogbnVtYmVyLCBpdGVtTmFtZTogc3RyaW5nKSB7XHJcbiAgICAvLyAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cgJiYgTGF5YS5Ccm93c2VyLndpbmRvdy53eCkge1xyXG4gICAgLy8gICAgICAgICAvL0xheWEuQnJvd3Nlci53aW5kb3cud3guYWxkU3RhZ2Uub25SdW5uaW5nKHtcInN0YWdlSWRcIjpzdGFnZUlkLFwic3RhZ2VOYW1lXCI6c3RhZ2VOYW1lLFwidXNlcklkXCI6dXNlcmlkfSk7XHJcbiAgICAvLyAgICAgICAgIHZhciBldmVudFQgPSBldmVudHR5cGUgPT0gMCA/IFwiYXdhcmRcIiA6IFwicmV2aXZlXCI7XHJcbiAgICAvLyAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guYWxkU3RhZ2Uub25SdW5uaW5nKHtcclxuICAgIC8vICAgICAgICAgICAgIHN0YWdlSWQ6IHN0YWdlSWQsXHJcbiAgICAvLyAgICAgICAgICAgICBzdGFnZU5hbWU6IFwi56ysXCIgKyBzdGFnZUlkICsgXCLlhbNcIixcclxuICAgIC8vICAgICAgICAgICAgIHVzZXJJZDogdXNlcmlkLFxyXG4gICAgLy8gICAgICAgICAgICAgZXZlbnQ6IGV2ZW50VCxcclxuICAgIC8vICAgICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBpdGVtTmFtZSxcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfSlcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBTdGFydChzdGFnZUlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIU1haW4uSXNXeCkgcmV0dXJuO1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guYWxkU3RhZ2Uub25TdGFydChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhZ2VJZDogc3RhZ2VJZCwgICAgIC8v5YWz5Y2hSUQg6K+l5a2X5q615b+F5LygXHJcbiAgICAgICAgICAgICAgICBzdGFnZU5hbWU6IFwi56ysXCIgKyBzdGFnZUlkICsgXCLlhbNcIiwgLy/lhbPljaHlkI3np7AgIOivpeWtl+auteW/heS8oFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBHYW1lX1NoYXJlKGNhbGxiYWNrOiBGdW5jdGlvbiA9IG51bGwsIGNoYW5uZWw6IHN0cmluZyA9IFwiXCIpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIU1haW4uSXNXeCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB1cmw7XHJcbiAgICAgICAgdmFyIHRpdGxlO1xyXG4gICAgICAgIHVybCA9IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC5zaGFyZWltYWdlO1xyXG4gICAgICAgIHRpdGxlID0gVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLnNoYXJldGl0bGU7XHJcbiAgICAgICAgY29uc29sZS5sb2codXJsICsgXCIgIFwiICsgdGl0bGUpO1xyXG5cclxuICAgICAgIFxyXG4gICAgICAgIGlmIChjaGFubmVsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gV2VpWGluU0RLLkFsZEV2ZW50KFwi55So5oi35YiG5LqrXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdDogbnVtYmVyOy8vID0gVXNlck1vZGVsLkdldF9JbnN0YW5jZS5DdXJNb2RlbC5IdW9RdV9TZXJ2ZXJUaW1lO1xyXG4gICAgICAgIHZhciBwYXRoID0gXCJcIjtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmFsZFNoYXJlQXBwTWVzc2FnZSh7XHJcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgICAgaW1hZ2VVcmw6IHVybCxcclxuICAgICAgICAgICAgcXVlcnk6IFwic2hhcmVpZD1cIiArIFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC51c2VyaWQgKyBcIl9cIiArIFwib3RoZXJcIiArIFwiX1wiICsgdCArIFwiX1wiICsgTWF0aC5mbG9vcig5OTk5ICogTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoKSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgU2hhcmVNb2R1bGUuR29TaGFyZShjYWxsYmFjayk7XHJcblxyXG4gICAgfVxyXG59IiwiXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpY3Rpb25hcnkge1xyXG4gICAgcHJpdmF0ZSBfbGVuZ3RoOiBudW1iZXI7XHJcblxyXG4gICAgcHJpdmF0ZSBfY29udGFpbmVyOiBhbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0ge307XHJcbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGNvbnRhaW5lcigpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLy/ojrflj5blrZflhbjplb/luqYgICAgXHJcbiAgICBwdWJsaWMgZ2V0IHNpemUoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5re75YqgXHJcbiAgICBwdWJsaWMgc2V0KGtleTogYW55LCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb250YWluZXIuaGFzT3duUHJvcGVydHkoa2V5KSkgIHtcclxuICAgICAgICAgICAgdGhpcy5fbGVuZ3RoKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NvbnRhaW5lcltrZXldID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy/liKDpmaQgICAgIFxyXG4gICAgcHVibGljIGRlbGV0ZShrZXk6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb250YWluZXIuaGFzT3duUHJvcGVydHkoa2V5KSkgIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbnRhaW5lcltrZXldO1xyXG4gICAgICAgICAgICB0aGlzLl9sZW5ndGgtLTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy/mn6Xmib4gICBcclxuICAgIHB1YmxpYyBoYXMoa2V5OiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyLmhhc093blByb3BlcnR5KGtleSkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy/ojrflj5YgXHJcbiAgICBwdWJsaWMgZ2V0KGtleTogYW55KTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyLmhhc093blByb3BlcnR5KGtleSkpICB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXJba2V5XTtcclxuICAgICAgICB9IGVsc2UgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL+a4heepuiAgICBcclxuICAgIHB1YmxpYyBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLl9jb250YWluZXIgPSB7fTtcclxuICAgICAgICB0aGlzLl9sZW5ndGggPSAwO1xyXG4gICAgfVxyXG5cclxuXHJcbn0iLCJcclxuaW1wb3J0IFVzZXJNb2RlbCBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvVXNlck1vZGVsXCI7XHJcbmltcG9ydCBWZWN0b3IzPUxheWEuVmVjdG9yMztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FtZV9Ub29sIHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIEdldE9iaktleShvYmo6IGFueSkge1xyXG4gICAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8v6L+U5Zue5LiA5Liq6ZqP5py65pW05pWwW21pbixtYXhdXHJcbiAgICBwdWJsaWMgc3RhdGljIHJhbmRvbUludChtaW46IGFueSwgbWF4OiBhbnkpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBwYXJzZUludChNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpICsgbWluKTtcclxuICAgIH1cclxuICAgIC8vcDEg5bem5ZCR6YePIHAyXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEFuZyh4eDogbnVtYmVyLCB5eTogbnVtYmVyLCBvYmw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIDE4MCAvIE1hdGguUEkgKiB0aGlzLmdldFJhZCh4eCwgeXksIG9ibCk7XHJcbiAgICB9XHJcbiAgICAvL+i/lOWbnuinkuW6plxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRSYWQoeHg6IG51bWJlciwgeXk6IG51bWJlciwgb2JsOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIC8vIOaWueazleS4gO+8mmFzaW4oKVxyXG4gICAgICAgIC8vIHZhciByYWQ6TnVtYmVyID0geHggPiAwID8gKChNYXRoLlBJICogMykvMiAgKyBNYXRoLmFzaW4oLXl5L29ibCkpIDogKE1hdGguUEkgLyAyIC0gIE1hdGguYXNpbigteXkvb2JsKSk7XHJcbiAgICAgICAgLy8g5pa55rOV5LqM77yaYWNvcygpXHJcbiAgICAgICAgdmFyIHJhZDogbnVtYmVyID0geXkgPCAwID8gTWF0aC5hY29zKHh4IC8gb2JsKSA6IChNYXRoLlBJICogMiAtIE1hdGguYWNvcyh4eCAvIG9ibCkpO1xyXG4gICAgICAgIC8vIOaWueazleS4ie+8mmF0YW4yKClcclxuICAgICAgICAvLyB2YXIgcmFkOk51bWJlciA9IHl5IDwgMCA/IE1hdGguYXRhbjIoLXl5LCB4eCkgOiBNYXRoLlBJICogMiArIE1hdGguYXRhbjIoLXl5LCB4eCk7XHJcbiAgICAgICAgcmV0dXJuIHJhZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldE1fVmVjdG9yKHYxOiBMYXlhLlZlY3RvcjMsIHYyOiBMYXlhLlZlY3RvcjMpOiBMYXlhLlZlY3RvcjMge1xyXG4gICAgICAgIGxldCB0ZW1wID0gbmV3IExheWEuVmVjdG9yMygpO1xyXG4gICAgICAgIExheWEuVmVjdG9yMy5hZGQodjEsIHYyLCB0ZW1wKTtcclxuICAgICAgICByZXR1cm4gbmV3IExheWEuVmVjdG9yMyh0ZW1wLnggKiAwLjUsIHRlbXAueSAqIDAuNSwgdGVtcC56ICogMC41KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRSZWZsZWN0QW5nKGRpcjpWZWN0b3IzKXtcclxuICAgICAgICB2YXIgeHg9TWF0aC5hYnMoZGlyLngpO1xyXG4gICAgICAgIHZhciB6ej1NYXRoLmFicyhkaXIueik7XHJcbiAgICAgICAgdmFyIG9ibD0gTWF0aC5zcXJ0KE1hdGgucG93KGRpci54LCAyKSArIE1hdGgucG93KGRpci56LCAyKSk7XHJcbiAgICAgICAgcmV0dXJuIDE4MCAvIE1hdGguUEkgKiBNYXRoLmFjb3MoeHggLyBvYmwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcmFuZG9tXzF0bzEoKTpudW1iZXJ7IFxyXG4gICAgICAgIHZhciBpc3poZW5nPU1hdGgucmFuZG9tKCk+MC41Py0xOjE7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkqaXN6aGVuZztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldDY0RW5jb2RlKHN0cik6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIGMxLCBjMiwgYzM7XHJcbiAgICAgICAgdmFyIGJhc2U2NEVuY29kZUNoYXJzID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCI7XHJcbiAgICAgICAgdmFyIGkgPSAwLCBsZW4gPSBzdHIubGVuZ3RoLCBzdHJpbmcgPSAnJztcclxuICAgICAgICB3aGlsZSAoaSA8IGxlbikge1xyXG4gICAgICAgICAgICBjMSA9IHN0ci5jaGFyQ29kZUF0KGkrKykgJiAweGZmO1xyXG4gICAgICAgICAgICBpZiAoaSA9PSBsZW4pIHtcclxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoYzEgPj4gMik7XHJcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gYmFzZTY0RW5jb2RlQ2hhcnMuY2hhckF0KChjMSAmIDB4MykgPDwgNCk7XHJcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gXCI9PVwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYzIgPSBzdHIuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgICAgICBpZiAoaSA9PSBsZW4pIHtcclxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoYzEgPj4gMik7XHJcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gYmFzZTY0RW5jb2RlQ2hhcnMuY2hhckF0KCgoYzEgJiAweDMpIDw8IDQpIHwgKChjMiAmIDB4RjApID4+IDQpKTtcclxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoKGMyICYgMHhGKSA8PCAyKTtcclxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBcIj1cIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGMzID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICAgICAgc3RyaW5nICs9IGJhc2U2NEVuY29kZUNoYXJzLmNoYXJBdChjMSA+PiAyKTtcclxuICAgICAgICAgICAgc3RyaW5nICs9IGJhc2U2NEVuY29kZUNoYXJzLmNoYXJBdCgoKGMxICYgMHgzKSA8PCA0KSB8ICgoYzIgJiAweEYwKSA+PiA0KSk7XHJcbiAgICAgICAgICAgIHN0cmluZyArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoKChjMiAmIDB4RikgPDwgMikgfCAoKGMzICYgMHhDMCkgPj4gNikpO1xyXG4gICAgICAgICAgICBzdHJpbmcgKz0gYmFzZTY0RW5jb2RlQ2hhcnMuY2hhckF0KGMzICYgMHgzRilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICAvLyBwdWJsaWMgc3RhdGljIFNldEh1VHVpTGlzdChsaXN0OkxheWEuTGlzdCxkYXRhPyxzY3JvbDpudW1iZXI9MSx0eXBlOm51bWJlcj0wKXsgLy9zY3JvbCAxOuerlueahCAgMuaoqueahFxyXG4gICAgLy8gICAgIHZhciBhcnI9ZGF0YT9kYXRhOkZZSERfU2RrLnB1c2hEYXRhO1xyXG4gICAgLy8gICAgIGxpc3Quc2VsZWN0RW5hYmxlID0gZmFsc2U7XHJcbiAgICAvLyAgICAgc2Nyb2w9PTE/bGlzdC52U2Nyb2xsQmFyU2tpbiA9IFwiXCI6bGlzdC5oU2Nyb2xsQmFyU2tpbiA9IFwiXCI7XHJcbiAgICAvLyAgICAgbGlzdC5yZW5kZXJIYW5kbGVyID0gTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCB0aGlzLnVwZGF0ZUl0ZW0sIFt0eXBlXSwgZmFsc2UpO1xyXG4gICAgLy8gICAgIGxpc3QuYXJyYXkgPSBhcnI7XHJcbiAgICAvLyAgICAgbGlzdC5yZWZyZXNoKCk7XHJcbiAgICAvLyAgfVxyXG4gICAgLy8gIHByaXZhdGUgc3RhdGljIHVwZGF0ZUl0ZW0odHlwZSxjZWxsOiBMYXlhLkJveCwgaW5kZXg6IG51bWJlcil7XHJcbiAgICAvLyAgICAgIHZhciBhZGl0ZW09Y2VsbC5nZXRDb21wb25lbnQoSHVpVHVpSXRlbSlhcyBIdWlUdWlJdGVtO1xyXG4gICAgLy8gICAgICBhZGl0ZW0uUmVmcmVzaCh0eXBlKTtcclxuICAgIC8vICB9XHJcbiAgICAvLyAgcHVibGljIHN0YXRpYyBtYWtlUmFuZG9tQXJyKGFyckxpc3QsbnVtKXtcclxuICAgIC8vICAgICBpZihudW0+YXJyTGlzdC5sZW5ndGgpe1xyXG4gICAgLy8gICAgICAgIHJldHVybjtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgdmFyIHRlbXBBcnI9YXJyTGlzdC5zbGljZSgwKTtcclxuICAgIC8vICAgICB2YXIgbmV3QXJyTGlzdD1bXTsgICAgXHJcbiAgICAvLyAgICAgZm9yKHZhciBpPTA7aTxudW07aSsrKXtcclxuICAgIC8vICAgICAgICAgdmFyIHJhbmRvbT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKHRlbXBBcnIubGVuZ3RoLTEpKTtcclxuICAgIC8vICAgICAgICAgdmFyIGFycj10ZW1wQXJyW3JhbmRvbV07XHJcbiAgICAvLyAgICAgICAgIHRlbXBBcnIuc3BsaWNlKHJhbmRvbSwgMSk7XHJcbiAgICAvLyAgICAgICAgIG5ld0Fyckxpc3QucHVzaChhcnIpOyAgICBcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgcmV0dXJuIG5ld0Fyckxpc3Q7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBwdWJsaWMgc3RhdGljIENvcHlBcnIobyk6YW55e1xyXG4gICAgLy8gICAgIHZhciBhcnI9W107XHJcbiAgICAvLyAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG8ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBvW2luZGV4XTtcclxuICAgIC8vICAgICAgICAgYXJyLnB1c2goZWxlbWVudCk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIHJldHVybiBhcnI7XHJcbiAgICAvLyB9XHJcblxyXG5cclxuICAgIC8vIHB1YmxpYyBzdGF0aWMgU2hvd1FpYW5EYW8oKTogYm9vbGVhbiB7XHJcbiAgICAvLyAgICAgbGV0IHRvZGF5WmVybyA9IG5ldyBEYXRlKFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC5TZXJ2ZXJUaW1lICogMTAwMCk7XHJcbiAgICAvLyAgICAgdG9kYXlaZXJvLnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgLy8gICAgIGlmKCFQbGF5ZXJNYW5hZ2VyLkluc3RhbmNlLnNpZ24pcmV0dXJuIHRydWU7XHJcbiAgICAvLyAgICAgdmFyIGxhc3RUaW1lID0gTnVtYmVyKFBsYXllck1hbmFnZXIuSW5zdGFuY2Uuc2lnbltcInNpZ25fdGltZVwiXSkgKiAxMDAwO1xyXG4gICAgLy8gICAgIGxldCBsYXN0U2lnblRpbWUgPSBuZXcgRGF0ZShsYXN0VGltZSk7XHJcbiAgICAvLyAgICAgaWYgKGxhc3RUaW1lID09IDApIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGlmIChsYXN0U2lnblRpbWUudmFsdWVPZigpIDwgdG9kYXlaZXJvLnZhbHVlT2YoKSkge1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gfVxyXG59IiwiaW1wb3J0IHsgdWkgfSBmcm9tIFwiLi4vdWkvbGF5YU1heFVJXCI7XHJcbmltcG9ydCB7IEV2ZW50TWFuYWdlciB9IGZyb20gXCIuLi9nYW1lX21vZHVsZS9FdmVudE1hbmFnZXJcIjtcclxuaW1wb3J0IHsgUm9sZUNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vZ2FtZV9sb2dpYy9Sb2xlQ29udHJvbGxlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIGdhbWVfdWkgZXh0ZW5kcyB1aS5nYW1lX3VpVUkgaW1wbGVtZW50cyBVSV9JbnRlcmZhY2Uge1xyXG5cclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLnJlc2l6ZUhhbmRlcigpO1xyXG4gICAgICAgIEV2ZW50TWFuYWdlci5vbihMYXlhLkV2ZW50LlJFU0laRSwgdGhpcywgdGhpcy5yZXNpemVIYW5kZXIpO1xyXG4gICAgfVxyXG4gICAgcmVzaXplSGFuZGVyKCkge1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gTGF5YS5zdGFnZS5oZWlnaHQ7XHJcbiAgICB9XHJcbiAgICBPblNob3coZGF0YT86IGFueSkge1xyXG4gICAgICAgIHRoaXMuVWlFdmVudEhhbmRsZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBVaUV2ZW50SGFuZGxlcigpIHtcclxuICAgICAgICB0aGlzLm9uKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5PbkNsaWNrRG93bik7XHJcbiAgICAgICAgdGhpcy5vbihMYXlhLkV2ZW50Lk1PVVNFX1VQLCB0aGlzLCB0aGlzLk9uQ2xpY2tVcCk7XHJcbiAgICAgICAgdGhpcy5vbihMYXlhLkV2ZW50Lk1PVVNFX09VVCwgdGhpcywgdGhpcy5PbkNsaWNrVXApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNkb3duPWZhbHNlO1xyXG4gICAgT25DbGlja0Rvd24oZTogTGF5YS5FdmVudCkge1xyXG4gICAgICAgIGlmIChlLnRhcmdldCBpbnN0YW5jZW9mIExheWEuVUlDb21wb25lbnQpIHJldHVybjtcclxuICAgICAgICB0aGlzLmlzZG93bj10cnVlO1xyXG4gICAgICAgIHRoaXMub24oTGF5YS5FdmVudC5NT1VTRV9NT1ZFLCB0aGlzLCB0aGlzLk9uU2xpZGVyKTtcclxuICAgICAgICB0aGlzLmN1ck1vdXNlUG9zID0gbmV3IExheWEuVmVjdG9yMihMYXlhLk1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVgsIExheWEuTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWSk7XHJcbiAgICB9XHJcbiAgICBPbkNsaWNrVXAoKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuaXNkb3duKXJldHVybjtcclxuICAgICAgICB0aGlzLmlzZG93bj1mYWxzZTtcclxuICAgICAgICB0aGlzLm9mZihMYXlhLkV2ZW50Lk1PVVNFX01PVkUsIHRoaXMsIHRoaXMuT25TbGlkZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGN1ck1vdXNlUG9zOiBMYXlhLlZlY3RvcjI7XHJcbiAgICBPblNsaWRlcigpIHtcclxuICAgICAgICB2YXIgTW91c2VQb3MgPSBuZXcgTGF5YS5WZWN0b3IyKExheWEuTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWCwgTGF5YS5Nb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VZKTtcclxuICAgICAgICB2YXIgb2ZmZXN0WCA9IE1vdXNlUG9zLnggLSB0aGlzLmN1ck1vdXNlUG9zLng7XHJcbiAgICAgICAgaWYgKG9mZmVzdFggPiAwKSBvZmZlc3RYID0gb2ZmZXN0WCA8IDUgPyBvZmZlc3RYIDogNTtcclxuICAgICAgICBpZiAob2ZmZXN0WCA8IDApIG9mZmVzdFggPSBvZmZlc3RYID4gLTUgPyBvZmZlc3RYIDogLTU7XHJcbiAgICAgICAgdmFyIHJvdGF0ZURpciA9IG5ldyBMYXlhLlZlY3RvcjMoMCwgLW9mZmVzdFggKiAwLjAxLCAwKTtcclxuICAgICAgICBSb2xlQ29udHJvbGxlci5JbnN0YW5jZS5Sb2xlUm90YXRpb24ocm90YXRlRGlyKTtcclxuICAgICAgICB0aGlzLmN1ck1vdXNlUG9zID0gbmV3IExheWEuVmVjdG9yMihMYXlhLk1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVgsIExheWEuTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWSk7O1xyXG4gICAgfVxyXG4gICAgT25DbG9zZSgpIHtcclxuICAgICAgICBFdmVudE1hbmFnZXIub2ZmKExheWEuRXZlbnQuUkVTSVpFLCB0aGlzLCB0aGlzLnJlc2l6ZUhhbmRlcik7XHJcbiAgICAgICAgdGhpcy5vZmYoTGF5YS5FdmVudC5NT1VTRV9ET1dOLCB0aGlzLCB0aGlzLk9uQ2xpY2tEb3duKTtcclxuICAgICAgICB0aGlzLm9mZihMYXlhLkV2ZW50Lk1PVVNFX1VQLCB0aGlzLCB0aGlzLk9uQ2xpY2tVcCk7XHJcbiAgICAgICAgdGhpcy5vZmYoTGF5YS5FdmVudC5NT1VTRV9PVVQsIHRoaXMsIHRoaXMuT25DbGlja1VwKTtcclxuICAgIH1cclxufSIsIi8qKlRoaXMgY2xhc3MgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgTGF5YUFpcklERSwgcGxlYXNlIGRvIG5vdCBtYWtlIGFueSBtb2RpZmljYXRpb25zLiAqL1xuaW1wb3J0IFZpZXc9TGF5YS5WaWV3O1xyXG5pbXBvcnQgRGlhbG9nPUxheWEuRGlhbG9nO1xyXG5pbXBvcnQgU2NlbmU9TGF5YS5TY2VuZTtcbnZhciBSRUc6IEZ1bmN0aW9uID0gTGF5YS5DbGFzc1V0aWxzLnJlZ0NsYXNzO1xuZXhwb3J0IG1vZHVsZSB1aSB7XHJcbiAgICBleHBvcnQgY2xhc3MgZ2FtZV91aVVJIGV4dGVuZHMgU2NlbmUge1xyXG4gICAgICAgIHB1YmxpYyBzdGF0aWMgIHVpVmlldzphbnkgPXtcInR5cGVcIjpcIlNjZW5lXCIsXCJwcm9wc1wiOntcIndpZHRoXCI6NzIwLFwiaGVpZ2h0XCI6MTI4MH0sXCJsb2FkTGlzdFwiOltdLFwibG9hZExpc3QzRFwiOltdfTtcclxuICAgICAgICBjb25zdHJ1Y3RvcigpeyBzdXBlcigpfVxyXG4gICAgICAgIGNyZWF0ZUNoaWxkcmVuKCk6dm9pZCB7XHJcbiAgICAgICAgICAgIHN1cGVyLmNyZWF0ZUNoaWxkcmVuKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVmlldyhnYW1lX3VpVUkudWlWaWV3KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBSRUcoXCJ1aS5nYW1lX3VpVUlcIixnYW1lX3VpVUkpO1xyXG59XHIiXX0=
|