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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/hero/artifact/artifact_chose_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, '82f3fWeEo9AuarN8tS+8+T3', 'artifact_chose_window');
// Scripts/mod/hero/artifact/artifact_chose_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     这里是描述这个窗体的作用的
// <br/>Create: 2019-03-30 15:53:22
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var CommonScrollView = require("common_scrollview");
 
var HeroController = require("hero_controller");
 
var HeroEvent = require("hero_event");
 
var BackpackController = require("backpack_controller");
 
var BackPackConst = require("backpack_const");
 
var PartnerConst = require("partner_const");
 
var GoodsVo = require("goods_vo");
 
var Artifact_choseWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("hero", "artifact_chose_window");
    this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
 
    this.win_type = WinType.Mini; //是否是全屏窗体  WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initConfig: function initConfig() {
    this.chose_num = 0;
    this.ctrl = HeroController.getInstance();
  },
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    this.background = this.seekChild("background");
    this.main_container = this.seekChild("main_container");
    this.chose_lb = this.seekChild("chose_label", cc.Label);
    this.chose_lb.string = cc.js.formatStr(Utils.TI18N("(已选择:%d)"), this.chose_num);
    this.ok_btn = this.seekChild("ok_btn");
    this.close_btn = this.seekChild("close_btn");
    this.empty_bg_sp = this.seekChild("empty_bg", cc.Sprite);
    this.empty_bg_sp.node.active = false;
    var goods_con = this.seekChild(this.main_container, "goods_con");
    var size = goods_con.getContentSize();
    var tab_size = cc.size(size.width, size.height - 10);
    var setting = {
      item_class: "backpack_item",
      // 单元类
      start_x: 15,
      // 第一个单元的X起点
      space_x: 20,
      // x方向的间隔
      start_y: 0,
      // 第一个单元的Y起点
      space_y: 10,
      // y方向的间隔
      item_width: BackPackItem.Width,
      // 单元的尺寸width
      item_height: BackPackItem.Height,
      // 单元的尺寸height
      row: 0,
      // 行数,作用于水平滚动类型
      col: 4,
      // 列数,作用于垂直滚动类型
      need_dynamic: true
    };
    this.item_scrollview = new CommonScrollView();
    this.item_scrollview.createScroll(goods_con, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, tab_size, setting, cc.v2(0.5, 0.5));
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    Utils.onTouchEnd(this.close_btn, function () {
      this.ctrl.openArtifactChoseWindow(false);
    }.bind(this), 2);
    Utils.onTouchEnd(this.background, function () {
      this.ctrl.openArtifactChoseWindow(false);
    }.bind(this), 2);
    Utils.onTouchEnd(this.ok_btn, function () {
      this._onClickBtnOk();
    }.bind(this), 1);
  },
  _onClickBtnOk: function _onClickBtnOk() {
    var is_have_special = false;
    var item_list = [];
 
    for (var k in this.item_data) {
      var v = this.item_data[k];
 
      if (v.showSellStatus != null && v.showSellStatus.select == true) {
        if (v.enchant >= 3) {
          //所选材料中有三星以上的符文
          is_have_special = true;
        }
 
        item_list.push(v.id);
      }
    }
 
    var sureToChoseFunc = function () {
      gcore.GlobalEvent.fire(HeroEvent.Artifact_Chose_Event, item_list);
      this.ctrl.openArtifactChoseWindow(false);
    }.bind(this);
 
    if (is_have_special) {
      var str = Utils.TI18N("您选择了高星级的符文作为升星材料,是否继续?");
 
      var CommonAlert = require("commonalert");
 
      CommonAlert.show(str, Utils.TI18N("确定"), sureToChoseFunc, Utils.TI18N("取消"));
    } else {
      sureToChoseFunc();
    }
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd(data) {
    this.setData(data);
  },
  setData: function setData(data) {
    this.artifact_bid = data.bid; //合成的目标符文bid(0表示暂无)
 
    this.max_num = data.max_num || 0;
    this.chose_list = data.chose_list || [];
    this.chose_num = Utils.getArrLen(this.chose_list);
    this.chose_lb.string = cc.js.formatStr(Utils.TI18N("(已选择:%s/%s)"), this.chose_num, this.max_num);
    var tmp_data = BackpackController.getInstance().getModel().getAllBackPackArray(BackPackConst.item_tab_type.SPECIAL);
    var item_data = [];
 
    for (var i in tmp_data) {
      var vo = new GoodsVo();
      vo.initAttrData(tmp_data[i]);
      item_data.push(vo);
    }
 
    var list = [];
 
    for (var i in item_data) {
      var v = item_data[i];
 
      if (v && v.config && v.config.type == BackPackConst.item_type.ARTIFACTCHIPS) {
        var artifact_cfg = Config.partner_artifact_data.data_artifact_data[v.config.id];
 
        if (artifact_cfg && artifact_cfg.com_artifact != 0) {
          var is_select = false;
 
          for (var k in this.chose_list) {
            if (this.chose_list[k] == v.id) {
              is_select = true;
              break;
            }
          }
 
          v.setGoodsAttr("showSellStatus", {
            status: true,
            select: is_select
          });
          list.push(v);
        }
      }
    }
 
    list.sort(Utils.tableLowerSorter(["quality", "id"]));
    this.item_data = list;
 
    var onClickItemCallBack = function (cell) {
      var item_vo = cell.getData();
      this.ctrl.openArtifactTipsWindow(true, item_vo, PartnerConst.ArtifactTips.normal);
    }.bind(this);
 
    this.item_scrollview.setData(list, onClickItemCallBack, {
      showCheckBox: true,
      checkBoxClickCallBack: this._onCheckBoxCallBack.bind(this),
      adjustCheckBoxPos: cc.v2(BackPackItem.Width - 25, BackPackItem.Height - 25)
    });
 
    if (list.length == 0) {
      this.empty_bg_sp.node.active = true;
      this.loadRes(PathTool.getUIIconPath("bigbg", "bigbg_3"), function (sp) {
        this.empty_bg_sp.spriteFrame = sp;
      }.bind(this));
    } else {
      this.empty_bg_sp.node.active = false;
    }
  },
  _onCheckBoxCallBack: function _onCheckBoxCallBack(flag, itemnode) {
    var item_vo = itemnode.getData();
 
    if (flag == true) {
      if (!this.checkItemIsCanChose(item_vo.config.id)) {
        item_vo.setGoodsAttr("showSellStatus", {
          status: true,
          select: false
        });
        itemnode.setCheckBoxStatus(true, false);
        message(Utils.TI18N("请选择同类型符文"));
        return;
      } else if (this.chose_num >= this.max_num) {
        item_vo.setGoodsAttr("showSellStatus", {
          status: true,
          select: false
        });
        itemnode.setCheckBoxStatus(true, false);
        message(Utils.TI18N("已达最大选择数量"));
        return;
      }
    }
 
    if (flag == true) {
      this.chose_num = this.chose_num + 1;
      var artifact_cfg = Config.partner_artifact_data.data_artifact_data[item_vo.config.id];
 
      if (artifact_cfg && artifact_cfg.com_artifact) {
        this.artifact_bid = artifact_cfg.com_artifact;
      }
    } else {
      this.chose_num = this.chose_num - 1;
 
      if (this.chose_num <= 0) {
        this.artifact_bid = 0;
      }
    }
 
    this.chose_lb.string = cc.js.formatStr(Utils.TI18N("(已选择:%s/%s)"), this.chose_num, this.max_num);
  },
  //检测是否可以选择
  checkItemIsCanChose: function checkItemIsCanChose(bid) {
    var is_can_chose = false;
 
    if (this.artifact_bid && this.artifact_bid != 0) {
      var artifact_cfg = Config.partner_artifact_data.data_artifact_data[bid];
 
      if (artifact_cfg && artifact_cfg.com_artifact == this.artifact_bid) {
        is_can_chose = true;
      }
    } else {
      is_can_chose = true;
    }
 
    return is_can_chose;
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    if (this.item_scrollview) {
      this.item_scrollview.deleteMe();
      this.item_scrollview = null;
    }
 
    for (var k in this.item_data) {
      var v = this.item_data[k];
      v.setGoodsAttr("showSellStatus", {
        status: true,
        select: false
      });
    }
 
    this.ctrl.openArtifactChoseWindow(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxoZXJvXFxhcnRpZmFjdFxcYXJ0aWZhY3RfY2hvc2Vfd2luZG93LmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIkNvbW1vblNjcm9sbFZpZXciLCJIZXJvQ29udHJvbGxlciIsIkhlcm9FdmVudCIsIkJhY2twYWNrQ29udHJvbGxlciIsIkJhY2tQYWNrQ29uc3QiLCJQYXJ0bmVyQ29uc3QiLCJHb29kc1ZvIiwiQXJ0aWZhY3RfY2hvc2VXaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ2aWV3VGFnIiwiU0NFTkVfVEFHIiwiZGlhbG9ndWUiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJNaW5pIiwiaW5pdENvbmZpZyIsImNob3NlX251bSIsImN0cmwiLCJnZXRJbnN0YW5jZSIsIm9wZW5DYWxsQmFjayIsImJhY2tncm91bmQiLCJzZWVrQ2hpbGQiLCJtYWluX2NvbnRhaW5lciIsImNob3NlX2xiIiwiTGFiZWwiLCJzdHJpbmciLCJqcyIsImZvcm1hdFN0ciIsIlV0aWxzIiwiVEkxOE4iLCJva19idG4iLCJjbG9zZV9idG4iLCJlbXB0eV9iZ19zcCIsIlNwcml0ZSIsIm5vZGUiLCJhY3RpdmUiLCJnb29kc19jb24iLCJzaXplIiwiZ2V0Q29udGVudFNpemUiLCJ0YWJfc2l6ZSIsIndpZHRoIiwiaGVpZ2h0Iiwic2V0dGluZyIsIml0ZW1fY2xhc3MiLCJzdGFydF94Iiwic3BhY2VfeCIsInN0YXJ0X3kiLCJzcGFjZV95IiwiaXRlbV93aWR0aCIsIkJhY2tQYWNrSXRlbSIsIldpZHRoIiwiaXRlbV9oZWlnaHQiLCJIZWlnaHQiLCJyb3ciLCJjb2wiLCJuZWVkX2R5bmFtaWMiLCJpdGVtX3Njcm9sbHZpZXciLCJjcmVhdGVTY3JvbGwiLCJ2MiIsIlNjcm9sbFZpZXdEaXIiLCJ2ZXJ0aWNhbCIsIlNjcm9sbFZpZXdTdGFydFBvcyIsInRvcCIsInJlZ2lzdGVyRXZlbnQiLCJvblRvdWNoRW5kIiwib3BlbkFydGlmYWN0Q2hvc2VXaW5kb3ciLCJiaW5kIiwiX29uQ2xpY2tCdG5PayIsImlzX2hhdmVfc3BlY2lhbCIsIml0ZW1fbGlzdCIsImsiLCJpdGVtX2RhdGEiLCJ2Iiwic2hvd1NlbGxTdGF0dXMiLCJzZWxlY3QiLCJlbmNoYW50IiwicHVzaCIsImlkIiwic3VyZVRvQ2hvc2VGdW5jIiwiZ2NvcmUiLCJHbG9iYWxFdmVudCIsImZpcmUiLCJBcnRpZmFjdF9DaG9zZV9FdmVudCIsInN0ciIsIkNvbW1vbkFsZXJ0Iiwic2hvdyIsIm9wZW5Sb290V25kIiwiZGF0YSIsInNldERhdGEiLCJhcnRpZmFjdF9iaWQiLCJiaWQiLCJtYXhfbnVtIiwiY2hvc2VfbGlzdCIsImdldEFyckxlbiIsInRtcF9kYXRhIiwiZ2V0TW9kZWwiLCJnZXRBbGxCYWNrUGFja0FycmF5IiwiaXRlbV90YWJfdHlwZSIsIlNQRUNJQUwiLCJpIiwidm8iLCJpbml0QXR0ckRhdGEiLCJsaXN0IiwiY29uZmlnIiwidHlwZSIsIml0ZW1fdHlwZSIsIkFSVElGQUNUQ0hJUFMiLCJhcnRpZmFjdF9jZmciLCJDb25maWciLCJwYXJ0bmVyX2FydGlmYWN0X2RhdGEiLCJkYXRhX2FydGlmYWN0X2RhdGEiLCJjb21fYXJ0aWZhY3QiLCJpc19zZWxlY3QiLCJzZXRHb29kc0F0dHIiLCJzdGF0dXMiLCJzb3J0IiwidGFibGVMb3dlclNvcnRlciIsIm9uQ2xpY2tJdGVtQ2FsbEJhY2siLCJjZWxsIiwiaXRlbV92byIsImdldERhdGEiLCJvcGVuQXJ0aWZhY3RUaXBzV2luZG93IiwiQXJ0aWZhY3RUaXBzIiwibm9ybWFsIiwic2hvd0NoZWNrQm94IiwiY2hlY2tCb3hDbGlja0NhbGxCYWNrIiwiX29uQ2hlY2tCb3hDYWxsQmFjayIsImFkanVzdENoZWNrQm94UG9zIiwibGVuZ3RoIiwibG9hZFJlcyIsImdldFVJSWNvblBhdGgiLCJzcCIsInNwcml0ZUZyYW1lIiwiZmxhZyIsIml0ZW1ub2RlIiwiY2hlY2tJdGVtSXNDYW5DaG9zZSIsInNldENoZWNrQm94U3RhdHVzIiwibWVzc2FnZSIsImlzX2Nhbl9jaG9zZSIsImNsb3NlQ2FsbEJhY2siLCJkZWxldGVNZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGdCQUFnQixHQUFHRCxPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFBSUUsY0FBYyxHQUFHRixPQUFPLENBQUMsaUJBQUQsQ0FBNUI7O0FBQ0EsSUFBSUcsU0FBUyxHQUFHSCxPQUFPLENBQUMsWUFBRCxDQUF2Qjs7QUFDQSxJQUFJSSxrQkFBa0IsR0FBR0osT0FBTyxDQUFDLHFCQUFELENBQWhDOztBQUNBLElBQUlLLGFBQWEsR0FBR0wsT0FBTyxDQUFDLGdCQUFELENBQTNCOztBQUNBLElBQUlNLFlBQVksR0FBR04sT0FBTyxDQUFDLGVBQUQsQ0FBMUI7O0FBQ0EsSUFBSU8sT0FBTyxHQUFHUCxPQUFPLENBQUMsVUFBRCxDQUFyQjs7QUFFQSxJQUFJUSxvQkFBb0IsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDaEMsYUFBU0MsUUFEdUI7QUFFaENDLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFNBQUtDLFVBQUwsR0FBa0JkLFFBQVEsQ0FBQ2UsYUFBVCxDQUF1QixNQUF2QixFQUErQix1QkFBL0IsQ0FBbEI7QUFDQSxTQUFLQyxPQUFMLEdBQWVDLFNBQVMsQ0FBQ0MsUUFBekIsQ0FGYyxDQUVvQzs7QUFDbEQsU0FBS0MsUUFBTCxHQUFnQkMsT0FBTyxDQUFDQyxJQUF4QixDQUhjLENBRzhCO0FBQy9DLEdBTitCO0FBUWhDO0FBQ0FDLEVBQUFBLFVBQVUsRUFBRSxzQkFBWTtBQUNwQixTQUFLQyxTQUFMLEdBQWlCLENBQWpCO0FBQ0EsU0FBS0MsSUFBTCxHQUFZckIsY0FBYyxDQUFDc0IsV0FBZixF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QXFCb0YsUUFBckI7QUFDQSxXQUFLcEYsZUFBTCxHQUF1QixJQUF2QjtBQUNIOztBQUNELFNBQUssSUFBSWMsQ0FBVCxJQUFjLEtBQUtDLFNBQW5CLEVBQThCO0FBQzFCLFVBQUlDLENBQUMsR0FBRyxLQUFLRCxTQUFMLENBQWVELENBQWYsQ0FBUjtBQUNBRSxNQUFBQSxDQUFDLENBQUN5QyxZQUFGLENBQWUsZ0JBQWYsRUFBaUM7QUFBRUMsUUFBQUEsTUFBTSxFQUFFLElBQVY7QUFBZ0J4QyxRQUFBQSxNQUFNLEVBQUU7QUFBeEIsT0FBakM7QUFDSDs7QUFDRCxTQUFLekQsSUFBTCxDQUFVZ0QsdUJBQVYsQ0FBa0MsS0FBbEM7QUFDSDtBQW5NK0IsQ0FBVCxDQUEzQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDMtMzAgMTU6NTM6MjJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgQ29tbW9uU2Nyb2xsVmlldyA9IHJlcXVpcmUoXCJjb21tb25fc2Nyb2xsdmlld1wiKTtcbnZhciBIZXJvQ29udHJvbGxlciA9IHJlcXVpcmUoXCJoZXJvX2NvbnRyb2xsZXJcIik7XG52YXIgSGVyb0V2ZW50ID0gcmVxdWlyZShcImhlcm9fZXZlbnRcIik7XG52YXIgQmFja3BhY2tDb250cm9sbGVyID0gcmVxdWlyZShcImJhY2twYWNrX2NvbnRyb2xsZXJcIik7XG52YXIgQmFja1BhY2tDb25zdCA9IHJlcXVpcmUoXCJiYWNrcGFja19jb25zdFwiKTtcbnZhciBQYXJ0bmVyQ29uc3QgPSByZXF1aXJlKFwicGFydG5lcl9jb25zdFwiKTtcbnZhciBHb29kc1ZvID0gcmVxdWlyZShcImdvb2RzX3ZvXCIpO1xuXG52YXIgQXJ0aWZhY3RfY2hvc2VXaW5kb3cgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZVZpZXcsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnByZWZhYlBhdGggPSBQYXRoVG9vbC5nZXRQcmVmYWJQYXRoKFwiaGVyb1wiLCBcImFydGlmYWN0X2Nob3NlX3dpbmRvd1wiKTtcbiAgICAgICAgdGhpcy52aWV3VGFnID0gU0NFTkVfVEFHLmRpYWxvZ3VlOyAgICAgICAgICAgICAgICAvL+ivpeeql+S9k+aJgOWxnnVp5bGC57qnLOWFqOWxj3Vp6ZyA6KaB5ZyodWnlsYIs6Z2e5YWo5bGPdWnlnKhkaWFsb2d1ZeWxgizov5nkuKropoHms6jmhI9cbiAgICAgICAgdGhpcy53aW5fdHlwZSA9IFdpblR5cGUuTWluaTsgICAgICAgICAgICAgICAvL+aYr+WQpuaYr+WFqOWxj+eql+S9kyAgV2luVHlwZS5GdWxsLCBXaW5UeXBlLkJpZywgV2luVHlwZS5NaW5pLCBXaW5UeXBlLlRpcHNcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW5LiA5Lqb6YWN572u5pWw5o2uLOWPr+S7peeUqOS6juWjsOaYjuS4gOS6m+WPmOmHj+S5i+exu+eahFxuICAgIGluaXRDb25maWc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jaG9zZV9udW0gPSAwO1xuICAgICAgICB0aGlzLmN0cmwgPSBIZXJvQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpO1xuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI7nmoTlm57osIMs5Y+v5Lul5Zyo6L+Z6YeM5o2V6I6355u45YWz6IqC54K55oiW6ICF57uE5Lu2XG4gICAgb3BlbkNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZCA9IHRoaXMuc2Vla0NoaWxkKFwiYmFja2dyb3VuZFwiKTtcbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lciA9IHRoaXMuc2Vla0NoaWxkKFwibWFpbl9jb250YWluZXJcIik7XG5cbiAgICAgICAgdGhpcy5jaG9zZV9sYiA9IHRoaXMuc2Vla0NoaWxkKFwiY2hvc2VfbGFiZWxcIiwgY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLmNob3NlX2xiLnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIijlt7LpgInmi6k6JWQpXCIpLCB0aGlzLmNob3NlX251bSk7XG4gICAgICAgIHRoaXMub2tfYnRuID0gdGhpcy5zZWVrQ2hpbGQoXCJva19idG5cIik7XG4gICAgICAgIHRoaXMuY2xvc2VfYnRuID0gdGhpcy5zZWVrQ2hpbGQoXCJjbG9zZV9idG5cIik7XG4gICAgICAgIHRoaXMuZW1wdHlfYmdfc3AgPSB0aGlzLnNlZWtDaGlsZChcImVtcHR5X2JnXCIsIGNjLlNwcml0ZSk7XG4gICAgICAgIHRoaXMuZW1wdHlfYmdfc3Aubm9kZS5hY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICB2YXIgZ29vZHNfY29uID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX2NvbnRhaW5lciwgXCJnb29kc19jb25cIik7XG4gICAgICAgIHZhciBzaXplID0gZ29vZHNfY29uLmdldENvbnRlbnRTaXplKCk7XG4gICAgICAgIHZhciB0YWJfc2l6ZSA9IGNjLnNpemUoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQgLSAxMCk7XG4gICAgICAgIHZhciBzZXR0aW5nID0ge1xuICAgICAgICAgICAgaXRlbV9jbGFzczogXCJiYWNrcGFja19pdGVtXCIsICAgICAgLy8g5Y2V5YWD57G7XG4gICAgICAgICAgICBzdGFydF94OiAxNSwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFjotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3g6IDIwLCAgICAgICAgICAgICAgICAgICAgLy8geOaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgc3RhcnRfeTogMCwgICAgICAgICAgICAgICAgICAgIC8vIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3k6IDEwLCAgICAgICAgICAgICAgICAgICAvLyB55pa55ZCR55qE6Ze06ZqUXG4gICAgICAgICAgICBpdGVtX3dpZHRoOiBCYWNrUGFja0l0ZW0uV2lkdGgsICAgICAgICAgICAgICAgLy8g5Y2V5YWD55qE5bC65a+4d2lkdGhcbiAgICAgICAgICAgIGl0ZW1faGVpZ2h0OiBCYWNrUGFja0l0ZW0uSGVpZ2h0LCAgICAgICAgICAgICAgLy8g5Y2V5YWD55qE5bC65a+4aGVpZ2h0XG4gICAgICAgICAgICByb3c6IDAsICAgICAgICAgICAgICAgICAgICAgICAgLy8g6KGM5pWw77yM5L2c55So5LqO5rC05bmz5rua5Yqo57G75Z6LXG4gICAgICAgICAgICBjb2w6IDQsICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX5pWw77yM5L2c55So5LqO5Z6C55u05rua5Yqo57G75Z6LXG4gICAgICAgICAgICBuZWVkX2R5bmFtaWM6IHRydWVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLml0ZW1fc2Nyb2xsdmlldyA9IG5ldyBDb21tb25TY3JvbGxWaWV3KClcbiAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuY3JlYXRlU2Nyb2xsKGdvb2RzX2NvbiwgY2MudjIoMCwgMCksIFNjcm9sbFZpZXdEaXIudmVydGljYWwsXG4gICAgICAgICAgICBTY3JvbGxWaWV3U3RhcnRQb3MudG9wLCB0YWJfc2l6ZSwgc2V0dGluZywgY2MudjIoMC41LCAwLjUpKTtcblxuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuY2xvc2VfYnRuLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlbkFydGlmYWN0Q2hvc2VXaW5kb3coZmFsc2UpXG4gICAgICAgIH0uYmluZCh0aGlzKSwgMilcbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLmJhY2tncm91bmQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuQXJ0aWZhY3RDaG9zZVdpbmRvdyhmYWxzZSlcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAyKVxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMub2tfYnRuLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9vbkNsaWNrQnRuT2soKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKVxuICAgIH0sXG5cbiAgICBfb25DbGlja0J0bk9rOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpc19oYXZlX3NwZWNpYWwgPSBmYWxzZTtcbiAgICAgICAgdmFyIGl0ZW1fbGlzdCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBrIGluIHRoaXMuaXRlbV9kYXRhKSB7XG4gICAgICAgICAgICB2YXIgdiA9IHRoaXMuaXRlbV9kYXRhW2tdO1xuICAgICAgICAgICAgaWYgKHYuc2hvd1NlbGxTdGF0dXMgIT0gbnVsbCAmJiB2LnNob3dTZWxsU3RhdHVzLnNlbGVjdCA9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHYuZW5jaGFudCA+PSAzKSB7Ly/miYDpgInmnZDmlpnkuK3mnInkuInmmJ/ku6XkuIrnmoTnrKbmlodcbiAgICAgICAgICAgICAgICAgICAgaXNfaGF2ZV9zcGVjaWFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXRlbV9saXN0LnB1c2godi5pZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgc3VyZVRvQ2hvc2VGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShIZXJvRXZlbnQuQXJ0aWZhY3RfQ2hvc2VfRXZlbnQsIGl0ZW1fbGlzdCk7XG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlbkFydGlmYWN0Q2hvc2VXaW5kb3coZmFsc2UpO1xuICAgICAgICB9LmJpbmQodGhpcylcbiAgICAgICAgaWYgKGlzX2hhdmVfc3BlY2lhbCkge1xuICAgICAgICAgICAgdmFyIHN0ciA9IFV0aWxzLlRJMThOKFwi5oKo6YCJ5oup5LqG6auY5pif57qn55qE56ym5paH5L2c5Li65Y2H5pif5p2Q5paZ77yM5piv5ZCm57un57ut77yfXCIpO1xuICAgICAgICAgICAgdmFyIENvbW1vbkFsZXJ0ID0gcmVxdWlyZShcImNvbW1vbmFsZXJ0XCIpO1xuICAgICAgICAgICAgQ29tbW9uQWxlcnQuc2hvdyhzdHIsIFV0aWxzLlRJMThOKFwi56Gu5a6aXCIpLCBzdXJlVG9DaG9zZUZ1bmMsIFV0aWxzLlRJMThOKFwi5Y+W5raIXCIpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VyZVRvQ2hvc2VGdW5jKCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCOLOa3u+WKoOWIsOWvueW6lOS4u+iKgueCueS5i+WQjueahOWbnuiwgyzkuZ/lsLHmmK/kuIDkuKrnqpfkvZPnmoTmraPlvI/lhaXlj6Ms5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb3BlblJvb3RXbmQ6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKTtcbiAgICB9LFxuXG4gICAgc2V0RGF0YTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdGhpcy5hcnRpZmFjdF9iaWQgPSBkYXRhLmJpZCAvL+WQiOaIkOeahOebruagh+espuaWh2JpZO+8iDDooajnpLrmmoLml6DvvIlcbiAgICAgICAgdGhpcy5tYXhfbnVtID0gZGF0YS5tYXhfbnVtIHx8IDA7XG4gICAgICAgIHRoaXMuY2hvc2VfbGlzdCA9IGRhdGEuY2hvc2VfbGlzdCB8fCBbXTtcbiAgICAgICAgdGhpcy5jaG9zZV9udW0gPSBVdGlscy5nZXRBcnJMZW4odGhpcy5jaG9zZV9saXN0KTtcbiAgICAgICAgdGhpcy5jaG9zZV9sYi5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCIo5bey6YCJ5oupOiVzLyVzKVwiKSwgdGhpcy5jaG9zZV9udW0sIHRoaXMubWF4X251bSk7XG5cbiAgICAgICAgdmFyIHRtcF9kYXRhID0gQmFja3BhY2tDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS5nZXRBbGxCYWNrUGFja0FycmF5KEJhY2tQYWNrQ29uc3QuaXRlbV90YWJfdHlwZS5TUEVDSUFMKVxuICAgICAgICB2YXIgaXRlbV9kYXRhID0gW107XG4gICAgICAgIGZvciAodmFyIGkgaW4gdG1wX2RhdGEpIHtcbiAgICAgICAgICAgIHZhciB2byA9IG5ldyBHb29kc1ZvKCk7XG4gICAgICAgICAgICB2by5pbml0QXR0ckRhdGEodG1wX2RhdGFbaV0pO1xuICAgICAgICAgICAgaXRlbV9kYXRhLnB1c2godm8pXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbGlzdCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpIGluIGl0ZW1fZGF0YSkge1xuICAgICAgICAgICAgdmFyIHYgPSBpdGVtX2RhdGFbaV07XG4gICAgICAgICAgICBpZiAodiAmJiB2LmNvbmZpZyAmJiB2LmNvbmZpZy50eXBlID09IEJhY2tQYWNrQ29uc3QuaXRlbV90eXBlLkFSVElGQUNUQ0hJUFMpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJ0aWZhY3RfY2ZnID0gQ29uZmlnLnBhcnRuZXJfYXJ0aWZhY3RfZGF0YS5kYXRhX2FydGlmYWN0X2RhdGFbdi5jb25maWcuaWRdO1xuICAgICAgICAgICAgICAgIGlmIChhcnRpZmFjdF9jZmcgJiYgYXJ0aWZhY3RfY2ZnLmNvbV9hcnRpZmFjdCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc19zZWxlY3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayBpbiB0aGlzLmNob3NlX2xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNob3NlX2xpc3Rba10gPT0gdi5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3NlbGVjdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2LnNldEdvb2RzQXR0cihcInNob3dTZWxsU3RhdHVzXCIsIHsgc3RhdHVzOiB0cnVlLCBzZWxlY3Q6IGlzX3NlbGVjdCB9KTtcbiAgICAgICAgICAgICAgICAgICAgbGlzdC5wdXNoKHYpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxpc3Quc29ydChVdGlscy50YWJsZUxvd2VyU29ydGVyKFtcInF1YWxpdHlcIiwgXCJpZFwiXSkpO1xuICAgICAgICB0aGlzLml0ZW1fZGF0YSA9IGxpc3Q7XG4gICAgICAgIHZhciBvbkNsaWNrSXRlbUNhbGxCYWNrID0gZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgICAgIHZhciBpdGVtX3ZvID0gY2VsbC5nZXREYXRhKCk7XG4gICAgICAgICAgICB0aGlzLmN0cmwub3BlbkFydGlmYWN0VGlwc1dpbmRvdyh0cnVlLCBpdGVtX3ZvLCBQYXJ0bmVyQ29uc3QuQXJ0aWZhY3RUaXBzLm5vcm1hbClcbiAgICAgICAgfS5iaW5kKHRoaXMpXG4gICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3LnNldERhdGEobGlzdCwgb25DbGlja0l0ZW1DYWxsQmFjaywgeyBzaG93Q2hlY2tCb3g6IHRydWUsIGNoZWNrQm94Q2xpY2tDYWxsQmFjazogdGhpcy5fb25DaGVja0JveENhbGxCYWNrLmJpbmQodGhpcyksIGFkanVzdENoZWNrQm94UG9zOiBjYy52MihCYWNrUGFja0l0ZW0uV2lkdGggLSAyNSwgQmFja1BhY2tJdGVtLkhlaWdodCAtIDI1KSB9KVxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5lbXB0eV9iZ19zcC5ub2RlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmxvYWRSZXMoUGF0aFRvb2wuZ2V0VUlJY29uUGF0aChcImJpZ2JnXCIsIFwiYmlnYmdfM1wiKSwgZnVuY3Rpb24gKHNwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbXB0eV9iZ19zcC5zcHJpdGVGcmFtZSA9IHNwO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbXB0eV9iZ19zcC5ub2RlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIF9vbkNoZWNrQm94Q2FsbEJhY2s6IGZ1bmN0aW9uIChmbGFnLCBpdGVtbm9kZSkge1xuICAgICAgICB2YXIgaXRlbV92byA9IGl0ZW1ub2RlLmdldERhdGEoKTtcbiAgICAgICAgaWYgKGZsYWcgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrSXRlbUlzQ2FuQ2hvc2UoaXRlbV92by5jb25maWcuaWQpKSB7XG4gICAgICAgICAgICAgICAgaXRlbV92by5zZXRHb29kc0F0dHIoXCJzaG93U2VsbFN0YXR1c1wiLCB7IHN0YXR1czogdHJ1ZSwgc2VsZWN0OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICBpdGVtbm9kZS5zZXRDaGVja0JveFN0YXR1cyh0cnVlLCBmYWxzZSlcbiAgICAgICAgICAgICAgICBtZXNzYWdlKFV0aWxzLlRJMThOKFwi6K+36YCJ5oup5ZCM57G75Z6L56ym5paHXCIpKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNob3NlX251bSA+PSB0aGlzLm1heF9udW0pIHtcbiAgICAgICAgICAgICAgICBpdGVtX3ZvLnNldEdvb2RzQXR0cihcInNob3dTZWxsU3RhdHVzXCIsIHsgc3RhdHVzOiB0cnVlLCBzZWxlY3Q6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIGl0ZW1ub2RlLnNldENoZWNrQm94U3RhdHVzKHRydWUsIGZhbHNlKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UoVXRpbHMuVEkxOE4oXCLlt7Lovr7mnIDlpKfpgInmi6nmlbDph49cIikpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZsYWcgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5jaG9zZV9udW0gPSB0aGlzLmNob3NlX251bSArIDE7XG4gICAgICAgICAgICB2YXIgYXJ0aWZhY3RfY2ZnID0gQ29uZmlnLnBhcnRuZXJfYXJ0aWZhY3RfZGF0YS5kYXRhX2FydGlmYWN0X2RhdGFbaXRlbV92by5jb25maWcuaWRdO1xuICAgICAgICAgICAgaWYgKGFydGlmYWN0X2NmZyAmJiBhcnRpZmFjdF9jZmcuY29tX2FydGlmYWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcnRpZmFjdF9iaWQgPSBhcnRpZmFjdF9jZmcuY29tX2FydGlmYWN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaG9zZV9udW0gPSB0aGlzLmNob3NlX251bSAtIDE7XG4gICAgICAgICAgICBpZiAodGhpcy5jaG9zZV9udW0gPD0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXJ0aWZhY3RfYmlkID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNob3NlX2xiLnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIijlt7LpgInmi6k6JXMvJXMpXCIpLCB0aGlzLmNob3NlX251bSwgdGhpcy5tYXhfbnVtKVxuICAgIH0sXG5cbiAgICAvL+ajgOa1i+aYr+WQpuWPr+S7pemAieaLqVxuICAgIGNoZWNrSXRlbUlzQ2FuQ2hvc2U6IGZ1bmN0aW9uIChiaWQpIHtcbiAgICAgICAgdmFyIGlzX2Nhbl9jaG9zZSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5hcnRpZmFjdF9iaWQgJiYgdGhpcy5hcnRpZmFjdF9iaWQgIT0gMCkge1xuICAgICAgICAgICAgdmFyIGFydGlmYWN0X2NmZyA9IENvbmZpZy5wYXJ0bmVyX2FydGlmYWN0X2RhdGEuZGF0YV9hcnRpZmFjdF9kYXRhW2JpZF07XG4gICAgICAgICAgICBpZiAoYXJ0aWZhY3RfY2ZnICYmIGFydGlmYWN0X2NmZy5jb21fYXJ0aWZhY3QgPT0gdGhpcy5hcnRpZmFjdF9iaWQpIHtcbiAgICAgICAgICAgICAgICBpc19jYW5fY2hvc2UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXNfY2FuX2Nob3NlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNfY2FuX2Nob3NlXG4gICAgfSxcblxuICAgIC8vIOWFs+mXreeql+S9k+WbnuiwgyzpnIDopoHlnKjov5nph4zosIPnlKjor6XnqpfkvZPmiYDlsZ5jb250cm9sbGVy55qEY2xvc2Xmlrnms5XmsqHnlKjkuo7nva7nqbror6XnqpfkvZPlrp7kvovlr7nosaFcbiAgICBjbG9zZUNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLml0ZW1fc2Nyb2xsdmlldykge1xuICAgICAgICAgICAgdGhpcy5pdGVtX3Njcm9sbHZpZXcuZGVsZXRlTWUoKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbV9zY3JvbGx2aWV3ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBrIGluIHRoaXMuaXRlbV9kYXRhKSB7XG4gICAgICAgICAgICB2YXIgdiA9IHRoaXMuaXRlbV9kYXRhW2tdO1xuICAgICAgICAgICAgdi5zZXRHb29kc0F0dHIoXCJzaG93U2VsbFN0YXR1c1wiLCB7IHN0YXR1czogdHJ1ZSwgc2VsZWN0OiBmYWxzZSB9KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3RybC5vcGVuQXJ0aWZhY3RDaG9zZVdpbmRvdyhmYWxzZSlcbiAgICB9LFxufSkiXX0=