difenduandada
2024-12-31 34abe6963b344c882358274957f4b992456fee40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/ladder/view/ladder_log_window.js';
                    var __require = nodeEnv ? function (request) {
                        return cc.require(request);
                    } : function (request) {
                        return __quick_compile_project__.require(request, __filename);
                    };
                    function __define (exports, require, module) {
                        if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
cc._RF.push(module, '47272aCneFEl4gtkzbpdD9W', 'ladder_log_window');
// Scripts/mod/ladder/view/ladder_log_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     天梯战报
// <br/>Create: 2019-07-24 16:56:10
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var CommonScrollView = require("common_scrollview");
 
var LadderController = require("ladder_controller");
 
var LadderGodLogItem = require("ladder_god_log_item");
 
var LadderMyLogItem = require("ladder_my_log_item");
 
var RoleController = require("role_controller");
 
var ChatConst = require("chat_const");
 
var LadderEvent = require("ladder_event");
 
var Ladder_logWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("ladder", "ladder_log_window");
    this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
 
    this.win_type = WinType.Big; //是否是全屏窗体  WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initConfig: function initConfig() {
    this.tab_list = {};
    this.color = new cc.Color(0xf5, 0xe0, 0xb9, 0xff);
    this.color_1 = new cc.Color(245, 224, 185, 255);
    this.color_2 = new cc.Color(105, 55, 5, 255);
    this.ctrl = LadderController.getInstance();
    this.model = this.ctrl.getModel();
  },
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    this.background = this.seekChild("background");
    this.background.scale = FIT_SCALE;
    var container = this.seekChild("container");
    var win_title = this.seekChild("win_title");
    win_title.string = Utils.TI18N("战 报");
    this.title_bg = this.seekChild("title_bg");
    var enemy_title = this.seekChild(this.title_bg, "title_bg", cc.Label);
    enemy_title.string = Utils.TI18N("对手");
    var more_title = this.seekChild(this.title_bg, "more_title", cc.Label);
    more_title.string = Utils.TI18N("详细");
    this.share_panel = this.seekChild("share_panel");
    this.share_panel.active = false;
    var share_bg = this.seekChild("share_bg");
    this.share_bg = share_bg;
    this.btn_guild = this.seekChild(share_bg, "btn_guild");
    this.btn_world = this.seekChild(share_bg, "btn_world");
    this.btn_cross = this.seekChild(share_bg, "btn_cross");
    var guild_label = this.seekChild(share_bg, "guild_label", cc.Label);
    guild_label.string = Utils.TI18N("公会频道");
    var world_label = this.seekChild(share_bg, "world_label", cc.Label);
    world_label.string = Utils.TI18N("世界频道");
    var cross_label = this.seekChild(share_bg, "cross_label", cc.Label);
    cross_label.string = Utils.TI18N("跨服频道");
    var tab_container = this.seekChild(container, "tab_container");
 
    for (var i = 1; i <= 2; i++) {
      var object = {};
      var tab_btn = this.seekChild(tab_container, "tab_btn_" + i);
 
      if (tab_btn) {
        var title = tab_btn.getChildByName("title").getComponent(cc.Label);
 
        if (i == 1) {
          title.string = Utils.TI18N("我的记录");
        } else if (i == 2) {
          title.string = Utils.TI18N("大神风采");
        }
 
        title.node.color = this.color;
        var tips = tab_btn.getChildByName("tips");
        object.tab_btn = tab_btn;
        object.tab_btn_sp = tab_btn.getComponent(cc.Sprite);
        object.label = title;
        object.index = i;
        object.tips = tips;
        this.tab_list[i] = object;
      }
    }
 
    this.close_btn = this.seekChild("close_btn");
    this.confirm_btn = this.seekChild("confirm_btn");
    this.no_log_label = this.seekChild("no_log_label", cc.Label);
    this.no_log_image = this.seekChild("no_log_image");
    this.my_log_panel = this.seekChild("my_log_panel");
    this.god_log_panel = this.seekChild("god_log_panel");
    this.no_log_label.string = Utils.TI18N("暂无战报");
    var bgSize = this.my_log_panel.getContentSize();
    var tab_size = cc.size(bgSize.width, bgSize.height - 8);
    var setting = {
      item_class: LadderMyLogItem,
      // 单元类
      start_x: 0,
      // 第一个单元的X起点
      space_x: 0,
      // x方向的间隔
      start_y: -5,
      // 第一个单元的Y起点
      space_y: -5,
      // y方向的间隔
      item_width: 612,
      // 单元的尺寸width
      item_height: 135,
      // 单元的尺寸height
      row: 0,
      // 行数,作用于水平滚动类型
      col: 1,
      // 列数,作用于垂直滚动类型
      need_dynamic: true
    };
    this.my_log_scrollview = new CommonScrollView();
    this.my_log_scrollview.createScroll(this.my_log_panel, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, tab_size, setting, cc.v2(0.5, 0.5));
    var bgSize = this.my_log_panel.getContentSize();
    var tab_size = cc.size(bgSize.width, bgSize.height - 8);
    var setting = {
      item_class: LadderGodLogItem,
      // 单元类
      start_x: 0,
      // 第一个单元的X起点
      space_x: 0,
      // x方向的间隔
      start_y: -5,
      // 第一个单元的Y起点
      space_y: -5,
      // y方向的间隔
      item_width: 612,
      // 单元的尺寸width
      item_height: 153,
      // 单元的尺寸height
      row: 0,
      // 行数,作用于水平滚动类型
      col: 1,
      // 列数,作用于垂直滚动类型
      need_dynamic: true
    };
    this.god_log_scrollview = new CommonScrollView();
    this.god_log_scrollview.createScroll(this.my_log_panel, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, tab_size, setting, cc.v2(0.5, 0.5));
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    var _this = this;
 
    Utils.onTouchEnd(this.close_btn, function () {
      this.ctrl.openLadderLogWindow(false);
    }.bind(this), 2);
    Utils.onTouchEnd(this.background, function () {
      this.ctrl.openLadderLogWindow(false);
    }.bind(this), 2);
    Utils.onTouchEnd(this.share_panel, function () {
      this.share_panel.active = false;
    }.bind(this), 1);
    Utils.onTouchEnd(this.btn_world, function () {
      if (this.replay_id != null && this.def_name && this.share_srv_id != null) {
        this.ctrl.requestShareVideo(this.replay_id, this.share_srv_id, ChatConst.Channel.World, this.def_name);
      }
 
      this.share_panel.active = false;
    }.bind(this), 1);
    Utils.onTouchEnd(this.btn_guild, function () {
      var role_vo = RoleController.getInstance().getRoleVo();
 
      if (role_vo && role_vo.gid != 0 && role_vo.gsrv_id != "") {
        if (this.replay_id != null && this.def_name && this.share_srv_id != null) {
          this.ctrl.requestShareVideo(this.replay_id, this.share_srv_id, ChatConst.Channel.Gang, this.def_name);
        }
      } else {
        message(Utils.TI18N("暂无公会"));
      }
    }.bind(this), 1);
    Utils.onTouchEnd(this.btn_cross, function () {
      if (this.replay_id != null && this.def_name && this.share_srv_id != null) {
        this.ctrl.requestShareVideo(this.replay_id, this.share_srv_id, ChatConst.Channel.Gang, this.def_name);
      }
 
      this.share_panel.active = false;
    }.bind(this), 1);
 
    var _loop = function _loop(k) {
      var object = _this.tab_list[k];
 
      if (object.tab_btn) {
        object.tab_btn.on(cc.Node.EventType.TOUCH_END, function () {
          Utils.playButtonSound(1);
          this.changeSelectedTab(object.index);
        }, _this);
      }
    };
 
    for (var k in this.tab_list) {
      _loop(k);
    }
 
    this.addGlobalEvent(LadderEvent.UpdateLadderMyLogData, function (data) {
      this.my_log_replay_srv_id = data.replay_srv_id;
 
      if (data.log_list) {
        this.setMyLogData(data.log_list);
      }
    }, this);
    this.addGlobalEvent(LadderEvent.UpdateLadderGodLogData, function (data) {
      this.god_log_replay_srv_id = data.replay_srv_id;
 
      if (data.log_list) {
        this.setGodLogData(data.log_list);
      }
    }, this);
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd(index) {
    index = index || 1;
    this.changeSelectedTab(index);
  },
  changeSelectedTab: function changeSelectedTab(index) {
    if (this.tab_object != null && this.tab_object.index == index) return;
 
    if (this.tab_object) {
      // this.tab_object.tab_btn
      this.loadRes(PathTool.getUIIconPath("common", "common_2023"), function (sp) {
        this.tab_object.tab_btn_sp.spriteFrame = sp;
      }.bind(this));
      this.tab_object.label.node.color = this.color_1;
      this.tab_object = null;
    }
 
    this.tab_object = this.tab_list[index];
 
    if (this.tab_object) {
      this.loadRes(PathTool.getUIIconPath("common", "common_2021"), function (sp) {
        this.tab_object.tab_btn_sp.spriteFrame = sp;
      }.bind(this));
      this.tab_object.label.node.color = this.color_2;
    }
 
    this.__ctor__.title_bg.active = index == 1;
    this.my_log_scrollview.setRootVisible(index == 1);
    this.god_log_scrollview.setRootVisible(index == 2);
 
    if ((index == 1 && this.myLogData && Utils.next(this.myLogData)) != null || index == 2 && this.godLogData && Utils.next(this.godLogData) != null) {
      this.no_log_image.active = false;
      this.no_log_label.node.active = false;
    } else {
      this.no_log_image.active = true;
      this.no_log_label.node.active = true;
    }
 
    if (index == 1 && !this.init_my_log) {
      this.ctrl.requestMyLogData();
      this.init_my_log = true;
    } else if (index == 2 && !this.init_god_log) {
      this.ctrl.requestGodLogData();
      this.init_god_log = true;
    }
  },
  setMyLogData: function setMyLogData(myLogData) {
    if (this.tab_object == null || this.tab_object.index != 1) return;
    this.myLogData = myLogData;
 
    if (myLogData && Utils.next(myLogData) != null) {
      this.my_log_scrollview.setRootVisible(true);
      this.no_log_image.active = false;
      this.no_log_label.node.active = false;
      var extend = {};
 
      extend.callback = function (world_pos, replay_id, name, srv_id) {
        this.replay_id = replay_id;
        this.def_name = name;
        this.share_srv_id = srv_id;
        var node_pos = this.share_panel.convertToNodeSpaceAR(world_pos);
 
        if (node_pos) {
          this.share_bg.setPosition(cc.v2(node_pos.x - 32, node_pos.y + 70));
          this.share_panel.active = true;
        }
      }.bind(this);
 
      extend.replay_srv_id = this.my_log_replay_srv_id;
      this.my_log_scrollview.setData(myLogData, null, extend);
    } else {
      this.my_log_scrollview.setRootVisible(false);
      this.no_log_image.active = true;
      this.no_log_label.active = true;
    }
  },
  setGodLogData: function setGodLogData(godLogData) {
    if (this.tab_object == null || this.tab_object.index != 2) return;
    this.godLogData = godLogData;
 
    if (godLogData && Utils.next(godLogData) != null) {
      this.god_log_scrollview.setRootVisible(true);
      this.no_log_image.active = false;
      this.no_log_label.active = false;
      this.god_log_scrollview.setData(godLogData, null, this.god_log_replay_srv_id);
    } else {
      this.god_log_scrollview.setRootVisible(false);
      this.no_log_image.active = true;
      this.no_log_label.active = true;
    }
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    this.model.updateLadderRedStatus(LadderConst.RedType.BattleLog, false);
 
    if (this.my_log_scrollview) {
      this.my_log_scrollview.deleteMe();
      this.my_log_scrollview = null;
    }
 
    if (this.god_log_scrollview) {
      this.god_log_scrollview.deleteMe();
      this.god_log_scrollview = null;
    }
 
    this.ctrl.openLadderLogWindow(false);
  }
});
 
cc._RF.pop();
                    }
                    if (nodeEnv) {
                        __define(__module.exports, __require, __module);
                    }
                    else {
                        __quick_compile_project__.registerModuleFunc(__filename, function () {
                            __define(__module.exports, __require, __module);
                        });
                    }
                })();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxsYWRkZXJcXHZpZXdcXGxhZGRlcl9sb2dfd2luZG93LmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIkNvbW1vblNjcm9sbFZpZXciLCJMYWRkZXJDb250cm9sbGVyIiwiTGFkZGVyR29kTG9nSXRlbSIsIkxhZGRlck15TG9nSXRlbSIsIlJvbGVDb250cm9sbGVyIiwiQ2hhdENvbnN0IiwiTGFkZGVyRXZlbnQiLCJMYWRkZXJfbG9nV2luZG93IiwiY2MiLCJDbGFzcyIsIkJhc2VWaWV3IiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwidmlld1RhZyIsIlNDRU5FX1RBRyIsImRpYWxvZ3VlIiwid2luX3R5cGUiLCJXaW5UeXBlIiwiQmlnIiwiaW5pdENvbmZpZyIsInRhYl9saXN0IiwiY29sb3IiLCJDb2xvciIsImNvbG9yXzEiLCJjb2xvcl8yIiwiY3RybCIsImdldEluc3RhbmNlIiwibW9kZWwiLCJnZXRNb2RlbCIsIm9wZW5DYWxsQmFjayIsImJhY2tncm91bmQiLCJzZWVrQ2hpbGQiLCJzY2FsZSIsIkZJVF9TQ0FMRSIsImNvbnRhaW5lciIsIndpbl90aXRsZSIsInN0cmluZyIsIlV0aWxzIiwiVEkxOE4iLCJ0aXRsZV9iZyIsImVuZW15X3RpdGxlIiwiTGFiZWwiLCJtb3JlX3RpdGxlIiwic2hhcmVfcGFuZWwiLCJhY3RpdmUiLCJzaGFyZV9iZyIsImJ0bl9ndWlsZCIsImJ0bl93b3JsZCIsImJ0bl9jcm9zcyIsImd1aWxkX2xhYmVsIiwid29ybGRfbGFiZWwiLCJjcm9zc19sYWJlbCIsInRhYl9jb250YWluZXIiLCJpIiwib2JqZWN0IiwidGFiX2J0biIsInRpdGxlIiwiZ2V0Q2hpbGRCeU5hbWUiLCJnZXRDb21wb25lbnQiLCJub2RlIiwidGlwcyIsInRhYl9idG5fc3AiLCJTcHJpdGUiLCJsYWJlbCIsImluZGV4IiwiY2xvc2VfYnRuIiwiY29uZmlybV9idG4iLCJub19sb2dfbGFiZWwiLCJub19sb2dfaW1hZ2UiLCJteV9sb2dfcGFuZWwiLCJnb2RfbG9nX3BhbmVsIiwiYmdTaXplIiwiZ2V0Q29udGVudFNpemUiLCJ0YWJfc2l6ZSIsInNpemUiLCJ3aWR0aCIsImhlaWdodCIsInNldHRpbmciLCJpdGVtX2NsYXNzIiwic3RhcnRfeCIsInNwYWNlX3giLCJzdGFydF95Iiwic3BhY2VfeSIsIml0ZW1fd2lkdGgiLCJpdGVtX2hlaWdodCIsInJvdyIsImNvbCIsIm5lZWRfZHluYW1pYyIsIm15X2xvZ19zY3JvbGx2aWV3IiwiY3JlYXRlU2Nyb2xsIiwidjIiLCJTY3JvbGxWaWV3RGlyIiwidmVydGljYWwiLCJTY3JvbGxWaWV3U3RhcnRQb3MiLCJ0b3AiLCJnb2RfbG9nX3Njcm9sbHZpZXciLCJyZWdpc3RlckV2ZW50Iiwib25Ub3VjaEVuZCIsIm9wZW5MYWRkZXJMb2dXaW5kb3ciLCJiaW5kIiwicmVwbGF5X2lkIiwiZGVmX25hbWUiLCJzaGFyZV9zcnZfaWQiLCJyZXF1ZXN0U2hhcmVWaWRlbyIsIkNoYW5uZWwiLCJXb3JsZCIsInJvbGVfdm8iLCJnZXRSb2xlVm8iLCJnaWQiLCJnc3J2X2lkIiwiR2FuZyIsIm1lc3NhZ2UiLCJrIiwib24iLCJOb2RlIiwiRXZlbnRUeXBlIiwiVE9VQ0hfRU5EIiwicGxheUJ1dHRvblNvdW5kIiwiY2hhbmdlU2VsZWN0ZWRUYWIiLCJhZGRHbG9iYWxFdmVudCIsIlVwZGF0ZUxhZGRlck15TG9nRGF0YSIsImRhdGEiLCJteV9sb2dfcmVwbGF5X3Nydl9pZCIsInJlcGxheV9zcnZfaWQiLCJsb2dfbGlzdCIsInNldE15TG9nRGF0YSIsIlVwZGF0ZUxhZGRlckdvZExvZ0RhdGEiLCJnb2RfbG9nX3JlcGxheV9zcnZfaWQiLCJzZXRHb2RMb2dEYXRhIiwib3BlblJvb3RXbmQiLCJ0YWJfb2JqZWN0IiwibG9hZFJlcyIsImdldFVJSWNvblBhdGgiLCJzcCIsInNwcml0ZUZyYW1lIiwiX19jdG9yX18iLCJzZXRSb290VmlzaWJsZSIsIm15TG9nRGF0YSIsIm5leHQiLCJnb2RMb2dEYXRhIiwiaW5pdF9teV9sb2ciLCJyZXF1ZXN0TXlMb2dEYXRhIiwiaW5pdF9nb2RfbG9nIiwicmVxdWVzdEdvZExvZ0RhdGEiLCJleHRlbmQiLCJjYWxsYmFjayIsIndvcmxkX3BvcyIsIm5hbWUiLCJzcnZfaWQiLCJub2RlX3BvcyIsImNvbnZlcnRUb05vZGVTcGFjZUFSIiwic2V0UG9zaXRpb24iLCJ4IiwieSIsInNldERhdGEiLCJjbG9zZUNhbGxCYWNrIiwidXBkYXRlTGFkZGVyUmVkU3RhdHVzIiwiTGFkZGVyQ29uc3QiLCJSZWRUeXBlIiwiQmF0dGxlTG9nIiwiZGVsZXRlTWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxnQkFBZ0IsR0FBR0QsT0FBTyxDQUFDLG1CQUFELENBQTlCOztBQUNBLElBQUlFLGdCQUFnQixHQUFHRixPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUcsZ0JBQWdCLEdBQUdILE9BQU8sQ0FBQyxxQkFBRCxDQUE5Qjs7QUFDQSxJQUFJSSxlQUFlLEdBQUdKLE9BQU8sQ0FBQyxvQkFBRCxDQUE3Qjs7QUFDQSxJQUFJSyxjQUFjLEdBQUdMLE9BQU8sQ0FBQyxpQkFBRCxDQUE1Qjs7QUFDQSxJQUFJTSxTQUFTLEdBQUdOLE9BQU8sQ0FBQyxZQUFELENBQXZCOztBQUNBLElBQUlPLFdBQVcsR0FBR1AsT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FBRUEsSUFBSVEsZ0JBQWdCLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSCxDQUFTO0FBQzVCLGFBQVNDLFFBRG1CO0FBRTVCQyxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxTQUFLQyxVQUFMLEdBQWtCZCxRQUFRLENBQUNlLGFBQVQsQ0FBdUIsUUFBdkIsRUFBaUMsbUJBQWpDLENBQWxCO0FBQ0EsU0FBS0MsT0FBTCxHQUFl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OztBQUNBLFFBQUlBLFVBQVUsSUFBSXRHLEtBQUssQ0FBQ3FHLElBQU4sQ0FBV0MsVUFBWCxLQUEwQixJQUE1QyxFQUFrRDtBQUM5QyxXQUFLNUMsa0JBQUwsQ0FBd0J5QyxjQUF4QixDQUF1QyxJQUF2QztBQUNBLFdBQUtwRSxZQUFMLENBQWtCeEIsTUFBbEIsR0FBMkIsS0FBM0I7QUFDQSxXQUFLdUIsWUFBTCxDQUFrQnZCLE1BQWxCLEdBQTJCLEtBQTNCO0FBQ0EsV0FBS21ELGtCQUFMLENBQXdCMkQsT0FBeEIsQ0FBZ0NmLFVBQWhDLEVBQTRDLElBQTVDLEVBQWtELEtBQUtaLHFCQUF2RDtBQUNILEtBTEQsTUFLTztBQUNILFdBQUtoQyxrQkFBTCxDQUF3QnlDLGNBQXhCLENBQXVDLEtBQXZDO0FBQ0EsV0FBS3BFLFlBQUwsQ0FBa0J4QixNQUFsQixHQUEyQixJQUEzQjtBQUNBLFdBQUt1QixZQUFMLENBQWtCdkIsTUFBbEIsR0FBMkIsSUFBM0I7QUFDSDtBQUNKLEdBdlEyQjtBQTJRNUI7QUFDQStHLEVBQUFBLGFBQWEsRUFBRSx5QkFBWTtBQUN2QixTQUFLaEksS0FBTCxDQUFXaUkscUJBQVgsQ0FBaUNDLFdBQVcsQ0FBQ0MsT0FBWixDQUFvQkMsU0FBckQsRUFBZ0UsS0FBaEU7O0FBQ0EsUUFBSSxLQUFLdkUsaUJBQVQsRUFBNEI7QUFDeEIsV0FBS0EsaUJBQUwsQ0FBdUJ3RSxRQUF2QjtBQUNBLFdBQUt4RSxpQkFBTCxHQUF5QixJQUF6QjtBQUNIOztBQUNELFFBQUksS0FBS08sa0JBQVQsRUFBNkI7QUFDekIsV0FBS0Esa0JBQUwsQ0FBd0JpRSxRQUF4QjtBQUNBLFdBQUtqRSxrQkFBTCxHQUEwQixJQUExQjtBQUNIOztBQUNELFNBQUt0RSxJQUFMLENBQVV5RSxtQkFBVixDQUE4QixLQUE5QjtBQUNIO0FBdlIyQixDQUFULENBQXZCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg5aSp5qKv5oiY5oqlXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wNy0yNCAxNjo1NjoxMFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKTtcbnZhciBDb21tb25TY3JvbGxWaWV3ID0gcmVxdWlyZShcImNvbW1vbl9zY3JvbGx2aWV3XCIpO1xudmFyIExhZGRlckNvbnRyb2xsZXIgPSByZXF1aXJlKFwibGFkZGVyX2NvbnRyb2xsZXJcIik7XG52YXIgTGFkZGVyR29kTG9nSXRlbSA9IHJlcXVpcmUoXCJsYWRkZXJfZ29kX2xvZ19pdGVtXCIpO1xudmFyIExhZGRlck15TG9nSXRlbSA9IHJlcXVpcmUoXCJsYWRkZXJfbXlfbG9nX2l0ZW1cIik7XG52YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpO1xudmFyIENoYXRDb25zdCA9IHJlcXVpcmUoXCJjaGF0X2NvbnN0XCIpO1xudmFyIExhZGRlckV2ZW50ID0gcmVxdWlyZShcImxhZGRlcl9ldmVudFwiKTtcblxudmFyIExhZGRlcl9sb2dXaW5kb3cgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZVZpZXcsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwibGFkZGVyXCIsIFwibGFkZGVyX2xvZ193aW5kb3dcIik7XG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy5kaWFsb2d1ZTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLkJpZzsgICAgICAgICAgICAgICAvL+aYr+WQpuaYr+WFqOWxj+eql+S9kyAgV2luVHlwZS5GdWxsLCBXaW5UeXBlLkJpZywgV2luVHlwZS5NaW5pLCBXaW5UeXBlLlRpcHNcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW5LiA5Lqb6YWN572u5pWw5o2uLOWPr+S7peeUqOS6juWjsOaYjuS4gOS6m+WPmOmHj+S5i+exu+eahFxuICAgIGluaXRDb25maWc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy50YWJfbGlzdCA9IHt9O1xuICAgICAgICB0aGlzLmNvbG9yID0gbmV3IGNjLkNvbG9yKDB4ZjUsIDB4ZTAsIDB4YjksIDB4ZmYpO1xuICAgICAgICB0aGlzLmNvbG9yXzEgPSBuZXcgY2MuQ29sb3IoMjQ1LCAyMjQsIDE4NSwgMjU1KTtcbiAgICAgICAgdGhpcy5jb2xvcl8yID0gbmV3IGNjLkNvbG9yKDEwNSwgNTUsIDUsIDI1NSk7XG4gICAgICAgIHRoaXMuY3RybCA9IExhZGRlckNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuY3RybC5nZXRNb2RlbCgpO1xuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI7nmoTlm57osIMs5Y+v5Lul5Zyo6L+Z6YeM5o2V6I6355u45YWz6IqC54K55oiW6ICF57uE5Lu2XG4gICAgb3BlbkNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZCA9IHRoaXMuc2Vla0NoaWxkKFwiYmFja2dyb3VuZFwiKTtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLnNjYWxlID0gRklUX1NDQUxFO1xuXG4gICAgICAgIGxldCBjb250YWluZXIgPSB0aGlzLnNlZWtDaGlsZChcImNvbnRhaW5lclwiKTtcbiAgICAgICAgbGV0IHdpbl90aXRsZSA9IHRoaXMuc2Vla0NoaWxkKFwid2luX3RpdGxlXCIpO1xuICAgICAgICB3aW5fdGl0bGUuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmiJgg5oqlXCIpO1xuXG4gICAgICAgIHRoaXMudGl0bGVfYmcgPSB0aGlzLnNlZWtDaGlsZChcInRpdGxlX2JnXCIpO1xuICAgICAgICBsZXQgZW5lbXlfdGl0bGUgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLnRpdGxlX2JnLCBcInRpdGxlX2JnXCIsIGNjLkxhYmVsKTtcbiAgICAgICAgZW5lbXlfdGl0bGUuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLlr7nmiYtcIik7XG4gICAgICAgIGxldCBtb3JlX3RpdGxlID0gdGhpcy5zZWVrQ2hpbGQodGhpcy50aXRsZV9iZywgXCJtb3JlX3RpdGxlXCIsIGNjLkxhYmVsKTtcbiAgICAgICAgbW9yZV90aXRsZS5zdHJpbmcgPSBVdGlscy5USTE4TihcIuivpue7hlwiKTtcblxuICAgICAgICB0aGlzLnNoYXJlX3BhbmVsID0gdGhpcy5zZWVrQ2hpbGQoXCJzaGFyZV9wYW5lbFwiKTtcbiAgICAgICAgdGhpcy5zaGFyZV9wYW5lbC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgbGV0IHNoYXJlX2JnID0gdGhpcy5zZWVrQ2hpbGQoXCJzaGFyZV9iZ1wiKTtcbiAgICAgICAgdGhpcy5zaGFyZV9iZyA9IHNoYXJlX2JnO1xuICAgICAgICB0aGlzLmJ0bl9ndWlsZCA9IHRoaXMuc2Vla0NoaWxkKHNoYXJlX2JnLCBcImJ0bl9ndWlsZFwiKTtcbiAgICAgICAgdGhpcy5idG5fd29ybGQgPSB0aGlzLnNlZWtDaGlsZChzaGFyZV9iZywgXCJidG5fd29ybGRcIik7XG4gICAgICAgIHRoaXMuYnRuX2Nyb3NzID0gdGhpcy5zZWVrQ2hpbGQoc2hhcmVfYmcsIFwiYnRuX2Nyb3NzXCIpO1xuICAgICAgICBsZXQgZ3VpbGRfbGFiZWwgPSB0aGlzLnNlZWtDaGlsZChzaGFyZV9iZywgXCJndWlsZF9sYWJlbFwiLCBjYy5MYWJlbCk7XG4gICAgICAgIGd1aWxkX2xhYmVsLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5YWs5Lya6aKR6YGTXCIpO1xuICAgICAgICBsZXQgd29ybGRfbGFiZWwgPSB0aGlzLnNlZWtDaGlsZChzaGFyZV9iZywgXCJ3b3JsZF9sYWJlbFwiLCBjYy5MYWJlbCk7XG4gICAgICAgIHdvcmxkX2xhYmVsLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5LiW55WM6aKR6YGTXCIpO1xuICAgICAgICBsZXQgY3Jvc3NfbGFiZWwgPSB0aGlzLnNlZWtDaGlsZChzaGFyZV9iZywgXCJjcm9zc19sYWJlbFwiLCBjYy5MYWJlbCk7XG4gICAgICAgIGNyb3NzX2xhYmVsLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi6Leo5pyN6aKR6YGTXCIpO1xuXG4gICAgICAgIGxldCB0YWJfY29udGFpbmVyID0gdGhpcy5zZWVrQ2hpbGQoY29udGFpbmVyLCBcInRhYl9jb250YWluZXJcIik7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDI7IGkrKykge1xuICAgICAgICAgICAgbGV0IG9iamVjdCA9IHt9O1xuICAgICAgICAgICAgbGV0IHRhYl9idG4gPSB0aGlzLnNlZWtDaGlsZCh0YWJfY29udGFpbmVyLCBcInRhYl9idG5fXCIgKyBpKTtcbiAgICAgICAgICAgIGlmICh0YWJfYnRuKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gdGFiX2J0bi5nZXRDaGlsZEJ5TmFtZShcInRpdGxlXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZS5zdHJpbmcgPSBVdGlscy5USTE4TihcIuaIkeeahOiusOW9lVwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT0gMikge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZS5zdHJpbmcgPSBVdGlscy5USTE4TihcIuWkp+elnumjjumHh1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGl0bGUubm9kZS5jb2xvciA9IHRoaXMuY29sb3I7XG4gICAgICAgICAgICAgICAgbGV0IHRpcHMgPSB0YWJfYnRuLmdldENoaWxkQnlOYW1lKFwidGlwc1wiKTtcbiAgICAgICAgICAgICAgICBvYmplY3QudGFiX2J0biA9IHRhYl9idG47XG4gICAgICAgICAgICAgICAgb2JqZWN0LnRhYl9idG5fc3AgPSB0YWJfYnRuLmdldENvbXBvbmVudChjYy5TcHJpdGUpO1xuICAgICAgICAgICAgICAgIG9iamVjdC5sYWJlbCA9IHRpdGxlO1xuICAgICAgICAgICAgICAgIG9iamVjdC5pbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgb2JqZWN0LnRpcHMgPSB0aXBzO1xuICAgICAgICAgICAgICAgIHRoaXMudGFiX2xpc3RbaV0gPSBvYmplY3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsb3NlX2J0biA9IHRoaXMuc2Vla0NoaWxkKFwiY2xvc2VfYnRuXCIpO1xuICAgICAgICB0aGlzLmNvbmZpcm1fYnRuID0gdGhpcy5zZWVrQ2hpbGQoXCJjb25maXJtX2J0blwiKTtcbiAgICAgICAgdGhpcy5ub19sb2dfbGFiZWwgPSB0aGlzLnNlZWtDaGlsZChcIm5vX2xvZ19sYWJlbFwiLCBjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMubm9fbG9nX2ltYWdlID0gdGhpcy5zZWVrQ2hpbGQoXCJub19sb2dfaW1hZ2VcIik7XG4gICAgICAgIHRoaXMubXlfbG9nX3BhbmVsID0gdGhpcy5zZWVrQ2hpbGQoXCJteV9sb2dfcGFuZWxcIik7XG4gICAgICAgIHRoaXMuZ29kX2xvZ19wYW5lbCA9IHRoaXMuc2Vla0NoaWxkKFwiZ29kX2xvZ19wYW5lbFwiKTtcbiAgICAgICAgdGhpcy5ub19sb2dfbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmmoLml6DmiJjmiqVcIik7XG5cbiAgICAgICAgdmFyIGJnU2l6ZSA9IHRoaXMubXlfbG9nX3BhbmVsLmdldENvbnRlbnRTaXplKCk7XG4gICAgICAgIHZhciB0YWJfc2l6ZSA9IGNjLnNpemUoYmdTaXplLndpZHRoLCBiZ1NpemUuaGVpZ2h0IC0gOCk7XG4gICAgICAgIHZhciBzZXR0aW5nID0ge1xuICAgICAgICAgICAgaXRlbV9jbGFzczogTGFkZGVyTXlMb2dJdGVtLCAgICAgIC8vIOWNleWFg+exu1xuICAgICAgICAgICAgc3RhcnRfeDogMCwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFjotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3g6IDAsICAgICAgICAgICAgICAgICAgICAvLyB45pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICBzdGFydF95OiAtNSwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3k6IC01LCAgICAgICAgICAgICAgICAgICAvLyB55pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICBpdGVtX3dpZHRoOiA2MTIsICAgICAgICAgICAgICAgLy8g5Y2V5YWD55qE5bC65a+4d2lkdGhcbiAgICAgICAgICAgIGl0ZW1faGVpZ2h0OiAxMzUsICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7hoZWlnaHRcbiAgICAgICAgICAgIHJvdzogMCwgICAgICAgICAgICAgICAgICAgICAgICAvLyDooYzmlbDvvIzkvZznlKjkuo7msLTlubPmu5rliqjnsbvlnotcbiAgICAgICAgICAgIGNvbDogMSwgICAgICAgICAgICAgICAgICAgICAgICAvLyDliJfmlbDvvIzkvZznlKjkuo7lnoLnm7Tmu5rliqjnsbvlnotcbiAgICAgICAgICAgIG5lZWRfZHluYW1pYzogdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubXlfbG9nX3Njcm9sbHZpZXcgPSBuZXcgQ29tbW9uU2Nyb2xsVmlldygpXG4gICAgICAgIHRoaXMubXlfbG9nX3Njcm9sbHZpZXcuY3JlYXRlU2Nyb2xsKHRoaXMubXlfbG9nX3BhbmVsLCBjYy52MigwLCAwKSwgU2Nyb2xsVmlld0Rpci52ZXJ0aWNhbCwgU2Nyb2xsVmlld1N0YXJ0UG9zLnRvcCwgdGFiX3NpemUsIHNldHRpbmcsIGNjLnYyKDAuNSwgMC41KSlcblxuICAgICAgICB2YXIgYmdTaXplID0gdGhpcy5teV9sb2dfcGFuZWwuZ2V0Q29udGVudFNpemUoKTtcbiAgICAgICAgdmFyIHRhYl9zaXplID0gY2Muc2l6ZShiZ1NpemUud2lkdGgsIGJnU2l6ZS5oZWlnaHQgLSA4KTtcbiAgICAgICAgdmFyIHNldHRpbmcgPSB7XG4gICAgICAgICAgICBpdGVtX2NsYXNzOiBMYWRkZXJHb2RMb2dJdGVtLCAgICAgIC8vIOWNleWFg+exu1xuICAgICAgICAgICAgc3RhcnRfeDogMCwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFjotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3g6IDAsICAgICAgICAgICAgICAgICAgICAvLyB45pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICBzdGFydF95OiAtNSwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3k6IC01LCAgICAgICAgICAgICAgICAgICAvLyB55pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICBpdGVtX3dpZHRoOiA2MTIsICAgICAgICAgICAgICAgLy8g5Y2V5YWD55qE5bC65a+4d2lkdGhcbiAgICAgICAgICAgIGl0ZW1faGVpZ2h0OiAxNTMsICAgICAgICAgICAgICAvLyDljZXlhYPnmoTlsLrlr7hoZWlnaHRcbiAgICAgICAgICAgIHJvdzogMCwgICAgICAgICAgICAgICAgICAgICAgICAvLyDooYzmlbDvvIzkvZznlKjkuo7msLTlubPmu5rliqjnsbvlnotcbiAgICAgICAgICAgIGNvbDogMSwgICAgICAgICAgICAgICAgICAgICAgICAvLyDliJfmlbDvvIzkvZznlKjkuo7lnoLnm7Tmu5rliqjnsbvlnotcbiAgICAgICAgICAgIG5lZWRfZHluYW1pYzogdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ29kX2xvZ19zY3JvbGx2aWV3ID0gbmV3IENvbW1vblNjcm9sbFZpZXcoKVxuICAgICAgICB0aGlzLmdvZF9sb2dfc2Nyb2xsdmlldy5jcmVhdGVTY3JvbGwodGhpcy5teV9sb2dfcGFuZWwsIGNjLnYyKDAsIDApLCBTY3JvbGxWaWV3RGlyLnZlcnRpY2FsLCBTY3JvbGxWaWV3U3RhcnRQb3MudG9wLCB0YWJfc2l6ZSwgc2V0dGluZywgY2MudjIoMC41LCAwLjUpKVxuXG4gICAgfSxcblxuICAgIC8vIOazqOWGjOS6i+S7tuebkeWQrOeahOaOpeWPoyzkuI3pnIDopoHmiYvliqjosIPnlKgs5aaC5p6c5piv5L2/55SoZ2NvcmUuR2xvYmFsRXZlbnTnm5HlkKws5Y+v5Lul55u05o6l6LCD55SoYWRkR2xvYmFsRXZlbnRcbiAgICByZWdpc3RlckV2ZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5jbG9zZV9idG4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuTGFkZGVyTG9nV2luZG93KGZhbHNlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAyKVxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuYmFja2dyb3VuZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5MYWRkZXJMb2dXaW5kb3coZmFsc2UpO1xuICAgICAgICB9LmJpbmQodGhpcyksIDIpXG5cbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLnNoYXJlX3BhbmVsLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLnNoYXJlX3BhbmVsLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9LmJpbmQodGhpcyksIDEpXG5cbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLmJ0bl93b3JsZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVwbGF5X2lkICE9IG51bGwgJiYgdGhpcy5kZWZfbmFtZSAmJiB0aGlzLnNoYXJlX3Nydl9pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLnJlcXVlc3RTaGFyZVZpZGVvKHRoaXMucmVwbGF5X2lkLCB0aGlzLnNoYXJlX3Nydl9pZCwgQ2hhdENvbnN0LkNoYW5uZWwuV29ybGQsIHRoaXMuZGVmX25hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zaGFyZV9wYW5lbC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKVxuXG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5idG5fZ3VpbGQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCByb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcbiAgICAgICAgICAgIGlmIChyb2xlX3ZvICYmIHJvbGVfdm8uZ2lkICE9IDAgJiYgcm9sZV92by5nc3J2X2lkICE9IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXBsYXlfaWQgIT0gbnVsbCAmJiB0aGlzLmRlZl9uYW1lICYmIHRoaXMuc2hhcmVfc3J2X2lkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHJsLnJlcXVlc3RTaGFyZVZpZGVvKHRoaXMucmVwbGF5X2lkLCB0aGlzLnNoYXJlX3Nydl9pZCwgQ2hhdENvbnN0LkNoYW5uZWwuR2FuZywgdGhpcy5kZWZfbmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlKFV0aWxzLlRJMThOKFwi5pqC5peg5YWs5LyaXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKVxuXG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5idG5fY3Jvc3MsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcGxheV9pZCAhPSBudWxsICYmIHRoaXMuZGVmX25hbWUgJiYgdGhpcy5zaGFyZV9zcnZfaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3RybC5yZXF1ZXN0U2hhcmVWaWRlbyh0aGlzLnJlcGxheV9pZCwgdGhpcy5zaGFyZV9zcnZfaWQsIENoYXRDb25zdC5DaGFubmVsLkdhbmcsIHRoaXMuZGVmX25hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zaGFyZV9wYW5lbC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKVxuXG4gICAgICAgIGZvciAobGV0IGsgaW4gdGhpcy50YWJfbGlzdCkge1xuICAgICAgICAgICAgbGV0IG9iamVjdCA9IHRoaXMudGFiX2xpc3Rba107XG4gICAgICAgICAgICBpZiAob2JqZWN0LnRhYl9idG4pIHtcbiAgICAgICAgICAgICAgICBvYmplY3QudGFiX2J0bi5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgVXRpbHMucGxheUJ1dHRvblNvdW5kKDEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVNlbGVjdGVkVGFiKG9iamVjdC5pbmRleCk7XG4gICAgICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWRkR2xvYmFsRXZlbnQoTGFkZGVyRXZlbnQuVXBkYXRlTGFkZGVyTXlMb2dEYXRhLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5teV9sb2dfcmVwbGF5X3Nydl9pZCA9IGRhdGEucmVwbGF5X3Nydl9pZDtcbiAgICAgICAgICAgIGlmIChkYXRhLmxvZ19saXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNeUxvZ0RhdGEoZGF0YS5sb2dfbGlzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMpXG5cbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChMYWRkZXJFdmVudC5VcGRhdGVMYWRkZXJHb2RMb2dEYXRhLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5nb2RfbG9nX3JlcGxheV9zcnZfaWQgPSBkYXRhLnJlcGxheV9zcnZfaWQ7XG4gICAgICAgICAgICBpZiAoZGF0YS5sb2dfbGlzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0R29kTG9nRGF0YShkYXRhLmxvZ19saXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcylcbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwgyzkuZ/lsLHmmK/kuIDkuKrnqpfkvZPnmoTmraPlvI/lhaXlj6Ms5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb3BlblJvb3RXbmQ6IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICBpbmRleCA9IGluZGV4IHx8IDE7XG4gICAgICAgIHRoaXMuY2hhbmdlU2VsZWN0ZWRUYWIoaW5kZXgpO1xuICAgIH0sXG5cbiAgICBjaGFuZ2VTZWxlY3RlZFRhYjogZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLnRhYl9vYmplY3QgIT0gbnVsbCAmJiB0aGlzLnRhYl9vYmplY3QuaW5kZXggPT0gaW5kZXgpIHJldHVyblxuICAgICAgICBpZiAodGhpcy50YWJfb2JqZWN0KSB7XG4gICAgICAgICAgICAvLyB0aGlzLnRhYl9vYmplY3QudGFiX2J0blxuICAgICAgICAgICAgdGhpcy5sb2FkUmVzKFBhdGhUb29sLmdldFVJSWNvblBhdGgoXCJjb21tb25cIiwgXCJjb21tb25fMjAyM1wiKSwgZnVuY3Rpb24gKHNwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJfb2JqZWN0LnRhYl9idG5fc3Auc3ByaXRlRnJhbWUgPSBzcDtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgICAgIHRoaXMudGFiX29iamVjdC5sYWJlbC5ub2RlLmNvbG9yID0gdGhpcy5jb2xvcl8xO1xuICAgICAgICAgICAgdGhpcy50YWJfb2JqZWN0ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGFiX29iamVjdCA9IHRoaXMudGFiX2xpc3RbaW5kZXhdO1xuICAgICAgICBpZiAodGhpcy50YWJfb2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImNvbW1vblwiLCBcImNvbW1vbl8yMDIxXCIpLCBmdW5jdGlvbiAoc3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYl9vYmplY3QudGFiX2J0bl9zcC5zcHJpdGVGcmFtZSA9IHNwO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICAgICAgdGhpcy50YWJfb2JqZWN0LmxhYmVsLm5vZGUuY29sb3IgPSB0aGlzLmNvbG9yXzI7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9fY3Rvcl9fLnRpdGxlX2JnLmFjdGl2ZSA9IGluZGV4ID09IDE7XG4gICAgICAgIHRoaXMubXlfbG9nX3Njcm9sbHZpZXcuc2V0Um9vdFZpc2libGUoaW5kZXggPT0gMSk7XG4gICAgICAgIHRoaXMuZ29kX2xvZ19zY3JvbGx2aWV3LnNldFJvb3RWaXNpYmxlKGluZGV4ID09IDIpO1xuXG4gICAgICAgIGlmICgoaW5kZXggPT0gMSAmJiB0aGlzLm15TG9nRGF0YSAmJiBVdGlscy5uZXh0KHRoaXMubXlMb2dEYXRhKSkgIT0gbnVsbCB8fCAoaW5kZXggPT0gMiAmJiB0aGlzLmdvZExvZ0RhdGEgJiYgVXRpbHMubmV4dCh0aGlzLmdvZExvZ0RhdGEpICE9IG51bGwpKSB7XG4gICAgICAgICAgICB0aGlzLm5vX2xvZ19pbWFnZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubm9fbG9nX2xhYmVsLm5vZGUuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5vX2xvZ19pbWFnZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ub19sb2dfbGFiZWwubm9kZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluZGV4ID09IDEgJiYgIXRoaXMuaW5pdF9teV9sb2cpIHtcbiAgICAgICAgICAgIHRoaXMuY3RybC5yZXF1ZXN0TXlMb2dEYXRhKCk7XG4gICAgICAgICAgICB0aGlzLmluaXRfbXlfbG9nID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSAyICYmICF0aGlzLmluaXRfZ29kX2xvZykge1xuICAgICAgICAgICAgdGhpcy5jdHJsLnJlcXVlc3RHb2RMb2dEYXRhKCk7XG4gICAgICAgICAgICB0aGlzLmluaXRfZ29kX2xvZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0TXlMb2dEYXRhOiBmdW5jdGlvbiAobXlMb2dEYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLnRhYl9vYmplY3QgPT0gbnVsbCB8fCB0aGlzLnRhYl9vYmplY3QuaW5kZXggIT0gMSkgcmV0dXJuXG4gICAgICAgIHRoaXMubXlMb2dEYXRhID0gbXlMb2dEYXRhO1xuICAgICAgICBpZiAobXlMb2dEYXRhICYmIFV0aWxzLm5leHQobXlMb2dEYXRhKSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLm15X2xvZ19zY3JvbGx2aWV3LnNldFJvb3RWaXNpYmxlKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5ub19sb2dfaW1hZ2UuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm5vX2xvZ19sYWJlbC5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBsZXQgZXh0ZW5kID0ge307XG4gICAgICAgICAgICBleHRlbmQuY2FsbGJhY2sgPSBmdW5jdGlvbiAod29ybGRfcG9zLCByZXBsYXlfaWQsIG5hbWUsIHNydl9pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVwbGF5X2lkID0gcmVwbGF5X2lkO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmX25hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVfc3J2X2lkID0gc3J2X2lkO1xuICAgICAgICAgICAgICAgIGxldCBub2RlX3BvcyA9IHRoaXMuc2hhcmVfcGFuZWwuY29udmVydFRvTm9kZVNwYWNlQVIod29ybGRfcG9zKTtcbiAgICAgICAgICAgICAgICBpZiAobm9kZV9wb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZV9iZy5zZXRQb3NpdGlvbihjYy52Mihub2RlX3Bvcy54IC0gMzIsIG5vZGVfcG9zLnkgKyA3MCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlX3BhbmVsLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICAgICAgICBleHRlbmQucmVwbGF5X3Nydl9pZCA9IHRoaXMubXlfbG9nX3JlcGxheV9zcnZfaWQ7XG4gICAgICAgICAgICB0aGlzLm15X2xvZ19zY3JvbGx2aWV3LnNldERhdGEobXlMb2dEYXRhLCBudWxsLCBleHRlbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5teV9sb2dfc2Nyb2xsdmlldy5zZXRSb290VmlzaWJsZShmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLm5vX2xvZ19pbWFnZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ub19sb2dfbGFiZWwuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRHb2RMb2dEYXRhOiBmdW5jdGlvbiAoZ29kTG9nRGF0YSkge1xuICAgICAgICBpZiAodGhpcy50YWJfb2JqZWN0ID09IG51bGwgfHwgdGhpcy50YWJfb2JqZWN0LmluZGV4ICE9IDIpIHJldHVyblxuICAgICAgICB0aGlzLmdvZExvZ0RhdGEgPSBnb2RMb2dEYXRhO1xuICAgICAgICBpZiAoZ29kTG9nRGF0YSAmJiBVdGlscy5uZXh0KGdvZExvZ0RhdGEpICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZ29kX2xvZ19zY3JvbGx2aWV3LnNldFJvb3RWaXNpYmxlKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5ub19sb2dfaW1hZ2UuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm5vX2xvZ19sYWJlbC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZ29kX2xvZ19zY3JvbGx2aWV3LnNldERhdGEoZ29kTG9nRGF0YSwgbnVsbCwgdGhpcy5nb2RfbG9nX3JlcGxheV9zcnZfaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nb2RfbG9nX3Njcm9sbHZpZXcuc2V0Um9vdFZpc2libGUoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5ub19sb2dfaW1hZ2UuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubm9fbG9nX2xhYmVsLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9LFxuXG5cblxuICAgIC8vIOWFs+mXreeql+S9k+WbnuiwgyzpnIDopoHlnKjov5nph4zosIPnlKjor6XnqpfkvZPmiYDlsZ5jb250cm9sbGVy55qEY2xvc2Xmlrnms5XmsqHnlKjkuo7nva7nqbror6XnqpfkvZPlrp7kvovlr7nosaFcbiAgICBjbG9zZUNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubW9kZWwudXBkYXRlTGFkZGVyUmVkU3RhdHVzKExhZGRlckNvbnN0LlJlZFR5cGUuQmF0dGxlTG9nLCBmYWxzZSk7XG4gICAgICAgIGlmICh0aGlzLm15X2xvZ19zY3JvbGx2aWV3KSB7XG4gICAgICAgICAgICB0aGlzLm15X2xvZ19zY3JvbGx2aWV3LmRlbGV0ZU1lKCk7XG4gICAgICAgICAgICB0aGlzLm15X2xvZ19zY3JvbGx2aWV3ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5nb2RfbG9nX3Njcm9sbHZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuZ29kX2xvZ19zY3JvbGx2aWV3LmRlbGV0ZU1lKCk7XG4gICAgICAgICAgICB0aGlzLmdvZF9sb2dfc2Nyb2xsdmlldyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHJsLm9wZW5MYWRkZXJMb2dXaW5kb3coZmFsc2UpO1xuICAgIH0sXG59KSJdfQ==