Commit 8ce5970251b8bdc283500ff45695e1a85afb1b86

Authored by 杨桓桓
1 parent bdb20631
Exists in web and in 1 other branch 2.0

add 2.0demo

puchi_laya/.DS_Store
No preview for this file type
puchi_laya/.laya/web.json
@@ -52,5 +52,5 @@ @@ -52,5 +52,5 @@
52 "compile": true, 52 "compile": true,
53 "onlyIndexJS": true, 53 "onlyIndexJS": true,
54 "projectType": "ts", 54 "projectType": "ts",
55 - "pubTime": 1583397971438 55 + "pubTime": 1584351428475
56 } 56 }
57 \ No newline at end of file 57 \ No newline at end of file
puchi_laya/README.md
@@ -9,8 +9,11 @@ https://puchi-android-res.oss-cn-beijing.aliyuncs.com/puchigames_laya/laya_andro @@ -9,8 +9,11 @@ https://puchi-android-res.oss-cn-beijing.aliyuncs.com/puchigames_laya/laya_andro
9 1.0.0 包含现在SDK的所有功能,基础版本 9 1.0.0 包含现在SDK的所有功能,基础版本
10 10
11 ######### 11 #########
  12 +https://testpage-gamesdk.d3games.com/pcSdkLayaDemo/index.html
12 web 重构后web版本的开发版本 13 web 重构后web版本的开发版本
13 14
14 - web_1.0.0 web版本的第一版本demo 15 + web_1.0.0 web版本的第一版本demo
  16 +
  17 + 2.0 web版本的2.0版本demo
15 18
16 19
17 \ No newline at end of file 20 \ No newline at end of file
puchi_laya/bin/TestScene.json
1 -{"type":"Scene","props":{"width":750,"runtime":"TestScene.ts","height":1624},"compId":1,"child":[{"type":"Sprite","props":{"y":0,"x":0,"texture":"local/bg.png","name":"bg"},"compId":24},{"type":"View","props":{"width":750,"presetID":1,"height":1334,"centerY":0,"centerX":0,"y":0,"x":0,"isPresetRoot":true},"compId":70,"child":[{"type":"Box","props":{"presetID":2,"y":37,"x":0,"width":150,"height":60},"compId":4,"child":[{"type":"Sprite","props":{"presetID":3,"y":0,"x":73,"var":"btnInvite","texture":"common/btnInvite.png","pivotY":0.5,"pivotX":50},"compId":5,"child":[{"type":"Script","props":{"presetID":29,"runtime":"uitl/ScaleButtonScript.ts"},"compId":76}]},{"type":"Button","props":{"presetID":4,"y":49,"x":180,"var":"btnServer","stateNum":1,"skin":"common/btn_serve(1).png","anchorY":0.5,"anchorX":0.5},"compId":7,"child":[{"type":"Script","props":{"presetID":30,"runtime":"uitl/ScaleButtonScript.ts"},"compId":77}]},{"type":"Button","props":{"presetID":5,"y":49,"x":331,"var":"btnVibrate","stateNum":1,"skin":"common/btn_vibrate_on.png","anchorY":0.5,"anchorX":0.5},"compId":8,"child":[{"type":"Script","props":{"presetID":31,"runtime":"uitl/ScaleButtonScript.ts"},"compId":78}]},{"type":"Button","props":{"presetID":6,"y":49,"x":465,"var":"btn_shake","stateNum":1,"skin":"common/btn_yao.png","anchorY":0.5,"anchorX":0.5},"compId":15,"child":[{"type":"Script","props":{"presetID":32,"runtime":"uitl/ScaleButtonScript.ts"},"compId":79}]}]},{"type":"Box","props":{"presetID":7,"y":176,"x":48,"name":"coin"},"compId":9,"child":[{"type":"Image","props":{"presetID":8,"skin":"common/img_coin_bg.png"},"compId":11},{"type":"Sprite","props":{"presetID":9,"y":-6,"x":-24,"texture":"common/icon_coin.png"},"compId":12},{"type":"Label","props":{"presetID":10,"y":12,"x":85.04541015625,"text":"0","fontSize":34,"color":"#171515"},"compId":13},{"type":"Button","props":{"presetID":11,"y":0,"x":156,"var":"btnDrawal","stateNum":1,"skin":"common/btn_drawal.png"},"compId":14},{"type":"Script","props":{"presetID":23,"tiplab":"@node:30","coinlab":"@node:13","runtime":"RedDrawal.ts"},"compId":72},{"type":"Label","props":{"presetID":24,"y":79,"x":85.04541015625,"text":"0","fontSize":34,"color":"#9c7b7b"},"compId":73}]},{"type":"Box","props":{"presetID":19,"y":261,"x":242},"compId":25,"child":[{"type":"Button","props":{"presetID":13,"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5},"compId":16,"child":[{"type":"Script","props":{"presetID":26,"runtime":"uitl/ScaleButtonScript.ts"},"compId":75}]},{"type":"Button","props":{"presetID":14,"y":87,"x":282,"width":240,"var":"btnShowBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5},"compId":18,"child":[{"type":"Script","props":{"presetID":27,"runtime":"uitl/ScaleButtonScript.ts"},"compId":80}]},{"type":"Button","props":{"presetID":15,"y":189,"x":-21,"width":240,"var":"btnShowFullAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5},"compId":20,"child":[{"type":"Script","props":{"presetID":28,"runtime":"uitl/ScaleButtonScript.ts"},"compId":81}]},{"type":"Button","props":{"presetID":16,"y":189,"x":282,"width":240,"var":"btnShowNativeAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5},"compId":21,"child":[{"type":"Script","props":{"presetID":33,"runtime":"uitl/ScaleButtonScript.ts"},"compId":82}]},{"type":"Button","props":{"presetID":17,"width":240,"var":"btnShowInterAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示插屏广告","centerY":124,"centerX":-256,"anchorY":0.5,"anchorX":0.5},"compId":22,"child":[{"type":"Script","props":{"presetID":34,"runtime":"uitl/ScaleButtonScript.ts"},"compId":83}]},{"type":"Button","props":{"presetID":22,"width":240,"var":"btnRewardAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示激励广告","centerY":124,"centerX":17,"anchorY":0.5,"anchorX":0.5},"compId":71,"child":[{"type":"Script","props":{"presetID":35,"runtime":"uitl/ScaleButtonScript.ts"},"compId":84}]},{"type":"Button","props":{"presetID":25,"y":-59,"x":219,"width":240,"var":"btnRedpacket","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5},"compId":74,"child":[{"type":"Script","props":{"presetID":36,"runtime":"uitl/ScaleButtonScript.ts"},"compId":85}]}]},{"type":"View","props":{"presetID":18,"y":773,"x":75,"width":600,"var":"NativeAD","height":300},"compId":23,"child":[{"type":"Script","props":{"presetID":21,"runtime":"sdk/NativeAd.ts"},"compId":27}]}]}],"loadList":["local/bg.png","prefab/View.prefab"],"loadList3D":[]}  
2 \ No newline at end of file 1 \ No newline at end of file
  2 +{"type":"Scene","props":{"width":750,"runtime":"TestScene.ts","height":1624},"compId":1,"child":[{"type":"Sprite","props":{"y":0,"x":0,"texture":"local/bg.png","name":"bg"},"compId":24},{"type":"View","props":{"presetID":1,"y":0,"x":0,"width":750,"isPresetRoot":true,"height":1334,"centerY":0,"centerX":0},"compId":86,"child":[{"type":"Box","props":{"presetID":2,"y":37,"x":0,"width":150,"height":60},"compId":4,"child":[{"type":"Sprite","props":{"presetID":3,"y":0,"x":73,"var":"btnInvite","texture":"common/btnInvite.png","pivotY":0.5,"pivotX":50},"compId":5,"child":[{"type":"Script","props":{"presetID":29,"runtime":"uitl/ScaleButtonScript.ts"},"compId":35}]},{"type":"Button","props":{"presetID":4,"y":49,"x":180,"var":"btnServer","stateNum":1,"skin":"common/btn_serve(1).png","anchorY":0.5,"anchorX":0.5},"compId":7,"child":[{"type":"Script","props":{"presetID":30,"runtime":"uitl/ScaleButtonScript.ts"},"compId":36}]},{"type":"Button","props":{"presetID":5,"y":49,"x":331,"var":"btnVibrate","stateNum":1,"skin":"common/btn_vibrate_on.png","anchorY":0.5,"anchorX":0.5},"compId":8,"child":[{"type":"Script","props":{"presetID":31,"runtime":"uitl/ScaleButtonScript.ts"},"compId":37}]},{"type":"Button","props":{"presetID":6,"y":49,"x":465,"var":"btn_shake","stateNum":1,"skin":"common/btn_yao.png","anchorY":0.5,"anchorX":0.5},"compId":15,"child":[{"type":"Script","props":{"presetID":32,"runtime":"uitl/ScaleButtonScript.ts"},"compId":38}]}]},{"type":"Box","props":{"presetID":7,"y":176,"x":48,"name":"coin"},"compId":9,"child":[{"type":"Image","props":{"presetID":8,"skin":"common/img_coin_bg.png"},"compId":11},{"type":"Label","props":{"presetID":24,"y":79,"x":85.04541015625,"text":"0","fontSize":34,"color":"#9c7b7b"},"compId":30},{"type":"Sprite","props":{"presetID":9,"y":-6,"x":-24,"texture":"common/icon_coin.png"},"compId":12},{"type":"Label","props":{"presetID":10,"y":29,"x":88,"text":"0","fontSize":34,"color":"#171515","anchorY":0.5,"anchorX":0.5},"compId":13},{"type":"Button","props":{"presetID":11,"y":0,"x":156,"var":"btnDrawal","stateNum":1,"skin":"common/btn_drawal.png"},"compId":14},{"type":"Script","props":{"presetID":23,"tiplab":"@node:30","coinlab":"@node:13","runtime":"RedDrawal.ts"},"compId":29}]},{"type":"Box","props":{"presetID":19,"y":250,"x":218},"compId":25,"child":[{"type":"Button","props":{"presetID":13,"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5},"compId":16,"child":[{"type":"Script","props":{"presetID":26,"runtime":"uitl/ScaleButtonScript.ts"},"compId":32}]},{"type":"Button","props":{"presetID":14,"y":87,"x":200,"width":200,"var":"btnShowBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5},"compId":18,"child":[{"type":"Script","props":{"presetID":27,"runtime":"uitl/ScaleButtonScript.ts"},"compId":33}]},{"type":"Button","props":{"presetID":15,"y":279,"x":313,"width":240,"var":"btnShowFullAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5},"compId":20,"child":[{"type":"Script","props":{"presetID":28,"runtime":"uitl/ScaleButtonScript.ts"},"compId":34}]},{"type":"Button","props":{"presetID":16,"y":189,"x":205,"width":200,"var":"btnShowNativeAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5},"compId":21,"child":[{"type":"Script","props":{"presetID":33,"runtime":"uitl/ScaleButtonScript.ts"},"compId":39}]},{"type":"Button","props":{"y":297,"x":-21,"presetID":17,"width":240,"var":"btnShowInterAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示插屏广告","centerY":105,"centerX":18,"anchorY":0.5,"anchorX":0.5},"compId":22,"child":[{"type":"Script","props":{"presetID":34,"runtime":"uitl/ScaleButtonScript.ts"},"compId":40}]},{"type":"Button","props":{"y":286,"x":282,"presetID":22,"width":240,"var":"btnRewardAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示激励广告","centerY":200,"centerX":23,"anchorY":0.5,"anchorX":0.5},"compId":28,"child":[{"type":"Script","props":{"presetID":35,"runtime":"uitl/ScaleButtonScript.ts"},"compId":41}]},{"type":"Button","props":{"presetID":25,"y":-43,"x":169,"width":180,"var":"btnRedpacket","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5},"compId":31,"child":[{"type":"Script","props":{"presetID":36,"runtime":"uitl/ScaleButtonScript.ts"},"compId":42}]},{"type":"Button","props":{"presetID":37,"y":189,"x":-21,"width":240,"var":"btnPreNative","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载信息流","anchorY":0.5,"anchorX":0.5},"compId":87,"child":[{"type":"Script","props":{"presetID":38,"runtime":"uitl/ScaleButtonScript.ts"},"compId":88}]},{"type":"Button","props":{"presetID":39,"y":279,"x":-21,"width":240,"var":"btnPreFull","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载全屏","anchorY":0.5,"anchorX":0.5},"compId":89,"child":[{"type":"Script","props":{"presetID":40,"runtime":"uitl/ScaleButtonScript.ts"},"compId":90}]},{"type":"Button","props":{"presetID":41,"y":375,"x":-21,"width":240,"var":"btnPreInsert","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载插屏","anchorY":0.5,"anchorX":0.5},"compId":91,"child":[{"type":"Script","props":{"presetID":42,"runtime":"uitl/ScaleButtonScript.ts"},"compId":92}]},{"type":"Button","props":{"presetID":43,"y":470,"x":-21,"width":240,"var":"btnPreVideo","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载激励","anchorY":0.5,"anchorX":0.5},"compId":93,"child":[{"type":"Script","props":{"presetID":44,"runtime":"uitl/ScaleButtonScript.ts"},"compId":94}]},{"type":"Button","props":{"presetID":45,"y":189,"x":405,"width":200,"var":"btnCloseNative","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"labelSize":30,"label":"关闭信息流","anchorY":0.5,"anchorX":0.5},"compId":95,"child":[{"type":"Script","props":{"presetID":46,"runtime":"uitl/ScaleButtonScript.ts"},"compId":96}]},{"type":"Button","props":{"presetID":47,"y":87,"x":402,"width":200,"var":"btnCloseBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"labelSize":30,"label":"关闭banner","anchorY":0.5,"anchorX":0.5},"compId":97,"child":[{"type":"Script","props":{"presetID":48,"runtime":"uitl/ScaleButtonScript.ts"},"compId":98}]},{"type":"Button","props":{"presetID":49,"y":-43,"x":366,"width":200,"var":"btnMinWithDrawal","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"最低提档","anchorY":0.5,"anchorX":0.5},"compId":99,"child":[{"type":"Script","props":{"presetID":50,"runtime":"uitl/ScaleButtonScript.ts"},"compId":100},{"type":"Label","props":{"presetID":51,"y":-22,"x":36,"width":22,"var":"minWithDrawalLab","text":"0","rotation":-4,"pivotY":11,"pivotX":11,"height":22,"fontSize":20,"color":"#eedbda"},"compId":101}]}]},{"type":"View","props":{"presetID":18,"y":773,"x":75,"width":600,"var":"NativeAD","height":300},"compId":23,"child":[{"type":"Script","props":{"presetID":21,"runtime":"sdk/NativeAd.ts"},"compId":27}]}]}],"loadList":["local/bg.png","prefab/View.prefab"],"loadList3D":[]}
3 \ No newline at end of file 3 \ No newline at end of file
puchi_laya/bin/js/bundle.js
@@ -46,14 +46,14 @@ var GameConfig = /** @class */ (function () { @@ -46,14 +46,14 @@ var GameConfig = /** @class */ (function () {
46 exports.default = GameConfig; 46 exports.default = GameConfig;
47 GameConfig.init(); 47 GameConfig.init();
48 48
49 -},{"./RedDrawal":3,"./TestScene":4,"./sdk/NativeAd":12,"./uitl/ScaleButtonScript":26}],2:[function(require,module,exports){ 49 +},{"./RedDrawal":3,"./TestScene":4,"./sdk/NativeAd":8,"./uitl/ScaleButtonScript":20}],2:[function(require,module,exports){
50 "use strict"; 50 "use strict";
51 Object.defineProperty(exports, "__esModule", { value: true }); 51 Object.defineProperty(exports, "__esModule", { value: true });
52 var GameConfig_1 = require("./GameConfig"); 52 var GameConfig_1 = require("./GameConfig");
53 var AdManager_1 = require("./sdk/AdManager"); 53 var AdManager_1 = require("./sdk/AdManager");
54 -var AppSdk_1 = require("./sdk/AppSdk");  
55 -var RedpacketModel_1 = require("./sdk/model/RedpacketModel");  
56 var ShakeModel_1 = require("./sdk/model/ShakeModel"); 54 var ShakeModel_1 = require("./sdk/model/ShakeModel");
  55 +var PcSdk_1 = require("./sdk/PcSdk");
  56 +var RedpacketModel_1 = require("./sdk/model/RedpacketModel");
57 var Main = /** @class */ (function () { 57 var Main = /** @class */ (function () {
58 function Main() { 58 function Main() {
59 //根据IDE设置初始化引擎 59 //根据IDE设置初始化引擎
@@ -96,20 +96,21 @@ var Main = /** @class */ (function () { @@ -96,20 +96,21 @@ var Main = /** @class */ (function () {
96 switch (_a.label) { 96 switch (_a.label) {
97 case 0: 97 case 0:
98 /**隐藏启动屏 */ 98 /**隐藏启动屏 */
99 - AppSdk_1.AppSdk.I.hideSplash(); 99 + PcSdk_1.default.I.hideSplash();
100 /**初始化adk 获取app配置信息 */ 100 /**初始化adk 获取app配置信息 */
101 - AppSdk_1.AppSdk.I.init(); 101 + PcSdk_1.default.I.init();
102 /**预加载视频 */ 102 /**预加载视频 */
103 AdManager_1.default.I.init(); 103 AdManager_1.default.I.init();
104 - /**获取红包配置 初始化数据 */  
105 - return [4 /*yield*/, RedpacketModel_1.default.I.init()]; 104 + /**获取红包配置 摇一摇 等静态数据 */
  105 + return [4 /*yield*/, PcSdk_1.default.I.initGameConfig()];
106 case 1: 106 case 1:
107 - /**获取红包配置 初始化数据 */ 107 + /**获取红包配置 摇一摇 等静态数据 */
108 _a.sent(); 108 _a.sent();
109 - /**初始化摇一摇的数据 */  
110 - return [4 /*yield*/, ShakeModel_1.default.I.init()]; 109 + return [4 /*yield*/, RedpacketModel_1.default.I.init()];
111 case 2: 110 case 2:
112 - /**初始化摇一摇的数据 */ 111 + _a.sent();
  112 + return [4 /*yield*/, ShakeModel_1.default.I.init()];
  113 + case 3:
113 _a.sent(); 114 _a.sent();
114 return [2 /*return*/]; 115 return [2 /*return*/];
115 } 116 }
@@ -121,12 +122,12 @@ var Main = /** @class */ (function () { @@ -121,12 +122,12 @@ var Main = /** @class */ (function () {
121 //激活启动类 122 //激活启动类
122 new Main(); 123 new Main();
123 124
124 -},{"./GameConfig":1,"./sdk/AdManager":7,"./sdk/AppSdk":9,"./sdk/model/RedpacketModel":16,"./sdk/model/ShakeModel":17}],3:[function(require,module,exports){ 125 +},{"./GameConfig":1,"./sdk/AdManager":7,"./sdk/PcSdk":9,"./sdk/model/RedpacketModel":13,"./sdk/model/ShakeModel":14}],3:[function(require,module,exports){
125 "use strict"; 126 "use strict";
126 Object.defineProperty(exports, "__esModule", { value: true }); 127 Object.defineProperty(exports, "__esModule", { value: true });
127 -var RedpacketModel_1 = require("./sdk/model/RedpacketModel");  
128 var EventCenter_1 = require("./event/EventCenter"); 128 var EventCenter_1 = require("./event/EventCenter");
129 var EventEnum_1 = require("./event/EventEnum"); 129 var EventEnum_1 = require("./event/EventEnum");
  130 +var PcSdk_1 = require("./sdk/PcSdk");
130 /** 131 /**
131 * 主界面 金币金额 132 * 主界面 金币金额
132 */ 133 */
@@ -154,14 +155,13 @@ var RedDrawal = /** @class */ (function (_super) { @@ -154,14 +155,13 @@ var RedDrawal = /** @class */ (function (_super) {
154 var coin, str, nextDrawal, leftCoin; 155 var coin, str, nextDrawal, leftCoin;
155 return __generator(this, function (_a) { 156 return __generator(this, function (_a) {
156 switch (_a.label) { 157 switch (_a.label) {
157 - case 0: return [4 /*yield*/, RedpacketModel_1.default.I.getTotalCoin()]; 158 + case 0: return [4 /*yield*/, PcSdk_1.default.I.myCoin()];
158 case 1: 159 case 1:
159 coin = _a.sent(); 160 coin = _a.sent();
160 - // let coin = 1000  
161 this.totalCoin = coin; 161 this.totalCoin = coin;
162 this.coinlab.text = '' + coin; 162 this.coinlab.text = '' + coin;
163 str = '可提现'; 163 str = '可提现';
164 - return [4 /*yield*/, RedpacketModel_1.default.I.minWithDrawal()]; 164 + return [4 /*yield*/, PcSdk_1.default.I.minWithDrawal()];
165 case 2: 165 case 2:
166 nextDrawal = _a.sent(); 166 nextDrawal = _a.sent();
167 if (this.totalCoin > 0) { 167 if (this.totalCoin > 0) {
@@ -180,26 +180,33 @@ var RedDrawal = /** @class */ (function (_super) { @@ -180,26 +180,33 @@ var RedDrawal = /** @class */ (function (_super) {
180 }(Laya.Script)); 180 }(Laya.Script));
181 exports.default = RedDrawal; 181 exports.default = RedDrawal;
182 182
183 -},{"./event/EventCenter":5,"./event/EventEnum":6,"./sdk/model/RedpacketModel":16}],4:[function(require,module,exports){ 183 +},{"./event/EventCenter":5,"./event/EventEnum":6,"./sdk/PcSdk":9}],4:[function(require,module,exports){
184 "use strict"; 184 "use strict";
185 Object.defineProperty(exports, "__esModule", { value: true }); 185 Object.defineProperty(exports, "__esModule", { value: true });
186 var layaMaxUI_1 = require("./ui/layaMaxUI"); 186 var layaMaxUI_1 = require("./ui/layaMaxUI");
187 var AdManager_1 = require("./sdk/AdManager"); 187 var AdManager_1 = require("./sdk/AdManager");
188 -var AppSdk_1 = require("./sdk/AppSdk");  
189 var ShakeModel_1 = require("./sdk/model/ShakeModel"); 188 var ShakeModel_1 = require("./sdk/model/ShakeModel");
190 var RedpacketModel_1 = require("./sdk/model/RedpacketModel"); 189 var RedpacketModel_1 = require("./sdk/model/RedpacketModel");
  190 +var PcSdk_1 = require("./sdk/PcSdk");
  191 +var NativeAd_1 = require("./sdk/NativeAd");
191 var TestScene = /** @class */ (function (_super) { 192 var TestScene = /** @class */ (function (_super) {
192 __extends(TestScene, _super); 193 __extends(TestScene, _super);
193 function TestScene() { 194 function TestScene() {
194 var _this = _super.call(this) || this; 195 var _this = _super.call(this) || this;
  196 + _this.isLongVibrate = false;
195 //关闭多点触控,否则就无敌了 197 //关闭多点触控,否则就无敌了
196 Laya.MouseManager.multiTouchEnabled = false; 198 Laya.MouseManager.multiTouchEnabled = false;
197 console.log('---------------TestScene-------'); 199 console.log('---------------TestScene-------');
198 - _this.NativeAD.visible = false;  
199 return _this; 200 return _this;
  201 + // this.NativeAD.visible = false;
200 } 202 }
201 TestScene.prototype.onEnable = function () { 203 TestScene.prototype.onEnable = function () {
  204 + var _this = this;
202 this.btnServer.on(Laya.Event.CLICK, this, this.openServer); 205 this.btnServer.on(Laya.Event.CLICK, this, this.openServer);
  206 + this.btnVibrate.on(Laya.Event.CLICK, this, function () {
  207 + PcSdk_1.default.I.vibrate(_this.isLongVibrate ? 0 : 1);
  208 + _this.isLongVibrate = !_this.isLongVibrate;
  209 + });
203 this.btnDrawal.on(Laya.Event.CLICK, this, this.openPersonal); 210 this.btnDrawal.on(Laya.Event.CLICK, this, this.openPersonal);
204 this.btnInvite.on(Laya.Event.CLICK, this, this.invitation); 211 this.btnInvite.on(Laya.Event.CLICK, this, this.invitation);
205 this.btn_shake.on(Laya.Event.CLICK, this, this.touchShake); 212 this.btn_shake.on(Laya.Event.CLICK, this, this.touchShake);
@@ -210,35 +217,51 @@ var TestScene = /** @class */ (function (_super) { @@ -210,35 +217,51 @@ var TestScene = /** @class */ (function (_super) {
210 this.btnShowInterAd.on(Laya.Event.CLICK, this, this.showInterAd); 217 this.btnShowInterAd.on(Laya.Event.CLICK, this, this.showInterAd);
211 this.btnRewardAd.on(Laya.Event.CLICK, this, this.showRewardAd); 218 this.btnRewardAd.on(Laya.Event.CLICK, this, this.showRewardAd);
212 this.btnRedpacket.on(Laya.Event.CLICK, this, this.openRedpacket); 219 this.btnRedpacket.on(Laya.Event.CLICK, this, this.openRedpacket);
  220 + this.btnPreVideo.on(Laya.Event.CLICK, this, this.preloadRewardAd);
  221 + this.btnPreFull.on(Laya.Event.CLICK, this, this.preloadFull);
  222 + this.btnPreInsert.on(Laya.Event.CLICK, this, this.preloadInterAd);
  223 + this.btnPreNative.on(Laya.Event.CLICK, this, this.preloadNativeAd);
  224 + this.btnCloseBanner.on(Laya.Event.CLICK, this, this.closeAdBanner);
  225 + this.btnCloseNative.on(Laya.Event.CLICK, this, this.closeAdverDialog);
  226 + this.btnMinWithDrawal.on(Laya.Event.CLICK, this, this.minWithDrawal);
213 }; 227 };
214 /**预加载广告 */ 228 /**预加载广告 */
215 TestScene.prototype.preloadAD = function () { 229 TestScene.prototype.preloadAD = function () {
216 return __awaiter(this, void 0, void 0, function () { 230 return __awaiter(this, void 0, void 0, function () {
217 return __generator(this, function (_a) { 231 return __generator(this, function (_a) {
218 - console.log('---------------preloadAD-------');  
219 - // await AdManager.I.init();  
220 - MyBridge.testReturn(function () {  
221 - var array = [];  
222 - for (var _i = 0; _i < arguments.length; _i++) {  
223 - array[_i] = arguments[_i];  
224 - }  
225 - console.log("-------web--------onClick----->>cocos JS-------MyBridge.testReturn------" + JSON.stringify(array));  
226 - });  
227 - return [2 /*return*/]; 232 + switch (_a.label) {
  233 + case 0:
  234 + console.log('---------------preloadAD-------');
  235 + return [4 /*yield*/, AdManager_1.default.I.preloadBanner()];
  236 + case 1:
  237 + _a.sent();
  238 + return [2 /*return*/];
  239 + }
228 }); 240 });
229 }); 241 });
230 }; 242 };
  243 + TestScene.prototype.preloadRewardAd = function () {
  244 + AdManager_1.default.I.preloadRewardAd();
  245 + };
  246 + TestScene.prototype.preloadFull = function () {
  247 + AdManager_1.default.I.preloadFullAd();
  248 + };
  249 + TestScene.prototype.preloadInterAd = function () {
  250 + AdManager_1.default.I.preloadInterAd();
  251 + };
  252 + TestScene.prototype.preloadNativeAd = function () {
  253 + this.NativeAD.getComponent(NativeAd_1.default).initNativeAd(1);
  254 + };
  255 + TestScene.prototype.closeAdverDialog = function () {
  256 + AdManager_1.default.I.closeAdverDialog();
  257 + };
  258 + TestScene.prototype.closeAdBanner = function () {
  259 + AdManager_1.default.I.closeAdBanner();
  260 + };
231 /**显示全屏广告 */ 261 /**显示全屏广告 */
232 TestScene.prototype.showFullAd = function () { 262 TestScene.prototype.showFullAd = function () {
233 console.log('---------------showFullAd-------'); 263 console.log('---------------showFullAd-------');
234 - // AdManager.I.showFullAd();  
235 - var ret = MyBridge.mapToString({  
236 - data: {  
237 - "count": 2, "title": [{ "name": "nnn", "value": "nnnvalue", "default_show": 1 },  
238 - { "name": "mmm", "value": "mmmvalue\"aasdasd" }]  
239 - }  
240 - });  
241 - console.log("-------web--------onClick----->>cocos JS-------MyBridge.mapToString------" + JSON.stringify(ret)); 264 + AdManager_1.default.I.showFullAd();
242 }; 265 };
243 /**显示banner */ 266 /**显示banner */
244 TestScene.prototype.showBanner = function () { 267 TestScene.prototype.showBanner = function () {
@@ -247,8 +270,7 @@ var TestScene = /** @class */ (function (_super) { @@ -247,8 +270,7 @@ var TestScene = /** @class */ (function (_super) {
247 }; 270 };
248 /**信息流广告 */ 271 /**信息流广告 */
249 TestScene.prototype.showNativeAd = function () { 272 TestScene.prototype.showNativeAd = function () {
250 - console.log('---------------showNativeAd-------');  
251 - this.NativeAD.visible = true; 273 + this.NativeAD.getComponent(NativeAd_1.default).initNativeAd();
252 }; 274 };
253 /**插屏广告 */ 275 /**插屏广告 */
254 TestScene.prototype.showInterAd = function () { 276 TestScene.prototype.showInterAd = function () {
@@ -273,22 +295,38 @@ var TestScene = /** @class */ (function (_super) { @@ -273,22 +295,38 @@ var TestScene = /** @class */ (function (_super) {
273 /**意见反馈 */ 295 /**意见反馈 */
274 TestScene.prototype.openServer = function () { 296 TestScene.prototype.openServer = function () {
275 console.log('---------------openServer-------'); 297 console.log('---------------openServer-------');
276 - AppSdk_1.AppSdk.I.feedback(); 298 + PcSdk_1.default.I.feedback();
277 }; 299 };
278 TestScene.prototype.openRedpacket = function () { 300 TestScene.prototype.openRedpacket = function () {
279 - RedpacketModel_1.default.I.checkRedpacket();  
280 - console.log('红包获取结果:curRedpacket' + RedpacketModel_1.default.I.curRedpacket);  
281 - // console.log('红包获取结果:' + JSON.stringify(data))  
282 - // ViewManager.I.openPopwin(RedpacketPopwin, 0); 301 + return __awaiter(this, void 0, void 0, function () {
  302 + return __generator(this, function (_a) {
  303 + RedpacketModel_1.default.I.checkRedpacket();
  304 + return [2 /*return*/];
  305 + });
  306 + });
  307 + };
  308 + TestScene.prototype.minWithDrawal = function () {
  309 + return __awaiter(this, void 0, void 0, function () {
  310 + var money;
  311 + return __generator(this, function (_a) {
  312 + switch (_a.label) {
  313 + case 0: return [4 /*yield*/, PcSdk_1.default.I.minWithDrawal()];
  314 + case 1:
  315 + money = _a.sent();
  316 + this.minWithDrawalLab.text = '最低提现:' + money;
  317 + return [2 /*return*/];
  318 + }
  319 + });
  320 + });
283 }; 321 };
284 /**打开个人中心 */ 322 /**打开个人中心 */
285 TestScene.prototype.openPersonal = function () { 323 TestScene.prototype.openPersonal = function () {
286 console.log('---------------openServer-------'); 324 console.log('---------------openServer-------');
287 - AppSdk_1.AppSdk.I.personal(0); 325 + PcSdk_1.default.I.personal(0);
288 }; 326 };
289 /**邀请好友 */ 327 /**邀请好友 */
290 TestScene.prototype.invitation = function () { 328 TestScene.prototype.invitation = function () {
291 - AppSdk_1.AppSdk.I.invitation(); 329 + PcSdk_1.default.I.invitation();
292 }; 330 };
293 /** 331 /**
294 * 1 金币 332 * 1 金币
@@ -298,10 +336,7 @@ var TestScene = /** @class */ (function (_super) { @@ -298,10 +336,7 @@ var TestScene = /** @class */ (function (_super) {
298 */ 336 */
299 TestScene.prototype.touchShake = function () { 337 TestScene.prototype.touchShake = function () {
300 console.log('---------------touchShake-------'); 338 console.log('---------------touchShake-------');
301 - // this.skin.btnShakeAni.play(0);  
302 - AppSdk_1.AppSdk.I.vibrate();  
303 - // ViewManager.I.showModal(HintModal, ' 今⽇次数已⽤完,请明⽇再来');  
304 - // this.skin.handAni.stop(); 339 + PcSdk_1.default.I.vibrate();
305 /** 340 /**
306 * 1.回去星星 道具 341 * 1.回去星星 道具
307 * 2.红包 直接获得⾦币;或者直接弹激励视频后,获得⾦币 342 * 2.红包 直接获得⾦币;或者直接弹激励视频后,获得⾦币
@@ -385,7 +420,7 @@ var TestScene = /** @class */ (function (_super) { @@ -385,7 +420,7 @@ var TestScene = /** @class */ (function (_super) {
385 }(layaMaxUI_1.ui.TestSceneUI)); 420 }(layaMaxUI_1.ui.TestSceneUI));
386 exports.default = TestScene; 421 exports.default = TestScene;
387 422
388 -},{"./sdk/AdManager":7,"./sdk/AppSdk":9,"./sdk/model/RedpacketModel":16,"./sdk/model/ShakeModel":17,"./ui/layaMaxUI":21}],5:[function(require,module,exports){ 423 +},{"./sdk/AdManager":7,"./sdk/NativeAd":8,"./sdk/PcSdk":9,"./sdk/model/RedpacketModel":13,"./sdk/model/ShakeModel":14,"./ui/layaMaxUI":15}],5:[function(require,module,exports){
389 "use strict"; 424 "use strict";
390 Object.defineProperty(exports, "__esModule", { value: true }); 425 Object.defineProperty(exports, "__esModule", { value: true });
391 /* 426 /*
@@ -441,9 +476,27 @@ var AdManager = /** @class */ (function () { @@ -441,9 +476,27 @@ var AdManager = /** @class */ (function () {
441 AdManager.prototype.init = function () { 476 AdManager.prototype.init = function () {
442 this.preloadRewardAd(); 477 this.preloadRewardAd();
443 }; 478 };
  479 + AdManager.prototype.preloadBanner = function () {
  480 + TTAdSdk_1.default.I.loadBannerExpressAd(1);
  481 + };
444 AdManager.prototype.preloadRewardAd = function () { 482 AdManager.prototype.preloadRewardAd = function () {
445 TTAdSdk_1.default.I.showRewardVideoAd(1); 483 TTAdSdk_1.default.I.showRewardVideoAd(1);
446 }; 484 };
  485 + AdManager.prototype.preloadFullAd = function () {
  486 + TTAdSdk_1.default.I.loadFullScreenVideoAd(1);
  487 + };
  488 + AdManager.prototype.preloadInterAd = function () {
  489 + // TTAdSdk.I.showInteractionExpressAd(1);
  490 + };
  491 + AdManager.prototype.preloadNativeAd = function () {
  492 + TTAdSdk_1.default.I.loadFullScreenVideoAd(1);
  493 + };
  494 + AdManager.prototype.closeAdverDialog = function () {
  495 + TTAdSdk_1.default.I.closeAdverDialog();
  496 + };
  497 + AdManager.prototype.closeAdBanner = function () {
  498 + TTAdSdk_1.default.I.closeAdBanner();
  499 + };
447 AdManager.prototype.showRewardAd = function () { 500 AdManager.prototype.showRewardAd = function () {
448 return __awaiter(this, void 0, void 0, function () { 501 return __awaiter(this, void 0, void 0, function () {
449 var ret, e_1; 502 var ret, e_1;
@@ -466,12 +519,6 @@ var AdManager = /** @class */ (function () { @@ -466,12 +519,6 @@ var AdManager = /** @class */ (function () {
466 }); 519 });
467 }); 520 });
468 }; 521 };
469 - AdManager.prototype.preloadFullAd = function () {  
470 - TTAdSdk_1.default.I.loadFullScreenVideoAd(1);  
471 - };  
472 - AdManager.prototype.preloadInterAd = function () {  
473 - TTAdSdk_1.default.I.loadFullScreenVideoAd(1);  
474 - };  
475 AdManager.prototype.showFullAd = function () { 522 AdManager.prototype.showFullAd = function () {
476 return __awaiter(this, void 0, void 0, function () { 523 return __awaiter(this, void 0, void 0, function () {
477 var ret, e_2; 524 var ret, e_2;
@@ -520,14 +567,9 @@ var AdManager = /** @class */ (function () { @@ -520,14 +567,9 @@ var AdManager = /** @class */ (function () {
520 AdManager.prototype.showBanner = function () { 567 AdManager.prototype.showBanner = function () {
521 TTAdSdk_1.default.I.loadBannerExpressAd(); 568 TTAdSdk_1.default.I.loadBannerExpressAd();
522 }; 569 };
523 - AdManager.prototype.hideBanner = function () {  
524 - TTAdSdk_1.default.I.hideAd();  
525 - };  
526 - AdManager.prototype.showNativeAd = function (x, y, w, h) {  
527 - TTAdSdk_1.default.I.loadNativeExpressAd(x, y, w, h);  
528 - };  
529 - AdManager.prototype.hideNativeAd = function () {  
530 - TTAdSdk_1.default.I.hideAd(); 570 + AdManager.prototype.showNativeAd = function (x, y, w, h, preload) {
  571 + if (preload === void 0) { preload = 0; }
  572 + TTAdSdk_1.default.I.loadNativeExpressAd(x, y, w, h, preload);
531 }; 573 };
532 Object.defineProperty(AdManager, "I", { 574 Object.defineProperty(AdManager, "I", {
533 get: function () { 575 get: function () {
@@ -540,440 +582,356 @@ var AdManager = /** @class */ (function () { @@ -540,440 +582,356 @@ var AdManager = /** @class */ (function () {
540 }()); 582 }());
541 exports.default = AdManager; 583 exports.default = AdManager;
542 584
543 -},{"../uitl/ObjectInstance":24,"./TTAdSdk":13}],8:[function(require,module,exports){ 585 +},{"../uitl/ObjectInstance":18,"./TTAdSdk":10}],8:[function(require,module,exports){
544 "use strict"; 586 "use strict";
545 Object.defineProperty(exports, "__esModule", { value: true }); 587 Object.defineProperty(exports, "__esModule", { value: true });
546 -var BaseAppSdk_1 = require("./BaseAppSdk");  
547 -var AndroidAppSdk = /** @class */ (function (_super) {  
548 - __extends(AndroidAppSdk, _super);  
549 - function AndroidAppSdk() { 588 +var AdManager_1 = require("./AdManager");
  589 +var NativeAd = /** @class */ (function (_super) {
  590 + __extends(NativeAd, _super);
  591 + function NativeAd() {
550 return _super !== null && _super.apply(this, arguments) || this; 592 return _super !== null && _super.apply(this, arguments) || this;
551 } 593 }
552 - Object.defineProperty(AndroidAppSdk.prototype, "system", {  
553 - get: function () {  
554 - return 1;  
555 - },  
556 - enumerable: true,  
557 - configurable: true  
558 - });  
559 - AndroidAppSdk.prototype.callApp = function (cmd) {  
560 - var params = [];  
561 - for (var _i = 1; _i < arguments.length; _i++) {  
562 - params[_i - 1] = arguments[_i];  
563 - }  
564 - var _a;  
565 - this.bridge && (_a = this.bridge).call.apply(_a, [cmd].concat(params));  
566 - // this.bridge && alert(JSON.stringify(this.bridge)); 594 + NativeAd.prototype.initNativeAd = function (preload) {
  595 + if (preload === void 0) { preload = 0; }
  596 + var globalPoint = this.item.localToGlobal(Laya.Point.EMPTY, true);
  597 + AdManager_1.default.I.showNativeAd(globalPoint.x, globalPoint.y, this.item.width, this.item.height, preload);
567 }; 598 };
568 - AndroidAppSdk.prototype.callAppWithBack = function (callBack, cmd) {  
569 - var params = [];  
570 - for (var _i = 2; _i < arguments.length; _i++) {  
571 - params[_i - 2] = arguments[_i];  
572 - }  
573 - var _a;  
574 - this.bridge && (_a = this.bridge).callWithBack.apply(_a, [callBack, cmd].concat(params)); 599 + NativeAd.prototype.onEnable = function () {
  600 + this.initNativeAd();
  601 + };
  602 + NativeAd.prototype.onDisable = function () {
  603 + AdManager_1.default.I.closeAdverDialog();
575 }; 604 };
576 - Object.defineProperty(AndroidAppSdk.prototype, "bridge", { 605 + Object.defineProperty(NativeAd.prototype, "item", {
577 get: function () { 606 get: function () {
578 - return this._bridge || (this._bridge = this.createClass('com.puchi.sdkdemo.JSBridge')); 607 + return this.owner;
579 }, 608 },
580 enumerable: true, 609 enumerable: true,
581 configurable: true 610 configurable: true
582 }); 611 });
583 - return AndroidAppSdk;  
584 -}(BaseAppSdk_1.default));  
585 -exports.default = AndroidAppSdk; 612 + return NativeAd;
  613 +}(Laya.Script));
  614 +exports.default = NativeAd;
586 615
587 -},{"./BaseAppSdk":10}],9:[function(require,module,exports){ 616 +},{"./AdManager":7}],9:[function(require,module,exports){
588 "use strict"; 617 "use strict";
589 Object.defineProperty(exports, "__esModule", { value: true }); 618 Object.defineProperty(exports, "__esModule", { value: true });
590 -var IosAppSdk_1 = require("./IosAppSdk");  
591 -var AndroidAppSdk_1 = require("./AndroidAppSdk");  
592 -var BaseAppSdk_1 = require("./BaseAppSdk");  
593 -var AppSdk = /** @class */ (function () {  
594 - function AppSdk() { 619 +var ObjectInstance_1 = require("../uitl/ObjectInstance");
  620 +var EventCenter_1 = require("../event/EventCenter");
  621 +var EventEnum_1 = require("../event/EventEnum");
  622 +var PcSdk = /** @class */ (function () {
  623 + function PcSdk() {
595 } 624 }
596 - Object.defineProperty(AppSdk, "I", { 625 + PcSdk.prototype.init = function () {
  626 + this.getSystemInfo();
  627 + };
  628 + Object.defineProperty(PcSdk.prototype, "myBridge", {
597 get: function () { 629 get: function () {
598 - if (!this._instance) {  
599 - var conchConfig = window['conchConfig'];  
600 - var os = conchConfig && conchConfig.getOS();  
601 - switch (os) {  
602 - case "Conch-ios":  
603 - this._instance = new IosAppSdk_1.default;  
604 - break;  
605 - case "Conch-android":  
606 - this._instance = new AndroidAppSdk_1.default;  
607 - break;  
608 - default:  
609 - this._instance = new BaseAppSdk_1.default;  
610 - break;  
611 - }  
612 - window['AppSdk'] = this._instance; 630 + if (MyBridge) {
  631 + return MyBridge;
613 } 632 }
614 - return this._instance;  
615 }, 633 },
616 enumerable: true, 634 enumerable: true,
617 configurable: true 635 configurable: true
618 }); 636 });
619 - return AppSdk;  
620 -}());  
621 -exports.AppSdk = AppSdk;  
622 -  
623 -},{"./AndroidAppSdk":8,"./BaseAppSdk":10,"./IosAppSdk":11}],10:[function(require,module,exports){  
624 -"use strict";  
625 -Object.defineProperty(exports, "__esModule", { value: true });  
626 -var AddGoldData_1 = require("./sdkData/AddGoldData");  
627 -var MyCoinData_1 = require("./sdkData/MyCoinData");  
628 -var GoldConfigData_1 = require("./sdkData/GoldConfigData");  
629 -var BaseAppSdk = /** @class */ (function () {  
630 - function BaseAppSdk() {  
631 - this.netOnArr = [];  
632 - this.netOffArr = [];  
633 - }  
634 - BaseAppSdk.prototype.init = function () {  
635 - var conch = window['conch'];  
636 - if (conch) {  
637 - conch.setNetworkEvtFunction(this.networkEvtFunc.bind(this));  
638 - }  
639 - this.callApp('setAppCallback', 1, 'AppSdk.onShow()');  
640 - this.callApp('setAppCallback', 2, 'AppSdk.onHide()');  
641 - this.getSystemInfo(); 637 + /**获取基本版本信息以及手机的配置 */
  638 + PcSdk.prototype.getSystemInfo = function (key) {
  639 + if (key === void 0) { key = 0; }
  640 + var _a;
  641 + var ret = this.myBridge.getSystemInfo(key);
  642 + var _b = JSON.parse(ret), w = _b.w, h = _b.h, versionName = _b.versionName, channel = _b.channel, pangolin = _b.pangolin, adnet = _b.adnet, level = _b.level;
  643 + _a = [w, h, versionName, channel, pangolin, adnet, level], this._width = _a[0], this._height = _a[1], this._version = _a[2], this._channel = _a[3], this.pangolinId = _a[4], this.adnetId = _a[5], this._level = _a[6];
642 }; 644 };
643 - BaseAppSdk.prototype.getSystemInfo = function () {  
644 - var _this = this;  
645 - this.callAppWithBack(function (ret) {  
646 - console.log('---------------getSystemInfo-------' + JSON.stringify(ret));  
647 - var _a = JSON.parse(ret), w = _a.w, h = _a.h, versionName = _a.versionName, channel = _a.channel, pangolin = _a.pangolin, adnet = _a.adnet, level = _a.level;  
648 - _this._width = w;  
649 - _this._height = h;  
650 - _this._version = versionName;  
651 - _this._channel = channel;  
652 - _this.pangolinId = pangolin;  
653 - _this.adnetId = adnet;  
654 - _this._level = level;  
655 - }, 'getSystemInfo', 0);  
656 - };  
657 - BaseAppSdk.prototype.onShow = function () {  
658 - // EventCenter.emit(EventEnum.APP_SHOW);  
659 - };  
660 - BaseAppSdk.prototype.onHide = function () {  
661 - // EventCenter.emit(EventEnum.APP_HIDE);  
662 - };  
663 - BaseAppSdk.prototype.vibrate = function () {  
664 - this.callApp('openSystemFun', 0);  
665 - };  
666 - BaseAppSdk.prototype.hideSplash = function () {  
667 - this.callApp('hideSplash'); 645 + PcSdk.prototype.initGameConfig = function () {
  646 + this._gameConfig = this.getGameConfig();
  647 + };
  648 + /**
  649 + * 震动
  650 + * @param key 0 短震动 1 长震动
  651 + */
  652 + PcSdk.prototype.vibrate = function (key) {
  653 + if (key === void 0) { key = 0; }
  654 + this.myBridge.openSystemFun(key);
  655 + };
  656 + /**隐藏启动屏 */
  657 + PcSdk.prototype.hideSplash = function () {
  658 + this.myBridge.hideSplash();
668 }; 659 };
669 /**弹出提现 */ 660 /**弹出提现 */
670 - BaseAppSdk.prototype.withDrawal = function () {  
671 - this.callApp('withDrawal'); 661 + PcSdk.prototype.withDrawal = function () {
  662 + this.myBridge.withDrawal();
672 }; 663 };
673 /**意见反馈 */ 664 /**意见反馈 */
674 - BaseAppSdk.prototype.feedback = function () {  
675 - this.callApp('feedback'); 665 + PcSdk.prototype.feedback = function () {
  666 + this.myBridge.feedback();
676 }; 667 };
677 /** 668 /**
678 * key 默认0 ,签到 1 669 * key 默认0 ,签到 1
679 */ 670 */
680 - BaseAppSdk.prototype.personal = function (key) { 671 + PcSdk.prototype.personal = function (key) {
681 if (key === void 0) { key = 0; } 672 if (key === void 0) { key = 0; }
682 - this.callApp('personal', key); 673 + this.myBridge.personal(key);
683 }; 674 };
684 /**邀请好友*/ 675 /**邀请好友*/
685 - BaseAppSdk.prototype.invitation = function () {  
686 - this.callApp('invitation');  
687 - };  
688 - BaseAppSdk.prototype.currentShut = function (value) {  
689 - this.callApp('currentShut', value); 676 + PcSdk.prototype.invitation = function () {
  677 + this.myBridge.invitation();
690 }; 678 };
691 /** 679 /**
692 * 获取金币配表 680 * 获取金币配表
693 * @param key 1红包 2 摇一摇红包 681 * @param key 1红包 2 摇一摇红包
694 */ 682 */
695 - BaseAppSdk.prototype.getGameConfig = function (key) {  
696 - if (key === void 0) { key = 1; }  
697 - return __awaiter(this, void 0, void 0, function () {  
698 - var result;  
699 - return __generator(this, function (_a) {  
700 - switch (_a.label) {  
701 - case 0: return [4 /*yield*/, this.onCallBack('getGameConfig', key)];  
702 - case 1:  
703 - result = _a.sent();  
704 - GoldConfigData_1.GoldConfigData.I.initData(result);  
705 - return [2 /*return*/, result];  
706 - }  
707 - });  
708 - }); 683 + PcSdk.prototype.getGameConfig = function () {
  684 + var result = this.myBridge.getGameConfig();
  685 + // console.log('---------------getGameConfig-------' + JSON.stringify(result))
  686 + return JSON.parse(result);
709 }; 687 };
710 /** 688 /**
711 * 要求发放金币 689 * 要求发放金币
712 * @param key 1红包 690 * @param key 1红包
713 */ 691 */
714 - BaseAppSdk.prototype.addGold = function (key) {  
715 - if (key === void 0) { key = 1; } 692 + PcSdk.prototype.addGold = function (key) {
716 return __awaiter(this, void 0, void 0, function () { 693 return __awaiter(this, void 0, void 0, function () {
717 - var result; 694 + var _this = this;
718 return __generator(this, function (_a) { 695 return __generator(this, function (_a) {
719 - switch (_a.label) {  
720 - case 0: return [4 /*yield*/, this.onCallBack('addGold', key)];  
721 - case 1:  
722 - result = _a.sent();  
723 - AddGoldData_1.default.initData(result);  
724 - return [2 /*return*/, result];  
725 - } 696 + return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
  697 + return __generator(this, function (_a) {
  698 + switch (_a.label) {
  699 + case 0: return [4 /*yield*/, this.myBridge.addGold(key, function (res) {
  700 + res = JSON.parse(res);
  701 + var code = res.code, data = res.data, msg = res.msg;
  702 + if ('0' === code || !code) {
  703 + resolve(data);
  704 + }
  705 + else {
  706 + reject(msg);
  707 + }
  708 + })];
  709 + case 1:
  710 + _a.sent();
  711 + return [2 /*return*/];
  712 + }
  713 + });
  714 + }); })];
726 }); 715 });
727 }); 716 });
728 }; 717 };
729 - BaseAppSdk.prototype.myCoin = function () { 718 + /**获取总金币 */
  719 + PcSdk.prototype.myCoin = function () {
730 return __awaiter(this, void 0, void 0, function () { 720 return __awaiter(this, void 0, void 0, function () {
731 - var result; 721 + var _this = this;
732 return __generator(this, function (_a) { 722 return __generator(this, function (_a) {
733 - switch (_a.label) {  
734 - case 0: return [4 /*yield*/, this.onCallBack('myCoin')];  
735 - case 1:  
736 - result = _a.sent();  
737 - MyCoinData_1.default.initData(result);  
738 - return [2 /*return*/, result];  
739 - } 723 + return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
  724 + return __generator(this, function (_a) {
  725 + switch (_a.label) {
  726 + case 0: return [4 /*yield*/, this.myBridge.myCoin(function (res) {
  727 + res = JSON.parse(res);
  728 + var code = res.code, data = res.data, msg = res.msg;
  729 + if ('0' === code || !code) {
  730 + resolve(data['coin']);
  731 + }
  732 + else {
  733 + reject(msg);
  734 + }
  735 + })];
  736 + case 1:
  737 + _a.sent();
  738 + return [2 /*return*/];
  739 + }
  740 + });
  741 + }); })];
740 }); 742 });
741 }); 743 });
742 }; 744 };
743 /**获取当前提现的档位 */ 745 /**获取当前提现的档位 */
744 - BaseAppSdk.prototype.minWithDrawal = function () { 746 + PcSdk.prototype.minWithDrawal = function () {
745 return __awaiter(this, void 0, void 0, function () { 747 return __awaiter(this, void 0, void 0, function () {
746 - var result; 748 + var _this = this;
747 return __generator(this, function (_a) { 749 return __generator(this, function (_a) {
748 - switch (_a.label) {  
749 - case 0: return [4 /*yield*/, this.onCallBack('minWithDrawal')];  
750 - case 1:  
751 - result = _a.sent();  
752 - if (!Boolean(parseInt(result.code + ''))) {  
753 - return [2 /*return*/, parseInt(result.data['money']) * 100];  
754 - }  
755 - return [2 /*return*/, 0];  
756 - } 750 + return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
  751 + return __generator(this, function (_a) {
  752 + switch (_a.label) {
  753 + case 0: return [4 /*yield*/, this.myBridge.minWithDrawal(function (res) {
  754 + res = JSON.parse(res);
  755 + var code = res.code, data = res.data, msg = res.msg;
  756 + if ('0' === code || !code) {
  757 + resolve(data['money']);
  758 + }
  759 + else {
  760 + reject(msg);
  761 + }
  762 + })];
  763 + case 1:
  764 + _a.sent();
  765 + return [2 /*return*/];
  766 + }
  767 + });
  768 + }); })];
757 }); 769 });
758 }); 770 });
759 }; 771 };
760 - BaseAppSdk.prototype.onCallBack = function (cmd) { 772 + /**上报埋点 */
  773 + PcSdk.prototype.appDotLog = function (key, value) {
  774 + this.myBridge.appDotLog(key, value);
  775 + };
  776 + /**热云打点 */
  777 + PcSdk.prototype.appDotTracKing = function (key) {
  778 + this.myBridge.appDotTracKing(key);
  779 + };
  780 + PcSdk.prototype.setCallback = function (funName, pramas) {
761 var _this = this; 781 var _this = this;
762 - var params = [];  
763 - for (var _i = 1; _i < arguments.length; _i++) {  
764 - params[_i - 1] = arguments[_i];  
765 - }  
766 - return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {  
767 - return __generator(this, function (_a) {  
768 - switch (_a.label) {  
769 - case 0: return [4 /*yield*/, this.callAppWithBack.apply(this, [function (res) {  
770 - res = JSON.parse(res);  
771 - // res = { code: 1000 }  
772 - if (!res.code) {  
773 - resolve({ code: res.code, data: res.data });  
774 - }  
775 - else {  
776 - resolve({ code: res.code });  
777 - }  
778 - }, cmd].concat(params))];  
779 - case 1:  
780 - _a.sent();  
781 - return [2 /*return*/]; 782 + console.log('---------------setCallback---- this.myBridge---' + JSON.stringify(this.myBridge));
  783 + return new Promise(function (resolve, reject) {
  784 + _this.myBridge[funName](pramas, function (res) {
  785 + var _a = JSON.parse(res), code = _a.code, data = _a.data;
  786 + if ('0' === code) {
  787 + resolve(data);
  788 + }
  789 + else {
  790 + reject(0);
782 } 791 }
783 }); 792 });
784 - }); }); 793 + });
785 }; 794 };
786 - BaseAppSdk.prototype.callApp = function (cmd) {  
787 - var params = [];  
788 - for (var _i = 1; _i < arguments.length; _i++) {  
789 - params[_i - 1] = arguments[_i];  
790 - } 795 + PcSdk.prototype.closeAdverDialog = function () {
  796 + this.myBridge.closeAdverDialog();
791 }; 797 };
792 - BaseAppSdk.prototype.callAppWithBack = function (callBack, cmd) {  
793 - var params = [];  
794 - for (var _i = 2; _i < arguments.length; _i++) {  
795 - params[_i - 2] = arguments[_i];  
796 - } 798 + PcSdk.prototype.closeAdBanner = function () {
  799 + this.myBridge.closeAdBanner();
797 }; 800 };
798 - BaseAppSdk.prototype.networkEvtFunc = function (type) {  
799 - var funcArr;  
800 - if (type == 0) {  
801 - funcArr = this.netOffArr;  
802 - }  
803 - else if (type == 5) {  
804 - funcArr = this.netOnArr;  
805 - }  
806 - if (funcArr) {  
807 - for (var i = 0; i < funcArr.length; i++) {  
808 - funcArr[i]();  
809 - }  
810 - } 801 + /**激励视频 */
  802 + PcSdk.prototype.showRewardVideoAd = function (value, JBCallback) {
  803 + this.myBridge.showRewardVideoAd(value, JBCallback);
  804 + };
  805 + /** 全屏广告*/
  806 + PcSdk.prototype.loadFullScreenVideoAd = function (data, JBCallback) {
  807 + this.myBridge.showRewardVideoAd(data, JBCallback);
  808 + };
  809 + /**信息流广告 */
  810 + PcSdk.prototype.loadNativeExpressAd = function (data, JBCallback) {
  811 + this.myBridge.loadNativeExpressAd(data, JBCallback);
811 }; 812 };
812 - BaseAppSdk.prototype.onNetOn = function (func) {  
813 - this.netOnArr.push(func); 813 + /**banner */
  814 + PcSdk.prototype.loadBannerExpressAd = function (data, JBCallback) {
  815 + this.myBridge.loadBannerExpressAd(data, JBCallback);
814 }; 816 };
815 - BaseAppSdk.prototype.onNetOff = function (func) {  
816 - this.netOffArr.push(func); 817 + /**插屏广告 */
  818 + PcSdk.prototype.showInteractionExpressAd = function (data, JBCallback) {
  819 + this.myBridge.showInteractionExpressAd(data, JBCallback);
817 }; 820 };
818 - Object.defineProperty(BaseAppSdk.prototype, "level", { 821 + Object.defineProperty(PcSdk.prototype, "level", {
819 get: function () { 822 get: function () {
820 return this._level; 823 return this._level;
821 }, 824 },
822 enumerable: true, 825 enumerable: true,
823 configurable: true 826 configurable: true
824 }); 827 });
825 - Object.defineProperty(BaseAppSdk.prototype, "width", { 828 + Object.defineProperty(PcSdk.prototype, "width", {
826 get: function () { 829 get: function () {
827 return this._width; 830 return this._width;
828 }, 831 },
829 enumerable: true, 832 enumerable: true,
830 configurable: true 833 configurable: true
831 }); 834 });
832 - Object.defineProperty(BaseAppSdk.prototype, "height", { 835 + Object.defineProperty(PcSdk.prototype, "height", {
833 get: function () { 836 get: function () {
834 return this._height; 837 return this._height;
835 }, 838 },
836 enumerable: true, 839 enumerable: true,
837 configurable: true 840 configurable: true
838 }); 841 });
839 - Object.defineProperty(BaseAppSdk.prototype, "version", { 842 + Object.defineProperty(PcSdk.prototype, "version", {
840 get: function () { 843 get: function () {
841 return this._version; 844 return this._version;
842 }, 845 },
843 enumerable: true, 846 enumerable: true,
844 configurable: true 847 configurable: true
845 }); 848 });
846 - Object.defineProperty(BaseAppSdk.prototype, "channel", { 849 + Object.defineProperty(PcSdk.prototype, "channel", {
847 get: function () { 850 get: function () {
848 return this._channel; 851 return this._channel;
849 }, 852 },
850 enumerable: true, 853 enumerable: true,
851 configurable: true 854 configurable: true
852 }); 855 });
853 - Object.defineProperty(BaseAppSdk.prototype, "bridge", { 856 + Object.defineProperty(PcSdk.prototype, "bridge", {
854 get: function () { 857 get: function () {
855 return null; 858 return null;
856 }, 859 },
857 enumerable: true, 860 enumerable: true,
858 configurable: true 861 configurable: true
859 }); 862 });
860 - BaseAppSdk.prototype.createClass = function (name) {  
861 - return window['PlatformClass'].createClass(name);  
862 - };  
863 - return BaseAppSdk;  
864 -}());  
865 -exports.default = BaseAppSdk;  
866 -  
867 -},{"./sdkData/AddGoldData":18,"./sdkData/GoldConfigData":19,"./sdkData/MyCoinData":20}],11:[function(require,module,exports){  
868 -"use strict";  
869 -Object.defineProperty(exports, "__esModule", { value: true });  
870 -var BaseAppSdk_1 = require("./BaseAppSdk");  
871 -var IosAppSdk = /** @class */ (function (_super) {  
872 - __extends(IosAppSdk, _super);  
873 - function IosAppSdk() {  
874 - return _super !== null && _super.apply(this, arguments) || this;  
875 - }  
876 - Object.defineProperty(IosAppSdk.prototype, "system", { 863 + Object.defineProperty(PcSdk.prototype, "gameConfig", {
877 get: function () { 864 get: function () {
878 - return 0; 865 + return this._gameConfig;
879 }, 866 },
880 enumerable: true, 867 enumerable: true,
881 configurable: true 868 configurable: true
882 }); 869 });
883 - IosAppSdk.prototype.callApp = function (cmd) {  
884 - var params = [];  
885 - for (var _i = 1; _i < arguments.length; _i++) {  
886 - params[_i - 1] = arguments[_i];  
887 - }  
888 - var _a;  
889 - if (params.length) {  
890 - cmd += ':';  
891 - }  
892 - this.bridge && (_a = this.bridge).call.apply(_a, [cmd].concat(params));  
893 - // this.bridge && alert(JSON.stringify(this.bridge));  
894 - };  
895 - IosAppSdk.prototype.callAppWithBack = function (callBack, cmd) {  
896 - var params = [];  
897 - for (var _i = 2; _i < arguments.length; _i++) {  
898 - params[_i - 2] = arguments[_i];  
899 - }  
900 - var _a;  
901 - if (params.length) {  
902 - cmd += ':';  
903 - }  
904 - this.bridge && (_a = this.bridge).callWithBack.apply(_a, [callBack, cmd].concat(params));  
905 - };  
906 - Object.defineProperty(IosAppSdk.prototype, "bridge", { 870 + Object.defineProperty(PcSdk, "I", {
907 get: function () { 871 get: function () {
908 - return this._bridge || (this._bridge = this.createClass('JSBridge')); 872 + return ObjectInstance_1.default.get(PcSdk);
909 }, 873 },
910 enumerable: true, 874 enumerable: true,
911 configurable: true 875 configurable: true
912 }); 876 });
913 - return IosAppSdk;  
914 -}(BaseAppSdk_1.default));  
915 -exports.default = IosAppSdk;  
916 -  
917 -},{"./BaseAppSdk":10}],12:[function(require,module,exports){  
918 -"use strict";  
919 -Object.defineProperty(exports, "__esModule", { value: true });  
920 -var AdManager_1 = require("./AdManager");  
921 -var NativeAd = /** @class */ (function (_super) {  
922 - __extends(NativeAd, _super);  
923 - function NativeAd() {  
924 - return _super !== null && _super.apply(this, arguments) || this;  
925 - }  
926 - NativeAd.prototype.onEnable = function () {  
927 - var globalPoint = this.item.localToGlobal(Laya.Point.EMPTY, true);  
928 - AdManager_1.default.I.showNativeAd(globalPoint.x, globalPoint.y, this.item.width, this.item.height); 877 + return PcSdk;
  878 +}());
  879 +exports.default = PcSdk;
  880 +// //这里是浏览器环境下, 接收web传过来的消息
  881 +window.onMyBridgeReady = function () {
  882 + console.log("onMyBridgeReady load finish, cost:" + (new Date().getTime()) + "ms");
  883 + MyBridge.App.onResume = function () {
  884 + var ret = [];
  885 + for (var _i = 0; _i < arguments.length; _i++) {
  886 + ret[_i] = arguments[_i];
  887 + }
  888 + console.log(' laya onResume', ret);
  889 + EventCenter_1.EventCenter.emit(EventEnum_1.EventEnum.APP_SHOW);
929 }; 890 };
930 - NativeAd.prototype.onDisable = function () {  
931 - AdManager_1.default.I.hideNativeAd(); 891 + MyBridge.App.onPause = function () {
  892 + var ret = [];
  893 + for (var _i = 0; _i < arguments.length; _i++) {
  894 + ret[_i] = arguments[_i];
  895 + }
  896 + console.log(' laya onPause', ret);
  897 + EventCenter_1.EventCenter.emit(EventEnum_1.EventEnum.APP_HIDE);
932 }; 898 };
933 - Object.defineProperty(NativeAd.prototype, "item", {  
934 - get: function () {  
935 - return this.owner;  
936 - },  
937 - enumerable: true,  
938 - configurable: true  
939 - });  
940 - return NativeAd;  
941 -}(Laya.Script));  
942 -exports.default = NativeAd; 899 +};
943 900
944 -},{"./AdManager":7}],13:[function(require,module,exports){ 901 +},{"../event/EventCenter":5,"../event/EventEnum":6,"../uitl/ObjectInstance":18}],10:[function(require,module,exports){
945 "use strict"; 902 "use strict";
946 Object.defineProperty(exports, "__esModule", { value: true }); 903 Object.defineProperty(exports, "__esModule", { value: true });
947 -var AppSdk_1 = require("./AppSdk");  
948 var ObjectInstance_1 = require("../uitl/ObjectInstance"); 904 var ObjectInstance_1 = require("../uitl/ObjectInstance");
  905 +var PcSdk_1 = require("./PcSdk");
949 var TTAdSdk = /** @class */ (function () { 906 var TTAdSdk = /** @class */ (function () {
950 function TTAdSdk() { 907 function TTAdSdk() {
951 } 908 }
  909 + /**
  910 + *
  911 + * @param preload 0 直接加载;1 预加载
  912 + */
952 TTAdSdk.prototype.showRewardVideoAd = function (preload) { 913 TTAdSdk.prototype.showRewardVideoAd = function (preload) {
953 if (preload === void 0) { preload = 0; } 914 if (preload === void 0) { preload = 0; }
954 return __awaiter(this, void 0, void 0, function () { 915 return __awaiter(this, void 0, void 0, function () {
955 var data; 916 var data;
956 return __generator(this, function (_a) { 917 return __generator(this, function (_a) {
957 data = { 918 data = {
958 - w: AppSdk_1.AppSdk.I.width,  
959 - h: AppSdk_1.AppSdk.I.height, 919 + type: 1,
960 preloading: preload, 920 preloading: preload,
961 }; 921 };
962 return [2 /*return*/, new Promise(function (resolve, reject) { 922 return [2 /*return*/, new Promise(function (resolve, reject) {
963 var isComplete = false; 923 var isComplete = false;
964 - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) { 924 + PcSdk_1.default.I.showRewardVideoAd(data, function (ret) {
965 var _a = JSON.parse(ret), code = _a.code, message = _a.message; 925 var _a = JSON.parse(ret), code = _a.code, message = _a.message;
966 switch (code) { 926 switch (code) {
967 case -1: 927 case -1:
968 reject('error'); 928 reject('error');
969 /**'暂无视频广告!每日0点重置'*/ ; 929 /**'暂无视频广告!每日0点重置'*/ ;
970 break; 930 break;
971 - case 200: 931 + case 102:
972 isComplete = true; 932 isComplete = true;
973 break; 933 break;
974 - case 100:  
975 - break;  
976 - case 0: 934 + case 101:
977 if (isComplete) { 935 if (isComplete) {
978 resolve(); 936 resolve();
979 } 937 }
@@ -982,7 +940,7 @@ var TTAdSdk = /** @class */ (function () { @@ -982,7 +940,7 @@ var TTAdSdk = /** @class */ (function () {
982 } 940 }
983 break; 941 break;
984 } 942 }
985 - }, 'showRewardVideoAd', 1, JSON.stringify(data)); 943 + });
986 })]; 944 })];
987 }); 945 });
988 }); 946 });
@@ -993,50 +951,66 @@ var TTAdSdk = /** @class */ (function () { @@ -993,50 +951,66 @@ var TTAdSdk = /** @class */ (function () {
993 var data; 951 var data;
994 return __generator(this, function (_a) { 952 return __generator(this, function (_a) {
995 data = { 953 data = {
  954 + w: PcSdk_1.default.I.width,
  955 + h: PcSdk_1.default.I.width * 90 / 600,
996 preloading: preload, 956 preloading: preload,
  957 + type: 1
997 }; 958 };
998 return [2 /*return*/, new Promise(function (resolve, reject) { 959 return [2 /*return*/, new Promise(function (resolve, reject) {
999 - var isComplete = false;  
1000 - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) {  
1001 - }, 'loadFullScreenVideoAd', 1, JSON.stringify(data)); 960 + PcSdk_1.default.I.loadFullScreenVideoAd(JSON.stringify(data), function (res) {
  961 + resolve(res);
  962 + });
1002 })]; 963 })];
1003 }); 964 });
1004 }); 965 });
1005 }; 966 };
1006 - TTAdSdk.prototype.loadNativeExpressAd = function (x, y, width, height) { 967 + TTAdSdk.prototype.loadNativeExpressAd = function (x, y, width, height, type, preload) {
  968 + if (type === void 0) { type = 1; }
  969 + if (preload === void 0) { preload = 0; }
1007 return __awaiter(this, void 0, void 0, function () { 970 return __awaiter(this, void 0, void 0, function () {
1008 var scaleX, scaleY, data; 971 var scaleX, scaleY, data;
1009 return __generator(this, function (_a) { 972 return __generator(this, function (_a) {
1010 - scaleX = AppSdk_1.AppSdk.I.width / Laya.stage.width;  
1011 - scaleY = AppSdk_1.AppSdk.I.height / Laya.stage.height; 973 + scaleX = PcSdk_1.default.I.width / Laya.stage.width;
  974 + scaleY = PcSdk_1.default.I.height / Laya.stage.height;
1012 data = { 975 data = {
  976 + type: type,
  977 + preloading: preload,
1013 w: width * scaleX, 978 w: width * scaleX,
1014 h: height * scaleY, 979 h: height * scaleY,
1015 left: x * scaleX, 980 left: x * scaleX,
1016 top: y * scaleY 981 top: y * scaleY
1017 }; 982 };
1018 - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) {  
1019 - }, 'loadNativeExpressAd', JSON.stringify(data)); 983 + PcSdk_1.default.I.loadNativeExpressAd(JSON.stringify(data), function (res) {
  984 + return Promise.resolve(res);
  985 + });
1020 return [2 /*return*/]; 986 return [2 /*return*/];
1021 }); 987 });
1022 }); 988 });
1023 }; 989 };
1024 - TTAdSdk.prototype.loadBannerExpressAd = function () { 990 + TTAdSdk.prototype.loadBannerExpressAd = function (preload) {
  991 + if (preload === void 0) { preload = 0; }
1025 return __awaiter(this, void 0, void 0, function () { 992 return __awaiter(this, void 0, void 0, function () {
1026 var data; 993 var data;
1027 return __generator(this, function (_a) { 994 return __generator(this, function (_a) {
1028 data = { 995 data = {
1029 - w: AppSdk_1.AppSdk.I.width,  
1030 - h: AppSdk_1.AppSdk.I.width * 90 / 600, 996 + w: PcSdk_1.default.I.width,
  997 + h: PcSdk_1.default.I.width * 90 / 600,
  998 + preloading: preload,
  999 + type: 1
1031 }; 1000 };
1032 - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) {  
1033 - }, 'loadBannerExpressAd', 2, JSON.stringify(data));  
1034 - return [2 /*return*/]; 1001 + return [2 /*return*/, new Promise(function (resolve, reject) {
  1002 + PcSdk_1.default.I.loadBannerExpressAd(JSON.stringify(data), function (res) {
  1003 + resolve(res);
  1004 + });
  1005 + })];
1035 }); 1006 });
1036 }); 1007 });
1037 }; 1008 };
1038 - TTAdSdk.prototype.hideAd = function () {  
1039 - AppSdk_1.AppSdk.I.callApp('close_adver_dialog'); 1009 + TTAdSdk.prototype.closeAdverDialog = function () {
  1010 + PcSdk_1.default.I.closeAdverDialog();
  1011 + };
  1012 + TTAdSdk.prototype.closeAdBanner = function () {
  1013 + PcSdk_1.default.I.closeAdBanner();
1040 }; 1014 };
1041 TTAdSdk.prototype.showInteractionExpressAd = function (preload) { 1015 TTAdSdk.prototype.showInteractionExpressAd = function (preload) {
1042 if (preload === void 0) { preload = 0; } 1016 if (preload === void 0) { preload = 0; }
@@ -1044,14 +1018,15 @@ var TTAdSdk = /** @class */ (function () { @@ -1044,14 +1018,15 @@ var TTAdSdk = /** @class */ (function () {
1044 var data; 1018 var data;
1045 return __generator(this, function (_a) { 1019 return __generator(this, function (_a) {
1046 data = { 1020 data = {
1047 - w: AppSdk_1.AppSdk.I.width * 0.8,  
1048 - h: AppSdk_1.AppSdk.I.height, 1021 + w: PcSdk_1.default.I.width * 0.8,
  1022 + h: PcSdk_1.default.I.height,
1049 preloading: preload, 1023 preloading: preload,
1050 }; 1024 };
1051 return [2 /*return*/, new Promise(function (resolve, reject) { 1025 return [2 /*return*/, new Promise(function (resolve, reject) {
1052 var isComplete = false; 1026 var isComplete = false;
1053 - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) {  
1054 - }, 'showInteractionExpressAd', JSON.stringify(data)); 1027 + PcSdk_1.default.I.showInteractionExpressAd(JSON.stringify(data), function (res) {
  1028 + resolve(res);
  1029 + });
1055 })]; 1030 })];
1056 }); 1031 });
1057 }); 1032 });
@@ -1067,11 +1042,11 @@ var TTAdSdk = /** @class */ (function () { @@ -1067,11 +1042,11 @@ var TTAdSdk = /** @class */ (function () {
1067 }()); 1042 }());
1068 exports.default = TTAdSdk; 1043 exports.default = TTAdSdk;
1069 1044
1070 -},{"../uitl/ObjectInstance":24,"./AppSdk":9}],14:[function(require,module,exports){ 1045 +},{"../uitl/ObjectInstance":18,"./PcSdk":9}],11:[function(require,module,exports){
1071 "use strict"; 1046 "use strict";
1072 Object.defineProperty(exports, "__esModule", { value: true }); 1047 Object.defineProperty(exports, "__esModule", { value: true });
1073 -var AppSdk_1 = require("./AppSdk");  
1074 var ObjectInstance_1 = require("../uitl/ObjectInstance"); 1048 var ObjectInstance_1 = require("../uitl/ObjectInstance");
  1049 +var PcSdk_1 = require("./PcSdk");
1075 /** 1050 /**
1076 * 上报热云埋点⽇志 1051 * 上报热云埋点⽇志
1077 * 具体的打点需要跟运营联系 1052 * 具体的打点需要跟运营联系
@@ -1080,7 +1055,7 @@ var TrackingSdk = /** @class */ (function () { @@ -1080,7 +1055,7 @@ var TrackingSdk = /** @class */ (function () {
1080 function TrackingSdk() { 1055 function TrackingSdk() {
1081 } 1056 }
1082 TrackingSdk.prototype.dot = function (key) { 1057 TrackingSdk.prototype.dot = function (key) {
1083 - AppSdk_1.AppSdk.I.callApp('tracking_event', key); 1058 + PcSdk_1.default.I.appDotTracKing(key);
1084 }; 1059 };
1085 Object.defineProperty(TrackingSdk, "I", { 1060 Object.defineProperty(TrackingSdk, "I", {
1086 get: function () { 1061 get: function () {
@@ -1098,7 +1073,7 @@ var TrackingKey; @@ -1098,7 +1073,7 @@ var TrackingKey;
1098 TrackingKey["RedPack5"] = "event_6"; 1073 TrackingKey["RedPack5"] = "event_6";
1099 })(TrackingKey = exports.TrackingKey || (exports.TrackingKey = {})); 1074 })(TrackingKey = exports.TrackingKey || (exports.TrackingKey = {}));
1100 1075
1101 -},{"../uitl/ObjectInstance":24,"./AppSdk":9}],15:[function(require,module,exports){ 1076 +},{"../uitl/ObjectInstance":18,"./PcSdk":9}],12:[function(require,module,exports){
1102 "use strict"; 1077 "use strict";
1103 Object.defineProperty(exports, "__esModule", { value: true }); 1078 Object.defineProperty(exports, "__esModule", { value: true });
1104 var ArrayUtils_1 = require("../../uitl/ArrayUtils"); 1079 var ArrayUtils_1 = require("../../uitl/ArrayUtils");
@@ -1184,21 +1159,18 @@ var BaseModel = /** @class */ (function () { @@ -1184,21 +1159,18 @@ var BaseModel = /** @class */ (function () {
1184 }()); 1159 }());
1185 exports.default = BaseModel; 1160 exports.default = BaseModel;
1186 1161
1187 -},{"../../uitl/ArrayUtils":22}],16:[function(require,module,exports){ 1162 +},{"../../uitl/ArrayUtils":16}],13:[function(require,module,exports){
1188 "use strict"; 1163 "use strict";
1189 Object.defineProperty(exports, "__esModule", { value: true }); 1164 Object.defineProperty(exports, "__esModule", { value: true });
1190 var BaseModel_1 = require("./BaseModel"); 1165 var BaseModel_1 = require("./BaseModel");
1191 var AdManager_1 = require("../../sdk/AdManager"); 1166 var AdManager_1 = require("../../sdk/AdManager");
1192 var TrackingSdk_1 = require("../../sdk/TrackingSdk"); 1167 var TrackingSdk_1 = require("../../sdk/TrackingSdk");
1193 -var GoldConfigData_1 = require("../../sdk/sdkData/GoldConfigData");  
1194 -var AddGoldData_1 = require("../../sdk/sdkData/AddGoldData");  
1195 -var MyCoinData_1 = require("../../sdk/sdkData/MyCoinData");  
1196 -var AppSdk_1 = require("../../sdk/AppSdk");  
1197 var DateUtils_1 = require("../../uitl/DateUtils"); 1168 var DateUtils_1 = require("../../uitl/DateUtils");
1198 var Util_1 = require("../../uitl/Util"); 1169 var Util_1 = require("../../uitl/Util");
1199 var ObjectInstance_1 = require("../../uitl/ObjectInstance"); 1170 var ObjectInstance_1 = require("../../uitl/ObjectInstance");
1200 var EventCenter_1 = require("../../event/EventCenter"); 1171 var EventCenter_1 = require("../../event/EventCenter");
1201 var EventEnum_1 = require("../../event/EventEnum"); 1172 var EventEnum_1 = require("../../event/EventEnum");
  1173 +var PcSdk_1 = require("../PcSdk");
1202 var RedpacketModel = /** @class */ (function (_super) { 1174 var RedpacketModel = /** @class */ (function (_super) {
1203 __extends(RedpacketModel, _super); 1175 __extends(RedpacketModel, _super);
1204 function RedpacketModel() { 1176 function RedpacketModel() {
@@ -1217,7 +1189,7 @@ var RedpacketModel = /** @class */ (function (_super) { @@ -1217,7 +1189,7 @@ var RedpacketModel = /** @class */ (function (_super) {
1217 var _this = this; 1189 var _this = this;
1218 return __generator(this, function (_a) { 1190 return __generator(this, function (_a) {
1219 switch (_a.label) { 1191 switch (_a.label) {
1220 - case 0: return [4 /*yield*/, GoldConfigData_1.GoldConfigData.I.getGoldConfig()]; 1192 + case 0: return [4 /*yield*/, this.getRedConfig()];
1221 case 1: 1193 case 1:
1222 arr = _a.sent(); 1194 arr = _a.sent();
1223 console.log('---------------RedpacketModel-------' + JSON.stringify(arr)); 1195 console.log('---------------RedpacketModel-------' + JSON.stringify(arr));
@@ -1255,6 +1227,47 @@ var RedpacketModel = /** @class */ (function (_super) { @@ -1255,6 +1227,47 @@ var RedpacketModel = /** @class */ (function (_super) {
1255 data.list = []; 1227 data.list = [];
1256 return data; 1228 return data;
1257 }; 1229 };
  1230 + RedpacketModel.prototype.getRedConfig = function () {
  1231 + return __awaiter(this, void 0, void 0, function () {
  1232 + var result, configJson;
  1233 + return __generator(this, function (_a) {
  1234 + switch (_a.label) {
  1235 + case 0:
  1236 + result = PcSdk_1.default.I.gameConfig;
  1237 + console.log('--------------- 获取配置静态表-----' + JSON.stringify(result));
  1238 + if (!result) return [3 /*break*/, 2];
  1239 + return [4 /*yield*/, this.loadGoldCfg(result['coin_config'][0])];
  1240 + case 1:
  1241 + configJson = _a.sent();
  1242 + console.log('-------------- 获取红包静态表-----' + JSON.stringify(result));
  1243 + return [2 /*return*/, configJson];
  1244 + case 2:
  1245 + PcSdk_1.default.I.initGameConfig();
  1246 + _a.label = 3;
  1247 + case 3: return [2 /*return*/];
  1248 + }
  1249 + });
  1250 + });
  1251 + };
  1252 + RedpacketModel.prototype.loadGoldCfg = function (res) {
  1253 + return __awaiter(this, void 0, void 0, function () {
  1254 + var configJson;
  1255 + return __generator(this, function (_a) {
  1256 + switch (_a.label) {
  1257 + case 0: return [4 /*yield*/, this.load(res)];
  1258 + case 1:
  1259 + configJson = _a.sent();
  1260 + return [2 /*return*/, configJson];
  1261 + }
  1262 + });
  1263 + });
  1264 + };
  1265 + RedpacketModel.prototype.load = function (res, onProgress) {
  1266 + var _this = this;
  1267 + return new Promise(function (suc, fail) {
  1268 + Laya.loader.load(res, Laya.Handler.create(_this, suc), onProgress);
  1269 + });
  1270 + };
1258 RedpacketModel.prototype.checkRedpacket = function () { 1271 RedpacketModel.prototype.checkRedpacket = function () {
1259 return __awaiter(this, void 0, void 0, function () { 1272 return __awaiter(this, void 0, void 0, function () {
1260 var cnt, data, ran2, cash; 1273 var cnt, data, ran2, cash;
@@ -1284,6 +1297,7 @@ var RedpacketModel = /** @class */ (function (_super) { @@ -1284,6 +1297,7 @@ var RedpacketModel = /** @class */ (function (_super) {
1284 case 1: 1297 case 1:
1285 //**弹出红包的界面, 暂时处理成 直接看广告获取金币 */ 1298 //**弹出红包的界面, 暂时处理成 直接看广告获取金币 */
1286 _a.sent(); 1299 _a.sent();
  1300 + console.log('--------------- 触发了红包-----');
1287 this.getRepacket(); 1301 this.getRepacket();
1288 /**更新基本显示 */ 1302 /**更新基本显示 */
1289 EventCenter_1.EventCenter.emit(EventEnum_1.EventEnum.UPDATE_COIN); 1303 EventCenter_1.EventCenter.emit(EventEnum_1.EventEnum.UPDATE_COIN);
@@ -1331,7 +1345,7 @@ var RedpacketModel = /** @class */ (function (_super) { @@ -1331,7 +1345,7 @@ var RedpacketModel = /** @class */ (function (_super) {
1331 var totalCoin; 1345 var totalCoin;
1332 return __generator(this, function (_a) { 1346 return __generator(this, function (_a) {
1333 switch (_a.label) { 1347 switch (_a.label) {
1334 - case 0: return [4 /*yield*/, MyCoinData_1.default.getCoin()]; 1348 + case 0: return [4 /*yield*/, PcSdk_1.default.I.myCoin()];
1335 case 1: 1349 case 1:
1336 totalCoin = _a.sent(); 1350 totalCoin = _a.sent();
1337 return [2 /*return*/, totalCoin]; 1351 return [2 /*return*/, totalCoin];
@@ -1346,10 +1360,10 @@ var RedpacketModel = /** @class */ (function (_super) { @@ -1346,10 +1360,10 @@ var RedpacketModel = /** @class */ (function (_super) {
1346 var coinData; 1360 var coinData;
1347 return __generator(this, function (_a) { 1361 return __generator(this, function (_a) {
1348 switch (_a.label) { 1362 switch (_a.label) {
1349 - case 0: return [4 /*yield*/, AddGoldData_1.default.addCoin(key)]; 1363 + case 0: return [4 /*yield*/, PcSdk_1.default.I.addGold(key)];
1350 case 1: 1364 case 1:
1351 coinData = _a.sent(); 1365 coinData = _a.sent();
1352 - return [2 /*return*/, coinData]; 1366 + return [2 /*return*/, coinData['coin']];
1353 } 1367 }
1354 }); 1368 });
1355 }); 1369 });
@@ -1360,7 +1374,7 @@ var RedpacketModel = /** @class */ (function (_super) { @@ -1360,7 +1374,7 @@ var RedpacketModel = /** @class */ (function (_super) {
1360 var minCoin; 1374 var minCoin;
1361 return __generator(this, function (_a) { 1375 return __generator(this, function (_a) {
1362 switch (_a.label) { 1376 switch (_a.label) {
1363 - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.minWithDrawal()]; 1377 + case 0: return [4 /*yield*/, PcSdk_1.default.I.minWithDrawal()];
1364 case 1: 1378 case 1:
1365 minCoin = _a.sent(); 1379 minCoin = _a.sent();
1366 return [2 /*return*/, minCoin]; 1380 return [2 /*return*/, minCoin];
@@ -1389,14 +1403,14 @@ var RedpacketConfigData = /** @class */ (function () { @@ -1389,14 +1403,14 @@ var RedpacketConfigData = /** @class */ (function () {
1389 return RedpacketConfigData; 1403 return RedpacketConfigData;
1390 }()); 1404 }());
1391 1405
1392 -},{"../../event/EventCenter":5,"../../event/EventEnum":6,"../../sdk/AdManager":7,"../../sdk/AppSdk":9,"../../sdk/TrackingSdk":14,"../../sdk/sdkData/AddGoldData":18,"../../sdk/sdkData/GoldConfigData":19,"../../sdk/sdkData/MyCoinData":20,"../../uitl/DateUtils":23,"../../uitl/ObjectInstance":24,"../../uitl/Util":27,"./BaseModel":15}],17:[function(require,module,exports){ 1406 +},{"../../event/EventCenter":5,"../../event/EventEnum":6,"../../sdk/AdManager":7,"../../sdk/TrackingSdk":11,"../../uitl/DateUtils":17,"../../uitl/ObjectInstance":18,"../../uitl/Util":21,"../PcSdk":9,"./BaseModel":12}],14:[function(require,module,exports){
1393 "use strict"; 1407 "use strict";
1394 Object.defineProperty(exports, "__esModule", { value: true }); 1408 Object.defineProperty(exports, "__esModule", { value: true });
1395 var BaseModel_1 = require("./BaseModel"); 1409 var BaseModel_1 = require("./BaseModel");
1396 -var AppSdk_1 = require("../../sdk/AppSdk");  
1397 var DateUtils_1 = require("../../uitl/DateUtils"); 1410 var DateUtils_1 = require("../../uitl/DateUtils");
1398 var Util_1 = require("../../uitl/Util"); 1411 var Util_1 = require("../../uitl/Util");
1399 var ObjectInstance_1 = require("../../uitl/ObjectInstance"); 1412 var ObjectInstance_1 = require("../../uitl/ObjectInstance");
  1413 +var PcSdk_1 = require("../PcSdk");
1400 /** 1414 /**
1401 * 1415 *
1402 */ 1416 */
@@ -1415,123 +1429,18 @@ var ShakeModel = /** @class */ (function (_super) { @@ -1415,123 +1429,18 @@ var ShakeModel = /** @class */ (function (_super) {
1415 _this.cur_shake_day_limit = 0; 1429 _this.cur_shake_day_limit = 0;
1416 return _this; 1430 return _this;
1417 } 1431 }
1418 - /**  
1419 - * red_day_limit 红包每日极限产出  
1420 - * shake_day_limit 摇一摇每日极限产出  
1421 - * interstitial_cnt 插屏计数(每出现x次通用获得物品界面后,出现插屏)  
1422 - * interstitial_delay 插屏出现延时(毫秒)  
1423 - */  
1424 - /**  
1425 - * // let result = {  
1426 - // data: {  
1427 - // gameConfig: {  
1428 - // "config": {  
1429 - // "red_day_limit": 10,  
1430 - // "shake_day_limit": 50,  
1431 - // "interstitial_cnt": 2,  
1432 - // "interstitial_delay": 500  
1433 - // },  
1434 - // "shake": [  
1435 - // {  
1436 - // "id": 1,  
1437 - // "type": 1,  
1438 - // "weight": 1000,  
1439 - // "num": 0  
1440 - // },  
1441 - // {  
1442 - // "id": 2,  
1443 - // "type": 2,  
1444 - // "weight": 400,  
1445 - // "num": 0  
1446 - // },  
1447 - // {  
1448 - // "id": 3,  
1449 - // "type": 3,  
1450 - // "weight": 300,  
1451 - // "num": 1  
1452 - // },  
1453 - // {  
1454 - // "id": 4,  
1455 - // "type": 3,  
1456 - // "weight": 100,  
1457 - // "num": 2  
1458 - // },  
1459 - // {  
1460 - // "id": 5,  
1461 - // "type": 4,  
1462 - // "weight": 300,  
1463 - // "num": 1  
1464 - // },  
1465 - // {  
1466 - // "id": 6,  
1467 - // "type": 4,  
1468 - // "weight": 100,  
1469 - // "num": 2  
1470 - // },  
1471 - // {  
1472 - // "id": 7,  
1473 - // "type": 5,  
1474 - // "weight": 300,  
1475 - // "num": 1  
1476 - // },  
1477 - // {  
1478 - // "id": 8,  
1479 - // "type": 5,  
1480 - // "weight": 100,  
1481 - // "num": 2  
1482 - // },  
1483 - // {  
1484 - // "id": 9,  
1485 - // "type": 6,  
1486 - // "weight": 300,  
1487 - // "num": 1  
1488 - // },  
1489 - // {  
1490 - // "id": 10,  
1491 - // "type": 6,  
1492 - // "weight": 100,  
1493 - // "num": 2  
1494 - // },  
1495 - // {  
1496 - // "id": 11,  
1497 - // "type": 7,  
1498 - // "weight": 300,  
1499 - // "num": 1  
1500 - // },  
1501 - // {  
1502 - // "id": 12,  
1503 - // "type": 7,  
1504 - // "weight": 100,  
1505 - // "num": 2  
1506 - // },  
1507 - // {  
1508 - // "id": 13,  
1509 - // "type": 8,  
1510 - // "weight": 500,  
1511 - // "num": 0  
1512 - // }  
1513 - // ],  
1514 - // 'coin_config': []  
1515 - // }  
1516 - // }  
1517 - // }  
1518 - */  
1519 ShakeModel.prototype.init = function () { 1432 ShakeModel.prototype.init = function () {
1520 return __awaiter(this, void 0, void 0, function () { 1433 return __awaiter(this, void 0, void 0, function () {
1521 - var result, data, gameData; 1434 + var result, gameData;
1522 return __generator(this, function (_a) { 1435 return __generator(this, function (_a) {
1523 - switch (_a.label) {  
1524 - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.getGameConfig()];  
1525 - case 1:  
1526 - result = _a.sent();  
1527 - console.log('---------------ShakeModel-------' + JSON.stringify(result.data));  
1528 - data = result.data;  
1529 - if (data['gameConfig']) {  
1530 - gameData = data['gameConfig'];  
1531 - this.update(this.initData(gameData));  
1532 - }  
1533 - return [2 /*return*/]; 1436 + result = PcSdk_1.default.I.gameConfig;
  1437 + ;
  1438 + console.log('---------------ShakeModel-- 获取摇一摇静态表-----' + JSON.stringify(result));
  1439 + if (result['config']) {
  1440 + gameData = result['config'];
  1441 + this.update(this.initData(gameData));
1534 } 1442 }
  1443 + return [2 /*return*/];
1535 }); 1444 });
1536 }); 1445 });
1537 }; 1446 };
@@ -1626,148 +1535,7 @@ var ShakeData = /** @class */ (function () { @@ -1626,148 +1535,7 @@ var ShakeData = /** @class */ (function () {
1626 return ShakeData; 1535 return ShakeData;
1627 }()); 1536 }());
1628 1537
1629 -},{"../../sdk/AppSdk":9,"../../uitl/DateUtils":23,"../../uitl/ObjectInstance":24,"../../uitl/Util":27,"./BaseModel":15}],18:[function(require,module,exports){  
1630 -"use strict";  
1631 -Object.defineProperty(exports, "__esModule", { value: true });  
1632 -var AppSdk_1 = require("../AppSdk");  
1633 -var AddGoldData = /** @class */ (function () {  
1634 - function AddGoldData() {  
1635 - }  
1636 - AddGoldData.initData = function (data) {  
1637 - if (!parseInt(data.code)) {  
1638 - AddGoldData.coin = data.data.coin;  
1639 - AddGoldData.mycoin = data.data.mycoin;  
1640 - }  
1641 - };  
1642 - AddGoldData.addCoin = function (key) {  
1643 - if (key === void 0) { key = 1; }  
1644 - return __awaiter(this, void 0, void 0, function () {  
1645 - var result;  
1646 - return __generator(this, function (_a) {  
1647 - switch (_a.label) {  
1648 - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.addGold(key)];  
1649 - case 1:  
1650 - result = _a.sent();  
1651 - return [2 /*return*/, [parseInt(this.coin), parseInt(this.mycoin)]];  
1652 - }  
1653 - });  
1654 - });  
1655 - };  
1656 - AddGoldData.coin = '0';  
1657 - AddGoldData.mycoin = '0';  
1658 - return AddGoldData;  
1659 -}());  
1660 -exports.default = AddGoldData;  
1661 -  
1662 -},{"../AppSdk":9}],19:[function(require,module,exports){  
1663 -"use strict";  
1664 -Object.defineProperty(exports, "__esModule", { value: true });  
1665 -var AppSdk_1 = require("../AppSdk");  
1666 -var Util_1 = require("../../uitl/Util");  
1667 -var GoldConfigData = /** @class */ (function () {  
1668 - function GoldConfigData() {  
1669 - this.coin_config = '';  
1670 - this.code = -3;  
1671 - }  
1672 - Object.defineProperty(GoldConfigData, "I", {  
1673 - get: function () {  
1674 - if (!this.instance)  
1675 - this.instance = new GoldConfigData();  
1676 - return this.instance;  
1677 - },  
1678 - enumerable: true,  
1679 - configurable: true  
1680 - });  
1681 - GoldConfigData.prototype.initData = function (data) {  
1682 - this.code = data.code;  
1683 - if (!data.code) {  
1684 - data = data.data;  
1685 - for (var key in data) {  
1686 - if (data.hasOwnProperty(key)) {  
1687 - var ele = data[key];  
1688 - this[key] = ele;  
1689 - }  
1690 - }  
1691 - }  
1692 - };  
1693 - GoldConfigData.prototype.getGoldConfig = function () {  
1694 - return __awaiter(this, void 0, void 0, function () {  
1695 - var _this = this;  
1696 - return __generator(this, function (_a) {  
1697 - return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {  
1698 - var result, data, gameData, configJson;  
1699 - return __generator(this, function (_a) {  
1700 - switch (_a.label) {  
1701 - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.getGameConfig()];  
1702 - case 1:  
1703 - result = _a.sent();  
1704 - data = result.data;  
1705 - if (!data['gameConfig']) return [3 /*break*/, 3];  
1706 - gameData = data['gameConfig'];  
1707 - return [4 /*yield*/, this.loadGoldCfg(gameData['coin_config'][0])];  
1708 - case 2:  
1709 - configJson = _a.sent();  
1710 - resolve(configJson);  
1711 - _a.label = 3;  
1712 - case 3: return [2 /*return*/];  
1713 - }  
1714 - });  
1715 - }); })];  
1716 - });  
1717 - });  
1718 - };  
1719 - GoldConfigData.prototype.loadGoldCfg = function (res) {  
1720 - return __awaiter(this, void 0, void 0, function () {  
1721 - var configJson;  
1722 - return __generator(this, function (_a) {  
1723 - switch (_a.label) {  
1724 - case 0: return [4 /*yield*/, Util_1.default.I.load(res)];  
1725 - case 1:  
1726 - configJson = _a.sent();  
1727 - return [2 /*return*/, configJson];  
1728 - }  
1729 - });  
1730 - });  
1731 - };  
1732 - GoldConfigData.instance = null;  
1733 - return GoldConfigData;  
1734 -}());  
1735 -exports.GoldConfigData = GoldConfigData;  
1736 -  
1737 -},{"../../uitl/Util":27,"../AppSdk":9}],20:[function(require,module,exports){  
1738 -"use strict";  
1739 -Object.defineProperty(exports, "__esModule", { value: true });  
1740 -var AppSdk_1 = require("../AppSdk");  
1741 -var MyCoinData = /** @class */ (function () {  
1742 - function MyCoinData() {  
1743 - }  
1744 - MyCoinData.initData = function (data) {  
1745 - if (!parseInt(data.code)) {  
1746 - this.coin = data.data.coin;  
1747 - }  
1748 - else {  
1749 - this.coin = '0';  
1750 - }  
1751 - };  
1752 - MyCoinData.getCoin = function () {  
1753 - return __awaiter(this, void 0, void 0, function () {  
1754 - var result;  
1755 - return __generator(this, function (_a) {  
1756 - switch (_a.label) {  
1757 - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.myCoin()];  
1758 - case 1:  
1759 - result = _a.sent();  
1760 - return [2 /*return*/, parseInt(this.coin)];  
1761 - }  
1762 - });  
1763 - });  
1764 - };  
1765 - MyCoinData.coin = '';  
1766 - return MyCoinData;  
1767 -}());  
1768 -exports.default = MyCoinData;  
1769 -  
1770 -},{"../AppSdk":9}],21:[function(require,module,exports){ 1538 +},{"../../uitl/DateUtils":17,"../../uitl/ObjectInstance":18,"../../uitl/Util":21,"../PcSdk":9,"./BaseModel":12}],15:[function(require,module,exports){
1771 "use strict"; 1539 "use strict";
1772 Object.defineProperty(exports, "__esModule", { value: true }); 1540 Object.defineProperty(exports, "__esModule", { value: true });
1773 var Scene = Laya.Scene; 1541 var Scene = Laya.Scene;
@@ -1789,7 +1557,7 @@ var ui; @@ -1789,7 +1557,7 @@ var ui;
1789 REG("ui.TestSceneUI", TestSceneUI); 1557 REG("ui.TestSceneUI", TestSceneUI);
1790 })(ui = exports.ui || (exports.ui = {})); 1558 })(ui = exports.ui || (exports.ui = {}));
1791 1559
1792 -},{}],22:[function(require,module,exports){ 1560 +},{}],16:[function(require,module,exports){
1793 "use strict"; 1561 "use strict";
1794 Object.defineProperty(exports, "__esModule", { value: true }); 1562 Object.defineProperty(exports, "__esModule", { value: true });
1795 var ArrayUtils = /** @class */ (function () { 1563 var ArrayUtils = /** @class */ (function () {
@@ -1870,7 +1638,7 @@ var ArrayUtils = /** @class */ (function () { @@ -1870,7 +1638,7 @@ var ArrayUtils = /** @class */ (function () {
1870 }()); 1638 }());
1871 exports.default = ArrayUtils; 1639 exports.default = ArrayUtils;
1872 1640
1873 -},{}],23:[function(require,module,exports){ 1641 +},{}],17:[function(require,module,exports){
1874 "use strict"; 1642 "use strict";
1875 Object.defineProperty(exports, "__esModule", { value: true }); 1643 Object.defineProperty(exports, "__esModule", { value: true });
1876 /** 1644 /**
@@ -2165,7 +1933,7 @@ var DateUtils = /** @class */ (function () { @@ -2165,7 +1933,7 @@ var DateUtils = /** @class */ (function () {
2165 }()); 1933 }());
2166 exports.default = DateUtils; 1934 exports.default = DateUtils;
2167 1935
2168 -},{}],24:[function(require,module,exports){ 1936 +},{}],18:[function(require,module,exports){
2169 "use strict"; 1937 "use strict";
2170 Object.defineProperty(exports, "__esModule", { value: true }); 1938 Object.defineProperty(exports, "__esModule", { value: true });
2171 var ObjectPool_1 = require("./ObjectPool"); 1939 var ObjectPool_1 = require("./ObjectPool");
@@ -2191,7 +1959,7 @@ var ObjectInstance = /** @class */ (function () { @@ -2191,7 +1959,7 @@ var ObjectInstance = /** @class */ (function () {
2191 }()); 1959 }());
2192 exports.default = ObjectInstance; 1960 exports.default = ObjectInstance;
2193 1961
2194 -},{"./ObjectPool":25}],25:[function(require,module,exports){ 1962 +},{"./ObjectPool":19}],19:[function(require,module,exports){
2195 "use strict"; 1963 "use strict";
2196 Object.defineProperty(exports, "__esModule", { value: true }); 1964 Object.defineProperty(exports, "__esModule", { value: true });
2197 var ObjectPool = /** @class */ (function () { 1965 var ObjectPool = /** @class */ (function () {
@@ -2216,7 +1984,7 @@ var ObjectPool = /** @class */ (function () { @@ -2216,7 +1984,7 @@ var ObjectPool = /** @class */ (function () {
2216 }()); 1984 }());
2217 exports.default = ObjectPool; 1985 exports.default = ObjectPool;
2218 1986
2219 -},{}],26:[function(require,module,exports){ 1987 +},{}],20:[function(require,module,exports){
2220 "use strict"; 1988 "use strict";
2221 Object.defineProperty(exports, "__esModule", { value: true }); 1989 Object.defineProperty(exports, "__esModule", { value: true });
2222 var ScaleButtonScript = /** @class */ (function () { 1990 var ScaleButtonScript = /** @class */ (function () {
@@ -2262,7 +2030,7 @@ var ScaleButtonScript = /** @class */ (function () { @@ -2262,7 +2030,7 @@ var ScaleButtonScript = /** @class */ (function () {
2262 }()); 2030 }());
2263 exports.default = ScaleButtonScript; 2031 exports.default = ScaleButtonScript;
2264 2032
2265 -},{}],27:[function(require,module,exports){ 2033 +},{}],21:[function(require,module,exports){
2266 "use strict"; 2034 "use strict";
2267 Object.defineProperty(exports, "__esModule", { value: true }); 2035 Object.defineProperty(exports, "__esModule", { value: true });
2268 var Util = /** @class */ (function () { 2036 var Util = /** @class */ (function () {
@@ -2301,4 +2069,4 @@ var DataKey; @@ -2301,4 +2069,4 @@ var DataKey;
2301 })(DataKey = exports.DataKey || (exports.DataKey = {})); 2069 })(DataKey = exports.DataKey || (exports.DataKey = {}));
2302 2070
2303 },{}]},{},[2]) 2071 },{}]},{},[2])
2304 -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL0FwcGxpY2F0aW9ucy9MYXlhQWlySURFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvYXBwL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvR2FtZUNvbmZpZy50cyIsInNyYy9NYWluLnRzIiwic3JjL1JlZERyYXdhbC50cyIsInNyYy9UZXN0U2NlbmUudHMiLCJzcmMvZXZlbnQvRXZlbnRDZW50ZXIudHMiLCJzcmMvZXZlbnQvRXZlbnRFbnVtLnRzIiwic3JjL3Nkay9BZE1hbmFnZXIudHMiLCJzcmMvc2RrL0FuZHJvaWRBcHBTZGsudHMiLCJzcmMvc2RrL0FwcFNkay50cyIsInNyYy9zZGsvQmFzZUFwcFNkay50cyIsInNyYy9zZGsvSW9zQXBwU2RrLnRzIiwic3JjL3Nkay9OYXRpdmVBZC50cyIsInNyYy9zZGsvVFRBZFNkay50cyIsInNyYy9zZGsvVHJhY2tpbmdTZGsudHMiLCJzcmMvc2RrL21vZGVsL0Jhc2VNb2RlbC50cyIsInNyYy9zZGsvbW9kZWwvUmVkcGFja2V0TW9kZWwudHMiLCJzcmMvc2RrL21vZGVsL1NoYWtlTW9kZWwudHMiLCJzcmMvc2RrL3Nka0RhdGEvQWRkR29sZERhdGEudHMiLCJzcmMvc2RrL3Nka0RhdGEvR29sZENvbmZpZ0RhdGEudHMiLCJzcmMvc2RrL3Nka0RhdGEvTXlDb2luRGF0YS50cyIsInNyYy91aS9sYXlhTWF4VUkudHMiLCJzcmMvdWl0bC9BcnJheVV0aWxzLnRzIiwic3JjL3VpdGwvRGF0ZVV0aWxzLnRzIiwic3JjL3VpdGwvT2JqZWN0SW5zdGFuY2UudHMiLCJzcmMvdWl0bC9PYmplY3RQb29sLnRzIiwic3JjL3VpdGwvU2NhbGVCdXR0b25TY3JpcHQudHMiLCJzcmMvdWl0bC9VdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztB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WUFBWSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJ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RDtJQUFBO0lBaUJBLENBQUM7SUFoQlUsbUJBQUksR0FBWCxVQUFZLEdBQUcsRUFBRSxVQUF5QjtRQUExQyxpQkFJQztRQUhHLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxHQUFHLEVBQUUsSUFBSTtZQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELHNCQUFPLEdBQVAsVUFBUSxHQUFXLEVBQUUsS0FBVTtRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDcEQsQ0FBQztJQUNELHNCQUFPLEdBQVAsVUFBUSxHQUFXO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsc0JBQWtCLFNBQUM7YUFBbkI7WUFDSSxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7UUFDekQsQ0FBQzs7O09BQUE7SUFDTCxXQUFDO0FBQUQsQ0FqQkEsQUFpQkMsSUFBQTs7QUFFRCxJQUFZLE9BT1g7QUFQRCxXQUFZLE9BQU87SUFDZixrREFBdUMsQ0FBQTtJQUN2QyxzREFBMkMsQ0FBQTtJQUMzQywwQ0FBK0IsQ0FBQTtJQUMvQiw4QkFBbUIsQ0FBQTtJQUNuQixnQ0FBcUIsQ0FBQTtJQUNyQixnQ0FBcUIsQ0FBQTtBQUN6QixDQUFDLEVBUFcsT0FBTyxHQUFQLGVBQU8sS0FBUCxlQUFPLFFBT2xCIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxufSkoKTtcclxuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlRoaXMgY2xhc3MgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgTGF5YUFpcklERSwgcGxlYXNlIGRvIG5vdCBtYWtlIGFueSBtb2RpZmljYXRpb25zLiAqL1xyXG5pbXBvcnQgVGVzdFNjZW5lIGZyb20gXCIuL1Rlc3RTY2VuZVwiXG5pbXBvcnQgU2NhbGVCdXR0b25TY3JpcHQgZnJvbSBcIi4vdWl0bC9TY2FsZUJ1dHRvblNjcmlwdFwiXG5pbXBvcnQgUmVkRHJhd2FsIGZyb20gXCIuL1JlZERyYXdhbFwiXG5pbXBvcnQgTmF0aXZlQWQgZnJvbSBcIi4vc2RrL05hdGl2ZUFkXCJcclxuLypcclxuKiDmuLjmiI/liJ3lp4vljJbphY3nva47XHJcbiovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVDb25maWd7XHJcbiAgICBzdGF0aWMgd2lkdGg6bnVtYmVyPTc1MDtcclxuICAgIHN0YXRpYyBoZWlnaHQ6bnVtYmVyPTEzMzQ7XHJcbiAgICBzdGF0aWMgc2NhbGVNb2RlOnN0cmluZz1cImZpeGVkd2lkdGhcIjtcclxuICAgIHN0YXRpYyBzY3JlZW5Nb2RlOnN0cmluZz1cIm5vbmVcIjtcclxuICAgIHN0YXRpYyBhbGlnblY6c3RyaW5nPVwidG9wXCI7XHJcbiAgICBzdGF0aWMgYWxpZ25IOnN0cmluZz1cImxlZnRcIjtcclxuICAgIHN0YXRpYyBzdGFydFNjZW5lOmFueT1cIlRlc3RTY2VuZS5zY2VuZVwiO1xyXG4gICAgc3RhdGljIHNjZW5lUm9vdDpzdHJpbmc9XCJcIjtcclxuICAgIHN0YXRpYyBkZWJ1Zzpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIHN0YXQ6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBwaHlzaWNzRGVidWc6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBleHBvcnRTY2VuZVRvSnNvbjpib29sZWFuPXRydWU7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe31cclxuICAgIHN0YXRpYyBpbml0KCl7XHJcbiAgICAgICAgdmFyIHJlZzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XHJcbiAgICAgICAgcmVnKFwiVGVzdFNjZW5lLnRzXCIsVGVzdFNjZW5lKTtcbiAgICAgICAgcmVnKFwidWl0bC9TY2FsZUJ1dHRvblNjcmlwdC50c1wiLFNjYWxlQnV0dG9uU2NyaXB0KTtcbiAgICAgICAgcmVnKFwiUmVkRHJhd2FsLnRzXCIsUmVkRHJhd2FsKTtcbiAgICAgICAgcmVnKFwic2RrL05hdGl2ZUFkLnRzXCIsTmF0aXZlQWQpO1xyXG4gICAgfVxyXG59XHJcbkdhbWVDb25maWcuaW5pdCgpOyIsImltcG9ydCBHYW1lQ29uZmlnIGZyb20gXCIuL0dhbWVDb25maWdcIjtcclxuaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi9zZGsvQWRNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IEFwcFNkayB9IGZyb20gXCIuL3Nkay9BcHBTZGtcIjtcclxuaW1wb3J0IFJlZHBhY2tldE1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9SZWRwYWNrZXRNb2RlbFwiO1xyXG5pbXBvcnQgU2hha2VNb2RlbCBmcm9tIFwiLi9zZGsvbW9kZWwvU2hha2VNb2RlbFwiO1xyXG5jbGFzcyBNYWluIHtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdC8v5qC55o2uSURF6K6+572u5Yid5aeL5YyW5byV5pOOXHRcdFxyXG5cdFx0aWYgKHdpbmRvd1tcIkxheWEzRFwiXSkgTGF5YTNELmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQpO1xyXG5cdFx0ZWxzZSBMYXlhLmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQsIExheWFbXCJXZWJHTFwiXSk7XHJcblx0XHRMYXlhW1wiUGh5c2ljc1wiXSAmJiBMYXlhW1wiUGh5c2ljc1wiXS5lbmFibGUoKTtcclxuXHRcdExheWFbXCJEZWJ1Z1BhbmVsXCJdICYmIExheWFbXCJEZWJ1Z1BhbmVsXCJdLmVuYWJsZSgpO1xyXG5cdFx0TGF5YS5zdGFnZS5zY2FsZU1vZGUgPSBHYW1lQ29uZmlnLnNjYWxlTW9kZTtcclxuXHRcdExheWEuc3RhZ2Uuc2NyZWVuTW9kZSA9IEdhbWVDb25maWcuc2NyZWVuTW9kZTtcclxuXHRcdExheWEuc3RhZ2UuYWxpZ25WID0gR2FtZUNvbmZpZy5hbGlnblY7XHJcblx0XHRMYXlhLnN0YWdlLmFsaWduSCA9IEdhbWVDb25maWcuYWxpZ25IO1xyXG5cdFx0Ly/lhbzlrrnlvq7kv6HkuI3mlK/mjIHliqDovb1zY2VuZeWQjue8gOWcuuaZr1xyXG5cdFx0TGF5YS5VUkwuZXhwb3J0U2NlbmVUb0pzb24gPSBHYW1lQ29uZmlnLmV4cG9ydFNjZW5lVG9Kc29uO1xyXG5cclxuXHRcdC8v5omT5byA6LCD6K+V6Z2i5p2/77yI6YCa6L+HSURF6K6+572u6LCD6K+V5qih5byP77yM5oiW6ICFdXJs5Zyw5Z2A5aKe5YqgZGVidWc9dHJ1ZeWPguaVsO+8jOWdh+WPr+aJk+W8gOiwg+ivlemdouadv++8iVxyXG5cdFx0aWYgKEdhbWVDb25maWcuZGVidWcgfHwgTGF5YS5VdGlscy5nZXRRdWVyeVN0cmluZyhcImRlYnVnXCIpID09IFwidHJ1ZVwiKSBMYXlhLmVuYWJsZURlYnVnUGFuZWwoKTtcclxuXHRcdGlmIChHYW1lQ29uZmlnLnBoeXNpY3NEZWJ1ZyAmJiBMYXlhW1wiUGh5c2ljc0RlYnVnRHJhd1wiXSkgTGF5YVtcIlBoeXNpY3NEZWJ1Z0RyYXdcIl0uZW5hYmxlKCk7XHJcblx0XHRpZiAoR2FtZUNvbmZpZy5zdGF0KSBMYXlhLlN0YXQuc2hvdygpO1xyXG5cdFx0TGF5YS5hbGVydEdsb2JhbEVycm9yID0gdHJ1ZTtcclxuXHJcblx0XHQvL+a/gOa0u+i1hOa6kOeJiOacrOaOp+WItu+8jHZlcnNpb24uanNvbueUsUlEReWPkeW4g+WKn+iDveiHquWKqOeUn+aIkO+8jOWmguaenOayoeacieS5n+S4jeW9seWTjeWQjue7rea1geeoi1xyXG5cdFx0TGF5YS5SZXNvdXJjZVZlcnNpb24uZW5hYmxlKFwidmVyc2lvbi5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vblZlcnNpb25Mb2FkZWQpLCBMYXlhLlJlc291cmNlVmVyc2lvbi5GSUxFTkFNRV9WRVJTSU9OKTtcclxuXHR9XHJcblxyXG5cdG9uVmVyc2lvbkxvYWRlZCgpOiB2b2lkIHtcclxuXHRcdC8v5r+A5rS75aSn5bCP5Zu+5pig5bCE77yM5Yqg6L295bCP5Zu+55qE5pe25YCZ77yM5aaC5p6c5Y+R546w5bCP5Zu+5Zyo5aSn5Zu+5ZCI6ZuG6YeM6Z2i77yM5YiZ5LyY5YWI5Yqg6L295aSn5Zu+5ZCI6ZuG77yM6ICM5LiN5piv5bCP5Zu+XHJcblx0XHRMYXlhLkF0bGFzSW5mb01hbmFnZXIuZW5hYmxlKFwiZmlsZWNvbmZpZy5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vbkNvbmZpZ0xvYWRlZCkpO1xyXG5cdH1cclxuXHJcblx0b25Db25maWdMb2FkZWQoKTogdm9pZCB7XHJcblxyXG5cdFx0dGhpcy5pbml0RGF0YSgpO1xyXG5cdFx0Ly/liqDovb1JREXmjIflrprnmoTlnLrmma9cclxuXHRcdEdhbWVDb25maWcuc3RhcnRTY2VuZSAmJiBMYXlhLlNjZW5lLm9wZW4oR2FtZUNvbmZpZy5zdGFydFNjZW5lKTtcclxuXHR9XHJcblxyXG5cdC8qKuWIneWni+WMllNESyAqL1xyXG5cdGFzeW5jIGluaXREYXRhKCkge1xyXG5cdFx0Lyoq6ZqQ6JeP5ZCv5Yqo5bGPICovXHJcblx0XHRBcHBTZGsuSS5oaWRlU3BsYXNoKClcclxuXHRcdC8qKuWIneWni+WMlmFkayDojrflj5ZhcHDphY3nva7kv6Hmga8gKi9cclxuXHRcdEFwcFNkay5JLmluaXQoKTtcclxuXHRcdC8qKumihOWKoOi9veinhumikSAqL1xyXG5cdFx0QWRNYW5hZ2VyLkkuaW5pdCgpO1xyXG5cdFx0Lyoq6I635Y+W57qi5YyF6YWN572uICDliJ3lp4vljJbmlbDmja4gKi9cclxuXHRcdGF3YWl0IFJlZHBhY2tldE1vZGVsLkkuaW5pdCgpO1xyXG5cdFx0Lyoq5Yid5aeL5YyW5pGH5LiA5pGH55qE5pWw5o2uICovXHJcblx0XHRhd2FpdCBTaGFrZU1vZGVsLkkuaW5pdCgpXHJcblx0fVxyXG59XHJcbi8v5r+A5rS75ZCv5Yqo57G7XHJcbm5ldyBNYWluKCk7XHJcbiIsImltcG9ydCBSZWRwYWNrZXRNb2RlbCBmcm9tIFwiLi9zZGsvbW9kZWwvUmVkcGFja2V0TW9kZWxcIjtcbmltcG9ydCB7IEV2ZW50Q2VudGVyIH0gZnJvbSBcIi4vZXZlbnQvRXZlbnRDZW50ZXJcIjtcbmltcG9ydCB7IEV2ZW50RW51bSB9IGZyb20gXCIuL2V2ZW50L0V2ZW50RW51bVwiO1xuLyoqXG4gKiDkuLvnlYzpnaIgIOmHkeW4gemHkeminVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWREcmF3YWwgZXh0ZW5kcyBMYXlhLlNjcmlwdCB7XG4gICAgLyoqIEBwcm9wIHtuYW1lOmNvaW5sYWIsIHRpcHM6XCLph5HluIFcIiwgdHlwZTpOb2RlfSovXG4gICAgY29pbmxhYjogTGF5YS5MYWJlbDtcbiAgICAvKiogQHByb3Age25hbWU6dGlwbGFiLCB0aXBzOlwi5o+Q56S6XCIsIHR5cGU6Tm9kZX0qL1xuICAgIHRpcGxhYjogTGF5YS5MYWJlbDtcblxuICAgIHByaXZhdGUgdG90YWxDb2luOiBudW1iZXIgPSAxMTA7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfVxuICAgIG9uU3RhcnQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhcigpO1xuICAgICAgICAvLyB0aGlzLnRpcGxhYi52aXNpYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIG9uRW5hYmxlKCkge1xuICAgICAgICBFdmVudENlbnRlci5hZGQoRXZlbnRFbnVtLkFQUF9TSE9XLCB0aGlzLCB0aGlzLnVwZGF0ZVN0YXIpO1xuICAgICAgICBFdmVudENlbnRlci5hZGQoRXZlbnRFbnVtLlVQREFURV9DT0lOLCB0aGlzLCB0aGlzLnVwZGF0ZVN0YXIpO1xuICAgIH1cblxuICAgIG9uRGlzYWJsZSgpIHtcbiAgICAgICAgRXZlbnRDZW50ZXIucmVtb3ZlKEV2ZW50RW51bS5BUFBfU0hPVywgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICAgICAgRXZlbnRDZW50ZXIucmVtb3ZlKEV2ZW50RW51bS5VUERBVEVfQ09JTiwgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICB9XG5cbiAgICBhc3luYyB1cGRhdGVTdGFyKCkge1xuICAgICAgICBsZXQgY29pbiA9IGF3YWl0IFJlZHBhY2tldE1vZGVsLkkuZ2V0VG90YWxDb2luKCk7XG4gICAgICAgIC8vIGxldCBjb2luID0gMTAwMFxuICAgICAgICB0aGlzLnRvdGFsQ29pbiA9IGNvaW47XG4gICAgICAgIHRoaXMuY29pbmxhYi50ZXh0ID0gJycgKyBjb2luO1xuICAgICAgICBsZXQgc3RyID0gJ+WPr+aPkOeOsCc7XG4gICAgICAgIC8qKuabtOaWsOS4i+S4i+S4gOasoeaPkOeOsOeahOmineW6piAqL1xuICAgICAgICBsZXQgbmV4dERyYXdhbCA9IGF3YWl0IFJlZHBhY2tldE1vZGVsLkkubWluV2l0aERyYXdhbCgpO1xuICAgICAgICBpZiAodGhpcy50b3RhbENvaW4gPiAwKSB7XG4gICAgICAgICAgICBsZXQgbGVmdENvaW4gPSBuZXh0RHJhd2FsIC0gdGhpcy50b3RhbENvaW47XG4gICAgICAgICAgICBpZiAobGVmdENvaW4gPiAwKVxuICAgICAgICAgICAgICAgIHN0ciA9IGDov5jlt64keyhsZWZ0Q29pbiAvIDEwMDAwKS50b0ZpeGVkKDMpfemHkemineWPr+aPkOeOsGA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aXBsYWIudGV4dCA9IHN0cjtcbiAgICAgICAgdGhpcy50aXBsYWIudmlzaWJsZSA9IEJvb2xlYW4obmV4dERyYXdhbCk7XG4gICAgfVxufSIsImltcG9ydCB7IHVpIH0gZnJvbSBcIi4vdWkvbGF5YU1heFVJXCI7XG5pbXBvcnQgQWRNYW5hZ2VyIGZyb20gXCIuL3Nkay9BZE1hbmFnZXJcIjtcbmltcG9ydCB7IEFwcFNkayB9IGZyb20gXCIuL3Nkay9BcHBTZGtcIjtcbmltcG9ydCBTaGFrZU1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9TaGFrZU1vZGVsXCI7XG5pbXBvcnQgUmVkcGFja2V0TW9kZWwgZnJvbSBcIi4vc2RrL21vZGVsL1JlZHBhY2tldE1vZGVsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RTY2VuZSBleHRlbmRzIHVpLlRlc3RTY2VuZVVJIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLy/lhbPpl63lpJrngrnop6bmjqfvvIzlkKbliJnlsLHml6DmlYzkuoZcbiAgICAgICAgTGF5YS5Nb3VzZU1hbmFnZXIubXVsdGlUb3VjaEVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLVRlc3RTY2VuZS0tLS0tLS0nKVxuICAgICAgICB0aGlzLk5hdGl2ZUFELnZpc2libGUgPSBmYWxzZTtcblxuICAgIH1cblxuICAgIG9uRW5hYmxlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ0blNlcnZlci5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5TZXJ2ZXIpO1xuICAgICAgICB0aGlzLmJ0bkRyYXdhbC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5QZXJzb25hbCk7XG4gICAgICAgIHRoaXMuYnRuSW52aXRlLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuaW52aXRhdGlvbik7XG4gICAgICAgIHRoaXMuYnRuX3NoYWtlLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMudG91Y2hTaGFrZSk7XG4gICAgICAgIHRoaXMuYnRuUHJlbG9hZEFELm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMucHJlbG9hZEFEKTtcbiAgICAgICAgdGhpcy5idG5TaG93QmFubmVyLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuc2hvd0Jhbm5lcik7XG4gICAgICAgIHRoaXMuYnRuU2hvd0Z1bGxBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dGdWxsQWQpO1xuICAgICAgICB0aGlzLmJ0blNob3dOYXRpdmVBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dOYXRpdmVBZCk7XG4gICAgICAgIHRoaXMuYnRuU2hvd0ludGVyQWQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5zaG93SW50ZXJBZCk7XG4gICAgICAgIHRoaXMuYnRuUmV3YXJkQWQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5zaG93UmV3YXJkQWQpO1xuICAgICAgICB0aGlzLmJ0blJlZHBhY2tldC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5SZWRwYWNrZXQpO1xuXG4gICAgfVxuXG4gICAgLyoq6aKE5Yqg6L295bm/5ZGKICovXG4gICAgYXN5bmMgcHJlbG9hZEFEKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tcHJlbG9hZEFELS0tLS0tLScpXG4gICAgICAgIC8vIGF3YWl0IEFkTWFuYWdlci5JLmluaXQoKTtcbiAgICAgICAgTXlCcmlkZ2UudGVzdFJldHVybihmdW5jdGlvbiAoLi4uYXJyYXkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiLS0tLS0tLXdlYi0tLS0tLS0tb25DbGljay0tLS0tPj5jb2NvcyBKUy0tLS0tLS1NeUJyaWRnZS50ZXN0UmV0dXJuLS0tLS0tXCIgKyBKU09OLnN0cmluZ2lmeShhcnJheSkpO1xuXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKuaYvuekuuWFqOWxj+W5v+WRiiAqL1xuICAgIHNob3dGdWxsQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93RnVsbEFkLS0tLS0tLScpXG4gICAgICAgIC8vIEFkTWFuYWdlci5JLnNob3dGdWxsQWQoKTtcbiAgICAgICAgdmFyIHJldCA9IE15QnJpZGdlLm1hcFRvU3RyaW5nKHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBcImNvdW50XCI6IDIsIFwidGl0bGVcIjogW3sgXCJuYW1lXCI6IFwibm5uXCIsIFwidmFsdWVcIjogXCJubm52YWx1ZVwiLCBcImRlZmF1bHRfc2hvd1wiOiAxIH1cbiAgICAgICAgICAgICAgICAgICAgLCB7IFwibmFtZVwiOiBcIm1tbVwiLCBcInZhbHVlXCI6IFwibW1tdmFsdWVcXFwiYWFzZGFzZFwiIH1dXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiLS0tLS0tLXdlYi0tLS0tLS0tb25DbGljay0tLS0tPj5jb2NvcyBKUy0tLS0tLS1NeUJyaWRnZS5tYXBUb1N0cmluZy0tLS0tLVwiICsgSlNPTi5zdHJpbmdpZnkocmV0KSk7XG4gICAgfVxuICAgIC8qKuaYvuekumJhbm5lciAqL1xuICAgIHNob3dCYW5uZXIoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93QmFubmVyLS0tLS0tLScpXG4gICAgICAgIEFkTWFuYWdlci5JLnNob3dCYW5uZXIoKTtcbiAgICB9XG5cbiAgICAvKirkv6Hmga/mtYHlub/lkYogKi9cbiAgICBzaG93TmF0aXZlQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93TmF0aXZlQWQtLS0tLS0tJylcbiAgICAgICAgdGhpcy5OYXRpdmVBRC52aXNpYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKirmj5LlsY/lub/lkYogKi9cbiAgICBzaG93SW50ZXJBZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXNob3dJbnRlckFkLS0tLS0tLScpXG4gICAgICAgIFxuICAgICAgICBBZE1hbmFnZXIuSS5zaG93SW50ZXJBZCgpO1xuICAgIH1cbiAgICAvKirmv4DlirHop4bpopHlub/lkYogKi9cbiAgICBhc3luYyBzaG93UmV3YXJkQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93UmV3YXJkQWQtLS0tLS0tJylcbiAgICAgICAgXG4gICAgICAgIGF3YWl0IEFkTWFuYWdlci5JLnNob3dSZXdhcmRBZCgpO1xuICAgICAgICAvKirmiJDlip/lkI7miafooYzlr7nlupTnmoTlpZblirEgKi9cbiAgICB9XG4gICAgLyoq5oSP6KeB5Y+N6aaIICovXG4gICAgb3BlblNlcnZlcigpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLW9wZW5TZXJ2ZXItLS0tLS0tJylcbiAgICAgICAgQXBwU2RrLkkuZmVlZGJhY2soKTtcbiAgICB9XG5cblxuICAgIG9wZW5SZWRwYWNrZXQoKSB7XG4gICAgICAgIFJlZHBhY2tldE1vZGVsLkkuY2hlY2tSZWRwYWNrZXQoKTtcbiAgICAgICAgY29uc29sZS5sb2coJ+e6ouWMheiOt+WPlue7k+aenO+8mmN1clJlZHBhY2tldCcgKyBSZWRwYWNrZXRNb2RlbC5JLmN1clJlZHBhY2tldClcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ+e6ouWMheiOt+WPlue7k+aenO+8micgKyBKU09OLnN0cmluZ2lmeShkYXRhKSlcbiAgICAgICAgLy8gVmlld01hbmFnZXIuSS5vcGVuUG9wd2luKFJlZHBhY2tldFBvcHdpbiwgMCk7XG4gICAgfVxuXG4gICAgLyoq5omT5byA5Liq5Lq65Lit5b+DICovXG4gICAgb3BlblBlcnNvbmFsKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tb3BlblNlcnZlci0tLS0tLS0nKVxuICAgICAgICBBcHBTZGsuSS5wZXJzb25hbCgwKTtcbiAgICB9XG4gICAgLyoq6YKA6K+35aW95Y+LICovXG4gICAgaW52aXRhdGlvbigpIHtcbiAgICAgICAgQXBwU2RrLkkuaW52aXRhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDFcdOmHkeW4gVxuICAgIDJcdOa/gOWKseinhumikeWQjumHkeW4gVxuICAgIDNcdDQgNSA2IDcg5ri45oiP5Lit5a+55bqU55qE6YGT5YW3XG4gICAgOFx056m6XG4gICAgICovXG4gICAgdG91Y2hTaGFrZSgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXRvdWNoU2hha2UtLS0tLS0tJylcbiAgICAgICAgLy8gdGhpcy5za2luLmJ0blNoYWtlQW5pLnBsYXkoMCk7XG4gICAgICAgIEFwcFNkay5JLnZpYnJhdGUoKTtcbiAgICAgICAgLy8gVmlld01hbmFnZXIuSS5zaG93TW9kYWwoSGludE1vZGFsLCAnIOS7iuK9h+asoeaVsOW3suK9pOWujO+8jOivt+aYjuK9h+WGjeadpScpO1xuICAgICAgICAvLyB0aGlzLnNraW4uaGFuZEFuaS5zdG9wKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiAxLuWbnuWOu+aYn+aYnyDpgZPlhbcgXG4gICAgICAgICAqIDIu57qi5YyFICAg55u05o6l6I635b6X4r6m5biB77yb5oiW6ICF55u05o6l5by55r+A5Yqx6KeG6aKR5ZCO77yM6I635b6X4r6m5biBXG4gICAgICAgICAqIDMu5peg6YGT5YW3XG4gICAgICAgICAqIOebtOaOpeWxleK9sOaPkuWxj1xuICAgICAgICAgKiAgKi9cbiAgICAgICAgbGV0IGRhdGEgPSBTaGFrZU1vZGVsLkkuZ2V0U2hha2VUeXBlKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCfmkYfkuIDmkYfojrflj5bnu5PmnpzvvJonICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuO1xuICAgICAgICBsZXQgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAvKiogJ+iwouiwouWPguS4ju+8jOS4i+asoeWlvei/kO+8gScqLztcbiAgICAgICAgICAgICAgICBBZE1hbmFnZXIuSS5zaG93SW50ZXJBZCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29pbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHRoaXMud2F0Y2hBRENvaW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb3BzKGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UHJvcHMoZGF0YSkge1xuICAgICAgICBsZXQgYm9vc3RlcjtcbiAgICAgICAgbGV0IHJld2FyZE51bSA9IGRhdGEubnVtO1xuICAgICAgICBsZXQgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIOWkhOeQhua4uOaIj+S4reeahOmBk+WFt+aYvuekulxuICAgICAgICAgKi9cbiAgICAgICAgLy8gc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIC8vICAgICBjYXNlIDQ6XG4gICAgICAgIC8vICAgICAgICAgYm9vc3RlciA9IEJvb3N0ZXJUeXBlLlJlbW92ZTtcbiAgICAgICAgLy8gICAgICAgICBicmVhaztcbiAgICAgICAgLy8gICAgIGNhc2UgNjpcbiAgICAgICAgLy8gICAgICAgICBib29zdGVyID0gQm9vc3RlclR5cGUuQ2hhbmdlO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyAgICAgY2FzZSA1OlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5SZWZyZXNoO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyAgICAgY2FzZSA3OlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5SYW5kUmVtb3ZlO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyAgICAgY2FzZSAzOlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5TdGFyO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIFZpZXdNYW5hZ2VyLkkub3BlblBvcHdpbihSZWNlaXZlUHJvcHNQb3B3aW4sIGJvb3N0ZXIsIHJld2FyZE51bSk7XG5cbiAgICB9XG4gICAgLyoqXG4gICAgICog55yL5bm/5ZGK6I635b6X57qi5YyFXG4gICAgICovXG4gICAgYXN5bmMgd2F0Y2hBRENvaW4oKSB7XG4gICAgICAgIGF3YWl0IEFkTWFuYWdlci5JLnNob3dSZXdhcmRBZCgpO1xuICAgICAgICB0aGlzLmdldENvaW4oKTtcbiAgICB9XG4gICAgLyoq55u05o6l6I635b6X57qi5YyFICovXG4gICAgZ2V0Q29pbigpIHtcbiAgICAgICAgLy9cYuWIt+aWsOaAu+mHkeW4gVxuICAgICAgICAvLyBBcHBNYW5hZ2VyLkkucmVkcGFja2V0LmdldFJlcGFja2V0KClcbiAgICAgICAgLy8gVmlld01hbmFnZXIuSS5vcGVuUG9wd2luKFJlZFBhY2tldFJld2FyZCwgMik7XG4gICAgfVxufSIsImltcG9ydCB7IEV2ZW50RW51bSB9IGZyb20gXCIuL0V2ZW50RW51bVwiO1xuXG4vKlxuKiBuYW1lO1xuKi9cbmV4cG9ydCBjbGFzcyBFdmVudENlbnRlciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBMYXlhLkV2ZW50RGlzcGF0Y2hlcjtcbiAgICBwcml2YXRlIHN0YXRpYyBnZXQgSSgpOiBMYXlhLkV2ZW50RGlzcGF0Y2hlciB7XG4gICAgICAgIHdpbmRvd1snZXYnXSA9IHRoaXMuX2luc3RhbmNlO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IExheWEuRXZlbnREaXNwYXRjaGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGVtaXQoZXZlbnQ6IEV2ZW50RW51bSwgLi4uYXJncykge1xuICAgICAgICB0aGlzLkkuZXZlbnQoZXZlbnQudG9TdHJpbmcoKSwgYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGQodHlwZTogRXZlbnRFbnVtLCBjYWxsZXI6IGFueSwgbGlzdGVuZXI6IEZ1bmN0aW9uLCBhcmdzPzogQXJyYXk8YW55Pikge1xuICAgICAgICB0aGlzLkkub24odHlwZS50b1N0cmluZygpLCBjYWxsZXIsIGxpc3RlbmVyLCBhcmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlbW92ZSh0eXBlOiBFdmVudEVudW0sIGNhbGxlcjogYW55LCBsaXN0ZW5lcjogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5JLm9mZih0eXBlLnRvU3RyaW5nKCksIGNhbGxlciwgbGlzdGVuZXIpO1xuICAgIH1cbn0iLCJleHBvcnQgZW51bSBFdmVudEVudW0ge1xuXG5cdENIRUNLX1JFRFBBQ0tFVCA9IDxhbnk+J2NoZWNrX3JlZHBhY2tldCcsXG5cdEFQUF9TSE9XID0gPGFueT4nYXBwLnNob3cnLFxuXHRBUFBfSElERSA9IDxhbnk+J2FwcC5oaWRlJyxcblxuXG5cdFVQREFURV9DT0lOID0gPGFueT4ndXBkYXRlLmNvaW4nLFxuXG59IiwiaW1wb3J0IFRUQWRTZGsgZnJvbSBcIi4vVFRBZFNka1wiO1xyXG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFkTWFuYWdlciB7XHJcbiAgICBwcml2YXRlIGxhc3RWaWRlb1RpbWU6IG51bWJlcjtcclxuXHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHRoaXMucHJlbG9hZFJld2FyZEFkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwcmVsb2FkUmV3YXJkQWQoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLnNob3dSZXdhcmRWaWRlb0FkKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dSZXdhcmRBZCgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gYXdhaXQgVFRBZFNkay5JLnNob3dSZXdhcmRWaWRlb0FkKCk7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdFZpZGVvVGltZSA9IExheWEudGltZXIuY3VyclRpbWVyO1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJldCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJlbG9hZEZ1bGxBZCgpIHtcclxuICAgICAgICBUVEFkU2RrLkkubG9hZEZ1bGxTY3JlZW5WaWRlb0FkKCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByZWxvYWRJbnRlckFkKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5sb2FkRnVsbFNjcmVlblZpZGVvQWQoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd0Z1bGxBZCgpIHtcclxuICAgICAgICAvLyBjb25zb2xlLndhcm4oJ2Z1bGwnKTtcclxuICAgICAgICAvLyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJldCA9IGF3YWl0IFRUQWRTZGsuSS5sb2FkRnVsbFNjcmVlblZpZGVvQWQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcmVsb2FkRnVsbEFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEZ1bGxBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dJbnRlckFkKCkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUud2FybignZnVsbCcpO1xyXG4gICAgICAgIC8vIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gYXdhaXQgVFRBZFNkay5JLnNob3dJbnRlcmFjdGlvbkV4cHJlc3NBZCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRJbnRlckFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEludGVyQWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgY2hlY2tWaWRlb0luQ2QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFZpZGVvVGltZSAmJiAoTGF5YS50aW1lci5jdXJyVGltZXIgLSB0aGlzLmxhc3RWaWRlb1RpbWUgPD0gMzAwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dCYW5uZXIoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWRCYW5uZXJFeHByZXNzQWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlQmFubmVyKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5oaWRlQWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93TmF0aXZlQWQoeCwgeSwgdywgaCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5sb2FkTmF0aXZlRXhwcmVzc0FkKCB4LCB5LCB3LCBoKTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlTmF0aXZlQWQoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmhpZGVBZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIHN0YXRpYyBnZXQgSSgpOiBBZE1hbmFnZXIge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoQWRNYW5hZ2VyKTtcclxuICAgIH1cclxufVxyXG5cclxuIiwiaW1wb3J0IEJhc2VBcHBTZGsgZnJvbSBcIi4vQmFzZUFwcFNka1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5kcm9pZEFwcFNkayBleHRlbmRzIEJhc2VBcHBTZGsge1xyXG4gICAgZ2V0IHN5c3RlbSgpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBjYWxsQXBwKGNtZDogc3RyaW5nLCAuLi5wYXJhbXMpIHtcclxuICAgICAgICB0aGlzLmJyaWRnZSAmJiB0aGlzLmJyaWRnZS5jYWxsKGNtZCwgLi4ucGFyYW1zKTtcclxuICAgICAgICAvLyB0aGlzLmJyaWRnZSAmJiBhbGVydChKU09OLnN0cmluZ2lmeSh0aGlzLmJyaWRnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxBcHBXaXRoQmFjayhjYWxsQmFjazogRnVuY3Rpb24sIGNtZDogc3RyaW5nLCAuLi5wYXJhbXMpIHtcclxuICAgICAgICB0aGlzLmJyaWRnZSAmJiB0aGlzLmJyaWRnZS5jYWxsV2l0aEJhY2soY2FsbEJhY2ssIGNtZCwgLi4ucGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGJyaWRnZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYnJpZGdlIHx8ICh0aGlzLl9icmlkZ2UgPSB0aGlzLmNyZWF0ZUNsYXNzKCdjb20ucHVjaGkuc2RrZGVtby5KU0JyaWRnZScpKTtcclxuICAgIH1cclxufSIsImltcG9ydCBJb3NBcHBTZGsgZnJvbSBcIi4vSW9zQXBwU2RrXCI7XG5pbXBvcnQgQW5kcm9pZEFwcFNkayBmcm9tIFwiLi9BbmRyb2lkQXBwU2RrXCI7XG5pbXBvcnQgQmFzZUFwcFNkayBmcm9tIFwiLi9CYXNlQXBwU2RrXCI7XG5cbmV4cG9ydCBjbGFzcyBBcHBTZGsge1xuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogQmFzZUFwcFNkaztcbiAgICBzdGF0aWMgZ2V0IEkoKTogQmFzZUFwcFNkayB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGxldCBjb25jaENvbmZpZyA9IHdpbmRvd1snY29uY2hDb25maWcnXTtcbiAgICAgICAgICAgIGxldCBvcyA9IGNvbmNoQ29uZmlnICYmIGNvbmNoQ29uZmlnLmdldE9TKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKG9zKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcIkNvbmNoLWlvc1wiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBJb3NBcHBTZGs7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJDb25jaC1hbmRyb2lkXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IEFuZHJvaWRBcHBTZGs7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IEJhc2VBcHBTZGs7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2luZG93WydBcHBTZGsnXSA9IHRoaXMuX2luc3RhbmNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgICB9XG59IiwiaW1wb3J0IEFkZEdvbGREYXRhIGZyb20gXCIuL3Nka0RhdGEvQWRkR29sZERhdGFcIjtcclxuaW1wb3J0IE15Q29pbkRhdGEgZnJvbSBcIi4vc2RrRGF0YS9NeUNvaW5EYXRhXCI7XHJcbmltcG9ydCB7IEdvbGRDb25maWdEYXRhIH0gZnJvbSBcIi4vc2RrRGF0YS9Hb2xkQ29uZmlnRGF0YVwiO1xyXG5cclxuLyoqIOi/lOWbnuWPguaVsOexu+WeiyAqL1xyXG5pbnRlcmZhY2UgSUFwcFJlc3VsdDxUPiB7XHJcbiAgICAvKiog6ZSZ6K+v56CBICovXHJcbiAgICBjb2RlPzogbnVtYmVyO1xyXG4gICAgLyoqIOi/lOWbnuaVsOaNriAqL1xyXG4gICAgZGF0YT86IFQ7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNlQXBwU2RrIHtcclxuICAgIHByb3RlY3RlZCBfYnJpZGdlOiBhbnk7XHJcbiAgICBwcml2YXRlIG5ldE9uQXJyOiBBcnJheTxGdW5jdGlvbj4gPSBbXTtcclxuICAgIHByaXZhdGUgbmV0T2ZmQXJyOiBBcnJheTxGdW5jdGlvbj4gPSBbXTtcclxuICAgIHByaXZhdGUgX3dpZHRoOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIF9oZWlnaHQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgX2NoYW5uZWw6IHN0cmluZztcclxuICAgIHByaXZhdGUgX3ZlcnNpb246IHN0cmluZztcclxuICAgIHByaXZhdGUgX2xldmVsOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIHBhbmdvbGluSWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBhZG5ldElkOiBzdHJpbmc7XHJcblxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICBsZXQgY29uY2ggPSB3aW5kb3dbJ2NvbmNoJ107XHJcbiAgICAgICAgaWYgKGNvbmNoKSB7XHJcbiAgICAgICAgICAgIGNvbmNoLnNldE5ldHdvcmtFdnRGdW5jdGlvbih0aGlzLm5ldHdvcmtFdnRGdW5jLmJpbmQodGhpcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhbGxBcHAoJ3NldEFwcENhbGxiYWNrJywgMSwgJ0FwcFNkay5vblNob3coKScpO1xyXG4gICAgICAgIHRoaXMuY2FsbEFwcCgnc2V0QXBwQ2FsbGJhY2snLCAyLCAnQXBwU2RrLm9uSGlkZSgpJyk7XHJcbiAgICAgICAgdGhpcy5nZXRTeXN0ZW1JbmZvKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U3lzdGVtSW5mbygpIHtcclxuICAgICAgICB0aGlzLmNhbGxBcHBXaXRoQmFjayhyZXQgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tZ2V0U3lzdGVtSW5mby0tLS0tLS0nICsgSlNPTi5zdHJpbmdpZnkocmV0KSlcclxuICAgICAgICAgICAgbGV0IHsgdywgaCwgdmVyc2lvbk5hbWUsIGNoYW5uZWwsIHBhbmdvbGluLCBhZG5ldCwgbGV2ZWwgfSA9IEpTT04ucGFyc2UocmV0KTtcclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB3O1xyXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSBoO1xyXG4gICAgICAgICAgICB0aGlzLl92ZXJzaW9uID0gdmVyc2lvbk5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWwgPSBjaGFubmVsO1xyXG4gICAgICAgICAgICB0aGlzLnBhbmdvbGluSWQgPSBwYW5nb2xpbjtcclxuICAgICAgICAgICAgdGhpcy5hZG5ldElkID0gYWRuZXQ7XHJcbiAgICAgICAgICAgIHRoaXMuX2xldmVsID0gbGV2ZWw7XHJcbiAgICAgICAgfSwgJ2dldFN5c3RlbUluZm8nLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2hvdygpIHtcclxuICAgICAgICAvLyBFdmVudENlbnRlci5lbWl0KEV2ZW50RW51bS5BUFBfU0hPVyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkhpZGUoKSB7XHJcbiAgICAgICAgLy8gRXZlbnRDZW50ZXIuZW1pdChFdmVudEVudW0uQVBQX0hJREUpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2aWJyYXRlKCkge1xyXG4gICAgICAgIHRoaXMuY2FsbEFwcCgnb3BlblN5c3RlbUZ1bicsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVTcGxhc2goKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsQXBwKCdoaWRlU3BsYXNoJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoq5by55Ye65o+Q546wICovXHJcbiAgICB3aXRoRHJhd2FsKCkge1xyXG4gICAgICAgIHRoaXMuY2FsbEFwcCgnd2l0aERyYXdhbCcpO1xyXG4gICAgfVxyXG4gICAgLyoq5oSP6KeB5Y+N6aaIICovXHJcbiAgICBmZWVkYmFjaygpIHtcclxuICAgICAgICB0aGlzLmNhbGxBcHAoJ2ZlZWRiYWNrJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBrZXkg6buY6K6kMCDvvIznrb7liLAgMVxyXG4gICAgICovXHJcbiAgICBwZXJzb25hbChrZXkgPSAwKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsQXBwKCdwZXJzb25hbCcsIGtleSk7XHJcbiAgICB9XHJcbiAgICAvKirpgoDor7flpb3lj4sqL1xyXG4gICAgaW52aXRhdGlvbigpIHtcclxuICAgICAgICB0aGlzLmNhbGxBcHAoJ2ludml0YXRpb24nKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY3VycmVudFNodXQodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuY2FsbEFwcCgnY3VycmVudFNodXQnLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPlumHkeW4gemFjeihqFxyXG4gICAgICogQHBhcmFtIGtleSAx57qi5YyFICAgMiDmkYfkuIDmkYfnuqLljIVcclxuICAgICAqL1xyXG5cclxuICAgIGFzeW5jICBnZXRHYW1lQ29uZmlnKGtleTogbnVtYmVyID0gMSkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uQ2FsbEJhY2soJ2dldEdhbWVDb25maWcnLCBrZXkpXHJcbiAgICAgICAgR29sZENvbmZpZ0RhdGEuSS5pbml0RGF0YShyZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDopoHmsYLlj5HmlL7ph5HluIFcclxuICAgICAqIEBwYXJhbSBrZXkgMee6ouWMhVxyXG4gICAgICovXHJcblxyXG4gICAgYXN5bmMgYWRkR29sZChrZXk6IG51bWJlciA9IDEpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5vbkNhbGxCYWNrKCdhZGRHb2xkJywga2V5KTtcclxuICAgICAgICBBZGRHb2xkRGF0YS5pbml0RGF0YShyZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBhc3luYyBteUNvaW4oKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25DYWxsQmFjaygnbXlDb2luJylcclxuICAgICAgICBNeUNvaW5EYXRhLmluaXREYXRhKHJlc3VsdCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuXHJcbiAgICB9XHJcbiAgICAvKirojrflj5blvZPliY3mj5DnjrDnmoTmoaPkvY0gKi9cclxuICAgIGFzeW5jIG1pbldpdGhEcmF3YWwoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25DYWxsQmFjaygnbWluV2l0aERyYXdhbCcpO1xyXG4gICAgICAgIGlmICghQm9vbGVhbihwYXJzZUludChyZXN1bHQuY29kZSArICcnKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHJlc3VsdC5kYXRhWydtb25leSddKSAqIDEwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgb25DYWxsQmFjayhjbWQ6IHN0cmluZywgLi4ucGFyYW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPElBcHBSZXN1bHQ8YW55W10+Pihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2FsbEFwcFdpdGhCYWNrKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXMgPSBKU09OLnBhcnNlKHJlcylcclxuICAgICAgICAgICAgICAgIC8vIHJlcyA9IHsgY29kZTogMTAwMCB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlcy5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7IGNvZGU6IHJlcy5jb2RlLCBkYXRhOiByZXMuZGF0YSB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7IGNvZGU6IHJlcy5jb2RlIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIGNtZCwgLi4ucGFyYW1zKTtcclxuICAgICAgICB9KVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGxBcHAoY21kOiBzdHJpbmcsIC4uLnBhcmFtcykge1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxBcHBXaXRoQmFjayhjYWxsQmFjazogRnVuY3Rpb24sIGNtZDogc3RyaW5nLCAuLi5wYXJhbXMpIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG5ldHdvcmtFdnRGdW5jKHR5cGU6IG51bWJlcikge1xyXG4gICAgICAgIGxldCBmdW5jQXJyO1xyXG4gICAgICAgIGlmICh0eXBlID09IDApIHtcclxuICAgICAgICAgICAgZnVuY0FyciA9IHRoaXMubmV0T2ZmQXJyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSA1KSB7XHJcbiAgICAgICAgICAgIGZ1bmNBcnIgPSB0aGlzLm5ldE9uQXJyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZnVuY0Fycikge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZ1bmNBcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGZ1bmNBcnJbaV0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbk5ldE9uKGZ1bmM6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5uZXRPbkFyci5wdXNoKGZ1bmMpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgb25OZXRPZmYoZnVuYzogRnVuY3Rpb24pIHtcclxuICAgICAgICB0aGlzLm5ldE9mZkFyci5wdXNoKGZ1bmMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsZXZlbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XHJcbiAgICB9XHJcbiAgICBnZXQgd2lkdGgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBoZWlnaHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdmVyc2lvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmVyc2lvbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2hhbm5lbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGJyaWRnZSgpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ2xhc3MobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvd1snUGxhdGZvcm1DbGFzcyddLmNyZWF0ZUNsYXNzKG5hbWUpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJhc2VBcHBTZGsgZnJvbSBcIi4vQmFzZUFwcFNka1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW9zQXBwU2RrIGV4dGVuZHMgQmFzZUFwcFNkayB7XHJcbiAgICBnZXQgc3lzdGVtKCkge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxBcHAoY21kOiBzdHJpbmcsIC4uLnBhcmFtcykge1xyXG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNtZCArPSAnOic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYnJpZGdlICYmIHRoaXMuYnJpZGdlLmNhbGwoY21kLCAuLi5wYXJhbXMpO1xyXG4gICAgICAgIC8vIHRoaXMuYnJpZGdlICYmIGFsZXJ0KEpTT04uc3RyaW5naWZ5KHRoaXMuYnJpZGdlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsbEFwcFdpdGhCYWNrKGNhbGxCYWNrOiBGdW5jdGlvbiwgY21kOiBzdHJpbmcsIC4uLnBhcmFtcykge1xyXG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNtZCArPSAnOic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYnJpZGdlICYmIHRoaXMuYnJpZGdlLmNhbGxXaXRoQmFjayhjYWxsQmFjaywgY21kLCAuLi5wYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgYnJpZGdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9icmlkZ2UgfHwgKHRoaXMuX2JyaWRnZSA9IHRoaXMuY3JlYXRlQ2xhc3MoJ0pTQnJpZGdlJykpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi9BZE1hbmFnZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmF0aXZlQWQgZXh0ZW5kcyBMYXlhLlNjcmlwdCB7XG4gICAgb25FbmFibGUoKTogdm9pZCB7XG4gICAgICAgIGxldCBnbG9iYWxQb2ludCA9IHRoaXMuaXRlbS5sb2NhbFRvR2xvYmFsKExheWEuUG9pbnQuRU1QVFksIHRydWUpO1xuICAgICAgICBBZE1hbmFnZXIuSS5zaG93TmF0aXZlQWQoZ2xvYmFsUG9pbnQueCwgZ2xvYmFsUG9pbnQueSwgdGhpcy5pdGVtLndpZHRoLCB0aGlzLml0ZW0uaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBvbkRpc2FibGUoKTogdm9pZCB7XG4gICAgICAgIEFkTWFuYWdlci5JLmhpZGVOYXRpdmVBZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGl0ZW0oKTogTGF5YS5WaWV3IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3duZXIgYXMgYW55O1xuICAgIH1cbn0iLCJpbXBvcnQgeyBBcHBTZGsgfSBmcm9tIFwiLi9BcHBTZGtcIjtcclxuaW1wb3J0IE9iamVjdEluc3RhbmNlIGZyb20gXCIuLi91aXRsL09iamVjdEluc3RhbmNlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUVEFkU2RrIHtcclxuICAgIGFzeW5jIHNob3dSZXdhcmRWaWRlb0FkKCBwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHc6IEFwcFNkay5JLndpZHRoLFxyXG4gICAgICAgICAgICBoOiBBcHBTZGsuSS5oZWlnaHQsXHJcbiAgICAgICAgICAgIHByZWxvYWRpbmc6IHByZWxvYWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpc0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEFwcFNkay5JLmNhbGxBcHBXaXRoQmFjayhyZXQgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHsgY29kZSwgbWVzc2FnZSB9ID0gSlNPTi5wYXJzZShyZXQpO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAtMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCdlcnJvcicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIC8qKifmmoLml6Dop4bpopHlub/lkYrvvIHmr4/ml6Uw54K56YeN572uJyovO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDIwMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDb21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoJ3VuQ29tcGxldGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgJ3Nob3dSZXdhcmRWaWRlb0FkJywgMSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkRnVsbFNjcmVlblZpZGVvQWQoIHByZWxvYWQ6IG51bWJlciA9IDApIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgcHJlbG9hZGluZzogcHJlbG9hZCxcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IGlzQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgQXBwU2RrLkkuY2FsbEFwcFdpdGhCYWNrKHJldCA9PiB7XHJcbiAgICAgICAgICAgIH0sICdsb2FkRnVsbFNjcmVlblZpZGVvQWQnLCAxLCBKU09OLnN0cmluZ2lmeShkYXRhKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWROYXRpdmVFeHByZXNzQWQoIHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcclxuICAgICAgICBsZXQgc2NhbGVYID0gQXBwU2RrLkkud2lkdGggLyBMYXlhLnN0YWdlLndpZHRoO1xyXG4gICAgICAgIGxldCBzY2FsZVkgPSBBcHBTZGsuSS5oZWlnaHQgLyBMYXlhLnN0YWdlLmhlaWdodDtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdzogd2lkdGggKiBzY2FsZVgsXHJcbiAgICAgICAgICAgIGg6IGhlaWdodCAqIHNjYWxlWSxcclxuICAgICAgICAgICAgbGVmdDogeCAqIHNjYWxlWCxcclxuICAgICAgICAgICAgdG9wOiB5ICogc2NhbGVZXHJcbiAgICAgICAgfVxyXG4gICAgICAgIEFwcFNkay5JLmNhbGxBcHBXaXRoQmFjayhyZXQgPT4ge1xyXG4gICAgICAgIH0sICdsb2FkTmF0aXZlRXhwcmVzc0FkJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEJhbm5lckV4cHJlc3NBZCgpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdzogQXBwU2RrLkkud2lkdGgsXHJcbiAgICAgICAgICAgIGg6IEFwcFNkay5JLndpZHRoICogOTAgLyA2MDAsICBcclxuICAgICAgICB9XHJcbiAgICAgICAgQXBwU2RrLkkuY2FsbEFwcFdpdGhCYWNrKHJldCA9PiB7XHJcbiAgICAgICAgfSwgJ2xvYWRCYW5uZXJFeHByZXNzQWQnLCAyLCBKU09OLnN0cmluZ2lmeShkYXRhKSlcclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWQoKSB7XHJcbiAgICAgICAgQXBwU2RrLkkuY2FsbEFwcCgnY2xvc2VfYWR2ZXJfZGlhbG9nJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKCBwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHc6IEFwcFNkay5JLndpZHRoICogMC44LFxyXG4gICAgICAgICAgICBoOiBBcHBTZGsuSS5oZWlnaHQsXHJcbiAgICAgICAgICAgIHByZWxvYWRpbmc6IHByZWxvYWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpc0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEFwcFNkay5JLmNhbGxBcHBXaXRoQmFjayhyZXQgPT4ge1xyXG4gICAgICAgICAgICB9LCAnc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgXHJcblxyXG4gICAgc3RhdGljIGdldCBJKCk6IFRUQWRTZGsge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoVFRBZFNkaykgYXMgVFRBZFNkaztcclxuICAgIH1cclxufSIsImltcG9ydCB7IEFwcFNkayB9IGZyb20gXCIuL0FwcFNka1wiO1xyXG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcclxuLyoqXHJcbiAqIOS4iuaKpeeDreS6keWfi+eCueK9h+W/l1xyXG4gKiDlhbfkvZPnmoTmiZPngrnpnIDopoHot5/ov5DokKXogZTns7tcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRyYWNraW5nU2RrIHtcclxuICAgIGRvdChrZXk6IHN0cmluZykge1xyXG4gICAgICAgIEFwcFNkay5JLmNhbGxBcHAoJ3RyYWNraW5nX2V2ZW50Jywga2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEkoKTogVHJhY2tpbmdTZGsge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoVHJhY2tpbmdTZGspIGFzIFRyYWNraW5nU2RrO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBUcmFja2luZ0tleSB7XHJcbiAgICBSZWRQYWNrMSA9ICdldmVudF81JyxcclxuICAgIFJlZFBhY2s1ID0gJ2V2ZW50XzYnXHJcbn1cclxuIiwiaW1wb3J0IEFycmF5VXRpbHMgZnJvbSBcIi4uLy4uL3VpdGwvQXJyYXlVdGlsc1wiO1xuXG4vKlxuKiBuYW1lO1xuKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2VNb2RlbCB7XG4gICAgcHJvdGVjdGVkIF9kYXRhOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIHVwZGF0ZUFycjogQXJyYXk8RnVuY3Rpb24+ID0gW107XG4gICAgcHJpdmF0ZSBrZXlVcGRhdGVBcnI6IGFueSA9IHt9O1xuXG4gICAgcHVibGljIGFzeW5jIHVwZGF0ZShkYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RhdGEsXG4gICAgICAgICAgICAuLi5kYXRhXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVBcnIuZm9yRWFjaChmdW5jID0+IHtcbiAgICAgICAgICAgIGZ1bmModGhpcy5fZGF0YSk7XG4gICAgICAgIH0pXG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmtleVVwZGF0ZUFycikge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5rZXlVcGRhdGVBcnJba2V5XTtcbiAgICAgICAgICAgICAgICBhcnIgJiYgYXJyLmZvckVhY2goZnVuYyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmModmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgd2FpdEZvcihrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2RhdGFba2V5XTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjYiA9IGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2ZmVXBkYXRlKGNiLCBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25VcGRhdGUoY2IsIGtleSwgdHJ1ZSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHVibGljIG9uVXBkYXRlKGZ1bmM6IEZ1bmN0aW9uLCBrZXk/OiBzdHJpbmcsIHJ1bjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5fZGF0YVtrZXldO1xuICAgICAgICAgICAgcnVuICYmIHZhbHVlICE9IG51bGwgJiYgZnVuYyh2YWx1ZSk7XG4gICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5rZXlVcGRhdGVBcnJba2V5XTtcbiAgICAgICAgICAgICFhcnIgJiYgKHRoaXMua2V5VXBkYXRlQXJyW2tleV0gPSBhcnIgPSBbXSk7XG4gICAgICAgICAgICBhcnIucHVzaChmdW5jKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJ1biAmJiBmdW5jKHRoaXMuX2RhdGEpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBcnIucHVzaChmdW5jKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvZmZVcGRhdGUoZnVuYzogRnVuY3Rpb24sIGtleT86IHN0cmluZykge1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBBcnJheVV0aWxzLnJlbW92ZUZyb21BcnIodGhpcy5rZXlVcGRhdGVBcnJba2V5XSwgZnVuYyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBBcnJheVV0aWxzLnJlbW92ZUZyb21BcnIodGhpcy51cGRhdGVBcnIsIGZ1bmMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyR2FtZSgpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuICAgIH1cbn0iLCJpbXBvcnQgQmFzZU1vZGVsIGZyb20gXCIuL0Jhc2VNb2RlbFwiO1xuaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi4vLi4vc2RrL0FkTWFuYWdlclwiO1xuaW1wb3J0IFRlYVNkaywgeyBEb3RLZXkgfSBmcm9tIFwiLi4vLi4vc2RrL1RlYVNka1wiO1xuaW1wb3J0IFRyYWNraW5nU2RrLCB7IFRyYWNraW5nS2V5IH0gZnJvbSBcIi4uLy4uL3Nkay9UcmFja2luZ1Nka1wiO1xuaW1wb3J0IHsgR29sZENvbmZpZ0RhdGEgfSBmcm9tIFwiLi4vLi4vc2RrL3Nka0RhdGEvR29sZENvbmZpZ0RhdGFcIjtcbmltcG9ydCBBZGRHb2xkRGF0YSBmcm9tIFwiLi4vLi4vc2RrL3Nka0RhdGEvQWRkR29sZERhdGFcIjtcbmltcG9ydCBNeUNvaW5EYXRhIGZyb20gXCIuLi8uLi9zZGsvc2RrRGF0YS9NeUNvaW5EYXRhXCI7XG5pbXBvcnQgeyBBcHBTZGsgfSBmcm9tIFwiLi4vLi4vc2RrL0FwcFNka1wiO1xuaW1wb3J0IERhdGVVdGlscyBmcm9tIFwiLi4vLi4vdWl0bC9EYXRlVXRpbHNcIjtcbmltcG9ydCBVdGlsLCB7IERhdGFLZXkgfSBmcm9tIFwiLi4vLi4vdWl0bC9VdGlsXCI7XG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uLy4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcbmltcG9ydCB7IEV2ZW50Q2VudGVyIH0gZnJvbSBcIi4uLy4uL2V2ZW50L0V2ZW50Q2VudGVyXCI7XG5pbXBvcnQgeyBFdmVudEVudW0gfSBmcm9tIFwiLi4vLi4vZXZlbnQvRXZlbnRFbnVtXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZHBhY2tldE1vZGVsIGV4dGVuZHMgQmFzZU1vZGVsIHtcbiAgICBwcml2YXRlIE1BWCA9IDIwO1xuICAgIC8qKuW9k+WkqemihuWPlue6ouWMheeahOacgOWkp+asoeaVsCAqL1xuICAgIHByaXZhdGUgREFZX01BWF9DTlQgPSA1MDtcbiAgICBwcml2YXRlIGNvbmY6IGFueTtcbiAgICBwdWJsaWMgY3VyUmVkcGFja2V0OiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBjb25mTGVuOiBudW1iZXIgPSAwO1xuXG4gICAgLyoq5Yid5aeL5YyW57qi5YyF6YWN572uICovXG4gICAgYXN5bmMgaW5pdCgpIHtcblxuICAgICAgICBsZXQgYXJyID0gYXdhaXQgR29sZENvbmZpZ0RhdGEuSS5nZXRHb2xkQ29uZmlnKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1SZWRwYWNrZXRNb2RlbC0tLS0tLS0nK0pTT04uc3RyaW5naWZ5KGFycikpXG4gICAgICAgIFxuICAgICAgICBsZXQgY2FzaCA9IDA7XG4gICAgICAgIHRoaXMuY29uZiA9IHt9O1xuICAgICAgICBhcnIuZm9yRWFjaChjb25mRGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmZbY29uZkRhdGEuaWRdID0gY29uZkRhdGE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMuaW5pdERhdGEoKSk7XG4gICAgICAgIHRoaXMuY29uZkxlbiA9IHRoaXMuY29uZi5sZW5ndGg7XG5cbiAgICB9XG5cbiAgICBpbml0RGF0YSgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgUmVkcGFja2V0RGF0YTtcbiAgICAgICAgbGV0IGxhc3RUaW1lID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5sYXN0VGltZSkgfHwgJzAnO1xuICAgICAgICBkYXRhLmxhc3RUaW1lID0gcGFyc2VJbnQobGFzdFRpbWUpO1xuXG4gICAgICAgIGxldCBsYXN0ID0gRGF0ZVV0aWxzLnRpbWVEYXkoZGF0YS5sYXN0VGltZSk7XG4gICAgICAgIGxldCB0b2RheSA9IERhdGVVdGlscy50b2RheTtcbiAgICAgICAgaWYgKGxhc3QgIT0gdG9kYXkpIHtcbiAgICAgICAgICAgIGRhdGEudG9kYXlDbnQgPSAwO1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlVXRpbHMubm93VGltZS50b1N0cmluZygpO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5sYXN0VGltZSwgbGFzdFRpbWUpXG4gICAgICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LnRvZGF5Q250LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCB0b2RheUNudCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkudG9kYXlDbnQpIHx8ICcwJztcbiAgICAgICAgICAgIGRhdGEudG9kYXlDbnQgPSBwYXJzZUludCh0b2RheUNudCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5sYXN0VGltZSA9IHBhcnNlSW50KGxhc3RUaW1lKTtcbiAgICAgICAgbGV0IGRhdGFDbnQgPSBVdGlsLkkuZ2V0SXRlbShEYXRhS2V5LmRhdGFDTlQpIHx8ICcwJztcbiAgICAgICAgZGF0YS5jbnQgPSBwYXJzZUludChkYXRhQ250KTtcbiAgICAgICAgZGF0YS5saXN0ID0gW107XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGFzeW5jIGNoZWNrUmVkcGFja2V0KCkge1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGEudG9kYXlDbnQgPj0gdGhpcy5EQVlfTUFYX0NOVCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoQWRNYW5hZ2VyLkkuY2hlY2tWaWRlb0luQ2QoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvKirnuqLljIXojrflj5blkI7msqHmnInnnIvlub/lkYrpooblj5bvvIzlho3mrKHojrflvpfnuqLljIXnmoTmnLrkvJrvvIzkuI3kvJrojrflj5bnuqLljIXvvIwg6Ieq5bex5Lmf5Y+v5Lul5aSE55CG5oiQIOWvueW6lOeahOe6ouWMheaPkOmGkuaIluS4jemcgOimgei/memHjOeahOWIpOaWrSAqL1xuICAgICAgICBpZiAodGhpcy5jdXJSZWRwYWNrZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodW5kZWZpbmVkID09PSB0aGlzLmRhdGEuY250KSB0aGlzLmRhdGEuY250ID0gMDtcbiAgICAgICAgbGV0IGNudCA9IHRoaXMuZGF0YS5jbnQ7XG4gICAgICAgIGlmIChjbnQgPj0gdGhpcy5jb25mTGVuKSBjbnQgPSB0aGlzLmNvbmZMZW4gLSAxO1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuY29uZltjbnQgKyAxXTtcbiAgICAgICAgbGV0IHJhbjIgPSBNYXRoLnJhbmRvbSgpO1xuXG4gICAgICAgIGlmIChkYXRhICYmIHJhbjIgPCBkYXRhLnBlcikge1xuICAgICAgICAgICAgbGV0IGNhc2ggPSAwLjAwMDAwMTtcbiAgICAgICAgICAgIHRoaXMuY3VyUmVkcGFja2V0ID0gY2FzaDtcbiAgICAgICAgICAgIC8vKirlvLnlh7rnuqLljIXnmoTnlYzpnaIsICDmmoLml7blpITnkIbmiJAg55u05o6l55yL5bm/5ZGK6I635Y+W6YeR5biBICovXG4gICAgICAgICAgIGF3YWl0ICBBZE1hbmFnZXIuSS5zaG93UmV3YXJkQWQoKVxuICAgICAgICAgICB0aGlzLmdldFJlcGFja2V0KClcbiAgICAgICAgICAgLyoq5pu05paw5Z+65pys5pi+56S6ICovXG4gICAgICAgICAgIEV2ZW50Q2VudGVyLmVtaXQoRXZlbnRFbnVtLlVQREFURV9DT0lOKTtcblxuICAgICAgICAgICAgLyoqKiAqL1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldFJlcGFja2V0KCkge1xuICAgICAgICBpZiAoIXRoaXMuY3VyUmVkcGFja2V0KSByZXR1cm47XG4gICAgICAgIHRoaXMuZGF0YS5jbnQgKz0gMTtcbiAgICAgICAgdGhpcy5kYXRhLmxpc3QucHVzaCh0aGlzLmN1clJlZHBhY2tldCk7XG4gICAgICAgIHRoaXMuZGF0YS5sYXN0VGltZSA9IChuZXcgRGF0ZSkuZ2V0VGltZSgpO1xuICAgICAgICB0aGlzLmRhdGEudG9kYXlDbnQgKz0gMTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jbnQgPT0gMSlcbiAgICAgICAgICAgIFRyYWNraW5nU2RrLkkuZG90KFRyYWNraW5nS2V5LlJlZFBhY2sxKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jbnQgPT0gNSlcbiAgICAgICAgICAgIFRyYWNraW5nU2RrLkkuZG90KFRyYWNraW5nS2V5LlJlZFBhY2s1KTtcbiAgICAgICAgdGhpcy5jdXJSZWRwYWNrZXQgPSAwO1xuICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LmRhdGFDTlQsIHRoaXMuZGF0YS5jbnQpO1xuICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LnRvZGF5Q250LCB0aGlzLmRhdGEudG9kYXlDbnQpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgLyoqICovXG4gICAgYXN5bmMgZ2V0Q3VyUmVkcGFja2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJSZWRwYWNrZXQ7XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKTogUmVkcGFja2V0RGF0YSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cbiAgICAvKirojrflj5bmgLvlhbHnmoTph5HluIHmlbAgKi9cbiAgICBhc3luYyBnZXRUb3RhbENvaW4oKSB7XG4gICAgICAgIGxldCB0b3RhbENvaW4gPSBhd2FpdCBNeUNvaW5EYXRhLmdldENvaW4oKTtcbiAgICAgICAgcmV0dXJuIHRvdGFsQ29pbjtcbiAgICB9XG4gICAgLyoq6I635Y+W5pys5qyh5aWW5Yqx55qE6YeR5biB5pWwICovXG4gICAgYXN5bmMgYWRkQ29pbihrZXk6IG51bWJlciA9IDEpIHtcbiAgICAgICAgbGV0IGNvaW5EYXRhID0gYXdhaXQgQWRkR29sZERhdGEuYWRkQ29pbihrZXkpO1xuICAgICAgICByZXR1cm4gY29pbkRhdGE7XG4gICAgfVxuXG4gICAgLyoq6I635Y+W5pyA5L2O5o+Q5qGjICovXG4gICAgYXN5bmMgIG1pbldpdGhEcmF3YWwoKSB7XG4gICAgICAgIGxldCBtaW5Db2luID0gYXdhaXQgQXBwU2RrLkkubWluV2l0aERyYXdhbCgpO1xuICAgICAgICByZXR1cm4gbWluQ29pbjtcbiAgICB9XG4gICAgc3RhdGljIGdldCBJKCk6IFJlZHBhY2tldE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdEluc3RhbmNlLmdldChSZWRwYWNrZXRNb2RlbCkgYXMgUmVkcGFja2V0TW9kZWw7XG4gICAgfVxufVxuXG5jbGFzcyBSZWRwYWNrZXREYXRhIHtcbiAgICBjbnQ6IG51bWJlcjtcbiAgICBsaXN0OiBBcnJheTxudW1iZXI+O1xuICAgIGxhc3RUaW1lOiBudW1iZXI7XG4gICAgdG9kYXlDbnQ6IG51bWJlcjtcbn1cblxuY2xhc3MgUmVkcGFja2V0Q29uZmlnRGF0YSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBwZXI6IG51bWJlcjtcbiAgICBjYXNoOiBudW1iZXI7XG59IiwiaW1wb3J0IEJhc2VNb2RlbCBmcm9tIFwiLi9CYXNlTW9kZWxcIjtcbmltcG9ydCB7IEFwcFNkayB9IGZyb20gXCIuLi8uLi9zZGsvQXBwU2RrXCI7XG5pbXBvcnQgRGF0ZVV0aWxzIGZyb20gXCIuLi8uLi91aXRsL0RhdGVVdGlsc1wiO1xuaW1wb3J0IFV0aWwsIHsgRGF0YUtleSB9IGZyb20gXCIuLi8uLi91aXRsL1V0aWxcIjtcbmltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xuXG4vKipcbiAqIFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFrZU1vZGVsIGV4dGVuZHMgQmFzZU1vZGVsIHtcblxuICAgIHByaXZhdGUgY29uZjogYW55O1xuICAgIHByaXZhdGUgZWxlUHJvYmFiaWxpdHlBcnI6IG51bWJlcltdID0gW107XG4gICAgcHJpdmF0ZSB0b3RhbFdlaWdodDogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIHByb0FyckxlbjogbnVtYmVyID0gMDtcbiAgICAvKirnuqLljIXlh7rnjrDnmoTmgLvmrKHmlbDmr4/ml6UgKi9cbiAgICBwcml2YXRlIHJlZF9kYXlfbGltaXQ6IG51bWJlciA9IDA7XG4gICAgcHJpdmF0ZSBjdXJfcmVkX2RheV9saW1pdDogbnVtYmVyID0gMDtcbiAgICAvKirmkYfkuIDmkYflh7rnjrDnmoTmgLvmrKHmlbAgKi9cbiAgICBwcml2YXRlIHNoYWtlX2RheV9saW1pdDogbnVtYmVyID0gMDtcblxuICAgIHByaXZhdGUgY3VyX3NoYWtlX2RheV9saW1pdDogbnVtYmVyID0gMDtcbiAgICAvKipcbiAgICAgKiByZWRfZGF5X2xpbWl0XHTnuqLljIXmr4/ml6XmnoHpmZDkuqflh7pcdFxuICAgICogIHNoYWtlX2RheV9saW1pdFx05pGH5LiA5pGH5q+P5pel5p6B6ZmQ5Lqn5Ye6XHRcbiAgICAqIGludGVyc3RpdGlhbF9jbnQg5o+S5bGP6K6h5pWw77yI5q+P5Ye6546weOasoemAmueUqOiOt+W+l+eJqeWTgeeVjOmdouWQju+8jOWHuueOsOaPkuWxj++8iVx0XG4gICAgKiBpbnRlcnN0aXRpYWxfZGVsYXlcdOaPkuWxj+WHuueOsOW7tuaXtu+8iOavq+enku+8iVx0XG4gICAgICovXG4gICBcbiAgICAvKipcbiAgICAgKiAgLy8gbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgLy8gICAgIGRhdGE6IHtcbiAgICAgICAgLy8gICAgICAgICBnYW1lQ29uZmlnOiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIFwiY29uZmlnXCI6IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIFwicmVkX2RheV9saW1pdFwiOiAxMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIFwic2hha2VfZGF5X2xpbWl0XCI6IDUwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgXCJpbnRlcnN0aXRpYWxfY250XCI6IDIsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBcImludGVyc3RpdGlhbF9kZWxheVwiOiA1MDBcbiAgICAgICAgLy8gICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJzaGFrZVwiOiBbXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiAxLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDEwMDAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJudW1cIjogMFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDIsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogNDAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDBcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAzLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiAzLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDMwMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIm51bVwiOiAxXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogNCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogMyxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIndlaWdodFwiOiAxMDAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJudW1cIjogMlxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDUsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDQsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMzAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDFcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiA2LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiA0LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDEwMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIm51bVwiOiAyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogNyxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogNSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIndlaWdodFwiOiAzMDAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJudW1cIjogMVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDgsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDUsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMTAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiA5LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiA2LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDMwMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIm51bVwiOiAxXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDYsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMTAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxMSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogNyxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIndlaWdodFwiOiAzMDAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJudW1cIjogMVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEyLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiA3LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDEwMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIm51bVwiOiAyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTMsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDgsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogNTAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDBcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICAgICAgXSxcbiAgICAgICAgLy8gICAgICAgICAgICAgJ2NvaW5fY29uZmlnJzogW11cbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICAgKi9cbiAgICBhc3luYyBpbml0KCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgQXBwU2RrLkkuZ2V0R2FtZUNvbmZpZygpO1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tU2hha2VNb2RlbC0tLS0tLS0nK0pTT04uc3RyaW5naWZ5KHJlc3VsdC5kYXRhKSlcbiAgICAgICAgXG4gICAgICAgIGxldCBkYXRhID0gcmVzdWx0LmRhdGE7XG4gICAgICAgIGlmIChkYXRhWydnYW1lQ29uZmlnJ10pIHtcbiAgICAgICAgICAgIGxldCBnYW1lRGF0YSA9IGRhdGFbJ2dhbWVDb25maWcnXTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKHRoaXMuaW5pdERhdGEoZ2FtZURhdGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXREYXRhKGdhbWVEYXRhKSB7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IFNoYWtlRGF0YTtcbiAgICAgICAgbGV0IGxhc3RUaW1lID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5zaGFrZUxhc3RUaW1lKSB8fCAnMCc7XG4gICAgICAgIGxldCBsdCA9IHBhcnNlSW50KGxhc3RUaW1lKTtcbiAgICAgICAgbGV0IGxhc3QgPSBEYXRlVXRpbHMudGltZURheShsdCk7XG4gICAgICAgIGxldCB0b2RheSA9IERhdGVVdGlscy50b2RheTtcblxuICAgICAgICBpZiAobGFzdCAhPSB0b2RheSkge1xuICAgICAgICAgICAgdGhpcy5jdXJfc2hha2VfZGF5X2xpbWl0ID0gMDtcbiAgICAgICAgICAgIHRoaXMuY3VyX3JlZF9kYXlfbGltaXQgPSAwO1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlVXRpbHMubm93VGltZS50b1N0cmluZygpO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfc2hha2VfZGF5X2xpbWl0LCAwKTtcbiAgICAgICAgICAgIFV0aWwuSS5zZXRJdGVtKERhdGFLZXkuY3VyX3JlZF9kYXlfbGltaXQsIDApO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5zaGFrZUxhc3RUaW1lLCBsYXN0VGltZSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjdXJfcmVkX2RheV9saW1pdCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkuY3VyX3JlZF9kYXlfbGltaXQpIHx8ICcwJztcbiAgICAgICAgICAgIHRoaXMuY3VyX3JlZF9kYXlfbGltaXQgPSBwYXJzZUludChjdXJfcmVkX2RheV9saW1pdCk7XG4gICAgICAgICAgICBsZXQgY3VyX3NoYWtlX2RheV9saW1pdCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkuY3VyX3NoYWtlX2RheV9saW1pdCkgfHwgJzAnO1xuICAgICAgICAgICAgdGhpcy5jdXJfc2hha2VfZGF5X2xpbWl0ID0gcGFyc2VJbnQoY3VyX3NoYWtlX2RheV9saW1pdCk7XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhLmNvbmZpZyA9IGdhbWVEYXRhWydjb25maWcnXTtcbiAgICAgICAgZ2FtZURhdGFbJ3NoYWtlJ10uZm9yRWFjaChlbGUgPT4ge1xuICAgICAgICAgICAgZGF0YS5zaGFrZVdlaWdodExpc3QucHVzaChlbGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb25mID0gW107XG4gICAgICAgIHRoaXMuY29uZiA9IGRhdGEuc2hha2VXZWlnaHRMaXN0O1xuICAgICAgICB0aGlzLmluaXRQcm9iYWJpbGl0eSgpO1xuICAgICAgICB0aGlzLnNoYWtlX2RheV9saW1pdCA9IGRhdGEuY29uZmlnLnNoYWtlX2RheV9saW1pdDtcbiAgICAgICAgdGhpcy5yZWRfZGF5X2xpbWl0ID0gZGF0YS5jb25maWcucmVkX2RheV9saW1pdDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaW5pdFByb2JhYmlsaXR5KCkge1xuICAgICAgICB0aGlzLnRvdGFsV2VpZ2h0ID0gMDtcbiAgICAgICAgdGhpcy5jb25mLmZvckVhY2goKGVsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG90YWxXZWlnaHQgKz0gZWxlLndlaWdodDtcbiAgICAgICAgICAgIGxldCBpdGVtVyA9IGVsZS53ZWlnaHQ7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwKVxuICAgICAgICAgICAgICAgIGl0ZW1XICs9IHRoaXMuZWxlUHJvYmFiaWxpdHlBcnJbaW5kZXggLSAxXTtcbiAgICAgICAgICAgIHRoaXMuZWxlUHJvYmFiaWxpdHlBcnIgPSBbLi4udGhpcy5lbGVQcm9iYWJpbGl0eUFyciwgaXRlbVddO1xuICAgICAgICB9KVxuICAgICAgICB0aGlzLnByb0FyckxlbiA9IHRoaXMuZWxlUHJvYmFiaWxpdHlBcnIubGVuZ3RoO1xuXG4gICAgfVxuXG4gICAgZ2V0U2hha2VUeXBlKCkge1xuICAgICAgICArK3RoaXMuY3VyX3NoYWtlX2RheV9saW1pdDtcbiAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfc2hha2VfZGF5X2xpbWl0LCB0aGlzLmN1cl9zaGFrZV9kYXlfbGltaXQpO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cl9zaGFrZV9kYXlfbGltaXQgPiB0aGlzLnNoYWtlX2RheV9saW1pdCkge1xuICAgICAgICAgICAgLyoqJ+asoeaVsOi+vuWIsOS4iumZkO+8jOivt+aYjuWkqeWGjeadpSovXG5cbiAgICAgICAgICAgIC8qKuWcqOatpOWkhOWPr+S7peW8ueahhuetieWkhOeQhiAqL1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGxldCByYW4gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnRvdGFsV2VpZ2h0KTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMucHJvQXJyTGVuOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSB0aGlzLmVsZVByb2JhYmlsaXR5QXJyW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChlbGUgPj0gcmFuKSB7XG4gICAgICAgICAgICAgICAgaWYgKDAgPT09IGluZGV4IHx8IDEgPT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICsrdGhpcy5jdXJfcmVkX2RheV9saW1pdDtcbiAgICAgICAgICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfcmVkX2RheV9saW1pdCwgdGhpcy5jdXJfcmVkX2RheV9saW1pdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cl9yZWRfZGF5X2xpbWl0ID4gdGhpcy5yZWRfZGF5X2xpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25mW3RoaXMucHJvQXJyTGVuIC0gMV07XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25mW2luZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb25mW3RoaXMucHJvQXJyTGVuIC0gMV07XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKTogU2hha2VEYXRhIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBJKCk6IFNoYWtlTW9kZWwge1xuICAgICAgICByZXR1cm4gT2JqZWN0SW5zdGFuY2UuZ2V0KFNoYWtlTW9kZWwpIGFzIFNoYWtlTW9kZWw7XG4gICAgfVxufVxuXG5cbmNsYXNzIFNoYWtlRGF0YSB7XG4gICAgY29uZmlnOiBTaGFrZUNvbmZpZztcbiAgICBzaGFrZVdlaWdodExpc3Q6IFNoYWtlV2VpZ2h0RGF0YVtdID0gW107XG59XG5pbnRlcmZhY2UgU2hha2VDb25maWcge1xuICAgIHJlZF9kYXlfbGltaXQ6IG51bWJlcixcbiAgICBzaGFrZV9kYXlfbGltaXQ6IG51bWJlcixcbiAgICBpbnRlcnN0aXRpYWxfY250OiBudW1iZXIsXG4gICAgaW50ZXJzdGl0aWFsX2RlbGF5OiBudW1iZXJcbn1cblxuaW50ZXJmYWNlIFNoYWtlV2VpZ2h0RGF0YSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICB0eXBlOiBudW1iZXI7XG4gICAgd2VpZ2h0OiBudW1iZXI7XG4gICAgbnVtOiBudW1iZXI7XG59XG5cblxuIiwiaW1wb3J0IHsgQXBwU2RrIH0gZnJvbSBcIi4uL0FwcFNka1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBZGRHb2xkRGF0YSB7XG4gICAgc3RhdGljIGNvaW46IHN0cmluZyA9ICcwJztcbiAgICBzdGF0aWMgbXljb2luOiBzdHJpbmcgPSAnMCc7XG4gICAgc3RhdGljIGluaXREYXRhKGRhdGE6IGFueSkge1xuICAgICAgICBpZiAoIXBhcnNlSW50KGRhdGEuY29kZSkpIHtcbiAgICAgICAgICAgIEFkZEdvbGREYXRhLmNvaW4gPSBkYXRhLmRhdGEuY29pbjtcbiAgICAgICAgICAgIEFkZEdvbGREYXRhLm15Y29pbiA9IGRhdGEuZGF0YS5teWNvaW47XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyAgYWRkQ29pbihrZXk6IG51bWJlciA9IDEpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IEFwcFNkay5JLmFkZEdvbGQoa2V5KTtcbiAgICAgICAgcmV0dXJuIFtwYXJzZUludCh0aGlzLmNvaW4pLHBhcnNlSW50KHRoaXMubXljb2luKV07XG5cbiAgICB9XG59IiwiaW1wb3J0IHsgQXBwU2RrIH0gZnJvbSBcIi4uL0FwcFNka1wiO1xyXG5pbXBvcnQgVXRpbCBmcm9tIFwiLi4vLi4vdWl0bC9VdGlsXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgR29sZENvbmZpZ0RhdGEge1xyXG4gICAgYWQ6IE9iamVjdDtcclxuICAgIGFkbmV0OiBzdHJpbmc7XHJcbiAgICBhcHBfbmFtZTogc3RyaW5nO1xyXG4gICAgY29pbl9jb25maWc6IHN0cmluZyA9ICcnO1xyXG4gICAgZ2FtZVVybDogc3RyaW5nO1xyXG4gICAga3VhaV9hcHBfbmFtZTogc3RyaW5nO1xyXG4gICAgcGFuZ29saW46IHN0cmluZztcclxuICAgIHRUdXJib0FnZW50OiBzdHJpbmc7XHJcbiAgICB0ZWFBZ2VudDogbnVtYmVyO1xyXG4gICAgdHJhY2tpbmc6IHN0cmluZztcclxuICAgIHR0QXBwTG9nOiBzdHJpbmc7XHJcbiAgICB1bWlkOiBzdHJpbmc7XHJcbiAgICBnYW1lQ29uZmlnOiBhbnk7XHJcblxyXG4gICAgY29kZTogbnVtYmVyID0gLTM7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogR29sZENvbmZpZ0RhdGEgPSBudWxsO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEkoKTogR29sZENvbmZpZ0RhdGEge1xyXG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSlcclxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSA9IG5ldyBHb2xkQ29uZmlnRGF0YSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlO1xyXG4gICAgfVxyXG4gICAgaW5pdERhdGEoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuY29kZSA9IGRhdGEuY29kZTtcclxuICAgICAgICBpZiAoIWRhdGEuY29kZSkge1xyXG4gICAgICAgICAgICBkYXRhID0gZGF0YS5kYXRhO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlID0gZGF0YVtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IGVsZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRHb2xkQ29uZmlnKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IEFwcFNkay5JLmdldEdhbWVDb25maWcoKTtcclxuICAgICAgICAgICAgbGV0IGRhdGEgPSByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgaWYgKGRhdGFbJ2dhbWVDb25maWcnXSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGdhbWVEYXRhID0gZGF0YVsnZ2FtZUNvbmZpZyddO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbmZpZ0pzb24gPSBhd2FpdCB0aGlzLmxvYWRHb2xkQ2ZnKGdhbWVEYXRhWydjb2luX2NvbmZpZyddWzBdKVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShjb25maWdKc29uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRHb2xkQ2ZnKHJlczogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGNvbmZpZ0pzb24gPSBhd2FpdCAgVXRpbC5JLmxvYWQocmVzKTtcclxuICAgICAgICByZXR1cm4gY29uZmlnSnNvbjtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcHBTZGsgfSBmcm9tIFwiLi4vQXBwU2RrXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE15Q29pbkRhdGEge1xuICAgIHN0YXRpYyBjb2luOiBzdHJpbmcgPSAnJztcbiAgICBzdGF0aWMgaW5pdERhdGEoZGF0YTogYW55KSB7XG4gICAgICAgIGlmICghcGFyc2VJbnQoZGF0YS5jb2RlKSl7XG4gICAgICAgICAgICB0aGlzLmNvaW4gPSBkYXRhLmRhdGEuY29pbjtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmNvaW4gPScwJztcbiAgICAgICAgfVxuICAgICAgIFxuICAgIH1cbiAgICAgc3RhdGljIGFzeW5jIGdldENvaW4oKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBBcHBTZGsuSS5teUNvaW4oKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRoaXMuY29pbilcbiAgICB9XG59IiwiLyoqVGhpcyBjbGFzcyBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBMYXlhQWlySURFLCBwbGVhc2UgZG8gbm90IG1ha2UgYW55IG1vZGlmaWNhdGlvbnMuICovXG5pbXBvcnQgVmlldz1MYXlhLlZpZXc7XHJcbmltcG9ydCBEaWFsb2c9TGF5YS5EaWFsb2c7XHJcbmltcG9ydCBTY2VuZT1MYXlhLlNjZW5lO1xudmFyIFJFRzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XG5leHBvcnQgbW9kdWxlIHVpIHtcclxuICAgIGV4cG9ydCBjbGFzcyBUZXN0U2NlbmVVSSBleHRlbmRzIFNjZW5lIHtcclxuXHRcdHB1YmxpYyBidG5JbnZpdGU6TGF5YS5TcHJpdGU7XG5cdFx0cHVibGljIGJ0blNlcnZlcjpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuVmlicmF0ZTpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuX3NoYWtlOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5EcmF3YWw6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blByZWxvYWRBRDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd0Jhbm5lcjpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd0Z1bGxBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd05hdGl2ZUFkOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5TaG93SW50ZXJBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuUmV3YXJkQWQ6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blJlZHBhY2tldDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgTmF0aXZlQUQ6VmlldztcbiAgICAgICAgY29uc3RydWN0b3IoKXsgc3VwZXIoKX1cclxuICAgICAgICBjcmVhdGVDaGlsZHJlbigpOnZvaWQge1xyXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRTY2VuZShcIlRlc3RTY2VuZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBSRUcoXCJ1aS5UZXN0U2NlbmVVSVwiLFRlc3RTY2VuZVVJKTtcclxufVxyIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXJyYXlVdGlscyB7XG4gICAgLyoqXG4gICAgICog56e76Zmk5YWD57SgXG4gICAgICovXG4gICAgc3RhdGljIHJlbW92ZUZyb21BcnIoYXJyOiBBcnJheTxhbnk+LCBvYmo6IGFueSkge1xuICAgICAgICBsZXQgaW5kZXggPSBhcnIuaW5kZXhPZihvYmopO1xuICAgICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmFuZG9tRnJvbUFycihhcnI6IEFycmF5PGFueT4pIHtcbiAgICAgICAgbGV0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYXJyLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBhcnJbaW5kZXhdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaVsOe7hOmaj+acuuaOkuW6j1xuICAgICAqL1xuICAgIHN0YXRpYyBzaHVmZmxlKGFycjogQXJyYXk8YW55Pikge1xuICAgICAgICByZXR1cm4gYXJyLnNvcnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgLSAwLjU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbmRleE9mKGFyciwgY2FsbGJhY2ssIGN0eD8pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjay5jYWxsKGN0eCwgdGhpc1tpXSwgaSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHN0YXRpYyBlYWNoKGFyciwgY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2suY2FsbChjb250ZXh0LCBhcnJbaV0sIGksIGFycikpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgcXVldWUoYXJyKSB7XG4gICAgICAgIGxldCByZXMgPSBudWxsO1xuICAgICAgICBmb3IgKGxldCBwcm9taXNlIG9mIGFycikge1xuICAgICAgICAgICAgcmVzID0gYXdhaXQgcHJvbWlzZShyZXMpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UmFuZG9tQXJyYXkoYXJyLCBjb3VudCkge1xuICAgICAgICBsZXQgc2h1ZmZsZWQgPSBhcnIuc2xpY2UoMCk7XG4gICAgICAgIGxldCBsZW4gPSBhcnIubGVuZ3RoO1xuICAgICAgICBsZXQgbWluID0gbGVuIC0gY291bnQsIHRlbXAsIGluZGV4O1xuICAgICAgICB3aGlsZSAobGVuLS0gPiBtaW4pIHtcbiAgICAgICAgICAgIGluZGV4ID0gTWF0aC5mbG9vcigobGVuICsgMSkgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgICAgIHRlbXAgPSBzaHVmZmxlZFtpbmRleF07XG4gICAgICAgICAgICBzaHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFtsZW5dO1xuICAgICAgICAgICAgc2h1ZmZsZWRbbGVuXSA9IHRlbXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNodWZmbGVkLnNsaWNlKG1pbik7XG4gICAgfVxufSIsIi8qKlxuICog5pel5pyf5bel5YW357G7XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVVdGlscyB7XG4gICAgc3RhdGljIGdldCBub3coKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5ub3dUaW1lIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBub3dUaW1lKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IHRvZGF5KCk6IHN0cmluZyB7XG4gICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUodGhpcy5ub3dUaW1lKTtcbiAgICAgICAgbGV0IHllYXIgPSB0aW1lLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGxldCBtb250aCA9IHRpbWUuZ2V0TW9udGgoKSArIDE7XG4gICAgICAgIGxldCBkYXRlID0gdGltZS5nZXREYXRlKCk7XG4gICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke3RoaXMuYWRkKG1vbnRoKX0tJHt0aGlzLmFkZChkYXRlKX1gO1xuICAgIH1cblxuICAgIHN0YXRpYyB0aW1lRGF5KHRpbWVOdW06IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUodGltZU51bSk7XG4gICAgICAgIGxldCB5ZWFyID0gdGltZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBsZXQgbW9udGggPSB0aW1lLmdldE1vbnRoKCkgKyAxO1xuICAgICAgICBsZXQgZGF0ZSA9IHRpbWUuZ2V0RGF0ZSgpO1xuICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHt0aGlzLmFkZChtb250aCl9LSR7dGhpcy5hZGQoZGF0ZSl9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7np5LmlbDmoLzlvI/ljJblrZfnrKbkuLJcbiAgICAgKiBAcGFyYW0gc2Vjb25kIOenkuaVsFxuICAgICAqIEBwYXJhbSB0eXBlIDE6MDA6MDA6MDAgICAyOnl5eXktbW0tZGQgaDptOnMgICAgMzowMDowMCAgIDQ6eHjlpKnliY3vvIx4eOWwj+aXtuWJje+8jHh45YiG6ZKf5YmNXG4gICAgICogQHJldHVyblxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZChzZWNvbmQ6IG51bWJlciwgdHlwZTogbnVtYmVyID0gMSk6IHN0cmluZyB7XG4gICAgICAgIHZhciBzdHI6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQwKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDEoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kMihzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQzKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDQoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kNShzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgLy8gMDogMDA6MDBcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZDAodDogbnVtYmVyID0gMCk6IHN0cmluZyB7XG4gICAgICAgIHZhciBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcih0IC8gNjApO1xuICAgICAgICB2YXIgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcih0ICUgNjApO1xuICAgICAgICB2YXIgbWluczogc3RyaW5nO1xuICAgICAgICB2YXIgc2Vuczogc3RyaW5nO1xuICAgICAgICBpZiAobWluc3QgPT0gMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5zdCA8IDEwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwXCIgKyBtaW5zdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIlwiICsgbWluc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZHQgPT0gMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjBcIiArIHNlY29uZHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZW5zID0gXCJcIiArIHNlY29uZHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbnMgKyBcIjpcIiArIHNlbnM7XG4gICAgfVxuXG4gICAgLy8xOiAwMDowMDowMFxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMSh0OiBudW1iZXIgPSAwKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGhvdXJzdDogbnVtYmVyID0gTWF0aC5mbG9vcih0IC8gMzYwMCk7XG4gICAgICAgIGxldCBob3Vyczogc3RyaW5nO1xuICAgICAgICBsZXQgZGF5ID0gJyc7XG4gICAgICAgIGlmIChob3Vyc3QgPT0gMCkge1xuICAgICAgICAgICAgaG91cnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG91cnN0IDwgMTApXG4gICAgICAgICAgICAgICAgaG91cnMgPSBcIjBcIiArIGhvdXJzdDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBoID0gaG91cnN0ICUgMjQ7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA+PSAyNCkge1xuICAgICAgICAgICAgICAgICAgICBob3VycyA9IGggPCAxMCA/IFwiMFwiICsgaCA6ICcnICsgaDtcbiAgICAgICAgICAgICAgICAgICAgZGF5ID0gTWF0aC5mbG9vcihob3Vyc3QgLyAyNCkgKyAnZCAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgICBob3VycyA9IGggPCAxMCA/IFwiMFwiICsgaCA6ICcnICsgaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbWluc3Q6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAvIDYwKTtcbiAgICAgICAgbGV0IHNlY29uZHQ6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAlIDYwKTtcbiAgICAgICAgbGV0IG1pbnM6IHN0cmluZztcbiAgICAgICAgbGV0IHNlbnM6IHN0cmluZztcbiAgICAgICAgaWYgKG1pbnN0ID09IDApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobWluc3QgPCAxMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMFwiICsgbWluc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5zID0gXCJcIiArIG1pbnN0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWNvbmR0ID09IDApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Vjb25kdCA8IDEwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwXCIgKyBzZWNvbmR0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VucyA9IFwiXCIgKyBzZWNvbmR0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXkgKyBob3VycyArIFwiOlwiICsgbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzM6IDAwOjAwXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQzKHQ6IG51bWJlciA9IDApOiBzdHJpbmcge1xuICAgICAgICB2YXIgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHQgLyAzNjAwKTtcbiAgICAgICAgdmFyIG1pbnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0IC0gaG91cnN0ICogMzYwMCkgLyA2MCk7XG4gICAgICAgIHZhciBzZWNvbmR0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0IC0gaG91cnN0ICogMzYwMCkgJSA2MCk7XG4gICAgICAgIHZhciBtaW5zOiBzdHJpbmc7XG4gICAgICAgIHZhciBzZW5zOiBzdHJpbmc7XG4gICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjBcIiArIG1pbnN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWlucyA9IFwiXCIgKyBtaW5zdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKHNlY29uZHQgPCAxMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMFwiICsgc2Vjb25kdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIlwiICsgc2Vjb25kdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzI6eXl5eS1tbS1kZCBoOm06c1xuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMih0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB2YXIgZGF0ZTogRGF0ZSA9IG5ldyBEYXRlKHRpbWUpO1xuICAgICAgICB2YXIgeWVhcjogbnVtYmVyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICB2YXIgbW9udGg6IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7IFx0Ly/ov5Tlm57nmoTmnIjku73ku44wLTEx77ybXG4gICAgICAgIHZhciBkYXk6IG51bWJlciA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB2YXIgaG91cnM6IG51bWJlciA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgdmFyIG1pbnV0ZTogbnVtYmVyID0gZGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIHZhciBzZWNvbmQ6IG51bWJlciA9IGRhdGUuZ2V0U2Vjb25kcygpO1xuICAgICAgICByZXR1cm4geWVhciArIFwiLVwiICsgbW9udGggKyBcIi1cIiArIGRheSArIFwiIFwiICsgaG91cnMgKyBcIjpcIiArIG1pbnV0ZSArIFwiOlwiICsgc2Vjb25kO1xuXG4gICAgfVxuXG4gICAgLy80Onh45aSp5YmN77yMeHjlsI/ml7bliY3vvIx4eOWIhumSn+WJjVxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kNCh0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB2YXIgdCA9IE1hdGguZmxvb3IodGltZSAvIDM2MDApO1xuICAgICAgICBpZiAodCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0ID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0IC8gMjQpICsgXCLlpKnliY1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0ICsgXCLlsI/ml7bliY1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRpbWUgLyA2MCkgKyBcIuWIhumSn+WJjVwiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQ1KHRpbWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIC8vIOavj+S4quaXtumXtOWNleS9jeaJgOWvueW6lOeahOenkuaVsFxuICAgICAgICB2YXIgb25lRGF5OiBudW1iZXIgPSAzNjAwICogMjQ7XG4gICAgICAgIHZhciBvbmVIb3Vyc3Q6IG51bWJlciA9IDM2MDA7XG4gICAgICAgIHZhciBvbmVNaW5zdDogbnVtYmVyID0gNjA7XG5cbiAgICAgICAgdmFyIGRheXMgPSBNYXRoLmZsb29yKHRpbWUgLyBvbmVEYXkpO1xuICAgICAgICB2YXIgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHRpbWUgJSBvbmVEYXkgLyBvbmVIb3Vyc3QpXG4gICAgICAgIHZhciBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcigodGltZSAtIGhvdXJzdCAqIG9uZUhvdXJzdCkgLyBvbmVNaW5zdCkgIC8vTWF0aC5mbG9vcih0aW1lICUgb25lRGF5ICUgb25lSG91cnN0IC8gb25lTWluc3QpO1xuICAgICAgICB2YXIgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcigodGltZSAtIGhvdXJzdCAqIG9uZUhvdXJzdCkgJSBvbmVNaW5zdCkgLy90aW1lO1xuXG4gICAgICAgIHZhciBkYXlzczogc3RyaW5nID0gXCJcIjtcbiAgICAgICAgdmFyIGhvdXJzczogc3RyaW5nID0gXCJcIlxuICAgICAgICB2YXIgbWluc3M6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIHZhciBzZWNzczogc3RyaW5nID0gXCJcIlxuICAgICAgICBpZiAodGltZSA+IDApIHtcbiAgICAgICAgICAgIC8v5aSpXG4gICAgICAgICAgICBpZiAoZGF5cyA9PSAwKSB7XG4gICAgICAgICAgICAgICAgZGF5c3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgIC8v5bCP5pe2XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIC8v5YiGXG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Vjc3M7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWluc3MgKyBzZWNzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IGhvdXJzdCArIFwi5bCP5pe2XCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91cnNzICsgc2Vjc3NcblxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNzID0gXCIwXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91cnNzICsgbWluc3M7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXlzcyA9IGRheXMgKyBcIuWkqVwiO1xuICAgICAgICAgICAgICAgIGlmIChob3Vyc3QgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBob3Vyc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChob3Vyc3QgPCAxMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiMFwiICsgaG91cnN0ICsgXCLlsI/ml7ZcIjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgaG91cnNzID0gXCJcIiArIGhvdXJzdCArIFwi5bCP5pe2XCI7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRheXNzICsgaG91cnNzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFkZChudW0pIHtcbiAgICAgICAgcmV0dXJuIG51bSA8IDEwID8gJzAnICsgbnVtIDogbnVtO1xuICAgIH1cblxuXG59XG4iLCJpbXBvcnQgT2JqZWN0UG9vbCBmcm9tIFwiLi9PYmplY3RQb29sXCI7XG5cbi8qXG4qIG5hbWU7XG4qL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0SW5zdGFuY2Uge1xuICAgIHByaXZhdGUgc3RhdGljIGNsenMgPSBbXTtcbiAgICBwcml2YXRlIHN0YXRpYyBvYmplY3RzID0gW107XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldChjbHM6IGFueSkge1xuICAgICAgICBsZXQgaWR4ID0gdGhpcy5jbHpzLmluZGV4T2YoY2xzKTtcbiAgICAgICAgcmV0dXJuIChpZHggPj0gMCAmJiB0aGlzLm9iamVjdHNbaWR4XSkgfHwgdGhpcy5jcmVhdGUoY2xzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGUoY2xzOiBhbnkpIHtcbiAgICAgICAgdmFyIG9iaiA9IE9iamVjdFBvb2wucG9wKGNscyk7XG4gICAgICAgIHRoaXMub2JqZWN0cy5wdXNoKG9iaik7XG4gICAgICAgIHRoaXMuY2x6cy5wdXNoKGNscyk7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0UG9vbCB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgY2xzQXJyID0gW107XG5cbiAgICBzdGF0aWMgcG9wKGNsczogYW55KSB7XG4gICAgICAgIGxldCBpZHggPSB0aGlzLmNsc0Fyci5pbmRleE9mKGNscyk7XG4gICAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgICAgICBpZHggPSB0aGlzLmNsc0Fyci5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmNsc0Fyci5wdXNoKGNscyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGtleSA9ICdwb29sS2V5JyArIGlkeDtcbiAgICAgICAgbGV0IGl0ZW0gPSBMYXlhLlBvb2wuZ2V0SXRlbUJ5Q2xhc3Moa2V5LCBjbHMpO1xuICAgICAgICBpdGVtLnBvb2xLZXkgPSBrZXk7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHN0YXRpYyBwdXNoKGl0ZW0pIHtcbiAgICAgICAgTGF5YS5Qb29sLnJlY292ZXIoaXRlbS5wb29sS2V5LCBpdGVtKTtcbiAgICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgIGNsYXNzIFNjYWxlQnV0dG9uU2NyaXB0IHtcbiBcbiAgICBwdWJsaWMgZGVsYXlUaW1lOiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBtaW5TY2FsZTogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIG1vbmtleUJveDogTGF5YS5JbWFnZTtcblxuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICrorr7nva5vd25lcuWHveaVsO+8jOWPr+S7peebtOaOpeiOt+WPluWIsOa3u+WKoOmZhOWKoOiEmuacrOeahOe7hOS7tuWunuS+iyBcbiAgICAgKiovXG4gICAgcHVibGljIHNldCBvd25lcih2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMubW9ua2V5Qm94ID0gdmFsdWU7XG4gICAgICAgIC8v6Ieq5a6a5LmJ55qE6ISa5pys5Lya5pyJ5pe25bqP6Zeu6aKY77yM5omA5Lul5Zyo5q2k5re75Yqg5LiA5Liq5bu25pe2XG4gICAgICAgIHRoaXMubW9ua2V5Qm94LmZyYW1lT25jZSgyLCB0aGlzLCB0aGlzLm9uTG9hZGVkKTtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgb25Mb2FkZWQoKTogdm9pZCB7XG4gICAgICAgLyog6K6+572u5oyJ6ZKu5Li65Y2V5oCB5oyJ6ZKuXG4gICAgICAgICoqIOWPluWAvO+8mlxuICAgICAgICAqKiAx77ya5Y2V5oCB44CC5Zu+54mH5LiN5YGa5YiH5Ymy77yM5oyJ6ZKu55qE55qu6IKk54q25oCB5Y+q5pyJ5LiA56eN44CCXG4gICAgICAgICoqIDLvvJrkuKTmgIHjgILlm77niYflsIbku6Xnq5bnm7TmlrnlkJHooqvnrYnmr5TliIflibLkuLoy6YOo5YiG77yM5LuO5LiK5ZCR5LiL77yM5L6d5qyh5Li65by56LW354q25oCB55qu6IKk44CB5oyJ5LiL5ZKM57uP6L+H5Y+K6YCJ5Lit54q25oCB55qu6IKk44CCXG4gICAgICAgICoqIDPvvJrkuInmgIHjgILlm77niYflsIbku6Xnq5bnm7TmlrnlkJHooqvnrYnmr5TliIflibLkuLoy6YOo5YiG77yM5LuO5LiK5ZCR5LiL77yM5L6d5qyh5Li65by56LW354q25oCB55qu6IKk44CB57uP6L+H54q25oCB55qu6IKk44CB5oyJ5LiL5ZKM6YCJ5Lit54q25oCB55qu6IKkXG4gICAgICAgICovXG4gICAgICAgIC8v5re75Yqg6byg5qCH5oyJ5LiL5LqL5Lu25L6m5ZCs44CC5oyJ5pe25pe257yp5bCP5oyJ6ZKu44CCXG4gICAgICAgIHRoaXMubW9ua2V5Qm94Lm9uKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5zY2FsZVNtYWxsKTtcbiAgICAgICAgLy/mt7vliqDpvKDmoIfmiqzotbfkuovku7bkvqblkKzjgILmiqzotbfml7bov5jljp/mjInpkq7jgIJcbiAgICAgICAgdGhpcy5tb25rZXlCb3gub24oTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5zY2FsZUJpZyk7XG4gICAgICAgIC8v5re75Yqg6byg5qCH56a75byA5LqL5Lu25L6m5ZCs44CC56a75byA5pe26L+Y5Y6f5oyJ6ZKu44CCXG4gICAgICAgIHRoaXMubW9ua2V5Qm94Lm9uKExheWEuRXZlbnQuTU9VU0VfT1VULCB0aGlzLCB0aGlzLnNjYWxlQmlnKTtcbiAgICB9XG4gICAgXG4gICAgXG4gICAgcHJpdmF0ZSBzY2FsZVNtYWxsKCk6dm9pZHtcbiAgICAgICAgLy/nvKnlsI/oh7MwLjjnmoTnvJPliqjmlYjmnpxcbiAgICAgICAgTGF5YS5Ud2Vlbi50byh0aGlzLm1vbmtleUJveCwge3NjYWxlWDowLjgsIHNjYWxlWTogMC44fSwgMik7XG4gICAgfVxuICAgIHByaXZhdGUgc2NhbGVCaWcoKTp2b2lke1xuICAgICAgICAvL+WPmOWkp+i/mOWOn+eahOe8k+WKqOaViOaenFxuICAgICAgICBMYXlhLlR3ZWVuLnRvKHRoaXMubW9ua2V5Qm94LCB7c2NhbGVYOjEsIHNjYWxlWToxfSwgMik7XG4gICAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgIGNsYXNzIFV0aWwge1xuICAgIHB1YmxpYyBsb2FkKHJlcywgb25Qcm9ncmVzcz86IExheWEuSGFuZGxlcik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoc3VjLCBmYWlsKSA9PiB7XG4gICAgICAgICAgICBMYXlhLmxvYWRlci5sb2FkKHJlcywgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCBzdWMpLCBvblByb2dyZXNzKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZS50b1N0cmluZygpKVxuICAgIH1cbiAgICBnZXRJdGVtKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBMYXlhLkxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgfVxuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogVXRpbDtcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJKCk6IFV0aWwge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IFV0aWwpO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gRGF0YUtleSB7XG4gICAgY3VyX3JlZF9kYXlfbGltaXQgPSAnY3VyX3JlZF9kYXlfbGltaXQnLFxuICAgIGN1cl9zaGFrZV9kYXlfbGltaXQgPSAnY3VyX3NoYWtlX2RheV9saW1pdCcsXG4gICAgc2hha2VMYXN0VGltZSA9ICdzaGFrZUxhc3RUaW1lJyxcbiAgICBkYXRhQ05UID0gJ2RhdGFDTlQnLFxuICAgIHRvZGF5Q250ID0gJ3RvZGF5Q250JyxcbiAgICBsYXN0VGltZSA9ICdsYXN0VGltZScsXG59Il19 2072 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL0FwcGxpY2F0aW9ucy9MYXlhQWlySURFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvYXBwL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvR2FtZUNvbmZpZy50cyIsInNyYy9NYWluLnRzIiwic3JjL1JlZERyYXdhbC50cyIsInNyYy9UZXN0U2NlbmUudHMiLCJzcmMvZXZlbnQvRXZlbnRDZW50ZXIudHMiLCJzcmMvZXZlbnQvRXZlbnRFbnVtLnRzIiwic3JjL3Nkay9BZE1hbmFnZXIudHMiLCJzcmMvc2RrL05hdGl2ZUFkLnRzIiwic3JjL3Nkay9QY1Nkay50cyIsInNyYy9zZGsvVFRBZFNkay50cyIsInNyYy9zZGsvVHJhY2tpbmdTZGsudHMiLCJzcmMvc2RrL21vZGVsL0Jhc2VNb2RlbC50cyIsInNyYy9zZGsvbW9kZWwvUmVkcGFja2V0TW9kZWwudHMiLCJzcmMvc2RrL21vZGVsL1NoYWtlTW9kZWwudHMiLCJzcmMvdWkvbGF5YU1heFVJLnRzIiwic3JjL3VpdGwvQXJyYXlVdGlscy50cyIsInNyYy91aXRsL0RhdGVVdGlscy50cyIsInNyYy91aXRsL09iamVjdEluc3RhbmNlLnRzIiwic3JjL3VpdGwvT2JqZWN0UG9vbC50cyIsInNyYy91aXRsL1NjYWxlQnV0dG9uU2NyaXB0LnRzIiwic3JjL3VpdGwvVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNWQSxnR0FBZ0c7QUFDaEcseUNBQW1DO0FBQ25DLDhEQUF3RDtBQUN4RCx5Q0FBbUM7QUFDbkMsMkNBQXFDO0FBQ3JDOztFQUVFO0FBQ0Y7SUFhSTtJQUFjLENBQUM7SUFDUixlQUFJLEdBQVg7UUFDSSxJQUFJLEdBQUcsR0FBYSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUM3QyxHQUFHLENBQUMs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QUFDLGFBQWEsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtB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QUFDLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ3pELENBQUM7OztPQUFBO0lBQ0wsV0FBQztBQUFELENBakJBLEFBaUJDLElBQUE7O0FBRUQsSUFBWSxPQU9YO0FBUEQsV0FBWSxPQUFPO0lBQ2Ysa0RBQXVDLENBQUE7SUFDdkMsc0RBQTJDLENBQUE7SUFDM0MsMENBQStCLENBQUE7SUFDL0IsOEJBQW1CLENBQUE7SUFDbkIsZ0NBQXFCLENBQUE7SUFDckIsZ0NBQXFCLENBQUE7QUFDekIsQ0FBQyxFQVBXLE9BQU8sR0FBUCxlQUFPLEtBQVAsZUFBTyxRQU9sQiIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxuICAgIH07XHJcbn0pKCk7XHJcbihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCIvKipUaGlzIGNsYXNzIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IExheWFBaXJJREUsIHBsZWFzZSBkbyBub3QgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucy4gKi9cclxuaW1wb3J0IFRlc3RTY2VuZSBmcm9tIFwiLi9UZXN0U2NlbmVcIlxuaW1wb3J0IFNjYWxlQnV0dG9uU2NyaXB0IGZyb20gXCIuL3VpdGwvU2NhbGVCdXR0b25TY3JpcHRcIlxuaW1wb3J0IFJlZERyYXdhbCBmcm9tIFwiLi9SZWREcmF3YWxcIlxuaW1wb3J0IE5hdGl2ZUFkIGZyb20gXCIuL3Nkay9OYXRpdmVBZFwiXHJcbi8qXHJcbiog5ri45oiP5Yid5aeL5YyW6YWN572uO1xyXG4qL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lQ29uZmlne1xyXG4gICAgc3RhdGljIHdpZHRoOm51bWJlcj03NTA7XHJcbiAgICBzdGF0aWMgaGVpZ2h0Om51bWJlcj0xMzM0O1xyXG4gICAgc3RhdGljIHNjYWxlTW9kZTpzdHJpbmc9XCJmaXhlZHdpZHRoXCI7XHJcbiAgICBzdGF0aWMgc2NyZWVuTW9kZTpzdHJpbmc9XCJub25lXCI7XHJcbiAgICBzdGF0aWMgYWxpZ25WOnN0cmluZz1cInRvcFwiO1xyXG4gICAgc3RhdGljIGFsaWduSDpzdHJpbmc9XCJsZWZ0XCI7XHJcbiAgICBzdGF0aWMgc3RhcnRTY2VuZTphbnk9XCJUZXN0U2NlbmUuc2NlbmVcIjtcclxuICAgIHN0YXRpYyBzY2VuZVJvb3Q6c3RyaW5nPVwiXCI7XHJcbiAgICBzdGF0aWMgZGVidWc6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBzdGF0OmJvb2xlYW49ZmFsc2U7XHJcbiAgICBzdGF0aWMgcGh5c2ljc0RlYnVnOmJvb2xlYW49ZmFsc2U7XHJcbiAgICBzdGF0aWMgZXhwb3J0U2NlbmVUb0pzb246Ym9vbGVhbj10cnVlO1xyXG4gICAgY29uc3RydWN0b3IoKXt9XHJcbiAgICBzdGF0aWMgaW5pdCgpe1xyXG4gICAgICAgIHZhciByZWc6IEZ1bmN0aW9uID0gTGF5YS5DbGFzc1V0aWxzLnJlZ0NsYXNzO1xyXG4gICAgICAgIHJlZyhcIlRlc3RTY2VuZS50c1wiLFRlc3RTY2VuZSk7XG4gICAgICAgIHJlZyhcInVpdGwvU2NhbGVCdXR0b25TY3JpcHQudHNcIixTY2FsZUJ1dHRvblNjcmlwdCk7XG4gICAgICAgIHJlZyhcIlJlZERyYXdhbC50c1wiLFJlZERyYXdhbCk7XG4gICAgICAgIHJlZyhcInNkay9OYXRpdmVBZC50c1wiLE5hdGl2ZUFkKTtcclxuICAgIH1cclxufVxyXG5HYW1lQ29uZmlnLmluaXQoKTsiLCJpbXBvcnQgR2FtZUNvbmZpZyBmcm9tIFwiLi9HYW1lQ29uZmlnXCI7XHJcbmltcG9ydCBBZE1hbmFnZXIgZnJvbSBcIi4vc2RrL0FkTWFuYWdlclwiO1xyXG5pbXBvcnQgU2hha2VNb2RlbCBmcm9tIFwiLi9zZGsvbW9kZWwvU2hha2VNb2RlbFwiO1xyXG5pbXBvcnQgUGNTZGsgZnJvbSBcIi4vc2RrL1BjU2RrXCI7XHJcbmltcG9ydCBSZWRwYWNrZXRNb2RlbCBmcm9tIFwiLi9zZGsvbW9kZWwvUmVkcGFja2V0TW9kZWxcIjtcclxuY2xhc3MgTWFpbiB7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHQvL+agueaNrklEReiuvue9ruWIneWni+WMluW8leaTjlx0XHRcclxuXHRcdGlmICh3aW5kb3dbXCJMYXlhM0RcIl0pIExheWEzRC5pbml0KEdhbWVDb25maWcud2lkdGgsIEdhbWVDb25maWcuaGVpZ2h0KTtcclxuXHRcdGVsc2UgTGF5YS5pbml0KEdhbWVDb25maWcud2lkdGgsIEdhbWVDb25maWcuaGVpZ2h0LCBMYXlhW1wiV2ViR0xcIl0pO1xyXG5cdFx0TGF5YVtcIlBoeXNpY3NcIl0gJiYgTGF5YVtcIlBoeXNpY3NcIl0uZW5hYmxlKCk7XHJcblx0XHRMYXlhW1wiRGVidWdQYW5lbFwiXSAmJiBMYXlhW1wiRGVidWdQYW5lbFwiXS5lbmFibGUoKTtcclxuXHRcdExheWEuc3RhZ2Uuc2NhbGVNb2RlID0gR2FtZUNvbmZpZy5zY2FsZU1vZGU7XHJcblx0XHRMYXlhLnN0YWdlLnNjcmVlbk1vZGUgPSBHYW1lQ29uZmlnLnNjcmVlbk1vZGU7XHJcblx0XHRMYXlhLnN0YWdlLmFsaWduViA9IEdhbWVDb25maWcuYWxpZ25WO1xyXG5cdFx0TGF5YS5zdGFnZS5hbGlnbkggPSBHYW1lQ29uZmlnLmFsaWduSDtcclxuXHRcdC8v5YW85a655b6u5L+h5LiN5pSv5oyB5Yqg6L29c2NlbmXlkI7nvIDlnLrmma9cclxuXHRcdExheWEuVVJMLmV4cG9ydFNjZW5lVG9Kc29uID0gR2FtZUNvbmZpZy5leHBvcnRTY2VuZVRvSnNvbjtcclxuXHJcblx0XHQvL+aJk+W8gOiwg+ivlemdouadv++8iOmAmui/h0lEReiuvue9ruiwg+ivleaooeW8j++8jOaIluiAhXVybOWcsOWdgOWinuWKoGRlYnVnPXRydWXlj4LmlbDvvIzlnYflj6/miZPlvIDosIPor5XpnaLmnb/vvIlcclxuXHRcdGlmIChHYW1lQ29uZmlnLmRlYnVnIHx8IExheWEuVXRpbHMuZ2V0UXVlcnlTdHJpbmcoXCJkZWJ1Z1wiKSA9PSBcInRydWVcIikgTGF5YS5lbmFibGVEZWJ1Z1BhbmVsKCk7XHJcblx0XHRpZiAoR2FtZUNvbmZpZy5waHlzaWNzRGVidWcgJiYgTGF5YVtcIlBoeXNpY3NEZWJ1Z0RyYXdcIl0pIExheWFbXCJQaHlzaWNzRGVidWdEcmF3XCJdLmVuYWJsZSgpO1xyXG5cdFx0aWYgKEdhbWVDb25maWcuc3RhdCkgTGF5YS5TdGF0LnNob3coKTtcclxuXHRcdExheWEuYWxlcnRHbG9iYWxFcnJvciA9IHRydWU7XHJcblxyXG5cdFx0Ly/mv4DmtLvotYTmupDniYjmnKzmjqfliLbvvIx2ZXJzaW9uLmpzb27nlLFJREXlj5HluIPlip/og73oh6rliqjnlJ/miJDvvIzlpoLmnpzmsqHmnInkuZ/kuI3lvbHlk43lkI7nu63mtYHnqItcclxuXHRcdExheWEuUmVzb3VyY2VWZXJzaW9uLmVuYWJsZShcInZlcnNpb24uanNvblwiLCBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsIHRoaXMub25WZXJzaW9uTG9hZGVkKSwgTGF5YS5SZXNvdXJjZVZlcnNpb24uRklMRU5BTUVfVkVSU0lPTik7XHJcblx0fVxyXG5cclxuXHRvblZlcnNpb25Mb2FkZWQoKTogdm9pZCB7XHJcblx0XHQvL+a/gOa0u+Wkp+Wwj+WbvuaYoOWwhO+8jOWKoOi9veWwj+WbvueahOaXtuWAme+8jOWmguaenOWPkeeOsOWwj+WbvuWcqOWkp+WbvuWQiOmbhumHjOmdou+8jOWImeS8mOWFiOWKoOi9veWkp+WbvuWQiOmbhu+8jOiAjOS4jeaYr+Wwj+WbvlxyXG5cdFx0TGF5YS5BdGxhc0luZm9NYW5hZ2VyLmVuYWJsZShcImZpbGVjb25maWcuanNvblwiLCBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsIHRoaXMub25Db25maWdMb2FkZWQpKTtcclxuXHR9XHJcblxyXG5cdG9uQ29uZmlnTG9hZGVkKCk6IHZvaWQge1xyXG5cclxuXHRcdHRoaXMuaW5pdERhdGEoKTtcclxuXHRcdC8v5Yqg6L29SURF5oyH5a6a55qE5Zy65pmvXHJcblx0XHRHYW1lQ29uZmlnLnN0YXJ0U2NlbmUgJiYgTGF5YS5TY2VuZS5vcGVuKEdhbWVDb25maWcuc3RhcnRTY2VuZSk7XHJcblx0fVxyXG5cclxuXHQvKirliJ3lp4vljJZTREsgKi9cclxuXHRhc3luYyBpbml0RGF0YSgpIHtcclxuXHRcdC8qKumakOiXj+WQr+WKqOWxjyAqL1xyXG5cdFx0UGNTZGsuSS5oaWRlU3BsYXNoKClcclxuXHRcdC8qKuWIneWni+WMlmFkayDojrflj5ZhcHDphY3nva7kv6Hmga8gKi9cclxuXHRcdFBjU2RrLkkuaW5pdCgpO1xyXG5cdFx0Lyoq6aKE5Yqg6L296KeG6aKRICovXHJcblx0XHRBZE1hbmFnZXIuSS5pbml0KCk7XHJcblx0XHQvKirojrflj5bnuqLljIXphY3nva4g5pGH5LiA5pGHIOetiemdmeaAgeaVsOaNriAqL1xyXG5cdFx0YXdhaXQgUGNTZGsuSS5pbml0R2FtZUNvbmZpZygpO1xyXG5cclxuXHJcblx0XHRhd2FpdCBSZWRwYWNrZXRNb2RlbC5JLmluaXQoKVxyXG5cclxuICAgICAgICBhd2FpdCBTaGFrZU1vZGVsLkkuaW5pdCgpO1xyXG5cdH1cclxufVxyXG4vL+a/gOa0u+WQr+WKqOexu1xyXG5uZXcgTWFpbigpO1xyXG4iLCJpbXBvcnQgUmVkcGFja2V0TW9kZWwgZnJvbSBcIi4vc2RrL21vZGVsL1JlZHBhY2tldE1vZGVsXCI7XG5pbXBvcnQgeyBFdmVudENlbnRlciB9IGZyb20gXCIuL2V2ZW50L0V2ZW50Q2VudGVyXCI7XG5pbXBvcnQgeyBFdmVudEVudW0gfSBmcm9tIFwiLi9ldmVudC9FdmVudEVudW1cIjtcbmltcG9ydCBQY1NkayBmcm9tIFwiLi9zZGsvUGNTZGtcIjtcbi8qKlxuICog5Li755WM6Z2iICDph5HluIHph5Hpop1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVkRHJhd2FsIGV4dGVuZHMgTGF5YS5TY3JpcHQge1xuICAgIC8qKiBAcHJvcCB7bmFtZTpjb2lubGFiLCB0aXBzOlwi6YeR5biBXCIsIHR5cGU6Tm9kZX0qL1xuICAgIGNvaW5sYWI6IExheWEuTGFiZWw7XG4gICAgLyoqIEBwcm9wIHtuYW1lOnRpcGxhYiwgdGlwczpcIuaPkOekulwiLCB0eXBlOk5vZGV9Ki9cbiAgICB0aXBsYWI6IExheWEuTGFiZWw7XG5cbiAgICBwcml2YXRlIHRvdGFsQ29pbjogbnVtYmVyID0gMTEwO1xuXG4gICAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCk7IH1cbiAgICBvblN0YXJ0KCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXIoKTtcbiAgICAgICAgLy8gdGhpcy50aXBsYWIudmlzaWJsZSA9IGZhbHNlO1xuICAgIH1cbiAgICBvbkVuYWJsZSgpIHtcbiAgICAgICAgRXZlbnRDZW50ZXIuYWRkKEV2ZW50RW51bS5BUFBfU0hPVywgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICAgICAgRXZlbnRDZW50ZXIuYWRkKEV2ZW50RW51bS5VUERBVEVfQ09JTiwgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICB9XG5cbiAgICBvbkRpc2FibGUoKSB7XG4gICAgICAgIEV2ZW50Q2VudGVyLnJlbW92ZShFdmVudEVudW0uQVBQX1NIT1csIHRoaXMsIHRoaXMudXBkYXRlU3Rhcik7XG4gICAgICAgIEV2ZW50Q2VudGVyLnJlbW92ZShFdmVudEVudW0uVVBEQVRFX0NPSU4sIHRoaXMsIHRoaXMudXBkYXRlU3Rhcik7XG4gICAgfVxuXG4gICAgYXN5bmMgdXBkYXRlU3RhcigpIHtcbiAgICAgICAgbGV0IGNvaW4gPSBhd2FpdCBQY1Nkay5JLm15Q29pbigpO1xuICAgICAgICB0aGlzLnRvdGFsQ29pbiA9IGNvaW47XG4gICAgICAgIHRoaXMuY29pbmxhYi50ZXh0ID0gJycgKyBjb2luO1xuICAgICAgICBsZXQgc3RyID0gJ+WPr+aPkOeOsCc7XG4gICAgICAgIC8qKuabtOaWsOS4i+S4i+S4gOasoeaPkOeOsOeahOmineW6piAqL1xuICAgICAgICBsZXQgbmV4dERyYXdhbCA9IGF3YWl0ICBQY1Nkay5JLm1pbldpdGhEcmF3YWwoKTtcbiAgICAgICAgaWYgKHRoaXMudG90YWxDb2luID4gMCkge1xuICAgICAgICAgICAgbGV0IGxlZnRDb2luID0gbmV4dERyYXdhbCAtIHRoaXMudG90YWxDb2luO1xuICAgICAgICAgICAgaWYgKGxlZnRDb2luID4gMClcbiAgICAgICAgICAgICAgICBzdHIgPSBg6L+Y5beuJHsobGVmdENvaW4gLyAxMDAwMCkudG9GaXhlZCgzKX3ph5Hpop3lj6/mj5DnjrBgO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGlwbGFiLnRleHQgPSBzdHI7XG4gICAgICAgIHRoaXMudGlwbGFiLnZpc2libGUgPSBCb29sZWFuKG5leHREcmF3YWwpO1xuICAgIH1cbn0iLCJpbXBvcnQgeyB1aSB9IGZyb20gXCIuL3VpL2xheWFNYXhVSVwiO1xuaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi9zZGsvQWRNYW5hZ2VyXCI7XG5pbXBvcnQgU2hha2VNb2RlbCBmcm9tIFwiLi9zZGsvbW9kZWwvU2hha2VNb2RlbFwiO1xuaW1wb3J0IFJlZHBhY2tldE1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9SZWRwYWNrZXRNb2RlbFwiO1xuaW1wb3J0IFBjU2RrIGZyb20gXCIuL3Nkay9QY1Nka1wiO1xuaW1wb3J0IE5hdGl2ZUFkIGZyb20gXCIuL3Nkay9OYXRpdmVBZFwiO1xuaW1wb3J0IFV0aWwgZnJvbSBcIi4vdWl0bC9VdGlsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RTY2VuZSBleHRlbmRzIHVpLlRlc3RTY2VuZVVJIHtcbiAgICBwcml2YXRlIGlzTG9uZ1ZpYnJhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLy/lhbPpl63lpJrngrnop6bmjqfvvIzlkKbliJnlsLHml6DmlYzkuoZcbiAgICAgICAgTGF5YS5Nb3VzZU1hbmFnZXIubXVsdGlUb3VjaEVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLVRlc3RTY2VuZS0tLS0tLS0nKVxuICAgICAgICAvLyB0aGlzLk5hdGl2ZUFELnZpc2libGUgPSBmYWxzZTtcblxuICAgIH1cblxuICAgIG9uRW5hYmxlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ0blNlcnZlci5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5TZXJ2ZXIpO1xuICAgICAgICB0aGlzLmJ0blZpYnJhdGUub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgKCkgPT4ge1xuICAgICAgICAgICAgUGNTZGsuSS52aWJyYXRlKHRoaXMuaXNMb25nVmlicmF0ZSA/IDAgOiAxKTtcbiAgICAgICAgICAgIHRoaXMuaXNMb25nVmlicmF0ZSA9ICF0aGlzLmlzTG9uZ1ZpYnJhdGU7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmJ0bkRyYXdhbC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5QZXJzb25hbCk7XG4gICAgICAgIHRoaXMuYnRuSW52aXRlLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuaW52aXRhdGlvbik7XG4gICAgICAgIHRoaXMuYnRuX3NoYWtlLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMudG91Y2hTaGFrZSk7XG4gICAgICAgIHRoaXMuYnRuUHJlbG9hZEFELm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMucHJlbG9hZEFEKTtcbiAgICAgICAgdGhpcy5idG5TaG93QmFubmVyLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuc2hvd0Jhbm5lcik7XG4gICAgICAgIHRoaXMuYnRuU2hvd0Z1bGxBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dGdWxsQWQpO1xuICAgICAgICB0aGlzLmJ0blNob3dOYXRpdmVBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dOYXRpdmVBZCk7XG4gICAgICAgIHRoaXMuYnRuU2hvd0ludGVyQWQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5zaG93SW50ZXJBZCk7XG4gICAgICAgIHRoaXMuYnRuUmV3YXJkQWQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5zaG93UmV3YXJkQWQpO1xuICAgICAgICB0aGlzLmJ0blJlZHBhY2tldC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5SZWRwYWNrZXQpO1xuXG4gICAgICAgIHRoaXMuYnRuUHJlVmlkZW8ub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5wcmVsb2FkUmV3YXJkQWQpO1xuICAgICAgICB0aGlzLmJ0blByZUZ1bGwub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5wcmVsb2FkRnVsbCk7XG4gICAgICAgIHRoaXMuYnRuUHJlSW5zZXJ0Lm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMucHJlbG9hZEludGVyQWQpO1xuICAgICAgICB0aGlzLmJ0blByZU5hdGl2ZS5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnByZWxvYWROYXRpdmVBZCk7XG4gICAgICAgIHRoaXMuYnRuQ2xvc2VCYW5uZXIub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5jbG9zZUFkQmFubmVyKTtcbiAgICAgICAgdGhpcy5idG5DbG9zZU5hdGl2ZS5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLmNsb3NlQWR2ZXJEaWFsb2cpO1xuICAgICAgICB0aGlzLmJ0bk1pbldpdGhEcmF3YWwub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5taW5XaXRoRHJhd2FsKTtcblxuICAgIH1cblxuICAgIC8qKumihOWKoOi9veW5v+WRiiAqL1xuICAgIGFzeW5jIHByZWxvYWRBRCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXByZWxvYWRBRC0tLS0tLS0nKVxuICAgICAgICBhd2FpdCBBZE1hbmFnZXIuSS5wcmVsb2FkQmFubmVyKCk7XG4gICAgfVxuXG4gICAgcHJlbG9hZFJld2FyZEFkKCkge1xuICAgICAgICBBZE1hbmFnZXIuSS5wcmVsb2FkUmV3YXJkQWQoKTtcbiAgICB9XG5cbiAgICBwcmVsb2FkRnVsbCgpIHtcbiAgICAgICAgQWRNYW5hZ2VyLkkucHJlbG9hZEZ1bGxBZCgpO1xuICAgIH1cblxuICAgIHByZWxvYWRJbnRlckFkKCkge1xuICAgICAgICBBZE1hbmFnZXIuSS5wcmVsb2FkSW50ZXJBZCgpO1xuICAgIH1cblxuICAgIHByZWxvYWROYXRpdmVBZCgpIHtcbiAgICAgICAgdGhpcy5OYXRpdmVBRC5nZXRDb21wb25lbnQoTmF0aXZlQWQpLmluaXROYXRpdmVBZCgxKTtcbiAgICB9XG5cbiAgICBjbG9zZUFkdmVyRGlhbG9nKCkge1xuICAgICAgICBBZE1hbmFnZXIuSS5jbG9zZUFkdmVyRGlhbG9nKClcbiAgICB9XG4gICAgY2xvc2VBZEJhbm5lcigpIHtcbiAgICAgICAgQWRNYW5hZ2VyLkkuY2xvc2VBZEJhbm5lcigpXG4gICAgfVxuXG4gICAgLyoq5pi+56S65YWo5bGP5bm/5ZGKICovXG4gICAgc2hvd0Z1bGxBZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXNob3dGdWxsQWQtLS0tLS0tJylcbiAgICAgICAgQWRNYW5hZ2VyLkkuc2hvd0Z1bGxBZCgpO1xuICAgIH1cbiAgICAvKirmmL7npLpiYW5uZXIgKi9cbiAgICBzaG93QmFubmVyKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tc2hvd0Jhbm5lci0tLS0tLS0nKVxuICAgICAgICBBZE1hbmFnZXIuSS5zaG93QmFubmVyKCk7XG4gICAgfVxuXG4gICAgLyoq5L+h5oGv5rWB5bm/5ZGKICovXG4gICAgc2hvd05hdGl2ZUFkKCkge1xuICAgICAgICB0aGlzLk5hdGl2ZUFELmdldENvbXBvbmVudChOYXRpdmVBZCkuaW5pdE5hdGl2ZUFkKCk7XG4gICAgfVxuXG4gICAgLyoq5o+S5bGP5bm/5ZGKICovXG4gICAgc2hvd0ludGVyQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93SW50ZXJBZC0tLS0tLS0nKVxuICAgICAgICBBZE1hbmFnZXIuSS5zaG93SW50ZXJBZCgpO1xuICAgIH1cbiAgICAvKirmv4DlirHop4bpopHlub/lkYogKi9cbiAgICBhc3luYyBzaG93UmV3YXJkQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93UmV3YXJkQWQtLS0tLS0tJylcbiAgICAgICAgYXdhaXQgQWRNYW5hZ2VyLkkuc2hvd1Jld2FyZEFkKCk7XG4gICAgICAgIC8qKuaIkOWKn+WQjuaJp+ihjOWvueW6lOeahOWlluWKsSAqL1xuICAgIH1cbiAgICAvKirmhI/op4Hlj43ppoggKi9cbiAgICBvcGVuU2VydmVyKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tb3BlblNlcnZlci0tLS0tLS0nKVxuICAgICAgICBQY1Nkay5JLmZlZWRiYWNrKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb3BlblJlZHBhY2tldCgpIHtcbiAgICAgICAgUmVkcGFja2V0TW9kZWwuSS5jaGVja1JlZHBhY2tldCgpXG4gICAgfVxuXG4gICAgYXN5bmMgbWluV2l0aERyYXdhbCgpIHtcbiAgICAgICAgbGV0IG1vbmV5ID0gYXdhaXQgUGNTZGsuSS5taW5XaXRoRHJhd2FsKClcbiAgICAgICAgdGhpcy5taW5XaXRoRHJhd2FsTGFiLnRleHQgPSAn5pyA5L2O5o+Q546wOicgKyBtb25leTtcbiAgICB9XG5cblxuICAgIC8qKuaJk+W8gOS4quS6uuS4reW/gyAqL1xuICAgIG9wZW5QZXJzb25hbCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLW9wZW5TZXJ2ZXItLS0tLS0tJylcbiAgICAgICAgUGNTZGsuSS5wZXJzb25hbCgwKTtcbiAgICB9XG4gICAgLyoq6YKA6K+35aW95Y+LICovXG4gICAgaW52aXRhdGlvbigpIHtcbiAgICAgICAgUGNTZGsuSS5pbnZpdGF0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogMVx06YeR5biBXG4gICAgMlx05r+A5Yqx6KeG6aKR5ZCO6YeR5biBXG4gICAgM1x0NCA1IDYgNyDmuLjmiI/kuK3lr7nlupTnmoTpgZPlhbdcbiAgICA4XHTnqbpcbiAgICAgKi9cbiAgICB0b3VjaFNoYWtlKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tdG91Y2hTaGFrZS0tLS0tLS0nKVxuICAgICAgICBQY1Nkay5JLnZpYnJhdGUoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIDEu5Zue5Y675pif5pifIOmBk+WFtyBcbiAgICAgICAgICogMi7nuqLljIUgICDnm7TmjqXojrflvpfivqbluIHvvJvmiJbogIXnm7TmjqXlvLnmv4DlirHop4bpopHlkI7vvIzojrflvpfivqbluIFcbiAgICAgICAgICogMy7ml6DpgZPlhbdcbiAgICAgICAgICog55u05o6l5bGV4r2w5o+S5bGPXG4gICAgICAgICAqICAqL1xuICAgICAgICBsZXQgZGF0YSA9IFNoYWtlTW9kZWwuSS5nZXRTaGFrZVR5cGUoKTtcbiAgICAgICAgY29uc29sZS5sb2coJ+aRh+S4gOaRh+iOt+WPlue7k+aenO+8micgKyBKU09OLnN0cmluZ2lmeShkYXRhKSlcbiAgICAgICAgaWYgKCFkYXRhKSByZXR1cm47XG4gICAgICAgIGxldCB0eXBlID0gZGF0YS50eXBlO1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgIC8qKiAn6LCi6LCi5Y+C5LiO77yM5LiL5qyh5aW96L+Q77yBJyovO1xuICAgICAgICAgICAgICAgIEFkTWFuYWdlci5JLnNob3dJbnRlckFkKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDb2luKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgdGhpcy53YXRjaEFEQ29pbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvcHMoZGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRQcm9wcyhkYXRhKSB7XG4gICAgICAgIGxldCBib29zdGVyO1xuICAgICAgICBsZXQgcmV3YXJkTnVtID0gZGF0YS5udW07XG4gICAgICAgIGxldCB0eXBlID0gZGF0YS50eXBlO1xuICAgICAgICAvKipcbiAgICAgICAgICog5aSE55CG5ri45oiP5Lit55qE6YGT5YW35pi+56S6XG4gICAgICAgICAqL1xuICAgICAgICAvLyBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgLy8gICAgIGNhc2UgNDpcbiAgICAgICAgLy8gICAgICAgICBib29zdGVyID0gQm9vc3RlclR5cGUuUmVtb3ZlO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyAgICAgY2FzZSA2OlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5DaGFuZ2U7XG4gICAgICAgIC8vICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vICAgICBjYXNlIDU6XG4gICAgICAgIC8vICAgICAgICAgYm9vc3RlciA9IEJvb3N0ZXJUeXBlLlJlZnJlc2g7XG4gICAgICAgIC8vICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vICAgICBjYXNlIDc6XG4gICAgICAgIC8vICAgICAgICAgYm9vc3RlciA9IEJvb3N0ZXJUeXBlLlJhbmRSZW1vdmU7XG4gICAgICAgIC8vICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vICAgICBjYXNlIDM6XG4gICAgICAgIC8vICAgICAgICAgYm9vc3RlciA9IEJvb3N0ZXJUeXBlLlN0YXI7XG4gICAgICAgIC8vICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gVmlld01hbmFnZXIuSS5vcGVuUG9wd2luKFJlY2VpdmVQcm9wc1BvcHdpbiwgYm9vc3RlciwgcmV3YXJkTnVtKTtcblxuICAgIH1cbiAgICAvKipcbiAgICAgKiDnnIvlub/lkYrojrflvpfnuqLljIVcbiAgICAgKi9cbiAgICBhc3luYyB3YXRjaEFEQ29pbigpIHtcbiAgICAgICAgYXdhaXQgQWRNYW5hZ2VyLkkuc2hvd1Jld2FyZEFkKCk7XG4gICAgICAgIHRoaXMuZ2V0Q29pbigpO1xuICAgIH1cbiAgICAvKirnm7TmjqXojrflvpfnuqLljIUgKi9cbiAgICBnZXRDb2luKCkge1xuICAgICAgICAvL1xi5Yi35paw5oC76YeR5biBXG4gICAgICAgIC8vIEFwcE1hbmFnZXIuSS5yZWRwYWNrZXQuZ2V0UmVwYWNrZXQoKVxuICAgICAgICAvLyBWaWV3TWFuYWdlci5JLm9wZW5Qb3B3aW4oUmVkUGFja2V0UmV3YXJkLCAyKTtcbiAgICB9XG59IiwiaW1wb3J0IHsgRXZlbnRFbnVtIH0gZnJvbSBcIi4vRXZlbnRFbnVtXCI7XG5cbi8qXG4qIG5hbWU7XG4qL1xuZXhwb3J0IGNsYXNzIEV2ZW50Q2VudGVyIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IExheWEuRXZlbnREaXNwYXRjaGVyO1xuICAgIHByaXZhdGUgc3RhdGljIGdldCBJKCk6IExheWEuRXZlbnREaXNwYXRjaGVyIHtcbiAgICAgICAgd2luZG93WydldiddID0gdGhpcy5faW5zdGFuY2U7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgTGF5YS5FdmVudERpc3BhdGNoZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZW1pdChldmVudDogRXZlbnRFbnVtLCAuLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuSS5ldmVudChldmVudC50b1N0cmluZygpLCBhcmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFkZCh0eXBlOiBFdmVudEVudW0sIGNhbGxlcjogYW55LCBsaXN0ZW5lcjogRnVuY3Rpb24sIGFyZ3M/OiBBcnJheTxhbnk+KSB7XG4gICAgICAgIHRoaXMuSS5vbih0eXBlLnRvU3RyaW5nKCksIGNhbGxlciwgbGlzdGVuZXIsIGFyZ3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVtb3ZlKHR5cGU6IEV2ZW50RW51bSwgY2FsbGVyOiBhbnksIGxpc3RlbmVyOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLkkub2ZmKHR5cGUudG9TdHJpbmcoKSwgY2FsbGVyLCBsaXN0ZW5lcik7XG4gICAgfVxufSIsImV4cG9ydCBlbnVtIEV2ZW50RW51bSB7XG5cblx0Q0hFQ0tfUkVEUEFDS0VUID0gPGFueT4nY2hlY2tfcmVkcGFja2V0Jyxcblx0QVBQX1NIT1cgPSA8YW55PidhcHAuc2hvdycsXG5cdEFQUF9ISURFID0gPGFueT4nYXBwLmhpZGUnLFxuXG5cblx0VVBEQVRFX0NPSU4gPSA8YW55Pid1cGRhdGUuY29pbicsXG5cbn0iLCJpbXBvcnQgVFRBZFNkayBmcm9tIFwiLi9UVEFkU2RrXCI7XHJcbmltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWRNYW5hZ2VyIHtcclxuICAgIHByaXZhdGUgbGFzdFZpZGVvVGltZTogbnVtYmVyO1xyXG5cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5wcmVsb2FkUmV3YXJkQWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcmVsb2FkQmFubmVyKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5sb2FkQmFubmVyRXhwcmVzc0FkKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByZWxvYWRSZXdhcmRBZCgpIHtcclxuICAgICAgICBUVEFkU2RrLkkuc2hvd1Jld2FyZFZpZGVvQWQoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJlbG9hZEZ1bGxBZCgpIHtcclxuICAgICAgICBUVEFkU2RrLkkubG9hZEZ1bGxTY3JlZW5WaWRlb0FkKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByZWxvYWRJbnRlckFkKCkge1xyXG4gICAgICAgIC8vIFRUQWRTZGsuSS5zaG93SW50ZXJhY3Rpb25FeHByZXNzQWQoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJlbG9hZE5hdGl2ZUFkKCl7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWRGdWxsU2NyZWVuVmlkZW9BZCgxKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZUFkdmVyRGlhbG9nKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5jbG9zZUFkdmVyRGlhbG9nKClcclxuICAgIH1cclxuICAgIGNsb3NlQWRCYW5uZXIoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmNsb3NlQWRCYW5uZXIoKVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dSZXdhcmRBZCgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gYXdhaXQgVFRBZFNkay5JLnNob3dSZXdhcmRWaWRlb0FkKCk7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdFZpZGVvVGltZSA9IExheWEudGltZXIuY3VyclRpbWVyO1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJldCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhc3luYyBzaG93RnVsbEFkKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCByZXQgPSBhd2FpdCBUVEFkU2RrLkkubG9hZEZ1bGxTY3JlZW5WaWRlb0FkKCk7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEZ1bGxBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJldCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRGdWxsQWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzaG93SW50ZXJBZCgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gYXdhaXQgVFRBZFNkay5JLnNob3dJbnRlcmFjdGlvbkV4cHJlc3NBZCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRJbnRlckFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEludGVyQWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgY2hlY2tWaWRlb0luQ2QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFZpZGVvVGltZSAmJiAoTGF5YS50aW1lci5jdXJyVGltZXIgLSB0aGlzLmxhc3RWaWRlb1RpbWUgPD0gMzAwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dCYW5uZXIoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWRCYW5uZXJFeHByZXNzQWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBcclxuICAgIHNob3dOYXRpdmVBZCh4LCB5LCB3LCBoLHByZWxvYWQ9MCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5sb2FkTmF0aXZlRXhwcmVzc0FkKHgsIHksIHcsIGgscHJlbG9hZCk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEkoKTogQWRNYW5hZ2VyIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0SW5zdGFuY2UuZ2V0KEFkTWFuYWdlcik7XHJcbiAgICB9XHJcbn1cclxuXHJcbiIsImltcG9ydCBBZE1hbmFnZXIgZnJvbSBcIi4vQWRNYW5hZ2VyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5hdGl2ZUFkIGV4dGVuZHMgTGF5YS5TY3JpcHQge1xuXG4gICBwdWJsaWMgaW5pdE5hdGl2ZUFkKHByZWxvYWQ9MCl7XG4gICAgICAgIGxldCBnbG9iYWxQb2ludCA9IHRoaXMuaXRlbS5sb2NhbFRvR2xvYmFsKExheWEuUG9pbnQuRU1QVFksIHRydWUpO1xuICAgICAgICBBZE1hbmFnZXIuSS5zaG93TmF0aXZlQWQoZ2xvYmFsUG9pbnQueCwgZ2xvYmFsUG9pbnQueSwgdGhpcy5pdGVtLndpZHRoLCB0aGlzLml0ZW0uaGVpZ2h0LHByZWxvYWQpO1xuICAgIH1cbiAgICBvbkVuYWJsZSgpOiB2b2lkIHtcbiAgICAgICB0aGlzLmluaXROYXRpdmVBZCgpOyAgIFxuICAgIH1cblxuICAgIG9uRGlzYWJsZSgpOiB2b2lkIHtcbiAgICAgICAgQWRNYW5hZ2VyLkkuY2xvc2VBZHZlckRpYWxvZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGl0ZW0oKTogTGF5YS5WaWV3IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3duZXIgYXMgYW55O1xuICAgIH1cbn0iLCJpbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcbmltcG9ydCB7IEV2ZW50Q2VudGVyIH0gZnJvbSBcIi4uL2V2ZW50L0V2ZW50Q2VudGVyXCI7XG5pbXBvcnQgeyBFdmVudEVudW0gfSBmcm9tIFwiLi4vZXZlbnQvRXZlbnRFbnVtXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBjU2RrIHtcbiAgICBwcml2YXRlIF93aWR0aDogbnVtYmVyO1xuICAgIHByaXZhdGUgX2hlaWdodDogbnVtYmVyO1xuICAgIHByaXZhdGUgX2NoYW5uZWw6IHN0cmluZztcbiAgICBwcml2YXRlIF92ZXJzaW9uOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfbGV2ZWw6IG51bWJlcjtcbiAgICBwcml2YXRlIF9nYW1lQ29uZmlnOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgcGFuZ29saW5JZDogc3RyaW5nO1xuICAgIHB1YmxpYyBhZG5ldElkOiBzdHJpbmc7XG5cbiAgICBpbml0KCkge1xuICAgICAgICB0aGlzLmdldFN5c3RlbUluZm8oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBteUJyaWRnZSgpIHtcbiAgICAgICAgaWYgKE15QnJpZGdlKSB7XG4gICAgICAgICAgICByZXR1cm4gTXlCcmlkZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG4gICAgLyoq6I635Y+W5Z+65pys54mI5pys5L+h5oGv5Lul5Y+K5omL5py655qE6YWN572uICovXG4gICAgcHJpdmF0ZSBnZXRTeXN0ZW1JbmZvKGtleTogbnVtYmVyID0gMCkge1xuICAgICAgICBsZXQgcmV0ID0gdGhpcy5teUJyaWRnZS5nZXRTeXN0ZW1JbmZvKGtleSk7XG4gICAgICAgIGxldCB7IHcsIGgsIHZlcnNpb25OYW1lLCBjaGFubmVsLCBwYW5nb2xpbiwgYWRuZXQsIGxldmVsIH0gPSBKU09OLnBhcnNlKHJldCk7XG4gICAgICAgIFt0aGlzLl93aWR0aCwgdGhpcy5faGVpZ2h0LCB0aGlzLl92ZXJzaW9uLFxuICAgICAgICB0aGlzLl9jaGFubmVsLCB0aGlzLnBhbmdvbGluSWQsXG4gICAgICAgIHRoaXMuYWRuZXRJZCwgdGhpcy5fbGV2ZWxdID0gW3csIGgsIHZlcnNpb25OYW1lLCBjaGFubmVsLCBwYW5nb2xpbiwgYWRuZXQsIGxldmVsXTtcbiAgICB9XG5cbiAgICBpbml0R2FtZUNvbmZpZygpIHtcbiAgICAgICAgdGhpcy5fZ2FtZUNvbmZpZyA9IHRoaXMuZ2V0R2FtZUNvbmZpZygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmch+WKqFxuICAgICAqIEBwYXJhbSBrZXkgMCDnn63pnIfliqggMSDplb/pnIfliqhcbiAgICAgKi9cbiAgICB2aWJyYXRlKGtleTogbnVtYmVyID0gMCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLm9wZW5TeXN0ZW1GdW4oa2V5KTtcbiAgICB9XG5cbiAgICAvKirpmpDol4/lkK/liqjlsY8gKi9cbiAgICBoaWRlU3BsYXNoKCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmhpZGVTcGxhc2goKTtcbiAgICB9XG5cbiAgICAvKirlvLnlh7rmj5DnjrAgKi9cbiAgICB3aXRoRHJhd2FsKCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLndpdGhEcmF3YWwoKTtcbiAgICB9XG4gICAgLyoq5oSP6KeB5Y+N6aaIICovXG4gICAgZmVlZGJhY2soKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UuZmVlZGJhY2soKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICoga2V5IOm7mOiupDAg77yM562+5YiwIDFcbiAgICAgKi9cbiAgICBwZXJzb25hbChrZXkgPSAwKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UucGVyc29uYWwoa2V5KTtcbiAgICB9XG4gICAgLyoq6YKA6K+35aW95Y+LKi9cbiAgICBpbnZpdGF0aW9uKCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmludml0YXRpb24oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICog6I635Y+W6YeR5biB6YWN6KGoXG4gICAgICogQHBhcmFtIGtleSAx57qi5YyFICAgMiDmkYfkuIDmkYfnuqLljIVcbiAgICAgKi9cbiAgICBnZXRHYW1lQ29uZmlnKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5teUJyaWRnZS5nZXRHYW1lQ29uZmlnKCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1nZXRHYW1lQ29uZmlnLS0tLS0tLScgKyBKU09OLnN0cmluZ2lmeShyZXN1bHQpKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyZXN1bHQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiDopoHmsYLlj5HmlL7ph5HluIFcbiAgICAgKiBAcGFyYW0ga2V5IDHnuqLljIVcbiAgICAgKi9cbiAgICBhc3luYyBhZGRHb2xkKGtleSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55Pihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm15QnJpZGdlLmFkZEdvbGQoa2V5LCByZXMgPT4ge1xuICAgICAgICAgICAgICAgIHJlcyA9IEpTT04ucGFyc2UocmVzKVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29kZSwgZGF0YSwgbXNnIH0gPSByZXM7XG4gICAgICAgICAgICAgICAgaWYgKCcwJyA9PT0gY29kZSB8fCAhY29kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuICAgIC8qKuiOt+WPluaAu+mHkeW4gSAqL1xuICAgIGFzeW5jIG15Q29pbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5teUJyaWRnZS5teUNvaW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICByZXMgPSBKU09OLnBhcnNlKHJlcylcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvZGUsIGRhdGEsIG1zZyB9ID0gcmVzO1xuICAgICAgICAgICAgICAgIGlmICgnMCcgPT09IGNvZGUgfHwgIWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhWydjb2luJ10pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG5cbiAgICAvKirojrflj5blvZPliY3mj5DnjrDnmoTmoaPkvY0gKi9cbiAgICBhc3luYyBtaW5XaXRoRHJhd2FsKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55Pihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm15QnJpZGdlLm1pbldpdGhEcmF3YWwocmVzID0+IHtcbiAgICAgICAgICAgICAgICByZXMgPSBKU09OLnBhcnNlKHJlcylcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvZGUsIGRhdGEsIG1zZyB9ID0gcmVzO1xuICAgICAgICAgICAgICAgIGlmICgnMCcgPT09IGNvZGUgfHwgIWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhWydtb25leSddKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChtc2cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKuS4iuaKpeWfi+eCuSAqL1xuICAgIGFwcERvdExvZyhrZXk6IHN0cmluZywgdmFsdWU/KSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UuYXBwRG90TG9nKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICAvKirng63kupHmiZPngrkgKi9cbiAgICBhcHBEb3RUcmFjS2luZyhrZXk6IHN0cmluZykge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmFwcERvdFRyYWNLaW5nKGtleSk7XG4gICAgfVxuXG4gICAgc2V0Q2FsbGJhY2soZnVuTmFtZTogc3RyaW5nLCBwcmFtYXM/OiBhbnkpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXNldENhbGxiYWNrLS0tLSB0aGlzLm15QnJpZGdlLS0tJyArIEpTT04uc3RyaW5naWZ5KHRoaXMubXlCcmlkZ2UpKVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5teUJyaWRnZVtmdW5OYW1lXShwcmFtYXMsIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHsgY29kZSwgZGF0YSB9ID0gSlNPTi5wYXJzZShyZXMpO1xuICAgICAgICAgICAgICAgIGlmICgnMCcgPT09IGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBjbG9zZUFkdmVyRGlhbG9nKCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmNsb3NlQWR2ZXJEaWFsb2coKTtcbiAgICB9XG4gICAgY2xvc2VBZEJhbm5lcigpIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5jbG9zZUFkQmFubmVyKCk7XG4gICAgfVxuICAgIC8qKua/gOWKseinhumikSAqL1xuICAgIHNob3dSZXdhcmRWaWRlb0FkKHZhbHVlOiBJVmlkZW8sIEpCQ2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2Uuc2hvd1Jld2FyZFZpZGVvQWQodmFsdWUsIEpCQ2FsbGJhY2spXG4gICAgfVxuICAgIC8qKiDlhajlsY/lub/lkYoqL1xuICAgIGxvYWRGdWxsU2NyZWVuVmlkZW9BZChkYXRhOiBhbnksIEpCQ2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2Uuc2hvd1Jld2FyZFZpZGVvQWQoZGF0YSwgSkJDYWxsYmFjaylcbiAgICB9XG4gICAgLyoq5L+h5oGv5rWB5bm/5ZGKICovXG4gICAgbG9hZE5hdGl2ZUV4cHJlc3NBZChkYXRhOiBhbnksIEpCQ2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UubG9hZE5hdGl2ZUV4cHJlc3NBZChkYXRhLCBKQkNhbGxiYWNrKVxuICAgIH1cbiAgICAvKipiYW5uZXIgKi9cbiAgICBsb2FkQmFubmVyRXhwcmVzc0FkKGRhdGE6IGFueSwgSkJDYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5sb2FkQmFubmVyRXhwcmVzc0FkKGRhdGEsIEpCQ2FsbGJhY2spXG4gICAgfVxuICAgIC8qKuaPkuWxj+W5v+WRiiAqL1xuICAgIHNob3dJbnRlcmFjdGlvbkV4cHJlc3NBZChkYXRhOiBhbnksIEpCQ2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2Uuc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKGRhdGEsIEpCQ2FsbGJhY2spXG4gICAgfVxuXG4gICAgZ2V0IGxldmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XG4gICAgfVxuICAgIGdldCB3aWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgIH1cblxuICAgIGdldCBoZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgfVxuXG4gICAgZ2V0IHZlcnNpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92ZXJzaW9uO1xuICAgIH1cblxuICAgIGdldCBjaGFubmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGJyaWRnZSgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZ2V0IGdhbWVDb25maWcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nYW1lQ29uZmlnO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IEkoKTogUGNTZGsge1xuICAgICAgICByZXR1cm4gT2JqZWN0SW5zdGFuY2UuZ2V0KFBjU2RrKTtcbiAgICB9XG59XG4vLyAgICAgLy/ov5nph4zmmK/mtY/op4jlmajnjq/looPkuIvvvIwg5o6l5pS2d2Vi5Lyg6L+H5p2l55qE5raI5oGvXG53aW5kb3cub25NeUJyaWRnZVJlYWR5ID0gKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKFwib25NeUJyaWRnZVJlYWR5IGxvYWQgZmluaXNoLCBjb3N0OlwiICsgKG5ldyBEYXRlKCkuZ2V0VGltZSgpKSArIFwibXNcIik7XG4gICAgTXlCcmlkZ2UuQXBwLm9uUmVzdW1lID0gKC4uLnJldCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnICAgICBsYXlhIG9uUmVzdW1lJywgcmV0KVxuICAgICAgICBFdmVudENlbnRlci5lbWl0KEV2ZW50RW51bS5BUFBfU0hPVyk7XG4gICAgfVxuICAgIE15QnJpZGdlLkFwcC5vblBhdXNlID0gKC4uLnJldCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnICAgIGxheWEgb25QYXVzZScsIHJldClcbiAgICAgICAgRXZlbnRDZW50ZXIuZW1pdChFdmVudEVudW0uQVBQX0hJREUpO1xuICAgIH1cbn1cblxuaW50ZXJmYWNlIElWaWRlbyB7XG4gICAgcHJlbG9hZGluZzogbnVtYmVyLFxuICAgIHR5cGU6IG51bWJlcixcbn0iLCJpbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcclxuaW1wb3J0IFBjU2RrIGZyb20gXCIuL1BjU2RrXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUVEFkU2RrIHtcclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gcHJlbG9hZCAgMCDnm7TmjqXliqDovb3vvJsxIOmihOWKoOi9vVxyXG4gICAgICovXHJcbiAgICBhc3luYyBzaG93UmV3YXJkVmlkZW9BZChwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IDEsXHJcbiAgICAgICAgICAgIHByZWxvYWRpbmc6IHByZWxvYWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpc0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIFBjU2RrLkkuc2hvd1Jld2FyZFZpZGVvQWQoZGF0YSwgcmV0ID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB7IGNvZGUsIG1lc3NhZ2UgfSA9IEpTT04ucGFyc2UocmV0KTtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgLTE6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgnZXJyb3InKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAvKion5pqC5peg6KeG6aKR5bm/5ZGK77yB5q+P5pelMOeCuemHjee9ricqLztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEwMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29tcGxldGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgndW5Db21wbGV0ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEZ1bGxTY3JlZW5WaWRlb0FkKHByZWxvYWQ6IG51bWJlciA9IDApIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdzogUGNTZGsuSS53aWR0aCxcclxuICAgICAgICAgICAgaDogUGNTZGsuSS53aWR0aCAqIDkwIC8gNjAwLFxyXG4gICAgICAgICAgICBwcmVsb2FkaW5nOiBwcmVsb2FkLFxyXG4gICAgICAgICAgICB0eXBlOiAxXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIFBjU2RrLkkubG9hZEZ1bGxTY3JlZW5WaWRlb0FkKEpTT04uc3RyaW5naWZ5KGRhdGEpLHJlcz0+e1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkTmF0aXZlRXhwcmVzc0FkKHgsIHksIHdpZHRoLCBoZWlnaHQsIHR5cGUgPSAxLCBwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IHNjYWxlWCA9IFBjU2RrLkkud2lkdGggLyBMYXlhLnN0YWdlLndpZHRoO1xyXG4gICAgICAgIGxldCBzY2FsZVkgPSBQY1Nkay5JLmhlaWdodCAvIExheWEuc3RhZ2UuaGVpZ2h0O1xyXG4gICAgICAgIGxldCBkYXRhID0ge1xyXG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgICAgICBwcmVsb2FkaW5nOiBwcmVsb2FkLFxyXG4gICAgICAgICAgICB3OiB3aWR0aCAqIHNjYWxlWCxcclxuICAgICAgICAgICAgaDogaGVpZ2h0ICogc2NhbGVZLFxyXG4gICAgICAgICAgICBsZWZ0OiB4ICogc2NhbGVYLFxyXG4gICAgICAgICAgICB0b3A6IHkgKiBzY2FsZVlcclxuICAgICAgICB9XHJcbiAgICAgICAgUGNTZGsuSS5sb2FkTmF0aXZlRXhwcmVzc0FkKEpTT04uc3RyaW5naWZ5KGRhdGEpLHJlcz0+e1xyXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXMpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkQmFubmVyRXhwcmVzc0FkKHByZWxvYWQ6IG51bWJlciA9IDApIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdzogUGNTZGsuSS53aWR0aCxcclxuICAgICAgICAgICAgaDogUGNTZGsuSS53aWR0aCAqIDkwIC8gNjAwLFxyXG4gICAgICAgICAgICBwcmVsb2FkaW5nOiBwcmVsb2FkLFxyXG4gICAgICAgICAgICB0eXBlOiAxXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIFBjU2RrLkkubG9hZEJhbm5lckV4cHJlc3NBZChKU09OLnN0cmluZ2lmeShkYXRhKSxyZXM9PntcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VBZHZlckRpYWxvZygpIHtcclxuICAgICAgICBQY1Nkay5JLmNsb3NlQWR2ZXJEaWFsb2coKTtcclxuICAgIH1cclxuICAgIGNsb3NlQWRCYW5uZXIoKSB7XHJcbiAgICAgICAgUGNTZGsuSS5jbG9zZUFkQmFubmVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKHByZWxvYWQ6IG51bWJlciA9IDApIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdzogUGNTZGsuSS53aWR0aCAqIDAuOCxcclxuICAgICAgICAgICAgaDogUGNTZGsuSS5oZWlnaHQsXHJcbiAgICAgICAgICAgIHByZWxvYWRpbmc6IHByZWxvYWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpc0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIFBjU2RrLkkuc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKEpTT04uc3RyaW5naWZ5KGRhdGEpLHJlcz0+e1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEkoKTogVFRBZFNkayB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdEluc3RhbmNlLmdldChUVEFkU2RrKSBhcyBUVEFkU2RrO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IE9iamVjdEluc3RhbmNlIGZyb20gXCIuLi91aXRsL09iamVjdEluc3RhbmNlXCI7XHJcbmltcG9ydCBQY1NkayBmcm9tIFwiLi9QY1Nka1wiO1xyXG4vKipcclxuICog5LiK5oql54Ot5LqR5Z+L54K54r2H5b+XXHJcbiAqIOWFt+S9k+eahOaJk+eCuemcgOimgei3n+i/kOiQpeiBlOezu1xyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVHJhY2tpbmdTZGsge1xyXG4gICAgZG90KGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgUGNTZGsuSS5hcHBEb3RUcmFjS2luZyhrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgSSgpOiBUcmFja2luZ1NkayB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdEluc3RhbmNlLmdldChUcmFja2luZ1NkaykgYXMgVHJhY2tpbmdTZGs7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFRyYWNraW5nS2V5IHtcclxuICAgIFJlZFBhY2sxID0gJ2V2ZW50XzUnLFxyXG4gICAgUmVkUGFjazUgPSAnZXZlbnRfNidcclxufVxyXG4iLCJpbXBvcnQgQXJyYXlVdGlscyBmcm9tIFwiLi4vLi4vdWl0bC9BcnJheVV0aWxzXCI7XG5cbi8qXG4qIG5hbWU7XG4qL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzZU1vZGVsIHtcbiAgICBwcm90ZWN0ZWQgX2RhdGE6IGFueSA9IHt9O1xuICAgIHByaXZhdGUgdXBkYXRlQXJyOiBBcnJheTxGdW5jdGlvbj4gPSBbXTtcbiAgICBwcml2YXRlIGtleVVwZGF0ZUFycjogYW55ID0ge307XG5cbiAgICBwdWJsaWMgYXN5bmMgdXBkYXRlKGRhdGE6IGFueSkge1xuICAgICAgICB0aGlzLl9kYXRhID0ge1xuICAgICAgICAgICAgLi4udGhpcy5fZGF0YSxcbiAgICAgICAgICAgIC4uLmRhdGFcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUFyci5mb3JFYWNoKGZ1bmMgPT4ge1xuICAgICAgICAgICAgZnVuYyh0aGlzLl9kYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMua2V5VXBkYXRlQXJyKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGxldCBhcnIgPSB0aGlzLmtleVVwZGF0ZUFycltrZXldO1xuICAgICAgICAgICAgICAgIGFyciAmJiBhcnIuZm9yRWFjaChmdW5jID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZnVuYyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB3YWl0Rm9yKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZGF0YVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGNiID0gZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZVcGRhdGUoY2IsIGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vblVwZGF0ZShjYiwga2V5LCB0cnVlKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwdWJsaWMgb25VcGRhdGUoZnVuYzogRnVuY3Rpb24sIGtleT86IHN0cmluZywgcnVuOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLl9kYXRhW2tleV07XG4gICAgICAgICAgICBydW4gJiYgdmFsdWUgIT0gbnVsbCAmJiBmdW5jKHZhbHVlKTtcbiAgICAgICAgICAgIGxldCBhcnIgPSB0aGlzLmtleVVwZGF0ZUFycltrZXldO1xuICAgICAgICAgICAgIWFyciAmJiAodGhpcy5rZXlVcGRhdGVBcnJba2V5XSA9IGFyciA9IFtdKTtcbiAgICAgICAgICAgIGFyci5wdXNoKGZ1bmMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcnVuICYmIGZ1bmModGhpcy5fZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFyci5wdXNoKGZ1bmMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9mZlVwZGF0ZShmdW5jOiBGdW5jdGlvbiwga2V5Pzogc3RyaW5nKSB7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIEFycmF5VXRpbHMucmVtb3ZlRnJvbUFycih0aGlzLmtleVVwZGF0ZUFycltrZXldLCBmdW5jKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIEFycmF5VXRpbHMucmVtb3ZlRnJvbUFycih0aGlzLnVwZGF0ZUFyciwgZnVuYyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJHYW1lKCkge1xuICAgICAgICB0aGlzLl9kYXRhID0ge307XG4gICAgfVxufSIsImltcG9ydCBCYXNlTW9kZWwgZnJvbSBcIi4vQmFzZU1vZGVsXCI7XG5pbXBvcnQgQWRNYW5hZ2VyIGZyb20gXCIuLi8uLi9zZGsvQWRNYW5hZ2VyXCI7XG5pbXBvcnQgVGVhU2RrLCB7IERvdEtleSB9IGZyb20gXCIuLi8uLi9zZGsvVGVhU2RrXCI7XG5pbXBvcnQgVHJhY2tpbmdTZGssIHsgVHJhY2tpbmdLZXkgfSBmcm9tIFwiLi4vLi4vc2RrL1RyYWNraW5nU2RrXCI7XG5pbXBvcnQgRGF0ZVV0aWxzIGZyb20gXCIuLi8uLi91aXRsL0RhdGVVdGlsc1wiO1xuaW1wb3J0IFV0aWwsIHsgRGF0YUtleSB9IGZyb20gXCIuLi8uLi91aXRsL1V0aWxcIjtcbmltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xuaW1wb3J0IHsgRXZlbnRDZW50ZXIgfSBmcm9tIFwiLi4vLi4vZXZlbnQvRXZlbnRDZW50ZXJcIjtcbmltcG9ydCB7IEV2ZW50RW51bSB9IGZyb20gXCIuLi8uLi9ldmVudC9FdmVudEVudW1cIjtcbmltcG9ydCBQY1NkayBmcm9tIFwiLi4vUGNTZGtcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVkcGFja2V0TW9kZWwgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICAgIHByaXZhdGUgTUFYID0gMjA7XG4gICAgLyoq5b2T5aSp6aKG5Y+W57qi5YyF55qE5pyA5aSn5qyh5pWwICovXG4gICAgcHJpdmF0ZSBEQVlfTUFYX0NOVCA9IDUwO1xuICAgIHByaXZhdGUgY29uZjogYW55O1xuICAgIHB1YmxpYyBjdXJSZWRwYWNrZXQ6IG51bWJlciA9IDA7XG4gICAgcHVibGljIGNvbmZMZW46IG51bWJlciA9IDA7XG5cbiAgICAvKirliJ3lp4vljJbnuqLljIXphY3nva4gKi9cbiAgICBhc3luYyBpbml0KCkge1xuXG4gICAgICAgIGxldCBhcnIgPSBhd2FpdCB0aGlzLmdldFJlZENvbmZpZygpO1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tUmVkcGFja2V0TW9kZWwtLS0tLS0tJyArIEpTT04uc3RyaW5naWZ5KGFycikpXG4gICAgICAgIGxldCBjYXNoID0gMDtcbiAgICAgICAgdGhpcy5jb25mID0ge307XG4gICAgICAgIGFyci5mb3JFYWNoKGNvbmZEYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZltjb25mRGF0YS5pZF0gPSBjb25mRGF0YTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy5pbml0RGF0YSgpKTtcbiAgICAgICAgdGhpcy5jb25mTGVuID0gdGhpcy5jb25mLmxlbmd0aDtcblxuICAgIH1cblxuXG5cbiAgICBpbml0RGF0YSgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgUmVkcGFja2V0RGF0YTtcbiAgICAgICAgbGV0IGxhc3RUaW1lID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5sYXN0VGltZSkgfHwgJzAnO1xuICAgICAgICBkYXRhLmxhc3RUaW1lID0gcGFyc2VJbnQobGFzdFRpbWUpO1xuXG4gICAgICAgIGxldCBsYXN0ID0gRGF0ZVV0aWxzLnRpbWVEYXkoZGF0YS5sYXN0VGltZSk7XG4gICAgICAgIGxldCB0b2RheSA9IERhdGVVdGlscy50b2RheTtcbiAgICAgICAgaWYgKGxhc3QgIT0gdG9kYXkpIHtcbiAgICAgICAgICAgIGRhdGEudG9kYXlDbnQgPSAwO1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlVXRpbHMubm93VGltZS50b1N0cmluZygpO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5sYXN0VGltZSwgbGFzdFRpbWUpXG4gICAgICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LnRvZGF5Q250LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCB0b2RheUNudCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkudG9kYXlDbnQpIHx8ICcwJztcbiAgICAgICAgICAgIGRhdGEudG9kYXlDbnQgPSBwYXJzZUludCh0b2RheUNudCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5sYXN0VGltZSA9IHBhcnNlSW50KGxhc3RUaW1lKTtcbiAgICAgICAgbGV0IGRhdGFDbnQgPSBVdGlsLkkuZ2V0SXRlbShEYXRhS2V5LmRhdGFDTlQpIHx8ICcwJztcbiAgICAgICAgZGF0YS5jbnQgPSBwYXJzZUludChkYXRhQ250KTtcbiAgICAgICAgZGF0YS5saXN0ID0gW107XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuXG4gICAgYXN5bmMgZ2V0UmVkQ29uZmlnKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gUGNTZGsuSS5nYW1lQ29uZmlnO1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tIOiOt+WPlumFjee9rumdmeaAgeihqC0tLS0tJyArIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpXG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGxldCBjb25maWdKc29uID0gYXdhaXQgdGhpcy5sb2FkR29sZENmZyhyZXN1bHRbJ2NvaW5fY29uZmlnJ11bMF0pXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0g6I635Y+W57qi5YyF6Z2Z5oCB6KGoLS0tLS0nICsgSlNPTi5zdHJpbmdpZnkocmVzdWx0KSlcbiAgICAgICAgICAgIHJldHVybiBjb25maWdKc29uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgUGNTZGsuSS5pbml0R2FtZUNvbmZpZygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGxvYWRHb2xkQ2ZnKHJlczogc3RyaW5nKSB7XG4gICAgICAgIGxldCBjb25maWdKc29uID0gYXdhaXQgdGhpcy5sb2FkKHJlcyk7XG4gICAgICAgIHJldHVybiBjb25maWdKc29uO1xuICAgIH1cblxuICAgIGxvYWQocmVzLCBvblByb2dyZXNzPzogTGF5YS5IYW5kbGVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChzdWMsIGZhaWwpID0+IHtcbiAgICAgICAgICAgIExheWEubG9hZGVyLmxvYWQocmVzLCBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsIHN1YyksIG9uUHJvZ3Jlc3MpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGFzeW5jIGNoZWNrUmVkcGFja2V0KCkge1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGEudG9kYXlDbnQgPj0gdGhpcy5EQVlfTUFYX0NOVCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoQWRNYW5hZ2VyLkkuY2hlY2tWaWRlb0luQ2QoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvKirnuqLljIXojrflj5blkI7msqHmnInnnIvlub/lkYrpooblj5bvvIzlho3mrKHojrflvpfnuqLljIXnmoTmnLrkvJrvvIzkuI3kvJrojrflj5bnuqLljIXvvIwg6Ieq5bex5Lmf5Y+v5Lul5aSE55CG5oiQIOWvueW6lOeahOe6ouWMheaPkOmGkuaIluS4jemcgOimgei/memHjOeahOWIpOaWrSAqL1xuICAgICAgICBpZiAodGhpcy5jdXJSZWRwYWNrZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodW5kZWZpbmVkID09PSB0aGlzLmRhdGEuY250KSB0aGlzLmRhdGEuY250ID0gMDtcbiAgICAgICAgbGV0IGNudCA9IHRoaXMuZGF0YS5jbnQ7XG4gICAgICAgIGlmIChjbnQgPj0gdGhpcy5jb25mTGVuKSBjbnQgPSB0aGlzLmNvbmZMZW4gLSAxO1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuY29uZltjbnQgKyAxXTtcbiAgICAgICAgbGV0IHJhbjIgPSBNYXRoLnJhbmRvbSgpO1xuXG4gICAgICAgIGlmIChkYXRhICYmIHJhbjIgPCBkYXRhLnBlcikge1xuICAgICAgICAgICAgbGV0IGNhc2ggPSAwLjAwMDAwMTtcbiAgICAgICAgICAgIHRoaXMuY3VyUmVkcGFja2V0ID0gY2FzaDtcbiAgICAgICAgICAgIC8vKirlvLnlh7rnuqLljIXnmoTnlYzpnaIsICDmmoLml7blpITnkIbmiJAg55u05o6l55yL5bm/5ZGK6I635Y+W6YeR5biBICovXG4gICAgICAgICAgICBhd2FpdCBBZE1hbmFnZXIuSS5zaG93UmV3YXJkQWQoKVxuICAgICAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLSDop6blj5HkuobnuqLljIUtLS0tLScpXG4gICAgICAgICAgICB0aGlzLmdldFJlcGFja2V0KClcbiAgICAgICAgICAgIC8qKuabtOaWsOWfuuacrOaYvuekuiAqL1xuICAgICAgICAgICAgRXZlbnRDZW50ZXIuZW1pdChFdmVudEVudW0uVVBEQVRFX0NPSU4pO1xuXG4gICAgICAgICAgICAvKioqICovXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0UmVwYWNrZXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5jdXJSZWRwYWNrZXQpIHJldHVybjtcbiAgICAgICAgdGhpcy5kYXRhLmNudCArPSAxO1xuICAgICAgICB0aGlzLmRhdGEubGlzdC5wdXNoKHRoaXMuY3VyUmVkcGFja2V0KTtcbiAgICAgICAgdGhpcy5kYXRhLmxhc3RUaW1lID0gKG5ldyBEYXRlKS5nZXRUaW1lKCk7XG4gICAgICAgIHRoaXMuZGF0YS50b2RheUNudCArPSAxO1xuICAgICAgICBpZiAodGhpcy5kYXRhLmNudCA9PSAxKVxuICAgICAgICAgICAgVHJhY2tpbmdTZGsuSS5kb3QoVHJhY2tpbmdLZXkuUmVkUGFjazEpO1xuICAgICAgICBpZiAodGhpcy5kYXRhLmNudCA9PSA1KVxuICAgICAgICAgICAgVHJhY2tpbmdTZGsuSS5kb3QoVHJhY2tpbmdLZXkuUmVkUGFjazUpO1xuICAgICAgICB0aGlzLmN1clJlZHBhY2tldCA9IDA7XG4gICAgICAgIFV0aWwuSS5zZXRJdGVtKERhdGFLZXkuZGF0YUNOVCwgdGhpcy5kYXRhLmNudCk7XG4gICAgICAgIFV0aWwuSS5zZXRJdGVtKERhdGFLZXkudG9kYXlDbnQsIHRoaXMuZGF0YS50b2RheUNudCk7XG5cbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICAvKiogKi9cbiAgICBhc3luYyBnZXRDdXJSZWRwYWNrZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1clJlZHBhY2tldDtcbiAgICB9XG5cbiAgICBnZXQgZGF0YSgpOiBSZWRwYWNrZXREYXRhIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuICAgIC8qKuiOt+WPluaAu+WFseeahOmHkeW4geaVsCAqL1xuICAgIGFzeW5jIGdldFRvdGFsQ29pbigpIHtcbiAgICAgICAgbGV0IHRvdGFsQ29pbiA9IGF3YWl0IFBjU2RrLkkubXlDb2luKCk7XG4gICAgICAgIHJldHVybiB0b3RhbENvaW47XG4gICAgfVxuICAgIC8qKuiOt+WPluacrOasoeWlluWKseeahOmHkeW4geaVsCAqL1xuICAgIGFzeW5jIGFkZENvaW4oa2V5OiBudW1iZXIgPSAxKSB7XG4gICAgICAgIGxldCBjb2luRGF0YSA9IGF3YWl0IFBjU2RrLkkuYWRkR29sZChrZXkpO1xuICAgICAgICByZXR1cm4gY29pbkRhdGFbJ2NvaW4nXTtcbiAgICB9XG5cbiAgICAvKirojrflj5bmnIDkvY7mj5DmoaMgKi9cbiAgICBhc3luYyAgbWluV2l0aERyYXdhbCgpIHtcbiAgICAgICAgbGV0IG1pbkNvaW4gPSBhd2FpdCBQY1Nkay5JLm1pbldpdGhEcmF3YWwoKTtcbiAgICAgICAgcmV0dXJuIG1pbkNvaW47XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgSSgpOiBSZWRwYWNrZXRNb2RlbCB7XG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoUmVkcGFja2V0TW9kZWwpIGFzIFJlZHBhY2tldE1vZGVsO1xuICAgIH1cbn1cblxuY2xhc3MgUmVkcGFja2V0RGF0YSB7XG4gICAgY250OiBudW1iZXI7XG4gICAgbGlzdDogQXJyYXk8bnVtYmVyPjtcbiAgICBsYXN0VGltZTogbnVtYmVyO1xuICAgIHRvZGF5Q250OiBudW1iZXI7XG59XG5cbmNsYXNzIFJlZHBhY2tldENvbmZpZ0RhdGEge1xuICAgIGlkOiBudW1iZXI7XG4gICAgcGVyOiBudW1iZXI7XG4gICAgY2FzaDogbnVtYmVyO1xufSIsImltcG9ydCBCYXNlTW9kZWwgZnJvbSBcIi4vQmFzZU1vZGVsXCI7XG5pbXBvcnQgRGF0ZVV0aWxzIGZyb20gXCIuLi8uLi91aXRsL0RhdGVVdGlsc1wiO1xuaW1wb3J0IFV0aWwsIHsgRGF0YUtleSB9IGZyb20gXCIuLi8uLi91aXRsL1V0aWxcIjtcbmltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xuaW1wb3J0IFBjU2RrIGZyb20gXCIuLi9QY1Nka1wiO1xuXG4vKipcbiAqIFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFrZU1vZGVsIGV4dGVuZHMgQmFzZU1vZGVsIHtcblxuICAgIHByaXZhdGUgY29uZjogYW55O1xuICAgIHByaXZhdGUgZWxlUHJvYmFiaWxpdHlBcnI6IG51bWJlcltdID0gW107XG4gICAgcHJpdmF0ZSB0b3RhbFdlaWdodDogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIHByb0FyckxlbjogbnVtYmVyID0gMDtcbiAgICAvKirnuqLljIXlh7rnjrDnmoTmgLvmrKHmlbDmr4/ml6UgKi9cbiAgICBwcml2YXRlIHJlZF9kYXlfbGltaXQ6IG51bWJlciA9IDA7XG4gICAgcHJpdmF0ZSBjdXJfcmVkX2RheV9saW1pdDogbnVtYmVyID0gMDtcbiAgICAvKirmkYfkuIDmkYflh7rnjrDnmoTmgLvmrKHmlbAgKi9cbiAgICBwcml2YXRlIHNoYWtlX2RheV9saW1pdDogbnVtYmVyID0gMDtcblxuICAgIHByaXZhdGUgY3VyX3NoYWtlX2RheV9saW1pdDogbnVtYmVyID0gMDtcblxuICAgIGFzeW5jIGluaXQoKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBQY1Nkay5JLmdhbWVDb25maWc7O1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tU2hha2VNb2RlbC0tIOiOt+WPluaRh+S4gOaRh+mdmeaAgeihqC0tLS0tJyArIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpXG4gICAgICAgIGlmIChyZXN1bHRbJ2NvbmZpZyddKSB7XG4gICAgICAgICAgICBsZXQgZ2FtZURhdGEgPSByZXN1bHRbJ2NvbmZpZyddO1xuICAgICAgICAgICAgdGhpcy51cGRhdGUodGhpcy5pbml0RGF0YShnYW1lRGF0YSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdERhdGEoZ2FtZURhdGEpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgU2hha2VEYXRhO1xuICAgICAgICBsZXQgbGFzdFRpbWUgPSBVdGlsLkkuZ2V0SXRlbShEYXRhS2V5LnNoYWtlTGFzdFRpbWUpIHx8ICcwJztcbiAgICAgICAgbGV0IGx0ID0gcGFyc2VJbnQobGFzdFRpbWUpO1xuICAgICAgICBsZXQgbGFzdCA9IERhdGVVdGlscy50aW1lRGF5KGx0KTtcbiAgICAgICAgbGV0IHRvZGF5ID0gRGF0ZVV0aWxzLnRvZGF5O1xuXG4gICAgICAgIGlmIChsYXN0ICE9IHRvZGF5KSB7XG4gICAgICAgICAgICB0aGlzLmN1cl9zaGFrZV9kYXlfbGltaXQgPSAwO1xuICAgICAgICAgICAgdGhpcy5jdXJfcmVkX2RheV9saW1pdCA9IDA7XG4gICAgICAgICAgICBsYXN0VGltZSA9IERhdGVVdGlscy5ub3dUaW1lLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LmN1cl9zaGFrZV9kYXlfbGltaXQsIDApO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfcmVkX2RheV9saW1pdCwgMCk7XG4gICAgICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LnNoYWtlTGFzdFRpbWUsIGxhc3RUaW1lKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGN1cl9yZWRfZGF5X2xpbWl0ID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5jdXJfcmVkX2RheV9saW1pdCkgfHwgJzAnO1xuICAgICAgICAgICAgdGhpcy5jdXJfcmVkX2RheV9saW1pdCA9IHBhcnNlSW50KGN1cl9yZWRfZGF5X2xpbWl0KTtcbiAgICAgICAgICAgIGxldCBjdXJfc2hha2VfZGF5X2xpbWl0ID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5jdXJfc2hha2VfZGF5X2xpbWl0KSB8fCAnMCc7XG4gICAgICAgICAgICB0aGlzLmN1cl9zaGFrZV9kYXlfbGltaXQgPSBwYXJzZUludChjdXJfc2hha2VfZGF5X2xpbWl0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGEuY29uZmlnID0gZ2FtZURhdGFbJ2NvbmZpZyddO1xuICAgICAgICBnYW1lRGF0YVsnc2hha2UnXS5mb3JFYWNoKGVsZSA9PiB7XG4gICAgICAgICAgICBkYXRhLnNoYWtlV2VpZ2h0TGlzdC5wdXNoKGVsZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbmYgPSBbXTtcbiAgICAgICAgdGhpcy5jb25mID0gZGF0YS5zaGFrZVdlaWdodExpc3Q7XG4gICAgICAgIHRoaXMuaW5pdFByb2JhYmlsaXR5KCk7XG4gICAgICAgIHRoaXMuc2hha2VfZGF5X2xpbWl0ID0gZGF0YS5jb25maWcuc2hha2VfZGF5X2xpbWl0O1xuICAgICAgICB0aGlzLnJlZF9kYXlfbGltaXQgPSBkYXRhLmNvbmZpZy5yZWRfZGF5X2xpbWl0O1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpbml0UHJvYmFiaWxpdHkoKSB7XG4gICAgICAgIHRoaXMudG90YWxXZWlnaHQgPSAwO1xuICAgICAgICB0aGlzLmNvbmYuZm9yRWFjaCgoZWxlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b3RhbFdlaWdodCArPSBlbGUud2VpZ2h0O1xuICAgICAgICAgICAgbGV0IGl0ZW1XID0gZWxlLndlaWdodDtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApXG4gICAgICAgICAgICAgICAgaXRlbVcgKz0gdGhpcy5lbGVQcm9iYWJpbGl0eUFycltpbmRleCAtIDFdO1xuICAgICAgICAgICAgdGhpcy5lbGVQcm9iYWJpbGl0eUFyciA9IFsuLi50aGlzLmVsZVByb2JhYmlsaXR5QXJyLCBpdGVtV107XG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMucHJvQXJyTGVuID0gdGhpcy5lbGVQcm9iYWJpbGl0eUFyci5sZW5ndGg7XG5cbiAgICB9XG5cbiAgICBnZXRTaGFrZVR5cGUoKSB7XG4gICAgICAgICsrdGhpcy5jdXJfc2hha2VfZGF5X2xpbWl0O1xuICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LmN1cl9zaGFrZV9kYXlfbGltaXQsIHRoaXMuY3VyX3NoYWtlX2RheV9saW1pdCk7XG5cbiAgICAgICAgaWYgKHRoaXMuY3VyX3NoYWtlX2RheV9saW1pdCA+IHRoaXMuc2hha2VfZGF5X2xpbWl0KSB7XG4gICAgICAgICAgICAvKion5qyh5pWw6L6+5Yiw5LiK6ZmQ77yM6K+35piO5aSp5YaN5p2lKi9cblxuICAgICAgICAgICAgLyoq5Zyo5q2k5aSE5Y+v5Lul5by55qGG562J5aSE55CGICovXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJhbiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRoaXMudG90YWxXZWlnaHQpO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5wcm9BcnJMZW47IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZSA9IHRoaXMuZWxlUHJvYmFiaWxpdHlBcnJbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKGVsZSA+PSByYW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoMCA9PT0gaW5kZXggfHwgMSA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgKyt0aGlzLmN1cl9yZWRfZGF5X2xpbWl0O1xuICAgICAgICAgICAgICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LmN1cl9yZWRfZGF5X2xpbWl0LCB0aGlzLmN1cl9yZWRfZGF5X2xpbWl0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VyX3JlZF9kYXlfbGltaXQgPiB0aGlzLnJlZF9kYXlfbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZbdGhpcy5wcm9BcnJMZW4gLSAxXTtcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZbaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZbdGhpcy5wcm9BcnJMZW4gLSAxXTtcbiAgICB9XG5cbiAgICBnZXQgZGF0YSgpOiBTaGFrZURhdGEge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IEkoKTogU2hha2VNb2RlbCB7XG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoU2hha2VNb2RlbCkgYXMgU2hha2VNb2RlbDtcbiAgICB9XG59XG5cblxuY2xhc3MgU2hha2VEYXRhIHtcbiAgICBjb25maWc6IFNoYWtlQ29uZmlnO1xuICAgIHNoYWtlV2VpZ2h0TGlzdDogU2hha2VXZWlnaHREYXRhW10gPSBbXTtcbn1cbmludGVyZmFjZSBTaGFrZUNvbmZpZyB7XG4gICAgcmVkX2RheV9saW1pdDogbnVtYmVyLFxuICAgIHNoYWtlX2RheV9saW1pdDogbnVtYmVyLFxuICAgIGludGVyc3RpdGlhbF9jbnQ6IG51bWJlcixcbiAgICBpbnRlcnN0aXRpYWxfZGVsYXk6IG51bWJlclxufVxuXG5pbnRlcmZhY2UgU2hha2VXZWlnaHREYXRhIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIHR5cGU6IG51bWJlcjtcbiAgICB3ZWlnaHQ6IG51bWJlcjtcbiAgICBudW06IG51bWJlcjtcbn1cblxuXG4iLCIvKipUaGlzIGNsYXNzIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IExheWFBaXJJREUsIHBsZWFzZSBkbyBub3QgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucy4gKi9cbmltcG9ydCBWaWV3PUxheWEuVmlldztcclxuaW1wb3J0IERpYWxvZz1MYXlhLkRpYWxvZztcclxuaW1wb3J0IFNjZW5lPUxheWEuU2NlbmU7XG52YXIgUkVHOiBGdW5jdGlvbiA9IExheWEuQ2xhc3NVdGlscy5yZWdDbGFzcztcbmV4cG9ydCBtb2R1bGUgdWkge1xyXG4gICAgZXhwb3J0IGNsYXNzIFRlc3RTY2VuZVVJIGV4dGVuZHMgU2NlbmUge1xyXG5cdFx0cHVibGljIGJ0bkludml0ZTpMYXlhLlNwcml0ZTtcblx0XHRwdWJsaWMgYnRuU2VydmVyOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5WaWJyYXRlOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5fc2hha2U6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0bkRyYXdhbDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuUHJlbG9hZEFEOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5TaG93QmFubmVyOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5TaG93RnVsbEFkOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5TaG93TmF0aXZlQWQ6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blNob3dJbnRlckFkOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5SZXdhcmRBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuUmVkcGFja2V0OkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5QcmVOYXRpdmU6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blByZUZ1bGw6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blByZUluc2VydDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuUHJlVmlkZW86TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0bkNsb3NlTmF0aXZlOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5DbG9zZUJhbm5lcjpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuTWluV2l0aERyYXdhbDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgbWluV2l0aERyYXdhbExhYjpMYXlhLkxhYmVsO1xuXHRcdHB1YmxpYyBOYXRpdmVBRDpWaWV3O1xuICAgICAgICBjb25zdHJ1Y3RvcigpeyBzdXBlcigpfVxyXG4gICAgICAgIGNyZWF0ZUNoaWxkcmVuKCk6dm9pZCB7XHJcbiAgICAgICAgICAgIHN1cGVyLmNyZWF0ZUNoaWxkcmVuKCk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFNjZW5lKFwiVGVzdFNjZW5lXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFJFRyhcInVpLlRlc3RTY2VuZVVJXCIsVGVzdFNjZW5lVUkpO1xyXG59XHIiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBBcnJheVV0aWxzIHtcbiAgICAvKipcbiAgICAgKiDnp7vpmaTlhYPntKBcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVtb3ZlRnJvbUFycihhcnI6IEFycmF5PGFueT4sIG9iajogYW55KSB7XG4gICAgICAgIGxldCBpbmRleCA9IGFyci5pbmRleE9mKG9iaik7XG4gICAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHN0YXRpYyByYW5kb21Gcm9tQXJyKGFycjogQXJyYXk8YW55Pikge1xuICAgICAgICBsZXQgaW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhcnIubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIGFycltpbmRleF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pWw57uE6ZqP5py65o6S5bqPXG4gICAgICovXG4gICAgc3RhdGljIHNodWZmbGUoYXJyOiBBcnJheTxhbnk+KSB7XG4gICAgICAgIHJldHVybiBhcnIuc29ydChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yYW5kb20oKSAtIDAuNTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGluZGV4T2YoYXJyLCBjYWxsYmFjaywgY3R4Pykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmNhbGwoY3R4LCB0aGlzW2ldLCBpKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgc3RhdGljIGVhY2goYXJyLCBjYWxsYmFjaywgY29udGV4dCkge1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjay5jYWxsKGNvbnRleHQsIGFycltpXSwgaSwgYXJyKSlcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBxdWV1ZShhcnIpIHtcbiAgICAgICAgbGV0IHJlcyA9IG51bGw7XG4gICAgICAgIGZvciAobGV0IHByb21pc2Ugb2YgYXJyKSB7XG4gICAgICAgICAgICByZXMgPSBhd2FpdCBwcm9taXNlKHJlcylcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRSYW5kb21BcnJheShhcnIsIGNvdW50KSB7XG4gICAgICAgIGxldCBzaHVmZmxlZCA9IGFyci5zbGljZSgwKTtcbiAgICAgICAgbGV0IGxlbiA9IGFyci5sZW5ndGg7XG4gICAgICAgIGxldCBtaW4gPSBsZW4gLSBjb3VudCwgdGVtcCwgaW5kZXg7XG4gICAgICAgIHdoaWxlIChsZW4tLSA+IG1pbikge1xuICAgICAgICAgICAgaW5kZXggPSBNYXRoLmZsb29yKChsZW4gKyAxKSAqIE1hdGgucmFuZG9tKCkpO1xuICAgICAgICAgICAgdGVtcCA9IHNodWZmbGVkW2luZGV4XTtcbiAgICAgICAgICAgIHNodWZmbGVkW2luZGV4XSA9IHNodWZmbGVkW2xlbl07XG4gICAgICAgICAgICBzaHVmZmxlZFtsZW5dID0gdGVtcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2h1ZmZsZWQuc2xpY2UobWluKTtcbiAgICB9XG59IiwiLyoqXG4gKiDml6XmnJ/lt6XlhbfnsbtcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0ZVV0aWxzIHtcbiAgICBzdGF0aWMgZ2V0IG5vdygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLm5vd1RpbWUgLyAxMDAwKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IG5vd1RpbWUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgdG9kYXkoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHRpbWUgPSBuZXcgRGF0ZSh0aGlzLm5vd1RpbWUpO1xuICAgICAgICBsZXQgeWVhciA9IHRpbWUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgbGV0IG1vbnRoID0gdGltZS5nZXRNb250aCgpICsgMTtcbiAgICAgICAgbGV0IGRhdGUgPSB0aW1lLmdldERhdGUoKTtcbiAgICAgICAgcmV0dXJuIGAke3llYXJ9LSR7dGhpcy5hZGQobW9udGgpfS0ke3RoaXMuYWRkKGRhdGUpfWA7XG4gICAgfVxuXG4gICAgc3RhdGljIHRpbWVEYXkodGltZU51bTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHRpbWUgPSBuZXcgRGF0ZSh0aW1lTnVtKTtcbiAgICAgICAgbGV0IHllYXIgPSB0aW1lLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGxldCBtb250aCA9IHRpbWUuZ2V0TW9udGgoKSArIDE7XG4gICAgICAgIGxldCBkYXRlID0gdGltZS5nZXREYXRlKCk7XG4gICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke3RoaXMuYWRkKG1vbnRoKX0tJHt0aGlzLmFkZChkYXRlKX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNruenkuaVsOagvOW8j+WMluWtl+espuS4slxuICAgICAqIEBwYXJhbSBzZWNvbmQg56eS5pWwXG4gICAgICogQHBhcmFtIHR5cGUgMTowMDowMDowMCAgIDI6eXl5eS1tbS1kZCBoOm06cyAgICAzOjAwOjAwICAgNDp4eOWkqeWJje+8jHh45bCP5pe25YmN77yMeHjliIbpkp/liY1cbiAgICAgKiBAcmV0dXJuXG4gICAgICovXG4gICAgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kKHNlY29uZDogbnVtYmVyLCB0eXBlOiBudW1iZXIgPSAxKTogc3RyaW5nIHtcbiAgICAgICAgdmFyIHN0cjogc3RyaW5nID0gXCJcIjtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDAoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kMShzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQyKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDMoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kNChzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQ1KHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICAvLyAwOiAwMDowMFxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMCh0OiBudW1iZXIgPSAwKTogc3RyaW5nIHtcbiAgICAgICAgdmFyIG1pbnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHQgLyA2MCk7XG4gICAgICAgIHZhciBzZWNvbmR0OiBudW1iZXIgPSBNYXRoLmZsb29yKHQgJSA2MCk7XG4gICAgICAgIHZhciBtaW5zOiBzdHJpbmc7XG4gICAgICAgIHZhciBzZW5zOiBzdHJpbmc7XG4gICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjBcIiArIG1pbnN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWlucyA9IFwiXCIgKyBtaW5zdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKHNlY29uZHQgPCAxMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMFwiICsgc2Vjb25kdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIlwiICsgc2Vjb25kdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzE6IDAwOjAwOjAwXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQxKHQ6IG51bWJlciA9IDApOiBzdHJpbmcge1xuICAgICAgICBsZXQgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHQgLyAzNjAwKTtcbiAgICAgICAgbGV0IGhvdXJzOiBzdHJpbmc7XG4gICAgICAgIGxldCBkYXkgPSAnJztcbiAgICAgICAgaWYgKGhvdXJzdCA9PSAwKSB7XG4gICAgICAgICAgICBob3VycyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChob3Vyc3QgPCAxMClcbiAgICAgICAgICAgICAgICBob3VycyA9IFwiMFwiICsgaG91cnN0O1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGggPSBob3Vyc3QgJSAyNDtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnN0ID49IDI0KSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzID0gaCA8IDEwID8gXCIwXCIgKyBoIDogJycgKyBoO1xuICAgICAgICAgICAgICAgICAgICBkYXkgPSBNYXRoLmZsb29yKGhvdXJzdCAvIDI0KSArICdkICc7XG4gICAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGhvdXJzID0gaCA8IDEwID8gXCIwXCIgKyBoIDogJycgKyBoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcigodCAtIGhvdXJzdCAqIDM2MDApIC8gNjApO1xuICAgICAgICBsZXQgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcigodCAtIGhvdXJzdCAqIDM2MDApICUgNjApO1xuICAgICAgICBsZXQgbWluczogc3RyaW5nO1xuICAgICAgICBsZXQgc2Vuczogc3RyaW5nO1xuICAgICAgICBpZiAobWluc3QgPT0gMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5zdCA8IDEwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwXCIgKyBtaW5zdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIlwiICsgbWluc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZHQgPT0gMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjBcIiArIHNlY29uZHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZW5zID0gXCJcIiArIHNlY29uZHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRheSArIGhvdXJzICsgXCI6XCIgKyBtaW5zICsgXCI6XCIgKyBzZW5zO1xuICAgIH1cblxuICAgIC8vMzogMDA6MDBcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZDModDogbnVtYmVyID0gMCk6IHN0cmluZyB7XG4gICAgICAgIHZhciBob3Vyc3Q6IG51bWJlciA9IE1hdGguZmxvb3IodCAvIDM2MDApO1xuICAgICAgICB2YXIgbWluc3Q6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAvIDYwKTtcbiAgICAgICAgdmFyIHNlY29uZHQ6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAlIDYwKTtcbiAgICAgICAgdmFyIG1pbnM6IHN0cmluZztcbiAgICAgICAgdmFyIHNlbnM6IHN0cmluZztcbiAgICAgICAgaWYgKG1pbnN0ID09IDApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobWluc3QgPCAxMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMFwiICsgbWluc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5zID0gXCJcIiArIG1pbnN0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWNvbmR0ID09IDApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Vjb25kdCA8IDEwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwXCIgKyBzZWNvbmR0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VucyA9IFwiXCIgKyBzZWNvbmR0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5zICsgXCI6XCIgKyBzZW5zO1xuICAgIH1cblxuICAgIC8vMjp5eXl5LW1tLWRkIGg6bTpzXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQyKHRpbWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHZhciBkYXRlOiBEYXRlID0gbmV3IERhdGUodGltZSk7XG4gICAgICAgIHZhciB5ZWFyOiBudW1iZXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIHZhciBtb250aDogbnVtYmVyID0gZGF0ZS5nZXRNb250aCgpICsgMTsgXHQvL+i/lOWbnueahOaciOS7veS7jjAtMTHvvJtcbiAgICAgICAgdmFyIGRheTogbnVtYmVyID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgICAgIHZhciBob3VyczogbnVtYmVyID0gZGF0ZS5nZXRIb3VycygpO1xuICAgICAgICB2YXIgbWludXRlOiBudW1iZXIgPSBkYXRlLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgdmFyIHNlY29uZDogbnVtYmVyID0gZGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgICAgIHJldHVybiB5ZWFyICsgXCItXCIgKyBtb250aCArIFwiLVwiICsgZGF5ICsgXCIgXCIgKyBob3VycyArIFwiOlwiICsgbWludXRlICsgXCI6XCIgKyBzZWNvbmQ7XG5cbiAgICB9XG5cbiAgICAvLzQ6eHjlpKnliY3vvIx4eOWwj+aXtuWJje+8jHh45YiG6ZKf5YmNXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQ0KHRpbWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHZhciB0ID0gTWF0aC5mbG9vcih0aW1lIC8gMzYwMCk7XG4gICAgICAgIGlmICh0ID4gMCkge1xuICAgICAgICAgICAgaWYgKHQgPiAyNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKHQgLyAyNCkgKyBcIuWkqeWJjVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHQgKyBcIuWwj+aXtuWJjVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGltZSAvIDYwKSArIFwi5YiG6ZKf5YmNXCI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZDUodGltZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgLy8g5q+P5Liq5pe26Ze05Y2V5L2N5omA5a+55bqU55qE56eS5pWwXG4gICAgICAgIHZhciBvbmVEYXk6IG51bWJlciA9IDM2MDAgKiAyNDtcbiAgICAgICAgdmFyIG9uZUhvdXJzdDogbnVtYmVyID0gMzYwMDtcbiAgICAgICAgdmFyIG9uZU1pbnN0OiBudW1iZXIgPSA2MDtcblxuICAgICAgICB2YXIgZGF5cyA9IE1hdGguZmxvb3IodGltZSAvIG9uZURheSk7XG4gICAgICAgIHZhciBob3Vyc3Q6IG51bWJlciA9IE1hdGguZmxvb3IodGltZSAlIG9uZURheSAvIG9uZUhvdXJzdClcbiAgICAgICAgdmFyIG1pbnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0aW1lIC0gaG91cnN0ICogb25lSG91cnN0KSAvIG9uZU1pbnN0KSAgLy9NYXRoLmZsb29yKHRpbWUgJSBvbmVEYXkgJSBvbmVIb3Vyc3QgLyBvbmVNaW5zdCk7XG4gICAgICAgIHZhciBzZWNvbmR0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0aW1lIC0gaG91cnN0ICogb25lSG91cnN0KSAlIG9uZU1pbnN0KSAvL3RpbWU7XG5cbiAgICAgICAgdmFyIGRheXNzOiBzdHJpbmcgPSBcIlwiO1xuICAgICAgICB2YXIgaG91cnNzOiBzdHJpbmcgPSBcIlwiXG4gICAgICAgIHZhciBtaW5zczogc3RyaW5nID0gXCJcIjtcbiAgICAgICAgdmFyIHNlY3NzOiBzdHJpbmcgPSBcIlwiXG4gICAgICAgIGlmICh0aW1lID4gMCkge1xuICAgICAgICAgICAgLy/lpKlcbiAgICAgICAgICAgIGlmIChkYXlzID09IDApIHtcbiAgICAgICAgICAgICAgICBkYXlzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgLy/lsI/ml7ZcbiAgICAgICAgICAgICAgICBpZiAoaG91cnN0ID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaG91cnNzID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgLy/liIZcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1pbnN0ID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNzID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWNvbmR0ID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlY29uZHQgPCAxMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCIwXCIgKyBzZWNvbmR0ICsgXCLnp5JcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWNzcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNzID0gXCJcIiArIG1pbnN0ICsgXCLliIbpkp9cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWNvbmR0ID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlY29uZHQgPCAxMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCIwXCIgKyBzZWNvbmR0ICsgXCLnp5JcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtaW5zcyArIHNlY3NzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaG91cnNzID0gaG91cnN0ICsgXCLlsI/ml7ZcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1pbnN0ID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNzID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWNvbmR0ID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlY29uZHQgPCAxMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCIwXCIgKyBzZWNvbmR0ICsgXCLnp5JcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBob3Vyc3MgKyBzZWNzc1xuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWluc3QgPCAxMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluc3MgPSBcIjBcIiArIG1pbnN0ICsgXCLliIbpkp9cIjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNzID0gXCJcIiArIG1pbnN0ICsgXCLliIbpkp9cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBob3Vyc3MgKyBtaW5zcztcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRheXNzID0gZGF5cyArIFwi5aSpXCI7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA8IDEwKVxuICAgICAgICAgICAgICAgICAgICAgICAgaG91cnNzID0gXCIwXCIgKyBob3Vyc3QgKyBcIuWwj+aXtlwiO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Vyc3MgPSBcIlwiICsgaG91cnN0ICsgXCLlsI/ml7ZcIjtcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZGF5c3MgKyBob3Vyc3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYWRkKG51bSkge1xuICAgICAgICByZXR1cm4gbnVtIDwgMTAgPyAnMCcgKyBudW0gOiBudW07XG4gICAgfVxuXG5cbn1cbiIsImltcG9ydCBPYmplY3RQb29sIGZyb20gXCIuL09iamVjdFBvb2xcIjtcblxuLypcbiogbmFtZTtcbiovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPYmplY3RJbnN0YW5jZSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgY2x6cyA9IFtdO1xuICAgIHByaXZhdGUgc3RhdGljIG9iamVjdHMgPSBbXTtcblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0KGNsczogYW55KSB7XG4gICAgICAgIGxldCBpZHggPSB0aGlzLmNsenMuaW5kZXhPZihjbHMpO1xuICAgICAgICByZXR1cm4gKGlkeCA+PSAwICYmIHRoaXMub2JqZWN0c1tpZHhdKSB8fCB0aGlzLmNyZWF0ZShjbHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNyZWF0ZShjbHM6IGFueSkge1xuICAgICAgICB2YXIgb2JqID0gT2JqZWN0UG9vbC5wb3AoY2xzKTtcbiAgICAgICAgdGhpcy5vYmplY3RzLnB1c2gob2JqKTtcbiAgICAgICAgdGhpcy5jbHpzLnB1c2goY2xzKTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBPYmplY3RQb29sIHtcbiAgICBwcml2YXRlIHN0YXRpYyBjbHNBcnIgPSBbXTtcblxuICAgIHN0YXRpYyBwb3AoY2xzOiBhbnkpIHtcbiAgICAgICAgbGV0IGlkeCA9IHRoaXMuY2xzQXJyLmluZGV4T2YoY2xzKTtcbiAgICAgICAgaWYgKGlkeCA8IDApIHtcbiAgICAgICAgICAgIGlkeCA9IHRoaXMuY2xzQXJyLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuY2xzQXJyLnB1c2goY2xzKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQga2V5ID0gJ3Bvb2xLZXknICsgaWR4O1xuICAgICAgICBsZXQgaXRlbSA9IExheWEuUG9vbC5nZXRJdGVtQnlDbGFzcyhrZXksIGNscyk7XG4gICAgICAgIGl0ZW0ucG9vbEtleSA9IGtleTtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgc3RhdGljIHB1c2goaXRlbSkge1xuICAgICAgICBMYXlhLlBvb2wucmVjb3ZlcihpdGVtLnBvb2xLZXksIGl0ZW0pO1xuICAgIH1cbn0iLCJleHBvcnQgZGVmYXVsdCAgY2xhc3MgU2NhbGVCdXR0b25TY3JpcHQge1xuIFxuICAgIHB1YmxpYyBkZWxheVRpbWU6IG51bWJlciA9IDA7XG4gICAgcHVibGljIG1pblNjYWxlOiBudW1iZXIgPSAwO1xuICAgIHByaXZhdGUgbW9ua2V5Qm94OiBMYXlhLkltYWdlO1xuXG4gICAgY29uc3RydWN0b3IoKXtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKuiuvue9rm93bmVy5Ye95pWw77yM5Y+v5Lul55u05o6l6I635Y+W5Yiw5re75Yqg6ZmE5Yqg6ISa5pys55qE57uE5Lu25a6e5L6LIFxuICAgICAqKi9cbiAgICBwdWJsaWMgc2V0IG93bmVyKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5tb25rZXlCb3ggPSB2YWx1ZTtcbiAgICAgICAgLy/oh6rlrprkuYnnmoTohJrmnKzkvJrmnInml7bluo/pl67popjvvIzmiYDku6XlnKjmraTmt7vliqDkuIDkuKrlu7bml7ZcbiAgICAgICAgdGhpcy5tb25rZXlCb3guZnJhbWVPbmNlKDIsIHRoaXMsIHRoaXMub25Mb2FkZWQpO1xuICAgICAgICBcbiAgICB9XG5cbiAgICBvbkxvYWRlZCgpOiB2b2lkIHtcbiAgICAgICAvKiDorr7nva7mjInpkq7kuLrljZXmgIHmjInpkq5cbiAgICAgICAgKiog5Y+W5YC877yaXG4gICAgICAgICoqIDHvvJrljZXmgIHjgILlm77niYfkuI3lgZrliIflibLvvIzmjInpkq7nmoTnmq7ogqTnirbmgIHlj6rmnInkuIDnp43jgIJcbiAgICAgICAgKiogMu+8muS4pOaAgeOAguWbvueJh+WwhuS7peerluebtOaWueWQkeiiq+etieavlOWIh+WJsuS4ujLpg6jliIbvvIzku47kuIrlkJHkuIvvvIzkvp3mrKHkuLrlvLnotbfnirbmgIHnmq7ogqTjgIHmjInkuIvlkoznu4/ov4flj4rpgInkuK3nirbmgIHnmq7ogqTjgIJcbiAgICAgICAgKiogM++8muS4ieaAgeOAguWbvueJh+WwhuS7peerluebtOaWueWQkeiiq+etieavlOWIh+WJsuS4ujLpg6jliIbvvIzku47kuIrlkJHkuIvvvIzkvp3mrKHkuLrlvLnotbfnirbmgIHnmq7ogqTjgIHnu4/ov4fnirbmgIHnmq7ogqTjgIHmjInkuIvlkozpgInkuK3nirbmgIHnmq7ogqRcbiAgICAgICAgKi9cbiAgICAgICAgLy/mt7vliqDpvKDmoIfmjInkuIvkuovku7bkvqblkKzjgILmjInml7bml7bnvKnlsI/mjInpkq7jgIJcbiAgICAgICAgdGhpcy5tb25rZXlCb3gub24oTGF5YS5FdmVudC5NT1VTRV9ET1dOLCB0aGlzLCB0aGlzLnNjYWxlU21hbGwpO1xuICAgICAgICAvL+a3u+WKoOm8oOagh+aKrOi1t+S6i+S7tuS+puWQrOOAguaKrOi1t+aXtui/mOWOn+aMiemSruOAglxuICAgICAgICB0aGlzLm1vbmtleUJveC5vbihMYXlhLkV2ZW50Lk1PVVNFX1VQLCB0aGlzLCB0aGlzLnNjYWxlQmlnKTtcbiAgICAgICAgLy/mt7vliqDpvKDmoIfnprvlvIDkuovku7bkvqblkKzjgILnprvlvIDml7bov5jljp/mjInpkq7jgIJcbiAgICAgICAgdGhpcy5tb25rZXlCb3gub24oTGF5YS5FdmVudC5NT1VTRV9PVVQsIHRoaXMsIHRoaXMuc2NhbGVCaWcpO1xuICAgIH1cbiAgICBcbiAgICBcbiAgICBwcml2YXRlIHNjYWxlU21hbGwoKTp2b2lke1xuICAgICAgICAvL+e8qeWwj+iHszAuOOeahOe8k+WKqOaViOaenFxuICAgICAgICBMYXlhLlR3ZWVuLnRvKHRoaXMubW9ua2V5Qm94LCB7c2NhbGVYOjAuOCwgc2NhbGVZOiAwLjh9LCAyKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBzY2FsZUJpZygpOnZvaWR7XG4gICAgICAgIC8v5Y+Y5aSn6L+Y5Y6f55qE57yT5Yqo5pWI5p6cXG4gICAgICAgIExheWEuVHdlZW4udG8odGhpcy5tb25rZXlCb3gsIHtzY2FsZVg6MSwgc2NhbGVZOjF9LCAyKTtcbiAgICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCAgY2xhc3MgVXRpbCB7XG4gICAgcHVibGljIGxvYWQocmVzLCBvblByb2dyZXNzPzogTGF5YS5IYW5kbGVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChzdWMsIGZhaWwpID0+IHtcbiAgICAgICAgICAgIExheWEubG9hZGVyLmxvYWQocmVzLCBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsIHN1YyksIG9uUHJvZ3Jlc3MpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHNldEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgTGF5YS5Mb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlLnRvU3RyaW5nKCkpXG4gICAgfVxuICAgIGdldEl0ZW0oa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIExheWEuTG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICB9XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBVdGlsO1xuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEkoKTogVXRpbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgVXRpbCk7XG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBEYXRhS2V5IHtcbiAgICBjdXJfcmVkX2RheV9saW1pdCA9ICdjdXJfcmVkX2RheV9saW1pdCcsXG4gICAgY3VyX3NoYWtlX2RheV9saW1pdCA9ICdjdXJfc2hha2VfZGF5X2xpbWl0JyxcbiAgICBzaGFrZUxhc3RUaW1lID0gJ3NoYWtlTGFzdFRpbWUnLFxuICAgIGRhdGFDTlQgPSAnZGF0YUNOVCcsXG4gICAgdG9kYXlDbnQgPSAndG9kYXlDbnQnLFxuICAgIGxhc3RUaW1lID0gJ2xhc3RUaW1lJyxcbn0iXX0=
puchi_laya/bin/prefab/View.json
1 -{"type":"View","props":{"y":0,"x":0,"width":750,"presetID":1,"isPresetRoot":true,"height":1334,"centerY":0,"centerX":0},"compId":10,"child":[{"type":"Box","props":{"y":37,"x":0,"width":150,"presetID":2,"height":60},"compId":4,"child":[{"type":"Sprite","props":{"y":0,"x":73,"var":"btnInvite","texture":"common/btnInvite.png","presetID":3,"pivotY":0.5,"pivotX":50},"compId":5,"child":[{"type":"Script","props":{"presetID":29,"runtime":"uitl/ScaleButtonScript.ts"},"compId":35}]},{"type":"Button","props":{"y":49,"x":180,"var":"btnServer","stateNum":1,"skin":"common/btn_serve(1).png","presetID":4,"anchorY":0.5,"anchorX":0.5},"compId":7,"child":[{"type":"Script","props":{"presetID":30,"runtime":"uitl/ScaleButtonScript.ts"},"compId":36}]},{"type":"Button","props":{"y":49,"x":331,"var":"btnVibrate","stateNum":1,"skin":"common/btn_vibrate_on.png","presetID":5,"anchorY":0.5,"anchorX":0.5},"compId":8,"child":[{"type":"Script","props":{"presetID":31,"runtime":"uitl/ScaleButtonScript.ts"},"compId":37}]},{"type":"Button","props":{"y":49,"x":465,"var":"btn_shake","stateNum":1,"skin":"common/btn_yao.png","presetID":6,"anchorY":0.5,"anchorX":0.5},"compId":15,"child":[{"type":"Script","props":{"presetID":32,"runtime":"uitl/ScaleButtonScript.ts"},"compId":38}]}]},{"type":"Box","props":{"y":176,"x":48,"presetID":7,"name":"coin"},"compId":9,"child":[{"type":"Image","props":{"skin":"common/img_coin_bg.png","presetID":8},"compId":11},{"type":"Label","props":{"y":79,"x":85.04541015625,"text":"0","presetID":24,"fontSize":34,"color":"#9c7b7b"},"compId":30},{"type":"Sprite","props":{"y":-6,"x":-24,"texture":"common/icon_coin.png","presetID":9},"compId":12},{"type":"Label","props":{"y":12,"x":85.04541015625,"text":"0","presetID":10,"fontSize":34,"color":"#171515"},"compId":13},{"type":"Button","props":{"y":0,"x":156,"var":"btnDrawal","stateNum":1,"skin":"common/btn_drawal.png","presetID":11},"compId":14},{"type":"Script","props":{"tiplab":"@node:30","presetID":23,"coinlab":"@node:13","runtime":"RedDrawal.ts"},"compId":29}]},{"type":"Box","props":{"y":261,"x":242,"presetID":19},"compId":25,"child":[{"type":"Button","props":{"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":13,"labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5},"compId":16,"child":[{"type":"Script","props":{"presetID":26,"runtime":"uitl/ScaleButtonScript.ts"},"compId":32}]},{"type":"Button","props":{"y":87,"x":282,"width":240,"var":"btnShowBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":14,"labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5},"compId":18,"child":[{"type":"Script","props":{"presetID":27,"runtime":"uitl/ScaleButtonScript.ts"},"compId":33}]},{"type":"Button","props":{"y":189,"x":-21,"width":240,"var":"btnShowFullAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":15,"labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5},"compId":20,"child":[{"type":"Script","props":{"presetID":28,"runtime":"uitl/ScaleButtonScript.ts"},"compId":34}]},{"type":"Button","props":{"y":189,"x":282,"width":240,"var":"btnShowNativeAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":16,"labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5},"compId":21,"child":[{"type":"Script","props":{"presetID":33,"runtime":"uitl/ScaleButtonScript.ts"},"compId":39}]},{"type":"Button","props":{"width":240,"var":"btnShowInterAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":17,"labelSize":30,"label":"显示插屏广告","centerY":124,"centerX":-256,"anchorY":0.5,"anchorX":0.5},"compId":22,"child":[{"type":"Script","props":{"presetID":34,"runtime":"uitl/ScaleButtonScript.ts"},"compId":40}]},{"type":"Button","props":{"width":240,"var":"btnRewardAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":22,"labelSize":30,"label":"显示激励广告","centerY":124,"centerX":17,"anchorY":0.5,"anchorX":0.5},"compId":28,"child":[{"type":"Script","props":{"presetID":35,"runtime":"uitl/ScaleButtonScript.ts"},"compId":41}]},{"type":"Button","props":{"y":-59,"x":219,"width":240,"var":"btnRedpacket","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":25,"labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5},"compId":31,"child":[{"type":"Script","props":{"presetID":36,"runtime":"uitl/ScaleButtonScript.ts"},"compId":42}]}]},{"type":"View","props":{"y":773,"x":75,"width":600,"var":"NativeAD","presetID":18,"height":300},"compId":23,"child":[{"type":"Script","props":{"presetID":21,"runtime":"sdk/NativeAd.ts"},"compId":27}]}],"loadList":["common/btnInvite.png","common/btn_serve(1).png","common/btn_vibrate_on.png","common/btn_yao.png","common/img_coin_bg.png","common/icon_coin.png","common/btn_drawal.png","common/btn_gr.png"],"loadList3D":[]}  
2 \ No newline at end of file 1 \ No newline at end of file
  2 +{"type":"View","props":{"y":0,"x":0,"width":750,"presetID":1,"isPresetRoot":true,"height":1334,"centerY":0,"centerX":0},"compId":10,"child":[{"type":"Box","props":{"y":37,"x":0,"width":150,"presetID":2,"height":60},"compId":4,"child":[{"type":"Sprite","props":{"y":0,"x":73,"var":"btnInvite","texture":"common/btnInvite.png","presetID":3,"pivotY":0.5,"pivotX":50},"compId":5,"child":[{"type":"Script","props":{"presetID":29,"runtime":"uitl/ScaleButtonScript.ts"},"compId":35}]},{"type":"Button","props":{"y":49,"x":180,"var":"btnServer","stateNum":1,"skin":"common/btn_serve(1).png","presetID":4,"anchorY":0.5,"anchorX":0.5},"compId":7,"child":[{"type":"Script","props":{"presetID":30,"runtime":"uitl/ScaleButtonScript.ts"},"compId":36}]},{"type":"Button","props":{"y":49,"x":331,"var":"btnVibrate","stateNum":1,"skin":"common/btn_vibrate_on.png","presetID":5,"anchorY":0.5,"anchorX":0.5},"compId":8,"child":[{"type":"Script","props":{"presetID":31,"runtime":"uitl/ScaleButtonScript.ts"},"compId":37}]},{"type":"Button","props":{"y":49,"x":465,"var":"btn_shake","stateNum":1,"skin":"common/btn_yao.png","presetID":6,"anchorY":0.5,"anchorX":0.5},"compId":15,"child":[{"type":"Script","props":{"presetID":32,"runtime":"uitl/ScaleButtonScript.ts"},"compId":38}]}]},{"type":"Box","props":{"y":176,"x":48,"presetID":7,"name":"coin"},"compId":9,"child":[{"type":"Image","props":{"skin":"common/img_coin_bg.png","presetID":8},"compId":11},{"type":"Label","props":{"y":79,"x":85.04541015625,"text":"0","presetID":24,"fontSize":34,"color":"#9c7b7b"},"compId":30},{"type":"Sprite","props":{"y":-6,"x":-24,"texture":"common/icon_coin.png","presetID":9},"compId":12},{"type":"Label","props":{"y":29,"x":88,"text":"0","presetID":10,"fontSize":34,"color":"#171515","anchorY":0.5,"anchorX":0.5},"compId":13},{"type":"Button","props":{"y":0,"x":156,"var":"btnDrawal","stateNum":1,"skin":"common/btn_drawal.png","presetID":11},"compId":14},{"type":"Script","props":{"tiplab":"@node:30","presetID":23,"coinlab":"@node:13","runtime":"RedDrawal.ts"},"compId":29}]},{"type":"Box","props":{"y":250,"x":218,"presetID":19},"compId":25,"child":[{"type":"Button","props":{"y":279,"x":-21,"width":240,"var":"btnPreFull","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":39,"labelSize":30,"label":"预加载全屏","anchorY":0.5,"anchorX":0.5},"compId":48,"child":[{"type":"Script","props":{"presetID":40,"runtime":"uitl/ScaleButtonScript.ts"},"compId":49}]},{"type":"Button","props":{"y":189,"x":-21,"width":240,"var":"btnPreNative","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":37,"labelSize":30,"label":"预加载信息流","anchorY":0.5,"anchorX":0.5},"compId":46,"child":[{"type":"Script","props":{"presetID":38,"runtime":"uitl/ScaleButtonScript.ts"},"compId":47}]},{"type":"Button","props":{"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":13,"labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5},"compId":16,"child":[{"type":"Script","props":{"presetID":26,"runtime":"uitl/ScaleButtonScript.ts"},"compId":32}]},{"type":"Button","props":{"y":87,"x":402,"width":200,"var":"btnCloseBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":47,"labelSize":30,"label":"关闭banner","anchorY":0.5,"anchorX":0.5},"compId":56,"child":[{"type":"Script","props":{"presetID":48,"runtime":"uitl/ScaleButtonScript.ts"},"compId":57}]},{"type":"Button","props":{"y":87,"x":200,"width":200,"var":"btnShowBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":14,"labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5},"compId":18,"child":[{"type":"Script","props":{"presetID":27,"runtime":"uitl/ScaleButtonScript.ts"},"compId":33}]},{"type":"Button","props":{"y":279,"x":313,"width":240,"var":"btnShowFullAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":15,"labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5},"compId":20,"child":[{"type":"Script","props":{"presetID":28,"runtime":"uitl/ScaleButtonScript.ts"},"compId":34}]},{"type":"Button","props":{"y":189,"x":405,"width":200,"var":"btnCloseNative","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":45,"labelSize":30,"label":"关闭信息流","anchorY":0.5,"anchorX":0.5},"compId":54,"child":[{"type":"Script","props":{"presetID":46,"runtime":"uitl/ScaleButtonScript.ts"},"compId":55}]},{"type":"Button","props":{"y":189,"x":205,"width":200,"var":"btnShowNativeAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":16,"labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5},"compId":21,"child":[{"type":"Script","props":{"presetID":33,"runtime":"uitl/ScaleButtonScript.ts"},"compId":39}]},{"type":"Button","props":{"width":240,"var":"btnShowInterAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":17,"labelSize":30,"label":"显示插屏广告","centerY":105,"centerX":18,"anchorY":0.5,"anchorX":0.5},"compId":22,"child":[{"type":"Script","props":{"presetID":34,"runtime":"uitl/ScaleButtonScript.ts"},"compId":40}]},{"type":"Button","props":{"width":240,"var":"btnRewardAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":22,"labelSize":30,"label":"显示激励广告","centerY":200,"centerX":23,"anchorY":0.5,"anchorX":0.5},"compId":28,"child":[{"type":"Script","props":{"presetID":35,"runtime":"uitl/ScaleButtonScript.ts"},"compId":41}]},{"type":"Button","props":{"y":-43,"x":366,"width":200,"var":"btnMinWithDrawal","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":49,"labelSize":30,"label":"最低提档","anchorY":0.5,"anchorX":0.5},"compId":58,"child":[{"type":"Script","props":{"presetID":50,"runtime":"uitl/ScaleButtonScript.ts"},"compId":59},{"type":"Label","props":{"y":-22,"x":36,"width":22,"var":"minWithDrawalLab","text":"0","rotation":-4,"presetID":51,"pivotY":11,"pivotX":11,"height":22,"fontSize":20,"color":"#eedbda"},"compId":60}]},{"type":"Button","props":{"y":-43,"x":169,"width":180,"var":"btnRedpacket","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":25,"labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5},"compId":31,"child":[{"type":"Script","props":{"presetID":36,"runtime":"uitl/ScaleButtonScript.ts"},"compId":42}]},{"type":"Button","props":{"y":375,"x":-21,"width":240,"var":"btnPreInsert","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":41,"labelSize":30,"label":"预加载插屏","anchorY":0.5,"anchorX":0.5},"compId":50,"child":[{"type":"Script","props":{"presetID":42,"runtime":"uitl/ScaleButtonScript.ts"},"compId":51}]},{"type":"Button","props":{"y":470,"x":-21,"width":240,"var":"btnPreVideo","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":43,"labelSize":30,"label":"预加载激励","anchorY":0.5,"anchorX":0.5},"compId":52,"child":[{"type":"Script","props":{"presetID":44,"runtime":"uitl/ScaleButtonScript.ts"},"compId":53}]}]},{"type":"View","props":{"y":773,"x":75,"width":600,"var":"NativeAD","presetID":18,"height":300},"compId":23,"child":[{"type":"Script","props":{"presetID":21,"runtime":"sdk/NativeAd.ts"},"compId":27}]}],"loadList":["common/btnInvite.png","common/btn_serve(1).png","common/btn_vibrate_on.png","common/btn_yao.png","common/img_coin_bg.png","common/icon_coin.png","common/btn_drawal.png","common/btn_gr.png"],"loadList3D":[]}
3 \ No newline at end of file 3 \ No newline at end of file
puchi_laya/const.d.ts
1 declare const MyBridge; 1 declare const MyBridge;
  2 +interface Object {
  3 + onMyBridgeReady: any;
  4 + startTime: any;
  5 + pixelRatio: any;
  6 +}
  7 +
puchi_laya/laya/.DS_Store
No preview for this file type
puchi_laya/laya/pages/TestScene.scene
1 { 1 {
2 "type":"Scene", 2 "type":"Scene",
3 - "selectedBox":1,  
4 - "selecteID":70, 3 + "selectedBox":4,
  4 + "selecteID":7,
5 "searchKey":"Scene", 5 "searchKey":"Scene",
6 "referenceLines":null, 6 "referenceLines":null,
7 "props":{"width":750,"sceneColor":"#000000","runtime":"TestScene.ts","height":1624}, 7 "props":{"width":750,"sceneColor":"#000000","runtime":"TestScene.ts","height":1624},
8 "nodeParent":-1, 8 "nodeParent":-1,
9 - "maxID":86, 9 + "maxID":102,
10 "label":"Scene", 10 "label":"Scene",
11 "isOpen":true, 11 "isOpen":true,
12 "isDirectory":true, 12 "isDirectory":true,
@@ -29,25 +29,26 @@ @@ -29,25 +29,26 @@
29 }, 29 },
30 { 30 {
31 "type":"View", 31 "type":"View",
32 - "selectedBox":10, 32 + "selectedBox":25,
  33 + "selecteID":28,
33 "searchKey":"View", 34 "searchKey":"View",
34 - "props":{"width":750,"presetID":1,"preset":"laya/pages/prefab/View.prefab","height":1334,"centerY":0,"centerX":0}, 35 + "props":{"presetID":1,"preset":"laya/pages/prefab/View.prefab"},
35 "nodeParent":1, 36 "nodeParent":1,
36 - "maxID":28, 37 + "maxID":43,
37 "label":"View(View)", 38 "label":"View(View)",
38 - "isOpen":false, 39 + "isOpen":true,
39 "isDirectory":true, 40 "isDirectory":true,
40 "isAniNode":true, 41 "isAniNode":true,
41 "hasChild":true, 42 "hasChild":true,
42 - "compId":70, 43 + "compId":86,
43 "child":[ 44 "child":[
44 { 45 {
45 "type":"Box", 46 "type":"Box",
46 "searchKey":"Box", 47 "searchKey":"Box",
47 "props":{"presetID":2,"preset":"laya/pages/prefab/View.prefab"}, 48 "props":{"presetID":2,"preset":"laya/pages/prefab/View.prefab"},
48 - "nodeParent":70, 49 + "nodeParent":86,
49 "label":"Box(View)", 50 "label":"Box(View)",
50 - "isOpen":false, 51 + "isOpen":true,
51 "isDirectory":true, 52 "isDirectory":true,
52 "isAniNode":true, 53 "isAniNode":true,
53 "hasChild":true, 54 "hasChild":true,
@@ -59,6 +60,7 @@ @@ -59,6 +60,7 @@
59 "props":{"presetID":3,"preset":"laya/pages/prefab/View.prefab"}, 60 "props":{"presetID":3,"preset":"laya/pages/prefab/View.prefab"},
60 "nodeParent":4, 61 "nodeParent":4,
61 "label":"Sprite(View)", 62 "label":"Sprite(View)",
  63 + "isOpen":null,
62 "isDirectory":true, 64 "isDirectory":true,
63 "isAniNode":true, 65 "isAniNode":true,
64 "hasChild":true, 66 "hasChild":true,
@@ -76,7 +78,7 @@ @@ -76,7 +78,7 @@
76 "isDirectory":false, 78 "isDirectory":false,
77 "isAniNode":true, 79 "isAniNode":true,
78 "hasChild":false, 80 "hasChild":false,
79 - "compId":76, 81 + "compId":35,
80 "child":[ 82 "child":[
81 ] 83 ]
82 }] 84 }]
@@ -87,6 +89,7 @@ @@ -87,6 +89,7 @@
87 "props":{"presetID":4,"preset":"laya/pages/prefab/View.prefab"}, 89 "props":{"presetID":4,"preset":"laya/pages/prefab/View.prefab"},
88 "nodeParent":4, 90 "nodeParent":4,
89 "label":"Button(View)", 91 "label":"Button(View)",
  92 + "isOpen":null,
90 "isDirectory":true, 93 "isDirectory":true,
91 "isAniNode":true, 94 "isAniNode":true,
92 "hasChild":true, 95 "hasChild":true,
@@ -104,7 +107,7 @@ @@ -104,7 +107,7 @@
104 "isDirectory":false, 107 "isDirectory":false,
105 "isAniNode":true, 108 "isAniNode":true,
106 "hasChild":false, 109 "hasChild":false,
107 - "compId":77, 110 + "compId":36,
108 "child":[ 111 "child":[
109 ] 112 ]
110 }] 113 }]
@@ -115,6 +118,7 @@ @@ -115,6 +118,7 @@
115 "props":{"presetID":5,"preset":"laya/pages/prefab/View.prefab"}, 118 "props":{"presetID":5,"preset":"laya/pages/prefab/View.prefab"},
116 "nodeParent":4, 119 "nodeParent":4,
117 "label":"Button(View)", 120 "label":"Button(View)",
  121 + "isOpen":null,
118 "isDirectory":true, 122 "isDirectory":true,
119 "isAniNode":true, 123 "isAniNode":true,
120 "hasChild":true, 124 "hasChild":true,
@@ -132,7 +136,7 @@ @@ -132,7 +136,7 @@
132 "isDirectory":false, 136 "isDirectory":false,
133 "isAniNode":true, 137 "isAniNode":true,
134 "hasChild":false, 138 "hasChild":false,
135 - "compId":78, 139 + "compId":37,
136 "child":[ 140 "child":[
137 ] 141 ]
138 }] 142 }]
@@ -143,6 +147,7 @@ @@ -143,6 +147,7 @@
143 "props":{"presetID":6,"preset":"laya/pages/prefab/View.prefab"}, 147 "props":{"presetID":6,"preset":"laya/pages/prefab/View.prefab"},
144 "nodeParent":4, 148 "nodeParent":4,
145 "label":"Button(View)", 149 "label":"Button(View)",
  150 + "isOpen":null,
146 "isDirectory":true, 151 "isDirectory":true,
147 "isAniNode":true, 152 "isAniNode":true,
148 "hasChild":true, 153 "hasChild":true,
@@ -160,7 +165,7 @@ @@ -160,7 +165,7 @@
160 "isDirectory":false, 165 "isDirectory":false,
161 "isAniNode":true, 166 "isAniNode":true,
162 "hasChild":false, 167 "hasChild":false,
163 - "compId":79, 168 + "compId":38,
164 "child":[ 169 "child":[
165 ] 170 ]
166 }] 171 }]
@@ -170,7 +175,7 @@ @@ -170,7 +175,7 @@
170 "type":"Box", 175 "type":"Box",
171 "searchKey":"Box", 176 "searchKey":"Box",
172 "props":{"presetID":7,"preset":"laya/pages/prefab/View.prefab"}, 177 "props":{"presetID":7,"preset":"laya/pages/prefab/View.prefab"},
173 - "nodeParent":70, 178 + "nodeParent":86,
174 "label":"coin", 179 "label":"coin",
175 "isOpen":false, 180 "isOpen":false,
176 "isDirectory":true, 181 "isDirectory":true,
@@ -192,6 +197,19 @@ @@ -192,6 +197,19 @@
192 ] 197 ]
193 }, 198 },
194 { 199 {
  200 + "type":"Label",
  201 + "searchKey":"Label",
  202 + "props":{"presetID":24,"preset":"laya/pages/prefab/View.prefab"},
  203 + "nodeParent":9,
  204 + "label":"Label(View)",
  205 + "isDirectory":false,
  206 + "isAniNode":true,
  207 + "hasChild":false,
  208 + "compId":30,
  209 + "child":[
  210 + ]
  211 + },
  212 + {
195 "type":"Sprite", 213 "type":"Sprite",
196 "searchKey":"Sprite", 214 "searchKey":"Sprite",
197 "props":{"presetID":9,"preset":"laya/pages/prefab/View.prefab"}, 215 "props":{"presetID":9,"preset":"laya/pages/prefab/View.prefab"},
@@ -210,6 +228,7 @@ @@ -210,6 +228,7 @@
210 "props":{"presetID":10,"preset":"laya/pages/prefab/View.prefab"}, 228 "props":{"presetID":10,"preset":"laya/pages/prefab/View.prefab"},
211 "nodeParent":9, 229 "nodeParent":9,
212 "label":"Label(View)", 230 "label":"Label(View)",
  231 + "isOpen":true,
213 "isDirectory":false, 232 "isDirectory":false,
214 "isAniNode":true, 233 "isAniNode":true,
215 "hasChild":false, 234 "hasChild":false,
@@ -242,20 +261,7 @@ @@ -242,20 +261,7 @@
242 "isDirectory":false, 261 "isDirectory":false,
243 "isAniNode":true, 262 "isAniNode":true,
244 "hasChild":false, 263 "hasChild":false,
245 - "compId":72,  
246 - "child":[  
247 - ]  
248 - },  
249 - {  
250 - "type":"Label",  
251 - "searchKey":"Label",  
252 - "props":{"presetID":24,"preset":"laya/pages/prefab/View.prefab"},  
253 - "nodeParent":9,  
254 - "label":"Label(View)",  
255 - "isDirectory":false,  
256 - "isAniNode":true,  
257 - "hasChild":false,  
258 - "compId":73, 264 + "compId":29,
259 "child":[ 265 "child":[
260 ] 266 ]
261 }] 267 }]
@@ -264,9 +270,9 @@ @@ -264,9 +270,9 @@
264 "type":"Box", 270 "type":"Box",
265 "searchKey":"Box", 271 "searchKey":"Box",
266 "props":{"presetID":19,"preset":"laya/pages/prefab/View.prefab"}, 272 "props":{"presetID":19,"preset":"laya/pages/prefab/View.prefab"},
267 - "nodeParent":70, 273 + "nodeParent":86,
268 "label":"Box(View)", 274 "label":"Box(View)",
269 - "isOpen":false, 275 + "isOpen":true,
270 "isDirectory":true, 276 "isDirectory":true,
271 "isAniNode":true, 277 "isAniNode":true,
272 "hasChild":true, 278 "hasChild":true,
@@ -278,7 +284,7 @@ @@ -278,7 +284,7 @@
278 "props":{"presetID":13,"preset":"laya/pages/prefab/View.prefab"}, 284 "props":{"presetID":13,"preset":"laya/pages/prefab/View.prefab"},
279 "nodeParent":25, 285 "nodeParent":25,
280 "label":"Button(View)", 286 "label":"Button(View)",
281 - "isOpen":true, 287 + "isOpen":false,
282 "isDirectory":true, 288 "isDirectory":true,
283 "isAniNode":true, 289 "isAniNode":true,
284 "hasChild":true, 290 "hasChild":true,
@@ -296,7 +302,7 @@ @@ -296,7 +302,7 @@
296 "isDirectory":false, 302 "isDirectory":false,
297 "isAniNode":true, 303 "isAniNode":true,
298 "hasChild":false, 304 "hasChild":false,
299 - "compId":75, 305 + "compId":32,
300 "child":[ 306 "child":[
301 ] 307 ]
302 }] 308 }]
@@ -307,7 +313,7 @@ @@ -307,7 +313,7 @@
307 "props":{"presetID":14,"preset":"laya/pages/prefab/View.prefab"}, 313 "props":{"presetID":14,"preset":"laya/pages/prefab/View.prefab"},
308 "nodeParent":25, 314 "nodeParent":25,
309 "label":"Button(View)", 315 "label":"Button(View)",
310 - "isOpen":true, 316 + "isOpen":false,
311 "isDirectory":true, 317 "isDirectory":true,
312 "isAniNode":true, 318 "isAniNode":true,
313 "hasChild":true, 319 "hasChild":true,
@@ -325,7 +331,7 @@ @@ -325,7 +331,7 @@
325 "isDirectory":false, 331 "isDirectory":false,
326 "isAniNode":true, 332 "isAniNode":true,
327 "hasChild":false, 333 "hasChild":false,
328 - "compId":80, 334 + "compId":33,
329 "child":[ 335 "child":[
330 ] 336 ]
331 }] 337 }]
@@ -336,7 +342,7 @@ @@ -336,7 +342,7 @@
336 "props":{"presetID":15,"preset":"laya/pages/prefab/View.prefab"}, 342 "props":{"presetID":15,"preset":"laya/pages/prefab/View.prefab"},
337 "nodeParent":25, 343 "nodeParent":25,
338 "label":"Button(View)", 344 "label":"Button(View)",
339 - "isOpen":true, 345 + "isOpen":false,
340 "isDirectory":true, 346 "isDirectory":true,
341 "isAniNode":true, 347 "isAniNode":true,
342 "hasChild":true, 348 "hasChild":true,
@@ -354,7 +360,7 @@ @@ -354,7 +360,7 @@
354 "isDirectory":false, 360 "isDirectory":false,
355 "isAniNode":true, 361 "isAniNode":true,
356 "hasChild":false, 362 "hasChild":false,
357 - "compId":81, 363 + "compId":34,
358 "child":[ 364 "child":[
359 ] 365 ]
360 }] 366 }]
@@ -365,7 +371,7 @@ @@ -365,7 +371,7 @@
365 "props":{"presetID":16,"preset":"laya/pages/prefab/View.prefab"}, 371 "props":{"presetID":16,"preset":"laya/pages/prefab/View.prefab"},
366 "nodeParent":25, 372 "nodeParent":25,
367 "label":"Button(View)", 373 "label":"Button(View)",
368 - "isOpen":true, 374 + "isOpen":false,
369 "isDirectory":true, 375 "isDirectory":true,
370 "isAniNode":true, 376 "isAniNode":true,
371 "hasChild":true, 377 "hasChild":true,
@@ -383,7 +389,7 @@ @@ -383,7 +389,7 @@
383 "isDirectory":false, 389 "isDirectory":false,
384 "isAniNode":true, 390 "isAniNode":true,
385 "hasChild":false, 391 "hasChild":false,
386 - "compId":82, 392 + "compId":39,
387 "child":[ 393 "child":[
388 ] 394 ]
389 }] 395 }]
@@ -391,9 +397,10 @@ @@ -391,9 +397,10 @@
391 { 397 {
392 "type":"Button", 398 "type":"Button",
393 "searchKey":"Button", 399 "searchKey":"Button",
394 - "props":{"presetID":17,"preset":"laya/pages/prefab/View.prefab"}, 400 + "props":{"y":297,"x":-21,"presetID":17,"preset":"laya/pages/prefab/View.prefab"},
395 "nodeParent":25, 401 "nodeParent":25,
396 "label":"Button(View)", 402 "label":"Button(View)",
  403 + "isOpen":false,
397 "isDirectory":true, 404 "isDirectory":true,
398 "isAniNode":true, 405 "isAniNode":true,
399 "hasChild":true, 406 "hasChild":true,
@@ -411,7 +418,7 @@ @@ -411,7 +418,7 @@
411 "isDirectory":false, 418 "isDirectory":false,
412 "isAniNode":true, 419 "isAniNode":true,
413 "hasChild":false, 420 "hasChild":false,
414 - "compId":83, 421 + "compId":40,
415 "child":[ 422 "child":[
416 ] 423 ]
417 }] 424 }]
@@ -419,13 +426,14 @@ @@ -419,13 +426,14 @@
419 { 426 {
420 "type":"Button", 427 "type":"Button",
421 "searchKey":"Button", 428 "searchKey":"Button",
422 - "props":{"presetID":22,"preset":"laya/pages/prefab/View.prefab"}, 429 + "props":{"y":286,"x":282,"presetID":22,"preset":"laya/pages/prefab/View.prefab"},
423 "nodeParent":25, 430 "nodeParent":25,
424 "label":"Button(View)", 431 "label":"Button(View)",
  432 + "isOpen":null,
425 "isDirectory":true, 433 "isDirectory":true,
426 "isAniNode":true, 434 "isAniNode":true,
427 "hasChild":true, 435 "hasChild":true,
428 - "compId":71, 436 + "compId":28,
429 "child":[ 437 "child":[
430 { 438 {
431 "type":"Script", 439 "type":"Script",
@@ -434,12 +442,12 @@ @@ -434,12 +442,12 @@
434 "searchKey":"Script,ScaleButtonScript", 442 "searchKey":"Script,ScaleButtonScript",
435 "removeAble":true, 443 "removeAble":true,
436 "props":{"presetID":35,"preset":"laya/pages/prefab/View.prefab"}, 444 "props":{"presetID":35,"preset":"laya/pages/prefab/View.prefab"},
437 - "nodeParent":71, 445 + "nodeParent":28,
438 "label":"ScaleButtonScript", 446 "label":"ScaleButtonScript",
439 "isDirectory":false, 447 "isDirectory":false,
440 "isAniNode":true, 448 "isAniNode":true,
441 "hasChild":false, 449 "hasChild":false,
442 - "compId":84, 450 + "compId":41,
443 "child":[ 451 "child":[
444 ] 452 ]
445 }] 453 }]
@@ -454,7 +462,7 @@ @@ -454,7 +462,7 @@
454 "isDirectory":true, 462 "isDirectory":true,
455 "isAniNode":true, 463 "isAniNode":true,
456 "hasChild":true, 464 "hasChild":true,
457 - "compId":74, 465 + "compId":31,
458 "child":[ 466 "child":[
459 { 467 {
460 "type":"Script", 468 "type":"Script",
@@ -463,12 +471,228 @@ @@ -463,12 +471,228 @@
463 "searchKey":"Script,ScaleButtonScript", 471 "searchKey":"Script,ScaleButtonScript",
464 "removeAble":true, 472 "removeAble":true,
465 "props":{"presetID":36,"preset":"laya/pages/prefab/View.prefab"}, 473 "props":{"presetID":36,"preset":"laya/pages/prefab/View.prefab"},
466 - "nodeParent":74, 474 + "nodeParent":31,
  475 + "label":"ScaleButtonScript",
  476 + "isDirectory":false,
  477 + "isAniNode":true,
  478 + "hasChild":false,
  479 + "compId":42,
  480 + "child":[
  481 + ]
  482 + }]
  483 + },
  484 + {
  485 + "type":"Button",
  486 + "searchKey":"Button",
  487 + "props":{"presetID":37,"preset":"laya/pages/prefab/View.prefab"},
  488 + "nodeParent":25,
  489 + "label":"Button(View)",
  490 + "isOpen":false,
  491 + "isDirectory":true,
  492 + "isAniNode":true,
  493 + "hasChild":true,
  494 + "compId":87,
  495 + "child":[
  496 + {
  497 + "type":"Script",
  498 + "switchAble":true,
  499 + "source":"src/uitl/ScaleButtonScript.ts",
  500 + "searchKey":"Script,ScaleButtonScript",
  501 + "removeAble":true,
  502 + "props":{"presetID":38,"preset":"laya/pages/prefab/View.prefab"},
  503 + "nodeParent":87,
  504 + "label":"ScaleButtonScript",
  505 + "isDirectory":false,
  506 + "isAniNode":true,
  507 + "hasChild":false,
  508 + "compId":88,
  509 + "child":[
  510 + ]
  511 + }]
  512 + },
  513 + {
  514 + "type":"Button",
  515 + "searchKey":"Button",
  516 + "props":{"presetID":39,"preset":"laya/pages/prefab/View.prefab"},
  517 + "nodeParent":25,
  518 + "label":"Button(View)",
  519 + "isOpen":false,
  520 + "isDirectory":true,
  521 + "isAniNode":true,
  522 + "hasChild":true,
  523 + "compId":89,
  524 + "child":[
  525 + {
  526 + "type":"Script",
  527 + "switchAble":true,
  528 + "source":"src/uitl/ScaleButtonScript.ts",
  529 + "searchKey":"Script,ScaleButtonScript",
  530 + "removeAble":true,
  531 + "props":{"presetID":40,"preset":"laya/pages/prefab/View.prefab"},
  532 + "nodeParent":89,
  533 + "label":"ScaleButtonScript",
  534 + "isDirectory":false,
  535 + "isAniNode":true,
  536 + "hasChild":false,
  537 + "compId":90,
  538 + "child":[
  539 + ]
  540 + }]
  541 + },
  542 + {
  543 + "type":"Button",
  544 + "searchKey":"Button",
  545 + "props":{"presetID":41,"preset":"laya/pages/prefab/View.prefab"},
  546 + "nodeParent":25,
  547 + "label":"Button(View)",
  548 + "isOpen":false,
  549 + "isDirectory":true,
  550 + "isAniNode":true,
  551 + "hasChild":true,
  552 + "compId":91,
  553 + "child":[
  554 + {
  555 + "type":"Script",
  556 + "switchAble":true,
  557 + "source":"src/uitl/ScaleButtonScript.ts",
  558 + "searchKey":"Script,ScaleButtonScript",
  559 + "removeAble":true,
  560 + "props":{"presetID":42,"preset":"laya/pages/prefab/View.prefab"},
  561 + "nodeParent":91,
467 "label":"ScaleButtonScript", 562 "label":"ScaleButtonScript",
468 "isDirectory":false, 563 "isDirectory":false,
469 "isAniNode":true, 564 "isAniNode":true,
470 "hasChild":false, 565 "hasChild":false,
471 - "compId":85, 566 + "compId":92,
  567 + "child":[
  568 + ]
  569 + }]
  570 + },
  571 + {
  572 + "type":"Button",
  573 + "searchKey":"Button",
  574 + "props":{"presetID":43,"preset":"laya/pages/prefab/View.prefab"},
  575 + "nodeParent":25,
  576 + "label":"Button(View)",
  577 + "isOpen":false,
  578 + "isDirectory":true,
  579 + "isAniNode":true,
  580 + "hasChild":true,
  581 + "compId":93,
  582 + "child":[
  583 + {
  584 + "type":"Script",
  585 + "switchAble":true,
  586 + "source":"src/uitl/ScaleButtonScript.ts",
  587 + "searchKey":"Script,ScaleButtonScript",
  588 + "removeAble":true,
  589 + "props":{"presetID":44,"preset":"laya/pages/prefab/View.prefab"},
  590 + "nodeParent":93,
  591 + "label":"ScaleButtonScript",
  592 + "isDirectory":false,
  593 + "isAniNode":true,
  594 + "hasChild":false,
  595 + "compId":94,
  596 + "child":[
  597 + ]
  598 + }]
  599 + },
  600 + {
  601 + "type":"Button",
  602 + "searchKey":"Button",
  603 + "props":{"presetID":45,"preset":"laya/pages/prefab/View.prefab"},
  604 + "nodeParent":25,
  605 + "label":"Button(View)",
  606 + "isOpen":false,
  607 + "isDirectory":true,
  608 + "isAniNode":true,
  609 + "hasChild":true,
  610 + "compId":95,
  611 + "child":[
  612 + {
  613 + "type":"Script",
  614 + "switchAble":true,
  615 + "source":"src/uitl/ScaleButtonScript.ts",
  616 + "searchKey":"Script,ScaleButtonScript",
  617 + "removeAble":true,
  618 + "props":{"presetID":46,"preset":"laya/pages/prefab/View.prefab"},
  619 + "nodeParent":95,
  620 + "label":"ScaleButtonScript",
  621 + "isDirectory":false,
  622 + "isAniNode":true,
  623 + "hasChild":false,
  624 + "compId":96,
  625 + "child":[
  626 + ]
  627 + }]
  628 + },
  629 + {
  630 + "type":"Button",
  631 + "searchKey":"Button",
  632 + "props":{"presetID":47,"preset":"laya/pages/prefab/View.prefab"},
  633 + "nodeParent":25,
  634 + "label":"Button(View)",
  635 + "isOpen":false,
  636 + "isDirectory":true,
  637 + "isAniNode":true,
  638 + "hasChild":true,
  639 + "compId":97,
  640 + "child":[
  641 + {
  642 + "type":"Script",
  643 + "switchAble":true,
  644 + "source":"src/uitl/ScaleButtonScript.ts",
  645 + "searchKey":"Script,ScaleButtonScript",
  646 + "removeAble":true,
  647 + "props":{"presetID":48,"preset":"laya/pages/prefab/View.prefab"},
  648 + "nodeParent":97,
  649 + "label":"ScaleButtonScript",
  650 + "isDirectory":false,
  651 + "isAniNode":true,
  652 + "hasChild":false,
  653 + "compId":98,
  654 + "child":[
  655 + ]
  656 + }]
  657 + },
  658 + {
  659 + "type":"Button",
  660 + "searchKey":"Button",
  661 + "props":{"presetID":49,"preset":"laya/pages/prefab/View.prefab"},
  662 + "nodeParent":25,
  663 + "label":"Button(View)",
  664 + "isOpen":true,
  665 + "isDirectory":true,
  666 + "isAniNode":true,
  667 + "hasChild":true,
  668 + "compId":99,
  669 + "child":[
  670 + {
  671 + "type":"Script",
  672 + "switchAble":true,
  673 + "source":"src/uitl/ScaleButtonScript.ts",
  674 + "searchKey":"Script,ScaleButtonScript",
  675 + "removeAble":true,
  676 + "props":{"presetID":50,"preset":"laya/pages/prefab/View.prefab"},
  677 + "nodeParent":99,
  678 + "label":"ScaleButtonScript",
  679 + "isDirectory":false,
  680 + "isAniNode":true,
  681 + "hasChild":false,
  682 + "compId":100,
  683 + "child":[
  684 + ]
  685 + },
  686 + {
  687 + "type":"Label",
  688 + "searchKey":"Label",
  689 + "props":{"presetID":51,"preset":"laya/pages/prefab/View.prefab"},
  690 + "nodeParent":99,
  691 + "label":"Label(View)",
  692 + "isDirectory":false,
  693 + "isAniNode":true,
  694 + "hasChild":false,
  695 + "compId":101,
472 "child":[ 696 "child":[
473 ] 697 ]
474 }] 698 }]
@@ -478,7 +702,7 @@ @@ -478,7 +702,7 @@
478 "type":"View", 702 "type":"View",
479 "searchKey":"View", 703 "searchKey":"View",
480 "props":{"presetID":18,"preset":"laya/pages/prefab/View.prefab"}, 704 "props":{"presetID":18,"preset":"laya/pages/prefab/View.prefab"},
481 - "nodeParent":70, 705 + "nodeParent":86,
482 "label":"View(View)", 706 "label":"View(View)",
483 "isOpen":null, 707 "isOpen":null,
484 "isDirectory":true, 708 "isDirectory":true,
puchi_laya/laya/pages/prefab/View.prefab
1 { 1 {
2 "x":0, 2 "x":0,
3 "type":"View", 3 "type":"View",
4 - "selectedBox":4,  
5 - "selecteID":5, 4 + "selectedBox":58,
  5 + "selecteID":60,
6 "searchKey":"View", 6 "searchKey":"View",
7 "props":{"y":0,"x":0,"width":750,"sceneColor":null,"presetID":1,"preset":"laya/pages/prefab/View.prefab","isPresetRoot":true,"height":1334,"centerY":0,"centerX":0}, 7 "props":{"y":0,"x":0,"width":750,"sceneColor":null,"presetID":1,"preset":"laya/pages/prefab/View.prefab","isPresetRoot":true,"height":1334,"centerY":0,"centerX":0},
8 "nodeParent":-1, 8 "nodeParent":-1,
9 - "maxID":43, 9 + "maxID":61,
10 "label":"View(View)", 10 "label":"View(View)",
11 "isOpen":true, 11 "isOpen":true,
12 "isDirectory":true, 12 "isDirectory":true,
@@ -64,7 +64,7 @@ @@ -64,7 +64,7 @@
64 "props":{"y":49,"x":180,"var":"btnServer","stateNum":"1","skin":"common/btn_serve(1).png","presetID":4,"preset":"laya/pages/prefab/View.prefab","anchorY":0.5,"anchorX":0.5}, 64 "props":{"y":49,"x":180,"var":"btnServer","stateNum":"1","skin":"common/btn_serve(1).png","presetID":4,"preset":"laya/pages/prefab/View.prefab","anchorY":0.5,"anchorX":0.5},
65 "nodeParent":4, 65 "nodeParent":4,
66 "label":"btnServer", 66 "label":"btnServer",
67 - "isOpen":null, 67 + "isOpen":false,
68 "isDirectory":true, 68 "isDirectory":true,
69 "isAniNode":true, 69 "isAniNode":true,
70 "hasChild":true, 70 "hasChild":true,
@@ -207,7 +207,7 @@ @@ -207,7 +207,7 @@
207 "x":30, 207 "x":30,
208 "type":"Label", 208 "type":"Label",
209 "searchKey":"Label", 209 "searchKey":"Label",
210 - "props":{"y":12,"x":85.04541015625,"text":"0","presetID":10,"preset":"laya/pages/prefab/View.prefab","fontSize":34,"color":"#171515"}, 210 + "props":{"y":29,"x":88,"text":"0","presetID":10,"preset":"laya/pages/prefab/View.prefab","fontSize":34,"color":"#171515","anchorY":0.5,"anchorX":0.5},
211 "nodeParent":9, 211 "nodeParent":9,
212 "label":"Label(View)", 212 "label":"Label(View)",
213 "isOpen":true, 213 "isOpen":true,
@@ -254,7 +254,7 @@ @@ -254,7 +254,7 @@
254 "x":15, 254 "x":15,
255 "type":"Box", 255 "type":"Box",
256 "searchKey":"Box", 256 "searchKey":"Box",
257 - "props":{"y":261,"x":242,"presetID":19,"preset":"laya/pages/prefab/View.prefab"}, 257 + "props":{"y":250,"x":218,"presetID":19,"preset":"laya/pages/prefab/View.prefab"},
258 "nodeParent":10, 258 "nodeParent":10,
259 "label":"Box(View)", 259 "label":"Box(View)",
260 "isOpen":true, 260 "isOpen":true,
@@ -266,6 +266,66 @@ @@ -266,6 +266,66 @@
266 { 266 {
267 "x":30, 267 "x":30,
268 "type":"Button", 268 "type":"Button",
  269 + "searchKey":"Button,btnPreFull",
  270 + "props":{"y":279,"x":-21,"width":240,"var":"btnPreFull","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":39,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"预加载全屏","anchorY":0.5,"anchorX":0.5},
  271 + "nodeParent":25,
  272 + "label":"btnPreFull",
  273 + "isOpen":false,
  274 + "isDirectory":true,
  275 + "isAniNode":true,
  276 + "hasChild":true,
  277 + "compId":48,
  278 + "child":[
  279 + {
  280 + "type":"Script",
  281 + "switchAble":true,
  282 + "source":"src/uitl/ScaleButtonScript.ts",
  283 + "searchKey":"Script,ScaleButtonScript",
  284 + "removeAble":true,
  285 + "props":{"presetID":40,"preset":"laya/pages/prefab/View.prefab"},
  286 + "nodeParent":48,
  287 + "label":"ScaleButtonScript",
  288 + "isDirectory":false,
  289 + "isAniNode":true,
  290 + "hasChild":false,
  291 + "compId":49,
  292 + "child":[
  293 + ]
  294 + }]
  295 + },
  296 + {
  297 + "x":30,
  298 + "type":"Button",
  299 + "searchKey":"Button,btnPreNative",
  300 + "props":{"y":189,"x":-21,"width":240,"var":"btnPreNative","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":37,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"预加载信息流","anchorY":0.5,"anchorX":0.5},
  301 + "nodeParent":25,
  302 + "label":"btnPreNative",
  303 + "isOpen":false,
  304 + "isDirectory":true,
  305 + "isAniNode":true,
  306 + "hasChild":true,
  307 + "compId":46,
  308 + "child":[
  309 + {
  310 + "type":"Script",
  311 + "switchAble":true,
  312 + "source":"src/uitl/ScaleButtonScript.ts",
  313 + "searchKey":"Script,ScaleButtonScript",
  314 + "removeAble":true,
  315 + "props":{"presetID":38,"preset":"laya/pages/prefab/View.prefab"},
  316 + "nodeParent":46,
  317 + "label":"ScaleButtonScript",
  318 + "isDirectory":false,
  319 + "isAniNode":true,
  320 + "hasChild":false,
  321 + "compId":47,
  322 + "child":[
  323 + ]
  324 + }]
  325 + },
  326 + {
  327 + "x":30,
  328 + "type":"Button",
269 "searchKey":"Button,btnPreloadAD", 329 "searchKey":"Button,btnPreloadAD",
270 "props":{"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":13,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5}, 330 "props":{"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":13,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5},
271 "nodeParent":25, 331 "nodeParent":25,
@@ -296,18 +356,47 @@ @@ -296,18 +356,47 @@
296 { 356 {
297 "x":30, 357 "x":30,
298 "type":"Button", 358 "type":"Button",
  359 + "searchKey":"Button,btnCloseBanner",
  360 + "props":{"y":87,"x":402,"width":200,"var":"btnCloseBanner","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":47,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"关闭banner","anchorY":0.5,"anchorX":0.5},
  361 + "nodeParent":25,
  362 + "label":"btnCloseBanner",
  363 + "isOpen":false,
  364 + "isDirectory":true,
  365 + "isAniNode":true,
  366 + "hasChild":true,
  367 + "compId":56,
  368 + "child":[
  369 + {
  370 + "type":"Script",
  371 + "switchAble":true,
  372 + "source":"src/uitl/ScaleButtonScript.ts",
  373 + "searchKey":"Script,ScaleButtonScript",
  374 + "removeAble":true,
  375 + "props":{"presetID":48,"preset":"laya/pages/prefab/View.prefab"},
  376 + "nodeParent":56,
  377 + "label":"ScaleButtonScript",
  378 + "isDirectory":false,
  379 + "isAniNode":true,
  380 + "hasChild":false,
  381 + "compId":57,
  382 + "child":[
  383 + ]
  384 + }]
  385 + },
  386 + {
  387 + "x":30,
  388 + "type":"Button",
299 "searchKey":"Button,btnShowBanner", 389 "searchKey":"Button,btnShowBanner",
300 - "props":{"y":87,"x":282,"width":240,"var":"btnShowBanner","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":14,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5}, 390 + "props":{"y":87,"x":200,"width":200,"var":"btnShowBanner","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":14,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5},
301 "nodeParent":25, 391 "nodeParent":25,
302 "label":"btnShowBanner", 392 "label":"btnShowBanner",
303 - "isOpen":true, 393 + "isOpen":false,
304 "isDirectory":true, 394 "isDirectory":true,
305 "isAniNode":true, 395 "isAniNode":true,
306 "hasChild":true, 396 "hasChild":true,
307 "compId":18, 397 "compId":18,
308 "child":[ 398 "child":[
309 { 399 {
310 - "x":45,  
311 "type":"Script", 400 "type":"Script",
312 "switchAble":true, 401 "switchAble":true,
313 "source":"src/uitl/ScaleButtonScript.ts", 402 "source":"src/uitl/ScaleButtonScript.ts",
@@ -328,17 +417,16 @@ @@ -328,17 +417,16 @@
328 "x":30, 417 "x":30,
329 "type":"Button", 418 "type":"Button",
330 "searchKey":"Button,btnShowFullAd", 419 "searchKey":"Button,btnShowFullAd",
331 - "props":{"y":189,"x":-21,"width":240,"var":"btnShowFullAd","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":15,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5}, 420 + "props":{"y":279,"x":313,"width":240,"var":"btnShowFullAd","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":15,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5},
332 "nodeParent":25, 421 "nodeParent":25,
333 "label":"btnShowFullAd", 422 "label":"btnShowFullAd",
334 - "isOpen":true, 423 + "isOpen":false,
335 "isDirectory":true, 424 "isDirectory":true,
336 "isAniNode":true, 425 "isAniNode":true,
337 "hasChild":true, 426 "hasChild":true,
338 "compId":20, 427 "compId":20,
339 "child":[ 428 "child":[
340 { 429 {
341 - "x":45,  
342 "type":"Script", 430 "type":"Script",
343 "switchAble":true, 431 "switchAble":true,
344 "source":"src/uitl/ScaleButtonScript.ts", 432 "source":"src/uitl/ScaleButtonScript.ts",
@@ -358,18 +446,47 @@ @@ -358,18 +446,47 @@
358 { 446 {
359 "x":30, 447 "x":30,
360 "type":"Button", 448 "type":"Button",
  449 + "searchKey":"Button,btnCloseNative",
  450 + "props":{"y":189,"x":405,"width":200,"var":"btnCloseNative","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":45,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"关闭信息流","anchorY":0.5,"anchorX":0.5},
  451 + "nodeParent":25,
  452 + "label":"btnCloseNative",
  453 + "isOpen":false,
  454 + "isDirectory":true,
  455 + "isAniNode":true,
  456 + "hasChild":true,
  457 + "compId":54,
  458 + "child":[
  459 + {
  460 + "type":"Script",
  461 + "switchAble":true,
  462 + "source":"src/uitl/ScaleButtonScript.ts",
  463 + "searchKey":"Script,ScaleButtonScript",
  464 + "removeAble":true,
  465 + "props":{"presetID":46,"preset":"laya/pages/prefab/View.prefab"},
  466 + "nodeParent":54,
  467 + "label":"ScaleButtonScript",
  468 + "isDirectory":false,
  469 + "isAniNode":true,
  470 + "hasChild":false,
  471 + "compId":55,
  472 + "child":[
  473 + ]
  474 + }]
  475 + },
  476 + {
  477 + "x":30,
  478 + "type":"Button",
361 "searchKey":"Button,btnShowNativeAd", 479 "searchKey":"Button,btnShowNativeAd",
362 - "props":{"y":189,"x":282,"width":240,"var":"btnShowNativeAd","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":16,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5}, 480 + "props":{"y":189,"x":205,"width":200,"var":"btnShowNativeAd","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":16,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5},
363 "nodeParent":25, 481 "nodeParent":25,
364 "label":"btnShowNativeAd", 482 "label":"btnShowNativeAd",
365 - "isOpen":true, 483 + "isOpen":false,
366 "isDirectory":true, 484 "isDirectory":true,
367 "isAniNode":true, 485 "isAniNode":true,
368 "hasChild":true, 486 "hasChild":true,
369 "compId":21, 487 "compId":21,
370 "child":[ 488 "child":[
371 { 489 {
372 - "x":45,  
373 "type":"Script", 490 "type":"Script",
374 "switchAble":true, 491 "switchAble":true,
375 "source":"src/uitl/ScaleButtonScript.ts", 492 "source":"src/uitl/ScaleButtonScript.ts",
@@ -390,17 +507,16 @@ @@ -390,17 +507,16 @@
390 "x":30, 507 "x":30,
391 "type":"Button", 508 "type":"Button",
392 "searchKey":"Button,btnShowInterAd", 509 "searchKey":"Button,btnShowInterAd",
393 - "props":{"width":240,"var":"btnShowInterAd","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":17,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示插屏广告","centerY":124,"centerX":-256,"anchorY":0.5,"anchorX":0.5}, 510 + "props":{"width":240,"var":"btnShowInterAd","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":17,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示插屏广告","centerY":105,"centerX":18,"anchorY":0.5,"anchorX":0.5},
394 "nodeParent":25, 511 "nodeParent":25,
395 "label":"btnShowInterAd", 512 "label":"btnShowInterAd",
396 - "isOpen":true, 513 + "isOpen":false,
397 "isDirectory":true, 514 "isDirectory":true,
398 "isAniNode":true, 515 "isAniNode":true,
399 "hasChild":true, 516 "hasChild":true,
400 "compId":22, 517 "compId":22,
401 "child":[ 518 "child":[
402 { 519 {
403 - "x":45,  
404 "type":"Script", 520 "type":"Script",
405 "switchAble":true, 521 "switchAble":true,
406 "source":"src/uitl/ScaleButtonScript.ts", 522 "source":"src/uitl/ScaleButtonScript.ts",
@@ -421,7 +537,7 @@ @@ -421,7 +537,7 @@
421 "x":30, 537 "x":30,
422 "type":"Button", 538 "type":"Button",
423 "searchKey":"Button,btnRewardAd", 539 "searchKey":"Button,btnRewardAd",
424 - "props":{"width":240,"var":"btnRewardAd","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":22,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示激励广告","centerY":124,"centerX":17,"anchorY":0.5,"anchorX":0.5}, 540 + "props":{"width":240,"var":"btnRewardAd","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":22,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"显示激励广告","centerY":200,"centerX":23,"anchorY":0.5,"anchorX":0.5},
425 "nodeParent":25, 541 "nodeParent":25,
426 "label":"btnRewardAd", 542 "label":"btnRewardAd",
427 "isOpen":null, 543 "isOpen":null,
@@ -450,8 +566,53 @@ @@ -450,8 +566,53 @@
450 { 566 {
451 "x":30, 567 "x":30,
452 "type":"Button", 568 "type":"Button",
  569 + "searchKey":"Button,btnMinWithDrawal",
  570 + "props":{"y":-43,"x":366,"width":200,"var":"btnMinWithDrawal","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":49,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"最低提档","anchorY":0.5,"anchorX":0.5},
  571 + "nodeParent":25,
  572 + "label":"btnMinWithDrawal",
  573 + "isOpen":true,
  574 + "isDirectory":true,
  575 + "isAniNode":true,
  576 + "hasChild":true,
  577 + "compId":58,
  578 + "child":[
  579 + {
  580 + "x":45,
  581 + "type":"Script",
  582 + "switchAble":true,
  583 + "source":"src/uitl/ScaleButtonScript.ts",
  584 + "searchKey":"Script,ScaleButtonScript",
  585 + "removeAble":true,
  586 + "props":{"presetID":50,"preset":"laya/pages/prefab/View.prefab"},
  587 + "nodeParent":58,
  588 + "label":"ScaleButtonScript",
  589 + "isDirectory":false,
  590 + "isAniNode":true,
  591 + "hasChild":false,
  592 + "compId":59,
  593 + "child":[
  594 + ]
  595 + },
  596 + {
  597 + "x":45,
  598 + "type":"Label",
  599 + "searchKey":"Label,minWithDrawalLab",
  600 + "props":{"y":-22,"x":36,"width":22,"var":"minWithDrawalLab","text":"0","rotation":-4,"presetID":51,"preset":"laya/pages/prefab/View.prefab","pivotY":11,"pivotX":11,"height":22,"fontSize":20,"color":"#eedbda"},
  601 + "nodeParent":58,
  602 + "label":"minWithDrawalLab",
  603 + "isDirectory":false,
  604 + "isAniNode":true,
  605 + "hasChild":false,
  606 + "compId":60,
  607 + "child":[
  608 + ]
  609 + }]
  610 + },
  611 + {
  612 + "x":30,
  613 + "type":"Button",
453 "searchKey":"Button,btnRedpacket", 614 "searchKey":"Button,btnRedpacket",
454 - "props":{"y":-59,"x":219,"width":240,"var":"btnRedpacket","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":25,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5}, 615 + "props":{"y":-43,"x":169,"width":180,"var":"btnRedpacket","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":25,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5},
455 "nodeParent":25, 616 "nodeParent":25,
456 "label":"btnRedpacket", 617 "label":"btnRedpacket",
457 "isOpen":true, 618 "isOpen":true,
@@ -477,6 +638,66 @@ @@ -477,6 +638,66 @@
477 "child":[ 638 "child":[
478 ] 639 ]
479 }] 640 }]
  641 + },
  642 + {
  643 + "x":30,
  644 + "type":"Button",
  645 + "searchKey":"Button,btnPreInsert",
  646 + "props":{"y":375,"x":-21,"width":240,"var":"btnPreInsert","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":41,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"预加载插屏","anchorY":0.5,"anchorX":0.5},
  647 + "nodeParent":25,
  648 + "label":"btnPreInsert",
  649 + "isOpen":false,
  650 + "isDirectory":true,
  651 + "isAniNode":true,
  652 + "hasChild":true,
  653 + "compId":50,
  654 + "child":[
  655 + {
  656 + "type":"Script",
  657 + "switchAble":true,
  658 + "source":"src/uitl/ScaleButtonScript.ts",
  659 + "searchKey":"Script,ScaleButtonScript",
  660 + "removeAble":true,
  661 + "props":{"presetID":42,"preset":"laya/pages/prefab/View.prefab"},
  662 + "nodeParent":50,
  663 + "label":"ScaleButtonScript",
  664 + "isDirectory":false,
  665 + "isAniNode":true,
  666 + "hasChild":false,
  667 + "compId":51,
  668 + "child":[
  669 + ]
  670 + }]
  671 + },
  672 + {
  673 + "x":30,
  674 + "type":"Button",
  675 + "searchKey":"Button,btnPreVideo",
  676 + "props":{"y":470,"x":-21,"width":240,"var":"btnPreVideo","stateNum":"1","skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":43,"preset":"laya/pages/prefab/View.prefab","labelSize":30,"label":"预加载激励","anchorY":0.5,"anchorX":0.5},
  677 + "nodeParent":25,
  678 + "label":"btnPreVideo",
  679 + "isOpen":false,
  680 + "isDirectory":true,
  681 + "isAniNode":true,
  682 + "hasChild":true,
  683 + "compId":52,
  684 + "child":[
  685 + {
  686 + "type":"Script",
  687 + "switchAble":true,
  688 + "source":"src/uitl/ScaleButtonScript.ts",
  689 + "searchKey":"Script,ScaleButtonScript",
  690 + "removeAble":true,
  691 + "props":{"presetID":44,"preset":"laya/pages/prefab/View.prefab"},
  692 + "nodeParent":52,
  693 + "label":"ScaleButtonScript",
  694 + "isDirectory":false,
  695 + "isAniNode":true,
  696 + "hasChild":false,
  697 + "compId":53,
  698 + "child":[
  699 + ]
  700 + }]
480 }] 701 }]
481 }, 702 },
482 { 703 {
@@ -486,7 +707,7 @@ @@ -486,7 +707,7 @@
486 "props":{"y":773,"x":75,"width":600,"var":"NativeAD","presetID":18,"preset":"laya/pages/prefab/View.prefab","height":300}, 707 "props":{"y":773,"x":75,"width":600,"var":"NativeAD","presetID":18,"preset":"laya/pages/prefab/View.prefab","height":300},
487 "nodeParent":10, 708 "nodeParent":10,
488 "label":"NativeAD", 709 "label":"NativeAD",
489 - "isOpen":null, 710 + "isOpen":false,
490 "isDirectory":true, 711 "isDirectory":true,
491 "isAniNode":true, 712 "isAniNode":true,
492 "hasChild":true, 713 "hasChild":true,
@@ -507,7 +728,8 @@ @@ -507,7 +728,8 @@
507 "compId":27, 728 "compId":27,
508 "child":[ 729 "child":[
509 ] 730 ]
510 - }] 731 + }],
  732 + "$HIDDEN":false
511 }], 733 }],
512 "animations":[ 734 "animations":[
513 { 735 {
puchi_laya/release/.DS_Store
No preview for this file type
puchi_laya/release/web/TestScene.json
1 -{"type":"Scene","props":{"width":750,"runtime":"TestScene.ts","height":1624},"compId":1,"child":[{"type":"Sprite","props":{"y":0,"x":0,"texture":"local/bg.png","name":"bg"},"compId":24},{"type":"View","props":{"width":750,"presetID":1,"height":1334,"centerY":0,"centerX":0,"y":0,"x":0,"isPresetRoot":true},"compId":70,"child":[{"type":"Box","props":{"presetID":2,"y":37,"x":0,"width":150,"height":60},"compId":4,"child":[{"type":"Sprite","props":{"presetID":3,"y":0,"x":73,"var":"btnInvite","texture":"common/btnInvite.png","pivotY":0.5,"pivotX":50},"compId":5,"child":[{"type":"Script","props":{"presetID":29,"runtime":"uitl/ScaleButtonScript.ts"},"compId":76}]},{"type":"Button","props":{"presetID":4,"y":49,"x":180,"var":"btnServer","stateNum":1,"skin":"common/btn_serve(1).png","anchorY":0.5,"anchorX":0.5},"compId":7,"child":[{"type":"Script","props":{"presetID":30,"runtime":"uitl/ScaleButtonScript.ts"},"compId":77}]},{"type":"Button","props":{"presetID":5,"y":49,"x":331,"var":"btnVibrate","stateNum":1,"skin":"common/btn_vibrate_on.png","anchorY":0.5,"anchorX":0.5},"compId":8,"child":[{"type":"Script","props":{"presetID":31,"runtime":"uitl/ScaleButtonScript.ts"},"compId":78}]},{"type":"Button","props":{"presetID":6,"y":49,"x":465,"var":"btn_shake","stateNum":1,"skin":"common/btn_yao.png","anchorY":0.5,"anchorX":0.5},"compId":15,"child":[{"type":"Script","props":{"presetID":32,"runtime":"uitl/ScaleButtonScript.ts"},"compId":79}]}]},{"type":"Box","props":{"presetID":7,"y":176,"x":48,"name":"coin"},"compId":9,"child":[{"type":"Image","props":{"presetID":8,"skin":"common/img_coin_bg.png"},"compId":11},{"type":"Sprite","props":{"presetID":9,"y":-6,"x":-24,"texture":"common/icon_coin.png"},"compId":12},{"type":"Label","props":{"presetID":10,"y":12,"x":85.04541015625,"text":"0","fontSize":34,"color":"#171515"},"compId":13},{"type":"Button","props":{"presetID":11,"y":0,"x":156,"var":"btnDrawal","stateNum":1,"skin":"common/btn_drawal.png"},"compId":14},{"type":"Script","props":{"presetID":23,"tiplab":"@node:30","coinlab":"@node:13","runtime":"RedDrawal.ts"},"compId":72},{"type":"Label","props":{"presetID":24,"y":79,"x":85.04541015625,"text":"0","fontSize":34,"color":"#9c7b7b"},"compId":73}]},{"type":"Box","props":{"presetID":19,"y":261,"x":242},"compId":25,"child":[{"type":"Button","props":{"presetID":13,"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5},"compId":16,"child":[{"type":"Script","props":{"presetID":26,"runtime":"uitl/ScaleButtonScript.ts"},"compId":75}]},{"type":"Button","props":{"presetID":14,"y":87,"x":282,"width":240,"var":"btnShowBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5},"compId":18,"child":[{"type":"Script","props":{"presetID":27,"runtime":"uitl/ScaleButtonScript.ts"},"compId":80}]},{"type":"Button","props":{"presetID":15,"y":189,"x":-21,"width":240,"var":"btnShowFullAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5},"compId":20,"child":[{"type":"Script","props":{"presetID":28,"runtime":"uitl/ScaleButtonScript.ts"},"compId":81}]},{"type":"Button","props":{"presetID":16,"y":189,"x":282,"width":240,"var":"btnShowNativeAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5},"compId":21,"child":[{"type":"Script","props":{"presetID":33,"runtime":"uitl/ScaleButtonScript.ts"},"compId":82}]},{"type":"Button","props":{"presetID":17,"width":240,"var":"btnShowInterAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示插屏广告","centerY":124,"centerX":-256,"anchorY":0.5,"anchorX":0.5},"compId":22,"child":[{"type":"Script","props":{"presetID":34,"runtime":"uitl/ScaleButtonScript.ts"},"compId":83}]},{"type":"Button","props":{"presetID":22,"width":240,"var":"btnRewardAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示激励广告","centerY":124,"centerX":17,"anchorY":0.5,"anchorX":0.5},"compId":71,"child":[{"type":"Script","props":{"presetID":35,"runtime":"uitl/ScaleButtonScript.ts"},"compId":84}]},{"type":"Button","props":{"presetID":25,"y":-59,"x":219,"width":240,"var":"btnRedpacket","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5},"compId":74,"child":[{"type":"Script","props":{"presetID":36,"runtime":"uitl/ScaleButtonScript.ts"},"compId":85}]}]},{"type":"View","props":{"presetID":18,"y":773,"x":75,"width":600,"var":"NativeAD","height":300},"compId":23,"child":[{"type":"Script","props":{"presetID":21,"runtime":"sdk/NativeAd.ts"},"compId":27}]}]}],"loadList":["local/bg.png","prefab/View.prefab"],"loadList3D":[]}  
2 \ No newline at end of file 1 \ No newline at end of file
  2 +{"type":"Scene","props":{"width":750,"runtime":"TestScene.ts","height":1624},"compId":1,"child":[{"type":"Sprite","props":{"y":0,"x":0,"texture":"local/bg.png","name":"bg"},"compId":24},{"type":"View","props":{"presetID":1,"y":0,"x":0,"width":750,"isPresetRoot":true,"height":1334,"centerY":0,"centerX":0},"compId":86,"child":[{"type":"Box","props":{"presetID":2,"y":37,"x":0,"width":150,"height":60},"compId":4,"child":[{"type":"Sprite","props":{"presetID":3,"y":0,"x":73,"var":"btnInvite","texture":"common/btnInvite.png","pivotY":0.5,"pivotX":50},"compId":5,"child":[{"type":"Script","props":{"presetID":29,"runtime":"uitl/ScaleButtonScript.ts"},"compId":35}]},{"type":"Button","props":{"presetID":4,"y":49,"x":180,"var":"btnServer","stateNum":1,"skin":"common/btn_serve(1).png","anchorY":0.5,"anchorX":0.5},"compId":7,"child":[{"type":"Script","props":{"presetID":30,"runtime":"uitl/ScaleButtonScript.ts"},"compId":36}]},{"type":"Button","props":{"presetID":5,"y":49,"x":331,"var":"btnVibrate","stateNum":1,"skin":"common/btn_vibrate_on.png","anchorY":0.5,"anchorX":0.5},"compId":8,"child":[{"type":"Script","props":{"presetID":31,"runtime":"uitl/ScaleButtonScript.ts"},"compId":37}]},{"type":"Button","props":{"presetID":6,"y":49,"x":465,"var":"btn_shake","stateNum":1,"skin":"common/btn_yao.png","anchorY":0.5,"anchorX":0.5},"compId":15,"child":[{"type":"Script","props":{"presetID":32,"runtime":"uitl/ScaleButtonScript.ts"},"compId":38}]}]},{"type":"Box","props":{"presetID":7,"y":176,"x":48,"name":"coin"},"compId":9,"child":[{"type":"Image","props":{"presetID":8,"skin":"common/img_coin_bg.png"},"compId":11},{"type":"Label","props":{"presetID":24,"y":79,"x":85.04541015625,"text":"0","fontSize":34,"color":"#9c7b7b"},"compId":30},{"type":"Sprite","props":{"presetID":9,"y":-6,"x":-24,"texture":"common/icon_coin.png"},"compId":12},{"type":"Label","props":{"presetID":10,"y":29,"x":88,"text":"0","fontSize":34,"color":"#171515","anchorY":0.5,"anchorX":0.5},"compId":13},{"type":"Button","props":{"presetID":11,"y":0,"x":156,"var":"btnDrawal","stateNum":1,"skin":"common/btn_drawal.png"},"compId":14},{"type":"Script","props":{"presetID":23,"tiplab":"@node:30","coinlab":"@node:13","runtime":"RedDrawal.ts"},"compId":29}]},{"type":"Box","props":{"presetID":19,"y":250,"x":218},"compId":25,"child":[{"type":"Button","props":{"presetID":13,"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5},"compId":16,"child":[{"type":"Script","props":{"presetID":26,"runtime":"uitl/ScaleButtonScript.ts"},"compId":32}]},{"type":"Button","props":{"presetID":14,"y":87,"x":200,"width":200,"var":"btnShowBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5},"compId":18,"child":[{"type":"Script","props":{"presetID":27,"runtime":"uitl/ScaleButtonScript.ts"},"compId":33}]},{"type":"Button","props":{"presetID":15,"y":279,"x":313,"width":240,"var":"btnShowFullAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5},"compId":20,"child":[{"type":"Script","props":{"presetID":28,"runtime":"uitl/ScaleButtonScript.ts"},"compId":34}]},{"type":"Button","props":{"presetID":16,"y":189,"x":205,"width":200,"var":"btnShowNativeAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5},"compId":21,"child":[{"type":"Script","props":{"presetID":33,"runtime":"uitl/ScaleButtonScript.ts"},"compId":39}]},{"type":"Button","props":{"y":297,"x":-21,"presetID":17,"width":240,"var":"btnShowInterAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示插屏广告","centerY":105,"centerX":18,"anchorY":0.5,"anchorX":0.5},"compId":22,"child":[{"type":"Script","props":{"presetID":34,"runtime":"uitl/ScaleButtonScript.ts"},"compId":40}]},{"type":"Button","props":{"y":286,"x":282,"presetID":22,"width":240,"var":"btnRewardAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"显示激励广告","centerY":200,"centerX":23,"anchorY":0.5,"anchorX":0.5},"compId":28,"child":[{"type":"Script","props":{"presetID":35,"runtime":"uitl/ScaleButtonScript.ts"},"compId":41}]},{"type":"Button","props":{"presetID":25,"y":-43,"x":169,"width":180,"var":"btnRedpacket","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5},"compId":31,"child":[{"type":"Script","props":{"presetID":36,"runtime":"uitl/ScaleButtonScript.ts"},"compId":42}]},{"type":"Button","props":{"presetID":37,"y":189,"x":-21,"width":240,"var":"btnPreNative","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载信息流","anchorY":0.5,"anchorX":0.5},"compId":87,"child":[{"type":"Script","props":{"presetID":38,"runtime":"uitl/ScaleButtonScript.ts"},"compId":88}]},{"type":"Button","props":{"presetID":39,"y":279,"x":-21,"width":240,"var":"btnPreFull","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载全屏","anchorY":0.5,"anchorX":0.5},"compId":89,"child":[{"type":"Script","props":{"presetID":40,"runtime":"uitl/ScaleButtonScript.ts"},"compId":90}]},{"type":"Button","props":{"presetID":41,"y":375,"x":-21,"width":240,"var":"btnPreInsert","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载插屏","anchorY":0.5,"anchorX":0.5},"compId":91,"child":[{"type":"Script","props":{"presetID":42,"runtime":"uitl/ScaleButtonScript.ts"},"compId":92}]},{"type":"Button","props":{"presetID":43,"y":470,"x":-21,"width":240,"var":"btnPreVideo","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"预加载激励","anchorY":0.5,"anchorX":0.5},"compId":93,"child":[{"type":"Script","props":{"presetID":44,"runtime":"uitl/ScaleButtonScript.ts"},"compId":94}]},{"type":"Button","props":{"presetID":45,"y":189,"x":405,"width":200,"var":"btnCloseNative","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"labelSize":30,"label":"关闭信息流","anchorY":0.5,"anchorX":0.5},"compId":95,"child":[{"type":"Script","props":{"presetID":46,"runtime":"uitl/ScaleButtonScript.ts"},"compId":96}]},{"type":"Button","props":{"presetID":47,"y":87,"x":402,"width":200,"var":"btnCloseBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"labelSize":30,"label":"关闭banner","anchorY":0.5,"anchorX":0.5},"compId":97,"child":[{"type":"Script","props":{"presetID":48,"runtime":"uitl/ScaleButtonScript.ts"},"compId":98}]},{"type":"Button","props":{"presetID":49,"y":-43,"x":366,"width":200,"var":"btnMinWithDrawal","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","labelSize":30,"label":"最低提档","anchorY":0.5,"anchorX":0.5},"compId":99,"child":[{"type":"Script","props":{"presetID":50,"runtime":"uitl/ScaleButtonScript.ts"},"compId":100},{"type":"Label","props":{"presetID":51,"y":-22,"x":36,"width":22,"var":"minWithDrawalLab","text":"0","rotation":-4,"pivotY":11,"pivotX":11,"height":22,"fontSize":20,"color":"#eedbda"},"compId":101}]}]},{"type":"View","props":{"presetID":18,"y":773,"x":75,"width":600,"var":"NativeAD","height":300},"compId":23,"child":[{"type":"Script","props":{"presetID":21,"runtime":"sdk/NativeAd.ts"},"compId":27}]}]}],"loadList":["local/bg.png","prefab/View.prefab"],"loadList3D":[]}
3 \ No newline at end of file 3 \ No newline at end of file
puchi_laya/release/web/js/bundle.js
@@ -46,14 +46,14 @@ var GameConfig = /** @class */ (function () { @@ -46,14 +46,14 @@ var GameConfig = /** @class */ (function () {
46 exports.default = GameConfig; 46 exports.default = GameConfig;
47 GameConfig.init(); 47 GameConfig.init();
48 48
49 -},{"./RedDrawal":3,"./TestScene":4,"./sdk/NativeAd":12,"./uitl/ScaleButtonScript":26}],2:[function(require,module,exports){ 49 +},{"./RedDrawal":3,"./TestScene":4,"./sdk/NativeAd":8,"./uitl/ScaleButtonScript":20}],2:[function(require,module,exports){
50 "use strict"; 50 "use strict";
51 Object.defineProperty(exports, "__esModule", { value: true }); 51 Object.defineProperty(exports, "__esModule", { value: true });
52 var GameConfig_1 = require("./GameConfig"); 52 var GameConfig_1 = require("./GameConfig");
53 var AdManager_1 = require("./sdk/AdManager"); 53 var AdManager_1 = require("./sdk/AdManager");
54 -var AppSdk_1 = require("./sdk/AppSdk");  
55 -var RedpacketModel_1 = require("./sdk/model/RedpacketModel");  
56 var ShakeModel_1 = require("./sdk/model/ShakeModel"); 54 var ShakeModel_1 = require("./sdk/model/ShakeModel");
  55 +var PcSdk_1 = require("./sdk/PcSdk");
  56 +var RedpacketModel_1 = require("./sdk/model/RedpacketModel");
57 var Main = /** @class */ (function () { 57 var Main = /** @class */ (function () {
58 function Main() { 58 function Main() {
59 //根据IDE设置初始化引擎 59 //根据IDE设置初始化引擎
@@ -96,20 +96,21 @@ var Main = /** @class */ (function () { @@ -96,20 +96,21 @@ var Main = /** @class */ (function () {
96 switch (_a.label) { 96 switch (_a.label) {
97 case 0: 97 case 0:
98 /**隐藏启动屏 */ 98 /**隐藏启动屏 */
99 - AppSdk_1.AppSdk.I.hideSplash(); 99 + PcSdk_1.default.I.hideSplash();
100 /**初始化adk 获取app配置信息 */ 100 /**初始化adk 获取app配置信息 */
101 - AppSdk_1.AppSdk.I.init(); 101 + PcSdk_1.default.I.init();
102 /**预加载视频 */ 102 /**预加载视频 */
103 AdManager_1.default.I.init(); 103 AdManager_1.default.I.init();
104 - /**获取红包配置 初始化数据 */  
105 - return [4 /*yield*/, RedpacketModel_1.default.I.init()]; 104 + /**获取红包配置 摇一摇 等静态数据 */
  105 + return [4 /*yield*/, PcSdk_1.default.I.initGameConfig()];
106 case 1: 106 case 1:
107 - /**获取红包配置 初始化数据 */ 107 + /**获取红包配置 摇一摇 等静态数据 */
108 _a.sent(); 108 _a.sent();
109 - /**初始化摇一摇的数据 */  
110 - return [4 /*yield*/, ShakeModel_1.default.I.init()]; 109 + return [4 /*yield*/, RedpacketModel_1.default.I.init()];
111 case 2: 110 case 2:
112 - /**初始化摇一摇的数据 */ 111 + _a.sent();
  112 + return [4 /*yield*/, ShakeModel_1.default.I.init()];
  113 + case 3:
113 _a.sent(); 114 _a.sent();
114 return [2 /*return*/]; 115 return [2 /*return*/];
115 } 116 }
@@ -121,12 +122,12 @@ var Main = /** @class */ (function () { @@ -121,12 +122,12 @@ var Main = /** @class */ (function () {
121 //激活启动类 122 //激活启动类
122 new Main(); 123 new Main();
123 124
124 -},{"./GameConfig":1,"./sdk/AdManager":7,"./sdk/AppSdk":9,"./sdk/model/RedpacketModel":16,"./sdk/model/ShakeModel":17}],3:[function(require,module,exports){ 125 +},{"./GameConfig":1,"./sdk/AdManager":7,"./sdk/PcSdk":9,"./sdk/model/RedpacketModel":13,"./sdk/model/ShakeModel":14}],3:[function(require,module,exports){
125 "use strict"; 126 "use strict";
126 Object.defineProperty(exports, "__esModule", { value: true }); 127 Object.defineProperty(exports, "__esModule", { value: true });
127 -var RedpacketModel_1 = require("./sdk/model/RedpacketModel");  
128 var EventCenter_1 = require("./event/EventCenter"); 128 var EventCenter_1 = require("./event/EventCenter");
129 var EventEnum_1 = require("./event/EventEnum"); 129 var EventEnum_1 = require("./event/EventEnum");
  130 +var PcSdk_1 = require("./sdk/PcSdk");
130 /** 131 /**
131 * 主界面 金币金额 132 * 主界面 金币金额
132 */ 133 */
@@ -154,14 +155,13 @@ var RedDrawal = /** @class */ (function (_super) { @@ -154,14 +155,13 @@ var RedDrawal = /** @class */ (function (_super) {
154 var coin, str, nextDrawal, leftCoin; 155 var coin, str, nextDrawal, leftCoin;
155 return __generator(this, function (_a) { 156 return __generator(this, function (_a) {
156 switch (_a.label) { 157 switch (_a.label) {
157 - case 0: return [4 /*yield*/, RedpacketModel_1.default.I.getTotalCoin()]; 158 + case 0: return [4 /*yield*/, PcSdk_1.default.I.myCoin()];
158 case 1: 159 case 1:
159 coin = _a.sent(); 160 coin = _a.sent();
160 - // let coin = 1000  
161 this.totalCoin = coin; 161 this.totalCoin = coin;
162 this.coinlab.text = '' + coin; 162 this.coinlab.text = '' + coin;
163 str = '可提现'; 163 str = '可提现';
164 - return [4 /*yield*/, RedpacketModel_1.default.I.minWithDrawal()]; 164 + return [4 /*yield*/, PcSdk_1.default.I.minWithDrawal()];
165 case 2: 165 case 2:
166 nextDrawal = _a.sent(); 166 nextDrawal = _a.sent();
167 if (this.totalCoin > 0) { 167 if (this.totalCoin > 0) {
@@ -180,26 +180,33 @@ var RedDrawal = /** @class */ (function (_super) { @@ -180,26 +180,33 @@ var RedDrawal = /** @class */ (function (_super) {
180 }(Laya.Script)); 180 }(Laya.Script));
181 exports.default = RedDrawal; 181 exports.default = RedDrawal;
182 182
183 -},{"./event/EventCenter":5,"./event/EventEnum":6,"./sdk/model/RedpacketModel":16}],4:[function(require,module,exports){ 183 +},{"./event/EventCenter":5,"./event/EventEnum":6,"./sdk/PcSdk":9}],4:[function(require,module,exports){
184 "use strict"; 184 "use strict";
185 Object.defineProperty(exports, "__esModule", { value: true }); 185 Object.defineProperty(exports, "__esModule", { value: true });
186 var layaMaxUI_1 = require("./ui/layaMaxUI"); 186 var layaMaxUI_1 = require("./ui/layaMaxUI");
187 var AdManager_1 = require("./sdk/AdManager"); 187 var AdManager_1 = require("./sdk/AdManager");
188 -var AppSdk_1 = require("./sdk/AppSdk");  
189 var ShakeModel_1 = require("./sdk/model/ShakeModel"); 188 var ShakeModel_1 = require("./sdk/model/ShakeModel");
190 var RedpacketModel_1 = require("./sdk/model/RedpacketModel"); 189 var RedpacketModel_1 = require("./sdk/model/RedpacketModel");
  190 +var PcSdk_1 = require("./sdk/PcSdk");
  191 +var NativeAd_1 = require("./sdk/NativeAd");
191 var TestScene = /** @class */ (function (_super) { 192 var TestScene = /** @class */ (function (_super) {
192 __extends(TestScene, _super); 193 __extends(TestScene, _super);
193 function TestScene() { 194 function TestScene() {
194 var _this = _super.call(this) || this; 195 var _this = _super.call(this) || this;
  196 + _this.isLongVibrate = false;
195 //关闭多点触控,否则就无敌了 197 //关闭多点触控,否则就无敌了
196 Laya.MouseManager.multiTouchEnabled = false; 198 Laya.MouseManager.multiTouchEnabled = false;
197 console.log('---------------TestScene-------'); 199 console.log('---------------TestScene-------');
198 - _this.NativeAD.visible = false;  
199 return _this; 200 return _this;
  201 + // this.NativeAD.visible = false;
200 } 202 }
201 TestScene.prototype.onEnable = function () { 203 TestScene.prototype.onEnable = function () {
  204 + var _this = this;
202 this.btnServer.on(Laya.Event.CLICK, this, this.openServer); 205 this.btnServer.on(Laya.Event.CLICK, this, this.openServer);
  206 + this.btnVibrate.on(Laya.Event.CLICK, this, function () {
  207 + PcSdk_1.default.I.vibrate(_this.isLongVibrate ? 0 : 1);
  208 + _this.isLongVibrate = !_this.isLongVibrate;
  209 + });
203 this.btnDrawal.on(Laya.Event.CLICK, this, this.openPersonal); 210 this.btnDrawal.on(Laya.Event.CLICK, this, this.openPersonal);
204 this.btnInvite.on(Laya.Event.CLICK, this, this.invitation); 211 this.btnInvite.on(Laya.Event.CLICK, this, this.invitation);
205 this.btn_shake.on(Laya.Event.CLICK, this, this.touchShake); 212 this.btn_shake.on(Laya.Event.CLICK, this, this.touchShake);
@@ -210,35 +217,51 @@ var TestScene = /** @class */ (function (_super) { @@ -210,35 +217,51 @@ var TestScene = /** @class */ (function (_super) {
210 this.btnShowInterAd.on(Laya.Event.CLICK, this, this.showInterAd); 217 this.btnShowInterAd.on(Laya.Event.CLICK, this, this.showInterAd);
211 this.btnRewardAd.on(Laya.Event.CLICK, this, this.showRewardAd); 218 this.btnRewardAd.on(Laya.Event.CLICK, this, this.showRewardAd);
212 this.btnRedpacket.on(Laya.Event.CLICK, this, this.openRedpacket); 219 this.btnRedpacket.on(Laya.Event.CLICK, this, this.openRedpacket);
  220 + this.btnPreVideo.on(Laya.Event.CLICK, this, this.preloadRewardAd);
  221 + this.btnPreFull.on(Laya.Event.CLICK, this, this.preloadFull);
  222 + this.btnPreInsert.on(Laya.Event.CLICK, this, this.preloadInterAd);
  223 + this.btnPreNative.on(Laya.Event.CLICK, this, this.preloadNativeAd);
  224 + this.btnCloseBanner.on(Laya.Event.CLICK, this, this.closeAdBanner);
  225 + this.btnCloseNative.on(Laya.Event.CLICK, this, this.closeAdverDialog);
  226 + this.btnMinWithDrawal.on(Laya.Event.CLICK, this, this.minWithDrawal);
213 }; 227 };
214 /**预加载广告 */ 228 /**预加载广告 */
215 TestScene.prototype.preloadAD = function () { 229 TestScene.prototype.preloadAD = function () {
216 return __awaiter(this, void 0, void 0, function () { 230 return __awaiter(this, void 0, void 0, function () {
217 return __generator(this, function (_a) { 231 return __generator(this, function (_a) {
218 - console.log('---------------preloadAD-------');  
219 - // await AdManager.I.init();  
220 - MyBridge.testReturn(function () {  
221 - var array = [];  
222 - for (var _i = 0; _i < arguments.length; _i++) {  
223 - array[_i] = arguments[_i];  
224 - }  
225 - console.log("-------web--------onClick----->>cocos JS-------MyBridge.testReturn------" + JSON.stringify(array));  
226 - });  
227 - return [2 /*return*/]; 232 + switch (_a.label) {
  233 + case 0:
  234 + console.log('---------------preloadAD-------');
  235 + return [4 /*yield*/, AdManager_1.default.I.preloadBanner()];
  236 + case 1:
  237 + _a.sent();
  238 + return [2 /*return*/];
  239 + }
228 }); 240 });
229 }); 241 });
230 }; 242 };
  243 + TestScene.prototype.preloadRewardAd = function () {
  244 + AdManager_1.default.I.preloadRewardAd();
  245 + };
  246 + TestScene.prototype.preloadFull = function () {
  247 + AdManager_1.default.I.preloadFullAd();
  248 + };
  249 + TestScene.prototype.preloadInterAd = function () {
  250 + AdManager_1.default.I.preloadInterAd();
  251 + };
  252 + TestScene.prototype.preloadNativeAd = function () {
  253 + this.NativeAD.getComponent(NativeAd_1.default).initNativeAd(1);
  254 + };
  255 + TestScene.prototype.closeAdverDialog = function () {
  256 + AdManager_1.default.I.closeAdverDialog();
  257 + };
  258 + TestScene.prototype.closeAdBanner = function () {
  259 + AdManager_1.default.I.closeAdBanner();
  260 + };
231 /**显示全屏广告 */ 261 /**显示全屏广告 */
232 TestScene.prototype.showFullAd = function () { 262 TestScene.prototype.showFullAd = function () {
233 console.log('---------------showFullAd-------'); 263 console.log('---------------showFullAd-------');
234 - // AdManager.I.showFullAd();  
235 - var ret = MyBridge.mapToString({  
236 - data: {  
237 - "count": 2, "title": [{ "name": "nnn", "value": "nnnvalue", "default_show": 1 },  
238 - { "name": "mmm", "value": "mmmvalue\"aasdasd" }]  
239 - }  
240 - });  
241 - console.log("-------web--------onClick----->>cocos JS-------MyBridge.mapToString------" + JSON.stringify(ret)); 264 + AdManager_1.default.I.showFullAd();
242 }; 265 };
243 /**显示banner */ 266 /**显示banner */
244 TestScene.prototype.showBanner = function () { 267 TestScene.prototype.showBanner = function () {
@@ -247,8 +270,7 @@ var TestScene = /** @class */ (function (_super) { @@ -247,8 +270,7 @@ var TestScene = /** @class */ (function (_super) {
247 }; 270 };
248 /**信息流广告 */ 271 /**信息流广告 */
249 TestScene.prototype.showNativeAd = function () { 272 TestScene.prototype.showNativeAd = function () {
250 - console.log('---------------showNativeAd-------');  
251 - this.NativeAD.visible = true; 273 + this.NativeAD.getComponent(NativeAd_1.default).initNativeAd();
252 }; 274 };
253 /**插屏广告 */ 275 /**插屏广告 */
254 TestScene.prototype.showInterAd = function () { 276 TestScene.prototype.showInterAd = function () {
@@ -273,22 +295,38 @@ var TestScene = /** @class */ (function (_super) { @@ -273,22 +295,38 @@ var TestScene = /** @class */ (function (_super) {
273 /**意见反馈 */ 295 /**意见反馈 */
274 TestScene.prototype.openServer = function () { 296 TestScene.prototype.openServer = function () {
275 console.log('---------------openServer-------'); 297 console.log('---------------openServer-------');
276 - AppSdk_1.AppSdk.I.feedback(); 298 + PcSdk_1.default.I.feedback();
277 }; 299 };
278 TestScene.prototype.openRedpacket = function () { 300 TestScene.prototype.openRedpacket = function () {
279 - RedpacketModel_1.default.I.checkRedpacket();  
280 - console.log('红包获取结果:curRedpacket' + RedpacketModel_1.default.I.curRedpacket);  
281 - // console.log('红包获取结果:' + JSON.stringify(data))  
282 - // ViewManager.I.openPopwin(RedpacketPopwin, 0); 301 + return __awaiter(this, void 0, void 0, function () {
  302 + return __generator(this, function (_a) {
  303 + RedpacketModel_1.default.I.checkRedpacket();
  304 + return [2 /*return*/];
  305 + });
  306 + });
  307 + };
  308 + TestScene.prototype.minWithDrawal = function () {
  309 + return __awaiter(this, void 0, void 0, function () {
  310 + var money;
  311 + return __generator(this, function (_a) {
  312 + switch (_a.label) {
  313 + case 0: return [4 /*yield*/, PcSdk_1.default.I.minWithDrawal()];
  314 + case 1:
  315 + money = _a.sent();
  316 + this.minWithDrawalLab.text = '最低提现:' + money;
  317 + return [2 /*return*/];
  318 + }
  319 + });
  320 + });
283 }; 321 };
284 /**打开个人中心 */ 322 /**打开个人中心 */
285 TestScene.prototype.openPersonal = function () { 323 TestScene.prototype.openPersonal = function () {
286 console.log('---------------openServer-------'); 324 console.log('---------------openServer-------');
287 - AppSdk_1.AppSdk.I.personal(0); 325 + PcSdk_1.default.I.personal(0);
288 }; 326 };
289 /**邀请好友 */ 327 /**邀请好友 */
290 TestScene.prototype.invitation = function () { 328 TestScene.prototype.invitation = function () {
291 - AppSdk_1.AppSdk.I.invitation(); 329 + PcSdk_1.default.I.invitation();
292 }; 330 };
293 /** 331 /**
294 * 1 金币 332 * 1 金币
@@ -298,10 +336,7 @@ var TestScene = /** @class */ (function (_super) { @@ -298,10 +336,7 @@ var TestScene = /** @class */ (function (_super) {
298 */ 336 */
299 TestScene.prototype.touchShake = function () { 337 TestScene.prototype.touchShake = function () {
300 console.log('---------------touchShake-------'); 338 console.log('---------------touchShake-------');
301 - // this.skin.btnShakeAni.play(0);  
302 - AppSdk_1.AppSdk.I.vibrate();  
303 - // ViewManager.I.showModal(HintModal, ' 今⽇次数已⽤完,请明⽇再来');  
304 - // this.skin.handAni.stop(); 339 + PcSdk_1.default.I.vibrate();
305 /** 340 /**
306 * 1.回去星星 道具 341 * 1.回去星星 道具
307 * 2.红包 直接获得⾦币;或者直接弹激励视频后,获得⾦币 342 * 2.红包 直接获得⾦币;或者直接弹激励视频后,获得⾦币
@@ -385,7 +420,7 @@ var TestScene = /** @class */ (function (_super) { @@ -385,7 +420,7 @@ var TestScene = /** @class */ (function (_super) {
385 }(layaMaxUI_1.ui.TestSceneUI)); 420 }(layaMaxUI_1.ui.TestSceneUI));
386 exports.default = TestScene; 421 exports.default = TestScene;
387 422
388 -},{"./sdk/AdManager":7,"./sdk/AppSdk":9,"./sdk/model/RedpacketModel":16,"./sdk/model/ShakeModel":17,"./ui/layaMaxUI":21}],5:[function(require,module,exports){ 423 +},{"./sdk/AdManager":7,"./sdk/NativeAd":8,"./sdk/PcSdk":9,"./sdk/model/RedpacketModel":13,"./sdk/model/ShakeModel":14,"./ui/layaMaxUI":15}],5:[function(require,module,exports){
389 "use strict"; 424 "use strict";
390 Object.defineProperty(exports, "__esModule", { value: true }); 425 Object.defineProperty(exports, "__esModule", { value: true });
391 /* 426 /*
@@ -441,9 +476,27 @@ var AdManager = /** @class */ (function () { @@ -441,9 +476,27 @@ var AdManager = /** @class */ (function () {
441 AdManager.prototype.init = function () { 476 AdManager.prototype.init = function () {
442 this.preloadRewardAd(); 477 this.preloadRewardAd();
443 }; 478 };
  479 + AdManager.prototype.preloadBanner = function () {
  480 + TTAdSdk_1.default.I.loadBannerExpressAd(1);
  481 + };
444 AdManager.prototype.preloadRewardAd = function () { 482 AdManager.prototype.preloadRewardAd = function () {
445 TTAdSdk_1.default.I.showRewardVideoAd(1); 483 TTAdSdk_1.default.I.showRewardVideoAd(1);
446 }; 484 };
  485 + AdManager.prototype.preloadFullAd = function () {
  486 + TTAdSdk_1.default.I.loadFullScreenVideoAd(1);
  487 + };
  488 + AdManager.prototype.preloadInterAd = function () {
  489 + TTAdSdk_1.default.I.loadFullScreenVideoAd(1);
  490 + };
  491 + AdManager.prototype.preloadNativeAd = function () {
  492 + // TTAdSdk.I.loadFullScreenVideoAd(1);
  493 + };
  494 + AdManager.prototype.closeAdverDialog = function () {
  495 + TTAdSdk_1.default.I.closeAdverDialog();
  496 + };
  497 + AdManager.prototype.closeAdBanner = function () {
  498 + TTAdSdk_1.default.I.closeAdBanner();
  499 + };
447 AdManager.prototype.showRewardAd = function () { 500 AdManager.prototype.showRewardAd = function () {
448 return __awaiter(this, void 0, void 0, function () { 501 return __awaiter(this, void 0, void 0, function () {
449 var ret, e_1; 502 var ret, e_1;
@@ -466,12 +519,6 @@ var AdManager = /** @class */ (function () { @@ -466,12 +519,6 @@ var AdManager = /** @class */ (function () {
466 }); 519 });
467 }); 520 });
468 }; 521 };
469 - AdManager.prototype.preloadFullAd = function () {  
470 - TTAdSdk_1.default.I.loadFullScreenVideoAd(1);  
471 - };  
472 - AdManager.prototype.preloadInterAd = function () {  
473 - TTAdSdk_1.default.I.loadFullScreenVideoAd(1);  
474 - };  
475 AdManager.prototype.showFullAd = function () { 522 AdManager.prototype.showFullAd = function () {
476 return __awaiter(this, void 0, void 0, function () { 523 return __awaiter(this, void 0, void 0, function () {
477 var ret, e_2; 524 var ret, e_2;
@@ -520,14 +567,9 @@ var AdManager = /** @class */ (function () { @@ -520,14 +567,9 @@ var AdManager = /** @class */ (function () {
520 AdManager.prototype.showBanner = function () { 567 AdManager.prototype.showBanner = function () {
521 TTAdSdk_1.default.I.loadBannerExpressAd(); 568 TTAdSdk_1.default.I.loadBannerExpressAd();
522 }; 569 };
523 - AdManager.prototype.hideBanner = function () {  
524 - TTAdSdk_1.default.I.hideAd();  
525 - };  
526 - AdManager.prototype.showNativeAd = function (x, y, w, h) {  
527 - TTAdSdk_1.default.I.loadNativeExpressAd(x, y, w, h);  
528 - };  
529 - AdManager.prototype.hideNativeAd = function () {  
530 - TTAdSdk_1.default.I.hideAd(); 570 + AdManager.prototype.showNativeAd = function (x, y, w, h, preload) {
  571 + if (preload === void 0) { preload = 0; }
  572 + TTAdSdk_1.default.I.loadNativeExpressAd(x, y, w, h, preload);
531 }; 573 };
532 Object.defineProperty(AdManager, "I", { 574 Object.defineProperty(AdManager, "I", {
533 get: function () { 575 get: function () {
@@ -540,428 +582,346 @@ var AdManager = /** @class */ (function () { @@ -540,428 +582,346 @@ var AdManager = /** @class */ (function () {
540 }()); 582 }());
541 exports.default = AdManager; 583 exports.default = AdManager;
542 584
543 -},{"../uitl/ObjectInstance":24,"./TTAdSdk":13}],8:[function(require,module,exports){ 585 +},{"../uitl/ObjectInstance":18,"./TTAdSdk":10}],8:[function(require,module,exports){
544 "use strict"; 586 "use strict";
545 Object.defineProperty(exports, "__esModule", { value: true }); 587 Object.defineProperty(exports, "__esModule", { value: true });
546 -var BaseAppSdk_1 = require("./BaseAppSdk");  
547 -var AndroidAppSdk = /** @class */ (function (_super) {  
548 - __extends(AndroidAppSdk, _super);  
549 - function AndroidAppSdk() { 588 +var AdManager_1 = require("./AdManager");
  589 +var NativeAd = /** @class */ (function (_super) {
  590 + __extends(NativeAd, _super);
  591 + function NativeAd() {
550 return _super !== null && _super.apply(this, arguments) || this; 592 return _super !== null && _super.apply(this, arguments) || this;
551 } 593 }
552 - Object.defineProperty(AndroidAppSdk.prototype, "system", {  
553 - get: function () {  
554 - return 1;  
555 - },  
556 - enumerable: true,  
557 - configurable: true  
558 - });  
559 - AndroidAppSdk.prototype.callApp = function (cmd) {  
560 - var params = [];  
561 - for (var _i = 1; _i < arguments.length; _i++) {  
562 - params[_i - 1] = arguments[_i];  
563 - }  
564 - var _a;  
565 - this.bridge && (_a = this.bridge).call.apply(_a, [cmd].concat(params));  
566 - // this.bridge && alert(JSON.stringify(this.bridge)); 594 + NativeAd.prototype.initNativeAd = function (preload) {
  595 + if (preload === void 0) { preload = 0; }
  596 + var globalPoint = this.item.localToGlobal(Laya.Point.EMPTY, true);
  597 + AdManager_1.default.I.showNativeAd(globalPoint.x, globalPoint.y, this.item.width, this.item.height, preload);
567 }; 598 };
568 - AndroidAppSdk.prototype.callAppWithBack = function (callBack, cmd) {  
569 - var params = [];  
570 - for (var _i = 2; _i < arguments.length; _i++) {  
571 - params[_i - 2] = arguments[_i];  
572 - }  
573 - var _a;  
574 - this.bridge && (_a = this.bridge).callWithBack.apply(_a, [callBack, cmd].concat(params)); 599 + NativeAd.prototype.onEnable = function () {
  600 + this.initNativeAd();
  601 + };
  602 + NativeAd.prototype.onDisable = function () {
  603 + AdManager_1.default.I.closeAdverDialog();
575 }; 604 };
576 - Object.defineProperty(AndroidAppSdk.prototype, "bridge", { 605 + Object.defineProperty(NativeAd.prototype, "item", {
577 get: function () { 606 get: function () {
578 - return this._bridge || (this._bridge = this.createClass('com.puchi.sdkdemo.JSBridge')); 607 + return this.owner;
579 }, 608 },
580 enumerable: true, 609 enumerable: true,
581 configurable: true 610 configurable: true
582 }); 611 });
583 - return AndroidAppSdk;  
584 -}(BaseAppSdk_1.default));  
585 -exports.default = AndroidAppSdk; 612 + return NativeAd;
  613 +}(Laya.Script));
  614 +exports.default = NativeAd;
586 615
587 -},{"./BaseAppSdk":10}],9:[function(require,module,exports){ 616 +},{"./AdManager":7}],9:[function(require,module,exports){
588 "use strict"; 617 "use strict";
589 Object.defineProperty(exports, "__esModule", { value: true }); 618 Object.defineProperty(exports, "__esModule", { value: true });
590 -var IosAppSdk_1 = require("./IosAppSdk");  
591 -var AndroidAppSdk_1 = require("./AndroidAppSdk");  
592 -var BaseAppSdk_1 = require("./BaseAppSdk");  
593 -var AppSdk = /** @class */ (function () {  
594 - function AppSdk() { 619 +var ObjectInstance_1 = require("../uitl/ObjectInstance");
  620 +var EventCenter_1 = require("../event/EventCenter");
  621 +var EventEnum_1 = require("../event/EventEnum");
  622 +var PcSdk = /** @class */ (function () {
  623 + function PcSdk() {
595 } 624 }
596 - Object.defineProperty(AppSdk, "I", { 625 + PcSdk.prototype.init = function () {
  626 + this.getSystemInfo();
  627 + };
  628 + Object.defineProperty(PcSdk.prototype, "myBridge", {
597 get: function () { 629 get: function () {
598 - if (!this._instance) {  
599 - var conchConfig = window['conchConfig'];  
600 - var os = conchConfig && conchConfig.getOS();  
601 - switch (os) {  
602 - case "Conch-ios":  
603 - this._instance = new IosAppSdk_1.default;  
604 - break;  
605 - case "Conch-android":  
606 - this._instance = new AndroidAppSdk_1.default;  
607 - break;  
608 - default:  
609 - this._instance = new BaseAppSdk_1.default;  
610 - break;  
611 - }  
612 - window['AppSdk'] = this._instance; 630 + if (MyBridge) {
  631 + return MyBridge;
613 } 632 }
614 - return this._instance;  
615 }, 633 },
616 enumerable: true, 634 enumerable: true,
617 configurable: true 635 configurable: true
618 }); 636 });
619 - return AppSdk;  
620 -}());  
621 -exports.AppSdk = AppSdk;  
622 -  
623 -},{"./AndroidAppSdk":8,"./BaseAppSdk":10,"./IosAppSdk":11}],10:[function(require,module,exports){  
624 -"use strict";  
625 -Object.defineProperty(exports, "__esModule", { value: true });  
626 -var AddGoldData_1 = require("./sdkData/AddGoldData");  
627 -var MyCoinData_1 = require("./sdkData/MyCoinData");  
628 -var GoldConfigData_1 = require("./sdkData/GoldConfigData");  
629 -var BaseAppSdk = /** @class */ (function () {  
630 - function BaseAppSdk() {  
631 - this.netOnArr = [];  
632 - this.netOffArr = [];  
633 - }  
634 - BaseAppSdk.prototype.init = function () {  
635 - var conch = window['conch'];  
636 - if (conch) {  
637 - conch.setNetworkEvtFunction(this.networkEvtFunc.bind(this));  
638 - }  
639 - this.callApp('setAppCallback', 1, 'AppSdk.onShow()');  
640 - this.callApp('setAppCallback', 2, 'AppSdk.onHide()');  
641 - this.getSystemInfo(); 637 + /**获取基本版本信息以及手机的配置 */
  638 + PcSdk.prototype.getSystemInfo = function (key) {
  639 + if (key === void 0) { key = 0; }
  640 + var _a;
  641 + var ret = this.myBridge.getSystemInfo(key);
  642 + var _b = JSON.parse(ret), w = _b.w, h = _b.h, versionName = _b.versionName, channel = _b.channel, pangolin = _b.pangolin, adnet = _b.adnet, level = _b.level;
  643 + _a = [w, h, versionName, channel, pangolin, adnet, level], this._width = _a[0], this._height = _a[1], this._version = _a[2], this._channel = _a[3], this.pangolinId = _a[4], this.adnetId = _a[5], this._level = _a[6];
642 }; 644 };
643 - BaseAppSdk.prototype.getSystemInfo = function () {  
644 - var _this = this;  
645 - this.callAppWithBack(function (ret) {  
646 - console.log('---------------getSystemInfo-------' + JSON.stringify(ret));  
647 - var _a = JSON.parse(ret), w = _a.w, h = _a.h, versionName = _a.versionName, channel = _a.channel, pangolin = _a.pangolin, adnet = _a.adnet, level = _a.level;  
648 - _this._width = w;  
649 - _this._height = h;  
650 - _this._version = versionName;  
651 - _this._channel = channel;  
652 - _this.pangolinId = pangolin;  
653 - _this.adnetId = adnet;  
654 - _this._level = level;  
655 - }, 'getSystemInfo', 0);  
656 - };  
657 - BaseAppSdk.prototype.onShow = function () {  
658 - // EventCenter.emit(EventEnum.APP_SHOW);  
659 - };  
660 - BaseAppSdk.prototype.onHide = function () {  
661 - // EventCenter.emit(EventEnum.APP_HIDE);  
662 - };  
663 - BaseAppSdk.prototype.vibrate = function () {  
664 - this.callApp('openSystemFun', 0);  
665 - };  
666 - BaseAppSdk.prototype.hideSplash = function () {  
667 - this.callApp('hideSplash'); 645 + PcSdk.prototype.initGameConfig = function () {
  646 + this._gameConfig = this.getGameConfig();
  647 + };
  648 + /**
  649 + * 震动
  650 + * @param key 0 短震动 1 长震动
  651 + */
  652 + PcSdk.prototype.vibrate = function (key) {
  653 + if (key === void 0) { key = 0; }
  654 + this.myBridge.openSystemFun(key);
  655 + };
  656 + /**隐藏启动屏 */
  657 + PcSdk.prototype.hideSplash = function () {
  658 + this.myBridge.hideSplash();
668 }; 659 };
669 /**弹出提现 */ 660 /**弹出提现 */
670 - BaseAppSdk.prototype.withDrawal = function () {  
671 - this.callApp('withDrawal'); 661 + PcSdk.prototype.withDrawal = function () {
  662 + this.myBridge.withDrawal();
672 }; 663 };
673 /**意见反馈 */ 664 /**意见反馈 */
674 - BaseAppSdk.prototype.feedback = function () {  
675 - this.callApp('feedback'); 665 + PcSdk.prototype.feedback = function () {
  666 + this.myBridge.feedback();
676 }; 667 };
677 /** 668 /**
678 * key 默认0 ,签到 1 669 * key 默认0 ,签到 1
679 */ 670 */
680 - BaseAppSdk.prototype.personal = function (key) { 671 + PcSdk.prototype.personal = function (key) {
681 if (key === void 0) { key = 0; } 672 if (key === void 0) { key = 0; }
682 - this.callApp('personal', key); 673 + this.myBridge.personal(key);
683 }; 674 };
684 /**邀请好友*/ 675 /**邀请好友*/
685 - BaseAppSdk.prototype.invitation = function () {  
686 - this.callApp('invitation');  
687 - };  
688 - BaseAppSdk.prototype.currentShut = function (value) {  
689 - this.callApp('currentShut', value); 676 + PcSdk.prototype.invitation = function () {
  677 + this.myBridge.invitation();
690 }; 678 };
691 /** 679 /**
692 * 获取金币配表 680 * 获取金币配表
693 * @param key 1红包 2 摇一摇红包 681 * @param key 1红包 2 摇一摇红包
694 */ 682 */
695 - BaseAppSdk.prototype.getGameConfig = function (key) {  
696 - if (key === void 0) { key = 1; }  
697 - return __awaiter(this, void 0, void 0, function () {  
698 - var result;  
699 - return __generator(this, function (_a) {  
700 - switch (_a.label) {  
701 - case 0: return [4 /*yield*/, this.onCallBack('getGameConfig', key)];  
702 - case 1:  
703 - result = _a.sent();  
704 - GoldConfigData_1.GoldConfigData.I.initData(result);  
705 - return [2 /*return*/, result];  
706 - }  
707 - });  
708 - }); 683 + PcSdk.prototype.getGameConfig = function () {
  684 + var result = this.myBridge.getGameConfig();
  685 + // console.log('---------------getGameConfig-------' + JSON.stringify(result))
  686 + return JSON.parse(result);
709 }; 687 };
710 /** 688 /**
711 * 要求发放金币 689 * 要求发放金币
712 * @param key 1红包 690 * @param key 1红包
713 */ 691 */
714 - BaseAppSdk.prototype.addGold = function (key) {  
715 - if (key === void 0) { key = 1; } 692 + PcSdk.prototype.addGold = function (key) {
716 return __awaiter(this, void 0, void 0, function () { 693 return __awaiter(this, void 0, void 0, function () {
717 - var result; 694 + var _this = this;
718 return __generator(this, function (_a) { 695 return __generator(this, function (_a) {
719 - switch (_a.label) {  
720 - case 0: return [4 /*yield*/, this.onCallBack('addGold', key)];  
721 - case 1:  
722 - result = _a.sent();  
723 - AddGoldData_1.default.initData(result);  
724 - return [2 /*return*/, result];  
725 - } 696 + return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
  697 + return __generator(this, function (_a) {
  698 + switch (_a.label) {
  699 + case 0: return [4 /*yield*/, this.myBridge.addGold(key, function (res) {
  700 + res = JSON.parse(res);
  701 + var code = res.code, data = res.data, msg = res.msg;
  702 + if ('0' === code || !code) {
  703 + resolve(data);
  704 + }
  705 + else {
  706 + reject(msg);
  707 + }
  708 + })];
  709 + case 1:
  710 + _a.sent();
  711 + return [2 /*return*/];
  712 + }
  713 + });
  714 + }); })];
726 }); 715 });
727 }); 716 });
728 }; 717 };
729 - BaseAppSdk.prototype.myCoin = function () { 718 + /**获取总金币 */
  719 + PcSdk.prototype.myCoin = function () {
730 return __awaiter(this, void 0, void 0, function () { 720 return __awaiter(this, void 0, void 0, function () {
731 - var result; 721 + var _this = this;
732 return __generator(this, function (_a) { 722 return __generator(this, function (_a) {
733 - switch (_a.label) {  
734 - case 0: return [4 /*yield*/, this.onCallBack('myCoin')];  
735 - case 1:  
736 - result = _a.sent();  
737 - MyCoinData_1.default.initData(result);  
738 - return [2 /*return*/, result];  
739 - } 723 + return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
  724 + return __generator(this, function (_a) {
  725 + switch (_a.label) {
  726 + case 0: return [4 /*yield*/, this.myBridge.myCoin(function (res) {
  727 + res = JSON.parse(res);
  728 + var code = res.code, data = res.data, msg = res.msg;
  729 + if ('0' === code || !code) {
  730 + resolve(data['coin']);
  731 + }
  732 + else {
  733 + reject(msg);
  734 + }
  735 + })];
  736 + case 1:
  737 + _a.sent();
  738 + return [2 /*return*/];
  739 + }
  740 + });
  741 + }); })];
740 }); 742 });
741 }); 743 });
742 }; 744 };
743 /**获取当前提现的档位 */ 745 /**获取当前提现的档位 */
744 - BaseAppSdk.prototype.minWithDrawal = function () { 746 + PcSdk.prototype.minWithDrawal = function () {
745 return __awaiter(this, void 0, void 0, function () { 747 return __awaiter(this, void 0, void 0, function () {
746 - var result; 748 + var _this = this;
747 return __generator(this, function (_a) { 749 return __generator(this, function (_a) {
748 - switch (_a.label) {  
749 - case 0: return [4 /*yield*/, this.onCallBack('minWithDrawal')];  
750 - case 1:  
751 - result = _a.sent();  
752 - if (!Boolean(parseInt(result.code + ''))) {  
753 - return [2 /*return*/, parseInt(result.data['money']) * 100];  
754 - }  
755 - return [2 /*return*/, 0];  
756 - } 750 + return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
  751 + return __generator(this, function (_a) {
  752 + switch (_a.label) {
  753 + case 0: return [4 /*yield*/, this.myBridge.minWithDrawal(function (res) {
  754 + res = JSON.parse(res);
  755 + var code = res.code, data = res.data, msg = res.msg;
  756 + if ('0' === code || !code) {
  757 + resolve(data['money']);
  758 + }
  759 + else {
  760 + reject(msg);
  761 + }
  762 + })];
  763 + case 1:
  764 + _a.sent();
  765 + return [2 /*return*/];
  766 + }
  767 + });
  768 + }); })];
757 }); 769 });
758 }); 770 });
759 }; 771 };
760 - BaseAppSdk.prototype.onCallBack = function (cmd) { 772 + /**上报埋点 */
  773 + PcSdk.prototype.appDotLog = function (key, value) {
  774 + this.myBridge.appDotLog(key, value);
  775 + };
  776 + /**热云打点 */
  777 + PcSdk.prototype.appDotTracKing = function (key) {
  778 + this.myBridge.appDotTracKing(key);
  779 + };
  780 + PcSdk.prototype.setCallback = function (funName, pramas) {
761 var _this = this; 781 var _this = this;
762 - var params = [];  
763 - for (var _i = 1; _i < arguments.length; _i++) {  
764 - params[_i - 1] = arguments[_i];  
765 - }  
766 - return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {  
767 - return __generator(this, function (_a) {  
768 - switch (_a.label) {  
769 - case 0: return [4 /*yield*/, this.callAppWithBack.apply(this, [function (res) {  
770 - res = JSON.parse(res);  
771 - // res = { code: 1000 }  
772 - if (!res.code) {  
773 - resolve({ code: res.code, data: res.data });  
774 - }  
775 - else {  
776 - resolve({ code: res.code });  
777 - }  
778 - }, cmd].concat(params))];  
779 - case 1:  
780 - _a.sent();  
781 - return [2 /*return*/]; 782 + console.log('---------------setCallback---- this.myBridge---' + JSON.stringify(this.myBridge));
  783 + return new Promise(function (resolve, reject) {
  784 + _this.myBridge[funName](pramas, function (res) {
  785 + var _a = JSON.parse(res), code = _a.code, data = _a.data;
  786 + if ('0' === code) {
  787 + resolve(data);
  788 + }
  789 + else {
  790 + reject(0);
782 } 791 }
783 }); 792 });
784 - }); }); 793 + });
785 }; 794 };
786 - BaseAppSdk.prototype.callApp = function (cmd) {  
787 - var params = [];  
788 - for (var _i = 1; _i < arguments.length; _i++) {  
789 - params[_i - 1] = arguments[_i];  
790 - } 795 + PcSdk.prototype.closeAdverDialog = function () {
  796 + this.myBridge.closeAdverDialog();
791 }; 797 };
792 - BaseAppSdk.prototype.callAppWithBack = function (callBack, cmd) {  
793 - var params = [];  
794 - for (var _i = 2; _i < arguments.length; _i++) {  
795 - params[_i - 2] = arguments[_i];  
796 - } 798 + PcSdk.prototype.closeAdBanner = function () {
  799 + this.myBridge.closeAdBanner();
797 }; 800 };
798 - BaseAppSdk.prototype.networkEvtFunc = function (type) {  
799 - var funcArr;  
800 - if (type == 0) {  
801 - funcArr = this.netOffArr;  
802 - }  
803 - else if (type == 5) {  
804 - funcArr = this.netOnArr;  
805 - }  
806 - if (funcArr) {  
807 - for (var i = 0; i < funcArr.length; i++) {  
808 - funcArr[i]();  
809 - }  
810 - } 801 + /**激励视频 */
  802 + PcSdk.prototype.showRewardVideoAd = function (value, JBCallback) {
  803 + this.myBridge.showRewardVideoAd(value, JBCallback);
  804 + };
  805 + /** 全屏广告*/
  806 + PcSdk.prototype.loadFullScreenVideoAd = function (data, JBCallback) {
  807 + this.myBridge.showRewardVideoAd(data, JBCallback);
  808 + };
  809 + /**信息流广告 */
  810 + PcSdk.prototype.loadNativeExpressAd = function (data, JBCallback) {
  811 + this.myBridge.loadNativeExpressAd(data, JBCallback);
811 }; 812 };
812 - BaseAppSdk.prototype.onNetOn = function (func) {  
813 - this.netOnArr.push(func); 813 + /**banner */
  814 + PcSdk.prototype.loadBannerExpressAd = function (data, JBCallback) {
  815 + this.myBridge.loadBannerExpressAd(data, JBCallback);
814 }; 816 };
815 - BaseAppSdk.prototype.onNetOff = function (func) {  
816 - this.netOffArr.push(func); 817 + /**插屏广告 */
  818 + PcSdk.prototype.showInteractionExpressAd = function (data, JBCallback) {
  819 + this.myBridge.showInteractionExpressAd(data, JBCallback);
817 }; 820 };
818 - Object.defineProperty(BaseAppSdk.prototype, "level", { 821 + Object.defineProperty(PcSdk.prototype, "level", {
819 get: function () { 822 get: function () {
820 return this._level; 823 return this._level;
821 }, 824 },
822 enumerable: true, 825 enumerable: true,
823 configurable: true 826 configurable: true
824 }); 827 });
825 - Object.defineProperty(BaseAppSdk.prototype, "width", { 828 + Object.defineProperty(PcSdk.prototype, "width", {
826 get: function () { 829 get: function () {
827 return this._width; 830 return this._width;
828 }, 831 },
829 enumerable: true, 832 enumerable: true,
830 configurable: true 833 configurable: true
831 }); 834 });
832 - Object.defineProperty(BaseAppSdk.prototype, "height", { 835 + Object.defineProperty(PcSdk.prototype, "height", {
833 get: function () { 836 get: function () {
834 return this._height; 837 return this._height;
835 }, 838 },
836 enumerable: true, 839 enumerable: true,
837 configurable: true 840 configurable: true
838 }); 841 });
839 - Object.defineProperty(BaseAppSdk.prototype, "version", { 842 + Object.defineProperty(PcSdk.prototype, "version", {
840 get: function () { 843 get: function () {
841 return this._version; 844 return this._version;
842 }, 845 },
843 enumerable: true, 846 enumerable: true,
844 configurable: true 847 configurable: true
845 }); 848 });
846 - Object.defineProperty(BaseAppSdk.prototype, "channel", { 849 + Object.defineProperty(PcSdk.prototype, "channel", {
847 get: function () { 850 get: function () {
848 return this._channel; 851 return this._channel;
849 }, 852 },
850 enumerable: true, 853 enumerable: true,
851 configurable: true 854 configurable: true
852 }); 855 });
853 - Object.defineProperty(BaseAppSdk.prototype, "bridge", { 856 + Object.defineProperty(PcSdk.prototype, "bridge", {
854 get: function () { 857 get: function () {
855 return null; 858 return null;
856 }, 859 },
857 enumerable: true, 860 enumerable: true,
858 configurable: true 861 configurable: true
859 }); 862 });
860 - BaseAppSdk.prototype.createClass = function (name) {  
861 - return window['PlatformClass'].createClass(name);  
862 - };  
863 - return BaseAppSdk;  
864 -}());  
865 -exports.default = BaseAppSdk;  
866 -  
867 -},{"./sdkData/AddGoldData":18,"./sdkData/GoldConfigData":19,"./sdkData/MyCoinData":20}],11:[function(require,module,exports){  
868 -"use strict";  
869 -Object.defineProperty(exports, "__esModule", { value: true });  
870 -var BaseAppSdk_1 = require("./BaseAppSdk");  
871 -var IosAppSdk = /** @class */ (function (_super) {  
872 - __extends(IosAppSdk, _super);  
873 - function IosAppSdk() {  
874 - return _super !== null && _super.apply(this, arguments) || this;  
875 - }  
876 - Object.defineProperty(IosAppSdk.prototype, "system", { 863 + Object.defineProperty(PcSdk.prototype, "gameConfig", {
877 get: function () { 864 get: function () {
878 - return 0; 865 + return this._gameConfig;
879 }, 866 },
880 enumerable: true, 867 enumerable: true,
881 configurable: true 868 configurable: true
882 }); 869 });
883 - IosAppSdk.prototype.callApp = function (cmd) {  
884 - var params = [];  
885 - for (var _i = 1; _i < arguments.length; _i++) {  
886 - params[_i - 1] = arguments[_i];  
887 - }  
888 - var _a;  
889 - if (params.length) {  
890 - cmd += ':';  
891 - }  
892 - this.bridge && (_a = this.bridge).call.apply(_a, [cmd].concat(params));  
893 - // this.bridge && alert(JSON.stringify(this.bridge));  
894 - };  
895 - IosAppSdk.prototype.callAppWithBack = function (callBack, cmd) {  
896 - var params = [];  
897 - for (var _i = 2; _i < arguments.length; _i++) {  
898 - params[_i - 2] = arguments[_i];  
899 - }  
900 - var _a;  
901 - if (params.length) {  
902 - cmd += ':';  
903 - }  
904 - this.bridge && (_a = this.bridge).callWithBack.apply(_a, [callBack, cmd].concat(params));  
905 - };  
906 - Object.defineProperty(IosAppSdk.prototype, "bridge", { 870 + Object.defineProperty(PcSdk, "I", {
907 get: function () { 871 get: function () {
908 - return this._bridge || (this._bridge = this.createClass('JSBridge')); 872 + return ObjectInstance_1.default.get(PcSdk);
909 }, 873 },
910 enumerable: true, 874 enumerable: true,
911 configurable: true 875 configurable: true
912 }); 876 });
913 - return IosAppSdk;  
914 -}(BaseAppSdk_1.default));  
915 -exports.default = IosAppSdk;  
916 -  
917 -},{"./BaseAppSdk":10}],12:[function(require,module,exports){  
918 -"use strict";  
919 -Object.defineProperty(exports, "__esModule", { value: true });  
920 -var AdManager_1 = require("./AdManager");  
921 -var NativeAd = /** @class */ (function (_super) {  
922 - __extends(NativeAd, _super);  
923 - function NativeAd() {  
924 - return _super !== null && _super.apply(this, arguments) || this;  
925 - }  
926 - NativeAd.prototype.onEnable = function () {  
927 - var globalPoint = this.item.localToGlobal(Laya.Point.EMPTY, true);  
928 - AdManager_1.default.I.showNativeAd(globalPoint.x, globalPoint.y, this.item.width, this.item.height); 877 + return PcSdk;
  878 +}());
  879 +exports.default = PcSdk;
  880 +// //这里是浏览器环境下, 接收web传过来的消息
  881 +window.onMyBridgeReady = function () {
  882 + console.log("onMyBridgeReady load finish, cost:" + (new Date().getTime()) + "ms");
  883 + MyBridge.App.onResume = function () {
  884 + var ret = [];
  885 + for (var _i = 0; _i < arguments.length; _i++) {
  886 + ret[_i] = arguments[_i];
  887 + }
  888 + console.log(' laya onResume', ret);
  889 + EventCenter_1.EventCenter.emit(EventEnum_1.EventEnum.APP_SHOW);
929 }; 890 };
930 - NativeAd.prototype.onDisable = function () {  
931 - AdManager_1.default.I.hideNativeAd(); 891 + MyBridge.App.onPause = function () {
  892 + var ret = [];
  893 + for (var _i = 0; _i < arguments.length; _i++) {
  894 + ret[_i] = arguments[_i];
  895 + }
  896 + console.log(' laya onPause', ret);
  897 + EventCenter_1.EventCenter.emit(EventEnum_1.EventEnum.APP_HIDE);
932 }; 898 };
933 - Object.defineProperty(NativeAd.prototype, "item", {  
934 - get: function () {  
935 - return this.owner;  
936 - },  
937 - enumerable: true,  
938 - configurable: true  
939 - });  
940 - return NativeAd;  
941 -}(Laya.Script));  
942 -exports.default = NativeAd; 899 +};
943 900
944 -},{"./AdManager":7}],13:[function(require,module,exports){ 901 +},{"../event/EventCenter":5,"../event/EventEnum":6,"../uitl/ObjectInstance":18}],10:[function(require,module,exports){
945 "use strict"; 902 "use strict";
946 Object.defineProperty(exports, "__esModule", { value: true }); 903 Object.defineProperty(exports, "__esModule", { value: true });
947 -var AppSdk_1 = require("./AppSdk");  
948 var ObjectInstance_1 = require("../uitl/ObjectInstance"); 904 var ObjectInstance_1 = require("../uitl/ObjectInstance");
  905 +var PcSdk_1 = require("./PcSdk");
949 var TTAdSdk = /** @class */ (function () { 906 var TTAdSdk = /** @class */ (function () {
950 function TTAdSdk() { 907 function TTAdSdk() {
951 } 908 }
  909 + /**
  910 + *
  911 + * @param preload 0 直接加载;1 预加载
  912 + */
952 TTAdSdk.prototype.showRewardVideoAd = function (preload) { 913 TTAdSdk.prototype.showRewardVideoAd = function (preload) {
953 if (preload === void 0) { preload = 0; } 914 if (preload === void 0) { preload = 0; }
954 return __awaiter(this, void 0, void 0, function () { 915 return __awaiter(this, void 0, void 0, function () {
955 var data; 916 var data;
956 return __generator(this, function (_a) { 917 return __generator(this, function (_a) {
957 data = { 918 data = {
958 - w: AppSdk_1.AppSdk.I.width,  
959 - h: AppSdk_1.AppSdk.I.height, 919 + type: 1,
960 preloading: preload, 920 preloading: preload,
961 }; 921 };
962 return [2 /*return*/, new Promise(function (resolve, reject) { 922 return [2 /*return*/, new Promise(function (resolve, reject) {
963 var isComplete = false; 923 var isComplete = false;
964 - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) { 924 + PcSdk_1.default.I.showRewardVideoAd(data, function (ret) {
965 var _a = JSON.parse(ret), code = _a.code, message = _a.message; 925 var _a = JSON.parse(ret), code = _a.code, message = _a.message;
966 switch (code) { 926 switch (code) {
967 case -1: 927 case -1:
@@ -982,7 +942,7 @@ var TTAdSdk = /** @class */ (function () { @@ -982,7 +942,7 @@ var TTAdSdk = /** @class */ (function () {
982 } 942 }
983 break; 943 break;
984 } 944 }
985 - }, 'showRewardVideoAd', 1, JSON.stringify(data)); 945 + });
986 })]; 946 })];
987 }); 947 });
988 }); 948 });
@@ -993,50 +953,66 @@ var TTAdSdk = /** @class */ (function () { @@ -993,50 +953,66 @@ var TTAdSdk = /** @class */ (function () {
993 var data; 953 var data;
994 return __generator(this, function (_a) { 954 return __generator(this, function (_a) {
995 data = { 955 data = {
996 - preloading: preload, 956 + w: PcSdk_1.default.I.width,
  957 + h: PcSdk_1.default.I.width * 90 / 600,
  958 + preloading: 0,
  959 + type: 1
997 }; 960 };
998 return [2 /*return*/, new Promise(function (resolve, reject) { 961 return [2 /*return*/, new Promise(function (resolve, reject) {
999 - var isComplete = false;  
1000 - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) {  
1001 - }, 'loadFullScreenVideoAd', 1, JSON.stringify(data)); 962 + PcSdk_1.default.I.loadFullScreenVideoAd(JSON.stringify(data), function (res) {
  963 + resolve(res);
  964 + });
1002 })]; 965 })];
1003 }); 966 });
1004 }); 967 });
1005 }; 968 };
1006 - TTAdSdk.prototype.loadNativeExpressAd = function (x, y, width, height) { 969 + TTAdSdk.prototype.loadNativeExpressAd = function (x, y, width, height, type, preload) {
  970 + if (type === void 0) { type = 1; }
  971 + if (preload === void 0) { preload = 0; }
1007 return __awaiter(this, void 0, void 0, function () { 972 return __awaiter(this, void 0, void 0, function () {
1008 var scaleX, scaleY, data; 973 var scaleX, scaleY, data;
1009 return __generator(this, function (_a) { 974 return __generator(this, function (_a) {
1010 - scaleX = AppSdk_1.AppSdk.I.width / Laya.stage.width;  
1011 - scaleY = AppSdk_1.AppSdk.I.height / Laya.stage.height; 975 + scaleX = PcSdk_1.default.I.width / Laya.stage.width;
  976 + scaleY = PcSdk_1.default.I.height / Laya.stage.height;
1012 data = { 977 data = {
  978 + type: type,
  979 + preloading: preload,
1013 w: width * scaleX, 980 w: width * scaleX,
1014 h: height * scaleY, 981 h: height * scaleY,
1015 left: x * scaleX, 982 left: x * scaleX,
1016 top: y * scaleY 983 top: y * scaleY
1017 }; 984 };
1018 - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) {  
1019 - }, 'loadNativeExpressAd', JSON.stringify(data)); 985 + PcSdk_1.default.I.loadNativeExpressAd(JSON.stringify(data), function (res) {
  986 + return Promise.resolve(res);
  987 + });
1020 return [2 /*return*/]; 988 return [2 /*return*/];
1021 }); 989 });
1022 }); 990 });
1023 }; 991 };
1024 - TTAdSdk.prototype.loadBannerExpressAd = function () { 992 + TTAdSdk.prototype.loadBannerExpressAd = function (preload) {
  993 + if (preload === void 0) { preload = 0; }
1025 return __awaiter(this, void 0, void 0, function () { 994 return __awaiter(this, void 0, void 0, function () {
1026 var data; 995 var data;
1027 return __generator(this, function (_a) { 996 return __generator(this, function (_a) {
1028 data = { 997 data = {
1029 - w: AppSdk_1.AppSdk.I.width,  
1030 - h: AppSdk_1.AppSdk.I.width * 90 / 600, 998 + w: PcSdk_1.default.I.width,
  999 + h: PcSdk_1.default.I.width * 90 / 600,
  1000 + preloading: preload,
  1001 + type: 1
1031 }; 1002 };
1032 - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) {  
1033 - }, 'loadBannerExpressAd', 2, JSON.stringify(data));  
1034 - return [2 /*return*/]; 1003 + return [2 /*return*/, new Promise(function (resolve, reject) {
  1004 + PcSdk_1.default.I.loadBannerExpressAd(JSON.stringify(data), function (res) {
  1005 + resolve(res);
  1006 + });
  1007 + })];
1035 }); 1008 });
1036 }); 1009 });
1037 }; 1010 };
1038 - TTAdSdk.prototype.hideAd = function () {  
1039 - AppSdk_1.AppSdk.I.callApp('close_adver_dialog'); 1011 + TTAdSdk.prototype.closeAdverDialog = function () {
  1012 + PcSdk_1.default.I.closeAdverDialog();
  1013 + };
  1014 + TTAdSdk.prototype.closeAdBanner = function () {
  1015 + PcSdk_1.default.I.closeAdBanner();
1040 }; 1016 };
1041 TTAdSdk.prototype.showInteractionExpressAd = function (preload) { 1017 TTAdSdk.prototype.showInteractionExpressAd = function (preload) {
1042 if (preload === void 0) { preload = 0; } 1018 if (preload === void 0) { preload = 0; }
@@ -1044,14 +1020,15 @@ var TTAdSdk = /** @class */ (function () { @@ -1044,14 +1020,15 @@ var TTAdSdk = /** @class */ (function () {
1044 var data; 1020 var data;
1045 return __generator(this, function (_a) { 1021 return __generator(this, function (_a) {
1046 data = { 1022 data = {
1047 - w: AppSdk_1.AppSdk.I.width * 0.8,  
1048 - h: AppSdk_1.AppSdk.I.height, 1023 + w: PcSdk_1.default.I.width * 0.8,
  1024 + h: PcSdk_1.default.I.height,
1049 preloading: preload, 1025 preloading: preload,
1050 }; 1026 };
1051 return [2 /*return*/, new Promise(function (resolve, reject) { 1027 return [2 /*return*/, new Promise(function (resolve, reject) {
1052 var isComplete = false; 1028 var isComplete = false;
1053 - AppSdk_1.AppSdk.I.callAppWithBack(function (ret) {  
1054 - }, 'showInteractionExpressAd', JSON.stringify(data)); 1029 + PcSdk_1.default.I.showInteractionExpressAd(JSON.stringify(data), function (res) {
  1030 + resolve(res);
  1031 + });
1055 })]; 1032 })];
1056 }); 1033 });
1057 }); 1034 });
@@ -1067,11 +1044,11 @@ var TTAdSdk = /** @class */ (function () { @@ -1067,11 +1044,11 @@ var TTAdSdk = /** @class */ (function () {
1067 }()); 1044 }());
1068 exports.default = TTAdSdk; 1045 exports.default = TTAdSdk;
1069 1046
1070 -},{"../uitl/ObjectInstance":24,"./AppSdk":9}],14:[function(require,module,exports){ 1047 +},{"../uitl/ObjectInstance":18,"./PcSdk":9}],11:[function(require,module,exports){
1071 "use strict"; 1048 "use strict";
1072 Object.defineProperty(exports, "__esModule", { value: true }); 1049 Object.defineProperty(exports, "__esModule", { value: true });
1073 -var AppSdk_1 = require("./AppSdk");  
1074 var ObjectInstance_1 = require("../uitl/ObjectInstance"); 1050 var ObjectInstance_1 = require("../uitl/ObjectInstance");
  1051 +var PcSdk_1 = require("./PcSdk");
1075 /** 1052 /**
1076 * 上报热云埋点⽇志 1053 * 上报热云埋点⽇志
1077 * 具体的打点需要跟运营联系 1054 * 具体的打点需要跟运营联系
@@ -1080,7 +1057,7 @@ var TrackingSdk = /** @class */ (function () { @@ -1080,7 +1057,7 @@ var TrackingSdk = /** @class */ (function () {
1080 function TrackingSdk() { 1057 function TrackingSdk() {
1081 } 1058 }
1082 TrackingSdk.prototype.dot = function (key) { 1059 TrackingSdk.prototype.dot = function (key) {
1083 - AppSdk_1.AppSdk.I.callApp('tracking_event', key); 1060 + PcSdk_1.default.I.appDotTracKing(key);
1084 }; 1061 };
1085 Object.defineProperty(TrackingSdk, "I", { 1062 Object.defineProperty(TrackingSdk, "I", {
1086 get: function () { 1063 get: function () {
@@ -1098,7 +1075,7 @@ var TrackingKey; @@ -1098,7 +1075,7 @@ var TrackingKey;
1098 TrackingKey["RedPack5"] = "event_6"; 1075 TrackingKey["RedPack5"] = "event_6";
1099 })(TrackingKey = exports.TrackingKey || (exports.TrackingKey = {})); 1076 })(TrackingKey = exports.TrackingKey || (exports.TrackingKey = {}));
1100 1077
1101 -},{"../uitl/ObjectInstance":24,"./AppSdk":9}],15:[function(require,module,exports){ 1078 +},{"../uitl/ObjectInstance":18,"./PcSdk":9}],12:[function(require,module,exports){
1102 "use strict"; 1079 "use strict";
1103 Object.defineProperty(exports, "__esModule", { value: true }); 1080 Object.defineProperty(exports, "__esModule", { value: true });
1104 var ArrayUtils_1 = require("../../uitl/ArrayUtils"); 1081 var ArrayUtils_1 = require("../../uitl/ArrayUtils");
@@ -1184,21 +1161,18 @@ var BaseModel = /** @class */ (function () { @@ -1184,21 +1161,18 @@ var BaseModel = /** @class */ (function () {
1184 }()); 1161 }());
1185 exports.default = BaseModel; 1162 exports.default = BaseModel;
1186 1163
1187 -},{"../../uitl/ArrayUtils":22}],16:[function(require,module,exports){ 1164 +},{"../../uitl/ArrayUtils":16}],13:[function(require,module,exports){
1188 "use strict"; 1165 "use strict";
1189 Object.defineProperty(exports, "__esModule", { value: true }); 1166 Object.defineProperty(exports, "__esModule", { value: true });
1190 var BaseModel_1 = require("./BaseModel"); 1167 var BaseModel_1 = require("./BaseModel");
1191 var AdManager_1 = require("../../sdk/AdManager"); 1168 var AdManager_1 = require("../../sdk/AdManager");
1192 var TrackingSdk_1 = require("../../sdk/TrackingSdk"); 1169 var TrackingSdk_1 = require("../../sdk/TrackingSdk");
1193 -var GoldConfigData_1 = require("../../sdk/sdkData/GoldConfigData");  
1194 -var AddGoldData_1 = require("../../sdk/sdkData/AddGoldData");  
1195 -var MyCoinData_1 = require("../../sdk/sdkData/MyCoinData");  
1196 -var AppSdk_1 = require("../../sdk/AppSdk");  
1197 var DateUtils_1 = require("../../uitl/DateUtils"); 1170 var DateUtils_1 = require("../../uitl/DateUtils");
1198 var Util_1 = require("../../uitl/Util"); 1171 var Util_1 = require("../../uitl/Util");
1199 var ObjectInstance_1 = require("../../uitl/ObjectInstance"); 1172 var ObjectInstance_1 = require("../../uitl/ObjectInstance");
1200 var EventCenter_1 = require("../../event/EventCenter"); 1173 var EventCenter_1 = require("../../event/EventCenter");
1201 var EventEnum_1 = require("../../event/EventEnum"); 1174 var EventEnum_1 = require("../../event/EventEnum");
  1175 +var PcSdk_1 = require("../PcSdk");
1202 var RedpacketModel = /** @class */ (function (_super) { 1176 var RedpacketModel = /** @class */ (function (_super) {
1203 __extends(RedpacketModel, _super); 1177 __extends(RedpacketModel, _super);
1204 function RedpacketModel() { 1178 function RedpacketModel() {
@@ -1217,7 +1191,7 @@ var RedpacketModel = /** @class */ (function (_super) { @@ -1217,7 +1191,7 @@ var RedpacketModel = /** @class */ (function (_super) {
1217 var _this = this; 1191 var _this = this;
1218 return __generator(this, function (_a) { 1192 return __generator(this, function (_a) {
1219 switch (_a.label) { 1193 switch (_a.label) {
1220 - case 0: return [4 /*yield*/, GoldConfigData_1.GoldConfigData.I.getGoldConfig()]; 1194 + case 0: return [4 /*yield*/, this.getRedConfig()];
1221 case 1: 1195 case 1:
1222 arr = _a.sent(); 1196 arr = _a.sent();
1223 console.log('---------------RedpacketModel-------' + JSON.stringify(arr)); 1197 console.log('---------------RedpacketModel-------' + JSON.stringify(arr));
@@ -1255,6 +1229,47 @@ var RedpacketModel = /** @class */ (function (_super) { @@ -1255,6 +1229,47 @@ var RedpacketModel = /** @class */ (function (_super) {
1255 data.list = []; 1229 data.list = [];
1256 return data; 1230 return data;
1257 }; 1231 };
  1232 + RedpacketModel.prototype.getRedConfig = function () {
  1233 + return __awaiter(this, void 0, void 0, function () {
  1234 + var result, configJson;
  1235 + return __generator(this, function (_a) {
  1236 + switch (_a.label) {
  1237 + case 0:
  1238 + result = PcSdk_1.default.I.gameConfig;
  1239 + console.log('--------------- 获取配置静态表-----' + JSON.stringify(result));
  1240 + if (!result) return [3 /*break*/, 2];
  1241 + return [4 /*yield*/, this.loadGoldCfg(result['coin_config'][0])];
  1242 + case 1:
  1243 + configJson = _a.sent();
  1244 + console.log('-------------- 获取红包静态表-----' + JSON.stringify(result));
  1245 + return [2 /*return*/, configJson];
  1246 + case 2:
  1247 + PcSdk_1.default.I.initGameConfig();
  1248 + _a.label = 3;
  1249 + case 3: return [2 /*return*/];
  1250 + }
  1251 + });
  1252 + });
  1253 + };
  1254 + RedpacketModel.prototype.loadGoldCfg = function (res) {
  1255 + return __awaiter(this, void 0, void 0, function () {
  1256 + var configJson;
  1257 + return __generator(this, function (_a) {
  1258 + switch (_a.label) {
  1259 + case 0: return [4 /*yield*/, this.load(res)];
  1260 + case 1:
  1261 + configJson = _a.sent();
  1262 + return [2 /*return*/, configJson];
  1263 + }
  1264 + });
  1265 + });
  1266 + };
  1267 + RedpacketModel.prototype.load = function (res, onProgress) {
  1268 + var _this = this;
  1269 + return new Promise(function (suc, fail) {
  1270 + Laya.loader.load(res, Laya.Handler.create(_this, suc), onProgress);
  1271 + });
  1272 + };
1258 RedpacketModel.prototype.checkRedpacket = function () { 1273 RedpacketModel.prototype.checkRedpacket = function () {
1259 return __awaiter(this, void 0, void 0, function () { 1274 return __awaiter(this, void 0, void 0, function () {
1260 var cnt, data, ran2, cash; 1275 var cnt, data, ran2, cash;
@@ -1284,6 +1299,7 @@ var RedpacketModel = /** @class */ (function (_super) { @@ -1284,6 +1299,7 @@ var RedpacketModel = /** @class */ (function (_super) {
1284 case 1: 1299 case 1:
1285 //**弹出红包的界面, 暂时处理成 直接看广告获取金币 */ 1300 //**弹出红包的界面, 暂时处理成 直接看广告获取金币 */
1286 _a.sent(); 1301 _a.sent();
  1302 + console.log('--------------- 触发了红包-----');
1287 this.getRepacket(); 1303 this.getRepacket();
1288 /**更新基本显示 */ 1304 /**更新基本显示 */
1289 EventCenter_1.EventCenter.emit(EventEnum_1.EventEnum.UPDATE_COIN); 1305 EventCenter_1.EventCenter.emit(EventEnum_1.EventEnum.UPDATE_COIN);
@@ -1331,7 +1347,7 @@ var RedpacketModel = /** @class */ (function (_super) { @@ -1331,7 +1347,7 @@ var RedpacketModel = /** @class */ (function (_super) {
1331 var totalCoin; 1347 var totalCoin;
1332 return __generator(this, function (_a) { 1348 return __generator(this, function (_a) {
1333 switch (_a.label) { 1349 switch (_a.label) {
1334 - case 0: return [4 /*yield*/, MyCoinData_1.default.getCoin()]; 1350 + case 0: return [4 /*yield*/, PcSdk_1.default.I.myCoin()];
1335 case 1: 1351 case 1:
1336 totalCoin = _a.sent(); 1352 totalCoin = _a.sent();
1337 return [2 /*return*/, totalCoin]; 1353 return [2 /*return*/, totalCoin];
@@ -1346,10 +1362,10 @@ var RedpacketModel = /** @class */ (function (_super) { @@ -1346,10 +1362,10 @@ var RedpacketModel = /** @class */ (function (_super) {
1346 var coinData; 1362 var coinData;
1347 return __generator(this, function (_a) { 1363 return __generator(this, function (_a) {
1348 switch (_a.label) { 1364 switch (_a.label) {
1349 - case 0: return [4 /*yield*/, AddGoldData_1.default.addCoin(key)]; 1365 + case 0: return [4 /*yield*/, PcSdk_1.default.I.addGold(key)];
1350 case 1: 1366 case 1:
1351 coinData = _a.sent(); 1367 coinData = _a.sent();
1352 - return [2 /*return*/, coinData]; 1368 + return [2 /*return*/, coinData['coin']];
1353 } 1369 }
1354 }); 1370 });
1355 }); 1371 });
@@ -1360,7 +1376,7 @@ var RedpacketModel = /** @class */ (function (_super) { @@ -1360,7 +1376,7 @@ var RedpacketModel = /** @class */ (function (_super) {
1360 var minCoin; 1376 var minCoin;
1361 return __generator(this, function (_a) { 1377 return __generator(this, function (_a) {
1362 switch (_a.label) { 1378 switch (_a.label) {
1363 - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.minWithDrawal()]; 1379 + case 0: return [4 /*yield*/, PcSdk_1.default.I.minWithDrawal()];
1364 case 1: 1380 case 1:
1365 minCoin = _a.sent(); 1381 minCoin = _a.sent();
1366 return [2 /*return*/, minCoin]; 1382 return [2 /*return*/, minCoin];
@@ -1389,14 +1405,14 @@ var RedpacketConfigData = /** @class */ (function () { @@ -1389,14 +1405,14 @@ var RedpacketConfigData = /** @class */ (function () {
1389 return RedpacketConfigData; 1405 return RedpacketConfigData;
1390 }()); 1406 }());
1391 1407
1392 -},{"../../event/EventCenter":5,"../../event/EventEnum":6,"../../sdk/AdManager":7,"../../sdk/AppSdk":9,"../../sdk/TrackingSdk":14,"../../sdk/sdkData/AddGoldData":18,"../../sdk/sdkData/GoldConfigData":19,"../../sdk/sdkData/MyCoinData":20,"../../uitl/DateUtils":23,"../../uitl/ObjectInstance":24,"../../uitl/Util":27,"./BaseModel":15}],17:[function(require,module,exports){ 1408 +},{"../../event/EventCenter":5,"../../event/EventEnum":6,"../../sdk/AdManager":7,"../../sdk/TrackingSdk":11,"../../uitl/DateUtils":17,"../../uitl/ObjectInstance":18,"../../uitl/Util":21,"../PcSdk":9,"./BaseModel":12}],14:[function(require,module,exports){
1393 "use strict"; 1409 "use strict";
1394 Object.defineProperty(exports, "__esModule", { value: true }); 1410 Object.defineProperty(exports, "__esModule", { value: true });
1395 var BaseModel_1 = require("./BaseModel"); 1411 var BaseModel_1 = require("./BaseModel");
1396 -var AppSdk_1 = require("../../sdk/AppSdk");  
1397 var DateUtils_1 = require("../../uitl/DateUtils"); 1412 var DateUtils_1 = require("../../uitl/DateUtils");
1398 var Util_1 = require("../../uitl/Util"); 1413 var Util_1 = require("../../uitl/Util");
1399 var ObjectInstance_1 = require("../../uitl/ObjectInstance"); 1414 var ObjectInstance_1 = require("../../uitl/ObjectInstance");
  1415 +var PcSdk_1 = require("../PcSdk");
1400 /** 1416 /**
1401 * 1417 *
1402 */ 1418 */
@@ -1415,123 +1431,18 @@ var ShakeModel = /** @class */ (function (_super) { @@ -1415,123 +1431,18 @@ var ShakeModel = /** @class */ (function (_super) {
1415 _this.cur_shake_day_limit = 0; 1431 _this.cur_shake_day_limit = 0;
1416 return _this; 1432 return _this;
1417 } 1433 }
1418 - /**  
1419 - * red_day_limit 红包每日极限产出  
1420 - * shake_day_limit 摇一摇每日极限产出  
1421 - * interstitial_cnt 插屏计数(每出现x次通用获得物品界面后,出现插屏)  
1422 - * interstitial_delay 插屏出现延时(毫秒)  
1423 - */  
1424 - /**  
1425 - * // let result = {  
1426 - // data: {  
1427 - // gameConfig: {  
1428 - // "config": {  
1429 - // "red_day_limit": 10,  
1430 - // "shake_day_limit": 50,  
1431 - // "interstitial_cnt": 2,  
1432 - // "interstitial_delay": 500  
1433 - // },  
1434 - // "shake": [  
1435 - // {  
1436 - // "id": 1,  
1437 - // "type": 1,  
1438 - // "weight": 1000,  
1439 - // "num": 0  
1440 - // },  
1441 - // {  
1442 - // "id": 2,  
1443 - // "type": 2,  
1444 - // "weight": 400,  
1445 - // "num": 0  
1446 - // },  
1447 - // {  
1448 - // "id": 3,  
1449 - // "type": 3,  
1450 - // "weight": 300,  
1451 - // "num": 1  
1452 - // },  
1453 - // {  
1454 - // "id": 4,  
1455 - // "type": 3,  
1456 - // "weight": 100,  
1457 - // "num": 2  
1458 - // },  
1459 - // {  
1460 - // "id": 5,  
1461 - // "type": 4,  
1462 - // "weight": 300,  
1463 - // "num": 1  
1464 - // },  
1465 - // {  
1466 - // "id": 6,  
1467 - // "type": 4,  
1468 - // "weight": 100,  
1469 - // "num": 2  
1470 - // },  
1471 - // {  
1472 - // "id": 7,  
1473 - // "type": 5,  
1474 - // "weight": 300,  
1475 - // "num": 1  
1476 - // },  
1477 - // {  
1478 - // "id": 8,  
1479 - // "type": 5,  
1480 - // "weight": 100,  
1481 - // "num": 2  
1482 - // },  
1483 - // {  
1484 - // "id": 9,  
1485 - // "type": 6,  
1486 - // "weight": 300,  
1487 - // "num": 1  
1488 - // },  
1489 - // {  
1490 - // "id": 10,  
1491 - // "type": 6,  
1492 - // "weight": 100,  
1493 - // "num": 2  
1494 - // },  
1495 - // {  
1496 - // "id": 11,  
1497 - // "type": 7,  
1498 - // "weight": 300,  
1499 - // "num": 1  
1500 - // },  
1501 - // {  
1502 - // "id": 12,  
1503 - // "type": 7,  
1504 - // "weight": 100,  
1505 - // "num": 2  
1506 - // },  
1507 - // {  
1508 - // "id": 13,  
1509 - // "type": 8,  
1510 - // "weight": 500,  
1511 - // "num": 0  
1512 - // }  
1513 - // ],  
1514 - // 'coin_config': []  
1515 - // }  
1516 - // }  
1517 - // }  
1518 - */  
1519 ShakeModel.prototype.init = function () { 1434 ShakeModel.prototype.init = function () {
1520 return __awaiter(this, void 0, void 0, function () { 1435 return __awaiter(this, void 0, void 0, function () {
1521 - var result, data, gameData; 1436 + var result, gameData;
1522 return __generator(this, function (_a) { 1437 return __generator(this, function (_a) {
1523 - switch (_a.label) {  
1524 - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.getGameConfig()];  
1525 - case 1:  
1526 - result = _a.sent();  
1527 - console.log('---------------ShakeModel-------' + JSON.stringify(result.data));  
1528 - data = result.data;  
1529 - if (data['gameConfig']) {  
1530 - gameData = data['gameConfig'];  
1531 - this.update(this.initData(gameData));  
1532 - }  
1533 - return [2 /*return*/]; 1438 + result = PcSdk_1.default.I.gameConfig;
  1439 + ;
  1440 + console.log('---------------ShakeModel-- 获取摇一摇静态表-----' + JSON.stringify(result));
  1441 + if (result['config']) {
  1442 + gameData = result['config'];
  1443 + this.update(this.initData(gameData));
1534 } 1444 }
  1445 + return [2 /*return*/];
1535 }); 1446 });
1536 }); 1447 });
1537 }; 1448 };
@@ -1626,148 +1537,7 @@ var ShakeData = /** @class */ (function () { @@ -1626,148 +1537,7 @@ var ShakeData = /** @class */ (function () {
1626 return ShakeData; 1537 return ShakeData;
1627 }()); 1538 }());
1628 1539
1629 -},{"../../sdk/AppSdk":9,"../../uitl/DateUtils":23,"../../uitl/ObjectInstance":24,"../../uitl/Util":27,"./BaseModel":15}],18:[function(require,module,exports){  
1630 -"use strict";  
1631 -Object.defineProperty(exports, "__esModule", { value: true });  
1632 -var AppSdk_1 = require("../AppSdk");  
1633 -var AddGoldData = /** @class */ (function () {  
1634 - function AddGoldData() {  
1635 - }  
1636 - AddGoldData.initData = function (data) {  
1637 - if (!parseInt(data.code)) {  
1638 - AddGoldData.coin = data.data.coin;  
1639 - AddGoldData.mycoin = data.data.mycoin;  
1640 - }  
1641 - };  
1642 - AddGoldData.addCoin = function (key) {  
1643 - if (key === void 0) { key = 1; }  
1644 - return __awaiter(this, void 0, void 0, function () {  
1645 - var result;  
1646 - return __generator(this, function (_a) {  
1647 - switch (_a.label) {  
1648 - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.addGold(key)];  
1649 - case 1:  
1650 - result = _a.sent();  
1651 - return [2 /*return*/, [parseInt(this.coin), parseInt(this.mycoin)]];  
1652 - }  
1653 - });  
1654 - });  
1655 - };  
1656 - AddGoldData.coin = '0';  
1657 - AddGoldData.mycoin = '0';  
1658 - return AddGoldData;  
1659 -}());  
1660 -exports.default = AddGoldData;  
1661 -  
1662 -},{"../AppSdk":9}],19:[function(require,module,exports){  
1663 -"use strict";  
1664 -Object.defineProperty(exports, "__esModule", { value: true });  
1665 -var AppSdk_1 = require("../AppSdk");  
1666 -var Util_1 = require("../../uitl/Util");  
1667 -var GoldConfigData = /** @class */ (function () {  
1668 - function GoldConfigData() {  
1669 - this.coin_config = '';  
1670 - this.code = -3;  
1671 - }  
1672 - Object.defineProperty(GoldConfigData, "I", {  
1673 - get: function () {  
1674 - if (!this.instance)  
1675 - this.instance = new GoldConfigData();  
1676 - return this.instance;  
1677 - },  
1678 - enumerable: true,  
1679 - configurable: true  
1680 - });  
1681 - GoldConfigData.prototype.initData = function (data) {  
1682 - this.code = data.code;  
1683 - if (!data.code) {  
1684 - data = data.data;  
1685 - for (var key in data) {  
1686 - if (data.hasOwnProperty(key)) {  
1687 - var ele = data[key];  
1688 - this[key] = ele;  
1689 - }  
1690 - }  
1691 - }  
1692 - };  
1693 - GoldConfigData.prototype.getGoldConfig = function () {  
1694 - return __awaiter(this, void 0, void 0, function () {  
1695 - var _this = this;  
1696 - return __generator(this, function (_a) {  
1697 - return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {  
1698 - var result, data, gameData, configJson;  
1699 - return __generator(this, function (_a) {  
1700 - switch (_a.label) {  
1701 - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.getGameConfig()];  
1702 - case 1:  
1703 - result = _a.sent();  
1704 - data = result.data;  
1705 - if (!data['gameConfig']) return [3 /*break*/, 3];  
1706 - gameData = data['gameConfig'];  
1707 - return [4 /*yield*/, this.loadGoldCfg(gameData['coin_config'][0])];  
1708 - case 2:  
1709 - configJson = _a.sent();  
1710 - resolve(configJson);  
1711 - _a.label = 3;  
1712 - case 3: return [2 /*return*/];  
1713 - }  
1714 - });  
1715 - }); })];  
1716 - });  
1717 - });  
1718 - };  
1719 - GoldConfigData.prototype.loadGoldCfg = function (res) {  
1720 - return __awaiter(this, void 0, void 0, function () {  
1721 - var configJson;  
1722 - return __generator(this, function (_a) {  
1723 - switch (_a.label) {  
1724 - case 0: return [4 /*yield*/, Util_1.default.I.load(res)];  
1725 - case 1:  
1726 - configJson = _a.sent();  
1727 - return [2 /*return*/, configJson];  
1728 - }  
1729 - });  
1730 - });  
1731 - };  
1732 - GoldConfigData.instance = null;  
1733 - return GoldConfigData;  
1734 -}());  
1735 -exports.GoldConfigData = GoldConfigData;  
1736 -  
1737 -},{"../../uitl/Util":27,"../AppSdk":9}],20:[function(require,module,exports){  
1738 -"use strict";  
1739 -Object.defineProperty(exports, "__esModule", { value: true });  
1740 -var AppSdk_1 = require("../AppSdk");  
1741 -var MyCoinData = /** @class */ (function () {  
1742 - function MyCoinData() {  
1743 - }  
1744 - MyCoinData.initData = function (data) {  
1745 - if (!parseInt(data.code)) {  
1746 - this.coin = data.data.coin;  
1747 - }  
1748 - else {  
1749 - this.coin = '0';  
1750 - }  
1751 - };  
1752 - MyCoinData.getCoin = function () {  
1753 - return __awaiter(this, void 0, void 0, function () {  
1754 - var result;  
1755 - return __generator(this, function (_a) {  
1756 - switch (_a.label) {  
1757 - case 0: return [4 /*yield*/, AppSdk_1.AppSdk.I.myCoin()];  
1758 - case 1:  
1759 - result = _a.sent();  
1760 - return [2 /*return*/, parseInt(this.coin)];  
1761 - }  
1762 - });  
1763 - });  
1764 - };  
1765 - MyCoinData.coin = '';  
1766 - return MyCoinData;  
1767 -}());  
1768 -exports.default = MyCoinData;  
1769 -  
1770 -},{"../AppSdk":9}],21:[function(require,module,exports){ 1540 +},{"../../uitl/DateUtils":17,"../../uitl/ObjectInstance":18,"../../uitl/Util":21,"../PcSdk":9,"./BaseModel":12}],15:[function(require,module,exports){
1771 "use strict"; 1541 "use strict";
1772 Object.defineProperty(exports, "__esModule", { value: true }); 1542 Object.defineProperty(exports, "__esModule", { value: true });
1773 var Scene = Laya.Scene; 1543 var Scene = Laya.Scene;
@@ -1789,7 +1559,7 @@ var ui; @@ -1789,7 +1559,7 @@ var ui;
1789 REG("ui.TestSceneUI", TestSceneUI); 1559 REG("ui.TestSceneUI", TestSceneUI);
1790 })(ui = exports.ui || (exports.ui = {})); 1560 })(ui = exports.ui || (exports.ui = {}));
1791 1561
1792 -},{}],22:[function(require,module,exports){ 1562 +},{}],16:[function(require,module,exports){
1793 "use strict"; 1563 "use strict";
1794 Object.defineProperty(exports, "__esModule", { value: true }); 1564 Object.defineProperty(exports, "__esModule", { value: true });
1795 var ArrayUtils = /** @class */ (function () { 1565 var ArrayUtils = /** @class */ (function () {
@@ -1870,7 +1640,7 @@ var ArrayUtils = /** @class */ (function () { @@ -1870,7 +1640,7 @@ var ArrayUtils = /** @class */ (function () {
1870 }()); 1640 }());
1871 exports.default = ArrayUtils; 1641 exports.default = ArrayUtils;
1872 1642
1873 -},{}],23:[function(require,module,exports){ 1643 +},{}],17:[function(require,module,exports){
1874 "use strict"; 1644 "use strict";
1875 Object.defineProperty(exports, "__esModule", { value: true }); 1645 Object.defineProperty(exports, "__esModule", { value: true });
1876 /** 1646 /**
@@ -2165,7 +1935,7 @@ var DateUtils = /** @class */ (function () { @@ -2165,7 +1935,7 @@ var DateUtils = /** @class */ (function () {
2165 }()); 1935 }());
2166 exports.default = DateUtils; 1936 exports.default = DateUtils;
2167 1937
2168 -},{}],24:[function(require,module,exports){ 1938 +},{}],18:[function(require,module,exports){
2169 "use strict"; 1939 "use strict";
2170 Object.defineProperty(exports, "__esModule", { value: true }); 1940 Object.defineProperty(exports, "__esModule", { value: true });
2171 var ObjectPool_1 = require("./ObjectPool"); 1941 var ObjectPool_1 = require("./ObjectPool");
@@ -2191,7 +1961,7 @@ var ObjectInstance = /** @class */ (function () { @@ -2191,7 +1961,7 @@ var ObjectInstance = /** @class */ (function () {
2191 }()); 1961 }());
2192 exports.default = ObjectInstance; 1962 exports.default = ObjectInstance;
2193 1963
2194 -},{"./ObjectPool":25}],25:[function(require,module,exports){ 1964 +},{"./ObjectPool":19}],19:[function(require,module,exports){
2195 "use strict"; 1965 "use strict";
2196 Object.defineProperty(exports, "__esModule", { value: true }); 1966 Object.defineProperty(exports, "__esModule", { value: true });
2197 var ObjectPool = /** @class */ (function () { 1967 var ObjectPool = /** @class */ (function () {
@@ -2216,7 +1986,7 @@ var ObjectPool = /** @class */ (function () { @@ -2216,7 +1986,7 @@ var ObjectPool = /** @class */ (function () {
2216 }()); 1986 }());
2217 exports.default = ObjectPool; 1987 exports.default = ObjectPool;
2218 1988
2219 -},{}],26:[function(require,module,exports){ 1989 +},{}],20:[function(require,module,exports){
2220 "use strict"; 1990 "use strict";
2221 Object.defineProperty(exports, "__esModule", { value: true }); 1991 Object.defineProperty(exports, "__esModule", { value: true });
2222 var ScaleButtonScript = /** @class */ (function () { 1992 var ScaleButtonScript = /** @class */ (function () {
@@ -2262,7 +2032,7 @@ var ScaleButtonScript = /** @class */ (function () { @@ -2262,7 +2032,7 @@ var ScaleButtonScript = /** @class */ (function () {
2262 }()); 2032 }());
2263 exports.default = ScaleButtonScript; 2033 exports.default = ScaleButtonScript;
2264 2034
2265 -},{}],27:[function(require,module,exports){ 2035 +},{}],21:[function(require,module,exports){
2266 "use strict"; 2036 "use strict";
2267 Object.defineProperty(exports, "__esModule", { value: true }); 2037 Object.defineProperty(exports, "__esModule", { value: true });
2268 var Util = /** @class */ (function () { 2038 var Util = /** @class */ (function () {
@@ -2301,4 +2071,4 @@ var DataKey; @@ -2301,4 +2071,4 @@ var DataKey;
2301 })(DataKey = exports.DataKey || (exports.DataKey = {})); 2071 })(DataKey = exports.DataKey || (exports.DataKey = {}));
2302 2072
2303 },{}]},{},[2]) 2073 },{}]},{},[2])
2304 -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL0FwcGxpY2F0aW9ucy9MYXlhQWlySURFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvYXBwL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvR2FtZUNvbmZpZy50cyIsInNyYy9NYWluLnRzIiwic3JjL1JlZERyYXdhbC50cyIsInNyYy9UZXN0U2NlbmUudHMiLCJzcmMvZXZlbnQvRXZlbnRDZW50ZXIudHMiLCJzcmMvZXZlbnQvRXZlbnRFbnVtLnRzIiwic3JjL3Nkay9BZE1hbmFnZXIudHMiLCJzcmMvc2RrL0FuZHJvaWRBcHBTZGsudHMiLCJzcmMvc2RrL0FwcFNkay50cyIsInNyYy9zZGsvQmFzZUFwcFNkay50cyIsInNyYy9zZGsvSW9zQXBwU2RrLnRzIiwic3JjL3Nkay9OYXRpdmVBZC50cyIsInNyYy9zZGsvVFRBZFNkay50cyIsInNyYy9zZGsvVHJhY2tpbmdTZGsudHMiLCJzcmMvc2RrL21vZGVsL0Jhc2VNb2RlbC50cyIsInNyYy9zZGsvbW9kZWwvUmVkcGFja2V0TW9kZWwudHMiLCJzcmMvc2RrL21vZGVsL1NoYWtlTW9kZWwudHMiLCJzcmMvc2RrL3Nka0RhdGEvQWRkR29sZERhdGEudHMiLCJzcmMvc2RrL3Nka0RhdGEvR29sZENvbmZpZ0RhdGEudHMiLCJzcmMvc2RrL3Nka0RhdGEvTXlDb2luRGF0YS50cyIsInNyYy91aS9sYXlhTWF4VUkudHMiLCJzcmMvdWl0bC9BcnJheVV0aWxzLnRzIiwic3JjL3VpdGwvRGF0ZVV0aWxzLnRzIiwic3JjL3VpdGwvT2JqZWN0SW5zdGFuY2UudHMiLCJzcmMvdWl0bC9PYmplY3RQb29sLnRzIiwic3JjL3VpdGwvU2NhbGVCdXR0b25TY3JpcHQudHMiLCJzcmMvdWl0bC9VdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztB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WUFBWSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJ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RDtJQUFBO0lBaUJBLENBQUM7SUFoQlUsbUJBQUksR0FBWCxVQUFZLEdBQUcsRUFBRSxVQUF5QjtRQUExQyxpQkFJQztRQUhHLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxHQUFHLEVBQUUsSUFBSTtZQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELHNCQUFPLEdBQVAsVUFBUSxHQUFXLEVBQUUsS0FBVTtRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDcEQsQ0FBQztJQUNELHNCQUFPLEdBQVAsVUFBUSxHQUFXO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsc0JBQWtCLFNBQUM7YUFBbkI7WUFDSSxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7UUFDekQsQ0FBQzs7O09BQUE7SUFDTCxXQUFDO0FBQUQsQ0FqQkEsQUFpQkMsSUFBQTs7QUFFRCxJQUFZLE9BT1g7QUFQRCxXQUFZLE9BQU87SUFDZixrREFBdUMsQ0FBQTtJQUN2QyxzREFBMkMsQ0FBQTtJQUMzQywwQ0FBK0IsQ0FBQTtJQUMvQiw4QkFBbUIsQ0FBQTtJQUNuQixnQ0FBcUIsQ0FBQTtJQUNyQixnQ0FBcUIsQ0FBQTtBQUN6QixDQUFDLEVBUFcsT0FBTyxHQUFQLGVBQU8sS0FBUCxlQUFPLFFBT2xCIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxufSkoKTtcclxuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlRoaXMgY2xhc3MgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgTGF5YUFpcklERSwgcGxlYXNlIGRvIG5vdCBtYWtlIGFueSBtb2RpZmljYXRpb25zLiAqL1xyXG5pbXBvcnQgVGVzdFNjZW5lIGZyb20gXCIuL1Rlc3RTY2VuZVwiXG5pbXBvcnQgU2NhbGVCdXR0b25TY3JpcHQgZnJvbSBcIi4vdWl0bC9TY2FsZUJ1dHRvblNjcmlwdFwiXG5pbXBvcnQgUmVkRHJhd2FsIGZyb20gXCIuL1JlZERyYXdhbFwiXG5pbXBvcnQgTmF0aXZlQWQgZnJvbSBcIi4vc2RrL05hdGl2ZUFkXCJcclxuLypcclxuKiDmuLjmiI/liJ3lp4vljJbphY3nva47XHJcbiovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVDb25maWd7XHJcbiAgICBzdGF0aWMgd2lkdGg6bnVtYmVyPTc1MDtcclxuICAgIHN0YXRpYyBoZWlnaHQ6bnVtYmVyPTEzMzQ7XHJcbiAgICBzdGF0aWMgc2NhbGVNb2RlOnN0cmluZz1cImZpeGVkd2lkdGhcIjtcclxuICAgIHN0YXRpYyBzY3JlZW5Nb2RlOnN0cmluZz1cIm5vbmVcIjtcclxuICAgIHN0YXRpYyBhbGlnblY6c3RyaW5nPVwidG9wXCI7XHJcbiAgICBzdGF0aWMgYWxpZ25IOnN0cmluZz1cImxlZnRcIjtcclxuICAgIHN0YXRpYyBzdGFydFNjZW5lOmFueT1cIlRlc3RTY2VuZS5zY2VuZVwiO1xyXG4gICAgc3RhdGljIHNjZW5lUm9vdDpzdHJpbmc9XCJcIjtcclxuICAgIHN0YXRpYyBkZWJ1Zzpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIHN0YXQ6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBwaHlzaWNzRGVidWc6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBleHBvcnRTY2VuZVRvSnNvbjpib29sZWFuPXRydWU7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe31cclxuICAgIHN0YXRpYyBpbml0KCl7XHJcbiAgICAgICAgdmFyIHJlZzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XHJcbiAgICAgICAgcmVnKFwiVGVzdFNjZW5lLnRzXCIsVGVzdFNjZW5lKTtcbiAgICAgICAgcmVnKFwidWl0bC9TY2FsZUJ1dHRvblNjcmlwdC50c1wiLFNjYWxlQnV0dG9uU2NyaXB0KTtcbiAgICAgICAgcmVnKFwiUmVkRHJhd2FsLnRzXCIsUmVkRHJhd2FsKTtcbiAgICAgICAgcmVnKFwic2RrL05hdGl2ZUFkLnRzXCIsTmF0aXZlQWQpO1xyXG4gICAgfVxyXG59XHJcbkdhbWVDb25maWcuaW5pdCgpOyIsImltcG9ydCBHYW1lQ29uZmlnIGZyb20gXCIuL0dhbWVDb25maWdcIjtcclxuaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi9zZGsvQWRNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IEFwcFNkayB9IGZyb20gXCIuL3Nkay9BcHBTZGtcIjtcclxuaW1wb3J0IFJlZHBhY2tldE1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9SZWRwYWNrZXRNb2RlbFwiO1xyXG5pbXBvcnQgU2hha2VNb2RlbCBmcm9tIFwiLi9zZGsvbW9kZWwvU2hha2VNb2RlbFwiO1xyXG5jbGFzcyBNYWluIHtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdC8v5qC55o2uSURF6K6+572u5Yid5aeL5YyW5byV5pOOXHRcdFxyXG5cdFx0aWYgKHdpbmRvd1tcIkxheWEzRFwiXSkgTGF5YTNELmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQpO1xyXG5cdFx0ZWxzZSBMYXlhLmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQsIExheWFbXCJXZWJHTFwiXSk7XHJcblx0XHRMYXlhW1wiUGh5c2ljc1wiXSAmJiBMYXlhW1wiUGh5c2ljc1wiXS5lbmFibGUoKTtcclxuXHRcdExheWFbXCJEZWJ1Z1BhbmVsXCJdICYmIExheWFbXCJEZWJ1Z1BhbmVsXCJdLmVuYWJsZSgpO1xyXG5cdFx0TGF5YS5zdGFnZS5zY2FsZU1vZGUgPSBHYW1lQ29uZmlnLnNjYWxlTW9kZTtcclxuXHRcdExheWEuc3RhZ2Uuc2NyZWVuTW9kZSA9IEdhbWVDb25maWcuc2NyZWVuTW9kZTtcclxuXHRcdExheWEuc3RhZ2UuYWxpZ25WID0gR2FtZUNvbmZpZy5hbGlnblY7XHJcblx0XHRMYXlhLnN0YWdlLmFsaWduSCA9IEdhbWVDb25maWcuYWxpZ25IO1xyXG5cdFx0Ly/lhbzlrrnlvq7kv6HkuI3mlK/mjIHliqDovb1zY2VuZeWQjue8gOWcuuaZr1xyXG5cdFx0TGF5YS5VUkwuZXhwb3J0U2NlbmVUb0pzb24gPSBHYW1lQ29uZmlnLmV4cG9ydFNjZW5lVG9Kc29uO1xyXG5cclxuXHRcdC8v5omT5byA6LCD6K+V6Z2i5p2/77yI6YCa6L+HSURF6K6+572u6LCD6K+V5qih5byP77yM5oiW6ICFdXJs5Zyw5Z2A5aKe5YqgZGVidWc9dHJ1ZeWPguaVsO+8jOWdh+WPr+aJk+W8gOiwg+ivlemdouadv++8iVxyXG5cdFx0aWYgKEdhbWVDb25maWcuZGVidWcgfHwgTGF5YS5VdGlscy5nZXRRdWVyeVN0cmluZyhcImRlYnVnXCIpID09IFwidHJ1ZVwiKSBMYXlhLmVuYWJsZURlYnVnUGFuZWwoKTtcclxuXHRcdGlmIChHYW1lQ29uZmlnLnBoeXNpY3NEZWJ1ZyAmJiBMYXlhW1wiUGh5c2ljc0RlYnVnRHJhd1wiXSkgTGF5YVtcIlBoeXNpY3NEZWJ1Z0RyYXdcIl0uZW5hYmxlKCk7XHJcblx0XHRpZiAoR2FtZUNvbmZpZy5zdGF0KSBMYXlhLlN0YXQuc2hvdygpO1xyXG5cdFx0TGF5YS5hbGVydEdsb2JhbEVycm9yID0gdHJ1ZTtcclxuXHJcblx0XHQvL+a/gOa0u+i1hOa6kOeJiOacrOaOp+WItu+8jHZlcnNpb24uanNvbueUsUlEReWPkeW4g+WKn+iDveiHquWKqOeUn+aIkO+8jOWmguaenOayoeacieS5n+S4jeW9seWTjeWQjue7rea1geeoi1xyXG5cdFx0TGF5YS5SZXNvdXJjZVZlcnNpb24uZW5hYmxlKFwidmVyc2lvbi5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vblZlcnNpb25Mb2FkZWQpLCBMYXlhLlJlc291cmNlVmVyc2lvbi5GSUxFTkFNRV9WRVJTSU9OKTtcclxuXHR9XHJcblxyXG5cdG9uVmVyc2lvbkxvYWRlZCgpOiB2b2lkIHtcclxuXHRcdC8v5r+A5rS75aSn5bCP5Zu+5pig5bCE77yM5Yqg6L295bCP5Zu+55qE5pe25YCZ77yM5aaC5p6c5Y+R546w5bCP5Zu+5Zyo5aSn5Zu+5ZCI6ZuG6YeM6Z2i77yM5YiZ5LyY5YWI5Yqg6L295aSn5Zu+5ZCI6ZuG77yM6ICM5LiN5piv5bCP5Zu+XHJcblx0XHRMYXlhLkF0bGFzSW5mb01hbmFnZXIuZW5hYmxlKFwiZmlsZWNvbmZpZy5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vbkNvbmZpZ0xvYWRlZCkpO1xyXG5cdH1cclxuXHJcblx0b25Db25maWdMb2FkZWQoKTogdm9pZCB7XHJcblxyXG5cdFx0dGhpcy5pbml0RGF0YSgpO1xyXG5cdFx0Ly/liqDovb1JREXmjIflrprnmoTlnLrmma9cclxuXHRcdEdhbWVDb25maWcuc3RhcnRTY2VuZSAmJiBMYXlhLlNjZW5lLm9wZW4oR2FtZUNvbmZpZy5zdGFydFNjZW5lKTtcclxuXHR9XHJcblxyXG5cdC8qKuWIneWni+WMllNESyAqL1xyXG5cdGFzeW5jIGluaXREYXRhKCkge1xyXG5cdFx0Lyoq6ZqQ6JeP5ZCv5Yqo5bGPICovXHJcblx0XHRBcHBTZGsuSS5oaWRlU3BsYXNoKClcclxuXHRcdC8qKuWIneWni+WMlmFkayDojrflj5ZhcHDphY3nva7kv6Hmga8gKi9cclxuXHRcdEFwcFNkay5JLmluaXQoKTtcclxuXHRcdC8qKumihOWKoOi9veinhumikSAqL1xyXG5cdFx0QWRNYW5hZ2VyLkkuaW5pdCgpO1xyXG5cdFx0Lyoq6I635Y+W57qi5YyF6YWN572uICDliJ3lp4vljJbmlbDmja4gKi9cclxuXHRcdGF3YWl0IFJlZHBhY2tldE1vZGVsLkkuaW5pdCgpO1xyXG5cdFx0Lyoq5Yid5aeL5YyW5pGH5LiA5pGH55qE5pWw5o2uICovXHJcblx0XHRhd2FpdCBTaGFrZU1vZGVsLkkuaW5pdCgpXHJcblx0fVxyXG59XHJcbi8v5r+A5rS75ZCv5Yqo57G7XHJcbm5ldyBNYWluKCk7XHJcbiIsImltcG9ydCBSZWRwYWNrZXRNb2RlbCBmcm9tIFwiLi9zZGsvbW9kZWwvUmVkcGFja2V0TW9kZWxcIjtcbmltcG9ydCB7IEV2ZW50Q2VudGVyIH0gZnJvbSBcIi4vZXZlbnQvRXZlbnRDZW50ZXJcIjtcbmltcG9ydCB7IEV2ZW50RW51bSB9IGZyb20gXCIuL2V2ZW50L0V2ZW50RW51bVwiO1xuLyoqXG4gKiDkuLvnlYzpnaIgIOmHkeW4gemHkeminVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWREcmF3YWwgZXh0ZW5kcyBMYXlhLlNjcmlwdCB7XG4gICAgLyoqIEBwcm9wIHtuYW1lOmNvaW5sYWIsIHRpcHM6XCLph5HluIFcIiwgdHlwZTpOb2RlfSovXG4gICAgY29pbmxhYjogTGF5YS5MYWJlbDtcbiAgICAvKiogQHByb3Age25hbWU6dGlwbGFiLCB0aXBzOlwi5o+Q56S6XCIsIHR5cGU6Tm9kZX0qL1xuICAgIHRpcGxhYjogTGF5YS5MYWJlbDtcblxuICAgIHByaXZhdGUgdG90YWxDb2luOiBudW1iZXIgPSAxMTA7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfVxuICAgIG9uU3RhcnQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhcigpO1xuICAgICAgICAvLyB0aGlzLnRpcGxhYi52aXNpYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIG9uRW5hYmxlKCkge1xuICAgICAgICBFdmVudENlbnRlci5hZGQoRXZlbnRFbnVtLkFQUF9TSE9XLCB0aGlzLCB0aGlzLnVwZGF0ZVN0YXIpO1xuICAgICAgICBFdmVudENlbnRlci5hZGQoRXZlbnRFbnVtLlVQREFURV9DT0lOLCB0aGlzLCB0aGlzLnVwZGF0ZVN0YXIpO1xuICAgIH1cblxuICAgIG9uRGlzYWJsZSgpIHtcbiAgICAgICAgRXZlbnRDZW50ZXIucmVtb3ZlKEV2ZW50RW51bS5BUFBfU0hPVywgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICAgICAgRXZlbnRDZW50ZXIucmVtb3ZlKEV2ZW50RW51bS5VUERBVEVfQ09JTiwgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICB9XG5cbiAgICBhc3luYyB1cGRhdGVTdGFyKCkge1xuICAgICAgICBsZXQgY29pbiA9IGF3YWl0IFJlZHBhY2tldE1vZGVsLkkuZ2V0VG90YWxDb2luKCk7XG4gICAgICAgIC8vIGxldCBjb2luID0gMTAwMFxuICAgICAgICB0aGlzLnRvdGFsQ29pbiA9IGNvaW47XG4gICAgICAgIHRoaXMuY29pbmxhYi50ZXh0ID0gJycgKyBjb2luO1xuICAgICAgICBsZXQgc3RyID0gJ+WPr+aPkOeOsCc7XG4gICAgICAgIC8qKuabtOaWsOS4i+S4i+S4gOasoeaPkOeOsOeahOmineW6piAqL1xuICAgICAgICBsZXQgbmV4dERyYXdhbCA9IGF3YWl0IFJlZHBhY2tldE1vZGVsLkkubWluV2l0aERyYXdhbCgpO1xuICAgICAgICBpZiAodGhpcy50b3RhbENvaW4gPiAwKSB7XG4gICAgICAgICAgICBsZXQgbGVmdENvaW4gPSBuZXh0RHJhd2FsIC0gdGhpcy50b3RhbENvaW47XG4gICAgICAgICAgICBpZiAobGVmdENvaW4gPiAwKVxuICAgICAgICAgICAgICAgIHN0ciA9IGDov5jlt64keyhsZWZ0Q29pbiAvIDEwMDAwKS50b0ZpeGVkKDMpfemHkemineWPr+aPkOeOsGA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aXBsYWIudGV4dCA9IHN0cjtcbiAgICAgICAgdGhpcy50aXBsYWIudmlzaWJsZSA9IEJvb2xlYW4obmV4dERyYXdhbCk7XG4gICAgfVxufSIsImltcG9ydCB7IHVpIH0gZnJvbSBcIi4vdWkvbGF5YU1heFVJXCI7XG5pbXBvcnQgQWRNYW5hZ2VyIGZyb20gXCIuL3Nkay9BZE1hbmFnZXJcIjtcbmltcG9ydCB7IEFwcFNkayB9IGZyb20gXCIuL3Nkay9BcHBTZGtcIjtcbmltcG9ydCBTaGFrZU1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9TaGFrZU1vZGVsXCI7XG5pbXBvcnQgUmVkcGFja2V0TW9kZWwgZnJvbSBcIi4vc2RrL21vZGVsL1JlZHBhY2tldE1vZGVsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3RTY2VuZSBleHRlbmRzIHVpLlRlc3RTY2VuZVVJIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLy/lhbPpl63lpJrngrnop6bmjqfvvIzlkKbliJnlsLHml6DmlYzkuoZcbiAgICAgICAgTGF5YS5Nb3VzZU1hbmFnZXIubXVsdGlUb3VjaEVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLVRlc3RTY2VuZS0tLS0tLS0nKVxuICAgICAgICB0aGlzLk5hdGl2ZUFELnZpc2libGUgPSBmYWxzZTtcblxuICAgIH1cblxuICAgIG9uRW5hYmxlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ0blNlcnZlci5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5TZXJ2ZXIpO1xuICAgICAgICB0aGlzLmJ0bkRyYXdhbC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5QZXJzb25hbCk7XG4gICAgICAgIHRoaXMuYnRuSW52aXRlLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuaW52aXRhdGlvbik7XG4gICAgICAgIHRoaXMuYnRuX3NoYWtlLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMudG91Y2hTaGFrZSk7XG4gICAgICAgIHRoaXMuYnRuUHJlbG9hZEFELm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMucHJlbG9hZEFEKTtcbiAgICAgICAgdGhpcy5idG5TaG93QmFubmVyLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuc2hvd0Jhbm5lcik7XG4gICAgICAgIHRoaXMuYnRuU2hvd0Z1bGxBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dGdWxsQWQpO1xuICAgICAgICB0aGlzLmJ0blNob3dOYXRpdmVBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dOYXRpdmVBZCk7XG4gICAgICAgIHRoaXMuYnRuU2hvd0ludGVyQWQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5zaG93SW50ZXJBZCk7XG4gICAgICAgIHRoaXMuYnRuUmV3YXJkQWQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5zaG93UmV3YXJkQWQpO1xuICAgICAgICB0aGlzLmJ0blJlZHBhY2tldC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm9wZW5SZWRwYWNrZXQpO1xuXG4gICAgfVxuXG4gICAgLyoq6aKE5Yqg6L295bm/5ZGKICovXG4gICAgYXN5bmMgcHJlbG9hZEFEKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tcHJlbG9hZEFELS0tLS0tLScpXG4gICAgICAgIC8vIGF3YWl0IEFkTWFuYWdlci5JLmluaXQoKTtcbiAgICAgICAgTXlCcmlkZ2UudGVzdFJldHVybihmdW5jdGlvbiAoLi4uYXJyYXkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiLS0tLS0tLXdlYi0tLS0tLS0tb25DbGljay0tLS0tPj5jb2NvcyBKUy0tLS0tLS1NeUJyaWRnZS50ZXN0UmV0dXJuLS0tLS0tXCIgKyBKU09OLnN0cmluZ2lmeShhcnJheSkpO1xuXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKuaYvuekuuWFqOWxj+W5v+WRiiAqL1xuICAgIHNob3dGdWxsQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93RnVsbEFkLS0tLS0tLScpXG4gICAgICAgIC8vIEFkTWFuYWdlci5JLnNob3dGdWxsQWQoKTtcbiAgICAgICAgdmFyIHJldCA9IE15QnJpZGdlLm1hcFRvU3RyaW5nKHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBcImNvdW50XCI6IDIsIFwidGl0bGVcIjogW3sgXCJuYW1lXCI6IFwibm5uXCIsIFwidmFsdWVcIjogXCJubm52YWx1ZVwiLCBcImRlZmF1bHRfc2hvd1wiOiAxIH1cbiAgICAgICAgICAgICAgICAgICAgLCB7IFwibmFtZVwiOiBcIm1tbVwiLCBcInZhbHVlXCI6IFwibW1tdmFsdWVcXFwiYWFzZGFzZFwiIH1dXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiLS0tLS0tLXdlYi0tLS0tLS0tb25DbGljay0tLS0tPj5jb2NvcyBKUy0tLS0tLS1NeUJyaWRnZS5tYXBUb1N0cmluZy0tLS0tLVwiICsgSlNPTi5zdHJpbmdpZnkocmV0KSk7XG4gICAgfVxuICAgIC8qKuaYvuekumJhbm5lciAqL1xuICAgIHNob3dCYW5uZXIoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93QmFubmVyLS0tLS0tLScpXG4gICAgICAgIEFkTWFuYWdlci5JLnNob3dCYW5uZXIoKTtcbiAgICB9XG5cbiAgICAvKirkv6Hmga/mtYHlub/lkYogKi9cbiAgICBzaG93TmF0aXZlQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93TmF0aXZlQWQtLS0tLS0tJylcbiAgICAgICAgdGhpcy5OYXRpdmVBRC52aXNpYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKirmj5LlsY/lub/lkYogKi9cbiAgICBzaG93SW50ZXJBZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXNob3dJbnRlckFkLS0tLS0tLScpXG4gICAgICAgIFxuICAgICAgICBBZE1hbmFnZXIuSS5zaG93SW50ZXJBZCgpO1xuICAgIH1cbiAgICAvKirmv4DlirHop4bpopHlub/lkYogKi9cbiAgICBhc3luYyBzaG93UmV3YXJkQWQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93UmV3YXJkQWQtLS0tLS0tJylcbiAgICAgICAgXG4gICAgICAgIGF3YWl0IEFkTWFuYWdlci5JLnNob3dSZXdhcmRBZCgpO1xuICAgICAgICAvKirmiJDlip/lkI7miafooYzlr7nlupTnmoTlpZblirEgKi9cbiAgICB9XG4gICAgLyoq5oSP6KeB5Y+N6aaIICovXG4gICAgb3BlblNlcnZlcigpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLW9wZW5TZXJ2ZXItLS0tLS0tJylcbiAgICAgICAgQXBwU2RrLkkuZmVlZGJhY2soKTtcbiAgICB9XG5cblxuICAgIG9wZW5SZWRwYWNrZXQoKSB7XG4gICAgICAgIFJlZHBhY2tldE1vZGVsLkkuY2hlY2tSZWRwYWNrZXQoKTtcbiAgICAgICAgY29uc29sZS5sb2coJ+e6ouWMheiOt+WPlue7k+aenO+8mmN1clJlZHBhY2tldCcgKyBSZWRwYWNrZXRNb2RlbC5JLmN1clJlZHBhY2tldClcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ+e6ouWMheiOt+WPlue7k+aenO+8micgKyBKU09OLnN0cmluZ2lmeShkYXRhKSlcbiAgICAgICAgLy8gVmlld01hbmFnZXIuSS5vcGVuUG9wd2luKFJlZHBhY2tldFBvcHdpbiwgMCk7XG4gICAgfVxuXG4gICAgLyoq5omT5byA5Liq5Lq65Lit5b+DICovXG4gICAgb3BlblBlcnNvbmFsKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tb3BlblNlcnZlci0tLS0tLS0nKVxuICAgICAgICBBcHBTZGsuSS5wZXJzb25hbCgwKTtcbiAgICB9XG4gICAgLyoq6YKA6K+35aW95Y+LICovXG4gICAgaW52aXRhdGlvbigpIHtcbiAgICAgICAgQXBwU2RrLkkuaW52aXRhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDFcdOmHkeW4gVxuICAgIDJcdOa/gOWKseinhumikeWQjumHkeW4gVxuICAgIDNcdDQgNSA2IDcg5ri45oiP5Lit5a+55bqU55qE6YGT5YW3XG4gICAgOFx056m6XG4gICAgICovXG4gICAgdG91Y2hTaGFrZSgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXRvdWNoU2hha2UtLS0tLS0tJylcbiAgICAgICAgLy8gdGhpcy5za2luLmJ0blNoYWtlQW5pLnBsYXkoMCk7XG4gICAgICAgIEFwcFNkay5JLnZpYnJhdGUoKTtcbiAgICAgICAgLy8gVmlld01hbmFnZXIuSS5zaG93TW9kYWwoSGludE1vZGFsLCAnIOS7iuK9h+asoeaVsOW3suK9pOWujO+8jOivt+aYjuK9h+WGjeadpScpO1xuICAgICAgICAvLyB0aGlzLnNraW4uaGFuZEFuaS5zdG9wKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiAxLuWbnuWOu+aYn+aYnyDpgZPlhbcgXG4gICAgICAgICAqIDIu57qi5YyFICAg55u05o6l6I635b6X4r6m5biB77yb5oiW6ICF55u05o6l5by55r+A5Yqx6KeG6aKR5ZCO77yM6I635b6X4r6m5biBXG4gICAgICAgICAqIDMu5peg6YGT5YW3XG4gICAgICAgICAqIOebtOaOpeWxleK9sOaPkuWxj1xuICAgICAgICAgKiAgKi9cbiAgICAgICAgbGV0IGRhdGEgPSBTaGFrZU1vZGVsLkkuZ2V0U2hha2VUeXBlKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCfmkYfkuIDmkYfojrflj5bnu5PmnpzvvJonICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuO1xuICAgICAgICBsZXQgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAvKiogJ+iwouiwouWPguS4ju+8jOS4i+asoeWlvei/kO+8gScqLztcbiAgICAgICAgICAgICAgICBBZE1hbmFnZXIuSS5zaG93SW50ZXJBZCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29pbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHRoaXMud2F0Y2hBRENvaW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb3BzKGRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UHJvcHMoZGF0YSkge1xuICAgICAgICBsZXQgYm9vc3RlcjtcbiAgICAgICAgbGV0IHJld2FyZE51bSA9IGRhdGEubnVtO1xuICAgICAgICBsZXQgdHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIOWkhOeQhua4uOaIj+S4reeahOmBk+WFt+aYvuekulxuICAgICAgICAgKi9cbiAgICAgICAgLy8gc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIC8vICAgICBjYXNlIDQ6XG4gICAgICAgIC8vICAgICAgICAgYm9vc3RlciA9IEJvb3N0ZXJUeXBlLlJlbW92ZTtcbiAgICAgICAgLy8gICAgICAgICBicmVhaztcbiAgICAgICAgLy8gICAgIGNhc2UgNjpcbiAgICAgICAgLy8gICAgICAgICBib29zdGVyID0gQm9vc3RlclR5cGUuQ2hhbmdlO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyAgICAgY2FzZSA1OlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5SZWZyZXNoO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyAgICAgY2FzZSA3OlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5SYW5kUmVtb3ZlO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyAgICAgY2FzZSAzOlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5TdGFyO1xuICAgICAgICAvLyAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIFZpZXdNYW5hZ2VyLkkub3BlblBvcHdpbihSZWNlaXZlUHJvcHNQb3B3aW4sIGJvb3N0ZXIsIHJld2FyZE51bSk7XG5cbiAgICB9XG4gICAgLyoqXG4gICAgICog55yL5bm/5ZGK6I635b6X57qi5YyFXG4gICAgICovXG4gICAgYXN5bmMgd2F0Y2hBRENvaW4oKSB7XG4gICAgICAgIGF3YWl0IEFkTWFuYWdlci5JLnNob3dSZXdhcmRBZCgpO1xuICAgICAgICB0aGlzLmdldENvaW4oKTtcbiAgICB9XG4gICAgLyoq55u05o6l6I635b6X57qi5YyFICovXG4gICAgZ2V0Q29pbigpIHtcbiAgICAgICAgLy9cYuWIt+aWsOaAu+mHkeW4gVxuICAgICAgICAvLyBBcHBNYW5hZ2VyLkkucmVkcGFja2V0LmdldFJlcGFja2V0KClcbiAgICAgICAgLy8gVmlld01hbmFnZXIuSS5vcGVuUG9wd2luKFJlZFBhY2tldFJld2FyZCwgMik7XG4gICAgfVxufSIsImltcG9ydCB7IEV2ZW50RW51bSB9IGZyb20gXCIuL0V2ZW50RW51bVwiO1xuXG4vKlxuKiBuYW1lO1xuKi9cbmV4cG9ydCBjbGFzcyBFdmVudENlbnRlciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBMYXlhLkV2ZW50RGlzcGF0Y2hlcjtcbiAgICBwcml2YXRlIHN0YXRpYyBnZXQgSSgpOiBMYXlhLkV2ZW50RGlzcGF0Y2hlciB7XG4gICAgICAgIHdpbmRvd1snZXYnXSA9IHRoaXMuX2luc3RhbmNlO1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IExheWEuRXZlbnREaXNwYXRjaGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGVtaXQoZXZlbnQ6IEV2ZW50RW51bSwgLi4uYXJncykge1xuICAgICAgICB0aGlzLkkuZXZlbnQoZXZlbnQudG9TdHJpbmcoKSwgYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGQodHlwZTogRXZlbnRFbnVtLCBjYWxsZXI6IGFueSwgbGlzdGVuZXI6IEZ1bmN0aW9uLCBhcmdzPzogQXJyYXk8YW55Pikge1xuICAgICAgICB0aGlzLkkub24odHlwZS50b1N0cmluZygpLCBjYWxsZXIsIGxpc3RlbmVyLCBhcmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlbW92ZSh0eXBlOiBFdmVudEVudW0sIGNhbGxlcjogYW55LCBsaXN0ZW5lcjogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5JLm9mZih0eXBlLnRvU3RyaW5nKCksIGNhbGxlciwgbGlzdGVuZXIpO1xuICAgIH1cbn0iLCJleHBvcnQgZW51bSBFdmVudEVudW0ge1xuXG5cdENIRUNLX1JFRFBBQ0tFVCA9IDxhbnk+J2NoZWNrX3JlZHBhY2tldCcsXG5cdEFQUF9TSE9XID0gPGFueT4nYXBwLnNob3cnLFxuXHRBUFBfSElERSA9IDxhbnk+J2FwcC5oaWRlJyxcblxuXG5cdFVQREFURV9DT0lOID0gPGFueT4ndXBkYXRlLmNvaW4nLFxuXG59IiwiaW1wb3J0IFRUQWRTZGsgZnJvbSBcIi4vVFRBZFNka1wiO1xyXG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFkTWFuYWdlciB7XHJcbiAgICBwcml2YXRlIGxhc3RWaWRlb1RpbWU6IG51bWJlcjtcclxuXHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHRoaXMucHJlbG9hZFJld2FyZEFkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwcmVsb2FkUmV3YXJkQWQoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLnNob3dSZXdhcmRWaWRlb0FkKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dSZXdhcmRBZCgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gYXdhaXQgVFRBZFNkay5JLnNob3dSZXdhcmRWaWRlb0FkKCk7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdFZpZGVvVGltZSA9IExheWEudGltZXIuY3VyclRpbWVyO1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJldCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJlbG9hZEZ1bGxBZCgpIHtcclxuICAgICAgICBUVEFkU2RrLkkubG9hZEZ1bGxTY3JlZW5WaWRlb0FkKCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByZWxvYWRJbnRlckFkKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5sb2FkRnVsbFNjcmVlblZpZGVvQWQoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd0Z1bGxBZCgpIHtcclxuICAgICAgICAvLyBjb25zb2xlLndhcm4oJ2Z1bGwnKTtcclxuICAgICAgICAvLyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJldCA9IGF3YWl0IFRUQWRTZGsuSS5sb2FkRnVsbFNjcmVlblZpZGVvQWQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcmVsb2FkRnVsbEFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEZ1bGxBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dJbnRlckFkKCkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUud2FybignZnVsbCcpO1xyXG4gICAgICAgIC8vIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmV0ID0gYXdhaXQgVFRBZFNkay5JLnNob3dJbnRlcmFjdGlvbkV4cHJlc3NBZCgpO1xyXG4gICAgICAgICAgICB0aGlzLnByZWxvYWRJbnRlckFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEludGVyQWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgY2hlY2tWaWRlb0luQ2QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFZpZGVvVGltZSAmJiAoTGF5YS50aW1lci5jdXJyVGltZXIgLSB0aGlzLmxhc3RWaWRlb1RpbWUgPD0gMzAwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dCYW5uZXIoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWRCYW5uZXJFeHByZXNzQWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlQmFubmVyKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5oaWRlQWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93TmF0aXZlQWQoeCwgeSwgdywgaCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5sb2FkTmF0aXZlRXhwcmVzc0FkKCB4LCB5LCB3LCBoKTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlTmF0aXZlQWQoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmhpZGVBZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuICAgIHN0YXRpYyBnZXQgSSgpOiBBZE1hbmFnZXIge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoQWRNYW5hZ2VyKTtcclxuICAgIH1cclxufVxyXG5cclxuIiwiaW1wb3J0IEJhc2VBcHBTZGsgZnJvbSBcIi4vQmFzZUFwcFNka1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5kcm9pZEFwcFNkayBleHRlbmRzIEJhc2VBcHBTZGsge1xyXG4gICAgZ2V0IHN5c3RlbSgpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxuXHJcbiAgICBjYWxsQXBwKGNtZDogc3RyaW5nLCAuLi5wYXJhbXMpIHtcclxuICAgICAgICB0aGlzLmJyaWRnZSAmJiB0aGlzLmJyaWRnZS5jYWxsKGNtZCwgLi4ucGFyYW1zKTtcclxuICAgICAgICAvLyB0aGlzLmJyaWRnZSAmJiBhbGVydChKU09OLnN0cmluZ2lmeSh0aGlzLmJyaWRnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxBcHBXaXRoQmFjayhjYWxsQmFjazogRnVuY3Rpb24sIGNtZDogc3RyaW5nLCAuLi5wYXJhbXMpIHtcclxuICAgICAgICB0aGlzLmJyaWRnZSAmJiB0aGlzLmJyaWRnZS5jYWxsV2l0aEJhY2soY2FsbEJhY2ssIGNtZCwgLi4ucGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGJyaWRnZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYnJpZGdlIHx8ICh0aGlzLl9icmlkZ2UgPSB0aGlzLmNyZWF0ZUNsYXNzKCdjb20ucHVjaGkuc2RrZGVtby5KU0JyaWRnZScpKTtcclxuICAgIH1cclxufSIsImltcG9ydCBJb3NBcHBTZGsgZnJvbSBcIi4vSW9zQXBwU2RrXCI7XG5pbXBvcnQgQW5kcm9pZEFwcFNkayBmcm9tIFwiLi9BbmRyb2lkQXBwU2RrXCI7XG5pbXBvcnQgQmFzZUFwcFNkayBmcm9tIFwiLi9CYXNlQXBwU2RrXCI7XG5cbmV4cG9ydCBjbGFzcyBBcHBTZGsge1xuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogQmFzZUFwcFNkaztcbiAgICBzdGF0aWMgZ2V0IEkoKTogQmFzZUFwcFNkayB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGxldCBjb25jaENvbmZpZyA9IHdpbmRvd1snY29uY2hDb25maWcnXTtcbiAgICAgICAgICAgIGxldCBvcyA9IGNvbmNoQ29uZmlnICYmIGNvbmNoQ29uZmlnLmdldE9TKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKG9zKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcIkNvbmNoLWlvc1wiOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnN0YW5jZSA9IG5ldyBJb3NBcHBTZGs7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJDb25jaC1hbmRyb2lkXCI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IEFuZHJvaWRBcHBTZGs7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IEJhc2VBcHBTZGs7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2luZG93WydBcHBTZGsnXSA9IHRoaXMuX2luc3RhbmNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgICB9XG59IiwiaW1wb3J0IEFkZEdvbGREYXRhIGZyb20gXCIuL3Nka0RhdGEvQWRkR29sZERhdGFcIjtcclxuaW1wb3J0IE15Q29pbkRhdGEgZnJvbSBcIi4vc2RrRGF0YS9NeUNvaW5EYXRhXCI7XHJcbmltcG9ydCB7IEdvbGRDb25maWdEYXRhIH0gZnJvbSBcIi4vc2RrRGF0YS9Hb2xkQ29uZmlnRGF0YVwiO1xyXG5cclxuLyoqIOi/lOWbnuWPguaVsOexu+WeiyAqL1xyXG5pbnRlcmZhY2UgSUFwcFJlc3VsdDxUPiB7XHJcbiAgICAvKiog6ZSZ6K+v56CBICovXHJcbiAgICBjb2RlPzogbnVtYmVyO1xyXG4gICAgLyoqIOi/lOWbnuaVsOaNriAqL1xyXG4gICAgZGF0YT86IFQ7XHJcbn1cclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNlQXBwU2RrIHtcclxuICAgIHByb3RlY3RlZCBfYnJpZGdlOiBhbnk7XHJcbiAgICBwcml2YXRlIG5ldE9uQXJyOiBBcnJheTxGdW5jdGlvbj4gPSBbXTtcclxuICAgIHByaXZhdGUgbmV0T2ZmQXJyOiBBcnJheTxGdW5jdGlvbj4gPSBbXTtcclxuICAgIHByaXZhdGUgX3dpZHRoOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIF9oZWlnaHQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgX2NoYW5uZWw6IHN0cmluZztcclxuICAgIHByaXZhdGUgX3ZlcnNpb246IHN0cmluZztcclxuICAgIHByaXZhdGUgX2xldmVsOiBudW1iZXI7XHJcblxyXG4gICAgcHVibGljIHBhbmdvbGluSWQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBhZG5ldElkOiBzdHJpbmc7XHJcblxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICBsZXQgY29uY2ggPSB3aW5kb3dbJ2NvbmNoJ107XHJcbiAgICAgICAgaWYgKGNvbmNoKSB7XHJcbiAgICAgICAgICAgIGNvbmNoLnNldE5ldHdvcmtFdnRGdW5jdGlvbih0aGlzLm5ldHdvcmtFdnRGdW5jLmJpbmQodGhpcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhbGxBcHAoJ3NldEFwcENhbGxiYWNrJywgMSwgJ0FwcFNkay5vblNob3coKScpO1xyXG4gICAgICAgIHRoaXMuY2FsbEFwcCgnc2V0QXBwQ2FsbGJhY2snLCAyLCAnQXBwU2RrLm9uSGlkZSgpJyk7XHJcbiAgICAgICAgdGhpcy5nZXRTeXN0ZW1JbmZvKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U3lzdGVtSW5mbygpIHtcclxuICAgICAgICB0aGlzLmNhbGxBcHBXaXRoQmFjayhyZXQgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tZ2V0U3lzdGVtSW5mby0tLS0tLS0nICsgSlNPTi5zdHJpbmdpZnkocmV0KSlcclxuICAgICAgICAgICAgbGV0IHsgdywgaCwgdmVyc2lvbk5hbWUsIGNoYW5uZWwsIHBhbmdvbGluLCBhZG5ldCwgbGV2ZWwgfSA9IEpTT04ucGFyc2UocmV0KTtcclxuICAgICAgICAgICAgdGhpcy5fd2lkdGggPSB3O1xyXG4gICAgICAgICAgICB0aGlzLl9oZWlnaHQgPSBoO1xyXG4gICAgICAgICAgICB0aGlzLl92ZXJzaW9uID0gdmVyc2lvbk5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWwgPSBjaGFubmVsO1xyXG4gICAgICAgICAgICB0aGlzLnBhbmdvbGluSWQgPSBwYW5nb2xpbjtcclxuICAgICAgICAgICAgdGhpcy5hZG5ldElkID0gYWRuZXQ7XHJcbiAgICAgICAgICAgIHRoaXMuX2xldmVsID0gbGV2ZWw7XHJcbiAgICAgICAgfSwgJ2dldFN5c3RlbUluZm8nLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2hvdygpIHtcclxuICAgICAgICAvLyBFdmVudENlbnRlci5lbWl0KEV2ZW50RW51bS5BUFBfU0hPVyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkhpZGUoKSB7XHJcbiAgICAgICAgLy8gRXZlbnRDZW50ZXIuZW1pdChFdmVudEVudW0uQVBQX0hJREUpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB2aWJyYXRlKCkge1xyXG4gICAgICAgIHRoaXMuY2FsbEFwcCgnb3BlblN5c3RlbUZ1bicsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVTcGxhc2goKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsQXBwKCdoaWRlU3BsYXNoJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoq5by55Ye65o+Q546wICovXHJcbiAgICB3aXRoRHJhd2FsKCkge1xyXG4gICAgICAgIHRoaXMuY2FsbEFwcCgnd2l0aERyYXdhbCcpO1xyXG4gICAgfVxyXG4gICAgLyoq5oSP6KeB5Y+N6aaIICovXHJcbiAgICBmZWVkYmFjaygpIHtcclxuICAgICAgICB0aGlzLmNhbGxBcHAoJ2ZlZWRiYWNrJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBrZXkg6buY6K6kMCDvvIznrb7liLAgMVxyXG4gICAgICovXHJcbiAgICBwZXJzb25hbChrZXkgPSAwKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsQXBwKCdwZXJzb25hbCcsIGtleSk7XHJcbiAgICB9XHJcbiAgICAvKirpgoDor7flpb3lj4sqL1xyXG4gICAgaW52aXRhdGlvbigpIHtcclxuICAgICAgICB0aGlzLmNhbGxBcHAoJ2ludml0YXRpb24nKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgY3VycmVudFNodXQodmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuY2FsbEFwcCgnY3VycmVudFNodXQnLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPlumHkeW4gemFjeihqFxyXG4gICAgICogQHBhcmFtIGtleSAx57qi5YyFICAgMiDmkYfkuIDmkYfnuqLljIVcclxuICAgICAqL1xyXG5cclxuICAgIGFzeW5jICBnZXRHYW1lQ29uZmlnKGtleTogbnVtYmVyID0gMSkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uQ2FsbEJhY2soJ2dldEdhbWVDb25maWcnLCBrZXkpXHJcbiAgICAgICAgR29sZENvbmZpZ0RhdGEuSS5pbml0RGF0YShyZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDopoHmsYLlj5HmlL7ph5HluIFcclxuICAgICAqIEBwYXJhbSBrZXkgMee6ouWMhVxyXG4gICAgICovXHJcblxyXG4gICAgYXN5bmMgYWRkR29sZChrZXk6IG51bWJlciA9IDEpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5vbkNhbGxCYWNrKCdhZGRHb2xkJywga2V5KTtcclxuICAgICAgICBBZGRHb2xkRGF0YS5pbml0RGF0YShyZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBhc3luYyBteUNvaW4oKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25DYWxsQmFjaygnbXlDb2luJylcclxuICAgICAgICBNeUNvaW5EYXRhLmluaXREYXRhKHJlc3VsdCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuXHJcbiAgICB9XHJcbiAgICAvKirojrflj5blvZPliY3mj5DnjrDnmoTmoaPkvY0gKi9cclxuICAgIGFzeW5jIG1pbldpdGhEcmF3YWwoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25DYWxsQmFjaygnbWluV2l0aERyYXdhbCcpO1xyXG4gICAgICAgIGlmICghQm9vbGVhbihwYXJzZUludChyZXN1bHQuY29kZSArICcnKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHJlc3VsdC5kYXRhWydtb25leSddKSAqIDEwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcblxyXG4gICAgb25DYWxsQmFjayhjbWQ6IHN0cmluZywgLi4ucGFyYW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPElBcHBSZXN1bHQ8YW55W10+Pihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2FsbEFwcFdpdGhCYWNrKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXMgPSBKU09OLnBhcnNlKHJlcylcclxuICAgICAgICAgICAgICAgIC8vIHJlcyA9IHsgY29kZTogMTAwMCB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlcy5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7IGNvZGU6IHJlcy5jb2RlLCBkYXRhOiByZXMuZGF0YSB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7IGNvZGU6IHJlcy5jb2RlIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIGNtZCwgLi4ucGFyYW1zKTtcclxuICAgICAgICB9KVxyXG5cclxuXHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNhbGxBcHAoY21kOiBzdHJpbmcsIC4uLnBhcmFtcykge1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxBcHBXaXRoQmFjayhjYWxsQmFjazogRnVuY3Rpb24sIGNtZDogc3RyaW5nLCAuLi5wYXJhbXMpIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG5ldHdvcmtFdnRGdW5jKHR5cGU6IG51bWJlcikge1xyXG4gICAgICAgIGxldCBmdW5jQXJyO1xyXG4gICAgICAgIGlmICh0eXBlID09IDApIHtcclxuICAgICAgICAgICAgZnVuY0FyciA9IHRoaXMubmV0T2ZmQXJyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSA1KSB7XHJcbiAgICAgICAgICAgIGZ1bmNBcnIgPSB0aGlzLm5ldE9uQXJyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZnVuY0Fycikge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZ1bmNBcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGZ1bmNBcnJbaV0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbk5ldE9uKGZ1bmM6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5uZXRPbkFyci5wdXNoKGZ1bmMpO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgb25OZXRPZmYoZnVuYzogRnVuY3Rpb24pIHtcclxuICAgICAgICB0aGlzLm5ldE9mZkFyci5wdXNoKGZ1bmMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsZXZlbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XHJcbiAgICB9XHJcbiAgICBnZXQgd2lkdGgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBoZWlnaHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdmVyc2lvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmVyc2lvbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2hhbm5lbCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGJyaWRnZSgpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlQ2xhc3MobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHdpbmRvd1snUGxhdGZvcm1DbGFzcyddLmNyZWF0ZUNsYXNzKG5hbWUpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJhc2VBcHBTZGsgZnJvbSBcIi4vQmFzZUFwcFNka1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW9zQXBwU2RrIGV4dGVuZHMgQmFzZUFwcFNkayB7XHJcbiAgICBnZXQgc3lzdGVtKCkge1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxBcHAoY21kOiBzdHJpbmcsIC4uLnBhcmFtcykge1xyXG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNtZCArPSAnOic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYnJpZGdlICYmIHRoaXMuYnJpZGdlLmNhbGwoY21kLCAuLi5wYXJhbXMpO1xyXG4gICAgICAgIC8vIHRoaXMuYnJpZGdlICYmIGFsZXJ0KEpTT04uc3RyaW5naWZ5KHRoaXMuYnJpZGdlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsbEFwcFdpdGhCYWNrKGNhbGxCYWNrOiBGdW5jdGlvbiwgY21kOiBzdHJpbmcsIC4uLnBhcmFtcykge1xyXG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNtZCArPSAnOic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYnJpZGdlICYmIHRoaXMuYnJpZGdlLmNhbGxXaXRoQmFjayhjYWxsQmFjaywgY21kLCAuLi5wYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgYnJpZGdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9icmlkZ2UgfHwgKHRoaXMuX2JyaWRnZSA9IHRoaXMuY3JlYXRlQ2xhc3MoJ0pTQnJpZGdlJykpO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi9BZE1hbmFnZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmF0aXZlQWQgZXh0ZW5kcyBMYXlhLlNjcmlwdCB7XG4gICAgb25FbmFibGUoKTogdm9pZCB7XG4gICAgICAgIGxldCBnbG9iYWxQb2ludCA9IHRoaXMuaXRlbS5sb2NhbFRvR2xvYmFsKExheWEuUG9pbnQuRU1QVFksIHRydWUpO1xuICAgICAgICBBZE1hbmFnZXIuSS5zaG93TmF0aXZlQWQoZ2xvYmFsUG9pbnQueCwgZ2xvYmFsUG9pbnQueSwgdGhpcy5pdGVtLndpZHRoLCB0aGlzLml0ZW0uaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBvbkRpc2FibGUoKTogdm9pZCB7XG4gICAgICAgIEFkTWFuYWdlci5JLmhpZGVOYXRpdmVBZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGl0ZW0oKTogTGF5YS5WaWV3IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3duZXIgYXMgYW55O1xuICAgIH1cbn0iLCJpbXBvcnQgeyBBcHBTZGsgfSBmcm9tIFwiLi9BcHBTZGtcIjtcclxuaW1wb3J0IE9iamVjdEluc3RhbmNlIGZyb20gXCIuLi91aXRsL09iamVjdEluc3RhbmNlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUVEFkU2RrIHtcclxuICAgIGFzeW5jIHNob3dSZXdhcmRWaWRlb0FkKCBwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHc6IEFwcFNkay5JLndpZHRoLFxyXG4gICAgICAgICAgICBoOiBBcHBTZGsuSS5oZWlnaHQsXHJcbiAgICAgICAgICAgIHByZWxvYWRpbmc6IHByZWxvYWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpc0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEFwcFNkay5JLmNhbGxBcHBXaXRoQmFjayhyZXQgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHsgY29kZSwgbWVzc2FnZSB9ID0gSlNPTi5wYXJzZShyZXQpO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAtMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCdlcnJvcicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIC8qKifmmoLml6Dop4bpopHlub/lkYrvvIHmr4/ml6Uw54K56YeN572uJyovO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDIwMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDb21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoJ3VuQ29tcGxldGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgJ3Nob3dSZXdhcmRWaWRlb0FkJywgMSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkRnVsbFNjcmVlblZpZGVvQWQoIHByZWxvYWQ6IG51bWJlciA9IDApIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgcHJlbG9hZGluZzogcHJlbG9hZCxcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IGlzQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgQXBwU2RrLkkuY2FsbEFwcFdpdGhCYWNrKHJldCA9PiB7XHJcbiAgICAgICAgICAgIH0sICdsb2FkRnVsbFNjcmVlblZpZGVvQWQnLCAxLCBKU09OLnN0cmluZ2lmeShkYXRhKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWROYXRpdmVFeHByZXNzQWQoIHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcclxuICAgICAgICBsZXQgc2NhbGVYID0gQXBwU2RrLkkud2lkdGggLyBMYXlhLnN0YWdlLndpZHRoO1xyXG4gICAgICAgIGxldCBzY2FsZVkgPSBBcHBTZGsuSS5oZWlnaHQgLyBMYXlhLnN0YWdlLmhlaWdodDtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdzogd2lkdGggKiBzY2FsZVgsXHJcbiAgICAgICAgICAgIGg6IGhlaWdodCAqIHNjYWxlWSxcclxuICAgICAgICAgICAgbGVmdDogeCAqIHNjYWxlWCxcclxuICAgICAgICAgICAgdG9wOiB5ICogc2NhbGVZXHJcbiAgICAgICAgfVxyXG4gICAgICAgIEFwcFNkay5JLmNhbGxBcHBXaXRoQmFjayhyZXQgPT4ge1xyXG4gICAgICAgIH0sICdsb2FkTmF0aXZlRXhwcmVzc0FkJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEJhbm5lckV4cHJlc3NBZCgpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdzogQXBwU2RrLkkud2lkdGgsXHJcbiAgICAgICAgICAgIGg6IEFwcFNkay5JLndpZHRoICogOTAgLyA2MDAsICBcclxuICAgICAgICB9XHJcbiAgICAgICAgQXBwU2RrLkkuY2FsbEFwcFdpdGhCYWNrKHJldCA9PiB7XHJcbiAgICAgICAgfSwgJ2xvYWRCYW5uZXJFeHByZXNzQWQnLCAyLCBKU09OLnN0cmluZ2lmeShkYXRhKSlcclxuICAgIH1cclxuXHJcbiAgICBoaWRlQWQoKSB7XHJcbiAgICAgICAgQXBwU2RrLkkuY2FsbEFwcCgnY2xvc2VfYWR2ZXJfZGlhbG9nJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKCBwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHc6IEFwcFNkay5JLndpZHRoICogMC44LFxyXG4gICAgICAgICAgICBoOiBBcHBTZGsuSS5oZWlnaHQsXHJcbiAgICAgICAgICAgIHByZWxvYWRpbmc6IHByZWxvYWQsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpc0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEFwcFNkay5JLmNhbGxBcHBXaXRoQmFjayhyZXQgPT4ge1xyXG4gICAgICAgICAgICB9LCAnc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG4gICAgXHJcblxyXG4gICAgc3RhdGljIGdldCBJKCk6IFRUQWRTZGsge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoVFRBZFNkaykgYXMgVFRBZFNkaztcclxuICAgIH1cclxufSIsImltcG9ydCB7IEFwcFNkayB9IGZyb20gXCIuL0FwcFNka1wiO1xyXG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcclxuLyoqXHJcbiAqIOS4iuaKpeeDreS6keWfi+eCueK9h+W/l1xyXG4gKiDlhbfkvZPnmoTmiZPngrnpnIDopoHot5/ov5DokKXogZTns7tcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRyYWNraW5nU2RrIHtcclxuICAgIGRvdChrZXk6IHN0cmluZykge1xyXG4gICAgICAgIEFwcFNkay5JLmNhbGxBcHAoJ3RyYWNraW5nX2V2ZW50Jywga2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEkoKTogVHJhY2tpbmdTZGsge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoVHJhY2tpbmdTZGspIGFzIFRyYWNraW5nU2RrO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBUcmFja2luZ0tleSB7XHJcbiAgICBSZWRQYWNrMSA9ICdldmVudF81JyxcclxuICAgIFJlZFBhY2s1ID0gJ2V2ZW50XzYnXHJcbn1cclxuIiwiaW1wb3J0IEFycmF5VXRpbHMgZnJvbSBcIi4uLy4uL3VpdGwvQXJyYXlVdGlsc1wiO1xuXG4vKlxuKiBuYW1lO1xuKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2VNb2RlbCB7XG4gICAgcHJvdGVjdGVkIF9kYXRhOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIHVwZGF0ZUFycjogQXJyYXk8RnVuY3Rpb24+ID0gW107XG4gICAgcHJpdmF0ZSBrZXlVcGRhdGVBcnI6IGFueSA9IHt9O1xuXG4gICAgcHVibGljIGFzeW5jIHVwZGF0ZShkYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RhdGEsXG4gICAgICAgICAgICAuLi5kYXRhXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVBcnIuZm9yRWFjaChmdW5jID0+IHtcbiAgICAgICAgICAgIGZ1bmModGhpcy5fZGF0YSk7XG4gICAgICAgIH0pXG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmtleVVwZGF0ZUFycikge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5rZXlVcGRhdGVBcnJba2V5XTtcbiAgICAgICAgICAgICAgICBhcnIgJiYgYXJyLmZvckVhY2goZnVuYyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmModmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgd2FpdEZvcihrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2RhdGFba2V5XTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjYiA9IGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2ZmVXBkYXRlKGNiLCBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25VcGRhdGUoY2IsIGtleSwgdHJ1ZSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHVibGljIG9uVXBkYXRlKGZ1bmM6IEZ1bmN0aW9uLCBrZXk/OiBzdHJpbmcsIHJ1bjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5fZGF0YVtrZXldO1xuICAgICAgICAgICAgcnVuICYmIHZhbHVlICE9IG51bGwgJiYgZnVuYyh2YWx1ZSk7XG4gICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5rZXlVcGRhdGVBcnJba2V5XTtcbiAgICAgICAgICAgICFhcnIgJiYgKHRoaXMua2V5VXBkYXRlQXJyW2tleV0gPSBhcnIgPSBbXSk7XG4gICAgICAgICAgICBhcnIucHVzaChmdW5jKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJ1biAmJiBmdW5jKHRoaXMuX2RhdGEpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBcnIucHVzaChmdW5jKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvZmZVcGRhdGUoZnVuYzogRnVuY3Rpb24sIGtleT86IHN0cmluZykge1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBBcnJheVV0aWxzLnJlbW92ZUZyb21BcnIodGhpcy5rZXlVcGRhdGVBcnJba2V5XSwgZnVuYyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBBcnJheVV0aWxzLnJlbW92ZUZyb21BcnIodGhpcy51cGRhdGVBcnIsIGZ1bmMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyR2FtZSgpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuICAgIH1cbn0iLCJpbXBvcnQgQmFzZU1vZGVsIGZyb20gXCIuL0Jhc2VNb2RlbFwiO1xuaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi4vLi4vc2RrL0FkTWFuYWdlclwiO1xuaW1wb3J0IFRlYVNkaywgeyBEb3RLZXkgfSBmcm9tIFwiLi4vLi4vc2RrL1RlYVNka1wiO1xuaW1wb3J0IFRyYWNraW5nU2RrLCB7IFRyYWNraW5nS2V5IH0gZnJvbSBcIi4uLy4uL3Nkay9UcmFja2luZ1Nka1wiO1xuaW1wb3J0IHsgR29sZENvbmZpZ0RhdGEgfSBmcm9tIFwiLi4vLi4vc2RrL3Nka0RhdGEvR29sZENvbmZpZ0RhdGFcIjtcbmltcG9ydCBBZGRHb2xkRGF0YSBmcm9tIFwiLi4vLi4vc2RrL3Nka0RhdGEvQWRkR29sZERhdGFcIjtcbmltcG9ydCBNeUNvaW5EYXRhIGZyb20gXCIuLi8uLi9zZGsvc2RrRGF0YS9NeUNvaW5EYXRhXCI7XG5pbXBvcnQgeyBBcHBTZGsgfSBmcm9tIFwiLi4vLi4vc2RrL0FwcFNka1wiO1xuaW1wb3J0IERhdGVVdGlscyBmcm9tIFwiLi4vLi4vdWl0bC9EYXRlVXRpbHNcIjtcbmltcG9ydCBVdGlsLCB7IERhdGFLZXkgfSBmcm9tIFwiLi4vLi4vdWl0bC9VdGlsXCI7XG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uLy4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcbmltcG9ydCB7IEV2ZW50Q2VudGVyIH0gZnJvbSBcIi4uLy4uL2V2ZW50L0V2ZW50Q2VudGVyXCI7XG5pbXBvcnQgeyBFdmVudEVudW0gfSBmcm9tIFwiLi4vLi4vZXZlbnQvRXZlbnRFbnVtXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZHBhY2tldE1vZGVsIGV4dGVuZHMgQmFzZU1vZGVsIHtcbiAgICBwcml2YXRlIE1BWCA9IDIwO1xuICAgIC8qKuW9k+WkqemihuWPlue6ouWMheeahOacgOWkp+asoeaVsCAqL1xuICAgIHByaXZhdGUgREFZX01BWF9DTlQgPSA1MDtcbiAgICBwcml2YXRlIGNvbmY6IGFueTtcbiAgICBwdWJsaWMgY3VyUmVkcGFja2V0OiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBjb25mTGVuOiBudW1iZXIgPSAwO1xuXG4gICAgLyoq5Yid5aeL5YyW57qi5YyF6YWN572uICovXG4gICAgYXN5bmMgaW5pdCgpIHtcblxuICAgICAgICBsZXQgYXJyID0gYXdhaXQgR29sZENvbmZpZ0RhdGEuSS5nZXRHb2xkQ29uZmlnKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1SZWRwYWNrZXRNb2RlbC0tLS0tLS0nK0pTT04uc3RyaW5naWZ5KGFycikpXG4gICAgICAgIFxuICAgICAgICBsZXQgY2FzaCA9IDA7XG4gICAgICAgIHRoaXMuY29uZiA9IHt9O1xuICAgICAgICBhcnIuZm9yRWFjaChjb25mRGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmZbY29uZkRhdGEuaWRdID0gY29uZkRhdGE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMuaW5pdERhdGEoKSk7XG4gICAgICAgIHRoaXMuY29uZkxlbiA9IHRoaXMuY29uZi5sZW5ndGg7XG5cbiAgICB9XG5cbiAgICBpbml0RGF0YSgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgUmVkcGFja2V0RGF0YTtcbiAgICAgICAgbGV0IGxhc3RUaW1lID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5sYXN0VGltZSkgfHwgJzAnO1xuICAgICAgICBkYXRhLmxhc3RUaW1lID0gcGFyc2VJbnQobGFzdFRpbWUpO1xuXG4gICAgICAgIGxldCBsYXN0ID0gRGF0ZVV0aWxzLnRpbWVEYXkoZGF0YS5sYXN0VGltZSk7XG4gICAgICAgIGxldCB0b2RheSA9IERhdGVVdGlscy50b2RheTtcbiAgICAgICAgaWYgKGxhc3QgIT0gdG9kYXkpIHtcbiAgICAgICAgICAgIGRhdGEudG9kYXlDbnQgPSAwO1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlVXRpbHMubm93VGltZS50b1N0cmluZygpO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5sYXN0VGltZSwgbGFzdFRpbWUpXG4gICAgICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LnRvZGF5Q250LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCB0b2RheUNudCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkudG9kYXlDbnQpIHx8ICcwJztcbiAgICAgICAgICAgIGRhdGEudG9kYXlDbnQgPSBwYXJzZUludCh0b2RheUNudCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5sYXN0VGltZSA9IHBhcnNlSW50KGxhc3RUaW1lKTtcbiAgICAgICAgbGV0IGRhdGFDbnQgPSBVdGlsLkkuZ2V0SXRlbShEYXRhS2V5LmRhdGFDTlQpIHx8ICcwJztcbiAgICAgICAgZGF0YS5jbnQgPSBwYXJzZUludChkYXRhQ250KTtcbiAgICAgICAgZGF0YS5saXN0ID0gW107XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGFzeW5jIGNoZWNrUmVkcGFja2V0KCkge1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGEudG9kYXlDbnQgPj0gdGhpcy5EQVlfTUFYX0NOVCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoQWRNYW5hZ2VyLkkuY2hlY2tWaWRlb0luQ2QoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvKirnuqLljIXojrflj5blkI7msqHmnInnnIvlub/lkYrpooblj5bvvIzlho3mrKHojrflvpfnuqLljIXnmoTmnLrkvJrvvIzkuI3kvJrojrflj5bnuqLljIXvvIwg6Ieq5bex5Lmf5Y+v5Lul5aSE55CG5oiQIOWvueW6lOeahOe6ouWMheaPkOmGkuaIluS4jemcgOimgei/memHjOeahOWIpOaWrSAqL1xuICAgICAgICBpZiAodGhpcy5jdXJSZWRwYWNrZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodW5kZWZpbmVkID09PSB0aGlzLmRhdGEuY250KSB0aGlzLmRhdGEuY250ID0gMDtcbiAgICAgICAgbGV0IGNudCA9IHRoaXMuZGF0YS5jbnQ7XG4gICAgICAgIGlmIChjbnQgPj0gdGhpcy5jb25mTGVuKSBjbnQgPSB0aGlzLmNvbmZMZW4gLSAxO1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuY29uZltjbnQgKyAxXTtcbiAgICAgICAgbGV0IHJhbjIgPSBNYXRoLnJhbmRvbSgpO1xuXG4gICAgICAgIGlmIChkYXRhICYmIHJhbjIgPCBkYXRhLnBlcikge1xuICAgICAgICAgICAgbGV0IGNhc2ggPSAwLjAwMDAwMTtcbiAgICAgICAgICAgIHRoaXMuY3VyUmVkcGFja2V0ID0gY2FzaDtcbiAgICAgICAgICAgIC8vKirlvLnlh7rnuqLljIXnmoTnlYzpnaIsICDmmoLml7blpITnkIbmiJAg55u05o6l55yL5bm/5ZGK6I635Y+W6YeR5biBICovXG4gICAgICAgICAgIGF3YWl0ICBBZE1hbmFnZXIuSS5zaG93UmV3YXJkQWQoKVxuICAgICAgICAgICB0aGlzLmdldFJlcGFja2V0KClcbiAgICAgICAgICAgLyoq5pu05paw5Z+65pys5pi+56S6ICovXG4gICAgICAgICAgIEV2ZW50Q2VudGVyLmVtaXQoRXZlbnRFbnVtLlVQREFURV9DT0lOKTtcblxuICAgICAgICAgICAgLyoqKiAqL1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldFJlcGFja2V0KCkge1xuICAgICAgICBpZiAoIXRoaXMuY3VyUmVkcGFja2V0KSByZXR1cm47XG4gICAgICAgIHRoaXMuZGF0YS5jbnQgKz0gMTtcbiAgICAgICAgdGhpcy5kYXRhLmxpc3QucHVzaCh0aGlzLmN1clJlZHBhY2tldCk7XG4gICAgICAgIHRoaXMuZGF0YS5sYXN0VGltZSA9IChuZXcgRGF0ZSkuZ2V0VGltZSgpO1xuICAgICAgICB0aGlzLmRhdGEudG9kYXlDbnQgKz0gMTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jbnQgPT0gMSlcbiAgICAgICAgICAgIFRyYWNraW5nU2RrLkkuZG90KFRyYWNraW5nS2V5LlJlZFBhY2sxKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jbnQgPT0gNSlcbiAgICAgICAgICAgIFRyYWNraW5nU2RrLkkuZG90KFRyYWNraW5nS2V5LlJlZFBhY2s1KTtcbiAgICAgICAgdGhpcy5jdXJSZWRwYWNrZXQgPSAwO1xuICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LmRhdGFDTlQsIHRoaXMuZGF0YS5jbnQpO1xuICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LnRvZGF5Q250LCB0aGlzLmRhdGEudG9kYXlDbnQpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgLyoqICovXG4gICAgYXN5bmMgZ2V0Q3VyUmVkcGFja2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJSZWRwYWNrZXQ7XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKTogUmVkcGFja2V0RGF0YSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cbiAgICAvKirojrflj5bmgLvlhbHnmoTph5HluIHmlbAgKi9cbiAgICBhc3luYyBnZXRUb3RhbENvaW4oKSB7XG4gICAgICAgIGxldCB0b3RhbENvaW4gPSBhd2FpdCBNeUNvaW5EYXRhLmdldENvaW4oKTtcbiAgICAgICAgcmV0dXJuIHRvdGFsQ29pbjtcbiAgICB9XG4gICAgLyoq6I635Y+W5pys5qyh5aWW5Yqx55qE6YeR5biB5pWwICovXG4gICAgYXN5bmMgYWRkQ29pbihrZXk6IG51bWJlciA9IDEpIHtcbiAgICAgICAgbGV0IGNvaW5EYXRhID0gYXdhaXQgQWRkR29sZERhdGEuYWRkQ29pbihrZXkpO1xuICAgICAgICByZXR1cm4gY29pbkRhdGE7XG4gICAgfVxuXG4gICAgLyoq6I635Y+W5pyA5L2O5o+Q5qGjICovXG4gICAgYXN5bmMgIG1pbldpdGhEcmF3YWwoKSB7XG4gICAgICAgIGxldCBtaW5Db2luID0gYXdhaXQgQXBwU2RrLkkubWluV2l0aERyYXdhbCgpO1xuICAgICAgICByZXR1cm4gbWluQ29pbjtcbiAgICB9XG4gICAgc3RhdGljIGdldCBJKCk6IFJlZHBhY2tldE1vZGVsIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdEluc3RhbmNlLmdldChSZWRwYWNrZXRNb2RlbCkgYXMgUmVkcGFja2V0TW9kZWw7XG4gICAgfVxufVxuXG5jbGFzcyBSZWRwYWNrZXREYXRhIHtcbiAgICBjbnQ6IG51bWJlcjtcbiAgICBsaXN0OiBBcnJheTxudW1iZXI+O1xuICAgIGxhc3RUaW1lOiBudW1iZXI7XG4gICAgdG9kYXlDbnQ6IG51bWJlcjtcbn1cblxuY2xhc3MgUmVkcGFja2V0Q29uZmlnRGF0YSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBwZXI6IG51bWJlcjtcbiAgICBjYXNoOiBudW1iZXI7XG59IiwiaW1wb3J0IEJhc2VNb2RlbCBmcm9tIFwiLi9CYXNlTW9kZWxcIjtcbmltcG9ydCB7IEFwcFNkayB9IGZyb20gXCIuLi8uLi9zZGsvQXBwU2RrXCI7XG5pbXBvcnQgRGF0ZVV0aWxzIGZyb20gXCIuLi8uLi91aXRsL0RhdGVVdGlsc1wiO1xuaW1wb3J0IFV0aWwsIHsgRGF0YUtleSB9IGZyb20gXCIuLi8uLi91aXRsL1V0aWxcIjtcbmltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xuXG4vKipcbiAqIFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFrZU1vZGVsIGV4dGVuZHMgQmFzZU1vZGVsIHtcblxuICAgIHByaXZhdGUgY29uZjogYW55O1xuICAgIHByaXZhdGUgZWxlUHJvYmFiaWxpdHlBcnI6IG51bWJlcltdID0gW107XG4gICAgcHJpdmF0ZSB0b3RhbFdlaWdodDogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIHByb0FyckxlbjogbnVtYmVyID0gMDtcbiAgICAvKirnuqLljIXlh7rnjrDnmoTmgLvmrKHmlbDmr4/ml6UgKi9cbiAgICBwcml2YXRlIHJlZF9kYXlfbGltaXQ6IG51bWJlciA9IDA7XG4gICAgcHJpdmF0ZSBjdXJfcmVkX2RheV9saW1pdDogbnVtYmVyID0gMDtcbiAgICAvKirmkYfkuIDmkYflh7rnjrDnmoTmgLvmrKHmlbAgKi9cbiAgICBwcml2YXRlIHNoYWtlX2RheV9saW1pdDogbnVtYmVyID0gMDtcblxuICAgIHByaXZhdGUgY3VyX3NoYWtlX2RheV9saW1pdDogbnVtYmVyID0gMDtcbiAgICAvKipcbiAgICAgKiByZWRfZGF5X2xpbWl0XHTnuqLljIXmr4/ml6XmnoHpmZDkuqflh7pcdFxuICAgICogIHNoYWtlX2RheV9saW1pdFx05pGH5LiA5pGH5q+P5pel5p6B6ZmQ5Lqn5Ye6XHRcbiAgICAqIGludGVyc3RpdGlhbF9jbnQg5o+S5bGP6K6h5pWw77yI5q+P5Ye6546weOasoemAmueUqOiOt+W+l+eJqeWTgeeVjOmdouWQju+8jOWHuueOsOaPkuWxj++8iVx0XG4gICAgKiBpbnRlcnN0aXRpYWxfZGVsYXlcdOaPkuWxj+WHuueOsOW7tuaXtu+8iOavq+enku+8iVx0XG4gICAgICovXG4gICBcbiAgICAvKipcbiAgICAgKiAgLy8gbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgLy8gICAgIGRhdGE6IHtcbiAgICAgICAgLy8gICAgICAgICBnYW1lQ29uZmlnOiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIFwiY29uZmlnXCI6IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIFwicmVkX2RheV9saW1pdFwiOiAxMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIFwic2hha2VfZGF5X2xpbWl0XCI6IDUwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgXCJpbnRlcnN0aXRpYWxfY250XCI6IDIsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBcImludGVyc3RpdGlhbF9kZWxheVwiOiA1MDBcbiAgICAgICAgLy8gICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJzaGFrZVwiOiBbXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiAxLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDEwMDAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJudW1cIjogMFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDIsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogNDAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDBcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAzLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiAzLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDMwMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIm51bVwiOiAxXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogNCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogMyxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIndlaWdodFwiOiAxMDAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJudW1cIjogMlxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDUsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDQsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMzAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDFcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiA2LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiA0LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDEwMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIm51bVwiOiAyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogNyxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogNSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIndlaWdodFwiOiAzMDAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJudW1cIjogMVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDgsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDUsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMTAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiA5LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiA2LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDMwMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIm51bVwiOiAxXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDYsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMTAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxMSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogNyxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIndlaWdodFwiOiAzMDAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJudW1cIjogMVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEyLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiA3LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwid2VpZ2h0XCI6IDEwMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBcIm51bVwiOiAyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTMsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IDgsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgXCJ3ZWlnaHRcIjogNTAwLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIFwibnVtXCI6IDBcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgICAgICAgXSxcbiAgICAgICAgLy8gICAgICAgICAgICAgJ2NvaW5fY29uZmlnJzogW11cbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICAgKi9cbiAgICBhc3luYyBpbml0KCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgQXBwU2RrLkkuZ2V0R2FtZUNvbmZpZygpO1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tU2hha2VNb2RlbC0tLS0tLS0nK0pTT04uc3RyaW5naWZ5KHJlc3VsdC5kYXRhKSlcbiAgICAgICAgXG4gICAgICAgIGxldCBkYXRhID0gcmVzdWx0LmRhdGE7XG4gICAgICAgIGlmIChkYXRhWydnYW1lQ29uZmlnJ10pIHtcbiAgICAgICAgICAgIGxldCBnYW1lRGF0YSA9IGRhdGFbJ2dhbWVDb25maWcnXTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKHRoaXMuaW5pdERhdGEoZ2FtZURhdGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXREYXRhKGdhbWVEYXRhKSB7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IFNoYWtlRGF0YTtcbiAgICAgICAgbGV0IGxhc3RUaW1lID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5zaGFrZUxhc3RUaW1lKSB8fCAnMCc7XG4gICAgICAgIGxldCBsdCA9IHBhcnNlSW50KGxhc3RUaW1lKTtcbiAgICAgICAgbGV0IGxhc3QgPSBEYXRlVXRpbHMudGltZURheShsdCk7XG4gICAgICAgIGxldCB0b2RheSA9IERhdGVVdGlscy50b2RheTtcblxuICAgICAgICBpZiAobGFzdCAhPSB0b2RheSkge1xuICAgICAgICAgICAgdGhpcy5jdXJfc2hha2VfZGF5X2xpbWl0ID0gMDtcbiAgICAgICAgICAgIHRoaXMuY3VyX3JlZF9kYXlfbGltaXQgPSAwO1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlVXRpbHMubm93VGltZS50b1N0cmluZygpO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfc2hha2VfZGF5X2xpbWl0LCAwKTtcbiAgICAgICAgICAgIFV0aWwuSS5zZXRJdGVtKERhdGFLZXkuY3VyX3JlZF9kYXlfbGltaXQsIDApO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5zaGFrZUxhc3RUaW1lLCBsYXN0VGltZSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjdXJfcmVkX2RheV9saW1pdCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkuY3VyX3JlZF9kYXlfbGltaXQpIHx8ICcwJztcbiAgICAgICAgICAgIHRoaXMuY3VyX3JlZF9kYXlfbGltaXQgPSBwYXJzZUludChjdXJfcmVkX2RheV9saW1pdCk7XG4gICAgICAgICAgICBsZXQgY3VyX3NoYWtlX2RheV9saW1pdCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkuY3VyX3NoYWtlX2RheV9saW1pdCkgfHwgJzAnO1xuICAgICAgICAgICAgdGhpcy5jdXJfc2hha2VfZGF5X2xpbWl0ID0gcGFyc2VJbnQoY3VyX3NoYWtlX2RheV9saW1pdCk7XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhLmNvbmZpZyA9IGdhbWVEYXRhWydjb25maWcnXTtcbiAgICAgICAgZ2FtZURhdGFbJ3NoYWtlJ10uZm9yRWFjaChlbGUgPT4ge1xuICAgICAgICAgICAgZGF0YS5zaGFrZVdlaWdodExpc3QucHVzaChlbGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb25mID0gW107XG4gICAgICAgIHRoaXMuY29uZiA9IGRhdGEuc2hha2VXZWlnaHRMaXN0O1xuICAgICAgICB0aGlzLmluaXRQcm9iYWJpbGl0eSgpO1xuICAgICAgICB0aGlzLnNoYWtlX2RheV9saW1pdCA9IGRhdGEuY29uZmlnLnNoYWtlX2RheV9saW1pdDtcbiAgICAgICAgdGhpcy5yZWRfZGF5X2xpbWl0ID0gZGF0YS5jb25maWcucmVkX2RheV9saW1pdDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaW5pdFByb2JhYmlsaXR5KCkge1xuICAgICAgICB0aGlzLnRvdGFsV2VpZ2h0ID0gMDtcbiAgICAgICAgdGhpcy5jb25mLmZvckVhY2goKGVsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG90YWxXZWlnaHQgKz0gZWxlLndlaWdodDtcbiAgICAgICAgICAgIGxldCBpdGVtVyA9IGVsZS53ZWlnaHQ7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwKVxuICAgICAgICAgICAgICAgIGl0ZW1XICs9IHRoaXMuZWxlUHJvYmFiaWxpdHlBcnJbaW5kZXggLSAxXTtcbiAgICAgICAgICAgIHRoaXMuZWxlUHJvYmFiaWxpdHlBcnIgPSBbLi4udGhpcy5lbGVQcm9iYWJpbGl0eUFyciwgaXRlbVddO1xuICAgICAgICB9KVxuICAgICAgICB0aGlzLnByb0FyckxlbiA9IHRoaXMuZWxlUHJvYmFiaWxpdHlBcnIubGVuZ3RoO1xuXG4gICAgfVxuXG4gICAgZ2V0U2hha2VUeXBlKCkge1xuICAgICAgICArK3RoaXMuY3VyX3NoYWtlX2RheV9saW1pdDtcbiAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfc2hha2VfZGF5X2xpbWl0LCB0aGlzLmN1cl9zaGFrZV9kYXlfbGltaXQpO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cl9zaGFrZV9kYXlfbGltaXQgPiB0aGlzLnNoYWtlX2RheV9saW1pdCkge1xuICAgICAgICAgICAgLyoqJ+asoeaVsOi+vuWIsOS4iumZkO+8jOivt+aYjuWkqeWGjeadpSovXG5cbiAgICAgICAgICAgIC8qKuWcqOatpOWkhOWPr+S7peW8ueahhuetieWkhOeQhiAqL1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGxldCByYW4gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnRvdGFsV2VpZ2h0KTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMucHJvQXJyTGVuOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSB0aGlzLmVsZVByb2JhYmlsaXR5QXJyW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChlbGUgPj0gcmFuKSB7XG4gICAgICAgICAgICAgICAgaWYgKDAgPT09IGluZGV4IHx8IDEgPT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICsrdGhpcy5jdXJfcmVkX2RheV9saW1pdDtcbiAgICAgICAgICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfcmVkX2RheV9saW1pdCwgdGhpcy5jdXJfcmVkX2RheV9saW1pdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cl9yZWRfZGF5X2xpbWl0ID4gdGhpcy5yZWRfZGF5X2xpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25mW3RoaXMucHJvQXJyTGVuIC0gMV07XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25mW2luZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb25mW3RoaXMucHJvQXJyTGVuIC0gMV07XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKTogU2hha2VEYXRhIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBJKCk6IFNoYWtlTW9kZWwge1xuICAgICAgICByZXR1cm4gT2JqZWN0SW5zdGFuY2UuZ2V0KFNoYWtlTW9kZWwpIGFzIFNoYWtlTW9kZWw7XG4gICAgfVxufVxuXG5cbmNsYXNzIFNoYWtlRGF0YSB7XG4gICAgY29uZmlnOiBTaGFrZUNvbmZpZztcbiAgICBzaGFrZVdlaWdodExpc3Q6IFNoYWtlV2VpZ2h0RGF0YVtdID0gW107XG59XG5pbnRlcmZhY2UgU2hha2VDb25maWcge1xuICAgIHJlZF9kYXlfbGltaXQ6IG51bWJlcixcbiAgICBzaGFrZV9kYXlfbGltaXQ6IG51bWJlcixcbiAgICBpbnRlcnN0aXRpYWxfY250OiBudW1iZXIsXG4gICAgaW50ZXJzdGl0aWFsX2RlbGF5OiBudW1iZXJcbn1cblxuaW50ZXJmYWNlIFNoYWtlV2VpZ2h0RGF0YSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICB0eXBlOiBudW1iZXI7XG4gICAgd2VpZ2h0OiBudW1iZXI7XG4gICAgbnVtOiBudW1iZXI7XG59XG5cblxuIiwiaW1wb3J0IHsgQXBwU2RrIH0gZnJvbSBcIi4uL0FwcFNka1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBZGRHb2xkRGF0YSB7XG4gICAgc3RhdGljIGNvaW46IHN0cmluZyA9ICcwJztcbiAgICBzdGF0aWMgbXljb2luOiBzdHJpbmcgPSAnMCc7XG4gICAgc3RhdGljIGluaXREYXRhKGRhdGE6IGFueSkge1xuICAgICAgICBpZiAoIXBhcnNlSW50KGRhdGEuY29kZSkpIHtcbiAgICAgICAgICAgIEFkZEdvbGREYXRhLmNvaW4gPSBkYXRhLmRhdGEuY29pbjtcbiAgICAgICAgICAgIEFkZEdvbGREYXRhLm15Y29pbiA9IGRhdGEuZGF0YS5teWNvaW47XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyAgYWRkQ29pbihrZXk6IG51bWJlciA9IDEpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IEFwcFNkay5JLmFkZEdvbGQoa2V5KTtcbiAgICAgICAgcmV0dXJuIFtwYXJzZUludCh0aGlzLmNvaW4pLHBhcnNlSW50KHRoaXMubXljb2luKV07XG5cbiAgICB9XG59IiwiaW1wb3J0IHsgQXBwU2RrIH0gZnJvbSBcIi4uL0FwcFNka1wiO1xyXG5pbXBvcnQgVXRpbCBmcm9tIFwiLi4vLi4vdWl0bC9VdGlsXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgR29sZENvbmZpZ0RhdGEge1xyXG4gICAgYWQ6IE9iamVjdDtcclxuICAgIGFkbmV0OiBzdHJpbmc7XHJcbiAgICBhcHBfbmFtZTogc3RyaW5nO1xyXG4gICAgY29pbl9jb25maWc6IHN0cmluZyA9ICcnO1xyXG4gICAgZ2FtZVVybDogc3RyaW5nO1xyXG4gICAga3VhaV9hcHBfbmFtZTogc3RyaW5nO1xyXG4gICAgcGFuZ29saW46IHN0cmluZztcclxuICAgIHRUdXJib0FnZW50OiBzdHJpbmc7XHJcbiAgICB0ZWFBZ2VudDogbnVtYmVyO1xyXG4gICAgdHJhY2tpbmc6IHN0cmluZztcclxuICAgIHR0QXBwTG9nOiBzdHJpbmc7XHJcbiAgICB1bWlkOiBzdHJpbmc7XHJcbiAgICBnYW1lQ29uZmlnOiBhbnk7XHJcblxyXG4gICAgY29kZTogbnVtYmVyID0gLTM7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogR29sZENvbmZpZ0RhdGEgPSBudWxsO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IEkoKTogR29sZENvbmZpZ0RhdGEge1xyXG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSlcclxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZSA9IG5ldyBHb2xkQ29uZmlnRGF0YSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlO1xyXG4gICAgfVxyXG4gICAgaW5pdERhdGEoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuY29kZSA9IGRhdGEuY29kZTtcclxuICAgICAgICBpZiAoIWRhdGEuY29kZSkge1xyXG4gICAgICAgICAgICBkYXRhID0gZGF0YS5kYXRhO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlID0gZGF0YVtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNba2V5XSA9IGVsZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRHb2xkQ29uZmlnKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IEFwcFNkay5JLmdldEdhbWVDb25maWcoKTtcclxuICAgICAgICAgICAgbGV0IGRhdGEgPSByZXN1bHQuZGF0YTtcclxuICAgICAgICAgICAgaWYgKGRhdGFbJ2dhbWVDb25maWcnXSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGdhbWVEYXRhID0gZGF0YVsnZ2FtZUNvbmZpZyddO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbmZpZ0pzb24gPSBhd2FpdCB0aGlzLmxvYWRHb2xkQ2ZnKGdhbWVEYXRhWydjb2luX2NvbmZpZyddWzBdKVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShjb25maWdKc29uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRHb2xkQ2ZnKHJlczogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGNvbmZpZ0pzb24gPSBhd2FpdCAgVXRpbC5JLmxvYWQocmVzKTtcclxuICAgICAgICByZXR1cm4gY29uZmlnSnNvbjtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcHBTZGsgfSBmcm9tIFwiLi4vQXBwU2RrXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE15Q29pbkRhdGEge1xuICAgIHN0YXRpYyBjb2luOiBzdHJpbmcgPSAnJztcbiAgICBzdGF0aWMgaW5pdERhdGEoZGF0YTogYW55KSB7XG4gICAgICAgIGlmICghcGFyc2VJbnQoZGF0YS5jb2RlKSl7XG4gICAgICAgICAgICB0aGlzLmNvaW4gPSBkYXRhLmRhdGEuY29pbjtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmNvaW4gPScwJztcbiAgICAgICAgfVxuICAgICAgIFxuICAgIH1cbiAgICAgc3RhdGljIGFzeW5jIGdldENvaW4oKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBBcHBTZGsuSS5teUNvaW4oKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRoaXMuY29pbilcbiAgICB9XG59IiwiLyoqVGhpcyBjbGFzcyBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBMYXlhQWlySURFLCBwbGVhc2UgZG8gbm90IG1ha2UgYW55IG1vZGlmaWNhdGlvbnMuICovXG5pbXBvcnQgVmlldz1MYXlhLlZpZXc7XHJcbmltcG9ydCBEaWFsb2c9TGF5YS5EaWFsb2c7XHJcbmltcG9ydCBTY2VuZT1MYXlhLlNjZW5lO1xudmFyIFJFRzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XG5leHBvcnQgbW9kdWxlIHVpIHtcclxuICAgIGV4cG9ydCBjbGFzcyBUZXN0U2NlbmVVSSBleHRlbmRzIFNjZW5lIHtcclxuXHRcdHB1YmxpYyBidG5JbnZpdGU6TGF5YS5TcHJpdGU7XG5cdFx0cHVibGljIGJ0blNlcnZlcjpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuVmlicmF0ZTpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuX3NoYWtlOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5EcmF3YWw6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blByZWxvYWRBRDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd0Jhbm5lcjpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd0Z1bGxBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd05hdGl2ZUFkOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5TaG93SW50ZXJBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuUmV3YXJkQWQ6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blJlZHBhY2tldDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgTmF0aXZlQUQ6VmlldztcbiAgICAgICAgY29uc3RydWN0b3IoKXsgc3VwZXIoKX1cclxuICAgICAgICBjcmVhdGVDaGlsZHJlbigpOnZvaWQge1xyXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRTY2VuZShcIlRlc3RTY2VuZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBSRUcoXCJ1aS5UZXN0U2NlbmVVSVwiLFRlc3RTY2VuZVVJKTtcclxufVxyIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXJyYXlVdGlscyB7XG4gICAgLyoqXG4gICAgICog56e76Zmk5YWD57SgXG4gICAgICovXG4gICAgc3RhdGljIHJlbW92ZUZyb21BcnIoYXJyOiBBcnJheTxhbnk+LCBvYmo6IGFueSkge1xuICAgICAgICBsZXQgaW5kZXggPSBhcnIuaW5kZXhPZihvYmopO1xuICAgICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmFuZG9tRnJvbUFycihhcnI6IEFycmF5PGFueT4pIHtcbiAgICAgICAgbGV0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYXJyLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBhcnJbaW5kZXhdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaVsOe7hOmaj+acuuaOkuW6j1xuICAgICAqL1xuICAgIHN0YXRpYyBzaHVmZmxlKGFycjogQXJyYXk8YW55Pikge1xuICAgICAgICByZXR1cm4gYXJyLnNvcnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgLSAwLjU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbmRleE9mKGFyciwgY2FsbGJhY2ssIGN0eD8pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjay5jYWxsKGN0eCwgdGhpc1tpXSwgaSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHN0YXRpYyBlYWNoKGFyciwgY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2suY2FsbChjb250ZXh0LCBhcnJbaV0sIGksIGFycikpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgcXVldWUoYXJyKSB7XG4gICAgICAgIGxldCByZXMgPSBudWxsO1xuICAgICAgICBmb3IgKGxldCBwcm9taXNlIG9mIGFycikge1xuICAgICAgICAgICAgcmVzID0gYXdhaXQgcHJvbWlzZShyZXMpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UmFuZG9tQXJyYXkoYXJyLCBjb3VudCkge1xuICAgICAgICBsZXQgc2h1ZmZsZWQgPSBhcnIuc2xpY2UoMCk7XG4gICAgICAgIGxldCBsZW4gPSBhcnIubGVuZ3RoO1xuICAgICAgICBsZXQgbWluID0gbGVuIC0gY291bnQsIHRlbXAsIGluZGV4O1xuICAgICAgICB3aGlsZSAobGVuLS0gPiBtaW4pIHtcbiAgICAgICAgICAgIGluZGV4ID0gTWF0aC5mbG9vcigobGVuICsgMSkgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgICAgIHRlbXAgPSBzaHVmZmxlZFtpbmRleF07XG4gICAgICAgICAgICBzaHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFtsZW5dO1xuICAgICAgICAgICAgc2h1ZmZsZWRbbGVuXSA9IHRlbXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNodWZmbGVkLnNsaWNlKG1pbik7XG4gICAgfVxufSIsIi8qKlxuICog5pel5pyf5bel5YW357G7XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVVdGlscyB7XG4gICAgc3RhdGljIGdldCBub3coKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5ub3dUaW1lIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBub3dUaW1lKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IHRvZGF5KCk6IHN0cmluZyB7XG4gICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUodGhpcy5ub3dUaW1lKTtcbiAgICAgICAgbGV0IHllYXIgPSB0aW1lLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGxldCBtb250aCA9IHRpbWUuZ2V0TW9udGgoKSArIDE7XG4gICAgICAgIGxldCBkYXRlID0gdGltZS5nZXREYXRlKCk7XG4gICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke3RoaXMuYWRkKG1vbnRoKX0tJHt0aGlzLmFkZChkYXRlKX1gO1xuICAgIH1cblxuICAgIHN0YXRpYyB0aW1lRGF5KHRpbWVOdW06IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUodGltZU51bSk7XG4gICAgICAgIGxldCB5ZWFyID0gdGltZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBsZXQgbW9udGggPSB0aW1lLmdldE1vbnRoKCkgKyAxO1xuICAgICAgICBsZXQgZGF0ZSA9IHRpbWUuZ2V0RGF0ZSgpO1xuICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHt0aGlzLmFkZChtb250aCl9LSR7dGhpcy5hZGQoZGF0ZSl9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7np5LmlbDmoLzlvI/ljJblrZfnrKbkuLJcbiAgICAgKiBAcGFyYW0gc2Vjb25kIOenkuaVsFxuICAgICAqIEBwYXJhbSB0eXBlIDE6MDA6MDA6MDAgICAyOnl5eXktbW0tZGQgaDptOnMgICAgMzowMDowMCAgIDQ6eHjlpKnliY3vvIx4eOWwj+aXtuWJje+8jHh45YiG6ZKf5YmNXG4gICAgICogQHJldHVyblxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZChzZWNvbmQ6IG51bWJlciwgdHlwZTogbnVtYmVyID0gMSk6IHN0cmluZyB7XG4gICAgICAgIHZhciBzdHI6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQwKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDEoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kMihzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQzKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDQoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kNShzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgLy8gMDogMDA6MDBcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZDAodDogbnVtYmVyID0gMCk6IHN0cmluZyB7XG4gICAgICAgIHZhciBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcih0IC8gNjApO1xuICAgICAgICB2YXIgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcih0ICUgNjApO1xuICAgICAgICB2YXIgbWluczogc3RyaW5nO1xuICAgICAgICB2YXIgc2Vuczogc3RyaW5nO1xuICAgICAgICBpZiAobWluc3QgPT0gMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5zdCA8IDEwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwXCIgKyBtaW5zdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIlwiICsgbWluc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZHQgPT0gMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjBcIiArIHNlY29uZHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZW5zID0gXCJcIiArIHNlY29uZHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbnMgKyBcIjpcIiArIHNlbnM7XG4gICAgfVxuXG4gICAgLy8xOiAwMDowMDowMFxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMSh0OiBudW1iZXIgPSAwKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGhvdXJzdDogbnVtYmVyID0gTWF0aC5mbG9vcih0IC8gMzYwMCk7XG4gICAgICAgIGxldCBob3Vyczogc3RyaW5nO1xuICAgICAgICBsZXQgZGF5ID0gJyc7XG4gICAgICAgIGlmIChob3Vyc3QgPT0gMCkge1xuICAgICAgICAgICAgaG91cnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG91cnN0IDwgMTApXG4gICAgICAgICAgICAgICAgaG91cnMgPSBcIjBcIiArIGhvdXJzdDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBoID0gaG91cnN0ICUgMjQ7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA+PSAyNCkge1xuICAgICAgICAgICAgICAgICAgICBob3VycyA9IGggPCAxMCA/IFwiMFwiICsgaCA6ICcnICsgaDtcbiAgICAgICAgICAgICAgICAgICAgZGF5ID0gTWF0aC5mbG9vcihob3Vyc3QgLyAyNCkgKyAnZCAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgICBob3VycyA9IGggPCAxMCA/IFwiMFwiICsgaCA6ICcnICsgaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbWluc3Q6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAvIDYwKTtcbiAgICAgICAgbGV0IHNlY29uZHQ6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAlIDYwKTtcbiAgICAgICAgbGV0IG1pbnM6IHN0cmluZztcbiAgICAgICAgbGV0IHNlbnM6IHN0cmluZztcbiAgICAgICAgaWYgKG1pbnN0ID09IDApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobWluc3QgPCAxMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMFwiICsgbWluc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5zID0gXCJcIiArIG1pbnN0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWNvbmR0ID09IDApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Vjb25kdCA8IDEwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwXCIgKyBzZWNvbmR0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VucyA9IFwiXCIgKyBzZWNvbmR0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXkgKyBob3VycyArIFwiOlwiICsgbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzM6IDAwOjAwXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQzKHQ6IG51bWJlciA9IDApOiBzdHJpbmcge1xuICAgICAgICB2YXIgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHQgLyAzNjAwKTtcbiAgICAgICAgdmFyIG1pbnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0IC0gaG91cnN0ICogMzYwMCkgLyA2MCk7XG4gICAgICAgIHZhciBzZWNvbmR0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0IC0gaG91cnN0ICogMzYwMCkgJSA2MCk7XG4gICAgICAgIHZhciBtaW5zOiBzdHJpbmc7XG4gICAgICAgIHZhciBzZW5zOiBzdHJpbmc7XG4gICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjBcIiArIG1pbnN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWlucyA9IFwiXCIgKyBtaW5zdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKHNlY29uZHQgPCAxMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMFwiICsgc2Vjb25kdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIlwiICsgc2Vjb25kdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzI6eXl5eS1tbS1kZCBoOm06c1xuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMih0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB2YXIgZGF0ZTogRGF0ZSA9IG5ldyBEYXRlKHRpbWUpO1xuICAgICAgICB2YXIgeWVhcjogbnVtYmVyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICB2YXIgbW9udGg6IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7IFx0Ly/ov5Tlm57nmoTmnIjku73ku44wLTEx77ybXG4gICAgICAgIHZhciBkYXk6IG51bWJlciA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB2YXIgaG91cnM6IG51bWJlciA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgdmFyIG1pbnV0ZTogbnVtYmVyID0gZGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIHZhciBzZWNvbmQ6IG51bWJlciA9IGRhdGUuZ2V0U2Vjb25kcygpO1xuICAgICAgICByZXR1cm4geWVhciArIFwiLVwiICsgbW9udGggKyBcIi1cIiArIGRheSArIFwiIFwiICsgaG91cnMgKyBcIjpcIiArIG1pbnV0ZSArIFwiOlwiICsgc2Vjb25kO1xuXG4gICAgfVxuXG4gICAgLy80Onh45aSp5YmN77yMeHjlsI/ml7bliY3vvIx4eOWIhumSn+WJjVxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kNCh0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB2YXIgdCA9IE1hdGguZmxvb3IodGltZSAvIDM2MDApO1xuICAgICAgICBpZiAodCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0ID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0IC8gMjQpICsgXCLlpKnliY1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0ICsgXCLlsI/ml7bliY1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRpbWUgLyA2MCkgKyBcIuWIhumSn+WJjVwiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQ1KHRpbWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIC8vIOavj+S4quaXtumXtOWNleS9jeaJgOWvueW6lOeahOenkuaVsFxuICAgICAgICB2YXIgb25lRGF5OiBudW1iZXIgPSAzNjAwICogMjQ7XG4gICAgICAgIHZhciBvbmVIb3Vyc3Q6IG51bWJlciA9IDM2MDA7XG4gICAgICAgIHZhciBvbmVNaW5zdDogbnVtYmVyID0gNjA7XG5cbiAgICAgICAgdmFyIGRheXMgPSBNYXRoLmZsb29yKHRpbWUgLyBvbmVEYXkpO1xuICAgICAgICB2YXIgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHRpbWUgJSBvbmVEYXkgLyBvbmVIb3Vyc3QpXG4gICAgICAgIHZhciBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcigodGltZSAtIGhvdXJzdCAqIG9uZUhvdXJzdCkgLyBvbmVNaW5zdCkgIC8vTWF0aC5mbG9vcih0aW1lICUgb25lRGF5ICUgb25lSG91cnN0IC8gb25lTWluc3QpO1xuICAgICAgICB2YXIgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcigodGltZSAtIGhvdXJzdCAqIG9uZUhvdXJzdCkgJSBvbmVNaW5zdCkgLy90aW1lO1xuXG4gICAgICAgIHZhciBkYXlzczogc3RyaW5nID0gXCJcIjtcbiAgICAgICAgdmFyIGhvdXJzczogc3RyaW5nID0gXCJcIlxuICAgICAgICB2YXIgbWluc3M6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIHZhciBzZWNzczogc3RyaW5nID0gXCJcIlxuICAgICAgICBpZiAodGltZSA+IDApIHtcbiAgICAgICAgICAgIC8v5aSpXG4gICAgICAgICAgICBpZiAoZGF5cyA9PSAwKSB7XG4gICAgICAgICAgICAgICAgZGF5c3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgIC8v5bCP5pe2XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIC8v5YiGXG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Vjc3M7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWluc3MgKyBzZWNzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IGhvdXJzdCArIFwi5bCP5pe2XCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91cnNzICsgc2Vjc3NcblxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNzID0gXCIwXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91cnNzICsgbWluc3M7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXlzcyA9IGRheXMgKyBcIuWkqVwiO1xuICAgICAgICAgICAgICAgIGlmIChob3Vyc3QgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBob3Vyc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChob3Vyc3QgPCAxMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiMFwiICsgaG91cnN0ICsgXCLlsI/ml7ZcIjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgaG91cnNzID0gXCJcIiArIGhvdXJzdCArIFwi5bCP5pe2XCI7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRheXNzICsgaG91cnNzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFkZChudW0pIHtcbiAgICAgICAgcmV0dXJuIG51bSA8IDEwID8gJzAnICsgbnVtIDogbnVtO1xuICAgIH1cblxuXG59XG4iLCJpbXBvcnQgT2JqZWN0UG9vbCBmcm9tIFwiLi9PYmplY3RQb29sXCI7XG5cbi8qXG4qIG5hbWU7XG4qL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0SW5zdGFuY2Uge1xuICAgIHByaXZhdGUgc3RhdGljIGNsenMgPSBbXTtcbiAgICBwcml2YXRlIHN0YXRpYyBvYmplY3RzID0gW107XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldChjbHM6IGFueSkge1xuICAgICAgICBsZXQgaWR4ID0gdGhpcy5jbHpzLmluZGV4T2YoY2xzKTtcbiAgICAgICAgcmV0dXJuIChpZHggPj0gMCAmJiB0aGlzLm9iamVjdHNbaWR4XSkgfHwgdGhpcy5jcmVhdGUoY2xzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGUoY2xzOiBhbnkpIHtcbiAgICAgICAgdmFyIG9iaiA9IE9iamVjdFBvb2wucG9wKGNscyk7XG4gICAgICAgIHRoaXMub2JqZWN0cy5wdXNoKG9iaik7XG4gICAgICAgIHRoaXMuY2x6cy5wdXNoKGNscyk7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0UG9vbCB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgY2xzQXJyID0gW107XG5cbiAgICBzdGF0aWMgcG9wKGNsczogYW55KSB7XG4gICAgICAgIGxldCBpZHggPSB0aGlzLmNsc0Fyci5pbmRleE9mKGNscyk7XG4gICAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgICAgICBpZHggPSB0aGlzLmNsc0Fyci5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmNsc0Fyci5wdXNoKGNscyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGtleSA9ICdwb29sS2V5JyArIGlkeDtcbiAgICAgICAgbGV0IGl0ZW0gPSBMYXlhLlBvb2wuZ2V0SXRlbUJ5Q2xhc3Moa2V5LCBjbHMpO1xuICAgICAgICBpdGVtLnBvb2xLZXkgPSBrZXk7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHN0YXRpYyBwdXNoKGl0ZW0pIHtcbiAgICAgICAgTGF5YS5Qb29sLnJlY292ZXIoaXRlbS5wb29sS2V5LCBpdGVtKTtcbiAgICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgIGNsYXNzIFNjYWxlQnV0dG9uU2NyaXB0IHtcbiBcbiAgICBwdWJsaWMgZGVsYXlUaW1lOiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBtaW5TY2FsZTogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIG1vbmtleUJveDogTGF5YS5JbWFnZTtcblxuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICrorr7nva5vd25lcuWHveaVsO+8jOWPr+S7peebtOaOpeiOt+WPluWIsOa3u+WKoOmZhOWKoOiEmuacrOeahOe7hOS7tuWunuS+iyBcbiAgICAgKiovXG4gICAgcHVibGljIHNldCBvd25lcih2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMubW9ua2V5Qm94ID0gdmFsdWU7XG4gICAgICAgIC8v6Ieq5a6a5LmJ55qE6ISa5pys5Lya5pyJ5pe25bqP6Zeu6aKY77yM5omA5Lul5Zyo5q2k5re75Yqg5LiA5Liq5bu25pe2XG4gICAgICAgIHRoaXMubW9ua2V5Qm94LmZyYW1lT25jZSgyLCB0aGlzLCB0aGlzLm9uTG9hZGVkKTtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgb25Mb2FkZWQoKTogdm9pZCB7XG4gICAgICAgLyog6K6+572u5oyJ6ZKu5Li65Y2V5oCB5oyJ6ZKuXG4gICAgICAgICoqIOWPluWAvO+8mlxuICAgICAgICAqKiAx77ya5Y2V5oCB44CC5Zu+54mH5LiN5YGa5YiH5Ymy77yM5oyJ6ZKu55qE55qu6IKk54q25oCB5Y+q5pyJ5LiA56eN44CCXG4gICAgICAgICoqIDLvvJrkuKTmgIHjgILlm77niYflsIbku6Xnq5bnm7TmlrnlkJHooqvnrYnmr5TliIflibLkuLoy6YOo5YiG77yM5LuO5LiK5ZCR5LiL77yM5L6d5qyh5Li65by56LW354q25oCB55qu6IKk44CB5oyJ5LiL5ZKM57uP6L+H5Y+K6YCJ5Lit54q25oCB55qu6IKk44CCXG4gICAgICAgICoqIDPvvJrkuInmgIHjgILlm77niYflsIbku6Xnq5bnm7TmlrnlkJHooqvnrYnmr5TliIflibLkuLoy6YOo5YiG77yM5LuO5LiK5ZCR5LiL77yM5L6d5qyh5Li65by56LW354q25oCB55qu6IKk44CB57uP6L+H54q25oCB55qu6IKk44CB5oyJ5LiL5ZKM6YCJ5Lit54q25oCB55qu6IKkXG4gICAgICAgICovXG4gICAgICAgIC8v5re75Yqg6byg5qCH5oyJ5LiL5LqL5Lu25L6m5ZCs44CC5oyJ5pe25pe257yp5bCP5oyJ6ZKu44CCXG4gICAgICAgIHRoaXMubW9ua2V5Qm94Lm9uKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5zY2FsZVNtYWxsKTtcbiAgICAgICAgLy/mt7vliqDpvKDmoIfmiqzotbfkuovku7bkvqblkKzjgILmiqzotbfml7bov5jljp/mjInpkq7jgIJcbiAgICAgICAgdGhpcy5tb25rZXlCb3gub24oTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5zY2FsZUJpZyk7XG4gICAgICAgIC8v5re75Yqg6byg5qCH56a75byA5LqL5Lu25L6m5ZCs44CC56a75byA5pe26L+Y5Y6f5oyJ6ZKu44CCXG4gICAgICAgIHRoaXMubW9ua2V5Qm94Lm9uKExheWEuRXZlbnQuTU9VU0VfT1VULCB0aGlzLCB0aGlzLnNjYWxlQmlnKTtcbiAgICB9XG4gICAgXG4gICAgXG4gICAgcHJpdmF0ZSBzY2FsZVNtYWxsKCk6dm9pZHtcbiAgICAgICAgLy/nvKnlsI/oh7MwLjjnmoTnvJPliqjmlYjmnpxcbiAgICAgICAgTGF5YS5Ud2Vlbi50byh0aGlzLm1vbmtleUJveCwge3NjYWxlWDowLjgsIHNjYWxlWTogMC44fSwgMik7XG4gICAgfVxuICAgIHByaXZhdGUgc2NhbGVCaWcoKTp2b2lke1xuICAgICAgICAvL+WPmOWkp+i/mOWOn+eahOe8k+WKqOaViOaenFxuICAgICAgICBMYXlhLlR3ZWVuLnRvKHRoaXMubW9ua2V5Qm94LCB7c2NhbGVYOjEsIHNjYWxlWToxfSwgMik7XG4gICAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgIGNsYXNzIFV0aWwge1xuICAgIHB1YmxpYyBsb2FkKHJlcywgb25Qcm9ncmVzcz86IExheWEuSGFuZGxlcik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoc3VjLCBmYWlsKSA9PiB7XG4gICAgICAgICAgICBMYXlhLmxvYWRlci5sb2FkKHJlcywgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCBzdWMpLCBvblByb2dyZXNzKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZS50b1N0cmluZygpKVxuICAgIH1cbiAgICBnZXRJdGVtKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBMYXlhLkxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgfVxuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogVXRpbDtcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJKCk6IFV0aWwge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IFV0aWwpO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gRGF0YUtleSB7XG4gICAgY3VyX3JlZF9kYXlfbGltaXQgPSAnY3VyX3JlZF9kYXlfbGltaXQnLFxuICAgIGN1cl9zaGFrZV9kYXlfbGltaXQgPSAnY3VyX3NoYWtlX2RheV9saW1pdCcsXG4gICAgc2hha2VMYXN0VGltZSA9ICdzaGFrZUxhc3RUaW1lJyxcbiAgICBkYXRhQ05UID0gJ2RhdGFDTlQnLFxuICAgIHRvZGF5Q250ID0gJ3RvZGF5Q250JyxcbiAgICBsYXN0VGltZSA9ICdsYXN0VGltZScsXG59Il19 2074 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL0FwcGxpY2F0aW9ucy9MYXlhQWlySURFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvYXBwL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvR2FtZUNvbmZpZy50cyIsInNyYy9NYWluLnRzIiwic3JjL1JlZERyYXdhbC50cyIsInNyYy9UZXN0U2NlbmUudHMiLCJzcmMvZXZlbnQvRXZlbnRDZW50ZXIudHMiLCJzcmMvZXZlbnQvRXZlbnRFbnVtLnRzIiwic3JjL3Nkay9BZE1hbmFnZXIudHMiLCJzcmMvc2RrL05hdGl2ZUFkLnRzIiwic3JjL3Nkay9QY1Nkay50cyIsInNyYy9zZGsvVFRBZFNkay50cyIsInNyYy9zZGsvVHJhY2tpbmdTZGsudHMiLCJzcmMvc2RrL21vZGVsL0Jhc2VNb2RlbC50cyIsInNyYy9zZGsvbW9kZWwvUmVkcGFja2V0TW9kZWwudHMiLCJzcmMvc2RrL21vZGVsL1NoYWtlTW9kZWwudHMiLCJzcmMvdWkvbGF5YU1heFVJLnRzIiwic3JjL3VpdGwvQXJyYXlVdGlscy50cyIsInNyYy91aXRsL0RhdGVVdGlscy50cyIsInNyYy91aXRsL09iamVjdEluc3RhbmNlLnRzIiwic3JjL3VpdGwvT2JqZWN0UG9vbC50cyIsInNyYy91aXRsL1NjYWxlQnV0dG9uU2NyaXB0LnRzIiwic3JjL3VpdGwvVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNWQSxnR0FBZ0c7QUFDaEcseUNBQW1DO0FBQ25DLDhEQUF3RDtBQUN4RCx5Q0FBbUM7QUFDbkMsMkNBQXFDO0FBQ3JDOztFQUVFO0FBQ0Y7SUFhSTtJQUFjLENBQUM7SUFDUixlQUFJLEdBQVg7UUFDSSxJQUFJLEdBQUcsR0FBYSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUM3QyxHQUFHLENBQUMs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QUFDLGFBQWEsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFekUsQ0FBQztJQUVELFdBQVc7SUFDTCw2QkFBUyxHQUFmOzs7Ozt3QkFDSSxPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUE7d0JBQzlDLHFCQUFNLG1CQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFBOzt3QkFBakMsU0FBaUMsQ0FBQzs7Ozs7S0FDckM7SUFFRCxtQ0FBZSxHQUFmO1FBQ0ksbUJBQVMsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELCtCQUFXLEdBQVg7UUFDSSxtQkFBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsa0NBQWMsR0FBZDtRQUNJLG1CQUFTLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxtQ0FBZSxHQUFmO1FBQ0ksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsa0JBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsb0NBQWdCLEdBQWhCO1FBQ0ksbUJBQVMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtJQUNsQyxDQUFDO0lBQ0QsaUNBQWEsR0FBYjtRQUNJLG1CQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQy9CLENBQUM7SUFFRCxZQUFZO0lBQ1osOEJBQVUsR0FBVjtRQUNJLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtRQUMvQyxtQkFBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBQ0QsY0FBYztJQUNkLDhCQUFVLEdBQVY7UUFDSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUFDLENBQUE7UUFDL0MsbUJBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVc7SUFDWCxnQ0FBWSxHQUFaO1FBQ0ksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsa0JBQVEsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRCxVQUFVO0lBQ1YsK0JBQVcsR0FBWDtRQUNJLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLENBQUMsQ0FBQTtRQUNoRCxtQkFBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBQ0QsWUFBWTtJQUNOLGdDQUFZLEdBQWxCOzs7Ozt3QkFDSSxPQUFPLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxDQUFDLENBQUE7d0JBQ2pELHFCQUFNLG1CQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFBOzt3QkFBaEMsU0FBZ0MsQ0FBQzs7Ozs7S0FFcEM7SUFDRCxVQUFVO0lBQ1YsOEJBQVUsR0FBVjtRQUNJLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtRQUMvQyxlQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFSyxpQ0FBYSxHQUFuQjs7O2dCQUNJLHdCQUFjLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFBOzs7O0tBQ3BDO0lBRUssaUNBQWEsR0FBbkI7Ozs7OzRCQUNnQixxQkFBTSxlQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFBOzt3QkFBckMsS0FBSyxHQUFHLFNBQTZCO3dCQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLE9BQU8sR0FBRyxLQUFLLENBQUM7Ozs7O0tBQ2hEO0lBR0QsWUFBWTtJQUNaLGdDQUFZLEdBQVo7UUFDSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUFDLENBQUE7UUFDL0MsZUFBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUNELFVBQVU7SUFDViw4QkFBVSxHQUFWO1FBQ0ksZUFBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw4QkFBVSxHQUFWO1FBQ0ksT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO1FBQy9DLGVBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEI7Ozs7O2NBS007UUFDTixJQUFJLElBQUksR0FBRyxvQkFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDOUMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ2xCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsUUFBUSxJQUFJLEVBQUU7WUFDVixLQUFLLENBQUM7Z0JBQ0gsa0JBQWtCLENBQUEsQ0FBQztnQkFDbEIsbUJBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzFCLE1BQU07WUFDVixLQUFLLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNmLE1BQU07WUFDVixLQUFLLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNuQixNQUFNO1lBQ1YsS0FBSyxDQUFDLENBQUM7WUFDUCxLQUFLLENBQUMsQ0FBQztZQUNQLEtBQUssQ0FBQyxDQUFDO1lBQ1AsS0FBSyxDQUFDLENBQUM7WUFDUCxLQUFLLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEIsTUFBTTtTQUNiO0lBQ0wsQ0FBQztJQUVELDRCQUFRLEdBQVIsVUFBUyxJQUFJO1FBQ1QsSUFBSSxPQUFPLENBQUM7UUFDWixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3pCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckI7O1dBRUc7UUFDSCxrQkFBa0I7UUFDbEIsY0FBYztRQUNkLHdDQUF3QztRQUN4QyxpQkFBaUI7UUFDakIsY0FBYztRQUNkLHdDQUF3QztRQUN4QyxpQkFBaUI7UUFDakIsY0FBYztRQUNkLHlDQUF5QztRQUN6QyxpQkFBaUI7UUFDakIsY0FBYztRQUNkLDRDQUE0QztRQUM1QyxpQkFBaUI7UUFDakIsY0FBYztRQUNkLHNDQUFzQztRQUN0QyxpQkFBaUI7UUFDakIsSUFBSTtRQUNKLG9FQUFvRTtJQUV4RSxDQUFDO0lBQ0Q7O09BRUc7SUFDRywrQkFBVyxHQUFqQjs7Ozs0QkFDSSxxQkFBTSxtQkFBUyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBQTs7d0JBQWhDLFNBQWdDLENBQUM7d0JBQ2pDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7Ozs7S0FDbEI7SUFDRCxZQUFZO0lBQ1osMkJBQU8sR0FBUDtRQUNJLFFBQVE7UUFDUix1Q0FBdUM7UUFDdkMsZ0RBQWdEO0lBQ3BELENBQUM7SUFDTCxnQkFBQztBQUFELENBeE1BLEFBd01DLENBeE1zQyxjQUFFLENBQUMsV0FBVyxHQXdNcEQ7Ozs7OztBQzlNRDs7RUFFRTtBQUNGO0lBQUE7SUFrQkEsQ0FBQztJQWhCRyxzQkFBbUIsZ0JBQUM7YUFBcEI7WUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM5QixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7OztPQUFBO0lBRWEsZ0JBQUksR0FBbEIsVUFBbUIsS0FBZ0I7UUFBRSxjQUFPO2FBQVAsVUFBTyxFQUFQLHFCQUFPLEVBQVAsSUFBTztZQUFQLDZCQUFPOztRQUN4QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVhLGVBQUcsR0FBakIsVUFBa0IsSUFBZSxFQUFFLE1BQVcsRUFBRSxRQUFrQixFQUFFLElBQWlCO1FBQ2pGLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFYSxrQkFBTSxHQUFwQixVQUFxQixJQUFlLEVBQUUsTUFBVyxFQUFFLFFBQWtCO1FBQ2pFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNMLGtCQUFDO0FBQUQsQ0FsQkEsQUFrQkMsSUFBQTtBQWxCWSxrQ0FBVzs7Ozs7QUNMeEIsSUFBWSxTQVNYO0FBVEQsV0FBWSxTQUFTO0lBRXBCLHlDQUF1QixpQkFBaUIscUJBQUEsQ0FBQTtJQUN4QyxrQ0FBZ0IsVUFBVSxjQUFBLENBQUE7SUFDMUIsa0NBQWdCLFVBQVUsY0FBQSxDQUFBO0lBRzFCLHFDQUFtQixhQUFhLGlCQUFBLENBQUE7QUFFakMsQ0FBQyxFQVRXLFNBQVMsR0FBVCxpQkFBUyxLQUFULGlCQUFTLFFBU3BCOzs7OztBQ1RELHFDQUFnQztBQUNoQyx5REFBb0Q7QUFFcEQ7SUFBQTtJQXdGQSxDQUFDO0lBckZHLHdCQUFJLEdBQUo7UUFDSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGlDQUFhLEdBQWI7UUFDSSxpQkFBTyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsbUNBQWUsR0FBZjtRQUNJLGlCQUFPLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxpQ0FBYSxHQUFiO1FBQ0ksaUJBQU8sQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGtDQUFjLEdBQWQ7UUFDSSxpQkFBTyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsbUNBQWUsR0FBZjtRQUNJLHNDQUFzQztJQUMxQyxDQUFDO0lBRUQsb0NBQWdCLEdBQWhCO1FBQ0ksaUJBQU8sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtJQUNoQyxDQUFDO0lBQ0QsaUNBQWEsR0FBYjtRQUNJLGlCQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQzdCLENBQUM7SUFFSyxnQ0FBWSxHQUFsQjs7Ozs7Ozt3QkFFa0IscUJBQU0saUJBQU8sQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsRUFBQTs7d0JBQXpDLEdBQUcsR0FBRyxTQUFtQzt3QkFDN0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQzt3QkFDMUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO3dCQUN2QixzQkFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFDOzs7d0JBRTVCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3QkFDdkIsc0JBQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFDLENBQUMsRUFBQzs7Ozs7S0FFaEM7SUFHSyw4QkFBVSxHQUFoQjs7Ozs7Ozt3QkFFa0IscUJBQU0saUJBQU8sQ0FBQyxDQUFDLENBQUMscUJBQXFCLEVBQUUsRUFBQTs7d0JBQTdDLEdBQUcsR0FBRyxTQUF1Qzt3QkFDakQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO3dCQUNyQixzQkFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFDOzs7d0JBRTVCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDckIsc0JBQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFDLENBQUMsRUFBQzs7Ozs7S0FFaEM7SUFFSywrQkFBVyxHQUFqQjs7Ozs7Ozt3QkFFa0IscUJBQU0saUJBQU8sQ0FBQyxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBQTs7d0JBQWhELEdBQUcsR0FBRyxTQUEwQzt3QkFDcEQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN0QixzQkFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFDOzs7d0JBRTVCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDdEIsc0JBQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFDLENBQUMsRUFBQzs7Ozs7S0FFaEM7SUFHRCxrQ0FBYyxHQUFkO1FBQ0ksT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsOEJBQVUsR0FBVjtRQUNJLGlCQUFPLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUdELGdDQUFZLEdBQVosVUFBYSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsT0FBUztRQUFULHdCQUFBLEVBQUEsV0FBUztRQUM3QixpQkFBTyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUlELHNCQUFXLGNBQUM7YUFBWjtZQUNJLE9BQU8sd0JBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsQ0FBQzs7O09BQUE7SUFDTCxnQkFBQztBQUFELENBeEZBLEFBd0ZDLElBQUE7Ozs7OztBQzNGRCx5Q0FBb0M7QUFFcEM7SUFBc0MsNEJBQVc7SUFBakQ7O0lBaUJBLENBQUM7SUFmUywrQkFBWSxHQUFuQixVQUFvQixPQUFTO1FBQVQsd0JBQUEsRUFBQSxXQUFTO1FBQ3hCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xFLG1CQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUNELDJCQUFRLEdBQVI7UUFDRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELDRCQUFTLEdBQVQ7UUFDSSxtQkFBUyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxzQkFBWSwwQkFBSTthQUFoQjtZQUNJLE9BQU8sSUFBSSxDQUFDLEtBQVksQ0FBQztRQUM3QixDQUFDOzs7T0FBQTtJQUNMLGVBQUM7QUFBRCxDQWpCQSxBQWlCQyxDQWpCcUMsSUFBSSxDQUFDLE1BQU0sR0FpQmhEOzs7Ozs7QUNuQkQseURBQW9EO0FBQ3BELG9EQUFtRDtBQUNuRCxnREFBK0M7QUFFL0M7SUFBQTtJQTJNQSxDQUFDO0lBaE1HLG9CQUFJLEdBQUo7UUFDSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELHNCQUFZLDJCQUFRO2FBQXBCO1lBQ0ksSUFBSSxRQUFRLEVBQUU7Z0JBQ1YsT0FBTyxRQUFRLENBQUM7YUFDbkI7UUFDTCxDQUFDOzs7T0FBQTtJQUlELHFCQUFxQjtJQUNiLDZCQUFhLEdBQXJCLFVBQXNCLEdBQWU7UUFBZixvQkFBQSxFQUFBLE9BQWU7O1FBQ2pDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUEsb0JBQXdFLEVBQXRFLFFBQUMsRUFBRSxRQUFDLEVBQUUsNEJBQVcsRUFBRSxvQkFBTyxFQUFFLHNCQUFRLEVBQUUsZ0JBQUssRUFBRSxnQkFBSyxDQUFxQjtRQUM3RSx5REFFaUYsRUFGaEYsbUJBQVcsRUFBRSxvQkFBWSxFQUFFLHFCQUFhLEVBQ3pDLHFCQUFhLEVBQUUsdUJBQWUsRUFDOUIsb0JBQVksRUFBRSxtQkFBVyxDQUF5RDtJQUN0RixDQUFDO0lBRUQsOEJBQWMsR0FBZDtRQUNJLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7O09BR0c7SUFDSCx1QkFBTyxHQUFQLFVBQVEsR0FBZTtRQUFmLG9CQUFBLEVBQUEsT0FBZTtRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsV0FBVztJQUNYLDBCQUFVLEdBQVY7UUFDSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxVQUFVO0lBQ1YsMEJBQVUsR0FBVjtRQUNJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUNELFVBQVU7SUFDVix3QkFBUSxHQUFSO1FBQ0ksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBQ0Q7O09BRUc7SUFDSCx3QkFBUSxHQUFSLFVBQVMsR0FBTztRQUFQLG9CQUFBLEVBQUEsT0FBTztRQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxTQUFTO0lBQ1QsMEJBQVUsR0FBVjtRQUNJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUNEOzs7T0FHRztJQUNILDZCQUFhLEdBQWI7UUFDSSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNDLDhFQUE4RTtRQUM5RSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUNEOzs7T0FHRztJQUNHLHVCQUFPLEdBQWIsVUFBYyxHQUFHOzs7O2dCQUNiLHNCQUFPLElBQUksT0FBTyxDQUFNLFVBQU8sT0FBTyxFQUFFLE1BQU07Ozt3Q0FDMUMscUJBQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFVBQUEsR0FBRzt3Q0FDaEMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7d0NBQ2IsSUFBQSxlQUFJLEVBQUUsZUFBSSxFQUFFLGFBQUcsQ0FBUzt3Q0FDaEMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFOzRDQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7eUNBQ2hCOzZDQUFNOzRDQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzt5Q0FDZjtvQ0FDTCxDQUFDLENBQUMsRUFBQTs7b0NBUkYsU0FRRSxDQUFDOzs7O3lCQUNOLENBQUMsRUFBQTs7O0tBQ0w7SUFDRCxXQUFXO0lBQ0wsc0JBQU0sR0FBWjs7OztnQkFDSSxzQkFBTyxJQUFJLE9BQU8sQ0FBTSxVQUFPLE9BQU8sRUFBRSxNQUFNOzs7d0NBQzFDLHFCQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQUEsR0FBRzt3Q0FDMUIsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7d0NBQ2IsSUFBQSxlQUFJLEVBQUUsZUFBSSxFQUFFLGFBQUcsQ0FBUzt3Q0FDaEMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFOzRDQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7eUNBQ3hCOzZDQUFNOzRDQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzt5Q0FDZjtvQ0FDTCxDQUFDLENBQUMsRUFBQTs7b0NBUkYsU0FRRSxDQUFDOzs7O3lCQUNOLENBQUMsRUFBQTs7O0tBQ0w7SUFHRCxlQUFlO0lBQ1QsNkJBQWEsR0FBbkI7Ozs7Z0JBQ0ksc0JBQU8sSUFBSSxPQUFPLENBQU0sVUFBTyxPQUFPLEVBQUUsTUFBTTs7O3dDQUMxQyxxQkFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxVQUFBLEdBQUc7d0NBQ2pDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO3dDQUNiLElBQUEsZUFBSSxFQUFFLGVBQUksRUFBRSxhQUFHLENBQVM7d0NBQ2hDLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTs0Q0FDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO3lDQUN6Qjs2Q0FBTTs0Q0FDSCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7eUNBQ2Y7b0NBQ0wsQ0FBQyxDQUFDLEVBQUE7O29DQVJGLFNBUUUsQ0FBQzs7Ozt5QkFDTixDQUFDLEVBQUE7OztLQUNMO0lBRUQsVUFBVTtJQUNWLHlCQUFTLEdBQVQsVUFBVSxHQUFXLEVBQUUsS0FBTTtRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNELFVBQVU7SUFDViw4QkFBYyxHQUFkLFVBQWUsR0FBVztRQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsMkJBQVcsR0FBWCxVQUFZLE9BQWUsRUFBRSxNQUFZO1FBQXpDLGlCQVlDO1FBWEcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpREFBaUQsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO1FBQzlGLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFPLEVBQUUsTUFBTTtZQUMvQixLQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxVQUFBLEdBQUc7Z0JBQzFCLElBQUEsb0JBQWdDLEVBQTlCLGNBQUksRUFBRSxjQUFJLENBQXFCO2dCQUNyQyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7b0JBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNqQjtxQkFBTTtvQkFDSCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2I7WUFDTCxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELGdDQUFnQixHQUFoQjtRQUNJLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsNkJBQWEsR0FBYjtRQUNJLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUNELFVBQVU7SUFDVixpQ0FBaUIsR0FBakIsVUFBa0IsS0FBYSxFQUFFLFVBQW9CO1FBQ2pELElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ3RELENBQUM7SUFDRCxVQUFVO0lBQ1YscUNBQXFCLEdBQXJCLFVBQXNCLElBQVMsRUFBRSxVQUFvQjtRQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUNyRCxDQUFDO0lBQ0QsV0FBVztJQUNYLG1DQUFtQixHQUFuQixVQUFvQixJQUFTLEVBQUUsVUFBb0I7UUFDL0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDdkQsQ0FBQztJQUNELFlBQVk7SUFDWixtQ0FBbUIsR0FBbkIsVUFBb0IsSUFBUyxFQUFFLFVBQW9CO1FBQy9DLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ3ZELENBQUM7SUFDRCxVQUFVO0lBQ1Ysd0NBQXdCLEdBQXhCLFVBQXlCLElBQVMsRUFBRSxVQUFvQjtRQUNwRCxJQUFJLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUM1RCxDQUFDO0lBRUQsc0JBQUksd0JBQUs7YUFBVDtZQUNJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2QixDQUFDOzs7T0FBQTtJQUNELHNCQUFJLHdCQUFLO2FBQVQ7WUFDSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkIsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSx5QkFBTTthQUFWO1lBQ0ksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3hCLENBQUM7OztPQUFBO0lBRUQsc0JBQUksMEJBQU87YUFBWDtZQUNJLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN6QixDQUFDOzs7T0FBQTtJQUVELHNCQUFJLDBCQUFPO2FBQVg7WUFDSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDekIsQ0FBQzs7O09BQUE7SUFFRCxzQkFBYyx5QkFBTTthQUFwQjtZQUNJLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7OztPQUFBO0lBRUQsc0JBQUksNkJBQVU7YUFBZDtZQUNJLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUNELHNCQUFXLFVBQUM7YUFBWjtZQUNJLE9BQU8sd0JBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsQ0FBQzs7O09BQUE7SUFDTCxZQUFDO0FBQUQsQ0EzTUEsQUEyTUMsSUFBQTs7QUFDRCwrQkFBK0I7QUFDL0IsTUFBTSxDQUFDLGVBQWUsR0FBRztJQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2xGLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHO1FBQUMsYUFBTTthQUFOLFVBQU0sRUFBTixxQkFBTSxFQUFOLElBQU07WUFBTix3QkFBTTs7UUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUN0Qyx5QkFBVyxDQUFDLElBQUksQ0FBQyxxQkFBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pDLENBQUMsQ0FBQTtJQUNELFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHO1FBQUMsYUFBTTthQUFOLFVBQU0sRUFBTixxQkFBTSxFQUFOLElBQU07WUFBTix3QkFBTTs7UUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUNwQyx5QkFBVyxDQUFDLElBQUksQ0FBQyxxQkFBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pDLENBQUMsQ0FBQTtBQUNMLENBQUMsQ0FBQTs7Ozs7QUMzTkQseURBQW9EO0FBQ3BELGlDQUE0QjtBQUU1QjtJQUFBO0lBd0dBLENBQUM7SUF2R0c7OztPQUdHO0lBQ0csbUNBQWlCLEdBQXZCLFVBQXdCLE9BQW1CO1FBQW5CLHdCQUFBLEVBQUEsV0FBbUI7Ozs7Z0JBQ25DLElBQUksR0FBRztvQkFDUCxJQUFJLEVBQUUsQ0FBQztvQkFDUCxVQUFVLEVBQUUsT0FBTztpQkFDdEIsQ0FBQTtnQkFDRCxzQkFBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQU8sRUFBRSxNQUFNO3dCQUMvQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7d0JBQ3ZCLGVBQUssQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFVBQUEsR0FBRzs0QkFDM0IsSUFBQSxvQkFBbUMsRUFBakMsY0FBSSxFQUFFLG9CQUFPLENBQXFCOzRCQUN4QyxRQUFRLElBQUksRUFBRTtnQ0FDVixLQUFLLENBQUMsQ0FBQztvQ0FDSCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7b0NBQ2pCLG9CQUFvQixDQUFBLENBQUM7b0NBQ3BCLE1BQU07Z0NBQ1YsS0FBSyxHQUFHO29DQUNKLFVBQVUsR0FBRyxJQUFJLENBQUM7b0NBQ2xCLE1BQU07Z0NBQ1YsS0FBSyxHQUFHO29DQUNKLE1BQU07Z0NBQ1YsS0FBSyxDQUFDO29DQUNGLElBQUksVUFBVSxFQUFFO3dDQUNaLE9BQU8sRUFBRSxDQUFDO3FDQUNiO3lDQUFNO3dDQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztxQ0FDeEI7b0NBQ0QsTUFBTTs2QkFDYjt3QkFDTCxDQUFDLENBQUMsQ0FBQTtvQkFDTixDQUFDLENBQUMsRUFBQTs7O0tBQ0w7SUFFSyx1Q0FBcUIsR0FBM0IsVUFBNEIsT0FBbUI7UUFBbkIsd0JBQUEsRUFBQSxXQUFtQjs7OztnQkFDdkMsSUFBSSxHQUFHO29CQUNQLENBQUMsRUFBRSxlQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUs7b0JBQ2hCLENBQUMsRUFBRSxlQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRztvQkFDM0IsVUFBVSxFQUFFLENBQUM7b0JBQ2IsSUFBSSxFQUFFLENBQUM7aUJBQ1YsQ0FBQTtnQkFDRCxzQkFBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQU8sRUFBRSxNQUFNO3dCQUMvQixlQUFLLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUMsVUFBQSxHQUFHOzRCQUNsRCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7d0JBQ2hCLENBQUMsQ0FBQyxDQUFBO29CQUNOLENBQUMsQ0FBQyxFQUFBOzs7S0FDTDtJQUVLLHFDQUFtQixHQUF6QixVQUEwQixDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBUSxFQUFFLE9BQW1CO1FBQTdCLHFCQUFBLEVBQUEsUUFBUTtRQUFFLHdCQUFBLEVBQUEsV0FBbUI7Ozs7Z0JBQ3BFLE1BQU0sR0FBRyxlQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDMUMsTUFBTSxHQUFHLGVBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUM1QyxJQUFJLEdBQUc7b0JBQ1AsSUFBSSxFQUFFLElBQUk7b0JBQ1YsVUFBVSxFQUFFLE9BQU87b0JBQ25CLENBQUMsRUFBRSxLQUFLLEdBQUcsTUFBTTtvQkFDakIsQ0FBQyxFQUFFLE1BQU0sR0FBRyxNQUFNO29CQUNsQixJQUFJLEVBQUUsQ0FBQyxHQUFHLE1BQU07b0JBQ2hCLEdBQUcsRUFBRSxDQUFDLEdBQUcsTUFBTTtpQkFDbEIsQ0FBQTtnQkFDRCxlQUFLLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUMsVUFBQSxHQUFHO29CQUNsRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQzdCLENBQUMsQ0FBQyxDQUFBOzs7O0tBQ0w7SUFFSyxxQ0FBbUIsR0FBekIsVUFBMEIsT0FBbUI7UUFBbkIsd0JBQUEsRUFBQSxXQUFtQjs7OztnQkFDckMsSUFBSSxHQUFHO29CQUNQLENBQUMsRUFBRSxlQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUs7b0JBQ2hCLENBQUMsRUFBRSxlQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRztvQkFDM0IsVUFBVSxFQUFFLE9BQU87b0JBQ25CLElBQUksRUFBRSxDQUFDO2lCQUNWLENBQUE7Z0JBQ0Qsc0JBQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxPQUFPLEVBQUUsTUFBTTt3QkFDL0IsZUFBSyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFDLFVBQUEsR0FBRzs0QkFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO3dCQUNoQixDQUFDLENBQUMsQ0FBQTtvQkFDTixDQUFDLENBQUMsRUFBQTs7O0tBQ0w7SUFFRCxrQ0FBZ0IsR0FBaEI7UUFDSSxlQUFLLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUNELCtCQUFhLEdBQWI7UUFDSSxlQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFSywwQ0FBd0IsR0FBOUIsVUFBK0IsT0FBbUI7UUFBbkIsd0JBQUEsRUFBQSxXQUFtQjs7OztnQkFDMUMsSUFBSSxHQUFHO29CQUNQLENBQUMsRUFBRSxlQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHO29CQUN0QixDQUFDLEVBQUUsZUFBSyxDQUFDLENBQUMsQ0FBQyxNQUFNO29CQUNqQixVQUFVLEVBQUUsT0FBTztpQkFDdEIsQ0FBQTtnQkFDRCxzQkFBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQU8sRUFBRSxNQUFNO3dCQUMvQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7d0JBQ3ZCLGVBQUssQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBQyxVQUFBLEdBQUc7NEJBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTt3QkFDaEIsQ0FBQyxDQUFDLENBQUE7b0JBQ04sQ0FBQyxDQUFDLEVBQUE7OztLQUNMO0lBRUQsc0JBQVcsWUFBQzthQUFaO1lBQ0ksT0FBTyx3QkFBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQVksQ0FBQztRQUNsRCxDQUFDOzs7T0FBQTtJQUNMLGNBQUM7QUFBRCxDQXhHQSxBQXdHQyxJQUFBOzs7Ozs7QUMzR0QseURBQW9EO0FBQ3BELGlDQUE0QjtBQUM1Qjs7O0dBR0c7QUFDSDtJQUFBO0lBUUEsQ0FBQztJQVBHLHlCQUFHLEdBQUgsVUFBSSxHQUFXO1FBQ1gsZUFBSyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELHNCQUFXLGdCQUFDO2FBQVo7WUFDSSxPQUFPLHdCQUFjLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBZ0IsQ0FBQztRQUMxRCxDQUFDOzs7T0FBQTtJQUNMLGtCQUFDO0FBQUQsQ0FSQSxBQVFDLElBQUE7O0FBRUQsSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ25CLG1DQUFvQixDQUFBO0lBQ3BCLG1DQUFvQixDQUFBO0FBQ3hCLENBQUMsRUFIVyxXQUFXLEdBQVgsbUJBQVcsS0FBWCxtQkFBVyxRQUd0Qjs7Ozs7QUNuQkQsb0RBQStDO0FBRS9DOztFQUVFO0FBQ0Y7SUFBQTtRQUNjLFVBQUssR0FBUSxFQUFFLENBQUM7UUFDbEIsY0FBUyxHQUFvQixFQUFFLENBQUM7UUFDaEMsaUJBQVksR0FBUSxFQUFFLENBQUM7SUErRG5DLENBQUM7SUE3RGdCLDBCQUFNLEdBQW5CLFVBQW9CLElBQVM7Ozs7O2dCQUN6QixJQUFJLENBQUMsS0FBSyxnQkFDSCxJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FDVixDQUFBO2dCQUNELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQUEsSUFBSTtvQkFDdkIsSUFBSSxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckIsQ0FBQyxDQUFDLENBQUE7b0NBQ08sR0FBRztvQkFDUixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3RCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTt3QkFDZixJQUFJLEdBQUcsR0FBRyxPQUFLLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDakMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBQSxJQUFJOzRCQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2hCLENBQUMsQ0FBQyxDQUFBO3FCQUNMO2dCQUNMLENBQUM7O2dCQVJELEtBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZOzRCQUF4QixHQUFHO2lCQVFYOzs7O0tBQ0o7SUFFTSwyQkFBTyxHQUFkLFVBQWUsR0FBVztRQUExQixpQkFnQkM7UUFmRyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQUEsT0FBTztZQUN0QixJQUFJLEtBQUssQ0FBQztZQUNWLEtBQUssR0FBRyxLQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLElBQUksS0FBSyxFQUFFO2dCQUNQLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDZixPQUFPO2FBQ1Y7WUFDRCxJQUFJLEVBQUUsR0FBRyxVQUFBLElBQUk7Z0JBQ1QsSUFBSSxJQUFJLEVBQUU7b0JBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNkLEtBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUMzQjtZQUNMLENBQUMsQ0FBQTtZQUNELEtBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFTSw0QkFBUSxHQUFmLFVBQWdCLElBQWMsRUFBRSxHQUFZLEVBQUUsR0FBbUI7UUFBbkIsb0JBQUEsRUFBQSxVQUFtQjtRQUM3RCxJQUFJLEdBQUcsRUFBRTtZQUNMLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUIsR0FBRyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM1QyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xCO2FBQU07WUFDSCxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QjtJQUNMLENBQUM7SUFFTSw2QkFBUyxHQUFoQixVQUFpQixJQUFjLEVBQUUsR0FBWTtRQUN6QyxJQUFJLEdBQUcsRUFBRTtZQUNMLG9CQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDMUQ7YUFBTTtZQUNILG9CQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbEQ7SUFDTCxDQUFDO0lBRU0sNkJBQVMsR0FBaEI7UUFDSSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBQ0wsZ0JBQUM7QUFBRCxDQWxFQSxBQWtFQyxJQUFBOzs7Ozs7QUN2RUQseUNBQW9DO0FBQ3BDLGlEQUE0QztBQUU1QyxxREFBaUU7QUFDakUsa0RBQTZDO0FBQzdDLHdDQUFnRDtBQUNoRCw0REFBdUQ7QUFDdkQsdURBQXNEO0FBQ3RELG1EQUFrRDtBQUNsRCxrQ0FBNkI7QUFFN0I7SUFBNEMsa0NBQVM7SUFBckQ7UUFBQSxxRUFrSkM7UUFqSlcsU0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNqQixpQkFBaUI7UUFDVCxpQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUVsQixrQkFBWSxHQUFXLENBQUMsQ0FBQztRQUN6QixhQUFPLEdBQVcsQ0FBQyxDQUFDOztJQTRJL0IsQ0FBQztJQTFJRyxhQUFhO0lBQ1AsNkJBQUksR0FBVjs7Ozs7OzRCQUVjLHFCQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBQTs7d0JBQS9CLEdBQUcsR0FBRyxTQUF5Qjt3QkFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7d0JBQ3JFLElBQUksR0FBRyxDQUFDLENBQUM7d0JBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7d0JBQ2YsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFBLFFBQVE7NEJBQ2hCLEtBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQzt3QkFDdEMsQ0FBQyxDQUFDLENBQUM7d0JBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQzt3QkFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7S0FFbkM7SUFJRCxpQ0FBUSxHQUFSO1FBQ0ksSUFBSSxJQUFJLEdBQUcsSUFBSSxhQUFhLENBQUM7UUFDN0IsSUFBSSxRQUFRLEdBQUcsY0FBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQztRQUN2RCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVuQyxJQUFJLElBQUksR0FBRyxtQkFBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxLQUFLLEdBQUcsbUJBQVMsQ0FBQyxLQUFLLENBQUM7UUFDNUIsSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDbEIsUUFBUSxHQUFHLG1CQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hDLGNBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQU8sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDMUMsY0FBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN2QzthQUFNO1lBQ0gsSUFBSSxRQUFRLEdBQUcsY0FBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQztZQUN2RCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN0QztRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLElBQUksT0FBTyxHQUFHLGNBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDckQsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBR0sscUNBQVksR0FBbEI7Ozs7Ozt3QkFDUSxNQUFNLEdBQUcsZUFBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7d0JBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBOzZCQUNoRSxNQUFNLEVBQU4sd0JBQU07d0JBQ1cscUJBQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQTs7d0JBQTdELFVBQVUsR0FBRyxTQUFnRDt3QkFDakUsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7d0JBQ25FLHNCQUFPLFVBQVUsRUFBQzs7d0JBRWxCLGVBQUssQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7Ozs7OztLQUVoQztJQUNLLG9DQUFXLEdBQWpCLFVBQWtCLEdBQVc7Ozs7OzRCQUNSLHFCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUE7O3dCQUFqQyxVQUFVLEdBQUcsU0FBb0I7d0JBQ3JDLHNCQUFPLFVBQVUsRUFBQzs7OztLQUNyQjtJQUVELDZCQUFJLEdBQUosVUFBSyxHQUFHLEVBQUUsVUFBeUI7UUFBbkMsaUJBSUM7UUFIRyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQUMsR0FBRyxFQUFFLElBQUk7WUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFSyx1Q0FBYyxHQUFwQjs7Ozs7O3dCQUVJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVc7NEJBQUUsc0JBQU8sS0FBSyxFQUFDO3dCQUN6RCxJQUFJLG1CQUFTLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRTs0QkFBRSxzQkFBTyxLQUFLLEVBQUM7d0JBQy9DLDhEQUE4RDt3QkFDOUQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFOzRCQUNuQixzQkFBTyxLQUFLLEVBQUM7eUJBQ2hCO3dCQUNELElBQUksU0FBUyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRzs0QkFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7d0JBQy9DLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQzt3QkFDeEIsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU87NEJBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO3dCQUM1QyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQzFCLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7NkJBRXJCLENBQUEsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFBLEVBQXZCLHdCQUF1Qjt3QkFDbkIsSUFBSSxHQUFHLFFBQVEsQ0FBQzt3QkFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7d0JBQ3pCLGdDQUFnQzt3QkFDaEMscUJBQU0sbUJBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUE7O3dCQURoQyxnQ0FBZ0M7d0JBQ2hDLFNBQWdDLENBQUE7d0JBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQTt3QkFDekMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO3dCQUNsQixZQUFZO3dCQUNaLHlCQUFXLENBQUMsSUFBSSxDQUFDLHFCQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBRXhDLE9BQU87d0JBQ1Asc0JBQU8sSUFBSSxFQUFDOzRCQUVoQixzQkFBTyxLQUFLLEVBQUM7Ozs7S0FDaEI7SUFFRCxvQ0FBVyxHQUFYO1FBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTztRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNsQixxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMseUJBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDbEIscUJBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLHlCQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDdEIsY0FBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLGNBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTTtJQUNBLHdDQUFlLEdBQXJCOzs7Z0JBQ0ksc0JBQU8sSUFBSSxDQUFDLFlBQVksRUFBQzs7O0tBQzVCO0lBRUQsc0JBQUksZ0NBQUk7YUFBUjtZQUNJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN0QixDQUFDOzs7T0FBQTtJQUNELGNBQWM7SUFDUixxQ0FBWSxHQUFsQjs7Ozs7NEJBQ29CLHFCQUFNLGVBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUE7O3dCQUFsQyxTQUFTLEdBQUcsU0FBc0I7d0JBQ3RDLHNCQUFPLFNBQVMsRUFBQzs7OztLQUNwQjtJQUNELGdCQUFnQjtJQUNWLGdDQUFPLEdBQWIsVUFBYyxHQUFlO1FBQWYsb0JBQUEsRUFBQSxPQUFlOzs7Ozs0QkFDVixxQkFBTSxlQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBQTs7d0JBQXJDLFFBQVEsR0FBRyxTQUEwQjt3QkFDekMsc0JBQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFDOzs7O0tBQzNCO0lBRUQsWUFBWTtJQUNMLHNDQUFhLEdBQXBCOzs7Ozs0QkFDa0IscUJBQU0sZUFBSyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBQTs7d0JBQXZDLE9BQU8sR0FBRyxTQUE2Qjt3QkFDM0Msc0JBQU8sT0FBTyxFQUFDOzs7O0tBQ2xCO0lBQ0Qsc0JBQVcsbUJBQUM7YUFBWjtZQUNJLE9BQU8sd0JBQWMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFtQixDQUFDO1FBQ2hFLENBQUM7OztPQUFBO0lBQ0wscUJBQUM7QUFBRCxDQWxKQSxBQWtKQyxDQWxKMkMsbUJBQVMsR0FrSnBEOztBQUVEO0lBQUE7SUFLQSxDQUFDO0lBQUQsb0JBQUM7QUFBRCxDQUxBLEFBS0MsSUFBQTtBQUVEO0lBQUE7SUFJQSxDQUFDO0lBQUQsMEJBQUM7QUFBRCxDQUpBLEFBSUMsSUFBQTs7Ozs7QUMxS0QseUNBQW9DO0FBQ3BDLGtEQUE2QztBQUM3Qyx3Q0FBZ0Q7QUFDaEQsNERBQXVEO0FBQ3ZELGtDQUE2QjtBQUU3Qjs7R0FFRztBQUNIO0lBQXdDLDhCQUFTO0lBQWpEO1FBQUEscUVBeUdDO1FBdEdXLHVCQUFpQixHQUFhLEVBQUUsQ0FBQztRQUNqQyxpQkFBVyxHQUFXLENBQUMsQ0FBQztRQUN4QixlQUFTLEdBQVcsQ0FBQyxDQUFDO1FBQzlCLGdCQUFnQjtRQUNSLG1CQUFhLEdBQVcsQ0FBQyxDQUFDO1FBQzFCLHVCQUFpQixHQUFXLENBQUMsQ0FBQztRQUN0QyxlQUFlO1FBQ1AscUJBQWUsR0FBVyxDQUFDLENBQUM7UUFFNUIseUJBQW1CLEdBQVcsQ0FBQyxDQUFDOztJQTZGNUMsQ0FBQztJQTNGUyx5QkFBSSxHQUFWOzs7O2dCQUNRLE1BQU0sR0FBRyxlQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztnQkFBQSxDQUFDO2dCQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtnQkFDakYsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ2QsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7aUJBQ3hDOzs7O0tBQ0o7SUFFRCw2QkFBUSxHQUFSLFVBQVMsUUFBUTtRQUNiLElBQUksSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDO1FBQ3pCLElBQUksUUFBUSxHQUFHLGNBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDNUQsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLElBQUksSUFBSSxHQUFHLG1CQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLElBQUksS0FBSyxHQUFHLG1CQUFTLENBQUMsS0FBSyxDQUFDO1FBRTVCLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRTtZQUNmLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztZQUMzQixRQUFRLEdBQUcsbUJBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEMsY0FBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQy9DLGNBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3QyxjQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFPLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBRW5EO2FBQU07WUFDSCxJQUFJLGlCQUFpQixHQUFHLGNBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQztZQUN6RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDckQsSUFBSSxtQkFBbUIsR0FBRyxjQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxHQUFHLENBQUM7WUFDN0UsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQzVEO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLEdBQUc7WUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUNqQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUNuRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQy9DLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxvQ0FBZSxHQUFmO1FBQUEsaUJBV0M7UUFWRyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFDLEdBQUcsRUFBRSxLQUFLO1lBQ3pCLEtBQUksQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUMvQixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQ3ZCLElBQUksS0FBSyxHQUFHLENBQUM7Z0JBQ1QsS0FBSyxJQUFJLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDL0MsS0FBSSxDQUFDLGlCQUFpQixHQUFPLEtBQUksQ0FBQyxpQkFBaUIsU0FBRSxLQUFLLEVBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztJQUVuRCxDQUFDO0lBRUQsaUNBQVksR0FBWjtRQUNJLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQzNCLGNBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQU8sQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUV0RSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ2pELGtCQUFrQjtZQUVsQixnQkFBZ0I7WUFDaEIsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdkQsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDakQsSUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRTtvQkFDNUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUM7b0JBQ3pCLGNBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQU8sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDbEUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRTt3QkFDN0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7cUJBRXhDO2lCQUNKO2dCQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMzQjtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELHNCQUFJLDRCQUFJO2FBQVI7WUFDSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdEIsQ0FBQzs7O09BQUE7SUFFRCxzQkFBVyxlQUFDO2FBQVo7WUFDSSxPQUFPLHdCQUFjLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBZSxDQUFDO1FBQ3hELENBQUM7OztPQUFBO0lBQ0wsaUJBQUM7QUFBRCxDQXpHQSxBQXlHQyxDQXpHdUMsbUJBQVMsR0F5R2hEOztBQUdEO0lBQUE7UUFFSSxvQkFBZSxHQUFzQixFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUFELGdCQUFDO0FBQUQsQ0FIQSxBQUdDLElBQUE7Ozs7O0FDckhELElBQU8sS0FBSyxHQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDeEIsSUFBSSxHQUFHLEdBQWEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7QUFDN0MsSUFBYyxFQUFFLENBOEJmO0FBOUJELFdBQWMsRUFBRTtJQUNaO1FBQWlDLCtCQUFLO1FBc0JsQzttQkFBZSxpQkFBTztRQUFBLENBQUM7UUFDdkIsb0NBQWMsR0FBZDtZQUNJLGlCQUFNLGNBQWMsV0FBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNMLGtCQUFDO0lBQUQsQ0EzQkEsQUEyQkMsQ0EzQmdDLEtBQUssR0EyQnJDO0lBM0JZLGNBQVcsY0EyQnZCLENBQUE7SUFDRCxHQUFHLENBQUMsZ0JBQWdCLEVBQUMsV0FBVyxDQUFDLENBQUM7QUFDdEMsQ0FBQyxFQTlCYSxFQUFFLEdBQUYsVUFBRSxLQUFGLFVBQUUsUUE4QmY7Ozs7O0FDbkNEO0lBQUE7SUE2REEsQ0FBQztJQTVERzs7T0FFRztJQUNJLHdCQUFhLEdBQXBCLFVBQXFCLEdBQWUsRUFBRSxHQUFRO1FBQzFDLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVNLHdCQUFhLEdBQXBCLFVBQXFCLEdBQWU7UUFDaEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNJLGtCQUFPLEdBQWQsVUFBZSxHQUFlO1FBQzFCLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQztZQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxrQkFBTyxHQUFkLFVBQWUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFJO1FBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUIsT0FBTyxDQUFDLENBQUM7U0FDaEI7UUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVNLGVBQUksR0FBWCxVQUFZLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTztRQUM5QixJQUFJLE9BQU8sUUFBUSxLQUFLLFVBQVU7WUFDOUIsTUFBTSxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBRTFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztnQkFDdEMsTUFBTTtTQUNiO0lBQ0wsQ0FBQztJQUVZLGdCQUFLLEdBQWxCLFVBQW1CLEdBQUc7Ozs7Ozt3QkFDZCxHQUFHLEdBQUcsSUFBSSxDQUFDOzhCQUNRLEVBQUgsV0FBRzs7OzZCQUFILENBQUEsaUJBQUcsQ0FBQTt3QkFBZCxPQUFPO3dCQUNOLHFCQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBQTs7d0JBQXhCLEdBQUcsR0FBRyxTQUFrQixDQUFBOzs7d0JBRFIsSUFBRyxDQUFBOzs0QkFHaEIscUJBQU0sR0FBRyxFQUFBOzRCQUFoQixzQkFBTyxTQUFTLEVBQUM7Ozs7S0FDcEI7SUFFTSx5QkFBYyxHQUFyQixVQUFzQixHQUFHLEVBQUUsS0FBSztRQUM1QixJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDckIsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO1FBQ25DLE9BQU8sR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFO1lBQ2hCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDTCxpQkFBQztBQUFELENBN0RBLEFBNkRDLElBQUE7Ozs7OztBQzdERDs7R0FFRztBQUNIO0lBQUE7SUEyUUEsQ0FBQztJQTFRRyxzQkFBVyxnQkFBRzthQUFkO1lBQ0ksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQzs7O09BQUE7SUFFRCxzQkFBVyxvQkFBTzthQUFsQjtZQUNJLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQyxDQUFDOzs7T0FBQTtJQUVELHNCQUFXLGtCQUFLO2FBQWhCO1lBQ0ksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM5QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQixPQUFVLElBQUksU0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFHLENBQUM7UUFDMUQsQ0FBQzs7O09BQUE7SUFFTSxpQkFBTyxHQUFkLFVBQWUsT0FBZTtRQUMxQixJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDOUIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUIsT0FBVSxJQUFJLFNBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBRyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLDJCQUFpQixHQUF4QixVQUF5QixNQUFjLEVBQUUsSUFBZ0I7UUFBaEIscUJBQUEsRUFBQSxRQUFnQjtRQUNyRCxJQUFJLEdBQUcsR0FBVyxFQUFFLENBQUM7UUFDckIsUUFBUSxJQUFJLEVBQUU7WUFDVixLQUFLLENBQUM7Z0JBQ0YsR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdEMsTUFBTTtZQUNWLEtBQUssQ0FBQztnQkFDRixHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0QyxNQUFNO1lBQ1YsS0FBSyxDQUFDO2dCQUNGLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RDLE1BQU07WUFDVixLQUFLLENBQUM7Z0JBQ0YsR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdEMsTUFBTTtZQUNWLEtBQUssQ0FBQztnQkFDRixHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0QyxNQUFNO1lBQ1YsS0FBSyxDQUFDO2dCQUNGLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RDLE1BQU07U0FDYjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELFdBQVc7SUFDSSw0QkFBa0IsR0FBakMsVUFBa0MsQ0FBYTtRQUFiLGtCQUFBLEVBQUEsS0FBYTtRQUMzQyxJQUFJLEtBQUssR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLE9BQU8sR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN6QyxJQUFJLElBQVksQ0FBQztRQUNqQixJQUFJLElBQVksQ0FBQztRQUNqQixJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDWixJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQ2Y7YUFBTSxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7U0FDdEI7YUFBTTtZQUNILElBQUksR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFO1lBQ2QsSUFBSSxHQUFHLElBQUksQ0FBQztTQUNmO2FBQU0sSUFBSSxPQUFPLEdBQUcsRUFBRSxFQUFFO1lBQ3JCLElBQUksR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDO1NBQ3hCO2FBQU07WUFDSCxJQUFJLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQztTQUN2QjtRQUNELE9BQU8sSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDN0IsQ0FBQztJQUVELGFBQWE7SUFDRSw0QkFBa0IsR0FBakMsVUFBa0MsQ0FBYTtRQUFiLGtCQUFBLEVBQUEsS0FBYTtRQUMzQyxJQUFJLE1BQU0sR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUMxQyxJQUFJLEtBQWEsQ0FBQztRQUNsQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDYixLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ2hCO2FBQU07WUFDSCxJQUFJLE1BQU0sR0FBRyxFQUFFO2dCQUNYLEtBQUssR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO2lCQUNwQjtnQkFDRCxJQUFJLENBQUMsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDO2dCQUNwQixJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUU7b0JBQ2QsS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ2xDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7aUJBQ3hDOztvQkFDRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUN6QztTQUNKO1FBQ0QsSUFBSSxLQUFLLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxPQUFPLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDM0QsSUFBSSxJQUFZLENBQUM7UUFDakIsSUFBSSxJQUFZLENBQUM7UUFDakIsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ1osSUFBSSxHQUFHLElBQUksQ0FBQztTQUNmO2FBQU0sSUFBSSxLQUFLLEdBQUcsRUFBRSxFQUFFO1lBQ25CLElBQUksR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1NBQ3RCO2FBQU07WUFDSCxJQUFJLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztTQUNyQjtRQUNELElBQUksT0FBTyxJQUFJLENBQUMsRUFBRTtZQUNkLElBQUksR0FBRyxJQUFJLENBQUM7U0FDZjthQUFNLElBQUksT0FBTyxHQUFHLEVBQUUsRUFBRTtZQUNyQixJQUFJLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQztTQUN4QjthQUFNO1lBQ0gsSUFBSSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUM7U0FDdkI7UUFDRCxPQUFPLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0lBQ2pELENBQUM7SUFFRCxVQUFVO0lBQ0ssNEJBQWtCLEdBQWpDLFVBQWtDLENBQWE7UUFBYixrQkFBQSxFQUFBLEtBQWE7UUFDM0MsSUFBSSxNQUFNLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDMUMsSUFBSSxLQUFLLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxPQUFPLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDM0QsSUFBSSxJQUFZLENBQUM7UUFDakIsSUFBSSxJQUFZLENBQUM7UUFDakIsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ1osSUFBSSxHQUFHLElBQUksQ0FBQztTQUNmO2FBQU0sSUFBSSxLQUFLLEdBQUcsRUFBRSxFQUFFO1lBQ25CLElBQUksR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO1NBQ3RCO2FBQU07WUFDSCxJQUFJLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztTQUNyQjtRQUNELElBQUksT0FBTyxJQUFJLENBQUMsRUFBRTtZQUNkLElBQUksR0FBRyxJQUFJLENBQUM7U0FDZjthQUFNLElBQUksT0FBTyxHQUFHLEVBQUUsRUFBRTtZQUNyQixJQUFJLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQztTQUN4QjthQUFNO1lBQ0gsSUFBSSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUM7U0FDdkI7UUFDRCxPQUFPLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRCxvQkFBb0I7SUFDTCw0QkFBa0IsR0FBakMsVUFBa0MsSUFBWTtRQUMxQyxJQUFJLElBQUksR0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLElBQUksR0FBVyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEMsSUFBSSxLQUFLLEdBQVcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFFLGFBQWE7UUFDdkQsSUFBSSxHQUFHLEdBQVcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLElBQUksS0FBSyxHQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQyxJQUFJLE1BQU0sR0FBVyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkMsSUFBSSxNQUFNLEdBQVcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztJQUV0RixDQUFDO0lBRUQsb0JBQW9CO0lBQ0wsNEJBQWtCLEdBQWpDLFVBQWtDLElBQVk7UUFDMUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1AsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQ3BDO2lCQUNJO2dCQUNELE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUNwQjtTQUNKO2FBQ0k7WUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUN4QztJQUNMLENBQUM7SUFFYyw0QkFBa0IsR0FBakMsVUFBa0MsSUFBWTtRQUMxQyxlQUFlO1FBQ2YsSUFBSSxNQUFNLEdBQVcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMvQixJQUFJLFNBQVMsR0FBVyxJQUFJLENBQUM7UUFDN0IsSUFBSSxRQUFRLEdBQVcsRUFBRSxDQUFDO1FBRTFCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLElBQUksTUFBTSxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQTtRQUMxRCxJQUFJLEtBQUssR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQSxDQUFFLG1EQUFtRDtRQUMzSCxJQUFJLE9BQU8sR0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQSxDQUFDLE9BQU87UUFFaEYsSUFBSSxLQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksTUFBTSxHQUFXLEVBQUUsQ0FBQTtRQUN2QixJQUFJLEtBQUssR0FBVyxFQUFFLENBQUM7UUFDdkIsSUFBSSxLQUFLLEdBQVcsRUFBRSxDQUFBO1FBQ3RCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtZQUNWLEdBQUc7WUFDSCxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUU7Z0JBQ1gsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDWCxJQUFJO2dCQUNKLElBQUksTUFBTSxJQUFJLENBQUMsRUFBRTtvQkFDYixNQUFNLEdBQUcsRUFBRSxDQUFDO29CQUNaLEdBQUc7b0JBQ0gsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO3dCQUNaLEtBQUssR0FBRyxFQUFFLENBQUM7d0JBQ1gsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFOzRCQUNkLEtBQUssR0FBRyxFQUFFLENBQUM7eUJBQ2Q7NkJBQU0sSUFBSSxPQUFPLEdBQUcsRUFBRSxFQUFFOzRCQUNyQixLQUFLLEdBQUcsR0FBRyxHQUFHLE9BQU8sR0FBRyxHQUFHLENBQUM7eUJBQy9COzZCQUFNOzRCQUNILEtBQUssR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEdBQUcsQ0FBQzt5QkFDOUI7d0JBRUQsT0FBTyxLQUFLLENBQUM7cUJBQ2hCO3lCQUNJO3dCQUNELEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQzt3QkFDMUIsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFOzRCQUNkLEtBQUssR0FBRyxFQUFFLENBQUM7eUJBQ2Q7NkJBQU0sSUFBSSxPQUFPLEdBQUcsRUFBRSxFQUFFOzRCQUNyQixLQUFLLEdBQUcsR0FBRyxHQUFHLE9BQU8sR0FBRyxHQUFHLENBQUM7eUJBQy9COzZCQUFNOzRCQUNILEtBQUssR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEdBQUcsQ0FBQzt5QkFDOUI7cUJBRUo7b0JBRUQsT0FBTyxLQUFLLEdBQUcsS0FBSyxDQUFDO2lCQUN4QjtxQkFDSTtvQkFDRCxNQUFNLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztvQkFDdkIsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO3dCQUNaLEtBQUssR0FBRyxFQUFFLENBQUM7d0JBQ1gsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFOzRCQUNkLEtBQUssR0FBRyxFQUFFLENBQUM7eUJBQ2Q7NkJBQU0sSUFBSSxPQUFPLEdBQUcsRUFBRSxFQUFFOzRCQUNyQixLQUFLLEdBQUcsR0FBRyxHQUFHLE9BQU8sR0FBRyxHQUFHLENBQUM7eUJBQy9COzZCQUFNOzRCQUNILEtBQUssR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEdBQUcsQ0FBQzt5QkFDOUI7d0JBRUQsT0FBTyxNQUFNLEdBQUcsS0FBSyxDQUFBO3FCQUV4Qjt5QkFBTSxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUU7d0JBQ25CLEtBQUssR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztxQkFDOUI7eUJBQU07d0JBQ0gsS0FBSyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO3FCQUM3QjtvQkFFRCxPQUFPLE1BQU0sR0FBRyxLQUFLLENBQUM7aUJBRXpCO2FBQ0o7aUJBQ0k7Z0JBQ0QsS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7Z0JBQ25CLElBQUksTUFBTSxJQUFJLENBQUMsRUFBRTtvQkFDYixNQUFNLEdBQUcsRUFBRSxDQUFDO2lCQUNmO3FCQUFNO29CQUNILElBQUksTUFBTSxHQUFHLEVBQUU7d0JBQ1gsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDOzt3QkFFN0IsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNoQyxDQUFDO2lCQUNKO2dCQUNELE9BQU8sS0FBSyxHQUFHLE1BQU0sQ0FBQzthQUN6QjtTQUNKO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRWMsYUFBRyxHQUFsQixVQUFtQixHQUFHO1FBQ2xCLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ3RDLENBQUM7SUFHTCxnQkFBQztBQUFELENBM1FBLEFBMlFDLElBQUE7Ozs7OztBQzlRRCwyQ0FBc0M7QUFFdEM7O0VBRUU7QUFDRjtJQUFBO0lBZ0JBLENBQUM7SUFaaUIsa0JBQUcsR0FBakIsVUFBa0IsR0FBUTtRQUN0QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRWMscUJBQU0sR0FBckIsVUFBc0IsR0FBUTtRQUMxQixJQUFJLEdBQUcsR0FBRyxvQkFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFiYyxtQkFBSSxHQUFHLEVBQUUsQ0FBQztJQUNWLHNCQUFPLEdBQUcsRUFBRSxDQUFDO0lBY2hDLHFCQUFDO0NBaEJELEFBZ0JDLElBQUE7a0JBaEJvQixjQUFjOzs7OztBQ0xuQztJQUFBO0lBa0JBLENBQUM7SUFmVSxjQUFHLEdBQVYsVUFBVyxHQUFRO1FBQ2YsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO1lBQ1QsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxHQUFHLEdBQUcsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUMxQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLGVBQUksR0FBWCxVQUFZLElBQUk7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFoQmMsaUJBQU0sR0FBRyxFQUFFLENBQUM7SUFpQi9CLGlCQUFDO0NBbEJELEFBa0JDLElBQUE7a0JBbEJvQixVQUFVOzs7OztBQ0EvQjtJQU1JO1FBSk8sY0FBUyxHQUFXLENBQUMsQ0FBQztRQUN0QixhQUFRLEdBQVcsQ0FBQyxDQUFDO0lBSTVCLENBQUM7SUFLRCxzQkFBVyxvQ0FBSztRQUhoQjs7WUFFSTthQUNKLFVBQWlCLEtBQVU7WUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIseUJBQXlCO1lBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXJELENBQUM7OztPQUFBO0lBRUQsb0NBQVEsR0FBUjtRQUNHOzs7OztXQUtHO1FBQ0YscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEUscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUQscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUdPLHNDQUFVLEdBQWxCO1FBQ0ksYUFBYTtRQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBQyxNQUFNLEVBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ08sb0NBQVEsR0FBaEI7UUFDSSxXQUFXO1FBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDTCx3QkFBQztBQUFELENBM0NBLEFBMkNDLElBQUE7Ozs7OztBQzNDRDtJQUFBO0lBaUJBLENBQUM7SUFoQlUsbUJBQUksR0FBWCxVQUFZLEdBQUcsRUFBRSxVQUF5QjtRQUExQyxpQkFJQztRQUhHLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBQyxHQUFHLEVBQUUsSUFBSTtZQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELHNCQUFPLEdBQVAsVUFBUSxHQUFXLEVBQUUsS0FBVTtRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDcEQsQ0FBQztJQUNELHNCQUFPLEdBQVAsVUFBUSxHQUFXO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsc0JBQWtCLFNBQUM7YUFBbkI7WUFDSSxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7UUFDekQsQ0FBQzs7O09BQUE7SUFDTCxXQUFDO0FBQUQsQ0FqQkEsQUFpQkMsSUFBQTs7QUFFRCxJQUFZLE9BT1g7QUFQRCxXQUFZLE9BQU87SUFDZixrREFBdUMsQ0FBQTtJQUN2QyxzREFBMkMsQ0FBQTtJQUMzQywwQ0FBK0IsQ0FBQTtJQUMvQiw4QkFBbUIsQ0FBQTtJQUNuQixnQ0FBcUIsQ0FBQTtJQUNyQixnQ0FBcUIsQ0FBQTtBQUN6QixDQUFDLEVBUFcsT0FBTyxHQUFQLGVBQU8sS0FBUCxlQUFPLFFBT2xCIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxufSkoKTtcclxuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlRoaXMgY2xhc3MgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgTGF5YUFpcklERSwgcGxlYXNlIGRvIG5vdCBtYWtlIGFueSBtb2RpZmljYXRpb25zLiAqL1xyXG5pbXBvcnQgVGVzdFNjZW5lIGZyb20gXCIuL1Rlc3RTY2VuZVwiXG5pbXBvcnQgU2NhbGVCdXR0b25TY3JpcHQgZnJvbSBcIi4vdWl0bC9TY2FsZUJ1dHRvblNjcmlwdFwiXG5pbXBvcnQgUmVkRHJhd2FsIGZyb20gXCIuL1JlZERyYXdhbFwiXG5pbXBvcnQgTmF0aXZlQWQgZnJvbSBcIi4vc2RrL05hdGl2ZUFkXCJcclxuLypcclxuKiDmuLjmiI/liJ3lp4vljJbphY3nva47XHJcbiovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVDb25maWd7XHJcbiAgICBzdGF0aWMgd2lkdGg6bnVtYmVyPTc1MDtcclxuICAgIHN0YXRpYyBoZWlnaHQ6bnVtYmVyPTEzMzQ7XHJcbiAgICBzdGF0aWMgc2NhbGVNb2RlOnN0cmluZz1cImZpeGVkd2lkdGhcIjtcclxuICAgIHN0YXRpYyBzY3JlZW5Nb2RlOnN0cmluZz1cIm5vbmVcIjtcclxuICAgIHN0YXRpYyBhbGlnblY6c3RyaW5nPVwidG9wXCI7XHJcbiAgICBzdGF0aWMgYWxpZ25IOnN0cmluZz1cImxlZnRcIjtcclxuICAgIHN0YXRpYyBzdGFydFNjZW5lOmFueT1cIlRlc3RTY2VuZS5zY2VuZVwiO1xyXG4gICAgc3RhdGljIHNjZW5lUm9vdDpzdHJpbmc9XCJcIjtcclxuICAgIHN0YXRpYyBkZWJ1Zzpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIHN0YXQ6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBwaHlzaWNzRGVidWc6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBleHBvcnRTY2VuZVRvSnNvbjpib29sZWFuPXRydWU7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe31cclxuICAgIHN0YXRpYyBpbml0KCl7XHJcbiAgICAgICAgdmFyIHJlZzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XHJcbiAgICAgICAgcmVnKFwiVGVzdFNjZW5lLnRzXCIsVGVzdFNjZW5lKTtcbiAgICAgICAgcmVnKFwidWl0bC9TY2FsZUJ1dHRvblNjcmlwdC50c1wiLFNjYWxlQnV0dG9uU2NyaXB0KTtcbiAgICAgICAgcmVnKFwiUmVkRHJhd2FsLnRzXCIsUmVkRHJhd2FsKTtcbiAgICAgICAgcmVnKFwic2RrL05hdGl2ZUFkLnRzXCIsTmF0aXZlQWQpO1xyXG4gICAgfVxyXG59XHJcbkdhbWVDb25maWcuaW5pdCgpOyIsImltcG9ydCBHYW1lQ29uZmlnIGZyb20gXCIuL0dhbWVDb25maWdcIjtcclxuaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi9zZGsvQWRNYW5hZ2VyXCI7XHJcbmltcG9ydCBTaGFrZU1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9TaGFrZU1vZGVsXCI7XHJcbmltcG9ydCBQY1NkayBmcm9tIFwiLi9zZGsvUGNTZGtcIjtcclxuaW1wb3J0IFJlZHBhY2tldE1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9SZWRwYWNrZXRNb2RlbFwiO1xyXG5jbGFzcyBNYWluIHtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdC8v5qC55o2uSURF6K6+572u5Yid5aeL5YyW5byV5pOOXHRcdFxyXG5cdFx0aWYgKHdpbmRvd1tcIkxheWEzRFwiXSkgTGF5YTNELmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQpO1xyXG5cdFx0ZWxzZSBMYXlhLmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQsIExheWFbXCJXZWJHTFwiXSk7XHJcblx0XHRMYXlhW1wiUGh5c2ljc1wiXSAmJiBMYXlhW1wiUGh5c2ljc1wiXS5lbmFibGUoKTtcclxuXHRcdExheWFbXCJEZWJ1Z1BhbmVsXCJdICYmIExheWFbXCJEZWJ1Z1BhbmVsXCJdLmVuYWJsZSgpO1xyXG5cdFx0TGF5YS5zdGFnZS5zY2FsZU1vZGUgPSBHYW1lQ29uZmlnLnNjYWxlTW9kZTtcclxuXHRcdExheWEuc3RhZ2Uuc2NyZWVuTW9kZSA9IEdhbWVDb25maWcuc2NyZWVuTW9kZTtcclxuXHRcdExheWEuc3RhZ2UuYWxpZ25WID0gR2FtZUNvbmZpZy5hbGlnblY7XHJcblx0XHRMYXlhLnN0YWdlLmFsaWduSCA9IEdhbWVDb25maWcuYWxpZ25IO1xyXG5cdFx0Ly/lhbzlrrnlvq7kv6HkuI3mlK/mjIHliqDovb1zY2VuZeWQjue8gOWcuuaZr1xyXG5cdFx0TGF5YS5VUkwuZXhwb3J0U2NlbmVUb0pzb24gPSBHYW1lQ29uZmlnLmV4cG9ydFNjZW5lVG9Kc29uO1xyXG5cclxuXHRcdC8v5omT5byA6LCD6K+V6Z2i5p2/77yI6YCa6L+HSURF6K6+572u6LCD6K+V5qih5byP77yM5oiW6ICFdXJs5Zyw5Z2A5aKe5YqgZGVidWc9dHJ1ZeWPguaVsO+8jOWdh+WPr+aJk+W8gOiwg+ivlemdouadv++8iVxyXG5cdFx0aWYgKEdhbWVDb25maWcuZGVidWcgfHwgTGF5YS5VdGlscy5nZXRRdWVyeVN0cmluZyhcImRlYnVnXCIpID09IFwidHJ1ZVwiKSBMYXlhLmVuYWJsZURlYnVnUGFuZWwoKTtcclxuXHRcdGlmIChHYW1lQ29uZmlnLnBoeXNpY3NEZWJ1ZyAmJiBMYXlhW1wiUGh5c2ljc0RlYnVnRHJhd1wiXSkgTGF5YVtcIlBoeXNpY3NEZWJ1Z0RyYXdcIl0uZW5hYmxlKCk7XHJcblx0XHRpZiAoR2FtZUNvbmZpZy5zdGF0KSBMYXlhLlN0YXQuc2hvdygpO1xyXG5cdFx0TGF5YS5hbGVydEdsb2JhbEVycm9yID0gdHJ1ZTtcclxuXHJcblx0XHQvL+a/gOa0u+i1hOa6kOeJiOacrOaOp+WItu+8jHZlcnNpb24uanNvbueUsUlEReWPkeW4g+WKn+iDveiHquWKqOeUn+aIkO+8jOWmguaenOayoeacieS5n+S4jeW9seWTjeWQjue7rea1geeoi1xyXG5cdFx0TGF5YS5SZXNvdXJjZVZlcnNpb24uZW5hYmxlKFwidmVyc2lvbi5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vblZlcnNpb25Mb2FkZWQpLCBMYXlhLlJlc291cmNlVmVyc2lvbi5GSUxFTkFNRV9WRVJTSU9OKTtcclxuXHR9XHJcblxyXG5cdG9uVmVyc2lvbkxvYWRlZCgpOiB2b2lkIHtcclxuXHRcdC8v5r+A5rS75aSn5bCP5Zu+5pig5bCE77yM5Yqg6L295bCP5Zu+55qE5pe25YCZ77yM5aaC5p6c5Y+R546w5bCP5Zu+5Zyo5aSn5Zu+5ZCI6ZuG6YeM6Z2i77yM5YiZ5LyY5YWI5Yqg6L295aSn5Zu+5ZCI6ZuG77yM6ICM5LiN5piv5bCP5Zu+XHJcblx0XHRMYXlhLkF0bGFzSW5mb01hbmFnZXIuZW5hYmxlKFwiZmlsZWNvbmZpZy5qc29uXCIsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vbkNvbmZpZ0xvYWRlZCkpO1xyXG5cdH1cclxuXHJcblx0b25Db25maWdMb2FkZWQoKTogdm9pZCB7XHJcblxyXG5cdFx0dGhpcy5pbml0RGF0YSgpO1xyXG5cdFx0Ly/liqDovb1JREXmjIflrprnmoTlnLrmma9cclxuXHRcdEdhbWVDb25maWcuc3RhcnRTY2VuZSAmJiBMYXlhLlNjZW5lLm9wZW4oR2FtZUNvbmZpZy5zdGFydFNjZW5lKTtcclxuXHR9XHJcblxyXG5cdC8qKuWIneWni+WMllNESyAqL1xyXG5cdGFzeW5jIGluaXREYXRhKCkge1xyXG5cdFx0Lyoq6ZqQ6JeP5ZCv5Yqo5bGPICovXHJcblx0XHRQY1Nkay5JLmhpZGVTcGxhc2goKVxyXG5cdFx0Lyoq5Yid5aeL5YyWYWRrIOiOt+WPlmFwcOmFjee9ruS/oeaBryAqL1xyXG5cdFx0UGNTZGsuSS5pbml0KCk7XHJcblx0XHQvKirpooTliqDovb3op4bpopEgKi9cclxuXHRcdEFkTWFuYWdlci5JLmluaXQoKTtcclxuXHRcdC8qKuiOt+WPlue6ouWMhemFjee9riDmkYfkuIDmkYcg562J6Z2Z5oCB5pWw5o2uICovXHJcblx0XHRhd2FpdCBQY1Nkay5JLmluaXRHYW1lQ29uZmlnKCk7XHJcblxyXG5cclxuXHRcdGF3YWl0IFJlZHBhY2tldE1vZGVsLkkuaW5pdCgpXHJcblxyXG4gICAgICAgIGF3YWl0IFNoYWtlTW9kZWwuSS5pbml0KCk7XHJcblx0fVxyXG59XHJcbi8v5r+A5rS75ZCv5Yqo57G7XHJcbm5ldyBNYWluKCk7XHJcbiIsImltcG9ydCBSZWRwYWNrZXRNb2RlbCBmcm9tIFwiLi9zZGsvbW9kZWwvUmVkcGFja2V0TW9kZWxcIjtcbmltcG9ydCB7IEV2ZW50Q2VudGVyIH0gZnJvbSBcIi4vZXZlbnQvRXZlbnRDZW50ZXJcIjtcbmltcG9ydCB7IEV2ZW50RW51bSB9IGZyb20gXCIuL2V2ZW50L0V2ZW50RW51bVwiO1xuaW1wb3J0IFBjU2RrIGZyb20gXCIuL3Nkay9QY1Nka1wiO1xuLyoqXG4gKiDkuLvnlYzpnaIgIOmHkeW4gemHkeminVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWREcmF3YWwgZXh0ZW5kcyBMYXlhLlNjcmlwdCB7XG4gICAgLyoqIEBwcm9wIHtuYW1lOmNvaW5sYWIsIHRpcHM6XCLph5HluIFcIiwgdHlwZTpOb2RlfSovXG4gICAgY29pbmxhYjogTGF5YS5MYWJlbDtcbiAgICAvKiogQHByb3Age25hbWU6dGlwbGFiLCB0aXBzOlwi5o+Q56S6XCIsIHR5cGU6Tm9kZX0qL1xuICAgIHRpcGxhYjogTGF5YS5MYWJlbDtcblxuICAgIHByaXZhdGUgdG90YWxDb2luOiBudW1iZXIgPSAxMTA7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKTsgfVxuICAgIG9uU3RhcnQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhcigpO1xuICAgICAgICAvLyB0aGlzLnRpcGxhYi52aXNpYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIG9uRW5hYmxlKCkge1xuICAgICAgICBFdmVudENlbnRlci5hZGQoRXZlbnRFbnVtLkFQUF9TSE9XLCB0aGlzLCB0aGlzLnVwZGF0ZVN0YXIpO1xuICAgICAgICBFdmVudENlbnRlci5hZGQoRXZlbnRFbnVtLlVQREFURV9DT0lOLCB0aGlzLCB0aGlzLnVwZGF0ZVN0YXIpO1xuICAgIH1cblxuICAgIG9uRGlzYWJsZSgpIHtcbiAgICAgICAgRXZlbnRDZW50ZXIucmVtb3ZlKEV2ZW50RW51bS5BUFBfU0hPVywgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICAgICAgRXZlbnRDZW50ZXIucmVtb3ZlKEV2ZW50RW51bS5VUERBVEVfQ09JTiwgdGhpcywgdGhpcy51cGRhdGVTdGFyKTtcbiAgICB9XG5cbiAgICBhc3luYyB1cGRhdGVTdGFyKCkge1xuICAgICAgICBsZXQgY29pbiA9IGF3YWl0IFBjU2RrLkkubXlDb2luKCk7XG4gICAgICAgIHRoaXMudG90YWxDb2luID0gY29pbjtcbiAgICAgICAgdGhpcy5jb2lubGFiLnRleHQgPSAnJyArIGNvaW47XG4gICAgICAgIGxldCBzdHIgPSAn5Y+v5o+Q546wJztcbiAgICAgICAgLyoq5pu05paw5LiL5LiL5LiA5qyh5o+Q546w55qE6aKd5bqmICovXG4gICAgICAgIGxldCBuZXh0RHJhd2FsID0gYXdhaXQgIFBjU2RrLkkubWluV2l0aERyYXdhbCgpO1xuICAgICAgICBpZiAodGhpcy50b3RhbENvaW4gPiAwKSB7XG4gICAgICAgICAgICBsZXQgbGVmdENvaW4gPSBuZXh0RHJhd2FsIC0gdGhpcy50b3RhbENvaW47XG4gICAgICAgICAgICBpZiAobGVmdENvaW4gPiAwKVxuICAgICAgICAgICAgICAgIHN0ciA9IGDov5jlt64keyhsZWZ0Q29pbiAvIDEwMDAwKS50b0ZpeGVkKDMpfemHkemineWPr+aPkOeOsGA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aXBsYWIudGV4dCA9IHN0cjtcbiAgICAgICAgdGhpcy50aXBsYWIudmlzaWJsZSA9IEJvb2xlYW4obmV4dERyYXdhbCk7XG4gICAgfVxufSIsImltcG9ydCB7IHVpIH0gZnJvbSBcIi4vdWkvbGF5YU1heFVJXCI7XG5pbXBvcnQgQWRNYW5hZ2VyIGZyb20gXCIuL3Nkay9BZE1hbmFnZXJcIjtcbmltcG9ydCBTaGFrZU1vZGVsIGZyb20gXCIuL3Nkay9tb2RlbC9TaGFrZU1vZGVsXCI7XG5pbXBvcnQgUmVkcGFja2V0TW9kZWwgZnJvbSBcIi4vc2RrL21vZGVsL1JlZHBhY2tldE1vZGVsXCI7XG5pbXBvcnQgUGNTZGsgZnJvbSBcIi4vc2RrL1BjU2RrXCI7XG5pbXBvcnQgTmF0aXZlQWQgZnJvbSBcIi4vc2RrL05hdGl2ZUFkXCI7XG5pbXBvcnQgVXRpbCBmcm9tIFwiLi91aXRsL1V0aWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVzdFNjZW5lIGV4dGVuZHMgdWkuVGVzdFNjZW5lVUkge1xuICAgIHByaXZhdGUgaXNMb25nVmlicmF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICAvL+WFs+mXreWkmueCueinpuaOp++8jOWQpuWImeWwseaXoOaVjOS6hlxuICAgICAgICBMYXlhLk1vdXNlTWFuYWdlci5tdWx0aVRvdWNoRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tVGVzdFNjZW5lLS0tLS0tLScpXG4gICAgICAgIC8vIHRoaXMuTmF0aXZlQUQudmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgfVxuXG4gICAgb25FbmFibGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYnRuU2VydmVyLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMub3BlblNlcnZlcik7XG4gICAgICAgIHRoaXMuYnRuVmlicmF0ZS5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCAoKSA9PiB7XG4gICAgICAgICAgICBQY1Nkay5JLnZpYnJhdGUodGhpcy5pc0xvbmdWaWJyYXRlID8gMCA6IDEpO1xuICAgICAgICAgICAgdGhpcy5pc0xvbmdWaWJyYXRlID0gIXRoaXMuaXNMb25nVmlicmF0ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYnRuRHJhd2FsLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMub3BlblBlcnNvbmFsKTtcbiAgICAgICAgdGhpcy5idG5JbnZpdGUub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5pbnZpdGF0aW9uKTtcbiAgICAgICAgdGhpcy5idG5fc2hha2Uub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy50b3VjaFNoYWtlKTtcbiAgICAgICAgdGhpcy5idG5QcmVsb2FkQUQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5wcmVsb2FkQUQpO1xuICAgICAgICB0aGlzLmJ0blNob3dCYW5uZXIub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5zaG93QmFubmVyKTtcbiAgICAgICAgdGhpcy5idG5TaG93RnVsbEFkLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuc2hvd0Z1bGxBZCk7XG4gICAgICAgIHRoaXMuYnRuU2hvd05hdGl2ZUFkLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuc2hvd05hdGl2ZUFkKTtcbiAgICAgICAgdGhpcy5idG5TaG93SW50ZXJBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dJbnRlckFkKTtcbiAgICAgICAgdGhpcy5idG5SZXdhcmRBZC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnNob3dSZXdhcmRBZCk7XG4gICAgICAgIHRoaXMuYnRuUmVkcGFja2V0Lm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMub3BlblJlZHBhY2tldCk7XG5cbiAgICAgICAgdGhpcy5idG5QcmVWaWRlby5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnByZWxvYWRSZXdhcmRBZCk7XG4gICAgICAgIHRoaXMuYnRuUHJlRnVsbC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLnByZWxvYWRGdWxsKTtcbiAgICAgICAgdGhpcy5idG5QcmVJbnNlcnQub24oTGF5YS5FdmVudC5DTElDSywgdGhpcywgdGhpcy5wcmVsb2FkSW50ZXJBZCk7XG4gICAgICAgIHRoaXMuYnRuUHJlTmF0aXZlLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMucHJlbG9hZE5hdGl2ZUFkKTtcbiAgICAgICAgdGhpcy5idG5DbG9zZUJhbm5lci5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLmNsb3NlQWRCYW5uZXIpO1xuICAgICAgICB0aGlzLmJ0bkNsb3NlTmF0aXZlLm9uKExheWEuRXZlbnQuQ0xJQ0ssIHRoaXMsIHRoaXMuY2xvc2VBZHZlckRpYWxvZyk7XG4gICAgICAgIHRoaXMuYnRuTWluV2l0aERyYXdhbC5vbihMYXlhLkV2ZW50LkNMSUNLLCB0aGlzLCB0aGlzLm1pbldpdGhEcmF3YWwpO1xuXG4gICAgfVxuXG4gICAgLyoq6aKE5Yqg6L295bm/5ZGKICovXG4gICAgYXN5bmMgcHJlbG9hZEFEKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tcHJlbG9hZEFELS0tLS0tLScpXG4gICAgICAgIGF3YWl0IEFkTWFuYWdlci5JLnByZWxvYWRCYW5uZXIoKTtcbiAgICB9XG5cbiAgICBwcmVsb2FkUmV3YXJkQWQoKSB7XG4gICAgICAgIEFkTWFuYWdlci5JLnByZWxvYWRSZXdhcmRBZCgpO1xuICAgIH1cblxuICAgIHByZWxvYWRGdWxsKCkge1xuICAgICAgICBBZE1hbmFnZXIuSS5wcmVsb2FkRnVsbEFkKCk7XG4gICAgfVxuXG4gICAgcHJlbG9hZEludGVyQWQoKSB7XG4gICAgICAgIEFkTWFuYWdlci5JLnByZWxvYWRJbnRlckFkKCk7XG4gICAgfVxuXG4gICAgcHJlbG9hZE5hdGl2ZUFkKCkge1xuICAgICAgICB0aGlzLk5hdGl2ZUFELmdldENvbXBvbmVudChOYXRpdmVBZCkuaW5pdE5hdGl2ZUFkKDEpO1xuICAgIH1cblxuICAgIGNsb3NlQWR2ZXJEaWFsb2coKSB7XG4gICAgICAgIEFkTWFuYWdlci5JLmNsb3NlQWR2ZXJEaWFsb2coKVxuICAgIH1cbiAgICBjbG9zZUFkQmFubmVyKCkge1xuICAgICAgICBBZE1hbmFnZXIuSS5jbG9zZUFkQmFubmVyKClcbiAgICB9XG5cbiAgICAvKirmmL7npLrlhajlsY/lub/lkYogKi9cbiAgICBzaG93RnVsbEFkKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tc2hvd0Z1bGxBZC0tLS0tLS0nKVxuICAgICAgICBBZE1hbmFnZXIuSS5zaG93RnVsbEFkKCk7XG4gICAgfVxuICAgIC8qKuaYvuekumJhbm5lciAqL1xuICAgIHNob3dCYW5uZXIoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1zaG93QmFubmVyLS0tLS0tLScpXG4gICAgICAgIEFkTWFuYWdlci5JLnNob3dCYW5uZXIoKTtcbiAgICB9XG5cbiAgICAvKirkv6Hmga/mtYHlub/lkYogKi9cbiAgICBzaG93TmF0aXZlQWQoKSB7XG4gICAgICAgIHRoaXMuTmF0aXZlQUQuZ2V0Q29tcG9uZW50KE5hdGl2ZUFkKS5pbml0TmF0aXZlQWQoKTtcbiAgICB9XG5cbiAgICAvKirmj5LlsY/lub/lkYogKi9cbiAgICBzaG93SW50ZXJBZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXNob3dJbnRlckFkLS0tLS0tLScpXG4gICAgICAgIEFkTWFuYWdlci5JLnNob3dJbnRlckFkKCk7XG4gICAgfVxuICAgIC8qKua/gOWKseinhumikeW5v+WRiiAqL1xuICAgIGFzeW5jIHNob3dSZXdhcmRBZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLXNob3dSZXdhcmRBZC0tLS0tLS0nKVxuICAgICAgICBhd2FpdCBBZE1hbmFnZXIuSS5zaG93UmV3YXJkQWQoKTtcbiAgICAgICAgLyoq5oiQ5Yqf5ZCO5omn6KGM5a+55bqU55qE5aWW5YqxICovXG4gICAgfVxuICAgIC8qKuaEj+ingeWPjemmiCAqL1xuICAgIG9wZW5TZXJ2ZXIoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS1vcGVuU2VydmVyLS0tLS0tLScpXG4gICAgICAgIFBjU2RrLkkuZmVlZGJhY2soKTtcbiAgICB9XG5cbiAgICBhc3luYyBvcGVuUmVkcGFja2V0KCkge1xuICAgICAgICBSZWRwYWNrZXRNb2RlbC5JLmNoZWNrUmVkcGFja2V0KClcbiAgICB9XG5cbiAgICBhc3luYyBtaW5XaXRoRHJhd2FsKCkge1xuICAgICAgICBsZXQgbW9uZXkgPSBhd2FpdCBQY1Nkay5JLm1pbldpdGhEcmF3YWwoKVxuICAgICAgICB0aGlzLm1pbldpdGhEcmF3YWxMYWIudGV4dCA9ICfmnIDkvY7mj5DnjrA6JyArIG1vbmV5O1xuICAgIH1cblxuXG4gICAgLyoq5omT5byA5Liq5Lq65Lit5b+DICovXG4gICAgb3BlblBlcnNvbmFsKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tb3BlblNlcnZlci0tLS0tLS0nKVxuICAgICAgICBQY1Nkay5JLnBlcnNvbmFsKDApO1xuICAgIH1cbiAgICAvKirpgoDor7flpb3lj4sgKi9cbiAgICBpbnZpdGF0aW9uKCkge1xuICAgICAgICBQY1Nkay5JLmludml0YXRpb24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAxXHTph5HluIFcbiAgICAyXHTmv4DlirHop4bpopHlkI7ph5HluIFcbiAgICAzXHQ0IDUgNiA3IOa4uOaIj+S4reWvueW6lOeahOmBk+WFt1xuICAgIDhcdOepulxuICAgICAqL1xuICAgIHRvdWNoU2hha2UoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS10b3VjaFNoYWtlLS0tLS0tLScpXG4gICAgICAgIFBjU2RrLkkudmlicmF0ZSgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogMS7lm57ljrvmmJ/mmJ8g6YGT5YW3IFxuICAgICAgICAgKiAyLue6ouWMhSAgIOebtOaOpeiOt+W+l+K+puW4ge+8m+aIluiAheebtOaOpeW8uea/gOWKseinhumikeWQju+8jOiOt+W+l+K+puW4gVxuICAgICAgICAgKiAzLuaXoOmBk+WFt1xuICAgICAgICAgKiDnm7TmjqXlsZXivbDmj5LlsY9cbiAgICAgICAgICogICovXG4gICAgICAgIGxldCBkYXRhID0gU2hha2VNb2RlbC5JLmdldFNoYWtlVHlwZSgpO1xuICAgICAgICBjb25zb2xlLmxvZygn5pGH5LiA5pGH6I635Y+W57uT5p6c77yaJyArIEpTT04uc3RyaW5naWZ5KGRhdGEpKVxuICAgICAgICBpZiAoIWRhdGEpIHJldHVybjtcbiAgICAgICAgbGV0IHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgLyoqICfosKLosKLlj4LkuI7vvIzkuIvmrKHlpb3ov5DvvIEnKi87XG4gICAgICAgICAgICAgICAgQWRNYW5hZ2VyLkkuc2hvd0ludGVyQWQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICB0aGlzLmdldENvaW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICB0aGlzLndhdGNoQURDb2luKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQcm9wcyhkYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFByb3BzKGRhdGEpIHtcbiAgICAgICAgbGV0IGJvb3N0ZXI7XG4gICAgICAgIGxldCByZXdhcmROdW0gPSBkYXRhLm51bTtcbiAgICAgICAgbGV0IHR5cGUgPSBkYXRhLnR5cGU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiDlpITnkIbmuLjmiI/kuK3nmoTpgZPlhbfmmL7npLpcbiAgICAgICAgICovXG4gICAgICAgIC8vIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAvLyAgICAgY2FzZSA0OlxuICAgICAgICAvLyAgICAgICAgIGJvb3N0ZXIgPSBCb29zdGVyVHlwZS5SZW1vdmU7XG4gICAgICAgIC8vICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vICAgICBjYXNlIDY6XG4gICAgICAgIC8vICAgICAgICAgYm9vc3RlciA9IEJvb3N0ZXJUeXBlLkNoYW5nZTtcbiAgICAgICAgLy8gICAgICAgICBicmVhaztcbiAgICAgICAgLy8gICAgIGNhc2UgNTpcbiAgICAgICAgLy8gICAgICAgICBib29zdGVyID0gQm9vc3RlclR5cGUuUmVmcmVzaDtcbiAgICAgICAgLy8gICAgICAgICBicmVhaztcbiAgICAgICAgLy8gICAgIGNhc2UgNzpcbiAgICAgICAgLy8gICAgICAgICBib29zdGVyID0gQm9vc3RlclR5cGUuUmFuZFJlbW92ZTtcbiAgICAgICAgLy8gICAgICAgICBicmVhaztcbiAgICAgICAgLy8gICAgIGNhc2UgMzpcbiAgICAgICAgLy8gICAgICAgICBib29zdGVyID0gQm9vc3RlclR5cGUuU3RhcjtcbiAgICAgICAgLy8gICAgICAgICBicmVhaztcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBWaWV3TWFuYWdlci5JLm9wZW5Qb3B3aW4oUmVjZWl2ZVByb3BzUG9wd2luLCBib29zdGVyLCByZXdhcmROdW0pO1xuXG4gICAgfVxuICAgIC8qKlxuICAgICAqIOeci+W5v+WRiuiOt+W+l+e6ouWMhVxuICAgICAqL1xuICAgIGFzeW5jIHdhdGNoQURDb2luKCkge1xuICAgICAgICBhd2FpdCBBZE1hbmFnZXIuSS5zaG93UmV3YXJkQWQoKTtcbiAgICAgICAgdGhpcy5nZXRDb2luKCk7XG4gICAgfVxuICAgIC8qKuebtOaOpeiOt+W+l+e6ouWMhSAqL1xuICAgIGdldENvaW4oKSB7XG4gICAgICAgIC8vXGLliLfmlrDmgLvph5HluIFcbiAgICAgICAgLy8gQXBwTWFuYWdlci5JLnJlZHBhY2tldC5nZXRSZXBhY2tldCgpXG4gICAgICAgIC8vIFZpZXdNYW5hZ2VyLkkub3BlblBvcHdpbihSZWRQYWNrZXRSZXdhcmQsIDIpO1xuICAgIH1cbn0iLCJpbXBvcnQgeyBFdmVudEVudW0gfSBmcm9tIFwiLi9FdmVudEVudW1cIjtcblxuLypcbiogbmFtZTtcbiovXG5leHBvcnQgY2xhc3MgRXZlbnRDZW50ZXIge1xuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogTGF5YS5FdmVudERpc3BhdGNoZXI7XG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0IEkoKTogTGF5YS5FdmVudERpc3BhdGNoZXIge1xuICAgICAgICB3aW5kb3dbJ2V2J10gPSB0aGlzLl9pbnN0YW5jZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBMYXlhLkV2ZW50RGlzcGF0Y2hlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBlbWl0KGV2ZW50OiBFdmVudEVudW0sIC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5JLmV2ZW50KGV2ZW50LnRvU3RyaW5nKCksIGFyZ3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYWRkKHR5cGU6IEV2ZW50RW51bSwgY2FsbGVyOiBhbnksIGxpc3RlbmVyOiBGdW5jdGlvbiwgYXJncz86IEFycmF5PGFueT4pIHtcbiAgICAgICAgdGhpcy5JLm9uKHR5cGUudG9TdHJpbmcoKSwgY2FsbGVyLCBsaXN0ZW5lciwgYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByZW1vdmUodHlwZTogRXZlbnRFbnVtLCBjYWxsZXI6IGFueSwgbGlzdGVuZXI6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuSS5vZmYodHlwZS50b1N0cmluZygpLCBjYWxsZXIsIGxpc3RlbmVyKTtcbiAgICB9XG59IiwiZXhwb3J0IGVudW0gRXZlbnRFbnVtIHtcblxuXHRDSEVDS19SRURQQUNLRVQgPSA8YW55PidjaGVja19yZWRwYWNrZXQnLFxuXHRBUFBfU0hPVyA9IDxhbnk+J2FwcC5zaG93Jyxcblx0QVBQX0hJREUgPSA8YW55PidhcHAuaGlkZScsXG5cblxuXHRVUERBVEVfQ09JTiA9IDxhbnk+J3VwZGF0ZS5jb2luJyxcblxufSIsImltcG9ydCBUVEFkU2RrIGZyb20gXCIuL1RUQWRTZGtcIjtcclxuaW1wb3J0IE9iamVjdEluc3RhbmNlIGZyb20gXCIuLi91aXRsL09iamVjdEluc3RhbmNlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBZE1hbmFnZXIge1xyXG4gICAgcHJpdmF0ZSBsYXN0VmlkZW9UaW1lOiBudW1iZXI7XHJcblxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLnByZWxvYWRSZXdhcmRBZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByZWxvYWRCYW5uZXIoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWRCYW5uZXJFeHByZXNzQWQoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJlbG9hZFJld2FyZEFkKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5zaG93UmV3YXJkVmlkZW9BZCgxKTtcclxuICAgIH1cclxuXHJcbiAgICBwcmVsb2FkRnVsbEFkKCkge1xyXG4gICAgICAgIFRUQWRTZGsuSS5sb2FkRnVsbFNjcmVlblZpZGVvQWQoMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJlbG9hZEludGVyQWQoKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWRGdWxsU2NyZWVuVmlkZW9BZCgxKTtcclxuICAgIH1cclxuXHJcbiAgICBwcmVsb2FkTmF0aXZlQWQoKXtcclxuICAgICAgICAvLyBUVEFkU2RrLkkubG9hZEZ1bGxTY3JlZW5WaWRlb0FkKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlQWR2ZXJEaWFsb2coKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmNsb3NlQWR2ZXJEaWFsb2coKVxyXG4gICAgfVxyXG4gICAgY2xvc2VBZEJhbm5lcigpIHtcclxuICAgICAgICBUVEFkU2RrLkkuY2xvc2VBZEJhbm5lcigpXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd1Jld2FyZEFkKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCByZXQgPSBhd2FpdCBUVEFkU2RrLkkuc2hvd1Jld2FyZFZpZGVvQWQoKTtcclxuICAgICAgICAgICAgdGhpcy5sYXN0VmlkZW9UaW1lID0gTGF5YS50aW1lci5jdXJyVGltZXI7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZFJld2FyZEFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZFJld2FyZEFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGFzeW5jIHNob3dGdWxsQWQoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHJldCA9IGF3YWl0IFRUQWRTZGsuSS5sb2FkRnVsbFNjcmVlblZpZGVvQWQoKTtcclxuICAgICAgICAgICAgdGhpcy5wcmVsb2FkRnVsbEFkKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmV0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEZ1bGxBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dJbnRlckFkKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCByZXQgPSBhd2FpdCBUVEFkU2RrLkkuc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKCk7XHJcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEludGVyQWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXQpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVsb2FkSW50ZXJBZCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjaGVja1ZpZGVvSW5DZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXN0VmlkZW9UaW1lICYmIChMYXlhLnRpbWVyLmN1cnJUaW1lciAtIHRoaXMubGFzdFZpZGVvVGltZSA8PSAzMDAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0Jhbm5lcigpIHtcclxuICAgICAgICBUVEFkU2RrLkkubG9hZEJhbm5lckV4cHJlc3NBZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIFxyXG4gICAgc2hvd05hdGl2ZUFkKHgsIHksIHcsIGgscHJlbG9hZD0wKSB7XHJcbiAgICAgICAgVFRBZFNkay5JLmxvYWROYXRpdmVFeHByZXNzQWQoeCwgeSwgdywgaCxwcmVsb2FkKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIHN0YXRpYyBnZXQgSSgpOiBBZE1hbmFnZXIge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoQWRNYW5hZ2VyKTtcclxuICAgIH1cclxufVxyXG5cclxuIiwiaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi9BZE1hbmFnZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTmF0aXZlQWQgZXh0ZW5kcyBMYXlhLlNjcmlwdCB7XG5cbiAgIHB1YmxpYyBpbml0TmF0aXZlQWQocHJlbG9hZD0wKXtcbiAgICAgICAgbGV0IGdsb2JhbFBvaW50ID0gdGhpcy5pdGVtLmxvY2FsVG9HbG9iYWwoTGF5YS5Qb2ludC5FTVBUWSwgdHJ1ZSk7XG4gICAgICAgIEFkTWFuYWdlci5JLnNob3dOYXRpdmVBZChnbG9iYWxQb2ludC54LCBnbG9iYWxQb2ludC55LCB0aGlzLml0ZW0ud2lkdGgsIHRoaXMuaXRlbS5oZWlnaHQscHJlbG9hZCk7XG4gICAgfVxuICAgIG9uRW5hYmxlKCk6IHZvaWQge1xuICAgICAgIHRoaXMuaW5pdE5hdGl2ZUFkKCk7ICAgXG4gICAgfVxuXG4gICAgb25EaXNhYmxlKCk6IHZvaWQge1xuICAgICAgICBBZE1hbmFnZXIuSS5jbG9zZUFkdmVyRGlhbG9nKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaXRlbSgpOiBMYXlhLlZpZXcge1xuICAgICAgICByZXR1cm4gdGhpcy5vd25lciBhcyBhbnk7XG4gICAgfVxufSIsImltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xuaW1wb3J0IHsgRXZlbnRDZW50ZXIgfSBmcm9tIFwiLi4vZXZlbnQvRXZlbnRDZW50ZXJcIjtcbmltcG9ydCB7IEV2ZW50RW51bSB9IGZyb20gXCIuLi9ldmVudC9FdmVudEVudW1cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGNTZGsge1xuICAgIHByaXZhdGUgX3dpZHRoOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfaGVpZ2h0OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfY2hhbm5lbDogc3RyaW5nO1xuICAgIHByaXZhdGUgX3ZlcnNpb246IHN0cmluZztcbiAgICBwcml2YXRlIF9sZXZlbDogbnVtYmVyO1xuICAgIHByaXZhdGUgX2dhbWVDb25maWc6IG51bWJlcjtcblxuICAgIHB1YmxpYyBwYW5nb2xpbklkOiBzdHJpbmc7XG4gICAgcHVibGljIGFkbmV0SWQ6IHN0cmluZztcblxuICAgIGluaXQoKSB7XG4gICAgICAgIHRoaXMuZ2V0U3lzdGVtSW5mbygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IG15QnJpZGdlKCkge1xuICAgICAgICBpZiAoTXlCcmlkZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBNeUJyaWRnZTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbiAgICAvKirojrflj5bln7rmnKzniYjmnKzkv6Hmga/ku6Xlj4rmiYvmnLrnmoTphY3nva4gKi9cbiAgICBwcml2YXRlIGdldFN5c3RlbUluZm8oa2V5OiBudW1iZXIgPSAwKSB7XG4gICAgICAgIGxldCByZXQgPSB0aGlzLm15QnJpZGdlLmdldFN5c3RlbUluZm8oa2V5KTtcbiAgICAgICAgbGV0IHsgdywgaCwgdmVyc2lvbk5hbWUsIGNoYW5uZWwsIHBhbmdvbGluLCBhZG5ldCwgbGV2ZWwgfSA9IEpTT04ucGFyc2UocmV0KTtcbiAgICAgICAgW3RoaXMuX3dpZHRoLCB0aGlzLl9oZWlnaHQsIHRoaXMuX3ZlcnNpb24sXG4gICAgICAgIHRoaXMuX2NoYW5uZWwsIHRoaXMucGFuZ29saW5JZCxcbiAgICAgICAgdGhpcy5hZG5ldElkLCB0aGlzLl9sZXZlbF0gPSBbdywgaCwgdmVyc2lvbk5hbWUsIGNoYW5uZWwsIHBhbmdvbGluLCBhZG5ldCwgbGV2ZWxdO1xuICAgIH1cblxuICAgIGluaXRHYW1lQ29uZmlnKCkge1xuICAgICAgICB0aGlzLl9nYW1lQ29uZmlnID0gdGhpcy5nZXRHYW1lQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6ZyH5YqoXG4gICAgICogQHBhcmFtIGtleSAwIOefremch+WKqCAxIOmVv+mch+WKqFxuICAgICAqL1xuICAgIHZpYnJhdGUoa2V5OiBudW1iZXIgPSAwKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2Uub3BlblN5c3RlbUZ1bihrZXkpO1xuICAgIH1cblxuICAgIC8qKumakOiXj+WQr+WKqOWxjyAqL1xuICAgIGhpZGVTcGxhc2goKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UuaGlkZVNwbGFzaCgpO1xuICAgIH1cblxuICAgIC8qKuW8ueWHuuaPkOeOsCAqL1xuICAgIHdpdGhEcmF3YWwoKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2Uud2l0aERyYXdhbCgpO1xuICAgIH1cbiAgICAvKirmhI/op4Hlj43ppoggKi9cbiAgICBmZWVkYmFjaygpIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5mZWVkYmFjaygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBrZXkg6buY6K6kMCDvvIznrb7liLAgMVxuICAgICAqL1xuICAgIHBlcnNvbmFsKGtleSA9IDApIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5wZXJzb25hbChrZXkpO1xuICAgIH1cbiAgICAvKirpgoDor7flpb3lj4sqL1xuICAgIGludml0YXRpb24oKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UuaW52aXRhdGlvbigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiDojrflj5bph5HluIHphY3ooahcbiAgICAgKiBAcGFyYW0ga2V5IDHnuqLljIUgICAyIOaRh+S4gOaRh+e6ouWMhVxuICAgICAqL1xuICAgIGdldEdhbWVDb25maWcoKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLm15QnJpZGdlLmdldEdhbWVDb25maWcoKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLWdldEdhbWVDb25maWctLS0tLS0tJyArIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJlc3VsdCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIOimgeaxguWPkeaUvumHkeW4gVxuICAgICAqIEBwYXJhbSBrZXkgMee6ouWMhVxuICAgICAqL1xuICAgIGFzeW5jIGFkZEdvbGQoa2V5KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubXlCcmlkZ2UuYWRkR29sZChrZXksIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgcmVzID0gSlNPTi5wYXJzZShyZXMpXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb2RlLCBkYXRhLCBtc2cgfSA9IHJlcztcbiAgICAgICAgICAgICAgICBpZiAoJzAnID09PSBjb2RlIHx8ICFjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG4gICAgLyoq6I635Y+W5oC76YeR5biBICovXG4gICAgYXN5bmMgbXlDb2luKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55Pihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm15QnJpZGdlLm15Q29pbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgIHJlcyA9IEpTT04ucGFyc2UocmVzKVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29kZSwgZGF0YSwgbXNnIH0gPSByZXM7XG4gICAgICAgICAgICAgICAgaWYgKCcwJyA9PT0gY29kZSB8fCAhY29kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGFbJ2NvaW4nXSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobXNnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cblxuICAgIC8qKuiOt+WPluW9k+WJjeaPkOeOsOeahOaho+S9jSAqL1xuICAgIGFzeW5jIG1pbldpdGhEcmF3YWwoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubXlCcmlkZ2UubWluV2l0aERyYXdhbChyZXMgPT4ge1xuICAgICAgICAgICAgICAgIHJlcyA9IEpTT04ucGFyc2UocmVzKVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29kZSwgZGF0YSwgbXNnIH0gPSByZXM7XG4gICAgICAgICAgICAgICAgaWYgKCcwJyA9PT0gY29kZSB8fCAhY29kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGFbJ21vbmV5J10pXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoq5LiK5oql5Z+L54K5ICovXG4gICAgYXBwRG90TG9nKGtleTogc3RyaW5nLCB2YWx1ZT8pIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5hcHBEb3RMb2coa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIC8qKueDreS6keaJk+eCuSAqL1xuICAgIGFwcERvdFRyYWNLaW5nKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UuYXBwRG90VHJhY0tpbmcoa2V5KTtcbiAgICB9XG5cbiAgICBzZXRDYWxsYmFjayhmdW5OYW1lOiBzdHJpbmcsIHByYW1hcz86IGFueSkge1xuICAgICAgICBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tc2V0Q2FsbGJhY2stLS0tIHRoaXMubXlCcmlkZ2UtLS0nICsgSlNPTi5zdHJpbmdpZnkodGhpcy5teUJyaWRnZSkpXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm15QnJpZGdlW2Z1bk5hbWVdKHByYW1hcywgcmVzID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgeyBjb2RlLCBkYXRhIH0gPSBKU09OLnBhcnNlKHJlcyk7XG4gICAgICAgICAgICAgICAgaWYgKCcwJyA9PT0gY29kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdCgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGNsb3NlQWR2ZXJEaWFsb2coKSB7XG4gICAgICAgIHRoaXMubXlCcmlkZ2UuY2xvc2VBZHZlckRpYWxvZygpO1xuICAgIH1cbiAgICBjbG9zZUFkQmFubmVyKCkge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmNsb3NlQWRCYW5uZXIoKTtcbiAgICB9XG4gICAgLyoq5r+A5Yqx6KeG6aKRICovXG4gICAgc2hvd1Jld2FyZFZpZGVvQWQodmFsdWU6IElWaWRlbywgSkJDYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5zaG93UmV3YXJkVmlkZW9BZCh2YWx1ZSwgSkJDYWxsYmFjaylcbiAgICB9XG4gICAgLyoqIOWFqOWxj+W5v+WRiiovXG4gICAgbG9hZEZ1bGxTY3JlZW5WaWRlb0FkKGRhdGE6IGFueSwgSkJDYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5zaG93UmV3YXJkVmlkZW9BZChkYXRhLCBKQkNhbGxiYWNrKVxuICAgIH1cbiAgICAvKirkv6Hmga/mtYHlub/lkYogKi9cbiAgICBsb2FkTmF0aXZlRXhwcmVzc0FkKGRhdGE6IGFueSwgSkJDYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5sb2FkTmF0aXZlRXhwcmVzc0FkKGRhdGEsIEpCQ2FsbGJhY2spXG4gICAgfVxuICAgIC8qKmJhbm5lciAqL1xuICAgIGxvYWRCYW5uZXJFeHByZXNzQWQoZGF0YTogYW55LCBKQkNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLm15QnJpZGdlLmxvYWRCYW5uZXJFeHByZXNzQWQoZGF0YSwgSkJDYWxsYmFjaylcbiAgICB9XG4gICAgLyoq5o+S5bGP5bm/5ZGKICovXG4gICAgc2hvd0ludGVyYWN0aW9uRXhwcmVzc0FkKGRhdGE6IGFueSwgSkJDYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5teUJyaWRnZS5zaG93SW50ZXJhY3Rpb25FeHByZXNzQWQoZGF0YSwgSkJDYWxsYmFjaylcbiAgICB9XG5cbiAgICBnZXQgbGV2ZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgICB9XG4gICAgZ2V0IHdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGg7XG4gICAgfVxuXG4gICAgZ2V0IGhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgICB9XG5cbiAgICBnZXQgdmVyc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcnNpb247XG4gICAgfVxuXG4gICAgZ2V0IGNoYW5uZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGFubmVsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgYnJpZGdlKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXQgZ2FtZUNvbmZpZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dhbWVDb25maWc7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgSSgpOiBQY1NkayB7XG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoUGNTZGspO1xuICAgIH1cbn1cbi8vICAgICAvL+i/memHjOaYr+a1j+iniOWZqOeOr+Wig+S4i++8jCDmjqXmlLZ3ZWLkvKDov4fmnaXnmoTmtojmga9cbndpbmRvdy5vbk15QnJpZGdlUmVhZHkgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coXCJvbk15QnJpZGdlUmVhZHkgbG9hZCBmaW5pc2gsIGNvc3Q6XCIgKyAobmV3IERhdGUoKS5nZXRUaW1lKCkpICsgXCJtc1wiKTtcbiAgICBNeUJyaWRnZS5BcHAub25SZXN1bWUgPSAoLi4ucmV0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCcgICAgIGxheWEgb25SZXN1bWUnLCByZXQpXG4gICAgICAgIEV2ZW50Q2VudGVyLmVtaXQoRXZlbnRFbnVtLkFQUF9TSE9XKTtcbiAgICB9XG4gICAgTXlCcmlkZ2UuQXBwLm9uUGF1c2UgPSAoLi4ucmV0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCcgICAgbGF5YSBvblBhdXNlJywgcmV0KVxuICAgICAgICBFdmVudENlbnRlci5lbWl0KEV2ZW50RW51bS5BUFBfSElERSk7XG4gICAgfVxufVxuXG5pbnRlcmZhY2UgSVZpZGVvIHtcbiAgICBwcmVsb2FkaW5nOiBudW1iZXIsXG4gICAgdHlwZTogbnVtYmVyLFxufSIsImltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xyXG5pbXBvcnQgUGNTZGsgZnJvbSBcIi4vUGNTZGtcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRUQWRTZGsge1xyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBwcmVsb2FkICAwIOebtOaOpeWKoOi9ve+8mzEg6aKE5Yqg6L29XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNob3dSZXdhcmRWaWRlb0FkKHByZWxvYWQ6IG51bWJlciA9IDApIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdHlwZTogMSxcclxuICAgICAgICAgICAgcHJlbG9hZGluZzogcHJlbG9hZCxcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IGlzQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgUGNTZGsuSS5zaG93UmV3YXJkVmlkZW9BZChkYXRhLCByZXQgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHsgY29kZSwgbWVzc2FnZSB9ID0gSlNPTi5wYXJzZShyZXQpO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAtMTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCdlcnJvcicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIC8qKifmmoLml6Dop4bpopHlub/lkYrvvIHmr4/ml6Uw54K56YeN572uJyovO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDIwMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDb21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoJ3VuQ29tcGxldGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRGdWxsU2NyZWVuVmlkZW9BZChwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHc6IFBjU2RrLkkud2lkdGgsXHJcbiAgICAgICAgICAgIGg6IFBjU2RrLkkud2lkdGggKiA5MCAvIDYwMCxcclxuICAgICAgICAgICAgcHJlbG9hZGluZzogMCxcclxuICAgICAgICAgICAgdHlwZTogMVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBQY1Nkay5JLmxvYWRGdWxsU2NyZWVuVmlkZW9BZChKU09OLnN0cmluZ2lmeShkYXRhKSxyZXM9PntcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZE5hdGl2ZUV4cHJlc3NBZCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0eXBlID0gMSwgcHJlbG9hZDogbnVtYmVyID0gMCkge1xyXG4gICAgICAgIGxldCBzY2FsZVggPSBQY1Nkay5JLndpZHRoIC8gTGF5YS5zdGFnZS53aWR0aDtcclxuICAgICAgICBsZXQgc2NhbGVZID0gUGNTZGsuSS5oZWlnaHQgLyBMYXlhLnN0YWdlLmhlaWdodDtcclxuICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgICAgICAgcHJlbG9hZGluZzogcHJlbG9hZCxcclxuICAgICAgICAgICAgdzogd2lkdGggKiBzY2FsZVgsXHJcbiAgICAgICAgICAgIGg6IGhlaWdodCAqIHNjYWxlWSxcclxuICAgICAgICAgICAgbGVmdDogeCAqIHNjYWxlWCxcclxuICAgICAgICAgICAgdG9wOiB5ICogc2NhbGVZXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFBjU2RrLkkubG9hZE5hdGl2ZUV4cHJlc3NBZChKU09OLnN0cmluZ2lmeShkYXRhKSxyZXM9PntcclxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEJhbm5lckV4cHJlc3NBZChwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHc6IFBjU2RrLkkud2lkdGgsXHJcbiAgICAgICAgICAgIGg6IFBjU2RrLkkud2lkdGggKiA5MCAvIDYwMCxcclxuICAgICAgICAgICAgcHJlbG9hZGluZzogcHJlbG9hZCxcclxuICAgICAgICAgICAgdHlwZTogMVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBQY1Nkay5JLmxvYWRCYW5uZXJFeHByZXNzQWQoSlNPTi5zdHJpbmdpZnkoZGF0YSkscmVzPT57XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlcylcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlQWR2ZXJEaWFsb2coKSB7XHJcbiAgICAgICAgUGNTZGsuSS5jbG9zZUFkdmVyRGlhbG9nKCk7XHJcbiAgICB9XHJcbiAgICBjbG9zZUFkQmFubmVyKCkge1xyXG4gICAgICAgIFBjU2RrLkkuY2xvc2VBZEJhbm5lcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dJbnRlcmFjdGlvbkV4cHJlc3NBZChwcmVsb2FkOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIHc6IFBjU2RrLkkud2lkdGggKiAwLjgsXHJcbiAgICAgICAgICAgIGg6IFBjU2RrLkkuaGVpZ2h0LFxyXG4gICAgICAgICAgICBwcmVsb2FkaW5nOiBwcmVsb2FkLFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXNDb21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBQY1Nkay5JLnNob3dJbnRlcmFjdGlvbkV4cHJlc3NBZChKU09OLnN0cmluZ2lmeShkYXRhKSxyZXM9PntcclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBJKCk6IFRUQWRTZGsge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoVFRBZFNkaykgYXMgVFRBZFNkaztcclxuICAgIH1cclxufSIsImltcG9ydCBPYmplY3RJbnN0YW5jZSBmcm9tIFwiLi4vdWl0bC9PYmplY3RJbnN0YW5jZVwiO1xyXG5pbXBvcnQgUGNTZGsgZnJvbSBcIi4vUGNTZGtcIjtcclxuLyoqXHJcbiAqIOS4iuaKpeeDreS6keWfi+eCueK9h+W/l1xyXG4gKiDlhbfkvZPnmoTmiZPngrnpnIDopoHot5/ov5DokKXogZTns7tcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRyYWNraW5nU2RrIHtcclxuICAgIGRvdChrZXk6IHN0cmluZykge1xyXG4gICAgICAgIFBjU2RrLkkuYXBwRG90VHJhY0tpbmcoa2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IEkoKTogVHJhY2tpbmdTZGsge1xyXG4gICAgICAgIHJldHVybiBPYmplY3RJbnN0YW5jZS5nZXQoVHJhY2tpbmdTZGspIGFzIFRyYWNraW5nU2RrO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBUcmFja2luZ0tleSB7XHJcbiAgICBSZWRQYWNrMSA9ICdldmVudF81JyxcclxuICAgIFJlZFBhY2s1ID0gJ2V2ZW50XzYnXHJcbn1cclxuIiwiaW1wb3J0IEFycmF5VXRpbHMgZnJvbSBcIi4uLy4uL3VpdGwvQXJyYXlVdGlsc1wiO1xuXG4vKlxuKiBuYW1lO1xuKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2VNb2RlbCB7XG4gICAgcHJvdGVjdGVkIF9kYXRhOiBhbnkgPSB7fTtcbiAgICBwcml2YXRlIHVwZGF0ZUFycjogQXJyYXk8RnVuY3Rpb24+ID0gW107XG4gICAgcHJpdmF0ZSBrZXlVcGRhdGVBcnI6IGFueSA9IHt9O1xuXG4gICAgcHVibGljIGFzeW5jIHVwZGF0ZShkYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RhdGEsXG4gICAgICAgICAgICAuLi5kYXRhXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVBcnIuZm9yRWFjaChmdW5jID0+IHtcbiAgICAgICAgICAgIGZ1bmModGhpcy5fZGF0YSk7XG4gICAgICAgIH0pXG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmtleVVwZGF0ZUFycikge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5rZXlVcGRhdGVBcnJba2V5XTtcbiAgICAgICAgICAgICAgICBhcnIgJiYgYXJyLmZvckVhY2goZnVuYyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmModmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgd2FpdEZvcihrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2RhdGFba2V5XTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjYiA9IGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub2ZmVXBkYXRlKGNiLCBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25VcGRhdGUoY2IsIGtleSwgdHJ1ZSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHVibGljIG9uVXBkYXRlKGZ1bmM6IEZ1bmN0aW9uLCBrZXk/OiBzdHJpbmcsIHJ1bjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5fZGF0YVtrZXldO1xuICAgICAgICAgICAgcnVuICYmIHZhbHVlICE9IG51bGwgJiYgZnVuYyh2YWx1ZSk7XG4gICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5rZXlVcGRhdGVBcnJba2V5XTtcbiAgICAgICAgICAgICFhcnIgJiYgKHRoaXMua2V5VXBkYXRlQXJyW2tleV0gPSBhcnIgPSBbXSk7XG4gICAgICAgICAgICBhcnIucHVzaChmdW5jKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJ1biAmJiBmdW5jKHRoaXMuX2RhdGEpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBcnIucHVzaChmdW5jKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvZmZVcGRhdGUoZnVuYzogRnVuY3Rpb24sIGtleT86IHN0cmluZykge1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBBcnJheVV0aWxzLnJlbW92ZUZyb21BcnIodGhpcy5rZXlVcGRhdGVBcnJba2V5XSwgZnVuYyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBBcnJheVV0aWxzLnJlbW92ZUZyb21BcnIodGhpcy51cGRhdGVBcnIsIGZ1bmMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyR2FtZSgpIHtcbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuICAgIH1cbn0iLCJpbXBvcnQgQmFzZU1vZGVsIGZyb20gXCIuL0Jhc2VNb2RlbFwiO1xuaW1wb3J0IEFkTWFuYWdlciBmcm9tIFwiLi4vLi4vc2RrL0FkTWFuYWdlclwiO1xuaW1wb3J0IFRlYVNkaywgeyBEb3RLZXkgfSBmcm9tIFwiLi4vLi4vc2RrL1RlYVNka1wiO1xuaW1wb3J0IFRyYWNraW5nU2RrLCB7IFRyYWNraW5nS2V5IH0gZnJvbSBcIi4uLy4uL3Nkay9UcmFja2luZ1Nka1wiO1xuaW1wb3J0IERhdGVVdGlscyBmcm9tIFwiLi4vLi4vdWl0bC9EYXRlVXRpbHNcIjtcbmltcG9ydCBVdGlsLCB7IERhdGFLZXkgfSBmcm9tIFwiLi4vLi4vdWl0bC9VdGlsXCI7XG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uLy4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcbmltcG9ydCB7IEV2ZW50Q2VudGVyIH0gZnJvbSBcIi4uLy4uL2V2ZW50L0V2ZW50Q2VudGVyXCI7XG5pbXBvcnQgeyBFdmVudEVudW0gfSBmcm9tIFwiLi4vLi4vZXZlbnQvRXZlbnRFbnVtXCI7XG5pbXBvcnQgUGNTZGsgZnJvbSBcIi4uL1BjU2RrXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZHBhY2tldE1vZGVsIGV4dGVuZHMgQmFzZU1vZGVsIHtcbiAgICBwcml2YXRlIE1BWCA9IDIwO1xuICAgIC8qKuW9k+WkqemihuWPlue6ouWMheeahOacgOWkp+asoeaVsCAqL1xuICAgIHByaXZhdGUgREFZX01BWF9DTlQgPSA1MDtcbiAgICBwcml2YXRlIGNvbmY6IGFueTtcbiAgICBwdWJsaWMgY3VyUmVkcGFja2V0OiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBjb25mTGVuOiBudW1iZXIgPSAwO1xuXG4gICAgLyoq5Yid5aeL5YyW57qi5YyF6YWN572uICovXG4gICAgYXN5bmMgaW5pdCgpIHtcblxuICAgICAgICBsZXQgYXJyID0gYXdhaXQgdGhpcy5nZXRSZWRDb25maWcoKTtcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLVJlZHBhY2tldE1vZGVsLS0tLS0tLScgKyBKU09OLnN0cmluZ2lmeShhcnIpKVxuICAgICAgICBsZXQgY2FzaCA9IDA7XG4gICAgICAgIHRoaXMuY29uZiA9IHt9O1xuICAgICAgICBhcnIuZm9yRWFjaChjb25mRGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmZbY29uZkRhdGEuaWRdID0gY29uZkRhdGE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMuaW5pdERhdGEoKSk7XG4gICAgICAgIHRoaXMuY29uZkxlbiA9IHRoaXMuY29uZi5sZW5ndGg7XG5cbiAgICB9XG5cblxuXG4gICAgaW5pdERhdGEoKSB7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IFJlZHBhY2tldERhdGE7XG4gICAgICAgIGxldCBsYXN0VGltZSA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkubGFzdFRpbWUpIHx8ICcwJztcbiAgICAgICAgZGF0YS5sYXN0VGltZSA9IHBhcnNlSW50KGxhc3RUaW1lKTtcblxuICAgICAgICBsZXQgbGFzdCA9IERhdGVVdGlscy50aW1lRGF5KGRhdGEubGFzdFRpbWUpO1xuICAgICAgICBsZXQgdG9kYXkgPSBEYXRlVXRpbHMudG9kYXk7XG4gICAgICAgIGlmIChsYXN0ICE9IHRvZGF5KSB7XG4gICAgICAgICAgICBkYXRhLnRvZGF5Q250ID0gMDtcbiAgICAgICAgICAgIGxhc3RUaW1lID0gRGF0ZVV0aWxzLm5vd1RpbWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIFV0aWwuSS5zZXRJdGVtKERhdGFLZXkubGFzdFRpbWUsIGxhc3RUaW1lKVxuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS50b2RheUNudCwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgdG9kYXlDbnQgPSBVdGlsLkkuZ2V0SXRlbShEYXRhS2V5LnRvZGF5Q250KSB8fCAnMCc7XG4gICAgICAgICAgICBkYXRhLnRvZGF5Q250ID0gcGFyc2VJbnQodG9kYXlDbnQpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEubGFzdFRpbWUgPSBwYXJzZUludChsYXN0VGltZSk7XG4gICAgICAgIGxldCBkYXRhQ250ID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5kYXRhQ05UKSB8fCAnMCc7XG4gICAgICAgIGRhdGEuY250ID0gcGFyc2VJbnQoZGF0YUNudCk7XG4gICAgICAgIGRhdGEubGlzdCA9IFtdO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cblxuICAgIGFzeW5jIGdldFJlZENvbmZpZygpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFBjU2RrLkkuZ2FtZUNvbmZpZztcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLSDojrflj5bphY3nva7pnZnmgIHooagtLS0tLScgKyBKU09OLnN0cmluZ2lmeShyZXN1bHQpKVxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBsZXQgY29uZmlnSnNvbiA9IGF3YWl0IHRoaXMubG9hZEdvbGRDZmcocmVzdWx0Wydjb2luX2NvbmZpZyddWzBdKVxuICAgICAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tIOiOt+WPlue6ouWMhemdmeaAgeihqC0tLS0tJyArIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnSnNvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFBjU2RrLkkuaW5pdEdhbWVDb25maWcoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBsb2FkR29sZENmZyhyZXM6IHN0cmluZykge1xuICAgICAgICBsZXQgY29uZmlnSnNvbiA9IGF3YWl0IHRoaXMubG9hZChyZXMpO1xuICAgICAgICByZXR1cm4gY29uZmlnSnNvbjtcbiAgICB9XG5cbiAgICBsb2FkKHJlcywgb25Qcm9ncmVzcz86IExheWEuSGFuZGxlcik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoc3VjLCBmYWlsKSA9PiB7XG4gICAgICAgICAgICBMYXlhLmxvYWRlci5sb2FkKHJlcywgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCBzdWMpLCBvblByb2dyZXNzKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBhc3luYyBjaGVja1JlZHBhY2tldCgpIHtcblxuICAgICAgICBpZiAodGhpcy5kYXRhLnRvZGF5Q250ID49IHRoaXMuREFZX01BWF9DTlQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKEFkTWFuYWdlci5JLmNoZWNrVmlkZW9JbkNkKCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLyoq57qi5YyF6I635Y+W5ZCO5rKh5pyJ55yL5bm/5ZGK6aKG5Y+W77yM5YaN5qyh6I635b6X57qi5YyF55qE5py65Lya77yM5LiN5Lya6I635Y+W57qi5YyF77yMIOiHquW3seS5n+WPr+S7peWkhOeQhuaIkCDlr7nlupTnmoTnuqLljIXmj5DphpLmiJbkuI3pnIDopoHov5nph4znmoTliKTmlq0gKi9cbiAgICAgICAgaWYgKHRoaXMuY3VyUmVkcGFja2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVuZGVmaW5lZCA9PT0gdGhpcy5kYXRhLmNudCkgdGhpcy5kYXRhLmNudCA9IDA7XG4gICAgICAgIGxldCBjbnQgPSB0aGlzLmRhdGEuY250O1xuICAgICAgICBpZiAoY250ID49IHRoaXMuY29uZkxlbikgY250ID0gdGhpcy5jb25mTGVuIC0gMTtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmNvbmZbY250ICsgMV07XG4gICAgICAgIGxldCByYW4yID0gTWF0aC5yYW5kb20oKTtcblxuICAgICAgICBpZiAoZGF0YSAmJiByYW4yIDwgZGF0YS5wZXIpIHtcbiAgICAgICAgICAgIGxldCBjYXNoID0gMC4wMDAwMDE7XG4gICAgICAgICAgICB0aGlzLmN1clJlZHBhY2tldCA9IGNhc2g7XG4gICAgICAgICAgICAvLyoq5by55Ye657qi5YyF55qE55WM6Z2iLCAg5pqC5pe25aSE55CG5oiQIOebtOaOpeeci+W5v+WRiuiOt+WPlumHkeW4gSAqL1xuICAgICAgICAgICAgYXdhaXQgQWRNYW5hZ2VyLkkuc2hvd1Jld2FyZEFkKClcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0tLS0tLS0tLS0g6Kem5Y+R5LqG57qi5YyFLS0tLS0nKVxuICAgICAgICAgICAgdGhpcy5nZXRSZXBhY2tldCgpXG4gICAgICAgICAgICAvKirmm7TmlrDln7rmnKzmmL7npLogKi9cbiAgICAgICAgICAgIEV2ZW50Q2VudGVyLmVtaXQoRXZlbnRFbnVtLlVQREFURV9DT0lOKTtcblxuICAgICAgICAgICAgLyoqKiAqL1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldFJlcGFja2V0KCkge1xuICAgICAgICBpZiAoIXRoaXMuY3VyUmVkcGFja2V0KSByZXR1cm47XG4gICAgICAgIHRoaXMuZGF0YS5jbnQgKz0gMTtcbiAgICAgICAgdGhpcy5kYXRhLmxpc3QucHVzaCh0aGlzLmN1clJlZHBhY2tldCk7XG4gICAgICAgIHRoaXMuZGF0YS5sYXN0VGltZSA9IChuZXcgRGF0ZSkuZ2V0VGltZSgpO1xuICAgICAgICB0aGlzLmRhdGEudG9kYXlDbnQgKz0gMTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jbnQgPT0gMSlcbiAgICAgICAgICAgIFRyYWNraW5nU2RrLkkuZG90KFRyYWNraW5nS2V5LlJlZFBhY2sxKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jbnQgPT0gNSlcbiAgICAgICAgICAgIFRyYWNraW5nU2RrLkkuZG90KFRyYWNraW5nS2V5LlJlZFBhY2s1KTtcbiAgICAgICAgdGhpcy5jdXJSZWRwYWNrZXQgPSAwO1xuICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LmRhdGFDTlQsIHRoaXMuZGF0YS5jbnQpO1xuICAgICAgICBVdGlsLkkuc2V0SXRlbShEYXRhS2V5LnRvZGF5Q250LCB0aGlzLmRhdGEudG9kYXlDbnQpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlKHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgLyoqICovXG4gICAgYXN5bmMgZ2V0Q3VyUmVkcGFja2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJSZWRwYWNrZXQ7XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKTogUmVkcGFja2V0RGF0YSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cbiAgICAvKirojrflj5bmgLvlhbHnmoTph5HluIHmlbAgKi9cbiAgICBhc3luYyBnZXRUb3RhbENvaW4oKSB7XG4gICAgICAgIGxldCB0b3RhbENvaW4gPSBhd2FpdCBQY1Nkay5JLm15Q29pbigpO1xuICAgICAgICByZXR1cm4gdG90YWxDb2luO1xuICAgIH1cbiAgICAvKirojrflj5bmnKzmrKHlpZblirHnmoTph5HluIHmlbAgKi9cbiAgICBhc3luYyBhZGRDb2luKGtleTogbnVtYmVyID0gMSkge1xuICAgICAgICBsZXQgY29pbkRhdGEgPSBhd2FpdCBQY1Nkay5JLmFkZEdvbGQoa2V5KTtcbiAgICAgICAgcmV0dXJuIGNvaW5EYXRhWydjb2luJ107XG4gICAgfVxuXG4gICAgLyoq6I635Y+W5pyA5L2O5o+Q5qGjICovXG4gICAgYXN5bmMgIG1pbldpdGhEcmF3YWwoKSB7XG4gICAgICAgIGxldCBtaW5Db2luID0gYXdhaXQgUGNTZGsuSS5taW5XaXRoRHJhd2FsKCk7XG4gICAgICAgIHJldHVybiBtaW5Db2luO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IEkoKTogUmVkcGFja2V0TW9kZWwge1xuICAgICAgICByZXR1cm4gT2JqZWN0SW5zdGFuY2UuZ2V0KFJlZHBhY2tldE1vZGVsKSBhcyBSZWRwYWNrZXRNb2RlbDtcbiAgICB9XG59XG5cbmNsYXNzIFJlZHBhY2tldERhdGEge1xuICAgIGNudDogbnVtYmVyO1xuICAgIGxpc3Q6IEFycmF5PG51bWJlcj47XG4gICAgbGFzdFRpbWU6IG51bWJlcjtcbiAgICB0b2RheUNudDogbnVtYmVyO1xufVxuXG5jbGFzcyBSZWRwYWNrZXRDb25maWdEYXRhIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIHBlcjogbnVtYmVyO1xuICAgIGNhc2g6IG51bWJlcjtcbn0iLCJpbXBvcnQgQmFzZU1vZGVsIGZyb20gXCIuL0Jhc2VNb2RlbFwiO1xuaW1wb3J0IERhdGVVdGlscyBmcm9tIFwiLi4vLi4vdWl0bC9EYXRlVXRpbHNcIjtcbmltcG9ydCBVdGlsLCB7IERhdGFLZXkgfSBmcm9tIFwiLi4vLi4vdWl0bC9VdGlsXCI7XG5pbXBvcnQgT2JqZWN0SW5zdGFuY2UgZnJvbSBcIi4uLy4uL3VpdGwvT2JqZWN0SW5zdGFuY2VcIjtcbmltcG9ydCBQY1NkayBmcm9tIFwiLi4vUGNTZGtcIjtcblxuLyoqXG4gKiBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hha2VNb2RlbCBleHRlbmRzIEJhc2VNb2RlbCB7XG5cbiAgICBwcml2YXRlIGNvbmY6IGFueTtcbiAgICBwcml2YXRlIGVsZVByb2JhYmlsaXR5QXJyOiBudW1iZXJbXSA9IFtdO1xuICAgIHByaXZhdGUgdG90YWxXZWlnaHQ6IG51bWJlciA9IDA7XG4gICAgcHJpdmF0ZSBwcm9BcnJMZW46IG51bWJlciA9IDA7XG4gICAgLyoq57qi5YyF5Ye6546w55qE5oC75qyh5pWw5q+P5pelICovXG4gICAgcHJpdmF0ZSByZWRfZGF5X2xpbWl0OiBudW1iZXIgPSAwO1xuICAgIHByaXZhdGUgY3VyX3JlZF9kYXlfbGltaXQ6IG51bWJlciA9IDA7XG4gICAgLyoq5pGH5LiA5pGH5Ye6546w55qE5oC75qyh5pWwICovXG4gICAgcHJpdmF0ZSBzaGFrZV9kYXlfbGltaXQ6IG51bWJlciA9IDA7XG5cbiAgICBwcml2YXRlIGN1cl9zaGFrZV9kYXlfbGltaXQ6IG51bWJlciA9IDA7XG5cbiAgICBhc3luYyBpbml0KCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gUGNTZGsuSS5nYW1lQ29uZmlnOztcbiAgICAgICAgY29uc29sZS5sb2coJy0tLS0tLS0tLS0tLS0tLVNoYWtlTW9kZWwtLSDojrflj5bmkYfkuIDmkYfpnZnmgIHooagtLS0tLScgKyBKU09OLnN0cmluZ2lmeShyZXN1bHQpKVxuICAgICAgICBpZiAocmVzdWx0Wydjb25maWcnXSkge1xuICAgICAgICAgICAgbGV0IGdhbWVEYXRhID0gcmVzdWx0Wydjb25maWcnXTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKHRoaXMuaW5pdERhdGEoZ2FtZURhdGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXREYXRhKGdhbWVEYXRhKSB7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IFNoYWtlRGF0YTtcbiAgICAgICAgbGV0IGxhc3RUaW1lID0gVXRpbC5JLmdldEl0ZW0oRGF0YUtleS5zaGFrZUxhc3RUaW1lKSB8fCAnMCc7XG4gICAgICAgIGxldCBsdCA9IHBhcnNlSW50KGxhc3RUaW1lKTtcbiAgICAgICAgbGV0IGxhc3QgPSBEYXRlVXRpbHMudGltZURheShsdCk7XG4gICAgICAgIGxldCB0b2RheSA9IERhdGVVdGlscy50b2RheTtcblxuICAgICAgICBpZiAobGFzdCAhPSB0b2RheSkge1xuICAgICAgICAgICAgdGhpcy5jdXJfc2hha2VfZGF5X2xpbWl0ID0gMDtcbiAgICAgICAgICAgIHRoaXMuY3VyX3JlZF9kYXlfbGltaXQgPSAwO1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBEYXRlVXRpbHMubm93VGltZS50b1N0cmluZygpO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfc2hha2VfZGF5X2xpbWl0LCAwKTtcbiAgICAgICAgICAgIFV0aWwuSS5zZXRJdGVtKERhdGFLZXkuY3VyX3JlZF9kYXlfbGltaXQsIDApO1xuICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5zaGFrZUxhc3RUaW1lLCBsYXN0VGltZSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjdXJfcmVkX2RheV9saW1pdCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkuY3VyX3JlZF9kYXlfbGltaXQpIHx8ICcwJztcbiAgICAgICAgICAgIHRoaXMuY3VyX3JlZF9kYXlfbGltaXQgPSBwYXJzZUludChjdXJfcmVkX2RheV9saW1pdCk7XG4gICAgICAgICAgICBsZXQgY3VyX3NoYWtlX2RheV9saW1pdCA9IFV0aWwuSS5nZXRJdGVtKERhdGFLZXkuY3VyX3NoYWtlX2RheV9saW1pdCkgfHwgJzAnO1xuICAgICAgICAgICAgdGhpcy5jdXJfc2hha2VfZGF5X2xpbWl0ID0gcGFyc2VJbnQoY3VyX3NoYWtlX2RheV9saW1pdCk7XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhLmNvbmZpZyA9IGdhbWVEYXRhWydjb25maWcnXTtcbiAgICAgICAgZ2FtZURhdGFbJ3NoYWtlJ10uZm9yRWFjaChlbGUgPT4ge1xuICAgICAgICAgICAgZGF0YS5zaGFrZVdlaWdodExpc3QucHVzaChlbGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb25mID0gW107XG4gICAgICAgIHRoaXMuY29uZiA9IGRhdGEuc2hha2VXZWlnaHRMaXN0O1xuICAgICAgICB0aGlzLmluaXRQcm9iYWJpbGl0eSgpO1xuICAgICAgICB0aGlzLnNoYWtlX2RheV9saW1pdCA9IGRhdGEuY29uZmlnLnNoYWtlX2RheV9saW1pdDtcbiAgICAgICAgdGhpcy5yZWRfZGF5X2xpbWl0ID0gZGF0YS5jb25maWcucmVkX2RheV9saW1pdDtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaW5pdFByb2JhYmlsaXR5KCkge1xuICAgICAgICB0aGlzLnRvdGFsV2VpZ2h0ID0gMDtcbiAgICAgICAgdGhpcy5jb25mLmZvckVhY2goKGVsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG90YWxXZWlnaHQgKz0gZWxlLndlaWdodDtcbiAgICAgICAgICAgIGxldCBpdGVtVyA9IGVsZS53ZWlnaHQ7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwKVxuICAgICAgICAgICAgICAgIGl0ZW1XICs9IHRoaXMuZWxlUHJvYmFiaWxpdHlBcnJbaW5kZXggLSAxXTtcbiAgICAgICAgICAgIHRoaXMuZWxlUHJvYmFiaWxpdHlBcnIgPSBbLi4udGhpcy5lbGVQcm9iYWJpbGl0eUFyciwgaXRlbVddO1xuICAgICAgICB9KVxuICAgICAgICB0aGlzLnByb0FyckxlbiA9IHRoaXMuZWxlUHJvYmFiaWxpdHlBcnIubGVuZ3RoO1xuXG4gICAgfVxuXG4gICAgZ2V0U2hha2VUeXBlKCkge1xuICAgICAgICArK3RoaXMuY3VyX3NoYWtlX2RheV9saW1pdDtcbiAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfc2hha2VfZGF5X2xpbWl0LCB0aGlzLmN1cl9zaGFrZV9kYXlfbGltaXQpO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cl9zaGFrZV9kYXlfbGltaXQgPiB0aGlzLnNoYWtlX2RheV9saW1pdCkge1xuICAgICAgICAgICAgLyoqJ+asoeaVsOi+vuWIsOS4iumZkO+8jOivt+aYjuWkqeWGjeadpSovXG5cbiAgICAgICAgICAgIC8qKuWcqOatpOWkhOWPr+S7peW8ueahhuetieWkhOeQhiAqL1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGxldCByYW4gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLnRvdGFsV2VpZ2h0KTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMucHJvQXJyTGVuOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSB0aGlzLmVsZVByb2JhYmlsaXR5QXJyW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChlbGUgPj0gcmFuKSB7XG4gICAgICAgICAgICAgICAgaWYgKDAgPT09IGluZGV4IHx8IDEgPT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICsrdGhpcy5jdXJfcmVkX2RheV9saW1pdDtcbiAgICAgICAgICAgICAgICAgICAgVXRpbC5JLnNldEl0ZW0oRGF0YUtleS5jdXJfcmVkX2RheV9saW1pdCwgdGhpcy5jdXJfcmVkX2RheV9saW1pdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cl9yZWRfZGF5X2xpbWl0ID4gdGhpcy5yZWRfZGF5X2xpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25mW3RoaXMucHJvQXJyTGVuIC0gMV07XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25mW2luZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb25mW3RoaXMucHJvQXJyTGVuIC0gMV07XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKTogU2hha2VEYXRhIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBJKCk6IFNoYWtlTW9kZWwge1xuICAgICAgICByZXR1cm4gT2JqZWN0SW5zdGFuY2UuZ2V0KFNoYWtlTW9kZWwpIGFzIFNoYWtlTW9kZWw7XG4gICAgfVxufVxuXG5cbmNsYXNzIFNoYWtlRGF0YSB7XG4gICAgY29uZmlnOiBTaGFrZUNvbmZpZztcbiAgICBzaGFrZVdlaWdodExpc3Q6IFNoYWtlV2VpZ2h0RGF0YVtdID0gW107XG59XG5pbnRlcmZhY2UgU2hha2VDb25maWcge1xuICAgIHJlZF9kYXlfbGltaXQ6IG51bWJlcixcbiAgICBzaGFrZV9kYXlfbGltaXQ6IG51bWJlcixcbiAgICBpbnRlcnN0aXRpYWxfY250OiBudW1iZXIsXG4gICAgaW50ZXJzdGl0aWFsX2RlbGF5OiBudW1iZXJcbn1cblxuaW50ZXJmYWNlIFNoYWtlV2VpZ2h0RGF0YSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICB0eXBlOiBudW1iZXI7XG4gICAgd2VpZ2h0OiBudW1iZXI7XG4gICAgbnVtOiBudW1iZXI7XG59XG5cblxuIiwiLyoqVGhpcyBjbGFzcyBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBMYXlhQWlySURFLCBwbGVhc2UgZG8gbm90IG1ha2UgYW55IG1vZGlmaWNhdGlvbnMuICovXG5pbXBvcnQgVmlldz1MYXlhLlZpZXc7XHJcbmltcG9ydCBEaWFsb2c9TGF5YS5EaWFsb2c7XHJcbmltcG9ydCBTY2VuZT1MYXlhLlNjZW5lO1xudmFyIFJFRzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XG5leHBvcnQgbW9kdWxlIHVpIHtcclxuICAgIGV4cG9ydCBjbGFzcyBUZXN0U2NlbmVVSSBleHRlbmRzIFNjZW5lIHtcclxuXHRcdHB1YmxpYyBidG5JbnZpdGU6TGF5YS5TcHJpdGU7XG5cdFx0cHVibGljIGJ0blNlcnZlcjpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuVmlicmF0ZTpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuX3NoYWtlOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5EcmF3YWw6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blByZWxvYWRBRDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd0Jhbm5lcjpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd0Z1bGxBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuU2hvd05hdGl2ZUFkOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5TaG93SW50ZXJBZDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuUmV3YXJkQWQ6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blJlZHBhY2tldDpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuUHJlTmF0aXZlOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5QcmVGdWxsOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5QcmVJbnNlcnQ6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0blByZVZpZGVvOkxheWEuQnV0dG9uO1xuXHRcdHB1YmxpYyBidG5DbG9zZU5hdGl2ZTpMYXlhLkJ1dHRvbjtcblx0XHRwdWJsaWMgYnRuQ2xvc2VCYW5uZXI6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIGJ0bk1pbldpdGhEcmF3YWw6TGF5YS5CdXR0b247XG5cdFx0cHVibGljIG1pbldpdGhEcmF3YWxMYWI6TGF5YS5MYWJlbDtcblx0XHRwdWJsaWMgTmF0aXZlQUQ6VmlldztcbiAgICAgICAgY29uc3RydWN0b3IoKXsgc3VwZXIoKX1cclxuICAgICAgICBjcmVhdGVDaGlsZHJlbigpOnZvaWQge1xyXG4gICAgICAgICAgICBzdXBlci5jcmVhdGVDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRTY2VuZShcIlRlc3RTY2VuZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBSRUcoXCJ1aS5UZXN0U2NlbmVVSVwiLFRlc3RTY2VuZVVJKTtcclxufVxyIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXJyYXlVdGlscyB7XG4gICAgLyoqXG4gICAgICog56e76Zmk5YWD57SgXG4gICAgICovXG4gICAgc3RhdGljIHJlbW92ZUZyb21BcnIoYXJyOiBBcnJheTxhbnk+LCBvYmo6IGFueSkge1xuICAgICAgICBsZXQgaW5kZXggPSBhcnIuaW5kZXhPZihvYmopO1xuICAgICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcmFuZG9tRnJvbUFycihhcnI6IEFycmF5PGFueT4pIHtcbiAgICAgICAgbGV0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYXJyLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBhcnJbaW5kZXhdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaVsOe7hOmaj+acuuaOkuW6j1xuICAgICAqL1xuICAgIHN0YXRpYyBzaHVmZmxlKGFycjogQXJyYXk8YW55Pikge1xuICAgICAgICByZXR1cm4gYXJyLnNvcnQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgLSAwLjU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBpbmRleE9mKGFyciwgY2FsbGJhY2ssIGN0eD8pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjay5jYWxsKGN0eCwgdGhpc1tpXSwgaSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHN0YXRpYyBlYWNoKGFyciwgY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2suY2FsbChjb250ZXh0LCBhcnJbaV0sIGksIGFycikpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgcXVldWUoYXJyKSB7XG4gICAgICAgIGxldCByZXMgPSBudWxsO1xuICAgICAgICBmb3IgKGxldCBwcm9taXNlIG9mIGFycikge1xuICAgICAgICAgICAgcmVzID0gYXdhaXQgcHJvbWlzZShyZXMpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UmFuZG9tQXJyYXkoYXJyLCBjb3VudCkge1xuICAgICAgICBsZXQgc2h1ZmZsZWQgPSBhcnIuc2xpY2UoMCk7XG4gICAgICAgIGxldCBsZW4gPSBhcnIubGVuZ3RoO1xuICAgICAgICBsZXQgbWluID0gbGVuIC0gY291bnQsIHRlbXAsIGluZGV4O1xuICAgICAgICB3aGlsZSAobGVuLS0gPiBtaW4pIHtcbiAgICAgICAgICAgIGluZGV4ID0gTWF0aC5mbG9vcigobGVuICsgMSkgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgICAgIHRlbXAgPSBzaHVmZmxlZFtpbmRleF07XG4gICAgICAgICAgICBzaHVmZmxlZFtpbmRleF0gPSBzaHVmZmxlZFtsZW5dO1xuICAgICAgICAgICAgc2h1ZmZsZWRbbGVuXSA9IHRlbXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNodWZmbGVkLnNsaWNlKG1pbik7XG4gICAgfVxufSIsIi8qKlxuICog5pel5pyf5bel5YW357G7XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVVdGlscyB7XG4gICAgc3RhdGljIGdldCBub3coKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5ub3dUaW1lIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBub3dUaW1lKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IHRvZGF5KCk6IHN0cmluZyB7XG4gICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUodGhpcy5ub3dUaW1lKTtcbiAgICAgICAgbGV0IHllYXIgPSB0aW1lLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGxldCBtb250aCA9IHRpbWUuZ2V0TW9udGgoKSArIDE7XG4gICAgICAgIGxldCBkYXRlID0gdGltZS5nZXREYXRlKCk7XG4gICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke3RoaXMuYWRkKG1vbnRoKX0tJHt0aGlzLmFkZChkYXRlKX1gO1xuICAgIH1cblxuICAgIHN0YXRpYyB0aW1lRGF5KHRpbWVOdW06IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGxldCB0aW1lID0gbmV3IERhdGUodGltZU51bSk7XG4gICAgICAgIGxldCB5ZWFyID0gdGltZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBsZXQgbW9udGggPSB0aW1lLmdldE1vbnRoKCkgKyAxO1xuICAgICAgICBsZXQgZGF0ZSA9IHRpbWUuZ2V0RGF0ZSgpO1xuICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHt0aGlzLmFkZChtb250aCl9LSR7dGhpcy5hZGQoZGF0ZSl9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7np5LmlbDmoLzlvI/ljJblrZfnrKbkuLJcbiAgICAgKiBAcGFyYW0gc2Vjb25kIOenkuaVsFxuICAgICAqIEBwYXJhbSB0eXBlIDE6MDA6MDA6MDAgICAyOnl5eXktbW0tZGQgaDptOnMgICAgMzowMDowMCAgIDQ6eHjlpKnliY3vvIx4eOWwj+aXtuWJje+8jHh45YiG6ZKf5YmNXG4gICAgICogQHJldHVyblxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZChzZWNvbmQ6IG51bWJlciwgdHlwZTogbnVtYmVyID0gMSk6IHN0cmluZyB7XG4gICAgICAgIHZhciBzdHI6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQwKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDEoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kMihzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHN0ciA9IHRoaXMuZ2V0Rm9ybWF0QnlTZWNvbmQzKHNlY29uZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgc3RyID0gdGhpcy5nZXRGb3JtYXRCeVNlY29uZDQoc2Vjb25kKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICBzdHIgPSB0aGlzLmdldEZvcm1hdEJ5U2Vjb25kNShzZWNvbmQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgLy8gMDogMDA6MDBcbiAgICBwcml2YXRlIHN0YXRpYyBnZXRGb3JtYXRCeVNlY29uZDAodDogbnVtYmVyID0gMCk6IHN0cmluZyB7XG4gICAgICAgIHZhciBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcih0IC8gNjApO1xuICAgICAgICB2YXIgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcih0ICUgNjApO1xuICAgICAgICB2YXIgbWluczogc3RyaW5nO1xuICAgICAgICB2YXIgc2Vuczogc3RyaW5nO1xuICAgICAgICBpZiAobWluc3QgPT0gMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5zdCA8IDEwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwXCIgKyBtaW5zdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIlwiICsgbWluc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZHQgPT0gMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMDBcIjtcbiAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjBcIiArIHNlY29uZHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZW5zID0gXCJcIiArIHNlY29uZHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbnMgKyBcIjpcIiArIHNlbnM7XG4gICAgfVxuXG4gICAgLy8xOiAwMDowMDowMFxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMSh0OiBudW1iZXIgPSAwKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGhvdXJzdDogbnVtYmVyID0gTWF0aC5mbG9vcih0IC8gMzYwMCk7XG4gICAgICAgIGxldCBob3Vyczogc3RyaW5nO1xuICAgICAgICBsZXQgZGF5ID0gJyc7XG4gICAgICAgIGlmIChob3Vyc3QgPT0gMCkge1xuICAgICAgICAgICAgaG91cnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG91cnN0IDwgMTApXG4gICAgICAgICAgICAgICAgaG91cnMgPSBcIjBcIiArIGhvdXJzdDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBoID0gaG91cnN0ICUgMjQ7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA+PSAyNCkge1xuICAgICAgICAgICAgICAgICAgICBob3VycyA9IGggPCAxMCA/IFwiMFwiICsgaCA6ICcnICsgaDtcbiAgICAgICAgICAgICAgICAgICAgZGF5ID0gTWF0aC5mbG9vcihob3Vyc3QgLyAyNCkgKyAnZCAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgICBob3VycyA9IGggPCAxMCA/IFwiMFwiICsgaCA6ICcnICsgaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgbWluc3Q6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAvIDYwKTtcbiAgICAgICAgbGV0IHNlY29uZHQ6IG51bWJlciA9IE1hdGguZmxvb3IoKHQgLSBob3Vyc3QgKiAzNjAwKSAlIDYwKTtcbiAgICAgICAgbGV0IG1pbnM6IHN0cmluZztcbiAgICAgICAgbGV0IHNlbnM6IHN0cmluZztcbiAgICAgICAgaWYgKG1pbnN0ID09IDApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobWluc3QgPCAxMCkge1xuICAgICAgICAgICAgbWlucyA9IFwiMFwiICsgbWluc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5zID0gXCJcIiArIG1pbnN0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWNvbmR0ID09IDApIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIjAwXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Vjb25kdCA8IDEwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwXCIgKyBzZWNvbmR0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VucyA9IFwiXCIgKyBzZWNvbmR0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXkgKyBob3VycyArIFwiOlwiICsgbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzM6IDAwOjAwXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQzKHQ6IG51bWJlciA9IDApOiBzdHJpbmcge1xuICAgICAgICB2YXIgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHQgLyAzNjAwKTtcbiAgICAgICAgdmFyIG1pbnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0IC0gaG91cnN0ICogMzYwMCkgLyA2MCk7XG4gICAgICAgIHZhciBzZWNvbmR0OiBudW1iZXIgPSBNYXRoLmZsb29yKCh0IC0gaG91cnN0ICogMzYwMCkgJSA2MCk7XG4gICAgICAgIHZhciBtaW5zOiBzdHJpbmc7XG4gICAgICAgIHZhciBzZW5zOiBzdHJpbmc7XG4gICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICBtaW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgIG1pbnMgPSBcIjBcIiArIG1pbnN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWlucyA9IFwiXCIgKyBtaW5zdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICBzZW5zID0gXCIwMFwiO1xuICAgICAgICB9IGVsc2UgaWYgKHNlY29uZHQgPCAxMCkge1xuICAgICAgICAgICAgc2VucyA9IFwiMFwiICsgc2Vjb25kdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbnMgPSBcIlwiICsgc2Vjb25kdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlucyArIFwiOlwiICsgc2VucztcbiAgICB9XG5cbiAgICAvLzI6eXl5eS1tbS1kZCBoOm06c1xuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kMih0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB2YXIgZGF0ZTogRGF0ZSA9IG5ldyBEYXRlKHRpbWUpO1xuICAgICAgICB2YXIgeWVhcjogbnVtYmVyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICB2YXIgbW9udGg6IG51bWJlciA9IGRhdGUuZ2V0TW9udGgoKSArIDE7IFx0Ly/ov5Tlm57nmoTmnIjku73ku44wLTEx77ybXG4gICAgICAgIHZhciBkYXk6IG51bWJlciA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB2YXIgaG91cnM6IG51bWJlciA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgdmFyIG1pbnV0ZTogbnVtYmVyID0gZGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIHZhciBzZWNvbmQ6IG51bWJlciA9IGRhdGUuZ2V0U2Vjb25kcygpO1xuICAgICAgICByZXR1cm4geWVhciArIFwiLVwiICsgbW9udGggKyBcIi1cIiArIGRheSArIFwiIFwiICsgaG91cnMgKyBcIjpcIiArIG1pbnV0ZSArIFwiOlwiICsgc2Vjb25kO1xuXG4gICAgfVxuXG4gICAgLy80Onh45aSp5YmN77yMeHjlsI/ml7bliY3vvIx4eOWIhumSn+WJjVxuICAgIHByaXZhdGUgc3RhdGljIGdldEZvcm1hdEJ5U2Vjb25kNCh0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICB2YXIgdCA9IE1hdGguZmxvb3IodGltZSAvIDM2MDApO1xuICAgICAgICBpZiAodCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0ID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0IC8gMjQpICsgXCLlpKnliY1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0ICsgXCLlsI/ml7bliY1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRpbWUgLyA2MCkgKyBcIuWIhumSn+WJjVwiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Rm9ybWF0QnlTZWNvbmQ1KHRpbWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIC8vIOavj+S4quaXtumXtOWNleS9jeaJgOWvueW6lOeahOenkuaVsFxuICAgICAgICB2YXIgb25lRGF5OiBudW1iZXIgPSAzNjAwICogMjQ7XG4gICAgICAgIHZhciBvbmVIb3Vyc3Q6IG51bWJlciA9IDM2MDA7XG4gICAgICAgIHZhciBvbmVNaW5zdDogbnVtYmVyID0gNjA7XG5cbiAgICAgICAgdmFyIGRheXMgPSBNYXRoLmZsb29yKHRpbWUgLyBvbmVEYXkpO1xuICAgICAgICB2YXIgaG91cnN0OiBudW1iZXIgPSBNYXRoLmZsb29yKHRpbWUgJSBvbmVEYXkgLyBvbmVIb3Vyc3QpXG4gICAgICAgIHZhciBtaW5zdDogbnVtYmVyID0gTWF0aC5mbG9vcigodGltZSAtIGhvdXJzdCAqIG9uZUhvdXJzdCkgLyBvbmVNaW5zdCkgIC8vTWF0aC5mbG9vcih0aW1lICUgb25lRGF5ICUgb25lSG91cnN0IC8gb25lTWluc3QpO1xuICAgICAgICB2YXIgc2Vjb25kdDogbnVtYmVyID0gTWF0aC5mbG9vcigodGltZSAtIGhvdXJzdCAqIG9uZUhvdXJzdCkgJSBvbmVNaW5zdCkgLy90aW1lO1xuXG4gICAgICAgIHZhciBkYXlzczogc3RyaW5nID0gXCJcIjtcbiAgICAgICAgdmFyIGhvdXJzczogc3RyaW5nID0gXCJcIlxuICAgICAgICB2YXIgbWluc3M6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIHZhciBzZWNzczogc3RyaW5nID0gXCJcIlxuICAgICAgICBpZiAodGltZSA+IDApIHtcbiAgICAgICAgICAgIC8v5aSpXG4gICAgICAgICAgICBpZiAoZGF5cyA9PSAwKSB7XG4gICAgICAgICAgICAgICAgZGF5c3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgIC8v5bCP5pe2XG4gICAgICAgICAgICAgICAgaWYgKGhvdXJzdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIC8v5YiGXG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Vjc3M7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWluc3MgKyBzZWNzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IGhvdXJzdCArIFwi5bCP5pe2XCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5zdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kdCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmR0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNzcyA9IFwiMFwiICsgc2Vjb25kdCArIFwi56eSXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3NzID0gXCJcIiArIHNlY29uZHQgKyBcIuenklwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91cnNzICsgc2Vjc3NcblxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1pbnN0IDwgMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnNzID0gXCIwXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5zcyA9IFwiXCIgKyBtaW5zdCArIFwi5YiG6ZKfXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaG91cnNzICsgbWluc3M7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXlzcyA9IGRheXMgKyBcIuWkqVwiO1xuICAgICAgICAgICAgICAgIGlmIChob3Vyc3QgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBob3Vyc3MgPSBcIlwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChob3Vyc3QgPCAxMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXJzcyA9IFwiMFwiICsgaG91cnN0ICsgXCLlsI/ml7ZcIjtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgaG91cnNzID0gXCJcIiArIGhvdXJzdCArIFwi5bCP5pe2XCI7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRheXNzICsgaG91cnNzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFkZChudW0pIHtcbiAgICAgICAgcmV0dXJuIG51bSA8IDEwID8gJzAnICsgbnVtIDogbnVtO1xuICAgIH1cblxuXG59XG4iLCJpbXBvcnQgT2JqZWN0UG9vbCBmcm9tIFwiLi9PYmplY3RQb29sXCI7XG5cbi8qXG4qIG5hbWU7XG4qL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0SW5zdGFuY2Uge1xuICAgIHByaXZhdGUgc3RhdGljIGNsenMgPSBbXTtcbiAgICBwcml2YXRlIHN0YXRpYyBvYmplY3RzID0gW107XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldChjbHM6IGFueSkge1xuICAgICAgICBsZXQgaWR4ID0gdGhpcy5jbHpzLmluZGV4T2YoY2xzKTtcbiAgICAgICAgcmV0dXJuIChpZHggPj0gMCAmJiB0aGlzLm9iamVjdHNbaWR4XSkgfHwgdGhpcy5jcmVhdGUoY2xzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGUoY2xzOiBhbnkpIHtcbiAgICAgICAgdmFyIG9iaiA9IE9iamVjdFBvb2wucG9wKGNscyk7XG4gICAgICAgIHRoaXMub2JqZWN0cy5wdXNoKG9iaik7XG4gICAgICAgIHRoaXMuY2x6cy5wdXNoKGNscyk7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0UG9vbCB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgY2xzQXJyID0gW107XG5cbiAgICBzdGF0aWMgcG9wKGNsczogYW55KSB7XG4gICAgICAgIGxldCBpZHggPSB0aGlzLmNsc0Fyci5pbmRleE9mKGNscyk7XG4gICAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgICAgICBpZHggPSB0aGlzLmNsc0Fyci5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmNsc0Fyci5wdXNoKGNscyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGtleSA9ICdwb29sS2V5JyArIGlkeDtcbiAgICAgICAgbGV0IGl0ZW0gPSBMYXlhLlBvb2wuZ2V0SXRlbUJ5Q2xhc3Moa2V5LCBjbHMpO1xuICAgICAgICBpdGVtLnBvb2xLZXkgPSBrZXk7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHN0YXRpYyBwdXNoKGl0ZW0pIHtcbiAgICAgICAgTGF5YS5Qb29sLnJlY292ZXIoaXRlbS5wb29sS2V5LCBpdGVtKTtcbiAgICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgIGNsYXNzIFNjYWxlQnV0dG9uU2NyaXB0IHtcbiBcbiAgICBwdWJsaWMgZGVsYXlUaW1lOiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBtaW5TY2FsZTogbnVtYmVyID0gMDtcbiAgICBwcml2YXRlIG1vbmtleUJveDogTGF5YS5JbWFnZTtcblxuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICrorr7nva5vd25lcuWHveaVsO+8jOWPr+S7peebtOaOpeiOt+WPluWIsOa3u+WKoOmZhOWKoOiEmuacrOeahOe7hOS7tuWunuS+iyBcbiAgICAgKiovXG4gICAgcHVibGljIHNldCBvd25lcih2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMubW9ua2V5Qm94ID0gdmFsdWU7XG4gICAgICAgIC8v6Ieq5a6a5LmJ55qE6ISa5pys5Lya5pyJ5pe25bqP6Zeu6aKY77yM5omA5Lul5Zyo5q2k5re75Yqg5LiA5Liq5bu25pe2XG4gICAgICAgIHRoaXMubW9ua2V5Qm94LmZyYW1lT25jZSgyLCB0aGlzLCB0aGlzLm9uTG9hZGVkKTtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgb25Mb2FkZWQoKTogdm9pZCB7XG4gICAgICAgLyog6K6+572u5oyJ6ZKu5Li65Y2V5oCB5oyJ6ZKuXG4gICAgICAgICoqIOWPluWAvO+8mlxuICAgICAgICAqKiAx77ya5Y2V5oCB44CC5Zu+54mH5LiN5YGa5YiH5Ymy77yM5oyJ6ZKu55qE55qu6IKk54q25oCB5Y+q5pyJ5LiA56eN44CCXG4gICAgICAgICoqIDLvvJrkuKTmgIHjgILlm77niYflsIbku6Xnq5bnm7TmlrnlkJHooqvnrYnmr5TliIflibLkuLoy6YOo5YiG77yM5LuO5LiK5ZCR5LiL77yM5L6d5qyh5Li65by56LW354q25oCB55qu6IKk44CB5oyJ5LiL5ZKM57uP6L+H5Y+K6YCJ5Lit54q25oCB55qu6IKk44CCXG4gICAgICAgICoqIDPvvJrkuInmgIHjgILlm77niYflsIbku6Xnq5bnm7TmlrnlkJHooqvnrYnmr5TliIflibLkuLoy6YOo5YiG77yM5LuO5LiK5ZCR5LiL77yM5L6d5qyh5Li65by56LW354q25oCB55qu6IKk44CB57uP6L+H54q25oCB55qu6IKk44CB5oyJ5LiL5ZKM6YCJ5Lit54q25oCB55qu6IKkXG4gICAgICAgICovXG4gICAgICAgIC8v5re75Yqg6byg5qCH5oyJ5LiL5LqL5Lu25L6m5ZCs44CC5oyJ5pe25pe257yp5bCP5oyJ6ZKu44CCXG4gICAgICAgIHRoaXMubW9ua2V5Qm94Lm9uKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5zY2FsZVNtYWxsKTtcbiAgICAgICAgLy/mt7vliqDpvKDmoIfmiqzotbfkuovku7bkvqblkKzjgILmiqzotbfml7bov5jljp/mjInpkq7jgIJcbiAgICAgICAgdGhpcy5tb25rZXlCb3gub24oTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5zY2FsZUJpZyk7XG4gICAgICAgIC8v5re75Yqg6byg5qCH56a75byA5LqL5Lu25L6m5ZCs44CC56a75byA5pe26L+Y5Y6f5oyJ6ZKu44CCXG4gICAgICAgIHRoaXMubW9ua2V5Qm94Lm9uKExheWEuRXZlbnQuTU9VU0VfT1VULCB0aGlzLCB0aGlzLnNjYWxlQmlnKTtcbiAgICB9XG4gICAgXG4gICAgXG4gICAgcHJpdmF0ZSBzY2FsZVNtYWxsKCk6dm9pZHtcbiAgICAgICAgLy/nvKnlsI/oh7MwLjjnmoTnvJPliqjmlYjmnpxcbiAgICAgICAgTGF5YS5Ud2Vlbi50byh0aGlzLm1vbmtleUJveCwge3NjYWxlWDowLjgsIHNjYWxlWTogMC44fSwgMik7XG4gICAgfVxuICAgIHByaXZhdGUgc2NhbGVCaWcoKTp2b2lke1xuICAgICAgICAvL+WPmOWkp+i/mOWOn+eahOe8k+WKqOaViOaenFxuICAgICAgICBMYXlhLlR3ZWVuLnRvKHRoaXMubW9ua2V5Qm94LCB7c2NhbGVYOjEsIHNjYWxlWToxfSwgMik7XG4gICAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgIGNsYXNzIFV0aWwge1xuICAgIHB1YmxpYyBsb2FkKHJlcywgb25Qcm9ncmVzcz86IExheWEuSGFuZGxlcik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoc3VjLCBmYWlsKSA9PiB7XG4gICAgICAgICAgICBMYXlhLmxvYWRlci5sb2FkKHJlcywgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCBzdWMpLCBvblByb2dyZXNzKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIExheWEuTG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZS50b1N0cmluZygpKVxuICAgIH1cbiAgICBnZXRJdGVtKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBMYXlhLkxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgfVxuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogVXRpbDtcbiAgICBwdWJsaWMgc3RhdGljIGdldCBJKCk6IFV0aWwge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IFV0aWwpO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gRGF0YUtleSB7XG4gICAgY3VyX3JlZF9kYXlfbGltaXQgPSAnY3VyX3JlZF9kYXlfbGltaXQnLFxuICAgIGN1cl9zaGFrZV9kYXlfbGltaXQgPSAnY3VyX3NoYWtlX2RheV9saW1pdCcsXG4gICAgc2hha2VMYXN0VGltZSA9ICdzaGFrZUxhc3RUaW1lJyxcbiAgICBkYXRhQ05UID0gJ2RhdGFDTlQnLFxuICAgIHRvZGF5Q250ID0gJ3RvZGF5Q250JyxcbiAgICBsYXN0VGltZSA9ICdsYXN0VGltZScsXG59Il19
puchi_laya/release/web/prefab/View.json
1 -{"type":"View","props":{"y":0,"x":0,"width":750,"presetID":1,"isPresetRoot":true,"height":1334,"centerY":0,"centerX":0},"compId":10,"child":[{"type":"Box","props":{"y":37,"x":0,"width":150,"presetID":2,"height":60},"compId":4,"child":[{"type":"Sprite","props":{"y":0,"x":73,"var":"btnInvite","texture":"common/btnInvite.png","presetID":3,"pivotY":0.5,"pivotX":50},"compId":5,"child":[{"type":"Script","props":{"presetID":29,"runtime":"uitl/ScaleButtonScript.ts"},"compId":35}]},{"type":"Button","props":{"y":49,"x":180,"var":"btnServer","stateNum":1,"skin":"common/btn_serve(1).png","presetID":4,"anchorY":0.5,"anchorX":0.5},"compId":7,"child":[{"type":"Script","props":{"presetID":30,"runtime":"uitl/ScaleButtonScript.ts"},"compId":36}]},{"type":"Button","props":{"y":49,"x":331,"var":"btnVibrate","stateNum":1,"skin":"common/btn_vibrate_on.png","presetID":5,"anchorY":0.5,"anchorX":0.5},"compId":8,"child":[{"type":"Script","props":{"presetID":31,"runtime":"uitl/ScaleButtonScript.ts"},"compId":37}]},{"type":"Button","props":{"y":49,"x":465,"var":"btn_shake","stateNum":1,"skin":"common/btn_yao.png","presetID":6,"anchorY":0.5,"anchorX":0.5},"compId":15,"child":[{"type":"Script","props":{"presetID":32,"runtime":"uitl/ScaleButtonScript.ts"},"compId":38}]}]},{"type":"Box","props":{"y":176,"x":48,"presetID":7,"name":"coin"},"compId":9,"child":[{"type":"Image","props":{"skin":"common/img_coin_bg.png","presetID":8},"compId":11},{"type":"Label","props":{"y":79,"x":85.04541015625,"text":"0","presetID":24,"fontSize":34,"color":"#9c7b7b"},"compId":30},{"type":"Sprite","props":{"y":-6,"x":-24,"texture":"common/icon_coin.png","presetID":9},"compId":12},{"type":"Label","props":{"y":12,"x":85.04541015625,"text":"0","presetID":10,"fontSize":34,"color":"#171515"},"compId":13},{"type":"Button","props":{"y":0,"x":156,"var":"btnDrawal","stateNum":1,"skin":"common/btn_drawal.png","presetID":11},"compId":14},{"type":"Script","props":{"tiplab":"@node:30","presetID":23,"coinlab":"@node:13","runtime":"RedDrawal.ts"},"compId":29}]},{"type":"Box","props":{"y":261,"x":242,"presetID":19},"compId":25,"child":[{"type":"Button","props":{"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":13,"labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5},"compId":16,"child":[{"type":"Script","props":{"presetID":26,"runtime":"uitl/ScaleButtonScript.ts"},"compId":32}]},{"type":"Button","props":{"y":87,"x":282,"width":240,"var":"btnShowBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":14,"labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5},"compId":18,"child":[{"type":"Script","props":{"presetID":27,"runtime":"uitl/ScaleButtonScript.ts"},"compId":33}]},{"type":"Button","props":{"y":189,"x":-21,"width":240,"var":"btnShowFullAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":15,"labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5},"compId":20,"child":[{"type":"Script","props":{"presetID":28,"runtime":"uitl/ScaleButtonScript.ts"},"compId":34}]},{"type":"Button","props":{"y":189,"x":282,"width":240,"var":"btnShowNativeAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":16,"labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5},"compId":21,"child":[{"type":"Script","props":{"presetID":33,"runtime":"uitl/ScaleButtonScript.ts"},"compId":39}]},{"type":"Button","props":{"width":240,"var":"btnShowInterAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":17,"labelSize":30,"label":"显示插屏广告","centerY":124,"centerX":-256,"anchorY":0.5,"anchorX":0.5},"compId":22,"child":[{"type":"Script","props":{"presetID":34,"runtime":"uitl/ScaleButtonScript.ts"},"compId":40}]},{"type":"Button","props":{"width":240,"var":"btnRewardAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":22,"labelSize":30,"label":"显示激励广告","centerY":124,"centerX":17,"anchorY":0.5,"anchorX":0.5},"compId":28,"child":[{"type":"Script","props":{"presetID":35,"runtime":"uitl/ScaleButtonScript.ts"},"compId":41}]},{"type":"Button","props":{"y":-59,"x":219,"width":240,"var":"btnRedpacket","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":25,"labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5},"compId":31,"child":[{"type":"Script","props":{"presetID":36,"runtime":"uitl/ScaleButtonScript.ts"},"compId":42}]}]},{"type":"View","props":{"y":773,"x":75,"width":600,"var":"NativeAD","presetID":18,"height":300},"compId":23,"child":[{"type":"Script","props":{"presetID":21,"runtime":"sdk/NativeAd.ts"},"compId":27}]}],"loadList":["common/btnInvite.png","common/btn_serve(1).png","common/btn_vibrate_on.png","common/btn_yao.png","common/img_coin_bg.png","common/icon_coin.png","common/btn_drawal.png","common/btn_gr.png"],"loadList3D":[]}  
2 \ No newline at end of file 1 \ No newline at end of file
  2 +{"type":"View","props":{"y":0,"x":0,"width":750,"presetID":1,"isPresetRoot":true,"height":1334,"centerY":0,"centerX":0},"compId":10,"child":[{"type":"Box","props":{"y":37,"x":0,"width":150,"presetID":2,"height":60},"compId":4,"child":[{"type":"Sprite","props":{"y":0,"x":73,"var":"btnInvite","texture":"common/btnInvite.png","presetID":3,"pivotY":0.5,"pivotX":50},"compId":5,"child":[{"type":"Script","props":{"presetID":29,"runtime":"uitl/ScaleButtonScript.ts"},"compId":35}]},{"type":"Button","props":{"y":49,"x":180,"var":"btnServer","stateNum":1,"skin":"common/btn_serve(1).png","presetID":4,"anchorY":0.5,"anchorX":0.5},"compId":7,"child":[{"type":"Script","props":{"presetID":30,"runtime":"uitl/ScaleButtonScript.ts"},"compId":36}]},{"type":"Button","props":{"y":49,"x":331,"var":"btnVibrate","stateNum":1,"skin":"common/btn_vibrate_on.png","presetID":5,"anchorY":0.5,"anchorX":0.5},"compId":8,"child":[{"type":"Script","props":{"presetID":31,"runtime":"uitl/ScaleButtonScript.ts"},"compId":37}]},{"type":"Button","props":{"y":49,"x":465,"var":"btn_shake","stateNum":1,"skin":"common/btn_yao.png","presetID":6,"anchorY":0.5,"anchorX":0.5},"compId":15,"child":[{"type":"Script","props":{"presetID":32,"runtime":"uitl/ScaleButtonScript.ts"},"compId":38}]}]},{"type":"Box","props":{"y":176,"x":48,"presetID":7,"name":"coin"},"compId":9,"child":[{"type":"Image","props":{"skin":"common/img_coin_bg.png","presetID":8},"compId":11},{"type":"Label","props":{"y":79,"x":85.04541015625,"text":"0","presetID":24,"fontSize":34,"color":"#9c7b7b"},"compId":30},{"type":"Sprite","props":{"y":-6,"x":-24,"texture":"common/icon_coin.png","presetID":9},"compId":12},{"type":"Label","props":{"y":29,"x":88,"text":"0","presetID":10,"fontSize":34,"color":"#171515","anchorY":0.5,"anchorX":0.5},"compId":13},{"type":"Button","props":{"y":0,"x":156,"var":"btnDrawal","stateNum":1,"skin":"common/btn_drawal.png","presetID":11},"compId":14},{"type":"Script","props":{"tiplab":"@node:30","presetID":23,"coinlab":"@node:13","runtime":"RedDrawal.ts"},"compId":29}]},{"type":"Box","props":{"y":250,"x":218,"presetID":19},"compId":25,"child":[{"type":"Button","props":{"y":279,"x":-21,"width":240,"var":"btnPreFull","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":39,"labelSize":30,"label":"预加载全屏","anchorY":0.5,"anchorX":0.5},"compId":48,"child":[{"type":"Script","props":{"presetID":40,"runtime":"uitl/ScaleButtonScript.ts"},"compId":49}]},{"type":"Button","props":{"y":189,"x":-21,"width":240,"var":"btnPreNative","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":37,"labelSize":30,"label":"预加载信息流","anchorY":0.5,"anchorX":0.5},"compId":46,"child":[{"type":"Script","props":{"presetID":38,"runtime":"uitl/ScaleButtonScript.ts"},"compId":47}]},{"type":"Button","props":{"y":87,"x":-21,"width":240,"var":"btnPreloadAD","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":13,"labelSize":30,"label":"预加载广告","anchorY":0.5,"anchorX":0.5},"compId":16,"child":[{"type":"Script","props":{"presetID":26,"runtime":"uitl/ScaleButtonScript.ts"},"compId":32}]},{"type":"Button","props":{"y":87,"x":402,"width":200,"var":"btnCloseBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":47,"labelSize":30,"label":"关闭banner","anchorY":0.5,"anchorX":0.5},"compId":56,"child":[{"type":"Script","props":{"presetID":48,"runtime":"uitl/ScaleButtonScript.ts"},"compId":57}]},{"type":"Button","props":{"y":87,"x":200,"width":200,"var":"btnShowBanner","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":14,"labelSize":30,"label":"显示banner","anchorY":0.5,"anchorX":0.5},"compId":18,"child":[{"type":"Script","props":{"presetID":27,"runtime":"uitl/ScaleButtonScript.ts"},"compId":33}]},{"type":"Button","props":{"y":279,"x":313,"width":240,"var":"btnShowFullAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":15,"labelSize":30,"label":"显示全屏广告","anchorY":0.5,"anchorX":0.5},"compId":20,"child":[{"type":"Script","props":{"presetID":28,"runtime":"uitl/ScaleButtonScript.ts"},"compId":34}]},{"type":"Button","props":{"y":189,"x":405,"width":200,"var":"btnCloseNative","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":45,"labelSize":30,"label":"关闭信息流","anchorY":0.5,"anchorX":0.5},"compId":54,"child":[{"type":"Script","props":{"presetID":46,"runtime":"uitl/ScaleButtonScript.ts"},"compId":55}]},{"type":"Button","props":{"y":189,"x":205,"width":200,"var":"btnShowNativeAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","scaleX":1,"presetID":16,"labelSize":30,"label":"显示信息流","anchorY":0.5,"anchorX":0.5},"compId":21,"child":[{"type":"Script","props":{"presetID":33,"runtime":"uitl/ScaleButtonScript.ts"},"compId":39}]},{"type":"Button","props":{"width":240,"var":"btnShowInterAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":17,"labelSize":30,"label":"显示插屏广告","centerY":105,"centerX":18,"anchorY":0.5,"anchorX":0.5},"compId":22,"child":[{"type":"Script","props":{"presetID":34,"runtime":"uitl/ScaleButtonScript.ts"},"compId":40}]},{"type":"Button","props":{"width":240,"var":"btnRewardAd","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":22,"labelSize":30,"label":"显示激励广告","centerY":200,"centerX":23,"anchorY":0.5,"anchorX":0.5},"compId":28,"child":[{"type":"Script","props":{"presetID":35,"runtime":"uitl/ScaleButtonScript.ts"},"compId":41}]},{"type":"Button","props":{"y":-43,"x":366,"width":200,"var":"btnMinWithDrawal","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":49,"labelSize":30,"label":"最低提档","anchorY":0.5,"anchorX":0.5},"compId":58,"child":[{"type":"Script","props":{"presetID":50,"runtime":"uitl/ScaleButtonScript.ts"},"compId":59},{"type":"Label","props":{"y":-22,"x":36,"width":22,"var":"minWithDrawalLab","text":"0","rotation":-4,"presetID":51,"pivotY":11,"pivotX":11,"height":22,"fontSize":20,"color":"#eedbda"},"compId":60}]},{"type":"Button","props":{"y":-43,"x":169,"width":180,"var":"btnRedpacket","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":25,"labelSize":30,"label":"触发红包","anchorY":0.5,"anchorX":0.5},"compId":31,"child":[{"type":"Script","props":{"presetID":36,"runtime":"uitl/ScaleButtonScript.ts"},"compId":42}]},{"type":"Button","props":{"y":375,"x":-21,"width":240,"var":"btnPreInsert","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":41,"labelSize":30,"label":"预加载插屏","anchorY":0.5,"anchorX":0.5},"compId":50,"child":[{"type":"Script","props":{"presetID":42,"runtime":"uitl/ScaleButtonScript.ts"},"compId":51}]},{"type":"Button","props":{"y":470,"x":-21,"width":240,"var":"btnPreVideo","stateNum":1,"skin":"common/btn_gr.png","sizeGrid":"22,55,26,48","presetID":43,"labelSize":30,"label":"预加载激励","anchorY":0.5,"anchorX":0.5},"compId":52,"child":[{"type":"Script","props":{"presetID":44,"runtime":"uitl/ScaleButtonScript.ts"},"compId":53}]}]},{"type":"View","props":{"y":773,"x":75,"width":600,"var":"NativeAD","presetID":18,"height":300},"compId":23,"child":[{"type":"Script","props":{"presetID":21,"runtime":"sdk/NativeAd.ts"},"compId":27}]}],"loadList":["common/btnInvite.png","common/btn_serve(1).png","common/btn_vibrate_on.png","common/btn_yao.png","common/img_coin_bg.png","common/icon_coin.png","common/btn_drawal.png","common/btn_gr.png"],"loadList3D":[]}
3 \ No newline at end of file 3 \ No newline at end of file
puchi_laya/src/.DS_Store
No preview for this file type
puchi_laya/src/Main.ts
1 import GameConfig from "./GameConfig"; 1 import GameConfig from "./GameConfig";
2 import AdManager from "./sdk/AdManager"; 2 import AdManager from "./sdk/AdManager";
3 -import { AppSdk } from "./sdk/AppSdk";  
4 -import RedpacketModel from "./sdk/model/RedpacketModel";  
5 import ShakeModel from "./sdk/model/ShakeModel"; 3 import ShakeModel from "./sdk/model/ShakeModel";
  4 +import PcSdk from "./sdk/PcSdk";
  5 +import RedpacketModel from "./sdk/model/RedpacketModel";
6 class Main { 6 class Main {
7 constructor() { 7 constructor() {
8 //根据IDE设置初始化引擎 8 //根据IDE设置初始化引擎
@@ -42,15 +42,18 @@ class Main { @@ -42,15 +42,18 @@ class Main {
42 /**初始化SDK */ 42 /**初始化SDK */
43 async initData() { 43 async initData() {
44 /**隐藏启动屏 */ 44 /**隐藏启动屏 */
45 - AppSdk.I.hideSplash() 45 + PcSdk.I.hideSplash()
46 /**初始化adk 获取app配置信息 */ 46 /**初始化adk 获取app配置信息 */
47 - AppSdk.I.init(); 47 + PcSdk.I.init();
48 /**预加载视频 */ 48 /**预加载视频 */
49 AdManager.I.init(); 49 AdManager.I.init();
50 - /**获取红包配置 初始化数据 */  
51 - await RedpacketModel.I.init();  
52 - /**初始化摇一摇的数据 */  
53 - await ShakeModel.I.init() 50 + /**获取红包配置 摇一摇 等静态数据 */
  51 + await PcSdk.I.initGameConfig();
  52 +
  53 +
  54 + await RedpacketModel.I.init()
  55 +
  56 + await ShakeModel.I.init();
54 } 57 }
55 } 58 }
56 //激活启动类 59 //激活启动类
puchi_laya/src/RedDrawal.ts
1 import RedpacketModel from "./sdk/model/RedpacketModel"; 1 import RedpacketModel from "./sdk/model/RedpacketModel";
2 import { EventCenter } from "./event/EventCenter"; 2 import { EventCenter } from "./event/EventCenter";
3 import { EventEnum } from "./event/EventEnum"; 3 import { EventEnum } from "./event/EventEnum";
  4 +import PcSdk from "./sdk/PcSdk";
4 /** 5 /**
5 * 主界面 金币金额 6 * 主界面 金币金额
6 */ 7 */
@@ -28,13 +29,12 @@ export default class RedDrawal extends Laya.Script { @@ -28,13 +29,12 @@ export default class RedDrawal extends Laya.Script {
28 } 29 }
29 30
30 async updateStar() { 31 async updateStar() {
31 - let coin = await RedpacketModel.I.getTotalCoin();  
32 - // let coin = 1000 32 + let coin = await PcSdk.I.myCoin();
33 this.totalCoin = coin; 33 this.totalCoin = coin;
34 this.coinlab.text = '' + coin; 34 this.coinlab.text = '' + coin;
35 let str = '可提现'; 35 let str = '可提现';
36 /**更新下下一次提现的额度 */ 36 /**更新下下一次提现的额度 */
37 - let nextDrawal = await RedpacketModel.I.minWithDrawal(); 37 + let nextDrawal = await PcSdk.I.minWithDrawal();
38 if (this.totalCoin > 0) { 38 if (this.totalCoin > 0) {
39 let leftCoin = nextDrawal - this.totalCoin; 39 let leftCoin = nextDrawal - this.totalCoin;
40 if (leftCoin > 0) 40 if (leftCoin > 0)
puchi_laya/src/TestScene.ts
1 import { ui } from "./ui/layaMaxUI"; 1 import { ui } from "./ui/layaMaxUI";
2 import AdManager from "./sdk/AdManager"; 2 import AdManager from "./sdk/AdManager";
3 -import { AppSdk } from "./sdk/AppSdk";  
4 import ShakeModel from "./sdk/model/ShakeModel"; 3 import ShakeModel from "./sdk/model/ShakeModel";
5 import RedpacketModel from "./sdk/model/RedpacketModel"; 4 import RedpacketModel from "./sdk/model/RedpacketModel";
  5 +import PcSdk from "./sdk/PcSdk";
  6 +import NativeAd from "./sdk/NativeAd";
  7 +import Util from "./uitl/Util";
6 8
7 export default class TestScene extends ui.TestSceneUI { 9 export default class TestScene extends ui.TestSceneUI {
  10 + private isLongVibrate: boolean = false;
8 constructor() { 11 constructor() {
9 super(); 12 super();
10 //关闭多点触控,否则就无敌了 13 //关闭多点触控,否则就无敌了
11 Laya.MouseManager.multiTouchEnabled = false; 14 Laya.MouseManager.multiTouchEnabled = false;
12 console.log('---------------TestScene-------') 15 console.log('---------------TestScene-------')
13 - this.NativeAD.visible = false; 16 + // this.NativeAD.visible = false;
14 17
15 } 18 }
16 19
17 onEnable(): void { 20 onEnable(): void {
18 this.btnServer.on(Laya.Event.CLICK, this, this.openServer); 21 this.btnServer.on(Laya.Event.CLICK, this, this.openServer);
  22 + this.btnVibrate.on(Laya.Event.CLICK, this, () => {
  23 + PcSdk.I.vibrate(this.isLongVibrate ? 0 : 1);
  24 + this.isLongVibrate = !this.isLongVibrate;
  25 + });
19 this.btnDrawal.on(Laya.Event.CLICK, this, this.openPersonal); 26 this.btnDrawal.on(Laya.Event.CLICK, this, this.openPersonal);
20 this.btnInvite.on(Laya.Event.CLICK, this, this.invitation); 27 this.btnInvite.on(Laya.Event.CLICK, this, this.invitation);
21 this.btn_shake.on(Laya.Event.CLICK, this, this.touchShake); 28 this.btn_shake.on(Laya.Event.CLICK, this, this.touchShake);
@@ -27,30 +34,49 @@ export default class TestScene extends ui.TestSceneUI { @@ -27,30 +34,49 @@ export default class TestScene extends ui.TestSceneUI {
27 this.btnRewardAd.on(Laya.Event.CLICK, this, this.showRewardAd); 34 this.btnRewardAd.on(Laya.Event.CLICK, this, this.showRewardAd);
28 this.btnRedpacket.on(Laya.Event.CLICK, this, this.openRedpacket); 35 this.btnRedpacket.on(Laya.Event.CLICK, this, this.openRedpacket);
29 36
  37 + this.btnPreVideo.on(Laya.Event.CLICK, this, this.preloadRewardAd);
  38 + this.btnPreFull.on(Laya.Event.CLICK, this, this.preloadFull);
  39 + this.btnPreInsert.on(Laya.Event.CLICK, this, this.preloadInterAd);
  40 + this.btnPreNative.on(Laya.Event.CLICK, this, this.preloadNativeAd);
  41 + this.btnCloseBanner.on(Laya.Event.CLICK, this, this.closeAdBanner);
  42 + this.btnCloseNative.on(Laya.Event.CLICK, this, this.closeAdverDialog);
  43 + this.btnMinWithDrawal.on(Laya.Event.CLICK, this, this.minWithDrawal);
  44 +
30 } 45 }
31 46
32 /**预加载广告 */ 47 /**预加载广告 */
33 async preloadAD() { 48 async preloadAD() {
34 console.log('---------------preloadAD-------') 49 console.log('---------------preloadAD-------')
35 - await AdManager.I.init();  
36 - // MyBridge.testReturn(function (...array) {  
37 - // console.log("-------web--------onClick----->>cocos JS-------MyBridge.testReturn------" + JSON.stringify(array)); 50 + await AdManager.I.preloadBanner();
  51 + }
  52 +
  53 + preloadRewardAd() {
  54 + AdManager.I.preloadRewardAd();
  55 + }
  56 +
  57 + preloadFull() {
  58 + AdManager.I.preloadFullAd();
  59 + }
  60 +
  61 + preloadInterAd() {
  62 + AdManager.I.preloadInterAd();
  63 + }
  64 +
  65 + preloadNativeAd() {
  66 + this.NativeAD.getComponent(NativeAd).initNativeAd(1);
  67 + }
38 68
39 - // }); 69 + closeAdverDialog() {
  70 + AdManager.I.closeAdverDialog()
  71 + }
  72 + closeAdBanner() {
  73 + AdManager.I.closeAdBanner()
40 } 74 }
41 75
42 /**显示全屏广告 */ 76 /**显示全屏广告 */
43 showFullAd() { 77 showFullAd() {
44 console.log('---------------showFullAd-------') 78 console.log('---------------showFullAd-------')
45 AdManager.I.showFullAd(); 79 AdManager.I.showFullAd();
46 - // var ret = MyBridge.mapToString({  
47 - // data: {  
48 - // "count": 2, "title": [{ "name": "nnn", "value": "nnnvalue", "default_show": 1 }  
49 - // , { "name": "mmm", "value": "mmmvalue\"aasdasd" }]  
50 - // }  
51 - // });  
52 -  
53 - // console.log("-------web--------onClick----->>cocos JS-------MyBridge.mapToString------" + JSON.stringify(ret));  
54 } 80 }
55 /**显示banner */ 81 /**显示banner */
56 showBanner() { 82 showBanner() {
@@ -60,45 +86,44 @@ export default class TestScene extends ui.TestSceneUI { @@ -60,45 +86,44 @@ export default class TestScene extends ui.TestSceneUI {
60 86
61 /**信息流广告 */ 87 /**信息流广告 */
62 showNativeAd() { 88 showNativeAd() {
63 - console.log('---------------showNativeAd-------')  
64 - this.NativeAD.visible = true; 89 + this.NativeAD.getComponent(NativeAd).initNativeAd();
65 } 90 }
66 91
67 /**插屏广告 */ 92 /**插屏广告 */
68 showInterAd() { 93 showInterAd() {
69 console.log('---------------showInterAd-------') 94 console.log('---------------showInterAd-------')
70 -  
71 AdManager.I.showInterAd(); 95 AdManager.I.showInterAd();
72 } 96 }
73 /**激励视频广告 */ 97 /**激励视频广告 */
74 async showRewardAd() { 98 async showRewardAd() {
75 console.log('---------------showRewardAd-------') 99 console.log('---------------showRewardAd-------')
76 -  
77 await AdManager.I.showRewardAd(); 100 await AdManager.I.showRewardAd();
78 /**成功后执行对应的奖励 */ 101 /**成功后执行对应的奖励 */
79 } 102 }
80 /**意见反馈 */ 103 /**意见反馈 */
81 openServer() { 104 openServer() {
82 console.log('---------------openServer-------') 105 console.log('---------------openServer-------')
83 - AppSdk.I.feedback(); 106 + PcSdk.I.feedback();
84 } 107 }
85 108
  109 + async openRedpacket() {
  110 + RedpacketModel.I.checkRedpacket()
  111 + }
86 112
87 - openRedpacket() {  
88 - RedpacketModel.I.checkRedpacket();  
89 - console.log('红包获取结果:curRedpacket' + RedpacketModel.I.curRedpacket)  
90 - // console.log('红包获取结果:' + JSON.stringify(data))  
91 - // ViewManager.I.openPopwin(RedpacketPopwin, 0); 113 + async minWithDrawal() {
  114 + let money = await PcSdk.I.minWithDrawal()
  115 + this.minWithDrawalLab.text = '最低提现:' + money;
92 } 116 }
93 117
  118 +
94 /**打开个人中心 */ 119 /**打开个人中心 */
95 openPersonal() { 120 openPersonal() {
96 console.log('---------------openServer-------') 121 console.log('---------------openServer-------')
97 - AppSdk.I.personal(0); 122 + PcSdk.I.personal(0);
98 } 123 }
99 /**邀请好友 */ 124 /**邀请好友 */
100 invitation() { 125 invitation() {
101 - AppSdk.I.invitation(); 126 + PcSdk.I.invitation();
102 } 127 }
103 128
104 /** 129 /**
@@ -109,10 +134,7 @@ export default class TestScene extends ui.TestSceneUI { @@ -109,10 +134,7 @@ export default class TestScene extends ui.TestSceneUI {
109 */ 134 */
110 touchShake() { 135 touchShake() {
111 console.log('---------------touchShake-------') 136 console.log('---------------touchShake-------')
112 - // this.skin.btnShakeAni.play(0);  
113 - AppSdk.I.vibrate();  
114 - // ViewManager.I.showModal(HintModal, ' 今⽇次数已⽤完,请明⽇再来');  
115 - // this.skin.handAni.stop(); 137 + PcSdk.I.vibrate();
116 /** 138 /**
117 * 1.回去星星 道具 139 * 1.回去星星 道具
118 * 2.红包 直接获得⾦币;或者直接弹激励视频后,获得⾦币 140 * 2.红包 直接获得⾦币;或者直接弹激励视频后,获得⾦币
puchi_laya/src/sdk/AdManager.ts
@@ -8,10 +8,33 @@ export default class AdManager { @@ -8,10 +8,33 @@ export default class AdManager {
8 this.preloadRewardAd(); 8 this.preloadRewardAd();
9 } 9 }
10 10
11 - private preloadRewardAd() { 11 + preloadBanner() {
  12 + TTAdSdk.I.loadBannerExpressAd(1);
  13 + }
  14 +
  15 + preloadRewardAd() {
12 TTAdSdk.I.showRewardVideoAd(1); 16 TTAdSdk.I.showRewardVideoAd(1);
13 } 17 }
14 18
  19 + preloadFullAd() {
  20 + TTAdSdk.I.loadFullScreenVideoAd(1);
  21 + }
  22 +
  23 + preloadInterAd() {
  24 + // TTAdSdk.I.showInteractionExpressAd(1);
  25 + }
  26 +
  27 + preloadNativeAd(){
  28 + TTAdSdk.I.loadFullScreenVideoAd(1);
  29 + }
  30 +
  31 + closeAdverDialog() {
  32 + TTAdSdk.I.closeAdverDialog()
  33 + }
  34 + closeAdBanner() {
  35 + TTAdSdk.I.closeAdBanner()
  36 + }
  37 +
15 async showRewardAd() { 38 async showRewardAd() {
16 try { 39 try {
17 let ret = await TTAdSdk.I.showRewardVideoAd(); 40 let ret = await TTAdSdk.I.showRewardVideoAd();
@@ -24,17 +47,8 @@ export default class AdManager { @@ -24,17 +47,8 @@ export default class AdManager {
24 } 47 }
25 } 48 }
26 49
27 - private preloadFullAd() {  
28 - TTAdSdk.I.loadFullScreenVideoAd( 1);  
29 - }  
30 -  
31 - private preloadInterAd() {  
32 - TTAdSdk.I.loadFullScreenVideoAd(1);  
33 - }  
34 50
35 async showFullAd() { 51 async showFullAd() {
36 - // console.warn('full');  
37 - // return Promise.resolve();  
38 try { 52 try {
39 let ret = await TTAdSdk.I.loadFullScreenVideoAd(); 53 let ret = await TTAdSdk.I.loadFullScreenVideoAd();
40 this.preloadFullAd(); 54 this.preloadFullAd();
@@ -46,8 +60,6 @@ export default class AdManager { @@ -46,8 +60,6 @@ export default class AdManager {
46 } 60 }
47 61
48 async showInterAd() { 62 async showInterAd() {
49 - // console.warn('full');  
50 - // return Promise.resolve();  
51 try { 63 try {
52 let ret = await TTAdSdk.I.showInteractionExpressAd(); 64 let ret = await TTAdSdk.I.showInteractionExpressAd();
53 this.preloadInterAd(); 65 this.preloadInterAd();
@@ -67,19 +79,12 @@ export default class AdManager { @@ -67,19 +79,12 @@ export default class AdManager {
67 TTAdSdk.I.loadBannerExpressAd(); 79 TTAdSdk.I.loadBannerExpressAd();
68 } 80 }
69 81
70 - hideBanner() {  
71 - TTAdSdk.I.hideAd(); 82 +
  83 + showNativeAd(x, y, w, h,preload=0) {
  84 + TTAdSdk.I.loadNativeExpressAd(x, y, w, h,preload);
72 } 85 }
73 86
74 - showNativeAd(x, y, w, h) {  
75 - TTAdSdk.I.loadNativeExpressAd( x, y, w, h);  
76 - }  
77 87
78 - hideNativeAd() {  
79 - TTAdSdk.I.hideAd();  
80 - }  
81 -  
82 -  
83 88
84 static get I(): AdManager { 89 static get I(): AdManager {
85 return ObjectInstance.get(AdManager); 90 return ObjectInstance.get(AdManager);
puchi_laya/src/sdk/AndroidAppSdk.ts
@@ -1,20 +0,0 @@ @@ -1,20 +0,0 @@
1 -import BaseAppSdk from "./BaseAppSdk";  
2 -  
3 -export default class AndroidAppSdk extends BaseAppSdk {  
4 - get system() {  
5 - return 1;  
6 - }  
7 -  
8 - callApp(cmd: string, ...params) {  
9 - this.bridge && this.bridge.call(cmd, ...params);  
10 - // this.bridge && alert(JSON.stringify(this.bridge));  
11 - }  
12 -  
13 - callAppWithBack(callBack: Function, cmd: string, ...params) {  
14 - this.bridge && this.bridge.callWithBack(callBack, cmd, ...params);  
15 - }  
16 -  
17 - protected get bridge() {  
18 - return this._bridge || (this._bridge = this.createClass('com.puchi.sdkdemo.JSBridge'));  
19 - }  
20 -}  
21 \ No newline at end of file 0 \ No newline at end of file
puchi_laya/src/sdk/AppSdk.ts
@@ -1,26 +0,0 @@ @@ -1,26 +0,0 @@
1 -import IosAppSdk from "./IosAppSdk";  
2 -import AndroidAppSdk from "./AndroidAppSdk";  
3 -import BaseAppSdk from "./BaseAppSdk";  
4 -  
5 -export class AppSdk {  
6 - private static _instance: BaseAppSdk;  
7 - static get I(): BaseAppSdk {  
8 - if (!this._instance) {  
9 - let conchConfig = window['conchConfig'];  
10 - let os = conchConfig && conchConfig.getOS();  
11 - switch (os) {  
12 - case "Conch-ios":  
13 - this._instance = new IosAppSdk;  
14 - break;  
15 - case "Conch-android":  
16 - this._instance = new AndroidAppSdk;  
17 - break;  
18 - default:  
19 - this._instance = new BaseAppSdk;  
20 - break;  
21 - }  
22 - window['AppSdk'] = this._instance;  
23 - }  
24 - return this._instance;  
25 - }  
26 -}  
27 \ No newline at end of file 0 \ No newline at end of file
puchi_laya/src/sdk/BaseAppSdk.ts
@@ -1,205 +0,0 @@ @@ -1,205 +0,0 @@
1 -import AddGoldData from "./sdkData/AddGoldData";  
2 -import MyCoinData from "./sdkData/MyCoinData";  
3 -import { GoldConfigData } from "./sdkData/GoldConfigData";  
4 -  
5 -/** 返回参数类型 */  
6 -interface IAppResult<T> {  
7 - /** 错误码 */  
8 - code?: number;  
9 - /** 返回数据 */  
10 - data?: T;  
11 -}  
12 -  
13 -  
14 -export default class BaseAppSdk {  
15 - protected _bridge: any;  
16 - private netOnArr: Array<Function> = [];  
17 - private netOffArr: Array<Function> = [];  
18 - private _width: number;  
19 - private _height: number;  
20 - private _channel: string;  
21 - private _version: string;  
22 - private _level: number;  
23 -  
24 - public pangolinId: string;  
25 - public adnetId: string;  
26 -  
27 - init() {  
28 - let conch = window['conch'];  
29 - if (conch) {  
30 - conch.setNetworkEvtFunction(this.networkEvtFunc.bind(this));  
31 - }  
32 - this.callApp('setAppCallback', 1, 'AppSdk.onShow()');  
33 - this.callApp('setAppCallback', 2, 'AppSdk.onHide()');  
34 - this.getSystemInfo();  
35 -  
36 - }  
37 -  
38 - private getSystemInfo() {  
39 - this.callAppWithBack(ret => {  
40 - console.log('---------------getSystemInfo-------' + JSON.stringify(ret))  
41 - let { w, h, versionName, channel, pangolin, adnet, level } = JSON.parse(ret);  
42 - this._width = w;  
43 - this._height = h;  
44 - this._version = versionName;  
45 - this._channel = channel;  
46 - this.pangolinId = pangolin;  
47 - this.adnetId = adnet;  
48 - this._level = level;  
49 - }, 'getSystemInfo', 0);  
50 - }  
51 -  
52 - private onShow() {  
53 - // EventCenter.emit(EventEnum.APP_SHOW);  
54 - }  
55 -  
56 - private onHide() {  
57 - // EventCenter.emit(EventEnum.APP_HIDE);  
58 -  
59 - }  
60 -  
61 - vibrate() {  
62 - this.callApp('openSystemFun', 0);  
63 - }  
64 -  
65 - hideSplash() {  
66 - this.callApp('hideSplash');  
67 - }  
68 -  
69 - /**弹出提现 */  
70 - withDrawal() {  
71 - this.callApp('withDrawal');  
72 - }  
73 - /**意见反馈 */  
74 - feedback() {  
75 - this.callApp('feedback');  
76 - }  
77 -  
78 - /**  
79 - * key 默认0 ,签到 1  
80 - */  
81 - personal(key = 0) {  
82 - this.callApp('personal', key);  
83 - }  
84 - /**邀请好友*/  
85 - invitation() {  
86 - this.callApp('invitation');  
87 - }  
88 -  
89 -  
90 - currentShut(value: number) {  
91 - this.callApp('currentShut', value);  
92 - }  
93 - /**  
94 - * 获取金币配表  
95 - * @param key 1红包 2 摇一摇红包  
96 - */  
97 -  
98 - async getGameConfig(key: number = 1) {  
99 - let result = await this.onCallBack('getGameConfig', key)  
100 - GoldConfigData.I.initData(result);  
101 - return result;  
102 - }  
103 -  
104 - /**  
105 - * 要求发放金币  
106 - * @param key 1红包  
107 - */  
108 -  
109 - async addGold(key: number = 1) {  
110 - let result = await this.onCallBack('addGold', key);  
111 - AddGoldData.initData(result);  
112 - return result;  
113 - }  
114 - async myCoin() {  
115 - let result = await this.onCallBack('myCoin')  
116 - MyCoinData.initData(result);  
117 - return result;  
118 -  
119 - }  
120 - /**获取当前提现的档位 */  
121 - async minWithDrawal() {  
122 - let result = await this.onCallBack('minWithDrawal');  
123 - if (!Boolean(parseInt(result.code + ''))) {  
124 - return parseInt(result.data['money']) * 100;  
125 - }  
126 - return 0;  
127 - }  
128 -  
129 -  
130 -  
131 -  
132 - onCallBack(cmd: string, ...params) {  
133 - return new Promise<IAppResult<any[]>>(async (resolve, reject) => {  
134 - await this.callAppWithBack(res => {  
135 - res = JSON.parse(res)  
136 - // res = { code: 1000 }  
137 - if (!res.code) {  
138 - resolve({ code: res.code, data: res.data });  
139 - } else {  
140 - resolve({ code: res.code })  
141 - }  
142 - }, cmd, ...params);  
143 - })  
144 -  
145 -  
146 -  
147 - }  
148 -  
149 - callApp(cmd: string, ...params) {  
150 - }  
151 -  
152 - callAppWithBack(callBack: Function, cmd: string, ...params) {  
153 - }  
154 -  
155 - private networkEvtFunc(type: number) {  
156 - let funcArr;  
157 - if (type == 0) {  
158 - funcArr = this.netOffArr;  
159 - } else if (type == 5) {  
160 - funcArr = this.netOnArr;  
161 - }  
162 - if (funcArr) {  
163 - for (let i = 0; i < funcArr.length; i++) {  
164 - funcArr[i]();  
165 - }  
166 - }  
167 - }  
168 -  
169 - onNetOn(func: Function) {  
170 - this.netOnArr.push(func);  
171 - }  
172 -  
173 -  
174 -  
175 - onNetOff(func: Function) {  
176 - this.netOffArr.push(func);  
177 - }  
178 -  
179 - get level() {  
180 - return this._level;  
181 - }  
182 - get width() {  
183 - return this._width;  
184 - }  
185 -  
186 - get height() {  
187 - return this._height;  
188 - }  
189 -  
190 - get version() {  
191 - return this._version;  
192 - }  
193 -  
194 - get channel() {  
195 - return this._channel;  
196 - }  
197 -  
198 - protected get bridge() {  
199 - return null;  
200 - }  
201 -  
202 - protected createClass(name: string) {  
203 - return window['PlatformClass'].createClass(name);  
204 - }  
205 -}  
206 \ No newline at end of file 0 \ No newline at end of file
puchi_laya/src/sdk/IosAppSdk.ts
@@ -1,26 +0,0 @@ @@ -1,26 +0,0 @@
1 -import BaseAppSdk from "./BaseAppSdk";  
2 -  
3 -export default class IosAppSdk extends BaseAppSdk {  
4 - get system() {  
5 - return 0;  
6 - }  
7 -  
8 - callApp(cmd: string, ...params) {  
9 - if (params.length) {  
10 - cmd += ':';  
11 - }  
12 - this.bridge && this.bridge.call(cmd, ...params);  
13 - // this.bridge && alert(JSON.stringify(this.bridge));  
14 - }  
15 -  
16 - callAppWithBack(callBack: Function, cmd: string, ...params) {  
17 - if (params.length) {  
18 - cmd += ':';  
19 - }  
20 - this.bridge && this.bridge.callWithBack(callBack, cmd, ...params);  
21 - }  
22 -  
23 - protected get bridge() {  
24 - return this._bridge || (this._bridge = this.createClass('JSBridge'));  
25 - }  
26 -}  
27 \ No newline at end of file 0 \ No newline at end of file
puchi_laya/src/sdk/NativeAd.ts
1 import AdManager from "./AdManager"; 1 import AdManager from "./AdManager";
2 2
3 export default class NativeAd extends Laya.Script { 3 export default class NativeAd extends Laya.Script {
4 - onEnable(): void { 4 +
  5 + public initNativeAd(preload=0){
5 let globalPoint = this.item.localToGlobal(Laya.Point.EMPTY, true); 6 let globalPoint = this.item.localToGlobal(Laya.Point.EMPTY, true);
6 - AdManager.I.showNativeAd(globalPoint.x, globalPoint.y, this.item.width, this.item.height); 7 + AdManager.I.showNativeAd(globalPoint.x, globalPoint.y, this.item.width, this.item.height,preload);
  8 + }
  9 + onEnable(): void {
  10 + this.initNativeAd();
7 } 11 }
8 12
9 onDisable(): void { 13 onDisable(): void {
10 - AdManager.I.hideNativeAd(); 14 + AdManager.I.closeAdverDialog();
11 } 15 }
12 16
13 private get item(): Laya.View { 17 private get item(): Laya.View {
puchi_laya/src/sdk/PcSdk.ts 0 → 100644
@@ -0,0 +1,235 @@ @@ -0,0 +1,235 @@
  1 +import ObjectInstance from "../uitl/ObjectInstance";
  2 +
  3 +export default class PcSdk {
  4 + private _width: number;
  5 + private _height: number;
  6 + private _channel: string;
  7 + private _version: string;
  8 + private _level: number;
  9 + private _gameConfig: number;
  10 +
  11 + public pangolinId: string;
  12 + public adnetId: string;
  13 +
  14 + init() {
  15 + this.getSystemInfo();
  16 + }
  17 +
  18 + private get myBridge() {
  19 + if (MyBridge) {
  20 + return MyBridge;
  21 + }
  22 + }
  23 +
  24 +
  25 +
  26 + /**获取基本版本信息以及手机的配置 */
  27 + private getSystemInfo(key: number = 0) {
  28 + let ret = this.myBridge.getSystemInfo(key);
  29 + let { w, h, versionName, channel, pangolin, adnet, level } = JSON.parse(ret);
  30 + [this._width, this._height, this._version,
  31 + this._channel, this.pangolinId,
  32 + this.adnetId, this._level] = [w, h, versionName, channel, pangolin, adnet, level];
  33 + }
  34 +
  35 + initGameConfig() {
  36 + this._gameConfig = this.getGameConfig();
  37 + }
  38 +
  39 + /**
  40 + * 震动
  41 + * @param key 0 短震动 1 长震动
  42 + */
  43 + vibrate(key: number = 0) {
  44 + this.myBridge.openSystemFun(key);
  45 + }
  46 +
  47 + /**隐藏启动屏 */
  48 + hideSplash() {
  49 + this.myBridge.hideSplash();
  50 + }
  51 +
  52 + /**弹出提现 */
  53 + withDrawal() {
  54 + this.myBridge.withDrawal();
  55 + }
  56 + /**意见反馈 */
  57 + feedback() {
  58 + this.myBridge.feedback();
  59 + }
  60 + /**
  61 + * key 默认0 ,签到 1
  62 + */
  63 + personal(key = 0) {
  64 + this.myBridge.personal(key);
  65 + }
  66 + /**邀请好友*/
  67 + invitation() {
  68 + this.myBridge.invitation();
  69 + }
  70 +
  71 +
  72 + /**邀请好友*/
  73 + openReward() {
  74 + this.myBridge.openReward();
  75 + }
  76 + /**签到*/
  77 + openSignin() {
  78 + this.myBridge.openSingin();
  79 + }
  80 +
  81 +
  82 + /**
  83 + * 获取金币配表
  84 + * @param key 1红包 2 摇一摇红包
  85 + */
  86 + getGameConfig() {
  87 + let result = this.myBridge.getGameConfig();
  88 + // console.log('---------------getGameConfig-------' + JSON.stringify(result))
  89 + return JSON.parse(result);
  90 + }
  91 + /**
  92 + * 要求发放金币
  93 + * @param key 1红包
  94 + */
  95 + async addGold(key) {
  96 + return new Promise<any>(async (resolve, reject) => {
  97 + await this.myBridge.addGold(key, res => {
  98 + res = JSON.parse(res)
  99 + const { code, data, msg } = res;
  100 + if ('0' === code || !code) {
  101 + resolve(data)
  102 + } else {
  103 + reject(msg);
  104 + }
  105 + });
  106 + })
  107 + }
  108 + /**获取总金币 */
  109 + async myCoin() {
  110 + return new Promise<any>(async (resolve, reject) => {
  111 + await this.myBridge.myCoin(res => {
  112 + res = JSON.parse(res)
  113 + const { code, data, msg } = res;
  114 + if ('0' === code || !code) {
  115 + resolve(data['coin'])
  116 + } else {
  117 + reject(msg);
  118 + }
  119 + });
  120 + })
  121 + }
  122 +
  123 +
  124 + /**获取当前提现的档位 */
  125 + async minWithDrawal() {
  126 + return new Promise<any>(async (resolve, reject) => {
  127 + await this.myBridge.minWithDrawal(res => {
  128 + res = JSON.parse(res)
  129 + const { code, data, msg } = res;
  130 + if ('0' === code || !code) {
  131 + resolve(data['money'])
  132 + } else {
  133 + reject(msg);
  134 + }
  135 + });
  136 + })
  137 + }
  138 +
  139 + /**上报埋点 */
  140 + appDotLog(key: string, value?) {
  141 + this.myBridge.appDotLog(key, value);
  142 + }
  143 + /**热云打点 */
  144 + appDotTracKing(key: string) {
  145 + this.myBridge.appDotTracKing(key);
  146 + }
  147 +
  148 + setCallback(funName: string, pramas?: any) {
  149 + console.log('---------------setCallback---- this.myBridge---' + JSON.stringify(this.myBridge))
  150 + return new Promise((resolve, reject) => {
  151 + this.myBridge[funName](pramas, res => {
  152 + let { code, data } = JSON.parse(res);
  153 + if ('0' === code) {
  154 + resolve(data);
  155 + } else {
  156 + reject(0);
  157 + }
  158 + })
  159 + })
  160 + }
  161 +
  162 + closeAdverDialog() {
  163 + this.myBridge.closeAdverDialog();
  164 + }
  165 + closeAdBanner() {
  166 + this.myBridge.closeAdBanner();
  167 + }
  168 + /**激励视频 */
  169 + showRewardVideoAd(value: IVideo, JBCallback: Function) {
  170 + this.myBridge.showRewardVideoAd(value, JBCallback)
  171 + }
  172 + /** 全屏广告*/
  173 + loadFullScreenVideoAd(data: any, JBCallback: Function) {
  174 + this.myBridge.showRewardVideoAd(data, JBCallback)
  175 + }
  176 + /**信息流广告 */
  177 + loadNativeExpressAd(data: any, JBCallback: Function) {
  178 + this.myBridge.loadNativeExpressAd(data, JBCallback)
  179 + }
  180 + /**banner */
  181 + loadBannerExpressAd(data: any, JBCallback: Function) {
  182 + this.myBridge.loadBannerExpressAd(data, JBCallback)
  183 + }
  184 + /**插屏广告 */
  185 + showInteractionExpressAd(data: any, JBCallback: Function) {
  186 + this.myBridge.showInteractionExpressAd(data, JBCallback)
  187 + }
  188 +
  189 + get level() {
  190 + return this._level;
  191 + }
  192 + get width() {
  193 + return this._width;
  194 + }
  195 +
  196 + get height() {
  197 + return this._height;
  198 + }
  199 +
  200 + get version() {
  201 + return this._version;
  202 + }
  203 +
  204 + get channel() {
  205 + return this._channel;
  206 + }
  207 +
  208 + protected get bridge() {
  209 + return null;
  210 + }
  211 +
  212 + get gameConfig() {
  213 + return this._gameConfig;
  214 + }
  215 + static get I(): PcSdk {
  216 + return ObjectInstance.get(PcSdk);
  217 + }
  218 +}
  219 +// //这里是浏览器环境下, 接收web传过来的消息
  220 +window.onMyBridgeReady = () => {
  221 + console.log("onMyBridgeReady load finish, cost:" + (new Date().getTime()) + "ms");
  222 + MyBridge.App.onResume = (...ret) => {
  223 + console.log(' laya onResume', ret)
  224 + // EventCenter.emit(EventEnum.APP_SHOW);
  225 + }
  226 + MyBridge.App.onPause = (...ret) => {
  227 + console.log(' laya onPause', ret)
  228 + // EventCenter.emit(EventEnum.APP_HIDE);
  229 + }
  230 +}
  231 +
  232 +interface IVideo {
  233 + preloading: number,
  234 + type: number,
  235 +}
0 \ No newline at end of file 236 \ No newline at end of file
puchi_laya/src/sdk/TTAdSdk.ts
1 -import { AppSdk } from "./AppSdk";  
2 import ObjectInstance from "../uitl/ObjectInstance"; 1 import ObjectInstance from "../uitl/ObjectInstance";
  2 +import PcSdk from "./PcSdk";
3 3
4 export default class TTAdSdk { 4 export default class TTAdSdk {
5 - async showRewardVideoAd( preload: number = 0) { 5 + /**
  6 + *
  7 + * @param preload 0 直接加载;1 预加载
  8 + */
  9 + async showRewardVideoAd(preload: number = 0) {
6 let data = { 10 let data = {
7 - w: AppSdk.I.width,  
8 - h: AppSdk.I.height, 11 + type: 1,
9 preloading: preload, 12 preloading: preload,
10 } 13 }
11 return new Promise((resolve, reject) => { 14 return new Promise((resolve, reject) => {
12 let isComplete = false; 15 let isComplete = false;
13 - AppSdk.I.callAppWithBack(ret => { 16 + PcSdk.I.showRewardVideoAd(data, ret => {
14 let { code, message } = JSON.parse(ret); 17 let { code, message } = JSON.parse(ret);
15 switch (code) { 18 switch (code) {
16 case -1: 19 case -1:
17 reject('error'); 20 reject('error');
18 /**'暂无视频广告!每日0点重置'*/; 21 /**'暂无视频广告!每日0点重置'*/;
19 break; 22 break;
20 - case 200: 23 + case 102:
21 isComplete = true; 24 isComplete = true;
22 break; 25 break;
23 - case 100:  
24 - break;  
25 - case 0: 26 + case 101:
26 if (isComplete) { 27 if (isComplete) {
27 resolve(); 28 resolve();
28 } else { 29 } else {
@@ -30,63 +31,75 @@ export default class TTAdSdk { @@ -30,63 +31,75 @@ export default class TTAdSdk {
30 } 31 }
31 break; 32 break;
32 } 33 }
33 - }, 'showRewardVideoAd', 1, JSON.stringify(data)) 34 + })
34 }) 35 })
35 } 36 }
36 37
37 - async loadFullScreenVideoAd( preload: number = 0) { 38 + async loadFullScreenVideoAd(preload: number = 0) {
38 let data = { 39 let data = {
  40 + w: PcSdk.I.width,
  41 + h: PcSdk.I.width * 90 / 600,
39 preloading: preload, 42 preloading: preload,
  43 + type: 1
40 } 44 }
41 return new Promise((resolve, reject) => { 45 return new Promise((resolve, reject) => {
42 - let isComplete = false;  
43 - AppSdk.I.callAppWithBack(ret => {  
44 - }, 'loadFullScreenVideoAd', 1, JSON.stringify(data)) 46 + PcSdk.I.loadFullScreenVideoAd(JSON.stringify(data),res=>{
  47 + resolve(res)
  48 + })
45 }) 49 })
46 } 50 }
47 51
48 - async loadNativeExpressAd( x, y, width, height) {  
49 - let scaleX = AppSdk.I.width / Laya.stage.width;  
50 - let scaleY = AppSdk.I.height / Laya.stage.height; 52 + async loadNativeExpressAd(x, y, width, height, type = 1, preload: number = 0) {
  53 + let scaleX = PcSdk.I.width / Laya.stage.width;
  54 + let scaleY = PcSdk.I.height / Laya.stage.height;
51 let data = { 55 let data = {
  56 + type: type,
  57 + preloading: preload,
52 w: width * scaleX, 58 w: width * scaleX,
53 h: height * scaleY, 59 h: height * scaleY,
54 left: x * scaleX, 60 left: x * scaleX,
55 top: y * scaleY 61 top: y * scaleY
56 } 62 }
57 - AppSdk.I.callAppWithBack(ret => {  
58 - }, 'loadNativeExpressAd', JSON.stringify(data)) 63 + PcSdk.I.loadNativeExpressAd(JSON.stringify(data),res=>{
  64 + return Promise.resolve(res)
  65 + })
59 } 66 }
60 67
61 - async loadBannerExpressAd() { 68 + async loadBannerExpressAd(preload: number = 0) {
62 let data = { 69 let data = {
63 - w: AppSdk.I.width,  
64 - h: AppSdk.I.width * 90 / 600, 70 + w: PcSdk.I.width,
  71 + h: PcSdk.I.width * 90 / 600,
  72 + preloading: preload,
  73 + type: 1
65 } 74 }
66 - AppSdk.I.callAppWithBack(ret => {  
67 - }, 'loadBannerExpressAd', 2, JSON.stringify(data)) 75 + return new Promise((resolve, reject) => {
  76 + PcSdk.I.loadBannerExpressAd(JSON.stringify(data),res=>{
  77 + resolve(res)
  78 + })
  79 + })
68 } 80 }
69 81
70 - hideAd() {  
71 - AppSdk.I.callApp('close_adver_dialog'); 82 + closeAdverDialog() {
  83 + PcSdk.I.closeAdverDialog();
  84 + }
  85 + closeAdBanner() {
  86 + PcSdk.I.closeAdBanner();
72 } 87 }
73 88
74 - async showInteractionExpressAd( preload: number = 0) { 89 + async showInteractionExpressAd(preload: number = 0) {
75 let data = { 90 let data = {
76 - w: AppSdk.I.width * 0.8,  
77 - h: AppSdk.I.height, 91 + w: PcSdk.I.width * 0.8,
  92 + h: PcSdk.I.height,
78 preloading: preload, 93 preloading: preload,
79 } 94 }
80 return new Promise((resolve, reject) => { 95 return new Promise((resolve, reject) => {
81 let isComplete = false; 96 let isComplete = false;
82 - AppSdk.I.callAppWithBack(ret => {  
83 - }, 'showInteractionExpressAd', JSON.stringify(data)) 97 + PcSdk.I.showInteractionExpressAd(JSON.stringify(data),res=>{
  98 + resolve(res)
  99 + })
84 }) 100 })
85 } 101 }
86 102
87 -  
88 -  
89 -  
90 static get I(): TTAdSdk { 103 static get I(): TTAdSdk {
91 return ObjectInstance.get(TTAdSdk) as TTAdSdk; 104 return ObjectInstance.get(TTAdSdk) as TTAdSdk;
92 } 105 }
puchi_laya/src/sdk/TeaSdk.ts
1 -import { AppSdk } from "./AppSdk";  
2 import ObjectInstance from "../uitl/ObjectInstance"; 1 import ObjectInstance from "../uitl/ObjectInstance";
  2 +import PcSdk from "./PcSdk";
3 /** 3 /**
4 * 上报埋点⽇志 4 * 上报埋点⽇志
5 * 具体的打点需要跟运营联系 5 * 具体的打点需要跟运营联系
@@ -11,7 +11,7 @@ export default class TeaSdk { @@ -11,7 +11,7 @@ export default class TeaSdk {
11 } else if (typeof (value) == 'object') { 11 } else if (typeof (value) == 'object') {
12 value = JSON.stringify(value); 12 value = JSON.stringify(value);
13 } 13 }
14 - AppSdk.I.callApp('appLog_dot', key, value); 14 + PcSdk.I.appDotLog(key, value);
15 } 15 }
16 16
17 static get I(): TeaSdk { 17 static get I(): TeaSdk {
@@ -21,5 +21,4 @@ export default class TeaSdk { @@ -21,5 +21,4 @@ export default class TeaSdk {
21 21
22 export enum DotKey { 22 export enum DotKey {
23 NativeAd = 'native_ad', 23 NativeAd = 'native_ad',
24 -  
25 } 24 }
puchi_laya/src/sdk/TrackingSdk.ts
1 -import { AppSdk } from "./AppSdk";  
2 import ObjectInstance from "../uitl/ObjectInstance"; 1 import ObjectInstance from "../uitl/ObjectInstance";
  2 +import PcSdk from "./PcSdk";
3 /** 3 /**
4 * 上报热云埋点⽇志 4 * 上报热云埋点⽇志
5 * 具体的打点需要跟运营联系 5 * 具体的打点需要跟运营联系
6 */ 6 */
7 export default class TrackingSdk { 7 export default class TrackingSdk {
8 dot(key: string) { 8 dot(key: string) {
9 - AppSdk.I.callApp('tracking_event', key); 9 + PcSdk.I.appDotTracKing(key);
10 } 10 }
11 11
12 static get I(): TrackingSdk { 12 static get I(): TrackingSdk {
puchi_laya/src/sdk/model/RedpacketModel.ts
@@ -2,15 +2,12 @@ import BaseModel from &quot;./BaseModel&quot;; @@ -2,15 +2,12 @@ import BaseModel from &quot;./BaseModel&quot;;
2 import AdManager from "../../sdk/AdManager"; 2 import AdManager from "../../sdk/AdManager";
3 import TeaSdk, { DotKey } from "../../sdk/TeaSdk"; 3 import TeaSdk, { DotKey } from "../../sdk/TeaSdk";
4 import TrackingSdk, { TrackingKey } from "../../sdk/TrackingSdk"; 4 import TrackingSdk, { TrackingKey } from "../../sdk/TrackingSdk";
5 -import { GoldConfigData } from "../../sdk/sdkData/GoldConfigData";  
6 -import AddGoldData from "../../sdk/sdkData/AddGoldData";  
7 -import MyCoinData from "../../sdk/sdkData/MyCoinData";  
8 -import { AppSdk } from "../../sdk/AppSdk";  
9 import DateUtils from "../../uitl/DateUtils"; 5 import DateUtils from "../../uitl/DateUtils";
10 import Util, { DataKey } from "../../uitl/Util"; 6 import Util, { DataKey } from "../../uitl/Util";
11 import ObjectInstance from "../../uitl/ObjectInstance"; 7 import ObjectInstance from "../../uitl/ObjectInstance";
12 import { EventCenter } from "../../event/EventCenter"; 8 import { EventCenter } from "../../event/EventCenter";
13 import { EventEnum } from "../../event/EventEnum"; 9 import { EventEnum } from "../../event/EventEnum";
  10 +import PcSdk from "../PcSdk";
14 11
15 export default class RedpacketModel extends BaseModel { 12 export default class RedpacketModel extends BaseModel {
16 private MAX = 20; 13 private MAX = 20;
@@ -23,9 +20,8 @@ export default class RedpacketModel extends BaseModel { @@ -23,9 +20,8 @@ export default class RedpacketModel extends BaseModel {
23 /**初始化红包配置 */ 20 /**初始化红包配置 */
24 async init() { 21 async init() {
25 22
26 - let arr = await GoldConfigData.I.getGoldConfig();  
27 - console.log('---------------RedpacketModel-------'+JSON.stringify(arr))  
28 - 23 + let arr = await this.getRedConfig();
  24 + console.log('---------------RedpacketModel-------' + JSON.stringify(arr))
29 let cash = 0; 25 let cash = 0;
30 this.conf = {}; 26 this.conf = {};
31 arr.forEach(confData => { 27 arr.forEach(confData => {
@@ -37,6 +33,8 @@ export default class RedpacketModel extends BaseModel { @@ -37,6 +33,8 @@ export default class RedpacketModel extends BaseModel {
37 33
38 } 34 }
39 35
  36 +
  37 +
40 initData() { 38 initData() {
41 let data = new RedpacketData; 39 let data = new RedpacketData;
42 let lastTime = Util.I.getItem(DataKey.lastTime) || '0'; 40 let lastTime = Util.I.getItem(DataKey.lastTime) || '0';
@@ -60,6 +58,29 @@ export default class RedpacketModel extends BaseModel { @@ -60,6 +58,29 @@ export default class RedpacketModel extends BaseModel {
60 return data; 58 return data;
61 } 59 }
62 60
  61 +
  62 + async getRedConfig() {
  63 + let result = PcSdk.I.gameConfig;
  64 + console.log('--------------- 获取配置静态表-----' + JSON.stringify(result))
  65 + if (result) {
  66 + let configJson = await this.loadGoldCfg(result['coin_config'][0])
  67 + console.log('-------------- 获取红包静态表-----' + JSON.stringify(result))
  68 + return configJson;
  69 + } else {
  70 + PcSdk.I.initGameConfig();
  71 + }
  72 + }
  73 + async loadGoldCfg(res: string) {
  74 + let configJson = await this.load(res);
  75 + return configJson;
  76 + }
  77 +
  78 + load(res, onProgress?: Laya.Handler): Promise<any> {
  79 + return new Promise((suc, fail) => {
  80 + Laya.loader.load(res, Laya.Handler.create(this, suc), onProgress);
  81 + })
  82 + }
  83 +
63 async checkRedpacket() { 84 async checkRedpacket() {
64 85
65 if (this.data.todayCnt >= this.DAY_MAX_CNT) return false; 86 if (this.data.todayCnt >= this.DAY_MAX_CNT) return false;
@@ -78,10 +99,11 @@ export default class RedpacketModel extends BaseModel { @@ -78,10 +99,11 @@ export default class RedpacketModel extends BaseModel {
78 let cash = 0.000001; 99 let cash = 0.000001;
79 this.curRedpacket = cash; 100 this.curRedpacket = cash;
80 //**弹出红包的界面, 暂时处理成 直接看广告获取金币 */ 101 //**弹出红包的界面, 暂时处理成 直接看广告获取金币 */
81 - await AdManager.I.showRewardAd()  
82 - this.getRepacket()  
83 - /**更新基本显示 */  
84 - EventCenter.emit(EventEnum.UPDATE_COIN); 102 + await AdManager.I.showRewardAd()
  103 + console.log('--------------- 触发了红包-----')
  104 + this.getRepacket()
  105 + /**更新基本显示 */
  106 + EventCenter.emit(EventEnum.UPDATE_COIN);
85 107
86 /*** */ 108 /*** */
87 return true; 109 return true;
@@ -116,18 +138,18 @@ export default class RedpacketModel extends BaseModel { @@ -116,18 +138,18 @@ export default class RedpacketModel extends BaseModel {
116 } 138 }
117 /**获取总共的金币数 */ 139 /**获取总共的金币数 */
118 async getTotalCoin() { 140 async getTotalCoin() {
119 - let totalCoin = await MyCoinData.getCoin(); 141 + let totalCoin = await PcSdk.I.myCoin();
120 return totalCoin; 142 return totalCoin;
121 } 143 }
122 /**获取本次奖励的金币数 */ 144 /**获取本次奖励的金币数 */
123 async addCoin(key: number = 1) { 145 async addCoin(key: number = 1) {
124 - let coinData = await AddGoldData.addCoin(key);  
125 - return coinData; 146 + let coinData = await PcSdk.I.addGold(key);
  147 + return coinData['coin'];
126 } 148 }
127 149
128 /**获取最低提档 */ 150 /**获取最低提档 */
129 async minWithDrawal() { 151 async minWithDrawal() {
130 - let minCoin = await AppSdk.I.minWithDrawal(); 152 + let minCoin = await PcSdk.I.minWithDrawal();
131 return minCoin; 153 return minCoin;
132 } 154 }
133 static get I(): RedpacketModel { 155 static get I(): RedpacketModel {
puchi_laya/src/sdk/model/ShakeModel.ts
1 import BaseModel from "./BaseModel"; 1 import BaseModel from "./BaseModel";
2 -import { AppSdk } from "../../sdk/AppSdk";  
3 import DateUtils from "../../uitl/DateUtils"; 2 import DateUtils from "../../uitl/DateUtils";
4 import Util, { DataKey } from "../../uitl/Util"; 3 import Util, { DataKey } from "../../uitl/Util";
5 import ObjectInstance from "../../uitl/ObjectInstance"; 4 import ObjectInstance from "../../uitl/ObjectInstance";
  5 +import PcSdk from "../PcSdk";
6 6
7 /** 7 /**
8 * 8 *
@@ -20,115 +20,12 @@ export default class ShakeModel extends BaseModel { @@ -20,115 +20,12 @@ export default class ShakeModel extends BaseModel {
20 private shake_day_limit: number = 0; 20 private shake_day_limit: number = 0;
21 21
22 private cur_shake_day_limit: number = 0; 22 private cur_shake_day_limit: number = 0;
23 - /**  
24 - * red_day_limit 红包每日极限产出  
25 - * shake_day_limit 摇一摇每日极限产出  
26 - * interstitial_cnt 插屏计数(每出现x次通用获得物品界面后,出现插屏)  
27 - * interstitial_delay 插屏出现延时(毫秒)  
28 - */  
29 -  
30 - /**  
31 - * // let result = {  
32 - // data: {  
33 - // gameConfig: {  
34 - // "config": {  
35 - // "red_day_limit": 10,  
36 - // "shake_day_limit": 50,  
37 - // "interstitial_cnt": 2,  
38 - // "interstitial_delay": 500  
39 - // },  
40 - // "shake": [  
41 - // {  
42 - // "id": 1,  
43 - // "type": 1,  
44 - // "weight": 1000,  
45 - // "num": 0  
46 - // },  
47 - // {  
48 - // "id": 2,  
49 - // "type": 2,  
50 - // "weight": 400,  
51 - // "num": 0  
52 - // },  
53 - // {  
54 - // "id": 3,  
55 - // "type": 3,  
56 - // "weight": 300,  
57 - // "num": 1  
58 - // },  
59 - // {  
60 - // "id": 4,  
61 - // "type": 3,  
62 - // "weight": 100,  
63 - // "num": 2  
64 - // },  
65 - // {  
66 - // "id": 5,  
67 - // "type": 4,  
68 - // "weight": 300,  
69 - // "num": 1  
70 - // },  
71 - // {  
72 - // "id": 6,  
73 - // "type": 4,  
74 - // "weight": 100,  
75 - // "num": 2  
76 - // },  
77 - // {  
78 - // "id": 7,  
79 - // "type": 5,  
80 - // "weight": 300,  
81 - // "num": 1  
82 - // },  
83 - // {  
84 - // "id": 8,  
85 - // "type": 5,  
86 - // "weight": 100,  
87 - // "num": 2  
88 - // },  
89 - // {  
90 - // "id": 9,  
91 - // "type": 6,  
92 - // "weight": 300,  
93 - // "num": 1  
94 - // },  
95 - // {  
96 - // "id": 10,  
97 - // "type": 6,  
98 - // "weight": 100,  
99 - // "num": 2  
100 - // },  
101 - // {  
102 - // "id": 11,  
103 - // "type": 7,  
104 - // "weight": 300,  
105 - // "num": 1  
106 - // },  
107 - // {  
108 - // "id": 12,  
109 - // "type": 7,  
110 - // "weight": 100,  
111 - // "num": 2  
112 - // },  
113 - // {  
114 - // "id": 13,  
115 - // "type": 8,  
116 - // "weight": 500,  
117 - // "num": 0  
118 - // }  
119 - // ],  
120 - // 'coin_config': []  
121 - // }  
122 - // }  
123 - // }  
124 - */ 23 +
125 async init() { 24 async init() {
126 - let result = await AppSdk.I.getGameConfig();  
127 - console.log('---------------ShakeModel-------'+JSON.stringify(result.data))  
128 -  
129 - let data = result.data;  
130 - if (data['gameConfig']) {  
131 - let gameData = data['gameConfig']; 25 + let result = PcSdk.I.gameConfig;;
  26 + console.log('---------------ShakeModel-- 获取摇一摇静态表-----' + JSON.stringify(result))
  27 + if (result['config']) {
  28 + let gameData = result['config'];
132 this.update(this.initData(gameData)); 29 this.update(this.initData(gameData));
133 } 30 }
134 } 31 }
puchi_laya/src/sdk/sdkData/AddGoldData.ts
@@ -1,19 +0,0 @@ @@ -1,19 +0,0 @@
1 -import { AppSdk } from "../AppSdk";  
2 -  
3 -export default class AddGoldData {  
4 - static coin: string = '0';  
5 - static mycoin: string = '0';  
6 - static initData(data: any) {  
7 - if (!parseInt(data.code)) {  
8 - AddGoldData.coin = data.data.coin;  
9 - AddGoldData.mycoin = data.data.mycoin;  
10 - }  
11 -  
12 - }  
13 -  
14 - static async addCoin(key: number = 1) {  
15 - let result = await AppSdk.I.addGold(key);  
16 - return [parseInt(this.coin),parseInt(this.mycoin)];  
17 -  
18 - }  
19 -}  
20 \ No newline at end of file 0 \ No newline at end of file
puchi_laya/src/sdk/sdkData/GoldConfigData.ts
@@ -1,56 +0,0 @@ @@ -1,56 +0,0 @@
1 -import { AppSdk } from "../AppSdk";  
2 -import Util from "../../uitl/Util";  
3 -  
4 -export class GoldConfigData {  
5 - ad: Object;  
6 - adnet: string;  
7 - app_name: string;  
8 - coin_config: string = '';  
9 - gameUrl: string;  
10 - kuai_app_name: string;  
11 - pangolin: string;  
12 - tTurboAgent: string;  
13 - teaAgent: number;  
14 - tracking: string;  
15 - ttAppLog: string;  
16 - umid: string;  
17 - gameConfig: any;  
18 -  
19 - code: number = -3;  
20 - private static instance: GoldConfigData = null;  
21 -  
22 - public static get I(): GoldConfigData {  
23 - if (!this.instance)  
24 - this.instance = new GoldConfigData();  
25 - return this.instance;  
26 - }  
27 - initData(data) {  
28 - this.code = data.code;  
29 - if (!data.code) {  
30 - data = data.data;  
31 - for (const key in data) {  
32 - if (data.hasOwnProperty(key)) {  
33 - const ele = data[key];  
34 - this[key] = ele;  
35 - }  
36 - }  
37 - }  
38 - }  
39 -  
40 - async getGoldConfig() {  
41 - return new Promise<any>(async (resolve, reject) => {  
42 - let result = await AppSdk.I.getGameConfig();  
43 - let data = result.data;  
44 - if (data['gameConfig']) {  
45 - let gameData = data['gameConfig'];  
46 - let configJson = await this.loadGoldCfg(gameData['coin_config'][0])  
47 - resolve(configJson);  
48 - }  
49 - });  
50 - }  
51 -  
52 - async loadGoldCfg(res: string) {  
53 - let configJson = await Util.I.load(res);  
54 - return configJson;  
55 - }  
56 -}  
puchi_laya/src/sdk/sdkData/MyCoinData.ts
@@ -1,17 +0,0 @@ @@ -1,17 +0,0 @@
1 -import { AppSdk } from "../AppSdk";  
2 -  
3 -export default class MyCoinData {  
4 - static coin: string = '';  
5 - static initData(data: any) {  
6 - if (!parseInt(data.code)){  
7 - this.coin = data.data.coin;  
8 - }else{  
9 - this.coin ='0';  
10 - }  
11 -  
12 - }  
13 - static async getCoin() {  
14 - let result = await AppSdk.I.myCoin();  
15 - return parseInt(this.coin)  
16 - }  
17 -}  
18 \ No newline at end of file 0 \ No newline at end of file
puchi_laya/src/ui/layaMaxUI.ts
@@ -17,6 +17,14 @@ export module ui { @@ -17,6 +17,14 @@ export module ui {
17 public btnShowInterAd:Laya.Button; 17 public btnShowInterAd:Laya.Button;
18 public btnRewardAd:Laya.Button; 18 public btnRewardAd:Laya.Button;
19 public btnRedpacket:Laya.Button; 19 public btnRedpacket:Laya.Button;
  20 + public btnPreNative:Laya.Button;
  21 + public btnPreFull:Laya.Button;
  22 + public btnPreInsert:Laya.Button;
  23 + public btnPreVideo:Laya.Button;
  24 + public btnCloseNative:Laya.Button;
  25 + public btnCloseBanner:Laya.Button;
  26 + public btnMinWithDrawal:Laya.Button;
  27 + public minWithDrawalLab:Laya.Label;
20 public NativeAD:View; 28 public NativeAD:View;
21 constructor(){ super()} 29 constructor(){ super()}
22 createChildren():void { 30 createChildren():void {