123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241 |
- 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";
- Object.defineProperty(exports, "__esModule", { value: true });
- /**This class is automatically generated by LayaAirIDE, please do not make any modifications. */
- var ButtonRunTime_1 = require("./game_ui/RunTimeScript/ButtonRunTime");
- /*
- * 游戏初始化配置;
- */
- var GameConfig = /** @class */ (function () {
- function GameConfig() {
- }
- GameConfig.init = function () {
- var reg = Laya.ClassUtils.regClass;
- reg("game_ui/RunTimeScript/ButtonRunTime.ts", ButtonRunTime_1.default);
- };
- 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();
- },{"./game_ui/RunTimeScript/ButtonRunTime":23}],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.main_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.0";
- Main.CFG = "CFG";
- Main.wxValue = "";
- return Main;
- }());
- exports.Main = Main;
- //激活启动类
- new Main();
- },{"./GameConfig":1,"./game_logic/GameSceneController":6,"./game_logic/ViewManager":13,"./game_module/FYHD_Sdk":15,"./game_module/WXSdk":20}],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 EventManager_1 = require("../game_module/EventManager");
- var Role_1 = require("./Role");
- var Bullet = /** @class */ (function (_super) {
- __extends(Bullet, _super);
- function Bullet() {
- return _super.call(this) || this;
- }
- Bullet.prototype.onAwake = function () {
- this.self = this.owner;
- this._transform = this.self.transform;
- this.forw = new Vector3(0, 0, 0);
- this._corss = new Vector3(0, 0, 0);
- };
- Bullet.prototype.CreateRay = function (pos, _rotation, _type) {
- if (!this.go) {
- switch (_type) {
- case GameDefined_1.BulletType.BulletG:
- this.go = BulletController_1.default.Instance.CreateBullet(GameDefined_1.default.poolName.bulletG);
- break;
- case GameDefined_1.BulletType.BulletR:
- this.go = BulletController_1.default.Instance.CreateBullet(GameDefined_1.default.poolName.BulletR);
- break;
- }
- 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.go.transform.rotate = _rotation;
- 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);
- 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 || other.layer == GameDefined_1.default.moster_layer) {
- this.tempPos = pos;
- this.tempRotation = _rotation;
- this.SetTar(other);
- this.goS.SetNextNotActive();
- }
- else {
- this.RemoveTar();
- var nor = this._hit.normal;
- nor.x = Math.abs(nor.x) < 0.001 ? 0 : nor.x;
- nor.y = Math.abs(nor.y) < 0.001 ? 0 : nor.y;
- nor.z = Math.abs(nor.z) < 0.001 ? 0 : nor.z;
- Vector3.cross(this.forw, nor, this._corss); //大于0在左方 小于0在右方
- var a = Game_Tool_1.default.getReflectAng(this.forw);
- // Laya.Quaternion.
- var ang = this.go._transform.rotationEuler.clone();
- this._corss.y >= 0 ? ang.y = ang.y + 2 * a : ang.y = ang.y - 2 * a;
- // var ab=new Laya.Quaternion();
- // Laya.Quaternion.createFromAxisAngle(this.forw,-a,ab)
- // this.goS.CreateRay(poi, ab, BulletType.BulletG);
- this.goS.CreateRay(poi, ang, _type);
- }
- }
- else {
- this.RemoveTar();
- 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();
- }
- };
- Bullet.prototype.RemoveTar = function () {
- if (this.HitTar) {
- this.HitTar = null;
- }
- };
- Bullet.prototype.SetTar = function (tar) {
- this.HitTar = tar;
- };
- Bullet.prototype.Hit = function () {
- if (this.HitTar) {
- if (this.HitTar.layer == GameDefined_1.default.player_layer || this.HitTar.layer == GameDefined_1.default.moster_layer) {
- var r = this.HitTar.getComponent(Role_1.Role);
- r.HitEd();
- this.CreateRay(this.tempPos, this.tempRotation);
- }
- }
- };
- Bullet.prototype.onEnable = function () {
- EventManager_1.EventManager.on(GameDefined_1.default.HitEvent, this, this.Hit);
- };
- Bullet.prototype.onDisable = function () {
- EventManager_1.EventManager.off(GameDefined_1.default.HitEvent, this, this.Hit);
- };
- return Bullet;
- }(Laya.Script3D));
- exports.Bullet = Bullet;
- },{"../game_module/EventManager":14,"../game_module/GameDefined":16,"../game_tool/Game_Tool":22,"./BulletController":4,"./GameSceneController":6,"./Role":10}],4:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Pool_Manager_1 = require("./Pool_Manager");
- 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
- });
- // private bulletPref: Sprite3D;
- BulletController.prototype.init = function (bullet, poolName) {
- bullet.removeSelf();
- // this.bulletPref = bullet;
- Pool_Manager_1.Pool_Manager.Instance.InitData(poolName, bullet);
- };
- BulletController.prototype.CreateBullet = function (bulletName) {
- //if (this.bullet) return this.bullet;
- var go = Pool_Manager_1.Pool_Manager.Instance.SetActiveObject(bulletName);
- GameSceneController_1.default.Instance.game_scene.addChild(go);
- // this.bullet = go;
- return go;
- };
- return BulletController;
- }());
- exports.default = BulletController;
- },{"./GameSceneController":6,"./Pool_Manager":9}],5:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var EventManager_1 = require("../game_module/EventManager");
- var GameDefined_1 = require("../game_module/GameDefined");
- var GameController = /** @class */ (function () {
- function GameController() {
- this.ishit = false;
- this.gameStart = false;
- this.gameover = true;
- }
- Object.defineProperty(GameController, "Instance", {
- get: function () {
- return this.instasnce || (this.instasnce = new GameController());
- },
- enumerable: true,
- configurable: true
- });
- GameController.prototype.Hit = function () {
- EventManager_1.EventManager.event(GameDefined_1.default.HitEvent);
- };
- GameController.prototype.GameStart = function () {
- this.gameStart = true;
- this.gameover = false;
- };
- return GameController;
- }());
- exports.GameController = GameController;
- },{"../game_module/EventManager":14,"../game_module/GameDefined":16}],6:[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 GameDefined_1 = require("../game_module/GameDefined");
- var GameSceneController = /** @class */ (function () {
- function GameSceneController() {
- }
- 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([GameDefined_1.default.game_scene_path], function () {
- var t = Laya.loader.getRes(GameDefined_1.default.game_scene_path);
- Laya.stage.addChild(t);
- _this.game_scene = t;
- var _bulletG = t.getChildByName("bulletG");
- var _bulletR = t.getChildByName("bulletR");
- BulletController_1.default.Instance.init(_bulletG, GameDefined_1.default.poolName.bulletG);
- BulletController_1.default.Instance.init(_bulletR, GameDefined_1.default.poolName.BulletR);
- // var _role1 = t.getChildByName("role1") as Sprite3D;
- // var _role2 = t.getChildByName("role2") as Sprite3D;
- // var _moster1 = t.getChildByName("moster1") as Sprite3D;
- // var _moster2= t.getChildByName("moster2") as Sprite3D;
- var players = t.getChildByName("Players");
- var mosters = t.getChildByName("Mosters");
- RoleController_1.RoleController.Instance.initPlayer(players._children);
- RoleController_1.RoleController.Instance.initMoster(mosters._children);
- RoleController_1.RoleController.Instance.CreateRay();
- });
- };
- return GameSceneController;
- }());
- exports.default = GameSceneController;
- },{"../game_module/GameDefined":16,"../game_module/ResourceLoad":17,"./BulletController":4,"./RoleController":11}],7:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var GameDefined_1 = require("../game_module/GameDefined");
- var Role_1 = require("./Role");
- var Vector3 = Laya.Vector3;
- var Ray = Laya.Ray;
- var HitResult = Laya.HitResult;
- var Bullet_1 = require("./Bullet");
- var BulletController_1 = require("./BulletController");
- var GameSceneController_1 = require("./GameSceneController");
- var Game_Tool_1 = require("../game_tool/Game_Tool");
- var EventManager_1 = require("../game_module/EventManager");
- var Moster = /** @class */ (function (_super) {
- __extends(Moster, _super);
- function Moster() {
- return _super.call(this) || this;
- }
- Moster.prototype.onAwake = function () {
- _super.prototype.onAwake.call(this);
- this._type = GameDefined_1.CheckType.Moster;
- this.forw = new Vector3(0, 0, 0);
- this._corss = new Vector3(0, 0, 0);
- this._bulletPos = this.self.getChildByName("bulletPos");
- };
- Moster.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(GameDefined_1.default.poolName.BulletR);
- 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;
- 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 other = this._hit.collider.owner;
- if (other.layer == GameDefined_1.default.player_layer || other.layer == GameDefined_1.default.moster_layer) {
- this.SetTar(other);
- this.goS.SetNextNotActive();
- }
- else {
- this.RemoveTar();
- var nor = this._hit.normal;
- nor.x = Math.abs(nor.x) < 0.001 ? 0 : nor.x;
- nor.y = Math.abs(nor.y) < 0.001 ? 0 : nor.y;
- nor.z = Math.abs(nor.z) < 0.001 ? 0 : nor.z;
- 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, GameDefined_1.BulletType.BulletR);
- }
- }
- else {
- this.RemoveTar();
- this.go.transform.localScaleZ = 50;
- this.goS.SetNextNotActive();
- }
- };
- Moster.prototype.RotationSelf = function (rota) {
- this._transform.rotate(rota);
- this.CreateRay();
- };
- Moster.prototype.SetNextNotActive = function () {
- if (this.go) {
- this.go.active = false;
- if (this.goS)
- this.goS.SetNextNotActive();
- }
- };
- Moster.prototype.RemoveTar = function () {
- if (this.HitTar) {
- this.HitTar = null;
- }
- };
- Moster.prototype.SetTar = function (tar) {
- this.HitTar = tar;
- };
- Moster.prototype.Hit = function () {
- if (this.HitTar) {
- //Game_Tool.CreateText(this.HitTar.name+"被击杀!");
- if (this.HitTar.layer == GameDefined_1.default.player_layer || this.HitTar.layer == GameDefined_1.default.moster_layer) {
- var r = this.HitTar.getComponent(Role_1.Role);
- r.HitEd();
- this.CreateRay();
- // this.CreateRay();
- }
- // EventManager.off(GameDefined.HitEvent,this, this.Hit);
- }
- };
- Moster.prototype.onEnable = function () {
- EventManager_1.EventManager.on(GameDefined_1.default.HitEvent, this, this.Hit);
- this._ishited = false;
- };
- Moster.prototype.onDisable = function () {
- EventManager_1.EventManager.off(GameDefined_1.default.HitEvent, this, this.Hit);
- };
- return Moster;
- }(Role_1.Role));
- exports.Moster = Moster;
- },{"../game_module/EventManager":14,"../game_module/GameDefined":16,"../game_tool/Game_Tool":22,"./Bullet":3,"./BulletController":4,"./GameSceneController":6,"./Role":10}],8:[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 EventManager_1 = require("../game_module/EventManager");
- var Player = /** @class */ (function (_super) {
- __extends(Player, _super);
- function Player() {
- var _this = _super.call(this) || this;
- _this.idhit = false;
- return _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);
- this._bulletPos = this.self.getChildByName("bulletPos");
- };
- 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(GameDefined_1.default.poolName.bulletG);
- 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;
- 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 other = this._hit.collider.owner;
- if (other.layer == GameDefined_1.default.player_layer || other.layer == GameDefined_1.default.moster_layer) {
- this.SetTar(other);
- this.goS.SetNextNotActive();
- }
- else {
- this.RemoveTar();
- var nor = this._hit.normal;
- nor.x = Math.abs(nor.x) < 0.001 ? 0 : nor.x;
- nor.y = Math.abs(nor.y) < 0.001 ? 0 : nor.y;
- nor.z = Math.abs(nor.z) < 0.001 ? 0 : nor.z;
- 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;
- // var v1=new Vector3(0.8,0,0.6); //向量1
- // var nor=new Vector3(-1,0,0); //v1碰撞法线
- // var ab=new Laya.Quaternion();
- // Laya.Quaternion.createFromAxisAngle(this.forw,a,ab)
- // this.goS.CreateRay(poi, ab, BulletType.BulletG);
- this.goS.CreateRay(poi, ang, GameDefined_1.BulletType.BulletG);
- }
- }
- else {
- this.RemoveTar();
- this.go.transform.localScaleZ = 50;
- this.goS.SetNextNotActive();
- }
- };
- Player.prototype.RotationSelf = function (rota) {
- // console.log(rota);
- // console.log(this._transform.rotationEuler);
- this._transform.rotate(rota);
- // console.log(this._transform.rotationEuler);
- this.CreateRay();
- };
- Player.prototype.SetNextNotActive = function () {
- if (this.go) {
- this.go.active = false;
- if (this.goS)
- this.goS.SetNextNotActive();
- }
- };
- Player.prototype.RemoveTar = function () {
- if (this.HitTar) {
- this.HitTar = null;
- }
- };
- Player.prototype.SetTar = function (tar) {
- this.HitTar = tar;
- };
- Player.prototype.Hit = function () {
- if (this.HitTar) {
- if (this.HitTar.layer == GameDefined_1.default.player_layer || this.HitTar.layer == GameDefined_1.default.moster_layer) {
- var r = this.HitTar.getComponent(Role_1.Role);
- r.HitEd();
- this.CreateRay();
- }
- }
- };
- Player.prototype.onEnable = function () {
- EventManager_1.EventManager.on(GameDefined_1.default.HitEvent, this, this.Hit);
- this._ishited = false;
- };
- Player.prototype.onDisable = function () {
- EventManager_1.EventManager.off(GameDefined_1.default.HitEvent, this, this.Hit);
- };
- return Player;
- }(Role_1.Role));
- exports.Player = Player;
- },{"../game_module/EventManager":14,"../game_module/GameDefined":16,"../game_tool/Game_Tool":22,"./Bullet":3,"./BulletController":4,"./GameSceneController":6,"./Role":10}],9:[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
- });
- // [ ]
- 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":21}],10:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var GameDefined_1 = require("../game_module/GameDefined");
- 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;
- };
- Role.prototype.HitEd = function () {
- if (this._ishited)
- return;
- switch (this._type) {
- case GameDefined_1.CheckType.Player:
- console.log();
- break;
- case GameDefined_1.CheckType.Moster:
- break;
- }
- this.SetNextNotActive();
- this.self.active = false;
- };
- Role.prototype.SetNextNotActive = function () {
- };
- return Role;
- }(Laya.Script3D));
- exports.Role = Role;
- },{"../game_module/GameDefined":16}],11:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Player_1 = require("./Player");
- var Moster_1 = require("./Moster");
- var RoleController = /** @class */ (function () {
- function RoleController() {
- // public player:Sprite3D;
- // public playerS:Player;
- this.playerArr = [];
- this.mosterArr = [];
- this.behaviorArr = [];
- }
- Object.defineProperty(RoleController, "Instance", {
- get: function () {
- return this.instasnce || (this.instasnce = new RoleController());
- },
- enumerable: true,
- configurable: true
- });
- RoleController.prototype.initPlayer = function (roles) {
- for (var index = 0; index < roles.length; index++) {
- var element = roles[index];
- var beh = element.addComponent(Player_1.Player);
- this.behaviorArr.push(beh);
- }
- // if(role){
- // this.player=role;
- // this.playerS=this.player.addComponent(Player);
- // }
- };
- RoleController.prototype.initMoster = function (mosters) {
- for (var index = 0; index < mosters.length; index++) {
- var element = mosters[index];
- var beh = element.addComponent(Moster_1.Moster);
- this.behaviorArr.push(beh);
- }
- };
- RoleController.prototype.CreateRay = function () {
- for (var index = 0; index < this.behaviorArr.length; index++) {
- var element = this.behaviorArr[index];
- element.CreateRay();
- }
- // if(this.playerS)this.playerS.CreateRay();
- };
- RoleController.prototype.RoleRotation = function (rota) {
- // if(this.playerS)this.playerS.RotationSelf(rota);
- for (var index = 0; index < this.behaviorArr.length; index++) {
- var element = this.behaviorArr[index];
- element.RotationSelf(rota);
- }
- };
- return RoleController;
- }());
- exports.RoleController = RoleController;
- },{"./Moster":7,"./Player":8}],12:[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":20}],13:[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 main_ui_1 = require("../game_ui/main_ui");
- var ViewType;
- (function (ViewType) {
- ViewType[ViewType["game_ui"] = 0] = "game_ui";
- ViewType[ViewType["main_ui"] = 1] = "main_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;
- this.viewDic[ViewType.main_ui] = main_ui_1.main_ui;
- };
- ViewManager.prototype.OpenView = function (view, data) {
- if (this.curView != null) {
- this.curView.OnClose();
- Laya.stage.removeChild(this.curView);
- this.curView.destroy(true);
- this.curView = null;
- }
- this.curView = new this.viewDic[view];
- Laya.stage.addChild(this.curView);
- 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":21,"../game_ui/game_ui":24,"../game_ui/main_ui":25}],14:[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;
- },{}],15:[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":14,"./UserModel":19}],16:[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.HitEvent = "HitEvent";
- GameDefined.game_scene_path = "res/LayaScene_main/Conventional/main.ls";
- //"res/LayaScene_GameScene/Conventional/GameScene.ls";
- GameDefined.poolName = {
- bulletG: "bulletG",
- BulletR: "BulletR"
- };
- GameDefined.uiRes = [
- "res/atlas/main_res.atlas",
- "res/atlas/main_res.png "
- ];
- 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 = {}));
- var BulletType;
- (function (BulletType) {
- BulletType[BulletType["BulletR"] = 0] = "BulletR";
- BulletType[BulletType["BulletG"] = 1] = "BulletG";
- })(BulletType = exports.BulletType || (exports.BulletType = {}));
- },{}],17:[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;
- },{}],18:[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":15,"./WXSdk":20}],19:[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;
- },{}],20:[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":12,"../game_logic/ViewManager":13,"./ShareModule":18,"./UserModel":19}],21:[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;
- },{}],22:[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 90 - 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;
- };
- // public static SetHuTuiList(list:Laya.List,data?,scrol:number=1,type:number=0){ //scrol 1:竖的 2横的
- // var arr=data?data:FYHD_Sdk.pushData;
- // list.selectEnable = false;
- // scrol==1?list.vScrollBarSkin = "":list.hScrollBarSkin = "";
- // list.renderHandler = Laya.Handler.create(this, this.updateItem, [type], false);
- // list.array = arr;
- // list.refresh();
- // }
- // private static updateItem(type,cell: Laya.Box, index: number){
- // var aditem=cell.getComponent(HuiTuiItem)as HuiTuiItem;
- // aditem.Refresh(type);
- // }
- // public static makeRandomArr(arrList,num){
- // if(num>arrList.length){
- // return;
- // }
- // var tempArr=arrList.slice(0);
- // var newArrList=[];
- // for(var i=0;i<num;i++){
- // var random=Math.floor(Math.random()*(tempArr.length-1));
- // var arr=tempArr[random];
- // tempArr.splice(random, 1);
- // newArrList.push(arr);
- // }
- // return newArrList;
- // }
- // public static CopyArr(o):any{
- // var arr=[];
- // for (let index = 0; index < o.length; index++) {
- // const element = o[index];
- // arr.push(element);
- // }
- // return arr;
- // }
- // public static ShowQianDao(): boolean {
- // let todayZero = new Date(UserModel.Instance.CurModel.ServerTime * 1000);
- // todayZero.setHours(0, 0, 0, 0);
- // if(!PlayerManager.Instance.sign)return true;
- // var lastTime = Number(PlayerManager.Instance.sign["sign_time"]) * 1000;
- // let lastSignTime = new Date(lastTime);
- // if (lastTime == 0) {
- // return true;
- // }
- // if (lastSignTime.valueOf() < todayZero.valueOf()) {
- // return true;
- // }
- // return false;
- // }
- Game_Tool.CreateText = function (content) {
- var curText = new Laya.Text;
- curText.width = 300;
- curText.height = 50;
- curText.align = "center";
- curText.valign = "middle";
- curText.font = "Microsoft YaHei";
- curText.fontSize = 35;
- curText.color = "#ff8e00";
- curText.bold = true;
- curText.font = "Microsoft YaHei";
- curText.text = content;
- curText.x = 60;
- curText.y = 10;
- Laya.stage.addChild(curText);
- console.log(curText);
- var tween = Laya.Tween.to(parent, { y: curText.y - 200 }, 1000, Laya.Ease.expoInOut, Laya.Handler.create(this, function () {
- tween.clear();
- curText.destroy();
- }), 100);
- };
- return Game_Tool;
- }());
- exports.default = Game_Tool;
- },{}],23:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var Tween = Laya.Tween;
- var SettingController_1 = require("../../game_logic/SettingController");
- var ImageRunTime = /** @class */ (function (_super) {
- __extends(ImageRunTime, _super);
- function ImageRunTime() {
- var _this = _super.call(this) || this;
- _this.scaleTime = 80;
- _this.clickId = false;
- //设置组件的中心点
- _this.anchorX = _this.anchorY = 0.5;
- _this.on(Laya.Event.MOUSE_DOWN, _this, _this.scaleSmall);
- _this.on(Laya.Event.MOUSE_UP, _this, _this.scaleBig);
- _this.on(Laya.Event.MOUSE_OUT, _this, _this.scaleBig);
- return _this;
- }
- ImageRunTime.prototype.scaleBig = function (e) {
- //变大还原的缓动效果
- if (!this.clickId)
- return;
- this.clickId = false;
- this.bigTween = Tween.to(this, { scaleX: 1, scaleY: 1 }, this.scaleTime);
- if (this._mclickHandler) {
- this._mclickHandler();
- }
- };
- ImageRunTime.prototype.scaleSmall = function (e) {
- //缩小至0.8的缓动效果
- SettingController_1.SettingController.Instance._Click();
- this.clickId = true;
- this.SmallTween = Tween.to(this, { scaleX: 0.8, scaleY: 0.8 }, this.scaleTime);
- };
- ImageRunTime.prototype.ClearRunTime = function () {
- if (this.bigTween) {
- this.bigTween.clear();
- }
- if (this.SmallTween) {
- this.SmallTween.clear();
- }
- this.off(Laya.Event.MOUSE_DOWN, this, this.scaleSmall);
- this.off(Laya.Event.MOUSE_UP, this, this.scaleBig);
- this.off(Laya.Event.MOUSE_OUT, this, this.scaleBig);
- this._mclickHandler = null;
- };
- return ImageRunTime;
- }(Laya.Image));
- exports.default = ImageRunTime;
- },{"../../game_logic/SettingController":12}],24:[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 Vector3 = Laya.Vector3;
- var GameController_1 = require("../game_logic/GameController");
- var game_ui = /** @class */ (function (_super) {
- __extends(game_ui, _super);
- function game_ui() {
- var _this = _super.call(this) || this;
- _this.isdown = false;
- _this.isexceed = 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;
- if (!GameController_1.GameController.Instance.gameStart || GameController_1.GameController.Instance.gameover)
- return;
- this.isdown = true;
- this.on(Laya.Event.MOUSE_MOVE, this, this.OnSlider);
- this.curMousePos = new Vector3(Laya.MouseManager.instance.mouseX, Laya.MouseManager.instance.mouseY);
- this.startPos = this.curMousePos.clone();
- this.MouseD();
- };
- game_ui.prototype.OnClickUp = function () {
- if (!this.isdown)
- return;
- if (!GameController_1.GameController.Instance.gameStart || GameController_1.GameController.Instance.gameover)
- return;
- this.isdown = false;
- this.off(Laya.Event.MOUSE_MOVE, this, this.OnSlider);
- this.endPos = this.curMousePos.clone();
- this.MouseU();
- };
- game_ui.prototype.OnSlider = function () {
- var MousePos = new Vector3(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 Vector3(0, -offestX * 0.01, 0);
- RoleController_1.RoleController.Instance.RoleRotation(rotateDir);
- this.curMousePos = new Vector3(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);
- };
- game_ui.prototype.MouseD = function () {
- var _this = this;
- this.isexceed = false;
- Laya.timer.once(500, this, function () {
- _this.isexceed = true;
- });
- };
- game_ui.prototype.MouseU = function () {
- var dis = Vector3.distance(this.startPos, this.endPos);
- if (dis > 30 || this.isexceed) {
- return;
- }
- else {
- GameController_1.GameController.Instance.Hit();
- }
- };
- return game_ui;
- }(layaMaxUI_1.ui.game_uiUI));
- exports.game_ui = game_ui;
- },{"../game_logic/GameController":5,"../game_logic/RoleController":11,"../game_module/EventManager":14,"../ui/layaMaxUI":26}],25:[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 ViewManager_1 = require("../game_logic/ViewManager");
- var GameController_1 = require("../game_logic/GameController");
- var main_ui = /** @class */ (function (_super) {
- __extends(main_ui, _super);
- function main_ui() {
- var _this = _super.call(this) || this;
- _this.resizeHander();
- EventManager_1.EventManager.on(Laya.Event.RESIZE, _this, _this.resizeHander);
- return _this;
- }
- main_ui.prototype.OnShow = function (data) {
- this.ButtonClickHandle();
- };
- main_ui.prototype.resizeHander = function () {
- this.height = Laya.stage.height;
- };
- main_ui.prototype.ButtonClickHandle = function () {
- this.start_btn._mclickHandler = function () {
- ViewManager_1.default.Instance.OpenView(ViewManager_1.ViewType.game_ui);
- GameController_1.GameController.Instance.GameStart();
- };
- };
- main_ui.prototype.OnClose = function () {
- this.start_btn.ClearRunTime();
- };
- return main_ui;
- }(layaMaxUI_1.ui.main_uiUI));
- exports.main_ui = main_ui;
- },{"../game_logic/GameController":5,"../game_logic/ViewManager":13,"../game_module/EventManager":14,"../ui/layaMaxUI":26}],26:[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": { "zOrder": 1, "width": 720, "height": 1280 }, "compId": 2, "loadList": [], "loadList3D": [] };
- return game_uiUI;
- }(Scene));
- ui.game_uiUI = game_uiUI;
- REG("ui.game_uiUI", game_uiUI);
- var main_uiUI = /** @class */ (function (_super) {
- __extends(main_uiUI, _super);
- function main_uiUI() {
- return _super.call(this) || this;
- }
- main_uiUI.prototype.createChildren = function () {
- _super.prototype.createChildren.call(this);
- this.createView(main_uiUI.uiView);
- };
- main_uiUI.uiView = { "type": "Scene", "props": { "zOrder": 1, "width": 720, "height": 1280 }, "compId": 2, "child": [{ "type": "Image", "props": { "y": 640, "x": 360, "var": "start_btn", "skin": "main_res/jiemian_xin_1_1.png", "runtime": "game_ui/RunTimeScript/ButtonRunTime.ts", "centerY": 0, "centerX": 0, "anchorY": 0.5, "anchorX": 0.5 }, "compId": 3 }], "loadList": ["main_res/jiemian_xin_1_1.png"], "loadList3D": [] };
- return main_uiUI;
- }(Scene));
- ui.main_uiUI = main_uiUI;
- REG("ui.main_uiUI", main_uiUI);
- })(ui = exports.ui || (exports.ui = {}));
- },{}]},{},[2])
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkQ6L0xheWFCb3gvTGF5YTIuMS4wYmVhdC9MYXlhQWlySURFX2JldGEvcmVzb3VyY2VzL2FwcC9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwic3JjL0dhbWVDb25maWcudHMiLCJzcmMvTWFpbi50cyIsInNyYy9nYW1lX2xvZ2ljL0J1bGxldC50cyIsInNyYy9nYW1lX2xvZ2ljL0J1bGxldENvbnRyb2xsZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9HYW1lQ29udHJvbGxlci50cyIsInNyYy9nYW1lX2xvZ2ljL0dhbWVTY2VuZUNvbnRyb2xsZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9Nb3N0ZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9QbGF5ZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9Qb29sX01hbmFnZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9Sb2xlLnRzIiwic3JjL2dhbWVfbG9naWMvUm9sZUNvbnRyb2xsZXIudHMiLCJzcmMvZ2FtZV9sb2dpYy9TZXR0aW5nQ29udHJvbGxlci50cyIsInNyYy9nYW1lX2xvZ2ljL1ZpZXdNYW5hZ2VyLnRzIiwic3JjL2dhbWVfbW9kdWxlL0V2ZW50TWFuYWdlci50cyIsInNyYy9nYW1lX21vZHVsZS9GWUhEX1Nkay50cyIsInNyYy9nYW1lX21vZHVsZS9HYW1lRGVmaW5lZC50cyIsInNyYy9nYW1lX21vZHVsZS9SZXNvdXJjZUxvYWQudHMiLCJzcmMvZ2FtZV9tb2R1bGUvU2hhcmVNb2R1bGUudHMiLCJzcmMvZ2FtZV9tb2R1bGUvVXNlck1vZGVsLnRzIiwic3JjL2dhbWVfbW9kdWxlL1dYU2RrLnRzIiwic3JjL2dhbWVfdG9vbC9EaWN0aW9uYXJ5LnRzIiwic3JjL2dhbWVfdG9vbC9HYW1lX1Rvb2wudHMiLCJzcmMvZ2FtZV91aS9SdW5UaW1lU2NyaXB0L0J1dHRvblJ1blRpbWUudHMiLCJzcmMvZ2FtZV91aS9nYW1lX3VpLnRzIiwic3JjL2dhbWVfdWkvbWFpbl91aS50cyIsInNyYy91aS9sYXlhTWF4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QSxDQUFDO1FBQ3ZCLGtDQUFjLEdBQWQ7WUFDSSxpQkFBTSxjQUFjLFdBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBTGMsZ0JBQU0sR0FBTSxFQUFDLE1BQU0sRUFBQyxPQUFPLEVBQUMsT0FBTyxFQUFDLEVBQUMsUUFBUSxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsR0FBRyxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUMsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsS0FBSyxFQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsOEJBQThCLEVBQUMsU0FBUyxFQUFDLHdDQUF3QyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsR0FBRyxFQUFDLFNBQVMsRUFBQyxHQUFHLEVBQUMsRUFBQyxRQUFRLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsQ0FBQztRQU1yWSxnQkFBQztLQVJELEFBUUMsQ0FSOEIsS0FBSyxHQVFuQztJQVJZLFlBQVMsWUFRckIsQ0FBQTtJQUNELEdBQUcsQ0FBQyxjQUFjLEVBQUMsU0FBUyxDQUFDLENBQUM7QUFDbEMsQ0FBQyxFQXBCYSxFQUFFLEdBQUYsVUFBRSxLQUFGLFVBQUUsUUFvQmYiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbiAgICB9O1xyXG59KSgpO1xyXG4oZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiLyoqVGhpcyBjbGFzcyBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBMYXlhQWlySURFLCBwbGVhc2UgZG8gbm90IG1ha2UgYW55IG1vZGlmaWNhdGlvbnMuICovXHJcbmltcG9ydCBCdXR0b25SdW5UaW1lIGZyb20gXCIuL2dhbWVfdWkvUnVuVGltZVNjcmlwdC9CdXR0b25SdW5UaW1lXCJcclxuLypcclxuKiDmuLjmiI/liJ3lp4vljJbphY3nva47XHJcbiovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVDb25maWd7XHJcbiAgICBzdGF0aWMgd2lkdGg6bnVtYmVyPTcyMDtcclxuICAgIHN0YXRpYyBoZWlnaHQ6bnVtYmVyPTEyODA7XHJcbiAgICBzdGF0aWMgc2NhbGVNb2RlOnN0cmluZz1cImZpeGVkd2lkdGhcIjtcclxuICAgIHN0YXRpYyBzY3JlZW5Nb2RlOnN0cmluZz1cIm5vbmVcIjtcclxuICAgIHN0YXRpYyBhbGlnblY6c3RyaW5nPVwibWlkZGxlXCI7XHJcbiAgICBzdGF0aWMgYWxpZ25IOnN0cmluZz1cImNlbnRlclwiO1xyXG4gICAgc3RhdGljIHN0YXJ0U2NlbmU6YW55PVwiZ2FtZV91aS5zY2VuZVwiO1xyXG4gICAgc3RhdGljIHNjZW5lUm9vdDpzdHJpbmc9XCJcIjtcclxuICAgIHN0YXRpYyBkZWJ1Zzpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIHN0YXQ6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBwaHlzaWNzRGVidWc6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBleHBvcnRTY2VuZVRvSnNvbjpib29sZWFuPXRydWU7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe31cclxuICAgIHN0YXRpYyBpbml0KCl7XHJcbiAgICAgICAgdmFyIHJlZzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XHJcbiAgICAgICAgcmVnKFwiZ2FtZV91aS9SdW5UaW1lU2NyaXB0L0J1dHRvblJ1blRpbWUudHNcIixCdXR0b25SdW5UaW1lKTtcclxuICAgIH1cclxufVxyXG5HYW1lQ29uZmlnLmluaXQoKTsiLCJpbXBvcnQgR2FtZUNvbmZpZyBmcm9tIFwiLi9HYW1lQ29uZmlnXCI7XHJcbmltcG9ydCBWaWV3TWFuYWdlciwgeyBWaWV3VHlwZSB9IGZyb20gXCIuL2dhbWVfbG9naWMvVmlld01hbmFnZXJcIjtcclxuaW1wb3J0IFJlc291cmNlTG9hZCBmcm9tIFwiLi9nYW1lX21vZHVsZS9SZXNvdXJjZUxvYWRcIjtcclxuaW1wb3J0IEdhbWVEZWZpbmVkIGZyb20gXCIuL2dhbWVfbW9kdWxlL0dhbWVEZWZpbmVkXCI7XHJcbmltcG9ydCB7IFdYU2RrIH0gZnJvbSBcIi4vZ2FtZV9tb2R1bGUvV1hTZGtcIjtcclxuaW1wb3J0IHsgRllIRF9TZGsgfSBmcm9tIFwiLi9nYW1lX21vZHVsZS9GWUhEX1Nka1wiO1xyXG5pbXBvcnQgQXNzZXRDb250cm9sbGVyIGZyb20gXCIuL2dhbWVfbG9naWMvQXNzZXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCBHYW1lU2NlbmVDb250cm9sbGVyIGZyb20gXCIuL2dhbWVfbG9naWMvR2FtZVNjZW5lQ29udHJvbGxlclwiO1xyXG5leHBvcnQgY2xhc3MgTWFpbiB7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgbm93cmF0aW86IG51bWJlcjtcclxuXHRwdWJsaWMgc3RhdGljIElzV3g6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRwdWJsaWMgc3RhdGljIFZSRSA9IFwiMS4wLjBcIjtcclxuXHRwdWJsaWMgc3RhdGljIENGRyA9IFwiQ0ZHXCI7XHJcblx0cHVibGljIHN0YXRpYyB3eFZhbHVlID0gXCJcIjtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdC8v5qC55o2uSURF6K6+572u5Yid5aeL5YyW5byV5pOOXHRcdFxyXG5cdFx0aWYgKHdpbmRvd1tcIkxheWEzRFwiXSkgTGF5YTNELmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQpO1xyXG5cdFx0ZWxzZSBMYXlhLmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQsIExheWFbXCJXZWJHTFwiXSk7XHJcblx0XHRMYXlhW1wiUGh5c2ljc1wiXSAmJiBMYXlhW1wiUGh5c2ljc1wiXS5lbmFibGUoKTtcclxuXHRcdExheWFbXCJEZWJ1Z1BhbmVsXCJdICYmIExheWFbXCJEZWJ1Z1BhbmVsXCJdLmVuYWJsZSgpO1xyXG5cdFx0TGF5YS5zdGFnZS5zY2FsZU1vZGUgPSBHYW1lQ29uZmlnLnNjYWxlTW9kZTtcclxuXHRcdExheWEuc3RhZ2Uuc2NyZWVuTW9kZSA9IEdhbWVDb25maWcuc2NyZWVuTW9kZTtcclxuXHRcdC8v5YW85a655b6u5L+h5LiN5pSv5oyB5Yqg6L29c2NlbmXlkI7nvIDlnLrmma9cclxuXHRcdExheWEuVVJMLmV4cG9ydFNjZW5lVG9Kc29uID0gR2FtZUNvbmZpZy5leHBvcnRTY2VuZVRvSnNvbjtcclxuXHJcblx0XHQvL+aJk+W8gOiwg+ivlemdouadv++8iOmAmui/h0lEReiuvue9ruiwg+ivleaooeW8j++8jOaIluiAhXVybOWcsOWdgOWinuWKoGRlYnVnPXRydWXlj4LmlbDvvIzlnYflj6/miZPlvIDosIPor5XpnaLmnb/vvIlcclxuXHRcdGlmIChHYW1lQ29uZmlnLmRlYnVnIHx8IExheWEuVXRpbHMuZ2V0UXVlcnlTdHJpbmcoXCJkZWJ1Z1wiKSA9PSBcInRydWVcIikgTGF5YS5lbmFibGVEZWJ1Z1BhbmVsKCk7XHJcblx0XHRpZiAoR2FtZUNvbmZpZy5waHlzaWNzRGVidWcgJiYgTGF5YVtcIlBoeXNpY3NEZWJ1Z0RyYXdcIl0pIExheWFbXCJQaHlzaWNzRGVidWdEcmF3XCJdLmVuYWJsZSgpO1xyXG5cdFx0aWYgKEdhbWVDb25maWcuc3RhdCkgTGF5YS5TdGF0LnNob3coKTtcclxuXHRcdExheWEuYWxlcnRHbG9iYWxFcnJvciA9IHRydWU7XHJcblx0XHRNYWluLm5vd3JhdGlvID0gTGF5YS5zdGFnZS53aWR0aCAvIExheWEuc3RhZ2UuaGVpZ2h0O1xyXG5cclxuXHRcdE1haW4uSXNXeCA9IExheWEuQnJvd3Nlci5vbldlaVhpbjtcclxuXHJcblx0XHRpZiAoTWFpbi5Jc1d4KSB7XHJcblx0XHRcdFdYU2RrLkluc3RhbmNlLmluaXQoKHNoYXJlVGlja2V0OiBzdHJpbmcsIHNoYXJlaWQ6IHN0cmluZywgc2NlbmU6IHN0cmluZywgYXBwaWQ6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdHRoaXMub25TaG93SGFuZGxlcihzaGFyZVRpY2tldCwgc2hhcmVpZCwgc2NlbmUsIGFwcGlkKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdEZZSERfU2RrLkluaXRTZGsoKTtcclxuXHRcdH1cclxuXHRcdC8v5r+A5rS76LWE5rqQ54mI5pys5o6n5Yi277yMdmVyc2lvbi5qc29u55SxSURF5Y+R5biD5Yqf6IO96Ieq5Yqo55Sf5oiQ77yM5aaC5p6c5rKh5pyJ5Lmf5LiN5b2x5ZON5ZCO57ut5rWB56iLXHJcblx0XHRMYXlhLlJlc291cmNlVmVyc2lvbi5lbmFibGUoXCJ2ZXJzaW9uLmpzb25cIiwgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCB0aGlzLm9uVmVyc2lvbkxvYWRlZCksIExheWEuUmVzb3VyY2VWZXJzaW9uLkZJTEVOQU1FX1ZFUlNJT04pO1xyXG5cdFx0dGhpcy5Jc05lZWRVcGRhdGUoKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBJc05lZWRVcGRhdGUoKSB7XHJcblx0XHRpZiAoIU1haW4uSXNXeCkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgdXBkYXRlTWFuYWdlciA9IExheWEuQnJvd3Nlci53aW5kb3cud3guZ2V0VXBkYXRlTWFuYWdlcigpO1xyXG5cdFx0dXBkYXRlTWFuYWdlci5vbkNoZWNrRm9yVXBkYXRlKGZ1bmN0aW9uIChyZXMpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCLmnIDmlrDniYjmnKw6XCIgKyByZXMuaGFzVXBkYXRlKTtcclxuXHRcdH1cclxuXHRcdCk7XHJcblx0XHR1cGRhdGVNYW5hZ2VyLm9uVXBkYXRlUmVhZHkoZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRMYXlhLkJyb3dzZXIud2luZG93Lnd4LnNob3dNb2RhbCh7XHJcblx0XHRcdFx0c2hvd0NhbmNlbDogZmFsc2UsXHJcblx0XHRcdFx0dGl0bGU6ICfmm7TmlrDmj5DnpLonLFxyXG5cdFx0XHRcdGNvbnRlbnQ6ICfmlrDniYjmnKzlt7Lnu4/lh4blpIflpb3vvIzmmK/lkKbph43lkK/lupTnlKjvvJ8nLFxyXG5cdFx0XHRcdHN1Y2Nlc3MocmVzKSB7XHJcblx0XHRcdFx0XHR1cGRhdGVNYW5hZ2VyLmFwcGx5VXBkYXRlKCk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRmYWlsKHJlcz8pIHtcclxuXHRcdFx0XHRcdHVwZGF0ZU1hbmFnZXIuYXBwbHlVcGRhdGUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG9uU2hvd0hhbmRsZXIoc2hhcmVUaWNrZXQ6IHN0cmluZywgc2hhcmVJZDogc3RyaW5nLCBzY2VuZTogc3RyaW5nLCBhcHBpZDogc3RyaW5nKSB7XHJcblx0XHRjb25zb2xlLmxvZyhcIltMT0ddOiDliIbkuqvov5vlhaU6IHNoYXJlVGlja2V0OlwiLCBzaGFyZVRpY2tldCwgXCIsIG9wZW5JZD1cIiwgc2hhcmVJZCwgXCIsIHNjZW5lPVwiLCBzY2VuZSk7XHJcblx0XHQvLyBpZiAoIU1haW4ubVNoYXJlUGVvcGxlU2NlbmUpIHtcclxuXHRcdC8vIFx0TWFpbi5tU2hhcmVQZW9wbGVTY2VuZSA9IHNjZW5lO1xyXG5cdFx0Ly8gfVxyXG5cdFx0Ly8gaWYgKCFNYWluLmFwcGlkKSB7XHJcblx0XHQvLyBcdE1haW4uYXBwaWQgPSBhcHBpZDtcclxuXHRcdC8vIH1cclxuXHRcdGlmIChzY2VuZSAhPSBudWxsICYmIHNjZW5lICE9IFwiXCIpIHtcclxuXHRcdFx0V1hTZGsuSW5zdGFuY2UuU2hhcmVTY2VuZSA9IHNjZW5lO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHNoYXJlSWQgIT0gbnVsbCAmJiBzaGFyZUlkICE9IFwiXCIpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coXCLorr7nva7liIbkuqtpZFwiICsgc2hhcmVJZCk7XHJcblx0XHRcdFdYU2RrLkluc3RhbmNlLnNldFNoYXJlSWQoc2hhcmVJZCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRvblZlcnNpb25Mb2FkZWQoKTogdm9pZCB7XHJcblx0XHQvL+a/gOa0u+Wkp+Wwj+WbvuaYoOWwhO+8jOWKoOi9veWwj+WbvueahOaXtuWAme+8jOWmguaenOWPkeeOsOWwj+WbvuWcqOWkp+WbvuWQiOmbhumHjOmdou+8jOWImeS8mOWFiOWKoOi9veWkp+WbvuWQiOmbhu+8jOiAjOS4jeaYr+Wwj+WbvlxyXG5cdFx0TGF5YS5BdGxhc0luZm9NYW5hZ2VyLmVuYWJsZShcImZpbGVjb25maWcuanNvblwiLCBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsIHRoaXMub25Db25maWdMb2FkZWQpKTtcclxuXHRcdExheWEuTW91c2VNYW5hZ2VyLm11bHRpVG91Y2hFbmFibGVkID0gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRvbkNvbmZpZ0xvYWRlZCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuTG9hZFVJKCk7XHJcblx0fVxyXG5cdExvYWRVSSgpIHtcclxuXHRcdFZpZXdNYW5hZ2VyLkluc3RhbmNlLk9wZW5WaWV3KFZpZXdUeXBlLm1haW5fdWkpO1xyXG5cdFx0R2FtZVNjZW5lQ29udHJvbGxlci5JbnN0YW5jZS5DcmVhdGVTY2VuZSgpO1xyXG5cdFx0XHQvL3RoaXMudGVzdCgpO1xyXG5cdH1cclxuXHJcblx0dGVzdCgpIHtcclxuXHRcdHZhciB2MT1uZXcgTGF5YS5WZWN0b3IzKC0zLDAsMSk7XHJcblx0XHR2YXIgdjI9bmV3IExheWEuVmVjdG9yMygwLDAsLTEpO1xyXG5cdFx0dmFyIHYzPW5ldyBMYXlhLlZlY3RvcjMoMCwwLDApO1xyXG5cdFx0TGF5YS5WZWN0b3IzLmNyb3NzKHYxLHYyLHYzKTtcclxuXHRcdGNvbnNvbGUubG9nKHYzKTtcclxuXHR9XHJcbn1cclxuLy/mv4DmtLvlkK/liqjnsbtcclxubmV3IE1haW4oKTtcclxuIiwiXHJcbmltcG9ydCBHYW1lRGVmaW5lZCwgeyBDaGVja1R5cGUsIEJ1bGxldFR5cGUgfSBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvR2FtZURlZmluZWRcIjtcclxuaW1wb3J0IFZlY3RvcjMgPSBMYXlhLlZlY3RvcjM7XHJcbmltcG9ydCBSYXkgPSBMYXlhLlJheTtcclxuaW1wb3J0IEhpdFJlc3VsdCA9IExheWEuSGl0UmVzdWx0O1xyXG5pbXBvcnQgR2FtZVNjZW5lQ29udHJvbGxlciBmcm9tIFwiLi9HYW1lU2NlbmVDb250cm9sbGVyXCI7XHJcbmltcG9ydCBCdWxsZXRDb250cm9sbGVyIGZyb20gXCIuL0J1bGxldENvbnRyb2xsZXJcIjtcclxuaW1wb3J0IFNwcml0ZTNEID0gTGF5YS5TcHJpdGUzRDtcclxuaW1wb3J0IFRyYW5zZm9ybTNEID0gTGF5YS5UcmFuc2Zvcm0zRDtcclxuaW1wb3J0IEdhbWVfVG9vbCBmcm9tIFwiLi4vZ2FtZV90b29sL0dhbWVfVG9vbFwiO1xyXG5pbXBvcnQgeyBFdmVudE1hbmFnZXIgfSBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvRXZlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IFJvbGUgfSBmcm9tIFwiLi9Sb2xlXCI7XHJcbmV4cG9ydCBjbGFzcyBCdWxsZXQgZXh0ZW5kcyBMYXlhLlNjcmlwdDNEIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdHJhbnNmb3JtOiBUcmFuc2Zvcm0zRDtcclxuICAgIHByaXZhdGUgc2VsZjogU3ByaXRlM0Q7XHJcbiAgICBvbkF3YWtlKCkge1xyXG4gICAgICAgIHRoaXMuc2VsZiA9IHRoaXMub3duZXIgYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtID0gdGhpcy5zZWxmLnRyYW5zZm9ybTtcclxuICAgICAgICB0aGlzLmZvcncgPSBuZXcgVmVjdG9yMygwLCAwLCAwKTtcclxuICAgICAgICB0aGlzLl9jb3JzcyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZm9ydzogVmVjdG9yMztcclxuICAgIHByaXZhdGUgX3JheTogUmF5O1xyXG4gICAgcHJpdmF0ZSBfaGl0OiBIaXRSZXN1bHQ7XHJcbiAgICBwcml2YXRlIGdvOiBTcHJpdGUzRDtcclxuICAgIHByaXZhdGUgZ29TOiBCdWxsZXQ7XHJcbiAgICBwcml2YXRlIF9jb3JzczogVmVjdG9yMztcclxuICAgIENyZWF0ZVJheShwb3M6IFZlY3RvcjMsIF9yb3RhdGlvbiwgX3R5cGU/KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmdvKSB7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKF90eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEJ1bGxldFR5cGUuQnVsbGV0RzpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdvID0gQnVsbGV0Q29udHJvbGxlci5JbnN0YW5jZS5DcmVhdGVCdWxsZXQoR2FtZURlZmluZWQucG9vbE5hbWUuYnVsbGV0Ryk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSBCdWxsZXRUeXBlLkJ1bGxldFI6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nbyA9IEJ1bGxldENvbnRyb2xsZXIuSW5zdGFuY2UuQ3JlYXRlQnVsbGV0KEdhbWVEZWZpbmVkLnBvb2xOYW1lLkJ1bGxldFIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBncyA9IHRoaXMuZ28uZ2V0Q29tcG9uZW50KEJ1bGxldCk7XHJcbiAgICAgICAgICAgIGlmICghZ3MpIHRoaXMuZ29TID0gdGhpcy5nby5hZGRDb21wb25lbnQoQnVsbGV0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdvLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ28udHJhbnNmb3JtLnBvc2l0aW9uID0gcG9zLmNsb25lKCk7XHJcbiAgICAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ucm90YXRpb25FdWxlciA9IF9yb3RhdGlvbjtcclxuICAgICAgICB0aGlzLmdvLnRyYW5zZm9ybS5yb3RhdGUgPSBfcm90YXRpb247XHJcbiAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0uZ2V0Rm9yd2FyZCh0aGlzLmZvcncpO1xyXG4gICAgICAgIHRoaXMuZm9ydyA9IG5ldyBWZWN0b3IzKC10aGlzLmZvcncueCwgLXRoaXMuZm9ydy55LCAtdGhpcy5mb3J3LnopO1xyXG4gICAgICAgIHZhciB0ZW1wID0gdGhpcy5mb3J3LmNsb25lKCk7XHJcbiAgICAgICAgVmVjdG9yMy5ub3JtYWxpemUodGVtcCwgdGVtcCk7XHJcbiAgICAgICAgcG9zLnggPSBwb3MueCArIHRlbXAueCAqIDAuMDE7XHJcbiAgICAgICAgcG9zLnkgPSBwb3MueSArIHRlbXAueSAqIDAuMDE7XHJcbiAgICAgICAgcG9zLnogPSBwb3MueiArIHRlbXAueiAqIDAuMDE7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fcmF5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JheSA9IG5ldyBSYXkocG9zLCB0aGlzLmZvcncpO1xyXG4gICAgICAgICAgICB0aGlzLl9oaXQgPSBuZXcgSGl0UmVzdWx0KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcmF5Lm9yaWdpbiA9IHBvcztcclxuICAgICAgICAgICAgdGhpcy5fcmF5LmRpcmVjdGlvbiA9IHRoaXMuZm9ydztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpc1MgPSBHYW1lU2NlbmVDb250cm9sbGVyLkluc3RhbmNlLmdhbWVfc2NlbmUucGh5c2ljc1NpbXVsYXRpb24ucmF5Q2FzdCh0aGlzLl9yYXksIHRoaXMuX2hpdCk7XHJcbiAgICAgICAgaWYgKGlzUykge1xyXG4gICAgICAgICAgICB2YXIgcG9pID0gdGhpcy5faGl0LnBvaW50O1xyXG4gICAgICAgICAgICB2YXIgZGlzID0gVmVjdG9yMy5kaXN0YW5jZShwb3MsIHBvaSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ28udHJhbnNmb3JtLmxvY2FsU2NhbGVaID0gZGlzO1xyXG4gICAgICAgICAgICB2YXIgb3RoZXIgPSB0aGlzLl9oaXQuY29sbGlkZXIub3duZXIgYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgIGlmIChvdGhlci5sYXllciA9PSBHYW1lRGVmaW5lZC5wbGF5ZXJfbGF5ZXIgfHwgb3RoZXIubGF5ZXIgPT0gR2FtZURlZmluZWQubW9zdGVyX2xheWVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQb3MgPSBwb3M7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBSb3RhdGlvbiA9IF9yb3RhdGlvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMuU2V0VGFyKG90aGVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29TLlNldE5leHROb3RBY3RpdmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuUmVtb3ZlVGFyKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9yID0gdGhpcy5faGl0Lm5vcm1hbDtcclxuICAgICAgICAgICAgICAgIG5vci54ID0gTWF0aC5hYnMobm9yLngpIDwgMC4wMDEgPyAwIDogbm9yLng7XHJcbiAgICAgICAgICAgICAgICBub3IueSA9IE1hdGguYWJzKG5vci55KSA8IDAuMDAxID8gMCA6IG5vci55O1xyXG4gICAgICAgICAgICAgICAgbm9yLnogPSBNYXRoLmFicyhub3IueikgPCAwLjAwMSA/IDAgOiBub3IuejtcclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIFZlY3RvcjMuY3Jvc3ModGhpcy5mb3J3LCBub3IsIHRoaXMuX2NvcnNzKTsvL+Wkp+S6jjDlnKjlt6bmlrkg5bCP5LqOMOWcqOWPs+aWuVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYSA9IEdhbWVfVG9vbC5nZXRSZWZsZWN0QW5nKHRoaXMuZm9ydyk7XHJcbiAgICAgICAgICAgICAgICAvLyBMYXlhLlF1YXRlcm5pb24uXHJcbiAgICAgICAgICAgICAgICB2YXIgYW5nID0gdGhpcy5nby5fdHJhbnNmb3JtLnJvdGF0aW9uRXVsZXIuY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NvcnNzLnkgPj0gMCA/IGFuZy55ID0gYW5nLnkgKyAyICogYSA6IGFuZy55ID0gYW5nLnkgLSAyICogYTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgYWI9bmV3IExheWEuUXVhdGVybmlvbigpO1xyXG4gICAgICAgICAgICAgICAgLy8gTGF5YS5RdWF0ZXJuaW9uLmNyZWF0ZUZyb21BeGlzQW5nbGUodGhpcy5mb3J3LC1hLGFiKVxyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5nb1MuQ3JlYXRlUmF5KHBvaSwgYWIsIEJ1bGxldFR5cGUuQnVsbGV0Ryk7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZ29TLkNyZWF0ZVJheShwb2ksIGFuZywgX3R5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5SZW1vdmVUYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ubG9jYWxTY2FsZVogPSA1MDtcclxuICAgICAgICAgICAgdGhpcy5nb1MuU2V0TmV4dE5vdEFjdGl2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBTZXROZXh0Tm90QWN0aXZlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmdvKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ28uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdvUykgdGhpcy5nb1MuU2V0TmV4dE5vdEFjdGl2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBIaXRUYXI6IFNwcml0ZTNEO1xyXG4gICAgcHJpdmF0ZSBSZW1vdmVUYXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuSGl0VGFyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuSGl0VGFyID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIFNldFRhcih0YXIpIHtcclxuICAgICAgICB0aGlzLkhpdFRhciA9IHRhcjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSB0ZW1wUG9zOiBWZWN0b3IzO1xyXG4gICAgcHJpdmF0ZSB0ZW1wUm90YXRpb246IGFueTtcclxuICAgIHByaXZhdGUgSGl0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLkhpdFRhcikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5IaXRUYXIubGF5ZXIgPT0gR2FtZURlZmluZWQucGxheWVyX2xheWVyIHx8IHRoaXMuSGl0VGFyLmxheWVyID09IEdhbWVEZWZpbmVkLm1vc3Rlcl9sYXllcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIHIgPSB0aGlzLkhpdFRhci5nZXRDb21wb25lbnQoUm9sZSkgYXMgUm9sZTtcclxuICAgICAgICAgICAgICAgIHIuSGl0RWQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuQ3JlYXRlUmF5KHRoaXMudGVtcFBvcywgdGhpcy50ZW1wUm90YXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uRW5hYmxlKCkge1xyXG4gICAgICAgIEV2ZW50TWFuYWdlci5vbihHYW1lRGVmaW5lZC5IaXRFdmVudCwgdGhpcywgdGhpcy5IaXQpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRGlzYWJsZSgpIHtcclxuICAgICAgICBFdmVudE1hbmFnZXIub2ZmKEdhbWVEZWZpbmVkLkhpdEV2ZW50LCB0aGlzLCB0aGlzLkhpdCk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgU3ByaXRlM0QgPSBMYXlhLlNwcml0ZTNEO1xyXG5pbXBvcnQgeyBQb29sX01hbmFnZXIgfSBmcm9tIFwiLi9Qb29sX01hbmFnZXJcIjtcclxuaW1wb3J0IEdhbWVEZWZpbmVkIGZyb20gXCIuLi9nYW1lX21vZHVsZS9HYW1lRGVmaW5lZFwiO1xyXG5pbXBvcnQgR2FtZVNjZW5lQ29udHJvbGxlciBmcm9tIFwiLi9HYW1lU2NlbmVDb250cm9sbGVyXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1bGxldENvbnRyb2xsZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IEJ1bGxldENvbnRyb2xsZXI7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBCdWxsZXRDb250cm9sbGVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZSB8fCAodGhpcy5pbnN0YW5jZSA9IG5ldyBCdWxsZXRDb250cm9sbGVyKCkpO1xyXG4gICAgfVxyXG4gICAvLyBwcml2YXRlIGJ1bGxldFByZWY6IFNwcml0ZTNEO1xyXG4gICAgcHVibGljIGluaXQoYnVsbGV0OiBTcHJpdGUzRCxwb29sTmFtZTpzdHJpbmcpIHtcclxuICAgICAgICBidWxsZXQucmVtb3ZlU2VsZigpO1xyXG4gICAgICAvLyAgdGhpcy5idWxsZXRQcmVmID0gYnVsbGV0O1xyXG4gICAgICAgIFBvb2xfTWFuYWdlci5JbnN0YW5jZS5Jbml0RGF0YShwb29sTmFtZSwgYnVsbGV0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1bGxldDogU3ByaXRlM0Q7XHJcbiAgICBwdWJsaWMgQ3JlYXRlQnVsbGV0KGJ1bGxldE5hbWUpOiBTcHJpdGUzRCB7XHJcbiAgICAgICAgLy9pZiAodGhpcy5idWxsZXQpIHJldHVybiB0aGlzLmJ1bGxldDtcclxuICAgICAgICB2YXIgZ28gPSBQb29sX01hbmFnZXIuSW5zdGFuY2UuU2V0QWN0aXZlT2JqZWN0KGJ1bGxldE5hbWUpO1xyXG4gICAgICAgIEdhbWVTY2VuZUNvbnRyb2xsZXIuSW5zdGFuY2UuZ2FtZV9zY2VuZS5hZGRDaGlsZChnbyk7XHJcbiAgICAgICAvLyB0aGlzLmJ1bGxldCA9IGdvO1xyXG4gICAgICAgIHJldHVybiBnbztcclxuICAgIH1cclxuXHJcbn0iLCJpbXBvcnQgeyBFdmVudE1hbmFnZXIgfSBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvRXZlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCBHYW1lRGVmaW5lZCBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvR2FtZURlZmluZWRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBHYW1lQ29udHJvbGxlciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YXNuY2U6IEdhbWVDb250cm9sbGVyO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogR2FtZUNvbnRyb2xsZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3Rhc25jZSB8fCAodGhpcy5pbnN0YXNuY2UgPSBuZXcgR2FtZUNvbnRyb2xsZXIoKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBpc2hpdCA9IGZhbHNlO1xyXG4gICAgcHVibGljIEhpdCgpIHtcclxuICAgICAgICBFdmVudE1hbmFnZXIuZXZlbnQoR2FtZURlZmluZWQuSGl0RXZlbnQpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgZ2FtZVN0YXJ0ID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZ2FtZW92ZXIgPSB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgcHVibGljIEdhbWVTdGFydCgpIHtcclxuICAgICAgICB0aGlzLmdhbWVTdGFydCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5nYW1lb3ZlciA9IGZhbHNlO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IFJlc291cmNlTG9hZCBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvUmVzb3VyY2VMb2FkXCI7XHJcbmltcG9ydCBTY2VuZTNEID0gTGF5YS5TY2VuZTNEO1xyXG5pbXBvcnQgQnVsbGV0Q29udHJvbGxlciBmcm9tIFwiLi9CdWxsZXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7IFJvbGVDb250cm9sbGVyIH0gZnJvbSBcIi4vUm9sZUNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IEdhbWVEZWZpbmVkIGZyb20gXCIuLi9nYW1lX21vZHVsZS9HYW1lRGVmaW5lZFwiO1xyXG5pbXBvcnQgU3ByaXRlM0Q9TGF5YS5TcHJpdGUzRDtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FtZVNjZW5lQ29udHJvbGxlciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogR2FtZVNjZW5lQ29udHJvbGxlcjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IEdhbWVTY2VuZUNvbnRyb2xsZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlIHx8ICh0aGlzLmluc3RhbmNlID0gbmV3IEdhbWVTY2VuZUNvbnRyb2xsZXIoKSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBnYW1lX3NjZW5lOiBTY2VuZTNEO1xyXG4gIFxyXG4gICAgcHVibGljIENyZWF0ZVNjZW5lKCkge1xyXG4gICAgICAgIFJlc291cmNlTG9hZC5Mb2FkUmVzb3VyY2UoW0dhbWVEZWZpbmVkLmdhbWVfc2NlbmVfcGF0aF0sICgpID0+IHtcclxuICAgICAgICAgICAgdmFyIHQgPSBMYXlhLmxvYWRlci5nZXRSZXMoR2FtZURlZmluZWQuZ2FtZV9zY2VuZV9wYXRoKSBhcyBTY2VuZTNEO1xyXG4gICAgICAgICAgICBMYXlhLnN0YWdlLmFkZENoaWxkKHQpO1xyXG4gICAgICAgICAgICB0aGlzLmdhbWVfc2NlbmUgPSB0O1xyXG5cclxuICAgICAgICAgICAgdmFyIF9idWxsZXRHID0gdC5nZXRDaGlsZEJ5TmFtZShcImJ1bGxldEdcIikgYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgIHZhciBfYnVsbGV0Uj10LmdldENoaWxkQnlOYW1lKFwiYnVsbGV0UlwiKWFzIFNwcml0ZTNEO1xyXG4gICAgICAgICAgICBCdWxsZXRDb250cm9sbGVyLkluc3RhbmNlLmluaXQoX2J1bGxldEcsR2FtZURlZmluZWQucG9vbE5hbWUuYnVsbGV0Ryk7XHJcbiAgICAgICAgICAgIEJ1bGxldENvbnRyb2xsZXIuSW5zdGFuY2UuaW5pdChfYnVsbGV0UixHYW1lRGVmaW5lZC5wb29sTmFtZS5CdWxsZXRSKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHZhciBfcm9sZTEgPSB0LmdldENoaWxkQnlOYW1lKFwicm9sZTFcIikgYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgIC8vIHZhciBfcm9sZTIgPSB0LmdldENoaWxkQnlOYW1lKFwicm9sZTJcIikgYXMgU3ByaXRlM0Q7XHJcblxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gdmFyIF9tb3N0ZXIxID0gdC5nZXRDaGlsZEJ5TmFtZShcIm1vc3RlcjFcIikgYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgIC8vIHZhciBfbW9zdGVyMj0gdC5nZXRDaGlsZEJ5TmFtZShcIm1vc3RlcjJcIikgYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIHZhciBwbGF5ZXJzPXQuZ2V0Q2hpbGRCeU5hbWUoXCJQbGF5ZXJzXCIpYXMgU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgIHZhciBtb3N0ZXJzPXQuZ2V0Q2hpbGRCeU5hbWUoXCJNb3N0ZXJzXCIpYXMgU3ByaXRlM0Q7XHJcblxyXG4gICAgICAgICAgICBSb2xlQ29udHJvbGxlci5JbnN0YW5jZS5pbml0UGxheWVyKHBsYXllcnMuX2NoaWxkcmVuKTtcclxuXHJcbiAgICAgICAgICAgIFJvbGVDb250cm9sbGVyLkluc3RhbmNlLmluaXRNb3N0ZXIobW9zdGVycy5fY2hpbGRyZW4pO1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgICBSb2xlQ29udHJvbGxlci5JbnN0YW5jZS5DcmVhdGVSYXkoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbn0iLCJcclxuaW1wb3J0IEdhbWVEZWZpbmVkLCB7IENoZWNrVHlwZSwgQnVsbGV0VHlwZSB9IGZyb20gXCIuLi9nYW1lX21vZHVsZS9HYW1lRGVmaW5lZFwiO1xyXG5pbXBvcnQgeyBSb2xlIH0gZnJvbSBcIi4vUm9sZVwiO1xyXG5pbXBvcnQgVmVjdG9yMz1MYXlhLlZlY3RvcjM7XHJcbmltcG9ydCBSYXk9TGF5YS5SYXk7XHJcbmltcG9ydCBIaXRSZXN1bHQ9TGF5YS5IaXRSZXN1bHQ7XHJcbmltcG9ydCBTcHJpdGUzRD1MYXlhLlNwcml0ZTNEXHJcbmltcG9ydCB7IEJ1bGxldCB9IGZyb20gXCIuL0J1bGxldFwiO1xyXG5pbXBvcnQgQnVsbGV0Q29udHJvbGxlciBmcm9tIFwiLi9CdWxsZXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCBHYW1lU2NlbmVDb250cm9sbGVyIGZyb20gXCIuL0dhbWVTY2VuZUNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IEdhbWVfVG9vbCBmcm9tIFwiLi4vZ2FtZV90b29sL0dhbWVfVG9vbFwiO1xyXG5pbXBvcnQgeyBFdmVudE1hbmFnZXIgfSBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvRXZlbnRNYW5hZ2VyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTW9zdGVyIGV4dGVuZHMgUm9sZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQXdha2UoKSB7XHJcbiAgICAgICAgc3VwZXIub25Bd2FrZSgpO1xyXG4gICAgICAgIHRoaXMuX3R5cGUgPSBDaGVja1R5cGUuTW9zdGVyO1xyXG4gICAgICAgIHRoaXMuZm9ydyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgICAgIHRoaXMuX2NvcnNzID0gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XHJcbiAgICAgICAgdGhpcy5fYnVsbGV0UG9zID0gdGhpcy5zZWxmLmdldENoaWxkQnlOYW1lKFwiYnVsbGV0UG9zXCIpIGFzIFNwcml0ZTNEO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZm9ydzogVmVjdG9yMztcclxuICAgIHByaXZhdGUgX3JheTogUmF5O1xyXG4gICAgcHJpdmF0ZSBfaGl0OiBIaXRSZXN1bHQ7XHJcblxyXG4gICAgcHJpdmF0ZSBfY29yc3M6IFZlY3RvcjM7XHJcblxyXG4gICAgcHJpdmF0ZSBnbzogU3ByaXRlM0Q7XHJcbiAgICBwcml2YXRlIGdvUzogQnVsbGV0O1xyXG4gICAgQ3JlYXRlUmF5KCkge1xyXG4gICAgICAgIHRoaXMuX3RyYW5zZm9ybS5nZXRGb3J3YXJkKHRoaXMuZm9ydyk7XHJcbiAgICAgICAgdGhpcy5mb3J3ID0gbmV3IFZlY3RvcjMoLXRoaXMuZm9ydy54LCAtdGhpcy5mb3J3LnksIC10aGlzLmZvcncueik7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9yYXkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmF5ID0gbmV3IFJheSh0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uLCB0aGlzLmZvcncpO1xyXG4gICAgICAgICAgICB0aGlzLl9oaXQgPSBuZXcgSGl0UmVzdWx0KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcmF5Lm9yaWdpbiA9IHRoaXMuX2J1bGxldFBvcy50cmFuc2Zvcm0ucG9zaXRpb247XHJcbiAgICAgICAgICAgIHRoaXMuX3JheS5kaXJlY3Rpb24gPSB0aGlzLmZvcnc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5nbykge1xyXG4gICAgICAgICAgICB0aGlzLmdvID0gQnVsbGV0Q29udHJvbGxlci5JbnN0YW5jZS5DcmVhdGVCdWxsZXQoR2FtZURlZmluZWQucG9vbE5hbWUuQnVsbGV0Uik7XHJcbiAgICAgICAgICAgIHZhciBncyA9IHRoaXMuZ28uZ2V0Q29tcG9uZW50KEJ1bGxldCk7XHJcbiAgICAgICAgICAgIGlmICghZ3MpIHRoaXMuZ29TID0gdGhpcy5nby5hZGRDb21wb25lbnQoQnVsbGV0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ucG9zaXRpb24gPSB0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uO1xyXG4gICAgICAgIHRoaXMuZ28udHJhbnNmb3JtLnJvdGF0aW9uID0gdGhpcy5fdHJhbnNmb3JtLnJvdGF0aW9uO1xyXG4gICAgICAgIHZhciBpc1MgPSBHYW1lU2NlbmVDb250cm9sbGVyLkluc3RhbmNlLmdhbWVfc2NlbmUucGh5c2ljc1NpbXVsYXRpb24ucmF5Q2FzdCh0aGlzLl9yYXksIHRoaXMuX2hpdCk7XHJcbiAgICAgICAgaWYgKGlzUykge1xyXG4gICAgICAgICAgICB2YXIgcG9pID0gdGhpcy5faGl0LnBvaW50O1xyXG4gICAgICAgICAgICB2YXIgZGlzID0gVmVjdG9yMy5kaXN0YW5jZSh0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uLCBwb2kpO1xyXG4gICAgICAgICAgICB0aGlzLmdvLnRyYW5zZm9ybS5sb2NhbFNjYWxlWiA9IGRpcztcclxuXHJcbiAgICAgICAgICAgIHZhciBvdGhlciA9IHRoaXMuX2hpdC5jb2xsaWRlci5vd25lciBhcyBTcHJpdGUzRDtcclxuICAgICAgICAgICAgaWYgKG90aGVyLmxheWVyID09IEdhbWVEZWZpbmVkLnBsYXllcl9sYXllciB8fCBvdGhlci5sYXllciA9PSBHYW1lRGVmaW5lZC5tb3N0ZXJfbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuU2V0VGFyKG90aGVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29TLlNldE5leHROb3RBY3RpdmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuUmVtb3ZlVGFyKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9yID0gdGhpcy5faGl0Lm5vcm1hbDtcclxuICAgICAgICAgICAgICAgIG5vci54ID0gTWF0aC5hYnMobm9yLngpIDwgMC4wMDEgPyAwIDogbm9yLng7XHJcbiAgICAgICAgICAgICAgICBub3IueSA9IE1hdGguYWJzKG5vci55KSA8IDAuMDAxID8gMCA6IG5vci55O1xyXG4gICAgICAgICAgICAgICAgbm9yLnogPSBNYXRoLmFicyhub3IueikgPCAwLjAwMSA/IDAgOiBub3IuejtcclxuICAgICAgICAgICAgICAgIFZlY3RvcjMuY3Jvc3ModGhpcy5mb3J3LCBub3IsIHRoaXMuX2NvcnNzKTsvL+Wkp+S6jjDlnKjlt6bmlrkg5bCP5LqOMOWcqOWPs+aWuVxyXG4gICAgICAgICAgICAgICAgdmFyIGEgPSBHYW1lX1Rvb2wuZ2V0UmVmbGVjdEFuZyh0aGlzLmZvcncpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFuZyA9IHRoaXMuX3RyYW5zZm9ybS5yb3RhdGlvbkV1bGVyLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb3Jzcy55ID49IDAgPyBhbmcueSA9IGFuZy55ICsgMiAqIGEgOiBhbmcueSA9IGFuZy55IC0gMiAqIGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvUy5DcmVhdGVSYXkocG9pLCBhbmcsQnVsbGV0VHlwZS5CdWxsZXRSKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuUmVtb3ZlVGFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ28udHJhbnNmb3JtLmxvY2FsU2NhbGVaID0gNTA7XHJcbiAgICAgICAgICAgIHRoaXMuZ29TLlNldE5leHROb3RBY3RpdmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgUm90YXRpb25TZWxmKHJvdGE6IFZlY3RvcjMpIHtcclxuICAgICAgICB0aGlzLl90cmFuc2Zvcm0ucm90YXRlKHJvdGEpO1xyXG4gICAgICAgIHRoaXMuQ3JlYXRlUmF5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgU2V0TmV4dE5vdEFjdGl2ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5nbykge1xyXG4gICAgICAgICAgICB0aGlzLmdvLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5nb1MpIHRoaXMuZ29TLlNldE5leHROb3RBY3RpdmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgSGl0VGFyOlNwcml0ZTNEO1xyXG4gICAgcHJpdmF0ZSBSZW1vdmVUYXIoKXtcclxuICAgICAgICBpZih0aGlzLkhpdFRhcil7XHJcbiAgICAgICAgICAgIHRoaXMuSGl0VGFyPW51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBTZXRUYXIodGFyKXtcclxuICAgICAgICB0aGlzLkhpdFRhcj10YXI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIEhpdCgpe1xyXG4gICAgICAgIGlmKHRoaXMuSGl0VGFyKXtcclxuICAgICAgICAgICAgLy9HYW1lX1Rvb2wuQ3JlYXRlVGV4dCh0aGlzLkhpdFRhci5uYW1lK1wi6KKr5Ye75p2AIVwiKTtcclxuICAgICAgICAgICAgaWYoIHRoaXMuSGl0VGFyLmxheWVyID09IEdhbWVEZWZpbmVkLnBsYXllcl9sYXllciB8fCAgdGhpcy5IaXRUYXIubGF5ZXIgPT0gR2FtZURlZmluZWQubW9zdGVyX2xheWVyKXtcclxuICAgICAgICAgICAgICB2YXIgcj0gIHRoaXMuSGl0VGFyLmdldENvbXBvbmVudChSb2xlKWFzIFJvbGU7XHJcbiAgICAgICAgICAgICAgci5IaXRFZCgpO1xyXG4gICAgICAgICAgICAgdGhpcy5DcmVhdGVSYXkoKTtcclxuICAgICAgICAgICAgLy8gIHRoaXMuQ3JlYXRlUmF5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgLy8gRXZlbnRNYW5hZ2VyLm9mZihHYW1lRGVmaW5lZC5IaXRFdmVudCx0aGlzLCB0aGlzLkhpdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgb25FbmFibGUoKXtcclxuICAgICAgICBFdmVudE1hbmFnZXIub24oR2FtZURlZmluZWQuSGl0RXZlbnQsdGhpcywgdGhpcy5IaXQpO1xyXG4gICAgICAgIHRoaXMuX2lzaGl0ZWQ9ZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgb25EaXNhYmxlKCl7XHJcbiAgICAgICAgRXZlbnRNYW5hZ2VyLm9mZihHYW1lRGVmaW5lZC5IaXRFdmVudCx0aGlzLCB0aGlzLkhpdCk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgeyBSb2xlIH0gZnJvbSBcIi4vUm9sZVwiO1xyXG5pbXBvcnQgR2FtZURlZmluZWQsIHsgQ2hlY2tUeXBlLCBCdWxsZXRUeXBlIH0gZnJvbSBcIi4uL2dhbWVfbW9kdWxlL0dhbWVEZWZpbmVkXCI7XHJcbmltcG9ydCBWZWN0b3IzID0gTGF5YS5WZWN0b3IzO1xyXG5pbXBvcnQgUmF5ID0gTGF5YS5SYXk7XHJcbmltcG9ydCBIaXRSZXN1bHQgPSBMYXlhLkhpdFJlc3VsdDtcclxuaW1wb3J0IEdhbWVTY2VuZUNvbnRyb2xsZXIgZnJvbSBcIi4vR2FtZVNjZW5lQ29udHJvbGxlclwiO1xyXG5pbXBvcnQgQnVsbGV0Q29udHJvbGxlciBmcm9tIFwiLi9CdWxsZXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCBTcHJpdGUzRCA9IExheWEuU3ByaXRlM0Q7XHJcbmltcG9ydCB7IEJ1bGxldCB9IGZyb20gXCIuL0J1bGxldFwiO1xyXG5pbXBvcnQgR2FtZV9Ub29sIGZyb20gXCIuLi9nYW1lX3Rvb2wvR2FtZV9Ub29sXCI7XHJcbmltcG9ydCB7IEV2ZW50TWFuYWdlciB9IGZyb20gXCIuLi9nYW1lX21vZHVsZS9FdmVudE1hbmFnZXJcIjtcclxuZXhwb3J0IGNsYXNzIFBsYXllciBleHRlbmRzIFJvbGUge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkF3YWtlKCkge1xyXG4gICAgICAgIHN1cGVyLm9uQXdha2UoKTtcclxuICAgICAgICB0aGlzLl90eXBlID0gQ2hlY2tUeXBlLlBsYXllcjtcclxuICAgICAgICB0aGlzLmZvcncgPSBuZXcgVmVjdG9yMygwLCAwLCAwKTtcclxuICAgICAgICB0aGlzLl9jb3JzcyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgICAgIHRoaXMuX2J1bGxldFBvcyA9IHRoaXMuc2VsZi5nZXRDaGlsZEJ5TmFtZShcImJ1bGxldFBvc1wiKSBhcyBTcHJpdGUzRDtcclxuICAgIH1cclxuICAgIGlkaGl0ID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBmb3J3OiBWZWN0b3IzO1xyXG4gICAgcHJpdmF0ZSBfcmF5OiBSYXk7XHJcbiAgICBwcml2YXRlIF9oaXQ6IEhpdFJlc3VsdDtcclxuXHJcbiAgICBwcml2YXRlIF9jb3JzczogVmVjdG9yMztcclxuXHJcbiAgICBwdWJsaWMgZ286IFNwcml0ZTNEO1xyXG4gICAgcHVibGljIGdvUzogQnVsbGV0O1xyXG4gICAgQ3JlYXRlUmF5KCkge1xyXG4gICAgICAgIHRoaXMuX3RyYW5zZm9ybS5nZXRGb3J3YXJkKHRoaXMuZm9ydyk7XHJcbiAgICAgICAgdGhpcy5mb3J3ID0gbmV3IFZlY3RvcjMoLXRoaXMuZm9ydy54LCAtdGhpcy5mb3J3LnksIC10aGlzLmZvcncueik7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9yYXkpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmF5ID0gbmV3IFJheSh0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uLCB0aGlzLmZvcncpO1xyXG4gICAgICAgICAgICB0aGlzLl9oaXQgPSBuZXcgSGl0UmVzdWx0KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcmF5Lm9yaWdpbiA9IHRoaXMuX2J1bGxldFBvcy50cmFuc2Zvcm0ucG9zaXRpb247XHJcbiAgICAgICAgICAgIHRoaXMuX3JheS5kaXJlY3Rpb24gPSB0aGlzLmZvcnc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5nbykge1xyXG4gICAgICAgICAgICB0aGlzLmdvID0gQnVsbGV0Q29udHJvbGxlci5JbnN0YW5jZS5DcmVhdGVCdWxsZXQoR2FtZURlZmluZWQucG9vbE5hbWUuYnVsbGV0Ryk7XHJcbiAgICAgICAgICAgIHZhciBncyA9IHRoaXMuZ28uZ2V0Q29tcG9uZW50KEJ1bGxldCk7XHJcbiAgICAgICAgICAgIGlmICghZ3MpIHRoaXMuZ29TID0gdGhpcy5nby5hZGRDb21wb25lbnQoQnVsbGV0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ucG9zaXRpb24gPSB0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uO1xyXG4gICAgICAgIHRoaXMuZ28udHJhbnNmb3JtLnJvdGF0aW9uID0gdGhpcy5fdHJhbnNmb3JtLnJvdGF0aW9uO1xyXG4gICAgICAgIHZhciBpc1MgPSBHYW1lU2NlbmVDb250cm9sbGVyLkluc3RhbmNlLmdhbWVfc2NlbmUucGh5c2ljc1NpbXVsYXRpb24ucmF5Q2FzdCh0aGlzLl9yYXksIHRoaXMuX2hpdCk7XHJcbiAgICAgICAgaWYgKGlzUykge1xyXG4gICAgICAgICAgICB2YXIgcG9pID0gdGhpcy5faGl0LnBvaW50O1xyXG4gICAgICAgICAgICB2YXIgZGlzID0gVmVjdG9yMy5kaXN0YW5jZSh0aGlzLl9idWxsZXRQb3MudHJhbnNmb3JtLnBvc2l0aW9uLCBwb2kpO1xyXG4gICAgICAgICAgICB0aGlzLmdvLnRyYW5zZm9ybS5sb2NhbFNjYWxlWiA9IGRpcztcclxuXHJcbiAgICAgICAgICAgIHZhciBvdGhlciA9IHRoaXMuX2hpdC5jb2xsaWRlci5vd25lciBhcyBTcHJpdGUzRDtcclxuICAgICAgICAgICAgaWYgKG90aGVyLmxheWVyID09IEdhbWVEZWZpbmVkLnBsYXllcl9sYXllciB8fCBvdGhlci5sYXllciA9PSBHYW1lRGVmaW5lZC5tb3N0ZXJfbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuU2V0VGFyKG90aGVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29TLlNldE5leHROb3RBY3RpdmUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuUmVtb3ZlVGFyKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9yID0gdGhpcy5faGl0Lm5vcm1hbDtcclxuICAgICAgICAgICAgICAgIG5vci54ID0gTWF0aC5hYnMobm9yLngpIDwgMC4wMDEgPyAwIDogbm9yLng7XHJcbiAgICAgICAgICAgICAgICBub3IueSA9IE1hdGguYWJzKG5vci55KSA8IDAuMDAxID8gMCA6IG5vci55O1xyXG4gICAgICAgICAgICAgICAgbm9yLnogPSBNYXRoLmFicyhub3IueikgPCAwLjAwMSA/IDAgOiBub3IuejtcclxuICAgICAgICAgICAgICAgIFZlY3RvcjMuY3Jvc3ModGhpcy5mb3J3LCBub3IsIHRoaXMuX2NvcnNzKTsvL+Wkp+S6jjDlnKjlt6bmlrkg5bCP5LqOMOWcqOWPs+aWuVxyXG4gICAgICAgICAgICAgICAgdmFyIGEgPSBHYW1lX1Rvb2wuZ2V0UmVmbGVjdEFuZyh0aGlzLmZvcncpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGFuZyA9IHRoaXMuX3RyYW5zZm9ybS5yb3RhdGlvbkV1bGVyLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb3Jzcy55ID49IDAgPyBhbmcueSA9IGFuZy55ICsgMiAqIGEgOiBhbmcueSA9IGFuZy55IC0gMiAqIGE7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vIHZhciB2MT1uZXcgVmVjdG9yMygwLjgsMCwwLjYpOyAgLy/lkJHph48xIFxyXG4gICAgICAgICAgICAgICAgLy8gdmFyIG5vcj1uZXcgVmVjdG9yMygtMSwwLDApOyAgICAvL3Yx56Kw5pKe5rOV57q/XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gdmFyIGFiPW5ldyBMYXlhLlF1YXRlcm5pb24oKTtcclxuICAgICAgICAgICAgICAgIC8vIExheWEuUXVhdGVybmlvbi5jcmVhdGVGcm9tQXhpc0FuZ2xlKHRoaXMuZm9ydyxhLGFiKVxyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5nb1MuQ3JlYXRlUmF5KHBvaSwgYWIsIEJ1bGxldFR5cGUuQnVsbGV0Ryk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1MuQ3JlYXRlUmF5KHBvaSwgYW5nLCBCdWxsZXRUeXBlLkJ1bGxldEcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5SZW1vdmVUYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5nby50cmFuc2Zvcm0ubG9jYWxTY2FsZVogPSA1MDtcclxuICAgICAgICAgICAgdGhpcy5nb1MuU2V0TmV4dE5vdEFjdGl2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBSb3RhdGlvblNlbGYocm90YTogVmVjdG9yMykge1xyXG4gICAgICAvLyAgY29uc29sZS5sb2cocm90YSk7XHJcbiAgICAgIC8vICBjb25zb2xlLmxvZyh0aGlzLl90cmFuc2Zvcm0ucm90YXRpb25FdWxlcik7XHJcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtLnJvdGF0ZShyb3RhKTtcclxuICAgICAgLy8gIGNvbnNvbGUubG9nKHRoaXMuX3RyYW5zZm9ybS5yb3RhdGlvbkV1bGVyKTtcclxuICAgICAgICB0aGlzLkNyZWF0ZVJheSgpO1xyXG4gICAgfVxyXG5cclxuICAgIFNldE5leHROb3RBY3RpdmUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ28pIHtcclxuICAgICAgICAgICAgdGhpcy5nby5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ29TKSB0aGlzLmdvUy5TZXROZXh0Tm90QWN0aXZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgSGl0VGFyOiBTcHJpdGUzRDtcclxuICAgIHByaXZhdGUgUmVtb3ZlVGFyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLkhpdFRhcikge1xyXG4gICAgICAgICAgICB0aGlzLkhpdFRhciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBTZXRUYXIodGFyKSB7XHJcbiAgICAgICAgdGhpcy5IaXRUYXIgPSB0YXI7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIEhpdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5IaXRUYXIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuSGl0VGFyLmxheWVyID09IEdhbWVEZWZpbmVkLnBsYXllcl9sYXllciB8fCB0aGlzLkhpdFRhci5sYXllciA9PSBHYW1lRGVmaW5lZC5tb3N0ZXJfbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgIHZhciByID0gdGhpcy5IaXRUYXIuZ2V0Q29tcG9uZW50KFJvbGUpIGFzIFJvbGU7XHJcbiAgICAgICAgICAgICAgICByLkhpdEVkKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkNyZWF0ZVJheSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uRW5hYmxlKCkge1xyXG4gICAgICAgIEV2ZW50TWFuYWdlci5vbihHYW1lRGVmaW5lZC5IaXRFdmVudCwgdGhpcywgdGhpcy5IaXQpO1xyXG4gICAgICAgIHRoaXMuX2lzaGl0ZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBvbkRpc2FibGUoKSB7XHJcbiAgICAgICAgRXZlbnRNYW5hZ2VyLm9mZihHYW1lRGVmaW5lZC5IaXRFdmVudCwgdGhpcywgdGhpcy5IaXQpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IERpY3Rpb25hcnkgZnJvbSBcIi4uL2dhbWVfdG9vbC9EaWN0aW9uYXJ5XCI7XHJcbmltcG9ydCBWZWN0b3IzPUxheWEuVmVjdG9yMztcclxuZXhwb3J0IGNsYXNzIFBvb2xfTWFuYWdlciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogUG9vbF9NYW5hZ2VyO1xyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgSW5zdGFuY2UoKTogUG9vbF9NYW5hZ2VyIHtcclxuICAgICAgICByZXR1cm4gUG9vbF9NYW5hZ2VyLmluc3RhbmNlIHx8IChQb29sX01hbmFnZXIuaW5zdGFuY2UgPSBuZXcgUG9vbF9NYW5hZ2VyKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMucG9vbERpYyA9IG5ldyBEaWN0aW9uYXJ5KCk7XHJcbiAgICAgICAgdGhpcy5wcmVmYWJEaWMgPSBuZXcgRGljdGlvbmFyeSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5a2Y5YKo5aSa5LiqXHJcbiAgICBwcml2YXRlIHBvb2xEaWM6IERpY3Rpb25hcnk7XHJcblxyXG4gICAgLy/pooTorr7lr7nosaFcclxuICAgIHByaXZhdGUgcHJlZmFiRGljOiBEaWN0aW9uYXJ5O1xyXG5cclxuICAgIC8vIFsgIF1cclxuICAgIHB1YmxpYyBJbml0RGF0YShuYW1lOiBzdHJpbmcsIHByZWZhYikge1xyXG4gICAgICAgIGlmIChwcmVmYWIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucHJlZmFiRGljLmhhcyhuYW1lKSlcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlZmFiRGljLnNldChuYW1lLCBwcmVmYWIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBTZXRBY3RpdmVPYmplY3QobmFtZTogc3RyaW5nLHNjYWxlPykge1xyXG4gICAgICAgIGlmICh0aGlzLnBvb2xEaWMuaGFzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvb2xEaWMuZ2V0KG5hbWUpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnBvb2xEaWMuZ2V0KG5hbWUpLnNoaWZ0KCk7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQuYWN0aXZlPXRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZWZhYkRpYy5oYXMobmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY3VyT2JqID0gTGF5YS5TcHJpdGUzRC5pbnN0YW50aWF0ZSh0aGlzLnByZWZhYkRpYy5nZXQobmFtZSkpIGFzIExheWEuU3ByaXRlM0Q7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoc2NhbGUhPW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJPYmoudHJhbnNmb3JtLmxvY2FsU2NhbGU9bmV3IFZlY3RvcjMoc2NhbGUsc2NhbGUsc2NhbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjdXJPYmoubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1ck9iajtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucHJlZmFiRGljLmhhcyhuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1ck9iaiA9IExheWEuU3ByaXRlM0QuaW5zdGFudGlhdGUodGhpcy5wcmVmYWJEaWMuZ2V0KG5hbWUpKSBhcyBMYXlhLlNwcml0ZTNEO1xyXG4gICAgICAgICAgICAgICAgaWYoc2NhbGUhPW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIGN1ck9iai50cmFuc2Zvcm0ubG9jYWxTY2FsZT1uZXcgVmVjdG9yMyhzY2FsZSxzY2FsZSxzY2FsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjdXJPYmoubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VyT2JqO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8v6ZqQ6JeP5a+56LGh5YiwZGljXHJcbiAgICBwdWJsaWMgU2V0RGlzYWJsZU9iamVjdChnbzogTGF5YS5TcHJpdGUzRCkge1xyXG4gICAgICAgIGlmIChnbykgZ28uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGtleSA9IGdvLm5hbWU7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBvb2xEaWMuaGFzKGtleSkpIHtcclxuICAgICAgICAgICAgdGhpcy5wb29sRGljLnNldChrZXksIG5ldyBBcnJheTxhbnk+KCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvb2xEaWMuZ2V0KGtleSkucHVzaChnbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIERlc3RvcnlPYmooZ286TGF5YS5TcHJpdGUzRCl7XHJcbiAgICAgICAgaWYgKGdvKSBnby5kZXN0cm95KHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5bu25pe26ZqQ6JeP5a+56LGh5YiwZGljXHJcbiAgICBwdWJsaWMgU2V0RGlzYWJsZU11dGlPYmplY3QoZ286IExheWEuU3ByaXRlM0QsIHRpbWVyKSB7XHJcbiAgICAgICAgTGF5YS50aW1lci5vbmNlKHRpbWVyLCB0aGlzLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChnbykgZ28uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBrZXkgPSBnby5uYW1lO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucG9vbERpYy5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb29sRGljLnNldChrZXksIG5ldyBBcnJheTxhbnk+KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucG9vbERpYy5nZXQoa2V5KS5wdXNoKGdvKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG59IiwiaW1wb3J0IFNwcml0ZTNEID0gTGF5YS5TcHJpdGUzRDtcclxuaW1wb3J0IFRyYW5zZm9ybTNEID0gTGF5YS5UcmFuc2Zvcm0zRDtcclxuaW1wb3J0IEdhbWVEZWZpbmVkLCB7IENoZWNrVHlwZSB9IGZyb20gXCIuLi9nYW1lX21vZHVsZS9HYW1lRGVmaW5lZFwiO1xyXG5pbXBvcnQgVmVjdG9yMyA9IExheWEuVmVjdG9yMztcclxuaW1wb3J0IFJheSA9IExheWEuUmF5O1xyXG5pbXBvcnQgSGl0UmVzdWx0ID0gTGF5YS5IaXRSZXN1bHQ7XHJcbmltcG9ydCB7IEJ1bGxldCB9IGZyb20gXCIuL0J1bGxldFwiO1xyXG5pbXBvcnQgQnVsbGV0Q29udHJvbGxlciBmcm9tIFwiLi9CdWxsZXRDb250cm9sbGVyXCI7XHJcbmltcG9ydCBHYW1lU2NlbmVDb250cm9sbGVyIGZyb20gXCIuL0dhbWVTY2VuZUNvbnRyb2xsZXJcIjtcclxuaW1wb3J0IEdhbWVfVG9vbCBmcm9tIFwiLi4vZ2FtZV90b29sL0dhbWVfVG9vbFwiO1xyXG5pbXBvcnQgeyBFdmVudE1hbmFnZXIgfSBmcm9tIFwiLi4vZ2FtZV9tb2R1bGUvRXZlbnRNYW5hZ2VyXCI7XHJcbmV4cG9ydCBjbGFzcyBSb2xlIGV4dGVuZHMgTGF5YS5TY3JpcHQzRCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZWxmOiBTcHJpdGUzRDtcclxuICAgIHByb3RlY3RlZCBfdHJhbnNmb3JtOiBUcmFuc2Zvcm0zRDtcclxuICAgIHByb3RlY3RlZCBfdHlwZTogQ2hlY2tUeXBlO1xyXG4gICAgcHJvdGVjdGVkIF9idWxsZXRQb3M6IFNwcml0ZTNEO1xyXG4gICAgcHJvdGVjdGVkIF9pc2hpdGVkOiBib29sZWFuO1xyXG4gICAgb25Bd2FrZSgpIHtcclxuICAgICAgICB0aGlzLnNlbGYgPSB0aGlzLm93bmVyIGFzIFNwcml0ZTNEO1xyXG4gICAgICAgIHRoaXMuX3RyYW5zZm9ybSA9IHRoaXMuc2VsZi50cmFuc2Zvcm07XHJcbiAgICB9XHJcblxyXG5cclxuICAgIEhpdEVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pc2hpdGVkKSByZXR1cm47XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLl90eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgQ2hlY2tUeXBlLlBsYXllcjpcclxuICAgICAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIENoZWNrVHlwZS5Nb3N0ZXI6XHJcblxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuU2V0TmV4dE5vdEFjdGl2ZSgpO1xyXG4gICAgICAgIHRoaXMuc2VsZi5hY3RpdmU9ZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkICBTZXROZXh0Tm90QWN0aXZlKCkge1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufSIsIlxyXG5pbXBvcnQgU3ByaXRlM0QgPSBMYXlhLlNwcml0ZTNEO1xyXG5pbXBvcnQgeyBQbGF5ZXIgfSBmcm9tIFwiLi9QbGF5ZXJcIjtcclxuaW1wb3J0IFZlY3RvcjMgPSBMYXlhLlZlY3RvcjM7XHJcbmltcG9ydCB7IE1vc3RlciB9IGZyb20gXCIuL01vc3RlclwiO1xyXG5leHBvcnQgY2xhc3MgUm9sZUNvbnRyb2xsZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFzbmNlOiBSb2xlQ29udHJvbGxlcjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IFJvbGVDb250cm9sbGVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YXNuY2UgfHwgKHRoaXMuaW5zdGFzbmNlID0gbmV3IFJvbGVDb250cm9sbGVyKCkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBwdWJsaWMgcGxheWVyOlNwcml0ZTNEO1xyXG4gICAgLy8gcHVibGljIHBsYXllclM6UGxheWVyO1xyXG5cclxuICAgIHB1YmxpYyBwbGF5ZXJBcnIgPSBbXTtcclxuICAgIHB1YmxpYyBtb3N0ZXJBcnIgPSBbXTtcclxuXHJcbiAgICBwdWJsaWMgYmVoYXZpb3JBcnIgPSBbXTtcclxuICAgIHB1YmxpYyBpbml0UGxheWVyKHJvbGVzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJvbGVzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gcm9sZXNbaW5kZXhdO1xyXG4gICAgICAgICAgICB2YXIgYmVoID0gZWxlbWVudC5hZGRDb21wb25lbnQoUGxheWVyKTtcclxuICAgICAgICAgICAgdGhpcy5iZWhhdmlvckFyci5wdXNoKGJlaCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmKHJvbGUpe1xyXG4gICAgICAgIC8vICAgICB0aGlzLnBsYXllcj1yb2xlO1xyXG4gICAgICAgIC8vICAgICB0aGlzLnBsYXllclM9dGhpcy5wbGF5ZXIuYWRkQ29tcG9uZW50KFBsYXllcik7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0TW9zdGVyKG1vc3RlcnMpIHtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbW9zdGVycy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IG1vc3RlcnNbaW5kZXhdO1xyXG4gICAgICAgICAgICB2YXIgYmVoID0gZWxlbWVudC5hZGRDb21wb25lbnQoTW9zdGVyKTtcclxuICAgICAgICAgICAgdGhpcy5iZWhhdmlvckFyci5wdXNoKGJlaCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIENyZWF0ZVJheSgpIHtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5iZWhhdmlvckFyci5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuYmVoYXZpb3JBcnJbaW5kZXhdO1xyXG4gICAgICAgICAgICBlbGVtZW50LkNyZWF0ZVJheSgpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gIGlmKHRoaXMucGxheWVyUyl0aGlzLnBsYXllclMuQ3JlYXRlUmF5KCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgUm9sZVJvdGF0aW9uKHJvdGE6IFZlY3RvcjMpIHtcclxuICAgICAgICAvLyBpZih0aGlzLnBsYXllclMpdGhpcy5wbGF5ZXJTLlJvdGF0aW9uU2VsZihyb3RhKTtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5iZWhhdmlvckFyci5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuYmVoYXZpb3JBcnJbaW5kZXhdO1xyXG4gICAgICAgICAgICBlbGVtZW50LlJvdGF0aW9uU2VsZihyb3RhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgU291bmRNYW5hZ2VyID0gTGF5YS5Tb3VuZE1hbmFnZXI7XHJcbmltcG9ydCB7IFdYU2RrIH0gZnJvbSBcIi4uL2dhbWVfbW9kdWxlL1dYU2RrXCI7XHJcbmV4cG9ydCBjbGFzcyBTZXR0aW5nQ29udHJvbGxlciB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YXNuY2U6IFNldHRpbmdDb250cm9sbGVyO1xyXG4gICAgcHVibGljIHZpYnJhdGUgPSB0cnVlO1xyXG4gICAgcHVibGljIHNvdW5kPXRydWU7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBTZXR0aW5nQ29udHJvbGxlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFzbmNlIHx8ICh0aGlzLmluc3Rhc25jZSA9IG5ldyBTZXR0aW5nQ29udHJvbGxlcigpKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBTZXR0aW5nU291bmQodmFsdWU/OiBudW1iZXIpIHtcclxuICAgICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgICAgIFNvdW5kTWFuYWdlci5zZXRTb3VuZFZvbHVtZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIFNvdW5kTWFuYWdlci5zZXRNdXNpY1ZvbHVtZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzb3VuZENoYW5uZWw6IExheWEuU291bmRDaGFubmVsO1xyXG4gICAgcHVibGljIF9wbGF5TXVzaWMob24pIHtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgaWYgKG9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdW5kQ2hhbm5lbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvdW5kQ2hhbm5lbCA9IFNvdW5kTWFuYWdlci5wbGF5TXVzaWModGhpcy5UcmFpbkxvb3AsIDApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zb3VuZENoYW5uZWwudm9sdW1lID0gMC41XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zb3VuZENoYW5uZWwucmVzdW1lKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc291bmRDaGFubmVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvdW5kQ2hhbm5lbC5wYXVzZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBfcGxheUJhZE1vdmUoKSB7XHJcbiAgICAgICBcclxuICAgICAgICBXWFNkay5TaG9ydFZpYnJhdGUoKTtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLmJhZE1vdmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBfQ2xpY2soKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuc291bmQpcmV0dXJuO1xyXG4gICAgICAgIFNvdW5kTWFuYWdlci5wbGF5U291bmQodGhpcy5jbGljayk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIF9Db250aW51ZShvbikge1xyXG4gICAgICAgIGlmKCF0aGlzLnNvdW5kKXJldHVybjtcclxuICAgICAgICBpZiAob24pIHtcclxuICAgICAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLkNvbnRpbnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBTb3VuZE1hbmFnZXIuc3RvcFNvdW5kKHRoaXMuQ29udGludWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIF9MZXZlbENvbXAoKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuc291bmQpcmV0dXJuO1xyXG4gICAgICAgIFNvdW5kTWFuYWdlci5wbGF5U291bmQodGhpcy5MZXZlbENvbXApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBfVHJhaW5DcmFzaCgpIHtcclxuICAgICAgICBXWFNkay5Mb25nVmlicmF0ZSgpO1xyXG4gICAgICAgIGlmKCF0aGlzLnNvdW5kKXJldHVybjtcclxuICAgICAgICBTb3VuZE1hbmFnZXIucGxheVNvdW5kKHRoaXMuVHJhaW5DcmFzaCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgX1RyYWluU3RvcCgpIHtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLlRyYWluU3RvcCk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgX0NvaW4oKSB7XHJcbiAgICAgICAgV1hTZGsuU2hvcnRWaWJyYXRlKCk7XHJcbiAgICAgICAgaWYoIXRoaXMuc291bmQpcmV0dXJuO1xyXG4gICAgICAgIFNvdW5kTWFuYWdlci5wbGF5U291bmQodGhpcy5Db2luKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSB0ZW1wID0gMDtcclxuICAgIHB1YmxpYyBfSnVtcCgpIHtcclxuICAgICAgICBXWFNkay5TaG9ydFZpYnJhdGUoKTtcclxuICAgICAgICBpZighdGhpcy5zb3VuZClyZXR1cm47XHJcbiAgICAgICAgU291bmRNYW5hZ2VyLnBsYXlTb3VuZCh0aGlzLkp1bXBbdGhpcy50ZW1wXSk7XHJcbiAgICAgICAgdGhpcy50ZW1wKys7XHJcbiAgICAgICAgaWYgKHRoaXMudGVtcCA9PSA4KSB0aGlzLnRlbXAgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYmFkTW92ZSA9IFwicmVzL1NvdW5kL0JhZE1vdmUubXAzXCI7XHJcbiAgICBwcml2YXRlIGNsaWNrID0gXCJyZXMvU291bmQvY2xpY2subXAzXCI7XHJcbiAgICBwcml2YXRlIENvbnRpbnVlID0gXCJyZXMvU291bmQvQ29udGludWUubXAzXCI7XHJcbiAgICBwcml2YXRlIExldmVsQ29tcCA9IFwicmVzL1NvdW5kL0xldmVsQ29tcC5tcDNcIjtcclxuICAgIHByaXZhdGUgVHJhaW5DcmFzaCA9IFwicmVzL1NvdW5kL1RyYWluQ3Jhc2gubXAzXCI7XHJcbiAgICBwcml2YXRlIFRyYWluTG9vcCA9IFwicmVzL1NvdW5kL1RyYWluTG9vcC5tcDNcIjtcclxuICAgIHByaXZhdGUgVHJhaW5TdG9wID0gXCJyZXMvU291bmQvVHJhaW5TdG9wLm1wM1wiO1xyXG4gICAgcHJpdmF0ZSBDb2luPVwicmVzL1NvdW5kL0NvaW4xLm1wM1wiO1xyXG4gICAgcHJpdmF0ZSBKdW1wID1cclxuICAgICAgICBbXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjEubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjIubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjMubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjQubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjUubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjYubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjcubXAzXCIsXHJcbiAgICAgICAgICAgIFwicmVzL1NvdW5kL1Bhc3Nlbmdlckp1bXBJbjgubXAzXCIsXHJcbiAgICAgICAgXTtcclxuXHJcbn0iLCJpbXBvcnQgRGljdGlvbmFyeSBmcm9tIFwiLi4vZ2FtZV90b29sL0RpY3Rpb25hcnlcIjtcclxuaW1wb3J0IHsgZ2FtZV91aSB9IGZyb20gXCIuLi9nYW1lX3VpL2dhbWVfdWlcIjtcclxuaW1wb3J0IHsgbWFpbl91aSB9IGZyb20gXCIuLi9nYW1lX3VpL21haW5fdWlcIjtcclxuXHJcblxyXG5leHBvcnQgZW51bSBWaWV3VHlwZSB7XHJcbiAgICBnYW1lX3VpLFxyXG4gICAgbWFpbl91aVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZXdNYW5hZ2VyIHtcclxuICAgIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBWaWV3TWFuYWdlcjtcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IFZpZXdNYW5hZ2VyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZSB8fCAodGhpcy5pbnN0YW5jZSA9IG5ldyBWaWV3TWFuYWdlcigpKTtcclxuICAgIH1cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB2aWV3RGljID0gW107XHJcbiAgICBwcml2YXRlIGN1clZpZXc6IGFueTtcclxuICAgIHByaXZhdGUgYWRkVmlld0RpYyA9IG5ldyBEaWN0aW9uYXJ5KCk7XHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHRoaXMudmlld0RpY1tWaWV3VHlwZS5nYW1lX3VpXSA9IGdhbWVfdWk7XHJcbiAgICAgICAgdGhpcy52aWV3RGljW1ZpZXdUeXBlLm1haW5fdWldID0gbWFpbl91aTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBPcGVuVmlldyh2aWV3OiBWaWV3VHlwZSwgZGF0YT86IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1clZpZXcgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1clZpZXcuT25DbG9zZSgpO1xyXG4gICAgICAgICAgICBMYXlhLnN0YWdlLnJlbW92ZUNoaWxkKHRoaXMuY3VyVmlldyk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyVmlldy5kZXN0cm95KHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLmN1clZpZXcgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1clZpZXcgPSBuZXcgdGhpcy52aWV3RGljW3ZpZXddO1xyXG5cclxuICAgICAgICBMYXlhLnN0YWdlLmFkZENoaWxkKHRoaXMuY3VyVmlldyk7XHJcbiAgICAgIFxyXG4gICAgICAgIHRoaXMuY3VyVmlldy5PblNob3coZGF0YSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZ2V0Q3VyVmlldygpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmN1clZpZXc7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgQWRkVmlldyh2aWV3OiBWaWV3VHlwZSwgZGF0YT86IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLmFkZFZpZXdEaWMuaGFzKHZpZXcpKSByZXR1cm47XHJcbiAgICAgICAgbGV0IHRfdmlldyA9IG5ldyB0aGlzLnZpZXdEaWNbdmlld107XHJcbiAgICAgICAgdGhpcy5hZGRWaWV3RGljLnNldCh2aWV3LCB0X3ZpZXcpO1xyXG4gICAgICAgIExheWEuc3RhZ2UuYWRkQ2hpbGQodF92aWV3KTtcclxuICAgICAgICB0X3ZpZXcuT25TaG93KGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIFJlbW92ZVZpZXcoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VyVmlldyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyVmlldy5PbkNsb3NlKCk7XHJcbiAgICAgICAgICAgIExheWEuc3RhZ2UucmVtb3ZlQ2hpbGQodGhpcy5jdXJWaWV3KTtcclxuICAgICAgICAgICAgdGhpcy5jdXJWaWV3LmRlc3Ryb3kodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyVmlldyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIENsb3NlVmlldyh2aWV3OiBWaWV3VHlwZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5hZGRWaWV3RGljLmhhcyh2aWV3KSkgcmV0dXJuO1xyXG4gICAgICAgIGxldCB0X3ZpZXcgPSB0aGlzLmFkZFZpZXdEaWMuZ2V0KHZpZXcpO1xyXG4gICAgICAgIHRfdmlldy5PbkNsb3NlKCk7XHJcbiAgICAgICAgTGF5YS5zdGFnZS5yZW1vdmVDaGlsZCh0X3ZpZXcpO1xyXG4gICAgICAgIHRfdmlldy5kZXN0cm95KHRydWUpO1xyXG4gICAgICAgIHRoaXMuYWRkVmlld0RpYy5kZWxldGUodmlldyk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGN1ck1hc2s6IGFueTtcclxuICAgIHB1YmxpYyBPcGVuTWFzaygpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJNYXNrICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAgdGhpcy5jdXJNYXNrID0gbmV3IE1hc2tfdWkoKTtcclxuICAgICAgICBpZiAoIXRoaXMuY3VyTWFzaykgcmV0dXJuO1xyXG4gICAgICAgIExheWEuc3RhZ2UuYWRkQ2hpbGQodGhpcy5jdXJNYXNrKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBDbG9zZU1hc2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VyTWFzayAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyTWFzay5PbkNsb3NlKCk7XHJcbiAgICAgICAgICAgIExheWEuc3RhZ2UucmVtb3ZlQ2hpbGQodGhpcy5jdXJNYXNrKTtcclxuICAgICAgICAgICAgdGhpcy5jdXJNYXNrLmRlc3Ryb3kodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VyTWFzayA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufSIsImV4cG9ydCBjbGFzcyBFdmVudE1hbmFnZXIge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgZGlzaXNwYXRjaGVyOiBMYXlhLkV2ZW50RGlzcGF0Y2hlcjtcclxuICAgIHByaXZhdGUgc3RhdGljIGdldCBEaXNpc3BhdGNoZXIoKTogTGF5YS5FdmVudERpc3BhdGNoZXIge1xyXG4gICAgICAgIHJldHVybiBFdmVudE1hbmFnZXIuZGlzaXNwYXRjaGVyIHx8IChFdmVudE1hbmFnZXIuZGlzaXNwYXRjaGVyID0gbmV3IExheWEuRXZlbnREaXNwYXRjaGVyKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgb24odHlwZTogc3RyaW5nLCBjYWxsOiBhbnksIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuRGlzaXNwYXRjaGVyLm9uKHR5cGUsIGNhbGwsIGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBvZmYodHlwZTogc3RyaW5nLCBjYWxsOiBhbnksIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuRGlzaXNwYXRjaGVyLm9mZih0eXBlLCBjYWxsLCBkYXRhKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgZXZlbnQodHlwZTogc3RyaW5nLCBkYXRhOiBhbnkgPSBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5EaXNpc3BhdGNoZXIuZXZlbnQodHlwZSwgZGF0YSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgVXNlck1vZGVsIGZyb20gXCIuL1VzZXJNb2RlbFwiO1xyXG5pbXBvcnQgeyBNYWluIH0gZnJvbSBcIi4uL01haW5cIjtcclxuaW1wb3J0IHsgRXZlbnRNYW5hZ2VyIH0gZnJvbSBcIi4vRXZlbnRNYW5hZ2VyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRllIRF9TZGsge1xyXG4gICAgcHVibGljIHN0YXRpYyBBZF9DbGlja1R5cGUgPSB7XHJcbiAgICAgICAgVmlkZW86IFwidmlkZW9fY2xpY2tcIixcclxuICAgICAgICBXYXRjaDogXCJ3YXRjaFwiLFxyXG4gICAgICAgIFNoYXJlOiBcInNoYXJlXCIsXHJcbiAgICAgICAgQmFubmVyOiBcImJhbm5lclwiLFxyXG4gICAgICAgIFB1c2g6IFwicHVzaFwiXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBwdXNoRGF0YSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgb3BlbmlkOiBzdHJpbmc7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBpc0hhdmVEYXRlID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBTaG93QWQgPSBcIlNob3dBZFwiO1xyXG4gICAgLy/liJ3lp4vljJZzZGtcclxuICAgIHB1YmxpYyBzdGF0aWMgSW5pdFNkaygpIHtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkuc3RhcnRTZGsoKTtcclxuICAgICAgICBGWUhEX1Nkay5Vc2VySW5mb0F1dGgoKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+eUqOaIt+aOiOadg1xyXG4gICAgcHVibGljIHN0YXRpYyBVc2VySW5mb0F1dGgoKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkuZ2V0RnloZFVzZXJJbmZvKG51bGwsIGZhbHNlLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIuaXoOaOiOadg+WbnuiwgzpcIiArIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICAgICAgaWYgKGRhdGEucmVzdWx0LnVzZXIpIHtcclxuICAgICAgICAgICAgICAgIEZZSERfU2RrLm9wZW5pZCA9IGRhdGEucmVzdWx0LnVzZXIub3BlbmlkO1xyXG4gICAgICAgICAgICAgICAgRllIRF9TZGsuQXV0aEluZm8oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgQXV0aEluZm8oKSB7XHJcbiAgICAgICAgdmFyIGFyZ3MgPSB7XHJcbiAgICAgICAgICAgIG9wZW5pZDogRllIRF9TZGsub3BlbmlkLFxyXG4gICAgICAgIH1cclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkubG9naW5EYXRhKGFyZ3MsIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5o6I5p2D5LiK5oql5Zue6LCDOlwiICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgICBGWUhEX1Nkay5WYWx1ZVVzZXIoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgc3RhdGljIFZhbHVlVXNlcigpIHtcclxuICAgICAgICB2YXIgYXJncyA9IHtcclxuICAgICAgICAgICAgb3BlbmlkOiBGWUhEX1Nkay5vcGVuaWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cuc2RrLmdldEZ5aGQoKS52YWx1ZXVzZXIoYXJncywgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLmnInmlYjnlKjmiLfkuIrmiqU6XCIgKyBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy/liJvop5LoibJcclxuICAgIHB1YmxpYyBzdGF0aWMgUm9sZURhdGEoKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICB2YXIgYXJncyA9IHtcclxuICAgICAgICAgICAgb3BlbmlkOiBGWUhEX1Nkay5vcGVuaWQsXHJcbiAgICAgICAgICAgIHJvbGVfaWQ6IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC51c2VyaWQsXHJcbiAgICAgICAgICAgIGNyZWF0ZV90aW1lOiBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwuU2VydmVyVGltZVxyXG4gICAgICAgIH1cclxuICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93LnNkay5nZXRGeWhkKCkucm9sZURhdGEoYXJncywgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLliJvlu7rop5LoibI6XCIgKyBKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgICAgIEZZSERfU2RrLkxvZ2luKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvL+eZu+W9leS/oeaBr+S4iuaKpVxyXG4gICAgcHVibGljIHN0YXRpYyBMb2dpbigpIHtcclxuICAgICAgICBpZiAoIU1haW4uSXNXeCkgcmV0dXJuO1xyXG4gICAgICAgIHZhciBvcGVuaWQgPSBGWUhEX1Nkay5vcGVuaWQgPyBGWUhEX1Nkay5vcGVuaWQgOiBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwub3BlbmlkO1xyXG4gICAgICAgIHZhciBhcmdzID0ge1xyXG4gICAgICAgICAgICBvcGVuaWQ6IG9wZW5pZCxcclxuICAgICAgICAgICAgcm9sZV9pZDogVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLnVzZXJpZCxcclxuICAgICAgICAgICAgY3JlYXRlX3RpbWU6IFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC5TZXJ2ZXJUaW1lLnRvU3RyaW5nKClcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coXCLnmbvlvZXlj4LmlbA6XCIgKyBKU09OLnN0cmluZ2lmeShhcmdzKSk7XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy5zZGsuZ2V0RnloZCgpLnVwbG9naW5EYXRhKGFyZ3MsIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi55m75b2V57uT5p6cOlwiICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgICAvLyBGWUhEX1Nkay5QdXNoRGF0YSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8v54K55Ye75LqL5Lu25LiK5oqlXHJcbiAgICBwdWJsaWMgc3RhdGljIENsaWNrQWQoYWRfdHlwZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICB2YXIgcGFyYW0gPSB7XHJcbiAgICAgICAgICAgIGFkX3R5cGU6IGFkX3R5cGUsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi54K55Ye75Y+C5pWwOlwiICsgcGFyYW0pO1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cuc2RrLmdldEZ5aGQoKS5hZHZlcnRpc2VtZW50KHBhcmFtLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIueCueWHu+e7k+aenDpcIiArIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFB1c2hEYXRhKCkge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcbiAgICAgICAgdmFyIHBhcmFtID0ge307XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy5zZGsuZ2V0RnloZCgpLnNoYXJlUmVjb21tZW5kKHBhcmFtLCAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBGWUhEX1Nkay5wdXNoRGF0YSA9IGRhdGEuZGF0YTtcclxuICAgICAgICAgICAgICAgIEZZSERfU2RrLnB1c2hEYXRhLnNvcnQoRllIRF9TZGsuTGlzdFNvcnQpO1xyXG4gICAgICAgICAgICAgICAgRXZlbnRNYW5hZ2VyLmV2ZW50KEZZSERfU2RrLlNob3dBZCk7XHJcbiAgICAgICAgICAgICAgICBGWUhEX1Nkay5pc0hhdmVEYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIuiOt+WPluS6kuaOqOS/oeaBrzpcIiArIEpTT04uc3RyaW5naWZ5KEZZSERfU2RrLnB1c2hEYXRhKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIFNob3dIdVR1aUp1bXAoZGF0YSkge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcbiAgICAgICAgaWYgKGRhdGEuanVtcF90eXBlID09IDIpIC8v5LqM57u056CB6Lez6L2s5pa55rOVXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LnByZXZpZXdJbWFnZSh7IGN1cnJlbnQ6IGRhdGEucXJjb2RlLCB1cmxzOiBbZGF0YS5xcmNvZGVdIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChkYXRhLmp1bXBfdHlwZSA9PSAxKSAvL+ebtOi3s+aWueazlVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5uYXZpZ2F0ZVRvTWluaVByb2dyYW0oe1xyXG4gICAgICAgICAgICAgICAgYXBwSWQ6IGRhdGEudG9fYXBwaWQsXHJcbiAgICAgICAgICAgICAgICBwYXRoOiBkYXRhLmp1bXBfcGF0aCxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3MocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5omT5byA5oiQ5YqfXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLkuIrmiqXmiJDlip86XCIgKyBKU09OLnN0cmluZ2lmeShyZXMpKTtcclxuICAgICAgICAgICAgICAgICAgICBGWUhEX1Nkay5QdXNoQ2xpY2soZGF0YS50b19hcHBpZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGRhdGEuanVtcF90eXBlID09IDApLy/lubPlj7Dot7Povazmlrnms5VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3gubmF2aWdhdGVUb01pbmlQcm9ncmFtKHtcclxuICAgICAgICAgICAgICAgIGFwcElkOiBkYXRhLnBsYXRmb3JtX2FwcGlkLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogZGF0YS5qdW1wX3BhdGgsXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzKHJlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOaJk+W8gOaIkOWKn1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5LiK5oql5oiQ5YqfOlwiICsgSlNPTi5zdHJpbmdpZnkocmVzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgRllIRF9TZGsuUHVzaENsaWNrKGRhdGEudG9fYXBwaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgUHVzaENsaWNrKHRvX2FwcGlkKSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICB2YXIgcGFyYW0gPSB7XHJcbiAgICAgICAgICAgIG9wZW5pZDogRllIRF9TZGsub3BlbmlkLFxyXG4gICAgICAgICAgICB0b19hcHBpZDogdG9fYXBwaWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cuc2RrLmdldEZ5aGQoKS5zaGFyZVBsYXkocGFyYW0sIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi54K55Ye75LiK5oql57uT5p6cOlwiICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIExpc3RTb3J0KGEsIGIpOiBudW1iZXIge1xyXG4gICAgICAgIGlmIChOdW1iZXIoYVtcInBhbmVsXCJdKSA8IE51bWJlcihiW1wicGFuZWxcIl0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKE51bWJlcihhW1wicGFuZWxcIl0pID09IE51bWJlcihiW1wicGFuZWxcIl0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoTnVtYmVyKGFbXCJwYW5lbFwiXSkgPiBOdW1iZXIoYltcInBhbmVsXCJdKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2FtZURlZmluZWQge1xyXG4gICAgcHVibGljIHN0YXRpYyBwbGF5ZXJfbGF5ZXIgPSA5O1xyXG4gICAgcHVibGljIHN0YXRpYyB3YWxsX2xheWVyID0gODtcclxuICAgIHB1YmxpYyBzdGF0aWMgbW9zdGVyX2xheWVyID0gMTA7XHJcbiAgICBwdWJsaWMgc3RhdGljIGJvc3NfbGF5ZXIgPSAxMTtcclxuICAgIHB1YmxpYyBzdGF0aWMgdHJlZV9sYXllciA9IDEyO1xyXG4gICAgcHVibGljIHN0YXRpYyBib21iX2xheWVyID0gMTM7XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgSGl0RXZlbnQgPSBcIkhpdEV2ZW50XCI7XHJcblxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2FtZV9zY2VuZV9wYXRoID1cInJlcy9MYXlhU2NlbmVfbWFpbi9Db252ZW50aW9uYWwvbWFpbi5sc1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXCJyZXMvTGF5YVNjZW5lX0dhbWVTY2VuZS9Db252ZW50aW9uYWwvR2FtZVNjZW5lLmxzXCI7XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBwb29sTmFtZSA9IHtcclxuICAgICAgICBidWxsZXRHOiBcImJ1bGxldEdcIixcclxuICAgICAgICBCdWxsZXRSOiBcIkJ1bGxldFJcIlxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgdWlSZXMgPSBbXHJcbiAgICAgICAgXCJyZXMvYXRsYXMvbWFpbl9yZXMuYXRsYXNcIixcclxuICAgICAgICBcInJlcy9hdGxhcy9tYWluX3Jlcy5wbmcgXCJcclxuICAgIF07XHJcbn1cclxuZXhwb3J0IGVudW0gQ2hlY2tUeXBlIHtcclxuICAgIFBsYXllcixcclxuICAgIE1vc3RlcixcclxuICAgIEJvc3MsXHJcbiAgICBCb21iLFxyXG4gICAgVHJlZVxyXG59XHJcbmV4cG9ydCBlbnVtIEJ1bGxldFR5cGUge1xyXG4gICAgQnVsbGV0UixcclxuICAgIEJ1bGxldEdcclxufVxyXG4iLCJcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVzb3VyY2VMb2FkIHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIExvYWRSZXNvdXJjZShwYXRoOkFycmF5PGFueT4sY29tcGxldD86RnVuY3Rpb24pe1xyXG4gICAgICAgIExheWEubG9hZGVyLnJldHJ5TnVtPTI7XHJcbiAgICAgICAgTGF5YS5sb2FkZXIubWF4TG9hZGVyPTM7XHJcbiAgICAgICAgTGF5YS5sb2FkZXIucmV0cnlEZWxheT0xMDA7XHJcbiAgICAgICAgTGF5YS5sb2FkZXIuY3JlYXRlKHBhdGgsbmV3IExheWEuSGFuZGxlcih0aGlzLGNvbXBsZXQpKTtcclxuICAgICAgICBMYXlhLmxvYWRlci5vbihMYXlhLkV2ZW50LkVSUk9SLHRoaXMsKGRhdGEpPT57XHJcbiAgICAgICAgICAgY29uc29sZS5sb2coZGF0YStcIiDotYTmupDliqDovb3lpLHotKVcIik7XHJcbiAgICAgICB9KTtcclxuICAgIH1cclxufSIsImltcG9ydCB7IFdYU2RrIH0gZnJvbSBcIi4vV1hTZGtcIjtcclxuaW1wb3J0IHsgRllIRF9TZGsgfSBmcm9tIFwiLi9GWUhEX1Nka1wiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBTaGFyZU1vZHVsZSB7XHJcbiAgICBwdWJsaWMgc3RhdGljIElzU2hhcmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIEdvU2hhcmUoY2FsbEJhY2spOiB2b2lkIHtcclxuICAgICAgICBTaGFyZU1vZHVsZS5TaGFyZVRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIuWIhuS6q+eCueWHu+aXtumXtD1cIiArIFNoYXJlTW9kdWxlLlNoYXJlVGltZSk7XHJcbiAgICAgICAgU2hhcmVNb2R1bGUuSXNTaGFyaW5nID0gdHJ1ZTtcclxuICAgICAgICBTaGFyZU1vZHVsZS5jYWxsYmFjayA9IGNhbGxCYWNrO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBTaGFyZVRpbWU6IG51bWJlcjtcclxuICAgIHB1YmxpYyBzdGF0aWMgT25TaG93SGFuZGxlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChMYXlhLkJyb3dzZXIud2luZG93Lnd4KSB7XHJcbiAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3gub25TaG93KGZ1bmN0aW9uIChvcHRpb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib25zaG93IHNoYXJlIHN0YXJ0XCIpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLov5vlhaXlvq7kv6FcIik7XHJcbiAgICAgICAgICAgICAgICAvL0xheWEudGltZXIuc2NhbGU9MTtcclxuICAgICAgICAgICAgICAgIGlmIChTaGFyZU1vZHVsZS5Jc1NoYXJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBTaGFyZU1vZHVsZS5Jc1NoYXJpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5YiG5Lqr5Zue5Yiw5ri45oiP5pe26Ze0XCIgKyB0aW1lKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgd2FpdCA9ICh0aW1lIC0gU2hhcmVNb2R1bGUuU2hhcmVUaW1lKSAvIDEwMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLliIbkuqvlgZznlZnml7bpl7TkuLrvvJpcIiArIHdhaXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzaGFyZVN1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVhbFN1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAod2FpdCA+PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpIDw9IDAuNSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVTdWNjZXNzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZZSERfU2RrLkNsaWNrQWQoRllIRF9TZGsuQWRfQ2xpY2tUeXBlLlNoYXJlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghU2hhcmVNb2R1bGUuY2FsbGJhY2spIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoYXJlTW9kdWxlLmNhbGxiYWNrKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5zaG93VG9hc3QoeyB0aXRsZTogXCLliIbkuqvmiJDlip/vvIFcIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghU2hhcmVNb2R1bGUuY2FsbGJhY2spIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpIDw9IDAuNSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guc2hvd1RvYXN0KHsgdGl0bGU6IFwi5YiG5Lqr5aSx6LSl77yBXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdYU2RrLlNob3dUb2FzdChcIuivt+WIhuS6q+WIsOS4jeWQjOe+pF4tXlwiLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZU1vZHVsZS5jYWxsYmFjayhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgY2FsbGJhY2s7XHJcbn0iLCJpbXBvcnQgeyBNYWluIH0gZnJvbSBcIi4uL01haW5cIjtcclxuaW1wb3J0IE5ldE1hbmFnZXIgZnJvbSBcIi4vTmV0TWFuYWdlclwiO1xyXG5pbXBvcnQgeyBEYXRlQ29udHJvbGxlciB9IGZyb20gXCIuLi9nYW1lX2xvZ2ljL0RhdGVDb250cm9sbGVyXCI7XHJcblxyXG5cclxuZXhwb3J0IGVudW0gVXNlckNvbmZpZ05hbWUge1xyXG4gICAgdHJhaW4sIHNpZ24sIHJld2FyZHNcclxufVxyXG4vL+eUqOaIt+S/oeaBr+WxnuaAp1xyXG5leHBvcnQgZW51bSBVc2VyQXR0ciB7XHJcbiAgICBlcXVpcF90cmFpbiwgdXNlcl9pZCwgc3RhZ2UsIGdldF90cmFpbnMsIG1vbmV5LCBwcm9ncmVzc190cmFpbnNcclxufVxyXG5leHBvcnQgY2xhc3MgTmV0VXNlck1vZGVsIHtcclxuICAgIHB1YmxpYyBtX3VzZXJfYmFzZTogT2JqZWN0O1xyXG4gICAgcHVibGljIG1fdXNlcl9pbnZpdGU6IE9iamVjdDtcclxuICAgIHB1YmxpYyBtX3VzZXJfbG90dGVyeTogb2JqZWN0XHJcbiAgICBwcml2YXRlIGxvZ2luU2V2ZXJUaW1lOiBudW1iZXIgPSAwO1xyXG4gICAgcHVibGljIG1fdXNlcl90cmVhc3VyZTogb2JqZWN0O1xyXG4gICAgcHVibGljIG1fdXNlcl9hY2hpZXZlbWVudDogb2JqZWN0O1xyXG4gICAgcHVibGljIG1fdXNlcl9zaWduOiBPYmplY3Q7XHJcbiAgICBwcml2YXRlIG1fdXNlcl9hcmVuYTogT2JqZWN0O1xyXG4gICAgcHJpdmF0ZSBsb2NhbFRpbWU6IG51bWJlcjtcclxuICAgIHB1YmxpYyBuaWNrbmFtZTogc3RyaW5nO1xyXG4gICAgcHVibGljIG9wZW5pZDogc3RyaW5nO1xyXG4gICAgcHVibGljIHVzZXJpZDogc3RyaW5nO1xyXG4gICAgcHVibGljIG1fdG9rZW46IHN0cmluZztcclxuICAgIHB1YmxpYyBtX2NvbmZpZ3M6IE9iamVjdDtcclxuICAgIHB1YmxpYyBtX2FwcF9zZXR0aW5nOiBPYmplY3Q7XHJcbiAgICBwdWJsaWMgbV91c2VyOiBPYmplY3Q7XHJcbiAgICBjb25zdHJ1Y3RvcihfdG9rZW46IHN0cmluZywgX2NvbmZpZzogT2JqZWN0LCBfYXBwU2V0dGluZzogT2JqZWN0LCBfdXNlcjogT2JqZWN0LCBfdXNlcmJhc2U6IE9iamVjdCwgX3VzZUludml0ZTogT2JqZWN0LCBfdXNlcl9sb3R0ZXJ5OiBPYmplY3QsIF91c2VyX3RyZWFzdXJlOiBPYmplY3QsIHQsIF91c2VyX2FjaGlldmVtZW50LCBfdXNlcl9zaWduLCBfdXNlcl9hcmVuYSkge1xyXG4gICAgICAgIHRoaXMubG9jYWxUaW1lID0gTGF5YS50aW1lci5jdXJyVGltZXI7XHJcbiAgICAgICAgdGhpcy5sb2dpblNldmVyVGltZSA9IHQ7XHJcbiAgICAgICAgdGhpcy5tX3Rva2VuID0gX3Rva2VuO1xyXG4gICAgICAgIHRoaXMubV9jb25maWdzID0gX2NvbmZpZztcclxuICAgICAgICB0aGlzLm1fYXBwX3NldHRpbmcgPSBfYXBwU2V0dGluZztcclxuICAgICAgICB0aGlzLm1fdXNlciA9IF91c2VyO1xyXG4gICAgICAgIHRoaXMubV91c2VyX2Jhc2UgPSBfdXNlcmJhc2U7XHJcbiAgICAgICAgdGhpcy5tX3VzZXJfaW52aXRlID0gX3VzZUludml0ZTtcclxuICAgICAgICB0aGlzLm1fdXNlcl9sb3R0ZXJ5ID0gX3VzZXJfbG90dGVyeTtcclxuICAgICAgICB0aGlzLm1fdXNlcl90cmVhc3VyZSA9IF91c2VyX3RyZWFzdXJlO1xyXG4gICAgICAgIHRoaXMubV91c2VyX2FjaGlldmVtZW50ID0gX3VzZXJfYWNoaWV2ZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5tX3VzZXJfc2lnbiA9IF91c2VyX3NpZ247XHJcbiAgICAgICAgdGhpcy5tX3VzZXJfYXJlbmEgPSBfdXNlcl9hcmVuYTtcclxuICAgICAgICB0aGlzLnVzZXJpZCA9IHRoaXMubV91c2VyW1widXNlcl9pZFwiXTtcclxuICAgICAgICB0aGlzLm9wZW5pZCA9IHRoaXMubV91c2VyX2Jhc2VbXCJvcGVuaWRcIl07XHJcbiAgICAgICAgdGhpcy5uaWNrbmFtZSA9IHRoaXMubV91c2VyX2Jhc2VbXCJuaWNrbmFtZVwiXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzZXQgQ2ZnKGNmZykge1xyXG4gICAgICAgIHRoaXMubV9jb25maWdzID0gY2ZnO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBzaGFyZXRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMubV9hcHBfc2V0dGluZ1tcInNoYXJldGl0bGVcIl0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubV9hcHBfc2V0dGluZ1tcInNoYXJldGl0bGVcIl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBzaGFyZWltYWdlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKHRoaXMubV9hcHBfc2V0dGluZ1tcInNoYXJlaW1hZ2VcIl0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubV9hcHBfc2V0dGluZ1tcInNoYXJlaW1hZ2VcIl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIEdldENmZyh0eXBlOiBVc2VyQ29uZmlnTmFtZSk6IGFueSB7XHJcbiAgICAgICAgdmFyIF90eXBlID0gVXNlckNvbmZpZ05hbWVbdHlwZV07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubV9jb25maWdzW190eXBlXTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBHZXRVc2VyQXR0cihfYXR0cjogVXNlckF0dHIpIHtcclxuICAgICAgICB2YXIgYXR0ciA9IFVzZXJBdHRyW19hdHRyXTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tX3VzZXJbYXR0cl07XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IFNlcnZlclRpbWUoKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgdGltZSA9IExheWEudGltZXIuY3VyclRpbWVyO1xyXG4gICAgICAgIGxldCBzdGltZSA9IHRoaXMubG9naW5TZXZlclRpbWUgKyBNYXRoLmNlaWwoKHRpbWUgLSB0aGlzLmxvY2FsVGltZSkgLyAxMDAwKTtcclxuICAgICAgICByZXR1cm4gc3RpbWU7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IEd1aWRlTGV2ZWwoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5tX2FwcF9zZXR0aW5nW1wiR3VpZGVMZXZlbFwiXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMubV9hcHBfc2V0dGluZ1tcIkd1aWRlTGV2ZWxcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IEJhbm5lck1vdmVUaW1lKCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMubV9hcHBfc2V0dGluZ1tcIkJhbm5lck1vdmVUaW1lXCJdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGhpcy5tX2FwcF9zZXR0aW5nW1wiQmFubmVyTW92ZVRpbWVcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgSGF2ZUJhbm5lcigpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLm1fYXBwX3NldHRpbmdbXCJIYXZlQmFubmVyXCJdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGhpcy5tX2FwcF9zZXR0aW5nW1wiSGF2ZUJhbm5lclwiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBJc1NoYXJlKCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRoaXMubV9hcHBfc2V0dGluZ1tcIklzU2hhcmVcIl0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0aGlzLm1fYXBwX3NldHRpbmdbXCJJc1NoYXJlXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IEJ0bkNhbk1vdmUoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5tX2FwcF9zZXR0aW5nW1wiQnRuQ2FuTW92ZVwiXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMubV9hcHBfc2V0dGluZ1tcIkJ0bkNhbk1vdmVcIl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuICAgIHB1YmxpYyBnZXQgSVNTaGFyZVRoZW5WaWRlbygpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLm1fYXBwX3NldHRpbmdbXCJJU1NoYXJlVGhlblZpZGVvXCJdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGhpcy5tX2FwcF9zZXR0aW5nW1wiSVNTaGFyZVRoZW5WaWRlb1wiXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcHVibGljIGdldCBPcGVuU2NlbmVWYWx1ZSgpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh0aGlzLm1fYXBwX3NldHRpbmdbXCJPcGVuU2NlbmVWYWx1ZVwiXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRoaXMubV9hcHBfc2V0dGluZ1tcIk9wZW5TY2VuZVZhbHVlXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBJc09wZW5UcnlPdXQoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5tX2FwcF9zZXR0aW5nW1wiSXNPcGVuVHJ5T3V0XCJdKSB7XHJcbiAgICAgICAgICAgIHZhciBudW0gPSBOdW1iZXIodGhpcy5tX2FwcF9zZXR0aW5nW1wiSXNPcGVuVHJ5T3V0XCJdKTtcclxuICAgICAgICAgICAgaWYgKG51bSA9PSAwKSByZXR1cm4gMDtcclxuICAgICAgICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPCBudW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcHVibGljIEp1bmRnQ2ZnRm9yQ2RuKGNhbGxiYWxsOiBGdW5jdGlvbikge1xyXG4gICAgLy8gICAgIHRoaXMubV9jb25maWdzID0gbnVsbDtcclxuICAgIC8vICAgICBpZiAodGhpcy5tX2NvbmZpZ3MpIHtcclxuICAgIC8vICAgICAgICAgY2FsbGJhbGwoKTtcclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICB2YXIgY2ZnID0gTGF5YS5Mb2NhbFN0b3JhZ2UuZ2V0SlNPTihNYWluLmNmZyk7XHJcbiAgICAvLyAgICAgICAgIGlmIChjZmcpIHtcclxuICAgIC8vICAgICAgICAgICAgIGlmIChjZmcuVkVSID09IHRoaXMuR2V0Q2ZnVmVyKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5tX2NvbmZpZ3MgPSBjZmc7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjZmflrZjlnKhcIik7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY2FsbGJhbGwoKTtcclxuICAgIC8vICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjZmflrZjlnKjkvYbmmK/ov4fmnJ/kuoZcIik7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgTGF5YS5Mb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShNYWluLmNmZyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgTGF5YS5sb2FkZXIubG9hZChcImNmZy5qc29uXCIsIG5ldyBMYXlhLkhhbmRsZXIodGhpcywgKGRhdGEpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjZmfkuIvovb3lrozmiJBcIik7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBMYXlhLkxvY2FsU3RvcmFnZS5zZXRKU09OKE1haW4uY2ZnLCBkYXRhKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLm1fY29uZmlncyA9IGRhdGE7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWxsKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICAgICAgTGF5YS5sb2FkZXIubG9hZChcImNmZy5qc29uXCIsIG5ldyBMYXlhLkhhbmRsZXIodGhpcywgKGRhdGEpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNmZ+S4i+i9veWujOaIkFwiKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBMYXlhLkxvY2FsU3RvcmFnZS5zZXRKU09OKE1haW4uY2ZnLCBkYXRhKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5tX2NvbmZpZ3MgPSBkYXRhO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNhbGxiYWxsKCk7XHJcbiAgICAvLyAgICAgICAgICAgICB9KSk7XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gcHVibGljIEp1bmRnQ2ZnKHZlciwgY2FsbGJhbGw6IEZ1bmN0aW9uKSB7XHJcbiAgICAvLyAgICAgdGhpcy5tX2NvbmZpZ3MgPSBudWxsO1xyXG4gICAgLy8gICAgIGlmICh0aGlzLm1fY29uZmlncykge1xyXG4gICAgLy8gICAgICAgICBjYWxsYmFsbCh0cnVlKTtcclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICB2YXIgY2ZnID0gTGF5YS5Mb2NhbFN0b3JhZ2UuZ2V0SlNPTihNYWluLkNGRyk7XHJcbiAgICAvLyAgICAgICAgIGlmIChjZmcpIHtcclxuICAgIC8vICAgICAgICAgICAgIGlmIChjZmcuVkVSID09IHZlcikge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuQ2ZnID0gY2ZnO1xyXG5cclxuICAgIC8vICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuW3sue7j+aLpeaciSzkuI3nlKjmm7TmlrBcIik7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgRGF0ZUNvbnRyb2xsZXIuU2V0Q2ZnKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY2FsbGJhbGwodHJ1ZSk7XHJcbiAgICAvLyAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2Zn5a2Y5Zyo5L2G5piv6L+H5pyf5LqGXCIpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTWFpbi5DRkcpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIE5ldE1hbmFnZXIuSW5zdGFuY2UuUG9zdENmZ1JlcXVlc3QoKGRhdGEpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgZGF0YS5WRVIgPSB2ZXI7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnNldEpTT04oTWFpbi5DRkcsIGRhdGEpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLkNmZyA9IGRhdGE7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIERhdGVDb250cm9sbGVyLlNldENmZygpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjYWxsYmFsbCh0cnVlKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICB9LCAoZGF0YSkgPT4ge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIumFjee9ruiOt+WPluWksei0pVwiICsgZGF0YSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWxsKGZhbHNlKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICAgICAgY29uc29sZS5sb2coXCLmnKzlnLDmsqHmnIljZmdcIik7XHJcbiAgICAvLyAgICAgICAgICAgICBOZXRNYW5hZ2VyLkluc3RhbmNlLlBvc3RDZmdSZXF1ZXN0KChkYXRhKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjZmdcIiArIGRhdGEpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGRhdGEuVkVSID0gdmVyO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnNldEpTT04oTWFpbi5DRkcsIGRhdGEpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuQ2ZnID0gZGF0YTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBEYXRlQ29udHJvbGxlci5TZXRDZmcoKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjYWxsYmFsbCh0cnVlKTtcclxuICAgIC8vICAgICAgICAgICAgIH0sIChkYXRhKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLphY3nva7ojrflj5blpLHotKVcIiArIGRhdGEpO1xyXG4gICAgLy8gICAgICAgICAgICAgfSk7XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICB9XHJcblxyXG4gICAgLy99XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVzZXJNb2RlbCB7XHJcbiAgICBwdWJsaWMgZ2V0IEN1ck1vZGVsKCk6IE5ldFVzZXJNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VyTW9kZWw7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTtcclxuICAgIHB1YmxpYyBtX2NvZGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBtX2dlbmRlcjogbnVtYmVyO1xyXG4gICAgcHVibGljIG1fY291bnRyeTogc3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IoY29kZTogc3RyaW5nLCBuaWNrbmFtZTogc3RyaW5nLCBhdmF0YXI6IHN0cmluZywgZ2VuZGVyOiBudW1iZXIsIGNvdW50cnk6IHN0cmluZywgcHJvdmluY2U6IHN0cmluZywgY2l0eTogc3RyaW5nLCBkZXZpY2U6IHN0cmluZywgc2hhcmVfaWQ6IHN0cmluZywgc2NlbmU6IHN0cmluZykge1xyXG4gICAgICAgIFVzZXJNb2RlbC5pbnN0YW5jZSA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5tX2NvZGUgPSBjb2RlO1xyXG4gICAgICAgIHRoaXMubV9uaWNrbmFtZSA9IG5pY2tuYW1lID8gbmlja25hbWUgOiBcIua4uOWuolwiO1xyXG4gICAgICAgIHRoaXMubV9hdmF0YXIgPSBhdmF0YXIgPyBhdmF0YXIgOiBcIlwiO1xyXG4gICAgICAgIHRoaXMubV9nZW5kZXIgPSBnZW5kZXIgPyBnZW5kZXIgOiAwO1xyXG4gICAgICAgIHRoaXMubV9jaXR5ID0gY2l0eSA/IGNpdHkgOiBcIlwiO1xyXG4gICAgICAgIHRoaXMubV9kZXZpY2UgPSBkZXZpY2UgPyBkZXZpY2UgOiBcIlwiO1xyXG4gICAgICAgIHRoaXMubV9zaGFyZV9pZCA9IHNoYXJlX2lkID8gc2hhcmVfaWQgOiBcIlwiO1xyXG4gICAgICAgIHRoaXMubV9zY2VuZSA9IHNjZW5lID8gc2NlbmUgOiBcIlwiO1xyXG4gICAgICAgIHRoaXMubV9jb3VudHJ5ID0gY291bnRyeSA/IGNvdW50cnkgOiBcIlwiO1xyXG4gICAgICAgIHRoaXMubV9wcm92aW5jZSA9IHByb3ZpbmNlID8gcHJvdmluY2UgOiBcIlwiO1xyXG4gICAgfVxyXG4gICAgcHVibGljIG1fY2l0eTogc3RyaW5nO1xyXG4gICAgcHVibGljIG1fZGV2aWNlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbV9zaGFyZV9pZDogc3RyaW5nO1xyXG4gICAgcHVibGljIG1fc2NlbmU6IHN0cmluZztcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEluc3RhbmNlKCk6IFVzZXJNb2RlbCB7XHJcbiAgICAgICAgaWYgKFVzZXJNb2RlbC5pbnN0YW5jZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gVXNlck1vZGVsLmluc3RhbmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgVXNlck1vZGVsLmluc3RhbmNlID0gbmV3IFVzZXJNb2RlbChcIjExXCIsIFwi5ri45a6iXCIsIFwiXCIsIG51bGwsIFwiXCIsIFwiXCIsIFwiXCIsIFwiaXBob25lNnNcIiwgXCJcIiwgXCJcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBVc2VyTW9kZWwuaW5zdGFuY2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIG1fcHJvdmluY2U6IHN0cmluZztcclxuICAgIHB1YmxpYyBtX25pY2tuYW1lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbV9hdmF0YXI6IHN0cmluZztcclxuICAgIHByaXZhdGUgY3VyTW9kZWw6IE5ldFVzZXJNb2RlbDtcclxuICAgIHB1YmxpYyBTZXRVc2VyTW9kZWwoX21vZGVsOiBOZXRVc2VyTW9kZWwpIHtcclxuICAgICAgICB0aGlzLmN1ck1vZGVsID0gX21vZGVsO1xyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuIiwiaW1wb3J0IHsgTWFpbiB9IGZyb20gXCIuLi9NYWluXCI7XHJcbmltcG9ydCBWaWV3TWFuYWdlciBmcm9tIFwiLi4vZ2FtZV9sb2dpYy9WaWV3TWFuYWdlclwiO1xyXG5pbXBvcnQgeyBTZXR0aW5nQ29udHJvbGxlciB9IGZyb20gXCIuLi9nYW1lX2xvZ2ljL1NldHRpbmdDb250cm9sbGVyXCI7XHJcbmltcG9ydCB7IFNoYXJlTW9kdWxlIH0gZnJvbSBcIi4vU2hhcmVNb2R1bGVcIjtcclxuaW1wb3J0IFVzZXJNb2RlbCBmcm9tIFwiLi9Vc2VyTW9kZWxcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBXWFNkayB7XHJcbiAgICBwdWJsaWMgc2V0U2hhcmVJZCh0aWQpIHtcclxuICAgICAgICBpZiAodGlkICE9IFwiXCIgJiYgdGlkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5zaGFyZUlkID0gdGlkO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIltMT0ddOiBzZXRTaGFyZU9wZW5JZC50aWQ9XCIsIHRoaXMuc2hhcmVJZClcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogV1hTZGs7XHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBXWFNkayB7XHJcbiAgICAgICAgcmV0dXJuIFdYU2RrLmluc3RhbmNlIHx8IChXWFNkay5pbnN0YW5jZSA9IG5ldyBXWFNkaygpKTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgTG9kaW5pbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBnZXQgZ2V0U2hhcmVJZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaGFyZUlkO1xyXG4gICAgfVxyXG4gICAgcHVibGljIHNldCBTaGFyZVNjZW5lKHNjZW5lUykge1xyXG4gICAgICAgIGlmIChzY2VuZVMgIT0gXCJcIiAmJiBzY2VuZVMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNoYXJlU2NlbmUgPSBzY2VuZVM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIGluaXQoY2I6IGFueSkge1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guc2hvd1NoYXJlTWVudSh7XHJcbiAgICAgICAgICAgIHdpdGhTaGFyZVRpY2tldDogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vdGhpcy5zaGV6aGlTaGFyZU1lc3NhZ2UobnVsbCwgbnVsbCk7XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5vblNob3coZnVuY3Rpb24gKG9wdGlvbikge1xyXG4gICAgICAgICAgICB2YXIgc2hhcmVUaWNrZXQgPSBvcHRpb24uc2hhcmVUaWNrZXQ7XHJcbiAgICAgICAgICAgIHZhciBzaGFyZWlkID0gb3B0aW9uLnF1ZXJ5LnNoYXJlaWQ7XHJcbiAgICAgICAgICAgIHZhciBzY2VuZSA9IGRlY29kZVVSSUNvbXBvbmVudChvcHRpb24ucXVlcnkuc2NlbmUpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIuWFqOWxgHBhdGg9OlwiLCBvcHRpb24ucGF0aCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGVjb2RlVVJJQ29tcG9uZW50XCIsIG9wdGlvbi5xdWVyeS5zY2VuZSk7XHJcbiAgICAgICAgICAgIHZhciBzY2VuZVF1ZXJ5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9uLnF1ZXJ5KTtcclxuICAgICAgICAgICAgaWYgKE1haW4ud3hWYWx1ZSA9PVwiXCIpICB7XHJcbiAgICAgICAgICAgICAgICBNYWluLnd4VmFsdWUgPSBvcHRpb24uc2NlbmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJzY2VuZVwiLCBvcHRpb24uc2NlbmUpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInNjZW5lUXVlcnlcIiwgc2NlbmVRdWVyeSk7XHJcbiAgICAgICAgICAgIHZhciBjaGFubmVsID0gb3B0aW9uLnF1ZXJ5LmNoYW5uZWw7XHJcbiAgICAgICAgICAgIHZhciBhcHBpZDtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbi5yZWZlcnJlckluZm8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVmZXJyZXJJbmZvOlwiICsgSlNPTi5zdHJpbmdpZnkob3B0aW9uLnJlZmVycmVySW5mbykpO1xyXG4gICAgICAgICAgICAgICAgYXBwaWQgPSBvcHRpb24ucmVmZXJyZXJJbmZvLmFwcElkO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFwcGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJvblNob3cgYXBwaXMgaXM6XCIsIGFwcGlkKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJvblNob3cgYXBwaXMgaXMgbnVsbFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVmZXJyZXJJbmZv5Li656m6XCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjaGFubmVsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib25TaG93IGNoYW5uZWwgaXM6XCIsIGNoYW5uZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNiKHNoYXJlVGlja2V0LCBzaGFyZWlkLCBjaGFubmVsLCBhcHBpZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IFNoYXJlU2NlbmUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hhcmVTY2VuZTtcclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgU2hhcmVNZXNzYWdlKHRpdGxlPywgaW1hZ2VVcmw/KSB7XHJcbiAgICAgICAgaWYgKCFNYWluLklzV3gpIHJldHVybjtcclxuICAgICAgICB2YXIgdDogbnVtYmVyID0gVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLlNlcnZlclRpbWU7XHJcbiAgICAgICAgdmFyIF90aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIHZhciBfdXJsID0gaW1hZ2VVcmw7XHJcbiAgICAgICAgaWYgKCFfdGl0bGUpIHtcclxuICAgICAgICAgICAgX3RpdGxlID0gVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLnNoYXJldGl0bGU7XHJcbiAgICAgICAgICAgIF91cmwgPSBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwuc2hhcmVpbWFnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5vblNoYXJlQXBwTWVzc2FnZSgoKSA9PiAoe1xyXG4gICAgICAgICAgICB0aXRsZTogX3RpdGxlLFxyXG4gICAgICAgICAgICBpbWFnZVVybDogX3VybCxcclxuICAgICAgICAgICAgcXVlcnk6IFwic2hhcmVpZD1cIiArIFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC51c2VyaWQgKyBcIl9cIiArIHQgKyBcIl9cIiArIE1hdGguZmxvb3IoOTk5OSAqIE1hdGgucmFuZG9tKCkpLnRvU3RyaW5nKClcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgd3hfbG9naW4oY2I6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgaWYgKFdYU2RrLkxvZGluaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgV1hTZGsuTG9kaW5pbmcgPSB0cnVlO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRXhjdXRlIHd4LmxvZ2luISBzaGFyZU9wZW5JZDogXCIgKyB0aGlzLnNoYXJlSWQpO1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3gubG9naW4oe1xyXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInd4LmxvZ2luOiBzdWNjZXNzISByZXMuY29kZT1cIiArIHJlcy5jb2RlKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIFdYU2RrLkxvZGluaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLlsIbopoHkvKDpgJLnmoTlj4LmlbA6XCIgKyByZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNiKHJlcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn6I635Y+W55So5oi355m75b2V5oCB5aSx6LSl77yBJyArIHJlcy5lcnJNc2cpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNiKFwiZXJyb3JcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAocmVzKSB7IGNvbnNvbGUubG9nKFwid3gubG9naW46IGZhaWxlZCwgcmVzPVwiICsgcmVzKTsgV1hTZGsuTG9kaW5pbmcgPSBmYWxzZTsgY2IoXCJlcnJvclwiKTsgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBzaGFyZUlkID0gXCJcIjtcclxuICAgIHByaXZhdGUgc2hhcmVTY2VuZSA9IFwiXCI7XHJcbiAgICAvL+aYvuekuuWKoOi9veS/oeaBr1xyXG4gICAgcHVibGljIHN0YXRpYyBTaG93TG9hZGluZyh0aXRsZTogc3RyaW5nID0gXCLliqDovb3kuK0uLi5cIiwgaXNTaG93V3ggPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cgJiYgTGF5YS5Ccm93c2VyLndpbmRvdy53eCkge1xyXG4gICAgICAgICAgICBpZiAoaXNTaG93V3gpIHtcclxuICAgICAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guc2hvd0xvYWRpbmcoeyB0aXRsZTogdGl0bGUsIG1hc2s6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgVmlld01hbmFnZXIuSW5zdGFuY2UuT3Blbk1hc2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc3RhdGljIFN5c3RlbUluZm8oKSB7XHJcbiAgICAgICAgaWYgKExheWEuQnJvd3Nlci53aW5kb3cud3gpIHtcclxuICAgICAgICAgICAgcmV0dXJuIExheWEuQnJvd3Nlci53aW5kb3cud3guZ2V0U3lzdGVtSW5mb1N5bmMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBwcml2YXRlIHN0YXRpYyBidXR0b247XHJcbiAgICAvLyBwdWJsaWMgc3RhdGljIHNob3diald4R2FtZVF1YW4oZmxhZzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgLy8gICAgIGlmIChMYXlhLkJyb3dzZXIud2luZG93Lnd4ID09IG51bGwpIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBpZiAoZmxhZykge1xyXG4gICAgLy8gICAgICAgICBpZiAoV2VpWGluU0RLLmJ1dHRvbiA9PSBudWxsKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBsZXQgaW5mbyA9IExheWEuQnJvd3Nlci53aW5kb3cud3guZ2V0U3lzdGVtSW5mb1N5bmMoKTtcclxuICAgIC8vICAgICAgICAgICAgIGlmICghaW5mbykgcmV0dXJuO1xyXG4gICAgLy8gICAgICAgICAgICAgdmFyIHRvcCA9IDQ3NCAqIGluZm8ud2luZG93SGVpZ2h0IC8gTGF5YS5zdGFnZS5oZWlnaHQ7XHJcbiAgICAvLyAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gOTQgKiBpbmZvLndpbmRvd0hlaWdodCAvIExheWEuc3RhZ2UuaGVpZ2h0O1xyXG4gICAgLy8gICAgICAgICAgICAgdmFyIHdpZHRoID0gaGVpZ2h0ICogOTUgLyA5NDtcclxuICAgIC8vICAgICAgICAgICAgIFdlaVhpblNESy5idXR0b24gPSBMYXlhLkJyb3dzZXIud2luZG93Lnd4LmNyZWF0ZUdhbWVDbHViQnV0dG9uXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgKHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbWFnZVwiLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBpbWFnZTogJ3Jlcy93eC5wbmcnLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBzdHlsZTpcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogdG9wLFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodFxyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgIFdlaVhpblNESy5idXR0b24uc2hvdygpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBlbHNlIHtcclxuICAgIC8vICAgICAgICAgaWYgKFdlaVhpblNESy5idXR0b24pIHtcclxuICAgIC8vICAgICAgICAgICAgIFdlaVhpblNESy5idXR0b24uaGlkZSgpO1xyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG4gICAgLy/pgIDlh7pcclxuXHJcblxyXG4gICAgLy8g5pi+56S65o+Q56S65L+h5oGvLy9cclxuICAgIHB1YmxpYyBzdGF0aWMgU2hvd1RvYXN0KHRleHQ6IHN0cmluZywgaWNvbiA9IHRydWUpIHtcclxuICAgICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdy53eCkge1xyXG4gICAgICAgICAgICB2YXIgdF9pY29uID0gaWNvbiA/IFwic3VjY2Vzc1wiIDogXCJub25lXCI7XHJcbiAgICAgICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guc2hvd1RvYXN0KHsgdGl0bGU6IHRleHQsIGljb246IHRfaWNvbiB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vMTpwZXQgMjrkurrnialcclxuICAgIC8vIHB1YmxpYyBzdGF0aWMgWGlhblNoaV9Nb2RlbChjb250ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbiA9IG51bGwsIHR5cGUgPSAxLCB0aXRsZSA9IFwiXCIpIHtcclxuICAgIC8vICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdyAmJiBMYXlhLkJyb3dzZXIud2luZG93Lnd4KSB7XHJcbiAgICAvLyAgICAgICAgIGlmICh0eXBlID09IDEpIHtcclxuICAgIC8vICAgICAgICAgICAgIHZhciBjYW5jZWxUZXh0ID0gXCLmrovlv43kuKLmjolcIjtcclxuICAgIC8vICAgICAgICAgICAgIHZhciBjb25maXJtVGV4dCA9IFwi5bim5LiK5LiA6LW3XCI7XHJcbiAgICAvLyAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICB2YXIgY2FuY2VsVGV4dCA9IFwi5LiN5oOzXCI7XHJcbiAgICAvLyAgICAgICAgICAgICB2YXIgY29uZmlybVRleHQgPSBcIuaDs1wiO1xyXG4gICAgLy8gICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICBMYXlhLkJyb3dzZXIud2luZG93Lnd4LnNob3dNb2RhbCh7XHJcbiAgICAvLyAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAvLyAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50LFxyXG4gICAgLy8gICAgICAgICAgICAgY2FuY2VsVGV4dDogY2FuY2VsVGV4dCxcclxuICAgIC8vICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBjb25maXJtVGV4dCxcclxuICAgIC8vICAgICAgICAgICAgIHN1Y2Nlc3MocmVzKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHJlcy5jb25maXJtKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfnlKjmiLfngrnlh7vnoa7lrponKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodHJ1ZSk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMuY2FuY2VsKSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfnlKjmiLfngrnlh7vlj5bmtognKTtcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UpO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIH0sXHJcbiAgICAvLyAgICAgICAgICAgICBmYWlsKHJlcz8pIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygn55So5oi354K55Ye75Y+W5raIJyk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UpO1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9KVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgU2hvcnRWaWJyYXRlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChMYXlhLkJyb3dzZXIud2luZG93Lnd4ICYmIFNldHRpbmdDb250cm9sbGVyLkluc3RhbmNlLnZpYnJhdGUpIHtcclxuICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC52aWJyYXRlU2hvcnQoe30pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIExvbmdWaWJyYXRlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChMYXlhLkJyb3dzZXIud2luZG93Lnd4ICYmIFNldHRpbmdDb250cm9sbGVyLkluc3RhbmNlLnZpYnJhdGUpIHtcclxuICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC52aWJyYXRlTG9uZyh7fSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBIaWRlTG9hZGluZyhpc1Nob3dXeCA9IHRydWUpIHtcclxuICAgICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdyAmJiBMYXlhLkJyb3dzZXIud2luZG93Lnd4KSB7XHJcbiAgICAgICAgICAgIGlmIChpc1Nob3dXeCkge1xyXG4gICAgICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5oaWRlTG9hZGluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFZpZXdNYW5hZ2VyLkluc3RhbmNlLkNsb3NlTWFzaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBzdGF0aWMgU3VjY2VzcyhzdGFnZUlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIU1haW4uSXNXeCkgcmV0dXJuO1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guYWxkU3RhZ2Uub25FbmQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0YWdlSWQ6IHN0YWdlSWQsICAgICAvL+WFs+WNoUlEIOivpeWtl+auteW/heS8oFxyXG4gICAgICAgICAgICAgICAgc3RhZ2VOYW1lOiBcIuesrFwiICsgc3RhZ2VJZCArIFwi5YWzXCIsIC8v5YWz5Y2h5ZCN56ewICDor6XlrZfmrrXlv4XkvKBcclxuICAgICAgICAgICAgICAgIGV2ZW50OiBcImNvbXBsZXRlXCIsICAgLy/lhbPljaHlrozmiJAgIOWFs+WNoei/m+ihjOS4re+8jOeUqOaIt+inpuWPkeeahOaTjeS9nCAgICDor6XlrZfmrrXlv4XkvKBcclxuICAgICAgICAgICAgICAgIHBhcmFtczpcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFwi5YWz5Y2h5a6M5oiQXCIgICAvL+aPj+i/sFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgfVxyXG4gICAgLy/orrDlvZXpmL/mi4nkuIHkuovku7ZcclxuICAgIHB1YmxpYyBzdGF0aWMgQWxkRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIGtleT86IHN0cmluZywgdmFsdWU/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdyAmJiBMYXlhLkJyb3dzZXIud2luZG93Lnd4KSB7XHJcbiAgICAgICAgICAgIGlmICgha2V5KSBrZXkgPSBcIueUqOaIt2lkXCI7XHJcbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5hbGRTZW5kRXZlbnQoZXZlbnROYW1lLCB7IGtleTogdmFsdWUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIHN0YXRpYyBGYWlsKHN0YWdlSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5hbGRTdGFnZS5vbkVuZChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3RhZ2VJZDogc3RhZ2VJZCwgICAgIC8v5YWz5Y2hSUQg6K+l5a2X5q615b+F5LygXHJcbiAgICAgICAgICAgICAgICBzdGFnZU5hbWU6IFwi56ysXCIgKyBzdGFnZUlkICsgXCLlhbNcIiwgLy/lhbPljaHlkI3np7AgIOivpeWtl+auteW/heS8oFxyXG4gICAgICAgICAgICAgICAgZXZlbnQ6IFwiZmFpbFwiLCAgIC8v5YWz5Y2h5a6M5oiQICDlhbPljaHov5vooYzkuK3vvIznlKjmiLfop6blj5HnmoTmk43kvZwgICAg6K+l5a2X5q615b+F5LygXHJcbiAgICAgICAgICAgICAgICBwYXJhbXM6XHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBcIuWFs+WNoeWksei0pVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgfVxyXG4gICAgLy8gcHVibGljIHN0YXRpYyBsZXZlbGVSdW5pbmcoc3RhZ2VJZDogc3RyaW5nLCB1c2VyaWQ6IHN0cmluZywgZXZlbnR0eXBlOiBudW1iZXIsIGl0ZW1OYW1lOiBzdHJpbmcpIHtcclxuICAgIC8vICAgICBpZiAoTGF5YS5Ccm93c2VyLndpbmRvdyAmJiBMYXlhLkJyb3dzZXIud2luZG93Lnd4KSB7XHJcbiAgICAvLyAgICAgICAgIC8vTGF5YS5Ccm93c2VyLndpbmRvdy53eC5hbGRTdGFnZS5vblJ1bm5pbmcoe1wic3RhZ2VJZFwiOnN0YWdlSWQsXCJzdGFnZU5hbWVcIjpzdGFnZU5hbWUsXCJ1c2VySWRcIjp1c2VyaWR9KTtcclxuICAgIC8vICAgICAgICAgdmFyIGV2ZW50VCA9IGV2ZW50dHlwZSA9PSAwID8gXCJhd2FyZFwiIDogXCJyZXZpdmVcIjtcclxuICAgIC8vICAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5hbGRTdGFnZS5vblJ1bm5pbmcoe1xyXG4gICAgLy8gICAgICAgICAgICAgc3RhZ2VJZDogc3RhZ2VJZCxcclxuICAgIC8vICAgICAgICAgICAgIHN0YWdlTmFtZTogXCLnrKxcIiArIHN0YWdlSWQgKyBcIuWFs1wiLFxyXG4gICAgLy8gICAgICAgICAgICAgdXNlcklkOiB1c2VyaWQsXHJcbiAgICAvLyAgICAgICAgICAgICBldmVudDogZXZlbnRULFxyXG4gICAgLy8gICAgICAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaXRlbU5hbWU6IGl0ZW1OYW1lLFxyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9KVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFN0YXJ0KHN0YWdlSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSByZXR1cm47XHJcbiAgICAgICAgTGF5YS5Ccm93c2VyLndpbmRvdy53eC5hbGRTdGFnZS5vblN0YXJ0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdGFnZUlkOiBzdGFnZUlkLCAgICAgLy/lhbPljaFJRCDor6XlrZfmrrXlv4XkvKBcclxuICAgICAgICAgICAgICAgIHN0YWdlTmFtZTogXCLnrKxcIiArIHN0YWdlSWQgKyBcIuWFs1wiLCAvL+WFs+WNoeWQjeensCAg6K+l5a2X5q615b+F5LygXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIEdhbWVfU2hhcmUoY2FsbGJhY2s6IEZ1bmN0aW9uID0gbnVsbCwgY2hhbm5lbDogc3RyaW5nID0gXCJcIik6IHZvaWQge1xyXG4gICAgICAgIGlmICghTWFpbi5Jc1d4KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHVybDtcclxuICAgICAgICB2YXIgdGl0bGU7XHJcbiAgICAgICAgdXJsID0gVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLnNoYXJlaW1hZ2U7XHJcbiAgICAgICAgdGl0bGUgPSBVc2VyTW9kZWwuSW5zdGFuY2UuQ3VyTW9kZWwuc2hhcmV0aXRsZTtcclxuICAgICAgICBjb25zb2xlLmxvZyh1cmwgKyBcIiAgXCIgKyB0aXRsZSk7XHJcblxyXG4gICAgICAgXHJcbiAgICAgICAgaWYgKGNoYW5uZWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBXZWlYaW5TREsuQWxkRXZlbnQoXCLnlKjmiLfliIbkuqtcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0OiBudW1iZXI7Ly8gPSBVc2VyTW9kZWwuR2V0X0luc3RhbmNlLkN1ck1vZGVsLkh1b1F1X1NlcnZlclRpbWU7XHJcbiAgICAgICAgdmFyIHBhdGggPSBcIlwiO1xyXG4gICAgICAgIExheWEuQnJvd3Nlci53aW5kb3cud3guYWxkU2hhcmVBcHBNZXNzYWdlKHtcclxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxyXG4gICAgICAgICAgICBpbWFnZVVybDogdXJsLFxyXG4gICAgICAgICAgICBxdWVyeTogXCJzaGFyZWlkPVwiICsgVXNlck1vZGVsLkluc3RhbmNlLkN1ck1vZGVsLnVzZXJpZCArIFwiX1wiICsgXCJvdGhlclwiICsgXCJfXCIgKyB0ICsgXCJfXCIgKyBNYXRoLmZsb29yKDk5OTkgKiBNYXRoLnJhbmRvbSgpKS50b1N0cmluZygpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBTaGFyZU1vZHVsZS5Hb1NoYXJlKGNhbGxiYWNrKTtcclxuXHJcbiAgICB9XHJcbn0iLCJcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGljdGlvbmFyeSB7XHJcbiAgICBwcml2YXRlIF9sZW5ndGg6IG51bWJlcjtcclxuXHJcbiAgICBwcml2YXRlIF9jb250YWluZXI6IGFueTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLl9jb250YWluZXIgPSB7fTtcclxuICAgICAgICB0aGlzLl9sZW5ndGggPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgY29udGFpbmVyKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcclxuICAgIH1cclxuXHJcbiAgICAvL+iOt+WPluWtl+WFuOmVv+W6piAgICBcclxuICAgIHB1YmxpYyBnZXQgc2l6ZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgLy/mt7vliqBcclxuICAgIHB1YmxpYyBzZXQoa2V5OiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvbnRhaW5lci5oYXNPd25Qcm9wZXJ0eShrZXkpKSAge1xyXG4gICAgICAgICAgICB0aGlzLl9sZW5ndGgrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29udGFpbmVyW2tleV0gPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvL+WIoOmZpCAgICAgXHJcbiAgICBwdWJsaWMgZGVsZXRlKGtleTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lci5oYXNPd25Qcm9wZXJ0eShrZXkpKSAge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fY29udGFpbmVyW2tleV07XHJcbiAgICAgICAgICAgIHRoaXMuX2xlbmd0aC0tO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL+afpeaJviAgIFxyXG4gICAgcHVibGljIGhhcyhrZXk6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXIuaGFzT3duUHJvcGVydHkoa2V5KSA/IHRydWUgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvL+iOt+WPliBcclxuICAgIHB1YmxpYyBnZXQoa2V5OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jb250YWluZXIuaGFzT3duUHJvcGVydHkoa2V5KSkgIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcltrZXldO1xyXG4gICAgICAgIH0gZWxzZSAge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8v5riF56m6ICAgIFxyXG4gICAgcHVibGljIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2xlbmd0aCA9IDA7XHJcbiAgICB9XHJcblxyXG5cclxufSIsIlxyXG5pbXBvcnQgVXNlck1vZGVsIGZyb20gXCIuLi9nYW1lX21vZHVsZS9Vc2VyTW9kZWxcIjtcclxuaW1wb3J0IFZlY3RvcjM9TGF5YS5WZWN0b3IzO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lX1Rvb2wge1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0T2JqS2V5KG9iajogYW55KSB7XHJcbiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy/ov5Tlm57kuIDkuKrpmo/mnLrmlbTmlbBbbWluLG1heF1cclxuICAgIHB1YmxpYyBzdGF0aWMgcmFuZG9tSW50KG1pbjogYW55LCBtYXg6IGFueSk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkgKyBtaW4pO1xyXG4gICAgfVxyXG4gICAgLy9wMSDlt6blkJHph48gcDJcclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QW5nKHh4OiBudW1iZXIsIHl5OiBudW1iZXIsIG9ibDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gMTgwIC8gTWF0aC5QSSAqIHRoaXMuZ2V0UmFkKHh4LCB5eSwgb2JsKTtcclxuICAgIH1cclxuICAgIC8v6L+U5Zue6KeS5bqmXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFJhZCh4eDogbnVtYmVyLCB5eTogbnVtYmVyLCBvYmw6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgLy8g5pa55rOV5LiA77yaYXNpbigpXHJcbiAgICAgICAgLy8gdmFyIHJhZDpOdW1iZXIgPSB4eCA+IDAgPyAoKE1hdGguUEkgKiAzKS8yICArIE1hdGguYXNpbigteXkvb2JsKSkgOiAoTWF0aC5QSSAvIDIgLSAgTWF0aC5hc2luKC15eS9vYmwpKTtcclxuICAgICAgICAvLyDmlrnms5XkuozvvJphY29zKClcclxuICAgICAgICB2YXIgcmFkOiBudW1iZXIgPSB5eSA8IDAgPyBNYXRoLmFjb3MoeHggLyBvYmwpIDogKE1hdGguUEkgKiAyIC0gTWF0aC5hY29zKHh4IC8gb2JsKSk7XHJcbiAgICAgICAgLy8g5pa55rOV5LiJ77yaYXRhbjIoKVxyXG4gICAgICAgIC8vIHZhciByYWQ6TnVtYmVyID0geXkgPCAwID8gTWF0aC5hdGFuMigteXksIHh4KSA6IE1hdGguUEkgKiAyICsgTWF0aC5hdGFuMigteXksIHh4KTtcclxuICAgICAgICByZXR1cm4gcmFkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0TV9WZWN0b3IodjE6IExheWEuVmVjdG9yMywgdjI6IExheWEuVmVjdG9yMyk6IExheWEuVmVjdG9yMyB7XHJcbiAgICAgICAgbGV0IHRlbXAgPSBuZXcgTGF5YS5WZWN0b3IzKCk7XHJcbiAgICAgICAgTGF5YS5WZWN0b3IzLmFkZCh2MSwgdjIsIHRlbXApO1xyXG4gICAgICAgIHJldHVybiBuZXcgTGF5YS5WZWN0b3IzKHRlbXAueCAqIDAuNSwgdGVtcC55ICogMC41LCB0ZW1wLnogKiAwLjUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFJlZmxlY3RBbmcoZGlyOlZlY3RvcjMpe1xyXG4gICAgICAgIHZhciB4eD1NYXRoLmFicyhkaXIueCk7XHJcbiAgICAgICAgdmFyIHp6PU1hdGguYWJzKGRpci56KTtcclxuICAgICAgICB2YXIgb2JsPSBNYXRoLnNxcnQoTWF0aC5wb3coZGlyLngsIDIpICsgTWF0aC5wb3coZGlyLnosIDIpKTtcclxuICAgICAgICByZXR1cm4gOTAtIDE4MCAvIE1hdGguUEkgKiBNYXRoLmFjb3MoeHggLyBvYmwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcmFuZG9tXzF0bzEoKTpudW1iZXJ7IFxyXG4gICAgICAgIHZhciBpc3poZW5nPU1hdGgucmFuZG9tKCk+MC41Py0xOjE7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkqaXN6aGVuZztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldDY0RW5jb2RlKHN0cik6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIGMxLCBjMiwgYzM7XHJcbiAgICAgICAgdmFyIGJhc2U2NEVuY29kZUNoYXJzID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCI7XHJcbiAgICAgICAgdmFyIGkgPSAwLCBsZW4gPSBzdHIubGVuZ3RoLCBzdHJpbmcgPSAnJztcclxuICAgICAgICB3aGlsZSAoaSA8IGxlbikge1xyXG4gICAgICAgICAgICBjMSA9IHN0ci5jaGFyQ29kZUF0KGkrKykgJiAweGZmO1xyXG4gICAgICAgICAgICBpZiAoaSA9PSBsZW4pIHtcclxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoYzEgPj4gMik7XHJcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gYmFzZTY0RW5jb2RlQ2hhcnMuY2hhckF0KChjMSAmIDB4MykgPDwgNCk7XHJcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gXCI9PVwiO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYzIgPSBzdHIuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgICAgICBpZiAoaSA9PSBsZW4pIHtcclxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoYzEgPj4gMik7XHJcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gYmFzZTY0RW5jb2RlQ2hhcnMuY2hhckF0KCgoYzEgJiAweDMpIDw8IDQpIHwgKChjMiAmIDB4RjApID4+IDQpKTtcclxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoKGMyICYgMHhGKSA8PCAyKTtcclxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBcIj1cIjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGMzID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICAgICAgc3RyaW5nICs9IGJhc2U2NEVuY29kZUNoYXJzLmNoYXJBdChjMSA+PiAyKTtcclxuICAgICAgICAgICAgc3RyaW5nICs9IGJhc2U2NEVuY29kZUNoYXJzLmNoYXJBdCgoKGMxICYgMHgzKSA8PCA0KSB8ICgoYzIgJiAweEYwKSA+PiA0KSk7XHJcbiAgICAgICAgICAgIHN0cmluZyArPSBiYXNlNjRFbmNvZGVDaGFycy5jaGFyQXQoKChjMiAmIDB4RikgPDwgMikgfCAoKGMzICYgMHhDMCkgPj4gNikpO1xyXG4gICAgICAgICAgICBzdHJpbmcgKz0gYmFzZTY0RW5jb2RlQ2hhcnMuY2hhckF0KGMzICYgMHgzRilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICAvLyBwdWJsaWMgc3RhdGljIFNldEh1VHVpTGlzdChsaXN0OkxheWEuTGlzdCxkYXRhPyxzY3JvbDpudW1iZXI9MSx0eXBlOm51bWJlcj0wKXsgLy9zY3JvbCAxOuerlueahCAgMuaoqueahFxyXG4gICAgLy8gICAgIHZhciBhcnI9ZGF0YT9kYXRhOkZZSERfU2RrLnB1c2hEYXRhO1xyXG4gICAgLy8gICAgIGxpc3Quc2VsZWN0RW5hYmxlID0gZmFsc2U7XHJcbiAgICAvLyAgICAgc2Nyb2w9PTE/bGlzdC52U2Nyb2xsQmFyU2tpbiA9IFwiXCI6bGlzdC5oU2Nyb2xsQmFyU2tpbiA9IFwiXCI7XHJcbiAgICAvLyAgICAgbGlzdC5yZW5kZXJIYW5kbGVyID0gTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCB0aGlzLnVwZGF0ZUl0ZW0sIFt0eXBlXSwgZmFsc2UpO1xyXG4gICAgLy8gICAgIGxpc3QuYXJyYXkgPSBhcnI7XHJcbiAgICAvLyAgICAgbGlzdC5yZWZyZXNoKCk7XHJcbiAgICAvLyAgfVxyXG4gICAgLy8gIHByaXZhdGUgc3RhdGljIHVwZGF0ZUl0ZW0odHlwZSxjZWxsOiBMYXlhLkJveCwgaW5kZXg6IG51bWJlcil7XHJcbiAgICAvLyAgICAgIHZhciBhZGl0ZW09Y2VsbC5nZXRDb21wb25lbnQoSHVpVHVpSXRlbSlhcyBIdWlUdWlJdGVtO1xyXG4gICAgLy8gICAgICBhZGl0ZW0uUmVmcmVzaCh0eXBlKTtcclxuICAgIC8vICB9XHJcbiAgICAvLyAgcHVibGljIHN0YXRpYyBtYWtlUmFuZG9tQXJyKGFyckxpc3QsbnVtKXtcclxuICAgIC8vICAgICBpZihudW0+YXJyTGlzdC5sZW5ndGgpe1xyXG4gICAgLy8gICAgICAgIHJldHVybjtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgdmFyIHRlbXBBcnI9YXJyTGlzdC5zbGljZSgwKTtcclxuICAgIC8vICAgICB2YXIgbmV3QXJyTGlzdD1bXTsgICAgXHJcbiAgICAvLyAgICAgZm9yKHZhciBpPTA7aTxudW07aSsrKXtcclxuICAgIC8vICAgICAgICAgdmFyIHJhbmRvbT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKHRlbXBBcnIubGVuZ3RoLTEpKTtcclxuICAgIC8vICAgICAgICAgdmFyIGFycj10ZW1wQXJyW3JhbmRvbV07XHJcbiAgICAvLyAgICAgICAgIHRlbXBBcnIuc3BsaWNlKHJhbmRvbSwgMSk7XHJcbiAgICAvLyAgICAgICAgIG5ld0Fyckxpc3QucHVzaChhcnIpOyAgICBcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgcmV0dXJuIG5ld0Fyckxpc3Q7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBwdWJsaWMgc3RhdGljIENvcHlBcnIobyk6YW55e1xyXG4gICAgLy8gICAgIHZhciBhcnI9W107XHJcbiAgICAvLyAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG8ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBvW2luZGV4XTtcclxuICAgIC8vICAgICAgICAgYXJyLnB1c2goZWxlbWVudCk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIHJldHVybiBhcnI7XHJcbiAgICAvLyB9XHJcblxyXG5cclxuICAgIC8vIHB1YmxpYyBzdGF0aWMgU2hvd1FpYW5EYW8oKTogYm9vbGVhbiB7XHJcbiAgICAvLyAgICAgbGV0IHRvZGF5WmVybyA9IG5ldyBEYXRlKFVzZXJNb2RlbC5JbnN0YW5jZS5DdXJNb2RlbC5TZXJ2ZXJUaW1lICogMTAwMCk7XHJcbiAgICAvLyAgICAgdG9kYXlaZXJvLnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgLy8gICAgIGlmKCFQbGF5ZXJNYW5hZ2VyLkluc3RhbmNlLnNpZ24pcmV0dXJuIHRydWU7XHJcbiAgICAvLyAgICAgdmFyIGxhc3RUaW1lID0gTnVtYmVyKFBsYXllck1hbmFnZXIuSW5zdGFuY2Uuc2lnbltcInNpZ25fdGltZVwiXSkgKiAxMDAwO1xyXG4gICAgLy8gICAgIGxldCBsYXN0U2lnblRpbWUgPSBuZXcgRGF0ZShsYXN0VGltZSk7XHJcbiAgICAvLyAgICAgaWYgKGxhc3RUaW1lID09IDApIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGlmIChsYXN0U2lnblRpbWUudmFsdWVPZigpIDwgdG9kYXlaZXJvLnZhbHVlT2YoKSkge1xyXG4gICAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgQ3JlYXRlVGV4dChjb250ZW50OnN0cmluZyl7XHJcbiAgICAgICAgdmFyIGN1clRleHQgPSBuZXcgTGF5YS5UZXh0O1xyXG4gICAgICAgIGN1clRleHQud2lkdGggPSAzMDA7XHJcbiAgICAgICAgY3VyVGV4dC5oZWlnaHQgPSA1MDtcclxuICAgICAgICBcclxuICAgICAgICBjdXJUZXh0LmFsaWduID0gXCJjZW50ZXJcIjtcclxuICAgICAgICBjdXJUZXh0LnZhbGlnbiA9IFwibWlkZGxlXCI7XHJcbiAgICAgICAgY3VyVGV4dC5mb250ID0gXCJNaWNyb3NvZnQgWWFIZWlcIjtcclxuICAgICAgICBjdXJUZXh0LmZvbnRTaXplID0gMzU7XHJcbiAgICAgICAgY3VyVGV4dC5jb2xvciA9IFwiI2ZmOGUwMFwiO1xyXG4gICAgICAgIGN1clRleHQuYm9sZCA9IHRydWU7XHJcbiAgICAgICAgY3VyVGV4dC5mb250ID0gXCJNaWNyb3NvZnQgWWFIZWlcIjtcclxuICAgICAgICBjdXJUZXh0LnRleHQgPSBjb250ZW50O1xyXG4gICAgICAgIGN1clRleHQueCA9IDYwO1xyXG4gICAgICAgIGN1clRleHQueSA9IDEwO1xyXG4gICAgICAgIExheWEuc3RhZ2UuYWRkQ2hpbGQoY3VyVGV4dCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coY3VyVGV4dCk7XHJcbiAgICAgICAgdmFyIHR3ZWVuID0gTGF5YS5Ud2Vlbi50byhwYXJlbnQse3k6Y3VyVGV4dC55IC0gMjAwfSwxMDAwLExheWEuRWFzZS5leHBvSW5PdXQsTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCgpPT5cclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHR3ZWVuLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIGN1clRleHQuZGVzdHJveSgpO1xyXG4gICAgICAgIH0pLDEwMCk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgVHdlZW4gPSBMYXlhLlR3ZWVuO1xyXG5pbXBvcnQgeyBTZXR0aW5nQ29udHJvbGxlciB9IGZyb20gXCIuLi8uLi9nYW1lX2xvZ2ljL1NldHRpbmdDb250cm9sbGVyXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEltYWdlUnVuVGltZSBleHRlbmRzIExheWEuSW1hZ2Uge1xyXG4gICAgcHVibGljIHNjYWxlVGltZTogbnVtYmVyID0gODA7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIC8v6K6+572u57uE5Lu255qE5Lit5b+D54K5XHJcbiAgICAgICAgdGhpcy5hbmNob3JYID0gdGhpcy5hbmNob3JZID0gMC41O1xyXG4gICAgICAgIHRoaXMub24oTGF5YS5FdmVudC5NT1VTRV9ET1dOLCB0aGlzLCB0aGlzLnNjYWxlU21hbGwpO1xyXG4gICAgICAgIHRoaXMub24oTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5zY2FsZUJpZyk7XHJcbiAgICAgICAgdGhpcy5vbihMYXlhLkV2ZW50Lk1PVVNFX09VVCwgdGhpcywgdGhpcy5zY2FsZUJpZyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX21jbGlja0hhbmRsZXI6IEZ1bmN0aW9uO1xyXG4gICAgcHJpdmF0ZSBiaWdUd2VlbjogVHdlZW47XHJcbiAgICBwcml2YXRlIFNtYWxsVHdlZW46IFR3ZWVuO1xyXG4gICAgcHJpdmF0ZSBjbGlja0lkPWZhbHNlO1xyXG4gICAgcHJpdmF0ZSBzY2FsZUJpZyhlOkxheWEuRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICAvL+WPmOWkp+i/mOWOn+eahOe8k+WKqOaViOaenFxyXG4gICAgIFxyXG4gICAgICAgIGlmKCF0aGlzLmNsaWNrSWQpcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2xpY2tJZD1mYWxzZTtcclxuICAgICAgXHJcbiAgICAgICAgdGhpcy5iaWdUd2VlbiA9IFR3ZWVuLnRvKHRoaXMsIHsgc2NhbGVYOiAxLCBzY2FsZVk6IDEgfSwgdGhpcy5zY2FsZVRpbWUpO1xyXG4gICAgICAgIGlmICh0aGlzLl9tY2xpY2tIYW5kbGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21jbGlja0hhbmRsZXIoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHNjYWxlU21hbGwoZTpMYXlhLkV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgLy/nvKnlsI/oh7MwLjjnmoTnvJPliqjmlYjmnpxcclxuICAgICAgICBTZXR0aW5nQ29udHJvbGxlci5JbnN0YW5jZS5fQ2xpY2soKTtcclxuICAgICAgICB0aGlzLmNsaWNrSWQ9dHJ1ZTtcclxuICAgICAgICB0aGlzLlNtYWxsVHdlZW4gPSBUd2Vlbi50byh0aGlzLCB7IHNjYWxlWDogMC44LCBzY2FsZVk6IDAuOCB9LCB0aGlzLnNjYWxlVGltZSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgQ2xlYXJSdW5UaW1lKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmJpZ1R3ZWVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmlnVHdlZW4uY2xlYXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuU21hbGxUd2Vlbikge1xyXG4gICAgICAgICAgICB0aGlzLlNtYWxsVHdlZW4uY2xlYXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub2ZmKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5zY2FsZVNtYWxsKTtcclxuICAgICAgICB0aGlzLm9mZihMYXlhLkV2ZW50Lk1PVVNFX1VQLCB0aGlzLCB0aGlzLnNjYWxlQmlnKTtcclxuICAgICAgICB0aGlzLm9mZihMYXlhLkV2ZW50Lk1PVVNFX09VVCwgdGhpcywgdGhpcy5zY2FsZUJpZyk7XHJcbiAgICAgICAgdGhpcy5fbWNsaWNrSGFuZGxlciA9IG51bGw7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgeyB1aSB9IGZyb20gXCIuLi91aS9sYXlhTWF4VUlcIjtcclxuaW1wb3J0IHsgRXZlbnRNYW5hZ2VyIH0gZnJvbSBcIi4uL2dhbWVfbW9kdWxlL0V2ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgeyBSb2xlQ29udHJvbGxlciB9IGZyb20gXCIuLi9nYW1lX2xvZ2ljL1JvbGVDb250cm9sbGVyXCI7XHJcbmltcG9ydCBWZWN0b3IzID0gTGF5YS5WZWN0b3IzO1xyXG5pbXBvcnQgeyBHYW1lQ29udHJvbGxlciB9IGZyb20gXCIuLi9nYW1lX2xvZ2ljL0dhbWVDb250cm9sbGVyXCI7XHJcbmV4cG9ydCBjbGFzcyBnYW1lX3VpIGV4dGVuZHMgdWkuZ2FtZV91aVVJIGltcGxlbWVudHMgVUlfSW50ZXJmYWNlIHtcclxuXHJcblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5yZXNpemVIYW5kZXIoKTtcclxuICAgICAgICBFdmVudE1hbmFnZXIub24oTGF5YS5FdmVudC5SRVNJWkUsIHRoaXMsIHRoaXMucmVzaXplSGFuZGVyKTtcclxuICAgIH1cclxuICAgIHJlc2l6ZUhhbmRlcigpIHtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IExheWEuc3RhZ2UuaGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgT25TaG93KGRhdGE/OiBhbnkpIHtcclxuICAgICAgICB0aGlzLlVpRXZlbnRIYW5kbGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgVWlFdmVudEhhbmRsZXIoKSB7XHJcbiAgICAgICAgdGhpcy5vbihMYXlhLkV2ZW50Lk1PVVNFX0RPV04sIHRoaXMsIHRoaXMuT25DbGlja0Rvd24pO1xyXG4gICAgICAgIHRoaXMub24oTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5PbkNsaWNrVXApO1xyXG4gICAgICAgIHRoaXMub24oTGF5YS5FdmVudC5NT1VTRV9PVVQsIHRoaXMsIHRoaXMuT25DbGlja1VwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzZG93biA9IGZhbHNlO1xyXG4gICAgT25DbGlja0Rvd24oZTogTGF5YS5FdmVudCkge1xyXG4gICAgICAgIGlmIChlLnRhcmdldCBpbnN0YW5jZW9mIExheWEuVUlDb21wb25lbnQpIHJldHVybjtcclxuICAgICAgICBpZiAoIUdhbWVDb250cm9sbGVyLkluc3RhbmNlLmdhbWVTdGFydCB8fCBHYW1lQ29udHJvbGxlci5JbnN0YW5jZS5nYW1lb3ZlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaXNkb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9uKExheWEuRXZlbnQuTU9VU0VfTU9WRSwgdGhpcywgdGhpcy5PblNsaWRlcik7XHJcbiAgICAgICAgdGhpcy5jdXJNb3VzZVBvcyA9IG5ldyBWZWN0b3IzKExheWEuTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWCwgTGF5YS5Nb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VZKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGFydFBvcyA9IHRoaXMuY3VyTW91c2VQb3MuY2xvbmUoKTtcclxuICAgICAgICB0aGlzLk1vdXNlRCgpO1xyXG4gICAgfVxyXG4gICAgT25DbGlja1VwKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc2Rvd24pIHJldHVybjtcclxuICAgICAgICBpZiAoIUdhbWVDb250cm9sbGVyLkluc3RhbmNlLmdhbWVTdGFydCB8fCBHYW1lQ29udHJvbGxlci5JbnN0YW5jZS5nYW1lb3ZlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaXNkb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vZmYoTGF5YS5FdmVudC5NT1VTRV9NT1ZFLCB0aGlzLCB0aGlzLk9uU2xpZGVyKTtcclxuICAgICAgICB0aGlzLmVuZFBvcyA9IHRoaXMuY3VyTW91c2VQb3MuY2xvbmUoKTtcclxuICAgICAgICB0aGlzLk1vdXNlVSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGN1ck1vdXNlUG9zOiBWZWN0b3IzO1xyXG4gICAgT25TbGlkZXIoKSB7XHJcbiAgICAgICAgdmFyIE1vdXNlUG9zID0gbmV3IFZlY3RvcjMoTGF5YS5Nb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VYLCBMYXlhLk1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVkpO1xyXG4gICAgICAgIHZhciBvZmZlc3RYID0gTW91c2VQb3MueCAtIHRoaXMuY3VyTW91c2VQb3MueDtcclxuICAgICAgICBpZiAob2ZmZXN0WCA+IDApIG9mZmVzdFggPSBvZmZlc3RYIDwgNSA/IG9mZmVzdFggOiA1O1xyXG4gICAgICAgIGlmIChvZmZlc3RYIDwgMCkgb2ZmZXN0WCA9IG9mZmVzdFggPiAtNSA/IG9mZmVzdFggOiAtNTtcclxuICAgICAgICB2YXIgcm90YXRlRGlyID0gbmV3IFZlY3RvcjMoMCwgLW9mZmVzdFggKiAwLjAxLCAwKTtcclxuICAgICAgICBSb2xlQ29udHJvbGxlci5JbnN0YW5jZS5Sb2xlUm90YXRpb24ocm90YXRlRGlyKTtcclxuICAgICAgICB0aGlzLmN1ck1vdXNlUG9zID0gbmV3IFZlY3RvcjMoTGF5YS5Nb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VYLCBMYXlhLk1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVkpOztcclxuICAgIH1cclxuICAgIE9uQ2xvc2UoKSB7XHJcbiAgICAgICAgRXZlbnRNYW5hZ2VyLm9mZihMYXlhLkV2ZW50LlJFU0laRSwgdGhpcywgdGhpcy5yZXNpemVIYW5kZXIpO1xyXG4gICAgICAgIHRoaXMub2ZmKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5PbkNsaWNrRG93bik7XHJcbiAgICAgICAgdGhpcy5vZmYoTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5PbkNsaWNrVXApO1xyXG4gICAgICAgIHRoaXMub2ZmKExheWEuRXZlbnQuTU9VU0VfT1VULCB0aGlzLCB0aGlzLk9uQ2xpY2tVcCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8v54K55Ye755qE5Yik5patXHJcbiAgICBwcml2YXRlIHN0YXJ0UG9zO1xyXG4gICAgcHJpdmF0ZSBpc2V4Y2VlZCA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBNb3VzZUQoKSB7XHJcbiAgICAgICAgdGhpcy5pc2V4Y2VlZCA9IGZhbHNlO1xyXG4gICAgICAgIExheWEudGltZXIub25jZSg1MDAsIHRoaXMsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc2V4Y2VlZCA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGVuZFBvcztcclxuICAgIHByaXZhdGUgTW91c2VVKCkge1xyXG4gICAgICAgIHZhciBkaXMgPSBWZWN0b3IzLmRpc3RhbmNlKHRoaXMuc3RhcnRQb3MsIHRoaXMuZW5kUG9zKTtcclxuICAgICAgICBpZiAoZGlzID4gMzAgfHwgdGhpcy5pc2V4Y2VlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgR2FtZUNvbnRyb2xsZXIuSW5zdGFuY2UuSGl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHsgdWkgfSBmcm9tIFwiLi4vdWkvbGF5YU1heFVJXCI7XHJcbmltcG9ydCB7IEV2ZW50TWFuYWdlciB9IGZyb20gXCIuLi9nYW1lX21vZHVsZS9FdmVudE1hbmFnZXJcIjtcclxuaW1wb3J0IFZpZXdNYW5hZ2VyLCB7IFZpZXdUeXBlIH0gZnJvbSBcIi4uL2dhbWVfbG9naWMvVmlld01hbmFnZXJcIjtcclxuaW1wb3J0IHsgR2FtZUNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vZ2FtZV9sb2dpYy9HYW1lQ29udHJvbGxlclwiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBtYWluX3VpIGV4dGVuZHMgdWkubWFpbl91aVVJIGltcGxlbWVudHMgVUlfSW50ZXJmYWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMucmVzaXplSGFuZGVyKCk7XHJcbiAgICAgICAgRXZlbnRNYW5hZ2VyLm9uKExheWEuRXZlbnQuUkVTSVpFLCB0aGlzLCB0aGlzLnJlc2l6ZUhhbmRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgT25TaG93KGRhdGE/OiBhbnkpIHtcclxuICAgICAgICB0aGlzLkJ1dHRvbkNsaWNrSGFuZGxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzaXplSGFuZGVyKCkge1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gTGF5YS5zdGFnZS5oZWlnaHQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIEJ1dHRvbkNsaWNrSGFuZGxlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhcnRfYnRuLl9tY2xpY2tIYW5kbGVyID0gKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgVmlld01hbmFnZXIuSW5zdGFuY2UuT3BlblZpZXcoVmlld1R5cGUuZ2FtZV91aSk7XHJcbiAgICAgICAgICAgIEdhbWVDb250cm9sbGVyLkluc3RhbmNlLkdhbWVTdGFydCgpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBPbkNsb3NlKCkge1xyXG4gICAgICAgIHRoaXMuc3RhcnRfYnRuLkNsZWFyUnVuVGltZSgpO1xyXG4gICAgfVxyXG59IiwiLyoqVGhpcyBjbGFzcyBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBMYXlhQWlySURFLCBwbGVhc2UgZG8gbm90IG1ha2UgYW55IG1vZGlmaWNhdGlvbnMuICovXG5pbXBvcnQgVmlldz1MYXlhLlZpZXc7XHJcbmltcG9ydCBEaWFsb2c9TGF5YS5EaWFsb2c7XHJcbmltcG9ydCBTY2VuZT1MYXlhLlNjZW5lO1xudmFyIFJFRzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XG5leHBvcnQgbW9kdWxlIHVpIHtcclxuICAgIGV4cG9ydCBjbGFzcyBnYW1lX3VpVUkgZXh0ZW5kcyBTY2VuZSB7XHJcbiAgICAgICAgcHVibGljIHN0YXRpYyAgdWlWaWV3OmFueSA9e1widHlwZVwiOlwiU2NlbmVcIixcInByb3BzXCI6e1wiek9yZGVyXCI6MSxcIndpZHRoXCI6NzIwLFwiaGVpZ2h0XCI6MTI4MH0sXCJjb21wSWRcIjoyLFwibG9hZExpc3RcIjpbXSxcImxvYWRMaXN0M0RcIjpbXX07XHJcbiAgICAgICAgY29uc3RydWN0b3IoKXsgc3VwZXIoKX1cclxuICAgICAgICBjcmVhdGVDaGlsZHJlbigpOnZvaWQge1xyXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVZpZXcoZ2FtZV91aVVJLnVpVmlldyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgUkVHKFwidWkuZ2FtZV91aVVJXCIsZ2FtZV91aVVJKTtcclxuICAgIGV4cG9ydCBjbGFzcyBtYWluX3VpVUkgZXh0ZW5kcyBTY2VuZSB7XHJcblx0XHRwdWJsaWMgc3RhcnRfYnRuOmFueTtcbiAgICAgICAgcHVibGljIHN0YXRpYyAgdWlWaWV3OmFueSA9e1widHlwZVwiOlwiU2NlbmVcIixcInByb3BzXCI6e1wiek9yZGVyXCI6MSxcIndpZHRoXCI6NzIwLFwiaGVpZ2h0XCI6MTI4MH0sXCJjb21wSWRcIjoyLFwiY2hpbGRcIjpbe1widHlwZVwiOlwiSW1hZ2VcIixcInByb3BzXCI6e1wieVwiOjY0MCxcInhcIjozNjAsXCJ2YXJcIjpcInN0YXJ0X2J0blwiLFwic2tpblwiOlwibWFpbl9yZXMvamllbWlhbl94aW5fMV8xLnBuZ1wiLFwicnVudGltZVwiOlwiZ2FtZV91aS9SdW5UaW1lU2NyaXB0L0J1dHRvblJ1blRpbWUudHNcIixcImNlbnRlcllcIjowLFwiY2VudGVyWFwiOjAsXCJhbmNob3JZXCI6MC41LFwiYW5jaG9yWFwiOjAuNX0sXCJjb21wSWRcIjozfV0sXCJsb2FkTGlzdFwiOltcIm1haW5fcmVzL2ppZW1pYW5feGluXzFfMS5wbmdcIl0sXCJsb2FkTGlzdDNEXCI6W119O1xyXG4gICAgICAgIGNvbnN0cnVjdG9yKCl7IHN1cGVyKCl9XHJcbiAgICAgICAgY3JlYXRlQ2hpbGRyZW4oKTp2b2lkIHtcclxuICAgICAgICAgICAgc3VwZXIuY3JlYXRlQ2hpbGRyZW4oKTtcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVWaWV3KG1haW5fdWlVSS51aVZpZXcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFJFRyhcInVpLm1haW5fdWlVSVwiLG1haW5fdWlVSSk7XHJcbn1cciJdfQ==
|