bundle.js 280 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241
  1. var __extends = (this && this.__extends) || (function () {
  2. var extendStatics = Object.setPrototypeOf ||
  3. ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
  4. function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
  5. return function (d, b) {
  6. extendStatics(d, b);
  7. function __() { this.constructor = d; }
  8. d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
  9. };
  10. })();
  11. (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){
  12. "use strict";
  13. Object.defineProperty(exports, "__esModule", { value: true });
  14. /**This class is automatically generated by LayaAirIDE, please do not make any modifications. */
  15. var ButtonRunTime_1 = require("./game_ui/RunTimeScript/ButtonRunTime");
  16. /*
  17. * 游戏初始化配置;
  18. */
  19. var GameConfig = /** @class */ (function () {
  20. function GameConfig() {
  21. }
  22. GameConfig.init = function () {
  23. var reg = Laya.ClassUtils.regClass;
  24. reg("game_ui/RunTimeScript/ButtonRunTime.ts", ButtonRunTime_1.default);
  25. };
  26. GameConfig.width = 720;
  27. GameConfig.height = 1280;
  28. GameConfig.scaleMode = "fixedwidth";
  29. GameConfig.screenMode = "none";
  30. GameConfig.alignV = "middle";
  31. GameConfig.alignH = "center";
  32. GameConfig.startScene = "game_ui.scene";
  33. GameConfig.sceneRoot = "";
  34. GameConfig.debug = false;
  35. GameConfig.stat = false;
  36. GameConfig.physicsDebug = false;
  37. GameConfig.exportSceneToJson = true;
  38. return GameConfig;
  39. }());
  40. exports.default = GameConfig;
  41. GameConfig.init();
  42. },{"./game_ui/RunTimeScript/ButtonRunTime":23}],2:[function(require,module,exports){
  43. "use strict";
  44. Object.defineProperty(exports, "__esModule", { value: true });
  45. var GameConfig_1 = require("./GameConfig");
  46. var ViewManager_1 = require("./game_logic/ViewManager");
  47. var WXSdk_1 = require("./game_module/WXSdk");
  48. var FYHD_Sdk_1 = require("./game_module/FYHD_Sdk");
  49. var GameSceneController_1 = require("./game_logic/GameSceneController");
  50. var Main = /** @class */ (function () {
  51. function Main() {
  52. var _this = this;
  53. //根据IDE设置初始化引擎
  54. if (window["Laya3D"])
  55. Laya3D.init(GameConfig_1.default.width, GameConfig_1.default.height);
  56. else
  57. Laya.init(GameConfig_1.default.width, GameConfig_1.default.height, Laya["WebGL"]);
  58. Laya["Physics"] && Laya["Physics"].enable();
  59. Laya["DebugPanel"] && Laya["DebugPanel"].enable();
  60. Laya.stage.scaleMode = GameConfig_1.default.scaleMode;
  61. Laya.stage.screenMode = GameConfig_1.default.screenMode;
  62. //兼容微信不支持加载scene后缀场景
  63. Laya.URL.exportSceneToJson = GameConfig_1.default.exportSceneToJson;
  64. //打开调试面板(通过IDE设置调试模式,或者url地址增加debug=true参数,均可打开调试面板)
  65. if (GameConfig_1.default.debug || Laya.Utils.getQueryString("debug") == "true")
  66. Laya.enableDebugPanel();
  67. if (GameConfig_1.default.physicsDebug && Laya["PhysicsDebugDraw"])
  68. Laya["PhysicsDebugDraw"].enable();
  69. if (GameConfig_1.default.stat)
  70. Laya.Stat.show();
  71. Laya.alertGlobalError = true;
  72. Main.nowratio = Laya.stage.width / Laya.stage.height;
  73. Main.IsWx = Laya.Browser.onWeiXin;
  74. if (Main.IsWx) {
  75. WXSdk_1.WXSdk.Instance.init(function (shareTicket, shareid, scene, appid) {
  76. _this.onShowHandler(shareTicket, shareid, scene, appid);
  77. });
  78. FYHD_Sdk_1.FYHD_Sdk.InitSdk();
  79. }
  80. //激活资源版本控制,version.json由IDE发布功能自动生成,如果没有也不影响后续流程
  81. Laya.ResourceVersion.enable("version.json", Laya.Handler.create(this, this.onVersionLoaded), Laya.ResourceVersion.FILENAME_VERSION);
  82. this.IsNeedUpdate();
  83. }
  84. Main.prototype.IsNeedUpdate = function () {
  85. if (!Main.IsWx)
  86. return;
  87. var updateManager = Laya.Browser.window.wx.getUpdateManager();
  88. updateManager.onCheckForUpdate(function (res) {
  89. console.log("最新版本:" + res.hasUpdate);
  90. });
  91. updateManager.onUpdateReady(function () {
  92. Laya.Browser.window.wx.showModal({
  93. showCancel: false,
  94. title: '更新提示',
  95. content: '新版本已经准备好,是否重启应用?',
  96. success: function (res) {
  97. updateManager.applyUpdate();
  98. },
  99. fail: function (res) {
  100. updateManager.applyUpdate();
  101. }
  102. });
  103. });
  104. };
  105. Main.prototype.onShowHandler = function (shareTicket, shareId, scene, appid) {
  106. console.log("[LOG]: 分享进入: shareTicket:", shareTicket, ", openId=", shareId, ", scene=", scene);
  107. // if (!Main.mSharePeopleScene) {
  108. // Main.mSharePeopleScene = scene;
  109. // }
  110. // if (!Main.appid) {
  111. // Main.appid = appid;
  112. // }
  113. if (scene != null && scene != "") {
  114. WXSdk_1.WXSdk.Instance.ShareScene = scene;
  115. }
  116. if (shareId != null && shareId != "") {
  117. console.log("设置分享id" + shareId);
  118. WXSdk_1.WXSdk.Instance.setShareId(shareId);
  119. }
  120. };
  121. Main.prototype.onVersionLoaded = function () {
  122. //激活大小图映射,加载小图的时候,如果发现小图在大图合集里面,则优先加载大图合集,而不是小图
  123. Laya.AtlasInfoManager.enable("fileconfig.json", Laya.Handler.create(this, this.onConfigLoaded));
  124. Laya.MouseManager.multiTouchEnabled = false;
  125. };
  126. Main.prototype.onConfigLoaded = function () {
  127. this.LoadUI();
  128. };
  129. Main.prototype.LoadUI = function () {
  130. ViewManager_1.default.Instance.OpenView(ViewManager_1.ViewType.main_ui);
  131. GameSceneController_1.default.Instance.CreateScene();
  132. //this.test();
  133. };
  134. Main.prototype.test = function () {
  135. var v1 = new Laya.Vector3(-3, 0, 1);
  136. var v2 = new Laya.Vector3(0, 0, -1);
  137. var v3 = new Laya.Vector3(0, 0, 0);
  138. Laya.Vector3.cross(v1, v2, v3);
  139. console.log(v3);
  140. };
  141. Main.IsWx = false;
  142. Main.VRE = "1.0.0";
  143. Main.CFG = "CFG";
  144. Main.wxValue = "";
  145. return Main;
  146. }());
  147. exports.Main = Main;
  148. //激活启动类
  149. new Main();
  150. },{"./GameConfig":1,"./game_logic/GameSceneController":6,"./game_logic/ViewManager":13,"./game_module/FYHD_Sdk":15,"./game_module/WXSdk":20}],3:[function(require,module,exports){
  151. "use strict";
  152. Object.defineProperty(exports, "__esModule", { value: true });
  153. var GameDefined_1 = require("../game_module/GameDefined");
  154. var Vector3 = Laya.Vector3;
  155. var Ray = Laya.Ray;
  156. var HitResult = Laya.HitResult;
  157. var GameSceneController_1 = require("./GameSceneController");
  158. var BulletController_1 = require("./BulletController");
  159. var Game_Tool_1 = require("../game_tool/Game_Tool");
  160. var EventManager_1 = require("../game_module/EventManager");
  161. var Role_1 = require("./Role");
  162. var Bullet = /** @class */ (function (_super) {
  163. __extends(Bullet, _super);
  164. function Bullet() {
  165. return _super.call(this) || this;
  166. }
  167. Bullet.prototype.onAwake = function () {
  168. this.self = this.owner;
  169. this._transform = this.self.transform;
  170. this.forw = new Vector3(0, 0, 0);
  171. this._corss = new Vector3(0, 0, 0);
  172. };
  173. Bullet.prototype.CreateRay = function (pos, _rotation, _type) {
  174. if (!this.go) {
  175. switch (_type) {
  176. case GameDefined_1.BulletType.BulletG:
  177. this.go = BulletController_1.default.Instance.CreateBullet(GameDefined_1.default.poolName.bulletG);
  178. break;
  179. case GameDefined_1.BulletType.BulletR:
  180. this.go = BulletController_1.default.Instance.CreateBullet(GameDefined_1.default.poolName.BulletR);
  181. break;
  182. }
  183. var gs = this.go.getComponent(Bullet);
  184. if (!gs)
  185. this.goS = this.go.addComponent(Bullet);
  186. }
  187. else {
  188. this.go.active = true;
  189. }
  190. this.go.transform.position = pos.clone();
  191. this.go.transform.rotationEuler = _rotation;
  192. this.go.transform.rotate = _rotation;
  193. this.go.transform.getForward(this.forw);
  194. this.forw = new Vector3(-this.forw.x, -this.forw.y, -this.forw.z);
  195. var temp = this.forw.clone();
  196. Vector3.normalize(temp, temp);
  197. pos.x = pos.x + temp.x * 0.01;
  198. pos.y = pos.y + temp.y * 0.01;
  199. pos.z = pos.z + temp.z * 0.01;
  200. if (!this._ray) {
  201. this._ray = new Ray(pos, this.forw);
  202. this._hit = new HitResult();
  203. }
  204. else {
  205. this._ray.origin = pos;
  206. this._ray.direction = this.forw;
  207. }
  208. var isS = GameSceneController_1.default.Instance.game_scene.physicsSimulation.rayCast(this._ray, this._hit);
  209. if (isS) {
  210. var poi = this._hit.point;
  211. var dis = Vector3.distance(pos, poi);
  212. this.go.transform.localScaleZ = dis;
  213. var other = this._hit.collider.owner;
  214. if (other.layer == GameDefined_1.default.player_layer || other.layer == GameDefined_1.default.moster_layer) {
  215. this.tempPos = pos;
  216. this.tempRotation = _rotation;
  217. this.SetTar(other);
  218. this.goS.SetNextNotActive();
  219. }
  220. else {
  221. this.RemoveTar();
  222. var nor = this._hit.normal;
  223. nor.x = Math.abs(nor.x) < 0.001 ? 0 : nor.x;
  224. nor.y = Math.abs(nor.y) < 0.001 ? 0 : nor.y;
  225. nor.z = Math.abs(nor.z) < 0.001 ? 0 : nor.z;
  226. Vector3.cross(this.forw, nor, this._corss); //大于0在左方 小于0在右方
  227. var a = Game_Tool_1.default.getReflectAng(this.forw);
  228. // Laya.Quaternion.
  229. var ang = this.go._transform.rotationEuler.clone();
  230. this._corss.y >= 0 ? ang.y = ang.y + 2 * a : ang.y = ang.y - 2 * a;
  231. // var ab=new Laya.Quaternion();
  232. // Laya.Quaternion.createFromAxisAngle(this.forw,-a,ab)
  233. // this.goS.CreateRay(poi, ab, BulletType.BulletG);
  234. this.goS.CreateRay(poi, ang, _type);
  235. }
  236. }
  237. else {
  238. this.RemoveTar();
  239. this.go.transform.localScaleZ = 50;
  240. this.goS.SetNextNotActive();
  241. }
  242. };
  243. Bullet.prototype.SetNextNotActive = function () {
  244. if (this.go) {
  245. this.go.active = false;
  246. if (this.goS)
  247. this.goS.SetNextNotActive();
  248. }
  249. };
  250. Bullet.prototype.RemoveTar = function () {
  251. if (this.HitTar) {
  252. this.HitTar = null;
  253. }
  254. };
  255. Bullet.prototype.SetTar = function (tar) {
  256. this.HitTar = tar;
  257. };
  258. Bullet.prototype.Hit = function () {
  259. if (this.HitTar) {
  260. if (this.HitTar.layer == GameDefined_1.default.player_layer || this.HitTar.layer == GameDefined_1.default.moster_layer) {
  261. var r = this.HitTar.getComponent(Role_1.Role);
  262. r.HitEd();
  263. this.CreateRay(this.tempPos, this.tempRotation);
  264. }
  265. }
  266. };
  267. Bullet.prototype.onEnable = function () {
  268. EventManager_1.EventManager.on(GameDefined_1.default.HitEvent, this, this.Hit);
  269. };
  270. Bullet.prototype.onDisable = function () {
  271. EventManager_1.EventManager.off(GameDefined_1.default.HitEvent, this, this.Hit);
  272. };
  273. return Bullet;
  274. }(Laya.Script3D));
  275. exports.Bullet = Bullet;
  276. },{"../game_module/EventManager":14,"../game_module/GameDefined":16,"../game_tool/Game_Tool":22,"./BulletController":4,"./GameSceneController":6,"./Role":10}],4:[function(require,module,exports){
  277. "use strict";
  278. Object.defineProperty(exports, "__esModule", { value: true });
  279. var Pool_Manager_1 = require("./Pool_Manager");
  280. var GameSceneController_1 = require("./GameSceneController");
  281. var BulletController = /** @class */ (function () {
  282. function BulletController() {
  283. }
  284. Object.defineProperty(BulletController, "Instance", {
  285. get: function () {
  286. return this.instance || (this.instance = new BulletController());
  287. },
  288. enumerable: true,
  289. configurable: true
  290. });
  291. // private bulletPref: Sprite3D;
  292. BulletController.prototype.init = function (bullet, poolName) {
  293. bullet.removeSelf();
  294. // this.bulletPref = bullet;
  295. Pool_Manager_1.Pool_Manager.Instance.InitData(poolName, bullet);
  296. };
  297. BulletController.prototype.CreateBullet = function (bulletName) {
  298. //if (this.bullet) return this.bullet;
  299. var go = Pool_Manager_1.Pool_Manager.Instance.SetActiveObject(bulletName);
  300. GameSceneController_1.default.Instance.game_scene.addChild(go);
  301. // this.bullet = go;
  302. return go;
  303. };
  304. return BulletController;
  305. }());
  306. exports.default = BulletController;
  307. },{"./GameSceneController":6,"./Pool_Manager":9}],5:[function(require,module,exports){
  308. "use strict";
  309. Object.defineProperty(exports, "__esModule", { value: true });
  310. var EventManager_1 = require("../game_module/EventManager");
  311. var GameDefined_1 = require("../game_module/GameDefined");
  312. var GameController = /** @class */ (function () {
  313. function GameController() {
  314. this.ishit = false;
  315. this.gameStart = false;
  316. this.gameover = true;
  317. }
  318. Object.defineProperty(GameController, "Instance", {
  319. get: function () {
  320. return this.instasnce || (this.instasnce = new GameController());
  321. },
  322. enumerable: true,
  323. configurable: true
  324. });
  325. GameController.prototype.Hit = function () {
  326. EventManager_1.EventManager.event(GameDefined_1.default.HitEvent);
  327. };
  328. GameController.prototype.GameStart = function () {
  329. this.gameStart = true;
  330. this.gameover = false;
  331. };
  332. return GameController;
  333. }());
  334. exports.GameController = GameController;
  335. },{"../game_module/EventManager":14,"../game_module/GameDefined":16}],6:[function(require,module,exports){
  336. "use strict";
  337. Object.defineProperty(exports, "__esModule", { value: true });
  338. var ResourceLoad_1 = require("../game_module/ResourceLoad");
  339. var BulletController_1 = require("./BulletController");
  340. var RoleController_1 = require("./RoleController");
  341. var GameDefined_1 = require("../game_module/GameDefined");
  342. var GameSceneController = /** @class */ (function () {
  343. function GameSceneController() {
  344. }
  345. Object.defineProperty(GameSceneController, "Instance", {
  346. get: function () {
  347. return this.instance || (this.instance = new GameSceneController());
  348. },
  349. enumerable: true,
  350. configurable: true
  351. });
  352. GameSceneController.prototype.CreateScene = function () {
  353. var _this = this;
  354. ResourceLoad_1.default.LoadResource([GameDefined_1.default.game_scene_path], function () {
  355. var t = Laya.loader.getRes(GameDefined_1.default.game_scene_path);
  356. Laya.stage.addChild(t);
  357. _this.game_scene = t;
  358. var _bulletG = t.getChildByName("bulletG");
  359. var _bulletR = t.getChildByName("bulletR");
  360. BulletController_1.default.Instance.init(_bulletG, GameDefined_1.default.poolName.bulletG);
  361. BulletController_1.default.Instance.init(_bulletR, GameDefined_1.default.poolName.BulletR);
  362. // var _role1 = t.getChildByName("role1") as Sprite3D;
  363. // var _role2 = t.getChildByName("role2") as Sprite3D;
  364. // var _moster1 = t.getChildByName("moster1") as Sprite3D;
  365. // var _moster2= t.getChildByName("moster2") as Sprite3D;
  366. var players = t.getChildByName("Players");
  367. var mosters = t.getChildByName("Mosters");
  368. RoleController_1.RoleController.Instance.initPlayer(players._children);
  369. RoleController_1.RoleController.Instance.initMoster(mosters._children);
  370. RoleController_1.RoleController.Instance.CreateRay();
  371. });
  372. };
  373. return GameSceneController;
  374. }());
  375. exports.default = GameSceneController;
  376. },{"../game_module/GameDefined":16,"../game_module/ResourceLoad":17,"./BulletController":4,"./RoleController":11}],7:[function(require,module,exports){
  377. "use strict";
  378. Object.defineProperty(exports, "__esModule", { value: true });
  379. var GameDefined_1 = require("../game_module/GameDefined");
  380. var Role_1 = require("./Role");
  381. var Vector3 = Laya.Vector3;
  382. var Ray = Laya.Ray;
  383. var HitResult = Laya.HitResult;
  384. var Bullet_1 = require("./Bullet");
  385. var BulletController_1 = require("./BulletController");
  386. var GameSceneController_1 = require("./GameSceneController");
  387. var Game_Tool_1 = require("../game_tool/Game_Tool");
  388. var EventManager_1 = require("../game_module/EventManager");
  389. var Moster = /** @class */ (function (_super) {
  390. __extends(Moster, _super);
  391. function Moster() {
  392. return _super.call(this) || this;
  393. }
  394. Moster.prototype.onAwake = function () {
  395. _super.prototype.onAwake.call(this);
  396. this._type = GameDefined_1.CheckType.Moster;
  397. this.forw = new Vector3(0, 0, 0);
  398. this._corss = new Vector3(0, 0, 0);
  399. this._bulletPos = this.self.getChildByName("bulletPos");
  400. };
  401. Moster.prototype.CreateRay = function () {
  402. this._transform.getForward(this.forw);
  403. this.forw = new Vector3(-this.forw.x, -this.forw.y, -this.forw.z);
  404. if (!this._ray) {
  405. this._ray = new Ray(this._bulletPos.transform.position, this.forw);
  406. this._hit = new HitResult();
  407. }
  408. else {
  409. this._ray.origin = this._bulletPos.transform.position;
  410. this._ray.direction = this.forw;
  411. }
  412. if (!this.go) {
  413. this.go = BulletController_1.default.Instance.CreateBullet(GameDefined_1.default.poolName.BulletR);
  414. var gs = this.go.getComponent(Bullet_1.Bullet);
  415. if (!gs)
  416. this.goS = this.go.addComponent(Bullet_1.Bullet);
  417. }
  418. this.go.transform.position = this._bulletPos.transform.position;
  419. this.go.transform.rotation = this._transform.rotation;
  420. var isS = GameSceneController_1.default.Instance.game_scene.physicsSimulation.rayCast(this._ray, this._hit);
  421. if (isS) {
  422. var poi = this._hit.point;
  423. var dis = Vector3.distance(this._bulletPos.transform.position, poi);
  424. this.go.transform.localScaleZ = dis;
  425. var other = this._hit.collider.owner;
  426. if (other.layer == GameDefined_1.default.player_layer || other.layer == GameDefined_1.default.moster_layer) {
  427. this.SetTar(other);
  428. this.goS.SetNextNotActive();
  429. }
  430. else {
  431. this.RemoveTar();
  432. var nor = this._hit.normal;
  433. nor.x = Math.abs(nor.x) < 0.001 ? 0 : nor.x;
  434. nor.y = Math.abs(nor.y) < 0.001 ? 0 : nor.y;
  435. nor.z = Math.abs(nor.z) < 0.001 ? 0 : nor.z;
  436. Vector3.cross(this.forw, nor, this._corss); //大于0在左方 小于0在右方
  437. var a = Game_Tool_1.default.getReflectAng(this.forw);
  438. var ang = this._transform.rotationEuler.clone();
  439. this._corss.y >= 0 ? ang.y = ang.y + 2 * a : ang.y = ang.y - 2 * a;
  440. this.goS.CreateRay(poi, ang, GameDefined_1.BulletType.BulletR);
  441. }
  442. }
  443. else {
  444. this.RemoveTar();
  445. this.go.transform.localScaleZ = 50;
  446. this.goS.SetNextNotActive();
  447. }
  448. };
  449. Moster.prototype.RotationSelf = function (rota) {
  450. this._transform.rotate(rota);
  451. this.CreateRay();
  452. };
  453. Moster.prototype.SetNextNotActive = function () {
  454. if (this.go) {
  455. this.go.active = false;
  456. if (this.goS)
  457. this.goS.SetNextNotActive();
  458. }
  459. };
  460. Moster.prototype.RemoveTar = function () {
  461. if (this.HitTar) {
  462. this.HitTar = null;
  463. }
  464. };
  465. Moster.prototype.SetTar = function (tar) {
  466. this.HitTar = tar;
  467. };
  468. Moster.prototype.Hit = function () {
  469. if (this.HitTar) {
  470. //Game_Tool.CreateText(this.HitTar.name+"被击杀!");
  471. if (this.HitTar.layer == GameDefined_1.default.player_layer || this.HitTar.layer == GameDefined_1.default.moster_layer) {
  472. var r = this.HitTar.getComponent(Role_1.Role);
  473. r.HitEd();
  474. this.CreateRay();
  475. // this.CreateRay();
  476. }
  477. // EventManager.off(GameDefined.HitEvent,this, this.Hit);
  478. }
  479. };
  480. Moster.prototype.onEnable = function () {
  481. EventManager_1.EventManager.on(GameDefined_1.default.HitEvent, this, this.Hit);
  482. this._ishited = false;
  483. };
  484. Moster.prototype.onDisable = function () {
  485. EventManager_1.EventManager.off(GameDefined_1.default.HitEvent, this, this.Hit);
  486. };
  487. return Moster;
  488. }(Role_1.Role));
  489. exports.Moster = Moster;
  490. },{"../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){
  491. "use strict";
  492. Object.defineProperty(exports, "__esModule", { value: true });
  493. var Role_1 = require("./Role");
  494. var GameDefined_1 = require("../game_module/GameDefined");
  495. var Vector3 = Laya.Vector3;
  496. var Ray = Laya.Ray;
  497. var HitResult = Laya.HitResult;
  498. var GameSceneController_1 = require("./GameSceneController");
  499. var BulletController_1 = require("./BulletController");
  500. var Bullet_1 = require("./Bullet");
  501. var Game_Tool_1 = require("../game_tool/Game_Tool");
  502. var EventManager_1 = require("../game_module/EventManager");
  503. var Player = /** @class */ (function (_super) {
  504. __extends(Player, _super);
  505. function Player() {
  506. var _this = _super.call(this) || this;
  507. _this.idhit = false;
  508. return _this;
  509. }
  510. Player.prototype.onAwake = function () {
  511. _super.prototype.onAwake.call(this);
  512. this._type = GameDefined_1.CheckType.Player;
  513. this.forw = new Vector3(0, 0, 0);
  514. this._corss = new Vector3(0, 0, 0);
  515. this._bulletPos = this.self.getChildByName("bulletPos");
  516. };
  517. Player.prototype.CreateRay = function () {
  518. this._transform.getForward(this.forw);
  519. this.forw = new Vector3(-this.forw.x, -this.forw.y, -this.forw.z);
  520. if (!this._ray) {
  521. this._ray = new Ray(this._bulletPos.transform.position, this.forw);
  522. this._hit = new HitResult();
  523. }
  524. else {
  525. this._ray.origin = this._bulletPos.transform.position;
  526. this._ray.direction = this.forw;
  527. }
  528. if (!this.go) {
  529. this.go = BulletController_1.default.Instance.CreateBullet(GameDefined_1.default.poolName.bulletG);
  530. var gs = this.go.getComponent(Bullet_1.Bullet);
  531. if (!gs)
  532. this.goS = this.go.addComponent(Bullet_1.Bullet);
  533. }
  534. this.go.transform.position = this._bulletPos.transform.position;
  535. this.go.transform.rotation = this._transform.rotation;
  536. var isS = GameSceneController_1.default.Instance.game_scene.physicsSimulation.rayCast(this._ray, this._hit);
  537. if (isS) {
  538. var poi = this._hit.point;
  539. var dis = Vector3.distance(this._bulletPos.transform.position, poi);
  540. this.go.transform.localScaleZ = dis;
  541. var other = this._hit.collider.owner;
  542. if (other.layer == GameDefined_1.default.player_layer || other.layer == GameDefined_1.default.moster_layer) {
  543. this.SetTar(other);
  544. this.goS.SetNextNotActive();
  545. }
  546. else {
  547. this.RemoveTar();
  548. var nor = this._hit.normal;
  549. nor.x = Math.abs(nor.x) < 0.001 ? 0 : nor.x;
  550. nor.y = Math.abs(nor.y) < 0.001 ? 0 : nor.y;
  551. nor.z = Math.abs(nor.z) < 0.001 ? 0 : nor.z;
  552. Vector3.cross(this.forw, nor, this._corss); //大于0在左方 小于0在右方
  553. var a = Game_Tool_1.default.getReflectAng(this.forw);
  554. var ang = this._transform.rotationEuler.clone();
  555. this._corss.y >= 0 ? ang.y = ang.y + 2 * a : ang.y = ang.y - 2 * a;
  556. // var v1=new Vector3(0.8,0,0.6); //向量1
  557. // var nor=new Vector3(-1,0,0); //v1碰撞法线
  558. // var ab=new Laya.Quaternion();
  559. // Laya.Quaternion.createFromAxisAngle(this.forw,a,ab)
  560. // this.goS.CreateRay(poi, ab, BulletType.BulletG);
  561. this.goS.CreateRay(poi, ang, GameDefined_1.BulletType.BulletG);
  562. }
  563. }
  564. else {
  565. this.RemoveTar();
  566. this.go.transform.localScaleZ = 50;
  567. this.goS.SetNextNotActive();
  568. }
  569. };
  570. Player.prototype.RotationSelf = function (rota) {
  571. // console.log(rota);
  572. // console.log(this._transform.rotationEuler);
  573. this._transform.rotate(rota);
  574. // console.log(this._transform.rotationEuler);
  575. this.CreateRay();
  576. };
  577. Player.prototype.SetNextNotActive = function () {
  578. if (this.go) {
  579. this.go.active = false;
  580. if (this.goS)
  581. this.goS.SetNextNotActive();
  582. }
  583. };
  584. Player.prototype.RemoveTar = function () {
  585. if (this.HitTar) {
  586. this.HitTar = null;
  587. }
  588. };
  589. Player.prototype.SetTar = function (tar) {
  590. this.HitTar = tar;
  591. };
  592. Player.prototype.Hit = function () {
  593. if (this.HitTar) {
  594. if (this.HitTar.layer == GameDefined_1.default.player_layer || this.HitTar.layer == GameDefined_1.default.moster_layer) {
  595. var r = this.HitTar.getComponent(Role_1.Role);
  596. r.HitEd();
  597. this.CreateRay();
  598. }
  599. }
  600. };
  601. Player.prototype.onEnable = function () {
  602. EventManager_1.EventManager.on(GameDefined_1.default.HitEvent, this, this.Hit);
  603. this._ishited = false;
  604. };
  605. Player.prototype.onDisable = function () {
  606. EventManager_1.EventManager.off(GameDefined_1.default.HitEvent, this, this.Hit);
  607. };
  608. return Player;
  609. }(Role_1.Role));
  610. exports.Player = Player;
  611. },{"../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){
  612. "use strict";
  613. Object.defineProperty(exports, "__esModule", { value: true });
  614. var Dictionary_1 = require("../game_tool/Dictionary");
  615. var Vector3 = Laya.Vector3;
  616. var Pool_Manager = /** @class */ (function () {
  617. function Pool_Manager() {
  618. this.poolDic = new Dictionary_1.default();
  619. this.prefabDic = new Dictionary_1.default();
  620. }
  621. Object.defineProperty(Pool_Manager, "Instance", {
  622. get: function () {
  623. return Pool_Manager.instance || (Pool_Manager.instance = new Pool_Manager());
  624. },
  625. enumerable: true,
  626. configurable: true
  627. });
  628. // [ ]
  629. Pool_Manager.prototype.InitData = function (name, prefab) {
  630. if (prefab != null) {
  631. if (!this.prefabDic.has(name))
  632. this.prefabDic.set(name, prefab);
  633. }
  634. };
  635. Pool_Manager.prototype.SetActiveObject = function (name, scale) {
  636. if (this.poolDic.has(name)) {
  637. if (this.poolDic.get(name).length > 0) {
  638. var result = this.poolDic.get(name).shift();
  639. result.active = true;
  640. return result;
  641. }
  642. else {
  643. if (this.prefabDic.has(name)) {
  644. var curObj = Laya.Sprite3D.instantiate(this.prefabDic.get(name));
  645. if (scale != null) {
  646. curObj.transform.localScale = new Vector3(scale, scale, scale);
  647. }
  648. curObj.name = name;
  649. return curObj;
  650. }
  651. else {
  652. return null;
  653. }
  654. }
  655. }
  656. else {
  657. if (this.prefabDic.has(name)) {
  658. var curObj = Laya.Sprite3D.instantiate(this.prefabDic.get(name));
  659. if (scale != null) {
  660. curObj.transform.localScale = new Vector3(scale, scale, scale);
  661. }
  662. curObj.name = name;
  663. return curObj;
  664. }
  665. else {
  666. return null;
  667. }
  668. }
  669. };
  670. //隐藏对象到dic
  671. Pool_Manager.prototype.SetDisableObject = function (go) {
  672. if (go)
  673. go.active = false;
  674. var key = go.name;
  675. if (!this.poolDic.has(key)) {
  676. this.poolDic.set(key, new Array());
  677. }
  678. this.poolDic.get(key).push(go);
  679. };
  680. Pool_Manager.prototype.DestoryObj = function (go) {
  681. if (go)
  682. go.destroy(true);
  683. };
  684. //延时隐藏对象到dic
  685. Pool_Manager.prototype.SetDisableMutiObject = function (go, timer) {
  686. var _this = this;
  687. Laya.timer.once(timer, this, function () {
  688. if (go)
  689. go.active = false;
  690. var key = go.name;
  691. if (!_this.poolDic.has(key)) {
  692. _this.poolDic.set(key, new Array());
  693. }
  694. _this.poolDic.get(key).push(go);
  695. });
  696. };
  697. return Pool_Manager;
  698. }());
  699. exports.Pool_Manager = Pool_Manager;
  700. },{"../game_tool/Dictionary":21}],10:[function(require,module,exports){
  701. "use strict";
  702. Object.defineProperty(exports, "__esModule", { value: true });
  703. var GameDefined_1 = require("../game_module/GameDefined");
  704. var Role = /** @class */ (function (_super) {
  705. __extends(Role, _super);
  706. function Role() {
  707. return _super.call(this) || this;
  708. }
  709. Role.prototype.onAwake = function () {
  710. this.self = this.owner;
  711. this._transform = this.self.transform;
  712. };
  713. Role.prototype.HitEd = function () {
  714. if (this._ishited)
  715. return;
  716. switch (this._type) {
  717. case GameDefined_1.CheckType.Player:
  718. console.log();
  719. break;
  720. case GameDefined_1.CheckType.Moster:
  721. break;
  722. }
  723. this.SetNextNotActive();
  724. this.self.active = false;
  725. };
  726. Role.prototype.SetNextNotActive = function () {
  727. };
  728. return Role;
  729. }(Laya.Script3D));
  730. exports.Role = Role;
  731. },{"../game_module/GameDefined":16}],11:[function(require,module,exports){
  732. "use strict";
  733. Object.defineProperty(exports, "__esModule", { value: true });
  734. var Player_1 = require("./Player");
  735. var Moster_1 = require("./Moster");
  736. var RoleController = /** @class */ (function () {
  737. function RoleController() {
  738. // public player:Sprite3D;
  739. // public playerS:Player;
  740. this.playerArr = [];
  741. this.mosterArr = [];
  742. this.behaviorArr = [];
  743. }
  744. Object.defineProperty(RoleController, "Instance", {
  745. get: function () {
  746. return this.instasnce || (this.instasnce = new RoleController());
  747. },
  748. enumerable: true,
  749. configurable: true
  750. });
  751. RoleController.prototype.initPlayer = function (roles) {
  752. for (var index = 0; index < roles.length; index++) {
  753. var element = roles[index];
  754. var beh = element.addComponent(Player_1.Player);
  755. this.behaviorArr.push(beh);
  756. }
  757. // if(role){
  758. // this.player=role;
  759. // this.playerS=this.player.addComponent(Player);
  760. // }
  761. };
  762. RoleController.prototype.initMoster = function (mosters) {
  763. for (var index = 0; index < mosters.length; index++) {
  764. var element = mosters[index];
  765. var beh = element.addComponent(Moster_1.Moster);
  766. this.behaviorArr.push(beh);
  767. }
  768. };
  769. RoleController.prototype.CreateRay = function () {
  770. for (var index = 0; index < this.behaviorArr.length; index++) {
  771. var element = this.behaviorArr[index];
  772. element.CreateRay();
  773. }
  774. // if(this.playerS)this.playerS.CreateRay();
  775. };
  776. RoleController.prototype.RoleRotation = function (rota) {
  777. // if(this.playerS)this.playerS.RotationSelf(rota);
  778. for (var index = 0; index < this.behaviorArr.length; index++) {
  779. var element = this.behaviorArr[index];
  780. element.RotationSelf(rota);
  781. }
  782. };
  783. return RoleController;
  784. }());
  785. exports.RoleController = RoleController;
  786. },{"./Moster":7,"./Player":8}],12:[function(require,module,exports){
  787. "use strict";
  788. Object.defineProperty(exports, "__esModule", { value: true });
  789. var SoundManager = Laya.SoundManager;
  790. var WXSdk_1 = require("../game_module/WXSdk");
  791. var SettingController = /** @class */ (function () {
  792. function SettingController() {
  793. this.vibrate = true;
  794. this.sound = true;
  795. this.temp = 0;
  796. this.badMove = "res/Sound/BadMove.mp3";
  797. this.click = "res/Sound/click.mp3";
  798. this.Continue = "res/Sound/Continue.mp3";
  799. this.LevelComp = "res/Sound/LevelComp.mp3";
  800. this.TrainCrash = "res/Sound/TrainCrash.mp3";
  801. this.TrainLoop = "res/Sound/TrainLoop.mp3";
  802. this.TrainStop = "res/Sound/TrainStop.mp3";
  803. this.Coin = "res/Sound/Coin1.mp3";
  804. this.Jump = [
  805. "res/Sound/PassengerJumpIn1.mp3",
  806. "res/Sound/PassengerJumpIn2.mp3",
  807. "res/Sound/PassengerJumpIn3.mp3",
  808. "res/Sound/PassengerJumpIn4.mp3",
  809. "res/Sound/PassengerJumpIn5.mp3",
  810. "res/Sound/PassengerJumpIn6.mp3",
  811. "res/Sound/PassengerJumpIn7.mp3",
  812. "res/Sound/PassengerJumpIn8.mp3",
  813. ];
  814. }
  815. Object.defineProperty(SettingController, "Instance", {
  816. get: function () {
  817. return this.instasnce || (this.instasnce = new SettingController());
  818. },
  819. enumerable: true,
  820. configurable: true
  821. });
  822. SettingController.prototype.SettingSound = function (value) {
  823. if (!this.sound)
  824. return;
  825. SoundManager.setSoundVolume(value);
  826. SoundManager.setMusicVolume(value);
  827. };
  828. SettingController.prototype._playMusic = function (on) {
  829. if (!this.sound)
  830. return;
  831. if (on) {
  832. if (this.soundChannel == null) {
  833. this.soundChannel = SoundManager.playMusic(this.TrainLoop, 0);
  834. this.soundChannel.volume = 0.5;
  835. }
  836. this.soundChannel.resume();
  837. }
  838. else {
  839. if (this.soundChannel) {
  840. this.soundChannel.pause();
  841. }
  842. }
  843. };
  844. SettingController.prototype._playBadMove = function () {
  845. WXSdk_1.WXSdk.ShortVibrate();
  846. if (!this.sound)
  847. return;
  848. SoundManager.playSound(this.badMove);
  849. };
  850. SettingController.prototype._Click = function () {
  851. if (!this.sound)
  852. return;
  853. SoundManager.playSound(this.click);
  854. };
  855. SettingController.prototype._Continue = function (on) {
  856. if (!this.sound)
  857. return;
  858. if (on) {
  859. SoundManager.playSound(this.Continue);
  860. }
  861. else {
  862. SoundManager.stopSound(this.Continue);
  863. }
  864. };
  865. SettingController.prototype._LevelComp = function () {
  866. if (!this.sound)
  867. return;
  868. SoundManager.playSound(this.LevelComp);
  869. };
  870. SettingController.prototype._TrainCrash = function () {
  871. WXSdk_1.WXSdk.LongVibrate();
  872. if (!this.sound)
  873. return;
  874. SoundManager.playSound(this.TrainCrash);
  875. };
  876. SettingController.prototype._TrainStop = function () {
  877. if (!this.sound)
  878. return;
  879. SoundManager.playSound(this.TrainStop);
  880. };
  881. SettingController.prototype._Coin = function () {
  882. WXSdk_1.WXSdk.ShortVibrate();
  883. if (!this.sound)
  884. return;
  885. SoundManager.playSound(this.Coin);
  886. };
  887. SettingController.prototype._Jump = function () {
  888. WXSdk_1.WXSdk.ShortVibrate();
  889. if (!this.sound)
  890. return;
  891. SoundManager.playSound(this.Jump[this.temp]);
  892. this.temp++;
  893. if (this.temp == 8)
  894. this.temp = 0;
  895. };
  896. return SettingController;
  897. }());
  898. exports.SettingController = SettingController;
  899. },{"../game_module/WXSdk":20}],13:[function(require,module,exports){
  900. "use strict";
  901. Object.defineProperty(exports, "__esModule", { value: true });
  902. var Dictionary_1 = require("../game_tool/Dictionary");
  903. var game_ui_1 = require("../game_ui/game_ui");
  904. var main_ui_1 = require("../game_ui/main_ui");
  905. var ViewType;
  906. (function (ViewType) {
  907. ViewType[ViewType["game_ui"] = 0] = "game_ui";
  908. ViewType[ViewType["main_ui"] = 1] = "main_ui";
  909. })(ViewType = exports.ViewType || (exports.ViewType = {}));
  910. var ViewManager = /** @class */ (function () {
  911. function ViewManager() {
  912. this.viewDic = [];
  913. this.addViewDic = new Dictionary_1.default();
  914. this.init();
  915. }
  916. Object.defineProperty(ViewManager, "Instance", {
  917. get: function () {
  918. return this.instance || (this.instance = new ViewManager());
  919. },
  920. enumerable: true,
  921. configurable: true
  922. });
  923. ViewManager.prototype.init = function () {
  924. this.viewDic[ViewType.game_ui] = game_ui_1.game_ui;
  925. this.viewDic[ViewType.main_ui] = main_ui_1.main_ui;
  926. };
  927. ViewManager.prototype.OpenView = function (view, data) {
  928. if (this.curView != null) {
  929. this.curView.OnClose();
  930. Laya.stage.removeChild(this.curView);
  931. this.curView.destroy(true);
  932. this.curView = null;
  933. }
  934. this.curView = new this.viewDic[view];
  935. Laya.stage.addChild(this.curView);
  936. this.curView.OnShow(data);
  937. };
  938. Object.defineProperty(ViewManager.prototype, "getCurView", {
  939. get: function () {
  940. return this.curView;
  941. },
  942. enumerable: true,
  943. configurable: true
  944. });
  945. ViewManager.prototype.AddView = function (view, data) {
  946. if (this.addViewDic.has(view))
  947. return;
  948. var t_view = new this.viewDic[view];
  949. this.addViewDic.set(view, t_view);
  950. Laya.stage.addChild(t_view);
  951. t_view.OnShow(data);
  952. };
  953. ViewManager.prototype.RemoveView = function () {
  954. if (this.curView != null) {
  955. this.curView.OnClose();
  956. Laya.stage.removeChild(this.curView);
  957. this.curView.destroy(true);
  958. this.curView = null;
  959. }
  960. };
  961. ViewManager.prototype.CloseView = function (view) {
  962. if (!this.addViewDic.has(view))
  963. return;
  964. var t_view = this.addViewDic.get(view);
  965. t_view.OnClose();
  966. Laya.stage.removeChild(t_view);
  967. t_view.destroy(true);
  968. this.addViewDic.delete(view);
  969. };
  970. ViewManager.prototype.OpenMask = function () {
  971. if (this.curMask != null) {
  972. return;
  973. }
  974. // this.curMask = new Mask_ui();
  975. if (!this.curMask)
  976. return;
  977. Laya.stage.addChild(this.curMask);
  978. };
  979. ViewManager.prototype.CloseMask = function () {
  980. if (this.curMask != null) {
  981. this.curMask.OnClose();
  982. Laya.stage.removeChild(this.curMask);
  983. this.curMask.destroy(true);
  984. this.curMask = null;
  985. }
  986. };
  987. return ViewManager;
  988. }());
  989. exports.default = ViewManager;
  990. },{"../game_tool/Dictionary":21,"../game_ui/game_ui":24,"../game_ui/main_ui":25}],14:[function(require,module,exports){
  991. "use strict";
  992. Object.defineProperty(exports, "__esModule", { value: true });
  993. var EventManager = /** @class */ (function () {
  994. function EventManager() {
  995. }
  996. Object.defineProperty(EventManager, "Disispatcher", {
  997. get: function () {
  998. return EventManager.disispatcher || (EventManager.disispatcher = new Laya.EventDispatcher());
  999. },
  1000. enumerable: true,
  1001. configurable: true
  1002. });
  1003. EventManager.on = function (type, call, data) {
  1004. this.Disispatcher.on(type, call, data);
  1005. };
  1006. EventManager.off = function (type, call, data) {
  1007. this.Disispatcher.off(type, call, data);
  1008. };
  1009. EventManager.event = function (type, data) {
  1010. if (data === void 0) { data = null; }
  1011. this.Disispatcher.event(type, data);
  1012. };
  1013. return EventManager;
  1014. }());
  1015. exports.EventManager = EventManager;
  1016. },{}],15:[function(require,module,exports){
  1017. "use strict";
  1018. Object.defineProperty(exports, "__esModule", { value: true });
  1019. var UserModel_1 = require("./UserModel");
  1020. var Main_1 = require("../Main");
  1021. var EventManager_1 = require("./EventManager");
  1022. var FYHD_Sdk = /** @class */ (function () {
  1023. function FYHD_Sdk() {
  1024. }
  1025. //初始化sdk
  1026. FYHD_Sdk.InitSdk = function () {
  1027. Laya.Browser.window.sdk.getFyhd().startSdk();
  1028. FYHD_Sdk.UserInfoAuth();
  1029. };
  1030. //用户授权
  1031. FYHD_Sdk.UserInfoAuth = function () {
  1032. if (!Main_1.Main.IsWx)
  1033. return;
  1034. Laya.Browser.window.sdk.getFyhd().getFyhdUserInfo(null, false, function (data) {
  1035. console.log("无授权回调:" + JSON.stringify(data));
  1036. if (data.result.user) {
  1037. FYHD_Sdk.openid = data.result.user.openid;
  1038. FYHD_Sdk.AuthInfo();
  1039. }
  1040. });
  1041. };
  1042. FYHD_Sdk.AuthInfo = function () {
  1043. var args = {
  1044. openid: FYHD_Sdk.openid,
  1045. };
  1046. Laya.Browser.window.sdk.getFyhd().loginData(args, function (data) {
  1047. console.log("授权上报回调:" + JSON.stringify(data));
  1048. FYHD_Sdk.ValueUser();
  1049. });
  1050. };
  1051. FYHD_Sdk.ValueUser = function () {
  1052. var args = {
  1053. openid: FYHD_Sdk.openid,
  1054. };
  1055. Laya.Browser.window.sdk.getFyhd().valueuser(args, function (data) {
  1056. console.log("有效用户上报:" + JSON.stringify(data));
  1057. });
  1058. };
  1059. //创角色
  1060. FYHD_Sdk.RoleData = function () {
  1061. if (!Main_1.Main.IsWx)
  1062. return;
  1063. var args = {
  1064. openid: FYHD_Sdk.openid,
  1065. role_id: UserModel_1.default.Instance.CurModel.userid,
  1066. create_time: UserModel_1.default.Instance.CurModel.ServerTime
  1067. };
  1068. Laya.Browser.window.sdk.getFyhd().roleData(args, function (data) {
  1069. console.log("创建角色:" + JSON.stringify(data));
  1070. FYHD_Sdk.Login();
  1071. });
  1072. };
  1073. //登录信息上报
  1074. FYHD_Sdk.Login = function () {
  1075. if (!Main_1.Main.IsWx)
  1076. return;
  1077. var openid = FYHD_Sdk.openid ? FYHD_Sdk.openid : UserModel_1.default.Instance.CurModel.openid;
  1078. var args = {
  1079. openid: openid,
  1080. role_id: UserModel_1.default.Instance.CurModel.userid,
  1081. create_time: UserModel_1.default.Instance.CurModel.ServerTime.toString()
  1082. };
  1083. console.log("登录参数:" + JSON.stringify(args));
  1084. Laya.Browser.window.sdk.getFyhd().uploginData(args, function (data) {
  1085. console.log("登录结果:" + JSON.stringify(data));
  1086. // FYHD_Sdk.PushData();
  1087. });
  1088. };
  1089. //点击事件上报
  1090. FYHD_Sdk.ClickAd = function (ad_type) {
  1091. if (!Main_1.Main.IsWx)
  1092. return;
  1093. var param = {
  1094. ad_type: ad_type,
  1095. };
  1096. console.log("点击参数:" + param);
  1097. Laya.Browser.window.sdk.getFyhd().advertisement(param, function (data) {
  1098. console.log("点击结果:" + JSON.stringify(data));
  1099. });
  1100. };
  1101. FYHD_Sdk.PushData = function () {
  1102. if (!Main_1.Main.IsWx)
  1103. return;
  1104. var param = {};
  1105. Laya.Browser.window.sdk.getFyhd().shareRecommend(param, function (data) {
  1106. if (data.data) {
  1107. FYHD_Sdk.pushData = data.data;
  1108. FYHD_Sdk.pushData.sort(FYHD_Sdk.ListSort);
  1109. EventManager_1.EventManager.event(FYHD_Sdk.ShowAd);
  1110. FYHD_Sdk.isHaveDate = true;
  1111. }
  1112. console.log("获取互推信息:" + JSON.stringify(FYHD_Sdk.pushData));
  1113. });
  1114. };
  1115. FYHD_Sdk.ShowHuTuiJump = function (data) {
  1116. if (!Main_1.Main.IsWx)
  1117. return;
  1118. if (data.jump_type == 2) //二维码跳转方法
  1119. {
  1120. Laya.Browser.window.wx.previewImage({ current: data.qrcode, urls: [data.qrcode] });
  1121. }
  1122. else if (data.jump_type == 1) //直跳方法
  1123. {
  1124. Laya.Browser.window.wx.navigateToMiniProgram({
  1125. appId: data.to_appid,
  1126. path: data.jump_path,
  1127. success: function (res) {
  1128. // 打开成功
  1129. console.log("上报成功:" + JSON.stringify(res));
  1130. FYHD_Sdk.PushClick(data.to_appid);
  1131. }
  1132. });
  1133. }
  1134. else if (data.jump_type == 0) //平台跳转方法
  1135. {
  1136. Laya.Browser.window.wx.navigateToMiniProgram({
  1137. appId: data.platform_appid,
  1138. path: data.jump_path,
  1139. success: function (res) {
  1140. // 打开成功
  1141. console.log("上报成功:" + JSON.stringify(res));
  1142. FYHD_Sdk.PushClick(data.to_appid);
  1143. }
  1144. });
  1145. }
  1146. };
  1147. FYHD_Sdk.PushClick = function (to_appid) {
  1148. if (!Main_1.Main.IsWx)
  1149. return;
  1150. var param = {
  1151. openid: FYHD_Sdk.openid,
  1152. to_appid: to_appid,
  1153. };
  1154. Laya.Browser.window.sdk.getFyhd().sharePlay(param, function (data) {
  1155. console.log("点击上报结果:" + JSON.stringify(data));
  1156. });
  1157. };
  1158. FYHD_Sdk.ListSort = function (a, b) {
  1159. if (Number(a["panel"]) < Number(b["panel"])) {
  1160. return -1;
  1161. }
  1162. if (Number(a["panel"]) == Number(b["panel"])) {
  1163. return 0;
  1164. }
  1165. if (Number(a["panel"]) > Number(b["panel"])) {
  1166. return 1;
  1167. }
  1168. };
  1169. FYHD_Sdk.Ad_ClickType = {
  1170. Video: "video_click",
  1171. Watch: "watch",
  1172. Share: "share",
  1173. Banner: "banner",
  1174. Push: "push"
  1175. };
  1176. FYHD_Sdk.pushData = [];
  1177. FYHD_Sdk.isHaveDate = false;
  1178. FYHD_Sdk.ShowAd = "ShowAd";
  1179. return FYHD_Sdk;
  1180. }());
  1181. exports.FYHD_Sdk = FYHD_Sdk;
  1182. },{"../Main":2,"./EventManager":14,"./UserModel":19}],16:[function(require,module,exports){
  1183. "use strict";
  1184. Object.defineProperty(exports, "__esModule", { value: true });
  1185. var GameDefined = /** @class */ (function () {
  1186. function GameDefined() {
  1187. }
  1188. GameDefined.player_layer = 9;
  1189. GameDefined.wall_layer = 8;
  1190. GameDefined.moster_layer = 10;
  1191. GameDefined.boss_layer = 11;
  1192. GameDefined.tree_layer = 12;
  1193. GameDefined.bomb_layer = 13;
  1194. GameDefined.HitEvent = "HitEvent";
  1195. GameDefined.game_scene_path = "res/LayaScene_main/Conventional/main.ls";
  1196. //"res/LayaScene_GameScene/Conventional/GameScene.ls";
  1197. GameDefined.poolName = {
  1198. bulletG: "bulletG",
  1199. BulletR: "BulletR"
  1200. };
  1201. GameDefined.uiRes = [
  1202. "res/atlas/main_res.atlas",
  1203. "res/atlas/main_res.png "
  1204. ];
  1205. return GameDefined;
  1206. }());
  1207. exports.default = GameDefined;
  1208. var CheckType;
  1209. (function (CheckType) {
  1210. CheckType[CheckType["Player"] = 0] = "Player";
  1211. CheckType[CheckType["Moster"] = 1] = "Moster";
  1212. CheckType[CheckType["Boss"] = 2] = "Boss";
  1213. CheckType[CheckType["Bomb"] = 3] = "Bomb";
  1214. CheckType[CheckType["Tree"] = 4] = "Tree";
  1215. })(CheckType = exports.CheckType || (exports.CheckType = {}));
  1216. var BulletType;
  1217. (function (BulletType) {
  1218. BulletType[BulletType["BulletR"] = 0] = "BulletR";
  1219. BulletType[BulletType["BulletG"] = 1] = "BulletG";
  1220. })(BulletType = exports.BulletType || (exports.BulletType = {}));
  1221. },{}],17:[function(require,module,exports){
  1222. "use strict";
  1223. Object.defineProperty(exports, "__esModule", { value: true });
  1224. var ResourceLoad = /** @class */ (function () {
  1225. function ResourceLoad() {
  1226. }
  1227. ResourceLoad.LoadResource = function (path, complet) {
  1228. Laya.loader.retryNum = 2;
  1229. Laya.loader.maxLoader = 3;
  1230. Laya.loader.retryDelay = 100;
  1231. Laya.loader.create(path, new Laya.Handler(this, complet));
  1232. Laya.loader.on(Laya.Event.ERROR, this, function (data) {
  1233. console.log(data + " 资源加载失败");
  1234. });
  1235. };
  1236. return ResourceLoad;
  1237. }());
  1238. exports.default = ResourceLoad;
  1239. },{}],18:[function(require,module,exports){
  1240. "use strict";
  1241. Object.defineProperty(exports, "__esModule", { value: true });
  1242. var WXSdk_1 = require("./WXSdk");
  1243. var FYHD_Sdk_1 = require("./FYHD_Sdk");
  1244. var ShareModule = /** @class */ (function () {
  1245. function ShareModule() {
  1246. }
  1247. ShareModule.GoShare = function (callBack) {
  1248. ShareModule.ShareTime = new Date().getTime();
  1249. console.log("分享点击时间=" + ShareModule.ShareTime);
  1250. ShareModule.IsSharing = true;
  1251. ShareModule.callback = callBack;
  1252. };
  1253. ShareModule.OnShowHandle = function () {
  1254. if (Laya.Browser.window.wx) {
  1255. Laya.Browser.window.wx.onShow(function (option) {
  1256. console.log("onshow share start");
  1257. console.log("进入微信");
  1258. //Laya.timer.scale=1;
  1259. if (ShareModule.IsSharing) {
  1260. ShareModule.IsSharing = false;
  1261. var time = new Date().getTime();
  1262. console.log("分享回到游戏时间" + time);
  1263. var wait = (time - ShareModule.ShareTime) / 1000;
  1264. console.log("分享停留时间为:" + wait);
  1265. var shareSuccess = false;
  1266. var realSuccess = false;
  1267. if (wait >= 2) {
  1268. if (Math.random() <= 0.5) {
  1269. shareSuccess = true;
  1270. FYHD_Sdk_1.FYHD_Sdk.ClickAd(FYHD_Sdk_1.FYHD_Sdk.Ad_ClickType.Share);
  1271. if (!ShareModule.callback)
  1272. return;
  1273. ShareModule.callback(true);
  1274. Laya.Browser.window.wx.showToast({ title: "分享成功!" });
  1275. }
  1276. else {
  1277. if (!ShareModule.callback)
  1278. return;
  1279. if (Math.random() <= 0.5) {
  1280. Laya.Browser.window.wx.showToast({ title: "分享失败!" });
  1281. }
  1282. else {
  1283. WXSdk_1.WXSdk.ShowToast("请分享到不同群^-^", false);
  1284. }
  1285. ShareModule.callback(false);
  1286. }
  1287. }
  1288. }
  1289. });
  1290. }
  1291. };
  1292. ShareModule.IsSharing = false;
  1293. return ShareModule;
  1294. }());
  1295. exports.ShareModule = ShareModule;
  1296. },{"./FYHD_Sdk":15,"./WXSdk":20}],19:[function(require,module,exports){
  1297. "use strict";
  1298. Object.defineProperty(exports, "__esModule", { value: true });
  1299. var UserConfigName;
  1300. (function (UserConfigName) {
  1301. UserConfigName[UserConfigName["train"] = 0] = "train";
  1302. UserConfigName[UserConfigName["sign"] = 1] = "sign";
  1303. UserConfigName[UserConfigName["rewards"] = 2] = "rewards";
  1304. })(UserConfigName = exports.UserConfigName || (exports.UserConfigName = {}));
  1305. //用户信息属性
  1306. var UserAttr;
  1307. (function (UserAttr) {
  1308. UserAttr[UserAttr["equip_train"] = 0] = "equip_train";
  1309. UserAttr[UserAttr["user_id"] = 1] = "user_id";
  1310. UserAttr[UserAttr["stage"] = 2] = "stage";
  1311. UserAttr[UserAttr["get_trains"] = 3] = "get_trains";
  1312. UserAttr[UserAttr["money"] = 4] = "money";
  1313. UserAttr[UserAttr["progress_trains"] = 5] = "progress_trains";
  1314. })(UserAttr = exports.UserAttr || (exports.UserAttr = {}));
  1315. var NetUserModel = /** @class */ (function () {
  1316. function NetUserModel(_token, _config, _appSetting, _user, _userbase, _useInvite, _user_lottery, _user_treasure, t, _user_achievement, _user_sign, _user_arena) {
  1317. this.loginSeverTime = 0;
  1318. this.localTime = Laya.timer.currTimer;
  1319. this.loginSeverTime = t;
  1320. this.m_token = _token;
  1321. this.m_configs = _config;
  1322. this.m_app_setting = _appSetting;
  1323. this.m_user = _user;
  1324. this.m_user_base = _userbase;
  1325. this.m_user_invite = _useInvite;
  1326. this.m_user_lottery = _user_lottery;
  1327. this.m_user_treasure = _user_treasure;
  1328. this.m_user_achievement = _user_achievement;
  1329. this.m_user_sign = _user_sign;
  1330. this.m_user_arena = _user_arena;
  1331. this.userid = this.m_user["user_id"];
  1332. this.openid = this.m_user_base["openid"];
  1333. this.nickname = this.m_user_base["nickname"];
  1334. }
  1335. Object.defineProperty(NetUserModel.prototype, "Cfg", {
  1336. set: function (cfg) {
  1337. this.m_configs = cfg;
  1338. },
  1339. enumerable: true,
  1340. configurable: true
  1341. });
  1342. Object.defineProperty(NetUserModel.prototype, "sharetitle", {
  1343. get: function () {
  1344. if (this.m_app_setting["sharetitle"]) {
  1345. return this.m_app_setting["sharetitle"];
  1346. }
  1347. return "";
  1348. },
  1349. enumerable: true,
  1350. configurable: true
  1351. });
  1352. Object.defineProperty(NetUserModel.prototype, "shareimage", {
  1353. get: function () {
  1354. if (this.m_app_setting["shareimage"]) {
  1355. return this.m_app_setting["shareimage"];
  1356. }
  1357. return "";
  1358. },
  1359. enumerable: true,
  1360. configurable: true
  1361. });
  1362. NetUserModel.prototype.GetCfg = function (type) {
  1363. var _type = UserConfigName[type];
  1364. return this.m_configs[_type];
  1365. };
  1366. NetUserModel.prototype.GetUserAttr = function (_attr) {
  1367. var attr = UserAttr[_attr];
  1368. return this.m_user[attr];
  1369. };
  1370. Object.defineProperty(NetUserModel.prototype, "ServerTime", {
  1371. get: function () {
  1372. var time = Laya.timer.currTimer;
  1373. var stime = this.loginSeverTime + Math.ceil((time - this.localTime) / 1000);
  1374. return stime;
  1375. },
  1376. enumerable: true,
  1377. configurable: true
  1378. });
  1379. Object.defineProperty(NetUserModel.prototype, "GuideLevel", {
  1380. get: function () {
  1381. if (this.m_app_setting["GuideLevel"]) {
  1382. return Number(this.m_app_setting["GuideLevel"]);
  1383. }
  1384. return 1;
  1385. },
  1386. enumerable: true,
  1387. configurable: true
  1388. });
  1389. Object.defineProperty(NetUserModel.prototype, "BannerMoveTime", {
  1390. get: function () {
  1391. if (this.m_app_setting["BannerMoveTime"]) {
  1392. return Number(this.m_app_setting["BannerMoveTime"]);
  1393. }
  1394. return 0;
  1395. },
  1396. enumerable: true,
  1397. configurable: true
  1398. });
  1399. Object.defineProperty(NetUserModel.prototype, "HaveBanner", {
  1400. get: function () {
  1401. if (this.m_app_setting["HaveBanner"]) {
  1402. return Number(this.m_app_setting["HaveBanner"]);
  1403. }
  1404. return 0;
  1405. },
  1406. enumerable: true,
  1407. configurable: true
  1408. });
  1409. Object.defineProperty(NetUserModel.prototype, "IsShare", {
  1410. get: function () {
  1411. if (this.m_app_setting["IsShare"]) {
  1412. return Number(this.m_app_setting["IsShare"]);
  1413. }
  1414. return 0;
  1415. },
  1416. enumerable: true,
  1417. configurable: true
  1418. });
  1419. Object.defineProperty(NetUserModel.prototype, "BtnCanMove", {
  1420. get: function () {
  1421. if (this.m_app_setting["BtnCanMove"]) {
  1422. return Number(this.m_app_setting["BtnCanMove"]);
  1423. }
  1424. return 0;
  1425. },
  1426. enumerable: true,
  1427. configurable: true
  1428. });
  1429. Object.defineProperty(NetUserModel.prototype, "ISShareThenVideo", {
  1430. get: function () {
  1431. if (this.m_app_setting["ISShareThenVideo"]) {
  1432. return Number(this.m_app_setting["ISShareThenVideo"]);
  1433. }
  1434. return 0;
  1435. },
  1436. enumerable: true,
  1437. configurable: true
  1438. });
  1439. Object.defineProperty(NetUserModel.prototype, "OpenSceneValue", {
  1440. get: function () {
  1441. if (this.m_app_setting["OpenSceneValue"]) {
  1442. return Number(this.m_app_setting["OpenSceneValue"]);
  1443. }
  1444. return 0;
  1445. },
  1446. enumerable: true,
  1447. configurable: true
  1448. });
  1449. Object.defineProperty(NetUserModel.prototype, "IsOpenTryOut", {
  1450. get: function () {
  1451. if (this.m_app_setting["IsOpenTryOut"]) {
  1452. var num = Number(this.m_app_setting["IsOpenTryOut"]);
  1453. if (num == 0)
  1454. return 0;
  1455. if (Math.random() < num) {
  1456. return 1;
  1457. }
  1458. else {
  1459. return 0;
  1460. }
  1461. }
  1462. return 0;
  1463. },
  1464. enumerable: true,
  1465. configurable: true
  1466. });
  1467. return NetUserModel;
  1468. }());
  1469. exports.NetUserModel = NetUserModel;
  1470. var UserModel = /** @class */ (function () {
  1471. function UserModel(code, nickname, avatar, gender, country, province, city, device, share_id, scene) {
  1472. UserModel.instance = this;
  1473. this.m_code = code;
  1474. this.m_nickname = nickname ? nickname : "游客";
  1475. this.m_avatar = avatar ? avatar : "";
  1476. this.m_gender = gender ? gender : 0;
  1477. this.m_city = city ? city : "";
  1478. this.m_device = device ? device : "";
  1479. this.m_share_id = share_id ? share_id : "";
  1480. this.m_scene = scene ? scene : "";
  1481. this.m_country = country ? country : "";
  1482. this.m_province = province ? province : "";
  1483. }
  1484. Object.defineProperty(UserModel.prototype, "CurModel", {
  1485. get: function () {
  1486. return this.curModel;
  1487. },
  1488. enumerable: true,
  1489. configurable: true
  1490. });
  1491. Object.defineProperty(UserModel, "Instance", {
  1492. get: function () {
  1493. if (UserModel.instance) {
  1494. return UserModel.instance;
  1495. }
  1496. else {
  1497. UserModel.instance = new UserModel("11", "游客", "", null, "", "", "", "iphone6s", "", "");
  1498. return UserModel.instance;
  1499. }
  1500. },
  1501. enumerable: true,
  1502. configurable: true
  1503. });
  1504. UserModel.prototype.SetUserModel = function (_model) {
  1505. this.curModel = _model;
  1506. };
  1507. return UserModel;
  1508. }());
  1509. exports.default = UserModel;
  1510. },{}],20:[function(require,module,exports){
  1511. "use strict";
  1512. Object.defineProperty(exports, "__esModule", { value: true });
  1513. var Main_1 = require("../Main");
  1514. var ViewManager_1 = require("../game_logic/ViewManager");
  1515. var SettingController_1 = require("../game_logic/SettingController");
  1516. var ShareModule_1 = require("./ShareModule");
  1517. var UserModel_1 = require("./UserModel");
  1518. var WXSdk = /** @class */ (function () {
  1519. function WXSdk() {
  1520. this.shareId = "";
  1521. this.shareScene = "";
  1522. }
  1523. WXSdk.prototype.setShareId = function (tid) {
  1524. if (tid != "" && tid != null) {
  1525. this.shareId = tid;
  1526. console.log("[LOG]: setShareOpenId.tid=", this.shareId);
  1527. }
  1528. };
  1529. Object.defineProperty(WXSdk, "Instance", {
  1530. get: function () {
  1531. return WXSdk.instance || (WXSdk.instance = new WXSdk());
  1532. },
  1533. enumerable: true,
  1534. configurable: true
  1535. });
  1536. Object.defineProperty(WXSdk.prototype, "getShareId", {
  1537. get: function () {
  1538. return this.shareId;
  1539. },
  1540. enumerable: true,
  1541. configurable: true
  1542. });
  1543. Object.defineProperty(WXSdk.prototype, "ShareScene", {
  1544. get: function () {
  1545. return this.shareScene;
  1546. },
  1547. set: function (sceneS) {
  1548. if (sceneS != "" && sceneS != null) {
  1549. this.shareScene = sceneS;
  1550. }
  1551. },
  1552. enumerable: true,
  1553. configurable: true
  1554. });
  1555. WXSdk.prototype.init = function (cb) {
  1556. Laya.Browser.window.wx.showShareMenu({
  1557. withShareTicket: true
  1558. });
  1559. //this.shezhiShareMessage(null, null);
  1560. Laya.Browser.window.wx.onShow(function (option) {
  1561. var shareTicket = option.shareTicket;
  1562. var shareid = option.query.shareid;
  1563. var scene = decodeURIComponent(option.query.scene);
  1564. console.log("全局path=:", option.path);
  1565. console.log("decodeURIComponent", option.query.scene);
  1566. var sceneQuery = JSON.stringify(option.query);
  1567. if (Main_1.Main.wxValue == "") {
  1568. Main_1.Main.wxValue = option.scene;
  1569. }
  1570. console.log("scene", option.scene);
  1571. console.log("sceneQuery", sceneQuery);
  1572. var channel = option.query.channel;
  1573. var appid;
  1574. if (option.referrerInfo) {
  1575. console.log("referrerInfo:" + JSON.stringify(option.referrerInfo));
  1576. appid = option.referrerInfo.appId;
  1577. if (appid) {
  1578. console.log("onShow appis is:", appid);
  1579. }
  1580. else {
  1581. console.log("onShow appis is null");
  1582. }
  1583. }
  1584. else {
  1585. console.log("referrerInfo为空");
  1586. }
  1587. if (channel != null) {
  1588. console.log("onShow channel is:", channel);
  1589. }
  1590. cb(shareTicket, shareid, channel, appid);
  1591. });
  1592. };
  1593. WXSdk.ShareMessage = function (title, imageUrl) {
  1594. if (!Main_1.Main.IsWx)
  1595. return;
  1596. var t = UserModel_1.default.Instance.CurModel.ServerTime;
  1597. var _title = title;
  1598. var _url = imageUrl;
  1599. if (!_title) {
  1600. _title = UserModel_1.default.Instance.CurModel.sharetitle;
  1601. _url = UserModel_1.default.Instance.CurModel.shareimage;
  1602. }
  1603. Laya.Browser.window.wx.onShareAppMessage(function () { return ({
  1604. title: _title,
  1605. imageUrl: _url,
  1606. query: "shareid=" + UserModel_1.default.Instance.CurModel.userid + "_" + t + "_" + Math.floor(9999 * Math.random()).toString()
  1607. }); });
  1608. };
  1609. WXSdk.prototype.wx_login = function (cb) {
  1610. if (WXSdk.Lodining) {
  1611. return;
  1612. }
  1613. WXSdk.Lodining = true;
  1614. console.log("Excute wx.login! shareOpenId: " + this.shareId);
  1615. Laya.Browser.window.wx.login({
  1616. success: function (res) {
  1617. console.log("wx.login: success! res.code=" + res.code);
  1618. if (res.code) {
  1619. WXSdk.Lodining = false;
  1620. console.log("将要传递的参数:" + res);
  1621. cb(res);
  1622. }
  1623. else {
  1624. console.log('获取用户登录态失败!' + res.errMsg);
  1625. cb("error");
  1626. }
  1627. },
  1628. fail: function (res) { console.log("wx.login: failed, res=" + res); WXSdk.Lodining = false; cb("error"); }
  1629. });
  1630. };
  1631. //显示加载信息
  1632. WXSdk.ShowLoading = function (title, isShowWx) {
  1633. if (title === void 0) { title = "加载中..."; }
  1634. if (isShowWx === void 0) { isShowWx = true; }
  1635. if (Laya.Browser.window && Laya.Browser.window.wx) {
  1636. if (isShowWx) {
  1637. Laya.Browser.window.wx.showLoading({ title: title, mask: true });
  1638. }
  1639. ViewManager_1.default.Instance.OpenMask();
  1640. }
  1641. };
  1642. WXSdk.SystemInfo = function () {
  1643. if (Laya.Browser.window.wx) {
  1644. return Laya.Browser.window.wx.getSystemInfoSync();
  1645. }
  1646. };
  1647. // private static button;
  1648. // public static showbjWxGameQuan(flag: boolean): void {
  1649. // if (Laya.Browser.window.wx == null) {
  1650. // return;
  1651. // }
  1652. // if (flag) {
  1653. // if (WeiXinSDK.button == null) {
  1654. // let info = Laya.Browser.window.wx.getSystemInfoSync();
  1655. // if (!info) return;
  1656. // var top = 474 * info.windowHeight / Laya.stage.height;
  1657. // var height = 94 * info.windowHeight / Laya.stage.height;
  1658. // var width = height * 95 / 94;
  1659. // WeiXinSDK.button = Laya.Browser.window.wx.createGameClubButton
  1660. // ({
  1661. // type: "image",
  1662. // image: 'res/wx.png',
  1663. // style:
  1664. // {
  1665. // left: 0,
  1666. // top: top,
  1667. // width: width,
  1668. // height: height
  1669. // }
  1670. // })
  1671. // }
  1672. // WeiXinSDK.button.show();
  1673. // }
  1674. // else {
  1675. // if (WeiXinSDK.button) {
  1676. // WeiXinSDK.button.hide();
  1677. // }
  1678. // }
  1679. // }
  1680. //退出
  1681. // 显示提示信息//
  1682. WXSdk.ShowToast = function (text, icon) {
  1683. if (icon === void 0) { icon = true; }
  1684. if (Laya.Browser.window.wx) {
  1685. var t_icon = icon ? "success" : "none";
  1686. Laya.Browser.window.wx.showToast({ title: text, icon: t_icon });
  1687. }
  1688. else {
  1689. console.log(text);
  1690. }
  1691. };
  1692. //1:pet 2:人物
  1693. // public static XianShi_Model(content: string, callback: Function = null, type = 1, title = "") {
  1694. // if (Laya.Browser.window && Laya.Browser.window.wx) {
  1695. // if (type == 1) {
  1696. // var cancelText = "残忍丢掉";
  1697. // var confirmText = "带上一起";
  1698. // } else {
  1699. // var cancelText = "不想";
  1700. // var confirmText = "想";
  1701. // }
  1702. // Laya.Browser.window.wx.showModal({
  1703. // title: title,
  1704. // content: content,
  1705. // cancelText: cancelText,
  1706. // confirmText: confirmText,
  1707. // success(res) {
  1708. // if (res.confirm) {
  1709. // console.log('用户点击确定');
  1710. // callback(true);
  1711. // } else if (res.cancel) {
  1712. // console.log('用户点击取消');
  1713. // callback(false);
  1714. // }
  1715. // },
  1716. // fail(res?) {
  1717. // console.log('用户点击取消');
  1718. // callback(false);
  1719. // }
  1720. // })
  1721. // }
  1722. // }
  1723. WXSdk.ShortVibrate = function () {
  1724. if (Laya.Browser.window.wx && SettingController_1.SettingController.Instance.vibrate) {
  1725. Laya.Browser.window.wx.vibrateShort({});
  1726. }
  1727. };
  1728. WXSdk.LongVibrate = function () {
  1729. if (Laya.Browser.window.wx && SettingController_1.SettingController.Instance.vibrate) {
  1730. Laya.Browser.window.wx.vibrateLong({});
  1731. }
  1732. };
  1733. WXSdk.HideLoading = function (isShowWx) {
  1734. if (isShowWx === void 0) { isShowWx = true; }
  1735. if (Laya.Browser.window && Laya.Browser.window.wx) {
  1736. if (isShowWx) {
  1737. Laya.Browser.window.wx.hideLoading();
  1738. }
  1739. ViewManager_1.default.Instance.CloseMask();
  1740. }
  1741. };
  1742. WXSdk.Success = function (stageId) {
  1743. if (!Main_1.Main.IsWx)
  1744. return;
  1745. Laya.Browser.window.wx.aldStage.onEnd({
  1746. stageId: stageId,
  1747. stageName: "第" + stageId + "关",
  1748. event: "complete",
  1749. params: {
  1750. desc: "关卡完成" //描述
  1751. }
  1752. });
  1753. };
  1754. //记录阿拉丁事件
  1755. WXSdk.AldEvent = function (eventName, key, value) {
  1756. if (Laya.Browser.window && Laya.Browser.window.wx) {
  1757. if (!key)
  1758. key = "用户id";
  1759. if (!value) {
  1760. value = "";
  1761. console.log(value);
  1762. }
  1763. Laya.Browser.window.wx.aldSendEvent(eventName, { key: value });
  1764. }
  1765. };
  1766. WXSdk.Fail = function (stageId) {
  1767. if (!Main_1.Main.IsWx)
  1768. return;
  1769. Laya.Browser.window.wx.aldStage.onEnd({
  1770. stageId: stageId,
  1771. stageName: "第" + stageId + "关",
  1772. event: "fail",
  1773. params: {
  1774. desc: "关卡失败",
  1775. }
  1776. });
  1777. };
  1778. // public static leveleRuning(stageId: string, userid: string, eventtype: number, itemName: string) {
  1779. // if (Laya.Browser.window && Laya.Browser.window.wx) {
  1780. // //Laya.Browser.window.wx.aldStage.onRunning({"stageId":stageId,"stageName":stageName,"userId":userid});
  1781. // var eventT = eventtype == 0 ? "award" : "revive";
  1782. // Laya.Browser.window.wx.aldStage.onRunning({
  1783. // stageId: stageId,
  1784. // stageName: "第" + stageId + "关",
  1785. // userId: userid,
  1786. // event: eventT,
  1787. // params: {
  1788. // itemName: itemName,
  1789. // }
  1790. // })
  1791. // }
  1792. // }
  1793. WXSdk.Start = function (stageId) {
  1794. if (!Main_1.Main.IsWx)
  1795. return;
  1796. Laya.Browser.window.wx.aldStage.onStart({
  1797. stageId: stageId,
  1798. stageName: "第" + stageId + "关",
  1799. });
  1800. };
  1801. WXSdk.Game_Share = function (callback, channel) {
  1802. if (callback === void 0) { callback = null; }
  1803. if (channel === void 0) { channel = ""; }
  1804. if (!Main_1.Main.IsWx) {
  1805. return;
  1806. }
  1807. var url;
  1808. var title;
  1809. url = UserModel_1.default.Instance.CurModel.shareimage;
  1810. title = UserModel_1.default.Instance.CurModel.sharetitle;
  1811. console.log(url + " " + title);
  1812. if (channel != null) {
  1813. // WeiXinSDK.AldEvent("用户分享");
  1814. }
  1815. var t; // = UserModel.Get_Instance.CurModel.HuoQu_ServerTime;
  1816. var path = "";
  1817. Laya.Browser.window.wx.aldShareAppMessage({
  1818. title: title,
  1819. imageUrl: url,
  1820. query: "shareid=" + UserModel_1.default.Instance.CurModel.userid + "_" + "other" + "_" + t + "_" + Math.floor(9999 * Math.random()).toString(),
  1821. });
  1822. ShareModule_1.ShareModule.GoShare(callback);
  1823. };
  1824. WXSdk.Lodining = false;
  1825. return WXSdk;
  1826. }());
  1827. exports.WXSdk = WXSdk;
  1828. },{"../Main":2,"../game_logic/SettingController":12,"../game_logic/ViewManager":13,"./ShareModule":18,"./UserModel":19}],21:[function(require,module,exports){
  1829. "use strict";
  1830. Object.defineProperty(exports, "__esModule", { value: true });
  1831. var Dictionary = /** @class */ (function () {
  1832. function Dictionary() {
  1833. this._container = {};
  1834. this._length = 0;
  1835. }
  1836. Object.defineProperty(Dictionary.prototype, "container", {
  1837. get: function () {
  1838. return this._container;
  1839. },
  1840. enumerable: true,
  1841. configurable: true
  1842. });
  1843. Object.defineProperty(Dictionary.prototype, "size", {
  1844. //获取字典长度
  1845. get: function () {
  1846. return this._length;
  1847. },
  1848. enumerable: true,
  1849. configurable: true
  1850. });
  1851. //添加
  1852. Dictionary.prototype.set = function (key, value) {
  1853. if (!this._container.hasOwnProperty(key)) {
  1854. this._length++;
  1855. }
  1856. this._container[key] = value;
  1857. };
  1858. //删除
  1859. Dictionary.prototype.delete = function (key) {
  1860. if (this._container.hasOwnProperty(key)) {
  1861. delete this._container[key];
  1862. this._length--;
  1863. }
  1864. };
  1865. //查找
  1866. Dictionary.prototype.has = function (key) {
  1867. return this._container.hasOwnProperty(key) ? true : false;
  1868. };
  1869. //获取
  1870. Dictionary.prototype.get = function (key) {
  1871. if (this._container.hasOwnProperty(key)) {
  1872. return this._container[key];
  1873. }
  1874. else {
  1875. return undefined;
  1876. }
  1877. };
  1878. //清空
  1879. Dictionary.prototype.clear = function () {
  1880. this._container = {};
  1881. this._length = 0;
  1882. };
  1883. return Dictionary;
  1884. }());
  1885. exports.default = Dictionary;
  1886. },{}],22:[function(require,module,exports){
  1887. "use strict";
  1888. Object.defineProperty(exports, "__esModule", { value: true });
  1889. var Game_Tool = /** @class */ (function () {
  1890. function Game_Tool() {
  1891. }
  1892. Game_Tool.GetObjKey = function (obj) {
  1893. if (obj == null)
  1894. return null;
  1895. for (var key in obj) {
  1896. if (obj.hasOwnProperty(key)) {
  1897. return key;
  1898. }
  1899. }
  1900. };
  1901. //返回一个随机整数[min,max]
  1902. Game_Tool.randomInt = function (min, max) {
  1903. return parseInt(Math.random() * (max - min + 1) + min);
  1904. };
  1905. //p1 左向量 p2
  1906. Game_Tool.getAng = function (xx, yy, obl) {
  1907. return 180 / Math.PI * this.getRad(xx, yy, obl);
  1908. };
  1909. //返回角度
  1910. Game_Tool.getRad = function (xx, yy, obl) {
  1911. // 方法一:asin()
  1912. // var rad:Number = xx > 0 ? ((Math.PI * 3)/2 + Math.asin(-yy/obl)) : (Math.PI / 2 - Math.asin(-yy/obl));
  1913. // 方法二:acos()
  1914. var rad = yy < 0 ? Math.acos(xx / obl) : (Math.PI * 2 - Math.acos(xx / obl));
  1915. // 方法三:atan2()
  1916. // var rad:Number = yy < 0 ? Math.atan2(-yy, xx) : Math.PI * 2 + Math.atan2(-yy, xx);
  1917. return rad;
  1918. };
  1919. Game_Tool.getM_Vector = function (v1, v2) {
  1920. var temp = new Laya.Vector3();
  1921. Laya.Vector3.add(v1, v2, temp);
  1922. return new Laya.Vector3(temp.x * 0.5, temp.y * 0.5, temp.z * 0.5);
  1923. };
  1924. Game_Tool.getReflectAng = function (dir) {
  1925. var xx = Math.abs(dir.x);
  1926. var zz = Math.abs(dir.z);
  1927. var obl = Math.sqrt(Math.pow(dir.x, 2) + Math.pow(dir.z, 2));
  1928. return 90 - 180 / Math.PI * Math.acos(xx / obl);
  1929. };
  1930. Game_Tool.random_1to1 = function () {
  1931. var iszheng = Math.random() > 0.5 ? -1 : 1;
  1932. return Math.random() * iszheng;
  1933. };
  1934. Game_Tool.get64Encode = function (str) {
  1935. var c1, c2, c3;
  1936. var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  1937. var i = 0, len = str.length, string = '';
  1938. while (i < len) {
  1939. c1 = str.charCodeAt(i++) & 0xff;
  1940. if (i == len) {
  1941. string += base64EncodeChars.charAt(c1 >> 2);
  1942. string += base64EncodeChars.charAt((c1 & 0x3) << 4);
  1943. string += "==";
  1944. break;
  1945. }
  1946. c2 = str.charCodeAt(i++);
  1947. if (i == len) {
  1948. string += base64EncodeChars.charAt(c1 >> 2);
  1949. string += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
  1950. string += base64EncodeChars.charAt((c2 & 0xF) << 2);
  1951. string += "=";
  1952. break;
  1953. }
  1954. c3 = str.charCodeAt(i++);
  1955. string += base64EncodeChars.charAt(c1 >> 2);
  1956. string += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
  1957. string += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
  1958. string += base64EncodeChars.charAt(c3 & 0x3F);
  1959. }
  1960. return string;
  1961. };
  1962. // public static SetHuTuiList(list:Laya.List,data?,scrol:number=1,type:number=0){ //scrol 1:竖的 2横的
  1963. // var arr=data?data:FYHD_Sdk.pushData;
  1964. // list.selectEnable = false;
  1965. // scrol==1?list.vScrollBarSkin = "":list.hScrollBarSkin = "";
  1966. // list.renderHandler = Laya.Handler.create(this, this.updateItem, [type], false);
  1967. // list.array = arr;
  1968. // list.refresh();
  1969. // }
  1970. // private static updateItem(type,cell: Laya.Box, index: number){
  1971. // var aditem=cell.getComponent(HuiTuiItem)as HuiTuiItem;
  1972. // aditem.Refresh(type);
  1973. // }
  1974. // public static makeRandomArr(arrList,num){
  1975. // if(num>arrList.length){
  1976. // return;
  1977. // }
  1978. // var tempArr=arrList.slice(0);
  1979. // var newArrList=[];
  1980. // for(var i=0;i<num;i++){
  1981. // var random=Math.floor(Math.random()*(tempArr.length-1));
  1982. // var arr=tempArr[random];
  1983. // tempArr.splice(random, 1);
  1984. // newArrList.push(arr);
  1985. // }
  1986. // return newArrList;
  1987. // }
  1988. // public static CopyArr(o):any{
  1989. // var arr=[];
  1990. // for (let index = 0; index < o.length; index++) {
  1991. // const element = o[index];
  1992. // arr.push(element);
  1993. // }
  1994. // return arr;
  1995. // }
  1996. // public static ShowQianDao(): boolean {
  1997. // let todayZero = new Date(UserModel.Instance.CurModel.ServerTime * 1000);
  1998. // todayZero.setHours(0, 0, 0, 0);
  1999. // if(!PlayerManager.Instance.sign)return true;
  2000. // var lastTime = Number(PlayerManager.Instance.sign["sign_time"]) * 1000;
  2001. // let lastSignTime = new Date(lastTime);
  2002. // if (lastTime == 0) {
  2003. // return true;
  2004. // }
  2005. // if (lastSignTime.valueOf() < todayZero.valueOf()) {
  2006. // return true;
  2007. // }
  2008. // return false;
  2009. // }
  2010. Game_Tool.CreateText = function (content) {
  2011. var curText = new Laya.Text;
  2012. curText.width = 300;
  2013. curText.height = 50;
  2014. curText.align = "center";
  2015. curText.valign = "middle";
  2016. curText.font = "Microsoft YaHei";
  2017. curText.fontSize = 35;
  2018. curText.color = "#ff8e00";
  2019. curText.bold = true;
  2020. curText.font = "Microsoft YaHei";
  2021. curText.text = content;
  2022. curText.x = 60;
  2023. curText.y = 10;
  2024. Laya.stage.addChild(curText);
  2025. console.log(curText);
  2026. var tween = Laya.Tween.to(parent, { y: curText.y - 200 }, 1000, Laya.Ease.expoInOut, Laya.Handler.create(this, function () {
  2027. tween.clear();
  2028. curText.destroy();
  2029. }), 100);
  2030. };
  2031. return Game_Tool;
  2032. }());
  2033. exports.default = Game_Tool;
  2034. },{}],23:[function(require,module,exports){
  2035. "use strict";
  2036. Object.defineProperty(exports, "__esModule", { value: true });
  2037. var Tween = Laya.Tween;
  2038. var SettingController_1 = require("../../game_logic/SettingController");
  2039. var ImageRunTime = /** @class */ (function (_super) {
  2040. __extends(ImageRunTime, _super);
  2041. function ImageRunTime() {
  2042. var _this = _super.call(this) || this;
  2043. _this.scaleTime = 80;
  2044. _this.clickId = false;
  2045. //设置组件的中心点
  2046. _this.anchorX = _this.anchorY = 0.5;
  2047. _this.on(Laya.Event.MOUSE_DOWN, _this, _this.scaleSmall);
  2048. _this.on(Laya.Event.MOUSE_UP, _this, _this.scaleBig);
  2049. _this.on(Laya.Event.MOUSE_OUT, _this, _this.scaleBig);
  2050. return _this;
  2051. }
  2052. ImageRunTime.prototype.scaleBig = function (e) {
  2053. //变大还原的缓动效果
  2054. if (!this.clickId)
  2055. return;
  2056. this.clickId = false;
  2057. this.bigTween = Tween.to(this, { scaleX: 1, scaleY: 1 }, this.scaleTime);
  2058. if (this._mclickHandler) {
  2059. this._mclickHandler();
  2060. }
  2061. };
  2062. ImageRunTime.prototype.scaleSmall = function (e) {
  2063. //缩小至0.8的缓动效果
  2064. SettingController_1.SettingController.Instance._Click();
  2065. this.clickId = true;
  2066. this.SmallTween = Tween.to(this, { scaleX: 0.8, scaleY: 0.8 }, this.scaleTime);
  2067. };
  2068. ImageRunTime.prototype.ClearRunTime = function () {
  2069. if (this.bigTween) {
  2070. this.bigTween.clear();
  2071. }
  2072. if (this.SmallTween) {
  2073. this.SmallTween.clear();
  2074. }
  2075. this.off(Laya.Event.MOUSE_DOWN, this, this.scaleSmall);
  2076. this.off(Laya.Event.MOUSE_UP, this, this.scaleBig);
  2077. this.off(Laya.Event.MOUSE_OUT, this, this.scaleBig);
  2078. this._mclickHandler = null;
  2079. };
  2080. return ImageRunTime;
  2081. }(Laya.Image));
  2082. exports.default = ImageRunTime;
  2083. },{"../../game_logic/SettingController":12}],24:[function(require,module,exports){
  2084. "use strict";
  2085. Object.defineProperty(exports, "__esModule", { value: true });
  2086. var layaMaxUI_1 = require("../ui/layaMaxUI");
  2087. var EventManager_1 = require("../game_module/EventManager");
  2088. var RoleController_1 = require("../game_logic/RoleController");
  2089. var Vector3 = Laya.Vector3;
  2090. var GameController_1 = require("../game_logic/GameController");
  2091. var game_ui = /** @class */ (function (_super) {
  2092. __extends(game_ui, _super);
  2093. function game_ui() {
  2094. var _this = _super.call(this) || this;
  2095. _this.isdown = false;
  2096. _this.isexceed = false;
  2097. _this.resizeHander();
  2098. EventManager_1.EventManager.on(Laya.Event.RESIZE, _this, _this.resizeHander);
  2099. return _this;
  2100. }
  2101. game_ui.prototype.resizeHander = function () {
  2102. this.height = Laya.stage.height;
  2103. };
  2104. game_ui.prototype.OnShow = function (data) {
  2105. this.UiEventHandler();
  2106. };
  2107. game_ui.prototype.UiEventHandler = function () {
  2108. this.on(Laya.Event.MOUSE_DOWN, this, this.OnClickDown);
  2109. this.on(Laya.Event.MOUSE_UP, this, this.OnClickUp);
  2110. this.on(Laya.Event.MOUSE_OUT, this, this.OnClickUp);
  2111. };
  2112. game_ui.prototype.OnClickDown = function (e) {
  2113. if (e.target instanceof Laya.UIComponent)
  2114. return;
  2115. if (!GameController_1.GameController.Instance.gameStart || GameController_1.GameController.Instance.gameover)
  2116. return;
  2117. this.isdown = true;
  2118. this.on(Laya.Event.MOUSE_MOVE, this, this.OnSlider);
  2119. this.curMousePos = new Vector3(Laya.MouseManager.instance.mouseX, Laya.MouseManager.instance.mouseY);
  2120. this.startPos = this.curMousePos.clone();
  2121. this.MouseD();
  2122. };
  2123. game_ui.prototype.OnClickUp = function () {
  2124. if (!this.isdown)
  2125. return;
  2126. if (!GameController_1.GameController.Instance.gameStart || GameController_1.GameController.Instance.gameover)
  2127. return;
  2128. this.isdown = false;
  2129. this.off(Laya.Event.MOUSE_MOVE, this, this.OnSlider);
  2130. this.endPos = this.curMousePos.clone();
  2131. this.MouseU();
  2132. };
  2133. game_ui.prototype.OnSlider = function () {
  2134. var MousePos = new Vector3(Laya.MouseManager.instance.mouseX, Laya.MouseManager.instance.mouseY);
  2135. var offestX = MousePos.x - this.curMousePos.x;
  2136. if (offestX > 0)
  2137. offestX = offestX < 5 ? offestX : 5;
  2138. if (offestX < 0)
  2139. offestX = offestX > -5 ? offestX : -5;
  2140. var rotateDir = new Vector3(0, -offestX * 0.01, 0);
  2141. RoleController_1.RoleController.Instance.RoleRotation(rotateDir);
  2142. this.curMousePos = new Vector3(Laya.MouseManager.instance.mouseX, Laya.MouseManager.instance.mouseY);
  2143. ;
  2144. };
  2145. game_ui.prototype.OnClose = function () {
  2146. EventManager_1.EventManager.off(Laya.Event.RESIZE, this, this.resizeHander);
  2147. this.off(Laya.Event.MOUSE_DOWN, this, this.OnClickDown);
  2148. this.off(Laya.Event.MOUSE_UP, this, this.OnClickUp);
  2149. this.off(Laya.Event.MOUSE_OUT, this, this.OnClickUp);
  2150. };
  2151. game_ui.prototype.MouseD = function () {
  2152. var _this = this;
  2153. this.isexceed = false;
  2154. Laya.timer.once(500, this, function () {
  2155. _this.isexceed = true;
  2156. });
  2157. };
  2158. game_ui.prototype.MouseU = function () {
  2159. var dis = Vector3.distance(this.startPos, this.endPos);
  2160. if (dis > 30 || this.isexceed) {
  2161. return;
  2162. }
  2163. else {
  2164. GameController_1.GameController.Instance.Hit();
  2165. }
  2166. };
  2167. return game_ui;
  2168. }(layaMaxUI_1.ui.game_uiUI));
  2169. exports.game_ui = game_ui;
  2170. },{"../game_logic/GameController":5,"../game_logic/RoleController":11,"../game_module/EventManager":14,"../ui/layaMaxUI":26}],25:[function(require,module,exports){
  2171. "use strict";
  2172. Object.defineProperty(exports, "__esModule", { value: true });
  2173. var layaMaxUI_1 = require("../ui/layaMaxUI");
  2174. var EventManager_1 = require("../game_module/EventManager");
  2175. var ViewManager_1 = require("../game_logic/ViewManager");
  2176. var GameController_1 = require("../game_logic/GameController");
  2177. var main_ui = /** @class */ (function (_super) {
  2178. __extends(main_ui, _super);
  2179. function main_ui() {
  2180. var _this = _super.call(this) || this;
  2181. _this.resizeHander();
  2182. EventManager_1.EventManager.on(Laya.Event.RESIZE, _this, _this.resizeHander);
  2183. return _this;
  2184. }
  2185. main_ui.prototype.OnShow = function (data) {
  2186. this.ButtonClickHandle();
  2187. };
  2188. main_ui.prototype.resizeHander = function () {
  2189. this.height = Laya.stage.height;
  2190. };
  2191. main_ui.prototype.ButtonClickHandle = function () {
  2192. this.start_btn._mclickHandler = function () {
  2193. ViewManager_1.default.Instance.OpenView(ViewManager_1.ViewType.game_ui);
  2194. GameController_1.GameController.Instance.GameStart();
  2195. };
  2196. };
  2197. main_ui.prototype.OnClose = function () {
  2198. this.start_btn.ClearRunTime();
  2199. };
  2200. return main_ui;
  2201. }(layaMaxUI_1.ui.main_uiUI));
  2202. exports.main_ui = main_ui;
  2203. },{"../game_logic/GameController":5,"../game_logic/ViewManager":13,"../game_module/EventManager":14,"../ui/layaMaxUI":26}],26:[function(require,module,exports){
  2204. "use strict";
  2205. Object.defineProperty(exports, "__esModule", { value: true });
  2206. var Scene = Laya.Scene;
  2207. var REG = Laya.ClassUtils.regClass;
  2208. var ui;
  2209. (function (ui) {
  2210. var game_uiUI = /** @class */ (function (_super) {
  2211. __extends(game_uiUI, _super);
  2212. function game_uiUI() {
  2213. return _super.call(this) || this;
  2214. }
  2215. game_uiUI.prototype.createChildren = function () {
  2216. _super.prototype.createChildren.call(this);
  2217. this.createView(game_uiUI.uiView);
  2218. };
  2219. game_uiUI.uiView = { "type": "Scene", "props": { "zOrder": 1, "width": 720, "height": 1280 }, "compId": 2, "loadList": [], "loadList3D": [] };
  2220. return game_uiUI;
  2221. }(Scene));
  2222. ui.game_uiUI = game_uiUI;
  2223. REG("ui.game_uiUI", game_uiUI);
  2224. var main_uiUI = /** @class */ (function (_super) {
  2225. __extends(main_uiUI, _super);
  2226. function main_uiUI() {
  2227. return _super.call(this) || this;
  2228. }
  2229. main_uiUI.prototype.createChildren = function () {
  2230. _super.prototype.createChildren.call(this);
  2231. this.createView(main_uiUI.uiView);
  2232. };
  2233. 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": [] };
  2234. return main_uiUI;
  2235. }(Scene));
  2236. ui.main_uiUI = main_uiUI;
  2237. REG("ui.main_uiUI", main_uiUI);
  2238. })(ui = exports.ui || (exports.ui = {}));
  2239. },{}]},{},[2])
  2240. //# 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==