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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/backpack/view/gift_select_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, 'b00c3eFmMBH97uyPdz6r5+V', 'gift_select_window');
// Scripts/mod/backpack/view/gift_select_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     这里是描述这个窗体的作用的
// <br/>Create: 2019-04-15 10:35:50
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var Gift_selectWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("backpack", "gift_select");
    this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
 
    this.win_type = WinType.Mini; //是否是全屏窗体  WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
 
    this.ctrl = arguments[0];
    this.model = this.ctrl.getModel();
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initConfig: function initConfig() {
    this.WIDTH = 460; //界面的宽度
 
    this.HEIGHT = 350;
    this.GOODS_WIDTH = 68; //偏移量
 
    this.select_type = 1;
  },
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    this.main_panel = this.root_wnd.getChildByName("main_panel");
    var size = this.main_panel.getContentSize();
    this.close_btn = this.main_panel.getChildByName("close_btn");
    this.top_panel = this.main_panel.getChildByName("top_panel");
    var title = this.top_panel.getChildByName("title_label").getComponent(cc.Label);
    title.string = Utils.TI18N("自选礼包"); //领取按钮
 
    this.use_btn = this.main_panel.getChildByName("use_btn");
    var use_lab = this.use_btn.getChildByName("Label").getComponent(cc.Label);
    use_lab.string = Utils.TI18N("使用"); // 滚动部分
 
    this.scroll_view = this.seekChild("items_content");
    this.desc_label = Utils.createRichLabel(24, new cc.Color(0x76, 0x45, 0x19, 0xff), cc.v2(0.5, 1), cc.v2(size.width / 2, 625), null, 400);
    this.main_panel.addChild(this.desc_label.node);
  },
  // 设置数据
  updateGiftList: function updateGiftList(giftid, giftBid, goods_list, choose_num) {
    this.giftid = giftid;
    this.giftBid = giftBid;
    this.goods_list = goods_list || [];
    this.choose_num = choose_num || 1; // 物品列表
 
    this.desc_label.string = cc.js.formatStr(Utils.TI18N("请从以下奖励中选择%s个"), this.choose_num);
 
    if (!this.item_list) {
      this.item_list = [];
    }
 
    if (!this.name_list) {
      this.name_list = [];
    }
 
    var scroll_size = this.scroll_view.getContentSize();
    var len = 0;
 
    var RoleController = require("role_controller");
 
    var role_vo = RoleController.getInstance().getRoleVo();
 
    for (var i in this.goods_list) {
      if (this.goods_list[i].min_lev <= role_vo.lev && this.goods_list[i].max_lev >= role_vo.lev) {
        len = len + 1;
      }
    }
 
    var max_height = Math.max(scroll_size.height, len * 128 + 20);
    this.scroll_view.setContentSize(cc.size(scroll_size.width, max_height));
    var index = 1;
 
    for (var i in this.goods_list) {
      var v = this.goods_list[i];
 
      if (v.min_lev <= role_vo.lev && v.max_lev >= role_vo.lev) {
        var temp = v;
        var x;
        var y;
        x = scroll_size.width / 2;
        y = max_height - 128 * index;
        var bid = temp.bid;
 
        if (!this.item_list[index]) {
          var GiftSelectItem = require("gift_select_item_panel");
 
          this.item_list[index] = new GiftSelectItem(index);
          this.item_list[index].setParent(this.scroll_view);
        }
 
        this.item_list[index].setPosition(x, y);
        var data = {
          base_id: bid,
          quantity: temp.num
        };
        this.item_list[index].setData(data);
        this.item_list[index].addCallBack(function (index, vo) {
          var id = index || 1;
          this.clickCallBack(id, vo.base_id, vo.quantity);
        }.bind(this));
        index = index + 1;
      }
    } // 选择列表置空
 
 
    this.select_list = [];
  },
  // 点击的事件
  clickCallBack: function clickCallBack(goods_id, bid, num) {
    // 判断该bid是否存在的
    if (this.select_list && this.select_list.length > 0) {
      for (var i = this.select_list.length - 1; i >= 0; i--) {
        var temp_id = this.select_list[i].goods_id;
 
        if (temp_id == goods_id) {
          this.select_list.splice(i, 1);
          this.setSelectedState(goods_id, false);
          return;
        }
      }
    } // 判断数量是否满了
 
 
    if (this.select_list.length >= this.choose_num) {
      var item = this.select_list.shift();
      var temp_goods_id = item.goods_id;
      this.setSelectedState(temp_goods_id, false); // --        message2("选择数量已满!")
      // --        return
    } // 插入数据
 
 
    this.select_list.push({
      goods_id: goods_id,
      bid: bid,
      num: num
    });
    this.setSelectedState(goods_id, true);
  },
  setSelectedState: function setSelectedState(id, bool) {
    if (this.item_list) {
      for (var i in this.item_list) {
        var item = this.item_list[i];
 
        if (item.index && item.index == id) {
          item.setSelected(bool);
        }
      }
    }
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    Utils.onTouchEnd(this.use_btn, function () {
      if (this.select_list && this.select_list.length >= this.choose_num) {
        var gift_id = this.giftid;
        var chose_ids = [];
        var goods_num = 1;
 
        for (var i in this.select_list) {
          chose_ids.push({
            name: 1,
            value: this.select_list[i].bid,
            str: ""
          });
          goods_num = this.select_list[i].num;
        }
 
        var BackPackConst = require("backpack_const");
 
        var count = this.model.getPackItemNumByBid(BackPackConst.Bag_Code.BACKPACK, this.giftBid);
 
        if (count > 1 && this.choose_num == 1) {
          this.ctrl.openBatchUseItemView(true, this.gift_vo, 1, chose_ids);
        } else {
          this.ctrl.sender10515(gift_id, 1, chose_ids);
          this.ctrl.closeGiftSelectPanel();
        }
      } else {
        message(cc.js.formatStr(Utils.TI18N("请选择<color=#5a503c>%d个</color>物品!"), this.choose_num));
      }
    }.bind(this), 1);
    Utils.onTouchEnd(this.close_btn, function () {
      this.ctrl.closeGiftSelectPanel();
    }.bind(this), 2);
  },
  //     function GiftSelectPanel:createTitleTxt(txt, x, y)
  //     local container = ccui.Widget:create()
  //     container:setAnchorPoint(cc.p(0.5, 1))
  //     local size = cc.size(400, 20)
  //     container:setContentSize(size)
  //     container:setPosition(cc.p(x, y))
  //     local bg = createSprite(PathTool.getCommonRes("line7"), 0, 20)
  //     bg:setAnchorPoint(cc.p(0, 1))
  //     container:addChild(bg)
  //     bg = createSprite(PathTool.getCommonRes("line7"), size.width, 20)
  //     bg:setFlippedX(true)
  //     bg:setAnchorPoint(cc.p(1, 1))
  //     container:addChild(bg)
  //     local title = createLabel(22,Config.ColorData.data_color4[1],nil,size.width/2, 12,"",this.scroll_view,nil,cc.p(0,0))
  //     title:setString(txt)
  //     container:addChild(title)
  //     return container, title
  // end
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd(giftvo) {
    var choose_num = 1;
    this.gift_vo = giftvo;
    if (!giftvo) return;
    var giftId = giftvo.id;
    var giftBid = giftvo.base_id;
    var item_list = [];
 
    if (Config.gift_data.data_choose_gift[giftBid]) {
      var item = Utils.getItemConfig(giftBid);
 
      if (item && item.ext && item.ext.length > 0) {
        for (var i in item.ext) {
          choose_num = item.ext[i];
        }
      }
 
      var gift_cfg = Config.gift_data.data_choose_gift[giftBid];
 
      for (var i in gift_cfg) {
        item_list.push(gift_cfg[i]);
      }
    }
 
    item_list.sort(Utils.tableLowerSorter(["sort_id"]));
    this.updateGiftList(giftId, giftBid, item_list, choose_num);
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    for (var i in this.item_list) {
      this.item_list[i].deleteMe();
    }
 
    this.item_list = null;
    this.select_list = null;
    this.name_list = null;
  }
});
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxiYWNrcGFja1xcdmlld1xcZ2lmdF9zZWxlY3Rfd2luZG93LmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIkdpZnRfc2VsZWN0V2luZG93IiwiY2MiLCJDbGFzcyIsIkJhc2VWaWV3IiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwidmlld1RhZyIsIlNDRU5FX1RBRyIsImRpYWxvZ3VlIiwid2luX3R5cGUiLCJXaW5UeXBlIiwiTWluaSIsImN0cmwiLCJhcmd1bWVudHMiLCJtb2RlbCIsImdldE1vZGVsIiwiaW5pdENvbmZpZyIsIldJRFRIIiwiSEVJR0hUIiwiR09PRFNfV0lEVEgiLCJzZWxlY3RfdHlwZSIsIm9wZW5DYWxsQmFjayIsIm1haW5fcGFuZWwiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwic2l6ZSIsImdldENvbnRlbnRTaXplIiwiY2xvc2VfYnRuIiwidG9wX3BhbmVsIiwidGl0bGUiLCJnZXRDb21wb25lbnQiLCJMYWJlbCIsInN0cmluZyIsIlV0aWxzIiwiVEkxOE4iLCJ1c2VfYnRuIiwidXNlX2xhYiIsInNjcm9sbF92aWV3Iiwic2Vla0NoaWxkIiwiZGVzY19sYWJlbCIsImNyZWF0ZVJpY2hMYWJlbCIsIkNvbG9yIiwidjIiLCJ3aWR0aCIsImFkZENoaWxkIiwibm9kZSIsInVwZGF0ZUdpZnRMaXN0IiwiZ2lmdGlkIiwiZ2lmdEJpZCIsImdvb2RzX2xpc3QiLCJjaG9vc2VfbnVtIiwianMiLCJmb3JtYXRTdHIiLCJpdGVtX2xpc3QiLCJuYW1lX2xpc3QiLCJzY3JvbGxfc2l6ZSIsImxlbiIsIlJvbGVDb250cm9sbGVyIiwicm9sZV92byIsImdldEluc3RhbmNlIiwiZ2V0Um9sZVZvIiwiaSIsIm1pbl9sZXYiLCJsZXYiLCJtYXhfbGV2IiwibWF4X2hlaWdodCIsIk1hdGgiLCJtYXgiLCJoZWlnaHQiLCJzZXRDb250ZW50U2l6ZSIsImluZGV4IiwidiIsInRlbXAiLCJ4IiwieSIsImJpZCIsIkdpZnRTZWxlY3RJdGVtIiwic2V0UGFyZW50Iiwic2V0UG9zaXRpb24iLCJkYXRhIiwiYmFzZV9pZCIsInF1YW50aXR5IiwibnVtIiwic2V0RGF0YSIsImFkZENhbGxCYWNrIiwidm8iLCJpZCIsImNsaWNrQ2FsbEJhY2siLCJiaW5kIiwic2VsZWN0X2xpc3QiLCJnb29kc19pZCIsImxlbmd0aCIsInRlbXBfaWQiLCJzcGxpY2UiLCJzZXRTZWxlY3RlZFN0YXRlIiwiaXRlbSIsInNoaWZ0IiwidGVtcF9nb29kc19pZCIsInB1c2giLCJib29sIiwic2V0U2VsZWN0ZWQiLCJyZWdpc3RlckV2ZW50Iiwib25Ub3VjaEVuZCIsImdpZnRfaWQiLCJjaG9zZV9pZHMiLCJnb29kc19udW0iLCJuYW1lIiwidmFsdWUiLCJzdHIiLCJCYWNrUGFja0NvbnN0IiwiY291bnQiLCJnZXRQYWNrSXRlbU51bUJ5QmlkIiwiQmFnX0NvZGUiLCJCQUNLUEFDSyIsIm9wZW5CYXRjaFVzZUl0ZW1WaWV3IiwiZ2lmdF92byIsInNlbmRlcjEwNTE1IiwiY2xvc2VHaWZ0U2VsZWN0UGFuZWwiLCJtZXNzYWdlIiwib3BlblJvb3RXbmQiLCJnaWZ0dm8iLCJnaWZ0SWQiLCJDb25maWciLCJnaWZ0X2RhdGEiLCJkYXRhX2Nob29zZV9naWZ0IiwiZ2V0SXRlbUNvbmZpZyIsImV4dCIsImdpZnRfY2ZnIiwic29ydCIsInRhYmxlTG93ZXJTb3J0ZXIiLCJjbG9zZUNhbGxCYWNrIiwiZGVsZXRlTWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxpQkFBaUIsR0FBR0MsRUFBRSxDQUFDQyxLQUFILENBQVM7QUFDN0IsYUFBU0MsUUFEb0I7QUFFN0JDLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFNBQUtDLFVBQUwsR0FBa0JQLFFBQVEs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O0FBQ2xCMUUsUUFBQUEsU0FBUyxDQUFDNkMsSUFBVixDQUFlNkIsUUFBUSxDQUFDbEUsQ0FBRCxDQUF2QjtBQUNIO0FBQ0o7O0FBQ0RSLElBQUFBLFNBQVMsQ0FBQzJFLElBQVYsQ0FBZS9GLEtBQUssQ0FBQ2dHLGdCQUFOLENBQXVCLENBQUMsU0FBRCxDQUF2QixDQUFmO0FBQ0EsU0FBS25GLGNBQUwsQ0FBb0IyRSxNQUFwQixFQUE0QnpFLE9BQTVCLEVBQXFDSyxTQUFyQyxFQUFnREgsVUFBaEQ7QUFDSCxHQXJONEI7QUF1TjdCO0FBQ0FnRixFQUFBQSxhQUFhLEVBQUMseUJBQVU7QUFDcEIsU0FBSSxJQUFJckUsQ0FBUixJQUFhLEtBQUtSLFNBQWxCLEVBQTRCO0FBQ3hCLFdBQUtBLFNBQUwsQ0FBZVEsQ0FBZixFQUFrQnNFLFFBQWxCO0FBQ0g7O0FBQ0QsU0FBSzlFLFNBQUwsR0FBaUIsSUFBakI7QUFDQSxTQUFLb0MsV0FBTCxHQUFtQixJQUFuQjtBQUNBLFNBQUtuQyxTQUFMLEdBQWlCLElBQWpCO0FBQ0g7QUEvTjRCLENBQVQsQ0FBeEIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAYXV0aG9yOiB4eHhAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICDov5nph4zmmK/mj4/ov7Dov5nkuKrnqpfkvZPnmoTkvZznlKjnmoRcbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA0LTE1IDEwOjM1OjUwXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIEdpZnRfc2VsZWN0V2luZG93ID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcImJhY2twYWNrXCIsIFwiZ2lmdF9zZWxlY3RcIik7XG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy5kaWFsb2d1ZTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLk1pbmk7ICAgICAgICAgICAgICAgLy/mmK/lkKbmmK/lhajlsY/nqpfkvZMgIFdpblR5cGUuRnVsbCwgV2luVHlwZS5CaWcsIFdpblR5cGUuTWluaSwgV2luVHlwZS5UaXBzXG4gICAgICAgIHRoaXMuY3RybCA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuY3RybC5nZXRNb2RlbCgpO1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLldJRFRIID0gNDYwOyAgLy/nlYzpnaLnmoTlrr3luqZcbiAgICAgICAgdGhpcy5IRUlHSFQgPSAzNTA7XG4gICAgICAgIHRoaXMuR09PRFNfV0lEVEggPSA2ODsgLy/lgY/np7vph49cbiAgICAgICAgdGhpcy5zZWxlY3RfdHlwZSA9IDE7XG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjueahOWbnuiwgyzlj6/ku6XlnKjov5nph4zmjZXojrfnm7jlhbPoioLngrnmiJbogIXnu4Tku7ZcbiAgICBvcGVuQ2FsbEJhY2s6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5tYWluX3BhbmVsID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcIm1haW5fcGFuZWxcIik7XG4gICAgICAgIHZhciBzaXplID0gdGhpcy5tYWluX3BhbmVsLmdldENvbnRlbnRTaXplKCk7XG4gICAgICAgIHRoaXMuY2xvc2VfYnRuID10aGlzLm1haW5fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJjbG9zZV9idG5cIik7XG4gICAgICAgIHRoaXMudG9wX3BhbmVsID0gdGhpcy5tYWluX3BhbmVsLmdldENoaWxkQnlOYW1lKFwidG9wX3BhbmVsXCIpO1xuICAgICAgICB2YXIgdGl0bGUgPSB0aGlzLnRvcF9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcInRpdGxlX2xhYmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgIHRpdGxlLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi6Ieq6YCJ56S85YyFXCIpO1xuICAgIFxuICAgICAgICAvL+mihuWPluaMiemSrlxuICAgICAgICB0aGlzLnVzZV9idG4gPSB0aGlzLm1haW5fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJ1c2VfYnRuXCIpO1xuICAgICAgICB2YXIgdXNlX2xhYiA9IHRoaXMudXNlX2J0bi5nZXRDaGlsZEJ5TmFtZShcIkxhYmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgIHVzZV9sYWIuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLkvb/nlKhcIik7XG5cbiAgICAgICAgLy8g5rua5Yqo6YOo5YiGXG4gICAgICAgIHRoaXMuc2Nyb2xsX3ZpZXcgPSB0aGlzLnNlZWtDaGlsZChcIml0ZW1zX2NvbnRlbnRcIik7XG5cbiAgICAgICAgdGhpcy5kZXNjX2xhYmVsID0gVXRpbHMuY3JlYXRlUmljaExhYmVsKDI0LCBuZXcgY2MuQ29sb3IoMHg3NiwweDQ1LDB4MTksIDB4ZmYpLCBjYy52MigwLjUsIDEpLCBjYy52MihzaXplLndpZHRoLzIsNjI1KSxudWxsLDQwMCk7XG4gICAgICAgIHRoaXMubWFpbl9wYW5lbC5hZGRDaGlsZCh0aGlzLmRlc2NfbGFiZWwubm9kZSk7XG4gICAgfSxcblxuICAgIC8vIOiuvue9ruaVsOaNrlxuICAgIHVwZGF0ZUdpZnRMaXN0OmZ1bmN0aW9uKGdpZnRpZCxnaWZ0QmlkLCBnb29kc19saXN0LCBjaG9vc2VfbnVtKXtcbiAgICAgICAgdGhpcy5naWZ0aWQgPSBnaWZ0aWQ7XG4gICAgICAgIHRoaXMuZ2lmdEJpZCA9IGdpZnRCaWQ7XG4gICAgICAgIHRoaXMuZ29vZHNfbGlzdCA9IGdvb2RzX2xpc3QgfHwgW107XG4gICAgICAgIHRoaXMuY2hvb3NlX251bSA9IGNob29zZV9udW0gfHwgMTtcbiAgICAgICAgLy8g54mp5ZOB5YiX6KGoXG4gICAgICAgIHRoaXMuZGVzY19sYWJlbC5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCLor7fku47ku6XkuIvlpZblirHkuK3pgInmi6klc+S4qlwiKSwgdGhpcy5jaG9vc2VfbnVtICk7XG5cbiAgICAgICAgaWYoIXRoaXMuaXRlbV9saXN0KXtcbiAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0ID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBpZighdGhpcy5uYW1lX2xpc3Qpe1xuICAgICAgICAgICAgdGhpcy5uYW1lX2xpc3QgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzY3JvbGxfc2l6ZSA9IHRoaXMuc2Nyb2xsX3ZpZXcuZ2V0Q29udGVudFNpemUoKTtcbiAgICAgICAgdmFyIGxlbiA9IDA7XG4gICAgICAgIHZhciBSb2xlQ29udHJvbGxlciAgICAgID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKTtcbiAgICAgICAgdmFyIHJvbGVfdm8gPSBSb2xlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmdldFJvbGVWbygpO1xuXG4gICAgICAgIGZvcih2YXIgaSBpbiB0aGlzLmdvb2RzX2xpc3Qpe1xuICAgICAgICAgICAgaWYodGhpcy5nb29kc19saXN0W2ldLm1pbl9sZXYgPD1yb2xlX3ZvLmxldiAmJiB0aGlzLmdvb2RzX2xpc3RbaV0ubWF4X2xldiA+PXJvbGVfdm8ubGV2KXtcbiAgICAgICAgICAgICAgICBsZW4gPSBsZW4rMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtYXhfaGVpZ2h0ID0gTWF0aC5tYXgoc2Nyb2xsX3NpemUuaGVpZ2h0LCBsZW4qMTI4ICsyMCk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnNjcm9sbF92aWV3LnNldENvbnRlbnRTaXplKGNjLnNpemUoc2Nyb2xsX3NpemUud2lkdGgsIG1heF9oZWlnaHQpKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMTtcbiAgICAgICAgZm9yKHZhciBpIGluIHRoaXMuZ29vZHNfbGlzdCl7XG4gICAgICAgICAgICB2YXIgdiA9IHRoaXMuZ29vZHNfbGlzdFtpXTtcblxuICAgICAgICAgICAgaWYodi5taW5fbGV2IDw9cm9sZV92by5sZXYgJiYgdi5tYXhfbGV2ID49cm9sZV92by5sZXYpe1xuICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gdjtcbiAgICAgICAgICAgICAgICB2YXIgeDtcbiAgICAgICAgICAgICAgICB2YXIgeTtcbiAgICAgICAgICAgICAgICB4ID0gc2Nyb2xsX3NpemUud2lkdGgvMjtcbiAgICAgICAgICAgICAgICB5ID1tYXhfaGVpZ2h0IC0xMjgqaW5kZXg7XG5cbiAgICAgICAgICAgICAgICB2YXIgYmlkID0gdGVtcC5iaWQ7XG4gICAgICAgICAgICAgICAgaWYoIXRoaXMuaXRlbV9saXN0W2luZGV4XSl7XG4gICAgICAgICAgICAgICAgICAgIHZhciBHaWZ0U2VsZWN0SXRlbSA9IHJlcXVpcmUoXCJnaWZ0X3NlbGVjdF9pdGVtX3BhbmVsXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtpbmRleF0gPSBuZXcgR2lmdFNlbGVjdEl0ZW0oaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtpbmRleF0uc2V0UGFyZW50KHRoaXMuc2Nyb2xsX3ZpZXcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtpbmRleF0uc2V0UG9zaXRpb24oeCwgeSk7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB7YmFzZV9pZDogYmlkLHF1YW50aXR5OiB0ZW1wLm51bX1cbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtpbmRleF0uc2V0RGF0YShkYXRhKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0W2luZGV4XS5hZGRDYWxsQmFjayhmdW5jdGlvbihpbmRleCx2byl7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpZCA9IGluZGV4IHx8IDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tDYWxsQmFjayhpZCwgdm8uYmFzZV9pZCwgdm8ucXVhbnRpdHkpO1xuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCArMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyDpgInmi6nliJfooajnva7nqbpcbiAgICAgICAgdGhpcy5zZWxlY3RfbGlzdCA9IFtdO1xuICAgIH0sXG5cbiAgICAvLyDngrnlh7vnmoTkuovku7ZcbiAgICBjbGlja0NhbGxCYWNrOmZ1bmN0aW9uKGdvb2RzX2lkLCBiaWQsIG51bSl7XG4gICAgICAgIC8vIOWIpOaWreivpWJpZOaYr+WQpuWtmOWcqOeahFxuICAgICAgICBpZih0aGlzLnNlbGVjdF9saXN0ICYmIHRoaXMuc2VsZWN0X2xpc3QubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICBmb3IodmFyIGkgPSB0aGlzLnNlbGVjdF9saXN0Lmxlbmd0aC0xOyBpPj0wO2ktLSl7XG4gICAgICAgICAgICAgICAgdmFyIHRlbXBfaWQgPSB0aGlzLnNlbGVjdF9saXN0W2ldLmdvb2RzX2lkO1xuICAgICAgICAgICAgICAgIGlmKHRlbXBfaWQgPT0gZ29vZHNfaWQpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdF9saXN0LnNwbGljZShpLDEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkU3RhdGUoZ29vZHNfaWQsIGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyDliKTmlq3mlbDph4/mmK/lkKbmu6HkuoZcbiAgICAgICAgaWYodGhpcy5zZWxlY3RfbGlzdC5sZW5ndGggPj0gdGhpcy5jaG9vc2VfbnVtKXtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5zZWxlY3RfbGlzdC5zaGlmdCgpO1xuICAgICAgICAgICAgdmFyIHRlbXBfZ29vZHNfaWQgPSBpdGVtLmdvb2RzX2lkXG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkU3RhdGUodGVtcF9nb29kc19pZCwgZmFsc2UpO1xuICAgIC8vIC0tICAgICAgICBtZXNzYWdlMihcIumAieaLqeaVsOmHj+W3sua7oe+8gVwiKVxuICAgIC8vIC0tICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOaPkuWFpeaVsOaNrlxuICAgICAgICB0aGlzLnNlbGVjdF9saXN0LnB1c2goe2dvb2RzX2lkOmdvb2RzX2lkLGJpZDpiaWQsbnVtOiBudW19KTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFN0YXRlKGdvb2RzX2lkLCB0cnVlKTtcbiAgICB9LFxuXG4gICAgc2V0U2VsZWN0ZWRTdGF0ZTpmdW5jdGlvbihpZCwgYm9vbCl7XG4gICAgICAgIGlmKHRoaXMuaXRlbV9saXN0KXtcbiAgICAgICAgICAgIGZvcih2YXIgaSBpbiB0aGlzLml0ZW1fbGlzdCl7XG4gICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLml0ZW1fbGlzdFtpXTtcbiAgICAgICAgICAgICAgICBpZihpdGVtLmluZGV4ICYmIGl0ZW0uaW5kZXggPT0gaWQpe1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldFNlbGVjdGVkKGJvb2wpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOS6i+S7tuebkeWQrOeahOaOpeWPoyzkuI3pnIDopoHmiYvliqjosIPnlKgs5aaC5p6c5piv5L2/55SoZ2NvcmUuR2xvYmFsRXZlbnTnm5HlkKws5Y+v5Lul55u05o6l6LCD55SoYWRkR2xvYmFsRXZlbnRcbiAgICByZWdpc3RlckV2ZW50OmZ1bmN0aW9uKCl7XG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy51c2VfYnRuLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZih0aGlzLnNlbGVjdF9saXN0ICYmIHRoaXMuc2VsZWN0X2xpc3QubGVuZ3RoID49IHRoaXMuY2hvb3NlX251bSl7XG4gICAgICAgICAgICAgICAgdmFyIGdpZnRfaWQgPSB0aGlzLmdpZnRpZDtcbiAgICAgICAgICAgICAgICB2YXIgY2hvc2VfaWRzID0gW107XG4gICAgICAgICAgICAgICAgdmFyIGdvb2RzX251bSA9IDE7XG4gICAgICAgICAgICAgICAgZm9yKHZhciBpIGluIHRoaXMuc2VsZWN0X2xpc3Qpe1xuICAgICAgICAgICAgICAgICAgICBjaG9zZV9pZHMucHVzaCh7bmFtZToxLHZhbHVlOiB0aGlzLnNlbGVjdF9saXN0W2ldLmJpZCxzdHI6XCJcIn0pO1xuICAgICAgICAgICAgICAgICAgICBnb29kc19udW0gPSB0aGlzLnNlbGVjdF9saXN0W2ldLm51bTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIEJhY2tQYWNrQ29uc3QgPSByZXF1aXJlKFwiYmFja3BhY2tfY29uc3RcIik7XG4gICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gdGhpcy5tb2RlbC5nZXRQYWNrSXRlbU51bUJ5QmlkKEJhY2tQYWNrQ29uc3QuQmFnX0NvZGUuQkFDS1BBQ0ssdGhpcy5naWZ0QmlkKTtcbiAgICAgICAgICAgICAgICBpZihjb3VudCA+MSAmJiB0aGlzLmNob29zZV9udW09PTEpe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwub3BlbkJhdGNoVXNlSXRlbVZpZXcodHJ1ZSwgdGhpcy5naWZ0X3ZvLDEsY2hvc2VfaWRzKVxuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0cmwuc2VuZGVyMTA1MTUoZ2lmdF9pZCwxLGNob3NlX2lkcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3RybC5jbG9zZUdpZnRTZWxlY3RQYW5lbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UoY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwi6K+36YCJ5oupPGNvbG9yPSM1YTUwM2M+JWTkuKo8L2NvbG9yPueJqeWTge+8gVwiKSwgIHRoaXMuY2hvb3NlX251bSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMSk7XG5cbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLmNsb3NlX2J0biwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5jdHJsLmNsb3NlR2lmdFNlbGVjdFBhbmVsKCk7XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMik7XG4gICAgXG4gICAgfSxcblxuLy8gICAgIGZ1bmN0aW9uIEdpZnRTZWxlY3RQYW5lbDpjcmVhdGVUaXRsZVR4dCh0eHQsIHgsIHkpXG4vLyAgICAgbG9jYWwgY29udGFpbmVyID0gY2N1aS5XaWRnZXQ6Y3JlYXRlKClcbi8vICAgICBjb250YWluZXI6c2V0QW5jaG9yUG9pbnQoY2MucCgwLjUsIDEpKVxuLy8gICAgIGxvY2FsIHNpemUgPSBjYy5zaXplKDQwMCwgMjApXG4vLyAgICAgY29udGFpbmVyOnNldENvbnRlbnRTaXplKHNpemUpXG4vLyAgICAgY29udGFpbmVyOnNldFBvc2l0aW9uKGNjLnAoeCwgeSkpXG4vLyAgICAgbG9jYWwgYmcgPSBjcmVhdGVTcHJpdGUoUGF0aFRvb2wuZ2V0Q29tbW9uUmVzKFwibGluZTdcIiksIDAsIDIwKVxuLy8gICAgIGJnOnNldEFuY2hvclBvaW50KGNjLnAoMCwgMSkpXG4vLyAgICAgY29udGFpbmVyOmFkZENoaWxkKGJnKVxuLy8gICAgIGJnID0gY3JlYXRlU3ByaXRlKFBhdGhUb29sLmdldENvbW1vblJlcyhcImxpbmU3XCIpLCBzaXplLndpZHRoLCAyMClcbi8vICAgICBiZzpzZXRGbGlwcGVkWCh0cnVlKVxuLy8gICAgIGJnOnNldEFuY2hvclBvaW50KGNjLnAoMSwgMSkpXG4vLyAgICAgY29udGFpbmVyOmFkZENoaWxkKGJnKVxuLy8gICAgIGxvY2FsIHRpdGxlID0gY3JlYXRlTGFiZWwoMjIsQ29uZmlnLkNvbG9yRGF0YS5kYXRhX2NvbG9yNFsxXSxuaWwsc2l6ZS53aWR0aC8yLCAxMixcIlwiLHRoaXMuc2Nyb2xsX3ZpZXcsbmlsLGNjLnAoMCwwKSlcbi8vICAgICB0aXRsZTpzZXRTdHJpbmcodHh0KVxuLy8gICAgIGNvbnRhaW5lcjphZGRDaGlsZCh0aXRsZSlcbi8vICAgICByZXR1cm4gY29udGFpbmVyLCB0aXRsZVxuLy8gZW5kXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDpmdW5jdGlvbihnaWZ0dm8pe1xuICAgICAgICB2YXIgY2hvb3NlX251bSA9IDE7XG4gICAgICAgIHRoaXMuZ2lmdF92byA9IGdpZnR2bztcbiAgICAgICAgaWYoIWdpZnR2bylyZXR1cm47XG4gICAgICAgIHZhciBnaWZ0SWQgPSBnaWZ0dm8uaWQ7XG5cbiAgICAgICAgdmFyIGdpZnRCaWQgPSBnaWZ0dm8uYmFzZV9pZDtcbiAgICAgICAgdmFyIGl0ZW1fbGlzdCA9IFtdO1xuICAgICAgICBpZihDb25maWcuZ2lmdF9kYXRhLmRhdGFfY2hvb3NlX2dpZnRbZ2lmdEJpZF0pe1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSBVdGlscy5nZXRJdGVtQ29uZmlnKGdpZnRCaWQpO1xuICAgICAgICAgICAgaWYoaXRlbSAmJiBpdGVtLmV4dCAmJiBpdGVtLmV4dC5sZW5ndGg+MCl7XG4gICAgICAgICAgICAgICAgZm9yKHZhciBpIGluIGl0ZW0uZXh0KXtcbiAgICAgICAgICAgICAgICAgICAgY2hvb3NlX251bSA9IGl0ZW0uZXh0W2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBnaWZ0X2NmZyA9IENvbmZpZy5naWZ0X2RhdGEuZGF0YV9jaG9vc2VfZ2lmdFtnaWZ0QmlkXTtcbiAgICAgICAgICAgIGZvcih2YXIgaSBpbiBnaWZ0X2NmZyl7XG4gICAgICAgICAgICAgICAgaXRlbV9saXN0LnB1c2goZ2lmdF9jZmdbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGl0ZW1fbGlzdC5zb3J0KFV0aWxzLnRhYmxlTG93ZXJTb3J0ZXIoW1wic29ydF9pZFwiXSkpO1xuICAgICAgICB0aGlzLnVwZGF0ZUdpZnRMaXN0KGdpZnRJZCwgZ2lmdEJpZCwgaXRlbV9saXN0LCBjaG9vc2VfbnVtKTtcbiAgICB9LFxuXG4gICAgLy8g5YWz6Zet56qX5L2T5Zue6LCDLOmcgOimgeWcqOi/memHjOiwg+eUqOivpeeql+S9k+aJgOWxnmNvbnRyb2xsZXLnmoRjbG9zZeaWueazleayoeeUqOS6jue9ruepuuivpeeql+S9k+WunuS+i+WvueixoVxuICAgIGNsb3NlQ2FsbEJhY2s6ZnVuY3Rpb24oKXtcbiAgICAgICAgZm9yKHZhciBpIGluIHRoaXMuaXRlbV9saXN0KXtcbiAgICAgICAgICAgIHRoaXMuaXRlbV9saXN0W2ldLmRlbGV0ZU1lKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pdGVtX2xpc3QgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdF9saXN0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5uYW1lX2xpc3QgPSBudWxsO1xuICAgIH0sXG59KSJdfQ==