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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/backpack/view/backpack_sell_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, '9095fKXR8FCVLm8dnTW5vou', 'backpack_sell_window');
// Scripts/mod/backpack/view/backpack_sell_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     背包内出售物品的面板
// <br/>Create: 2019-04-15 16:31:04
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var BackPackConst = require("backpack_const");
 
var Backpack_sellWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("backpack", "backpack_sell_window");
    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.item_list = [];
    this.wait_sell_list = [];
  },
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    this.background = this.root_wnd.getChildByName("background");
    this.container = this.root_wnd.getChildByName("container");
    this.total_width = this.container.getContentSize().width;
    this.cell_resoult = this.container.getChildByName("cell_resoult"); // img是资产图片节点,是个image  value 是值
 
    this.cell_resoult.active = false;
    var aaaa = cc.instantiate(this.cell_resoult);
    this.container.addChild(aaaa);
    this.cancel_btn = this.container.getChildByName("cancel_btn");
    this.confirm_btn = this.container.getChildByName("confirm_btn");
    var label = this.cancel_btn.getChildByName("label").getComponent(cc.Label);
    label.string = Utils.TI18N("取消");
    this.cell_label = this.confirm_btn.getChildByName("label");
    this.win_title = this.container.getChildByName("win_title").getComponent(cc.Label);
    this.sell_desc = this.container.getChildByName("sell_desc").getComponent(cc.Label);
    this.sell_title = this.container.getChildByName("sell_title").getComponent(cc.Label);
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    Utils.onTouchEnd(this.cancel_btn, function () {
      this.ctrl.openSellWindow(false);
    }.bind(this), 1);
    Utils.onTouchEnd(this.background, function () {
      this.ctrl.openSellWindow(false);
    }.bind(this), 2);
    Utils.onTouchEnd(this.confirm_btn, function () {
      if (Utils.next(this.wait_sell_list) && this.bag_code) {
        this.ctrl.sender10522(this.bag_code, this.wait_sell_list);
      }
    }.bind(this), 1);
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd(info) {
    var bag_code = info[0];
    this.bag_code = bag_code;
    this.wait_sell_list = [];
    var sell_value_list = [];
    var list = info[1];
 
    for (var i in list) {
      var v = list[i];
 
      if (v.id != null && v.config != null && v.config.value && Utils.next(v.config.value)) {
        this.wait_sell_list.push({
          id: v.id,
          bid: v.base_id,
          num: v.quantity
        });
 
        for (var j in v.config.value) {
          var value = v.config.value[j];
 
          if (sell_value_list[value[0]] == nil) {
            sell_value_list[value[0]] = {
              id: value[0],
              num: 0
            };
          }
 
          sell_value_list[value[0]].num = sell_value_list[value[0]].num + value[1] * v.quantity;
        } // 如果是装备,则还需要判断他的精炼附加
 
 
        if (this.bag_code == BackPackConst.Bag_Code.EQUIPS) {
          if (v.enchant != 0) {
            var config = gdata("partner_eqm_data", "data_partner_eqm", Utils.getNorKey(v.config.type, v.enchant));
 
            if (config != null && config.sell != null && Utils.next(config.sell) != null) {
              for (var j in config.sell) {
                var value = config.sell[j];
 
                if (sell_value_list[value[0]] == null) {
                  sell_value_list[value[0]] = {
                    id: value[0],
                    num: 0
                  };
                }
 
                sell_value_list[value[0]].num = sell_value_list[value[0]].num + value[1] * v.quantity;
              }
            }
          }
 
          var stone_id = 0;
          var stone_count = 0;
 
          for (var j in v.gemstones) {
            var key = Utils.getNorKey(v.config.type, d.lev);
            var stone_config = Config.partner_gemstone_data.data_upgrade[key];
 
            if (stone_config && Utils.next(stone_config.add)) {
              stone_id = stone_config.add[0][0];
              stone_count = stone_count + stone_config.add[0][1];
            }
          }
 
          if (stone_count > 0) {
            if (sell_value_list[stone_id] == null) {
              sell_value_list[stone_id] = {
                id: stone_id,
                num: 0
              };
            }
 
            sell_value_list[stone_id].num = sell_value_list[stone_id].num + stone_count;
          }
        }
      }
    }
 
    this.showSellItemValue(sell_value_list);
    var title = "";
 
    if (bag_code == BackPackConst.Bag_Code.BACKPACK) {
      title = Utils.TI18N("分解");
    } else if (bag_code == BackPackConst.Bag_Code.EQUIPS) {
      title = Utils.TI18N("熔炼");
    }
 
    this.win_title.string = title;
    this.cell_label.string = title;
    this.sell_desc.string = cc.js.formatStr(Utils.TI18N("%s后物品将不可找回"), title);
    this.sell_title.string = cc.js.formatStr(Utils.TI18N("%s后将获得下列物品:"), title);
  },
 
  /**
   * desc:展示待出售物品可获得资产
   * author:{author}
   * list
   * return
   */
  showSellItemValue: function showSellItemValue(list) {
    if (list == null) return;
    if (!this.cell_resoult) return;
    var sum = 0;
    var sell_item = null;
    var sell_list = [];
    var max_column = 3; //最大列数
 
    var total_width = 0;
    var init_y = this.cell_resoult.y;
    var width = this.cell_resoult.getContentSize().width;
    var height = this.cell_resoult.getContentSize().height;
 
    for (var i in list) {
      var v = list[i];
      var config = Utils.getItemConfig(v.id);
 
      if (config != null) {
        sum = sum + 1;
        sell_item = cc.instantiate(this.cell_resoult);
        sell_item.active = true;
        this.container.addChild(sell_item);
        sell_item.img = sell_item.getChildByName("item_img").getComponent(cc.Sprite);
        this.loadRes(PathTool.getItemRes(config.icon), function (sf_obj) {
          sell_item.img.spriteFrame = sf_obj;
        }.bind(this));
        sell_item.value = sell_item.getChildByName("value").getComponent(cc.Label);
        sell_item.value.string = Math.floor(v.num); // -- sell_item:setPositionY(this.init_y)
 
        sell_list.push(sell_item);
 
        if (sum < 4) {
          total_width = total_width + sell_item.getContentSize().width;
        }
      }
    }
 
    var row_count = Math.floor((sell_list.length - 1) / max_column) + 1;
    var start_x = (this.total_width - (sell_list.length - 1) * 18 - total_width) * 0.5;
    var start_y = init_y + (row_count - 1) * height;
 
    if (row_count >= 2) {
      start_y = start_y - 10;
    }
 
    for (var i in sell_list) {
      var x = start_x + (i - 1) % max_column * (width + 18);
      var y = start_y - Math.floor((i - 1) / max_column) * (height + 10);
      item.setPosition(x, y);
    }
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    this.ctrl.openSellWindow(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxiYWNrcGFja1xcdmlld1xcYmFja3BhY2tfc2VsbF93aW5kb3cuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiQmFja1BhY2tDb25zdCIsIkJhY2twYWNrX3NlbGxXaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ2aWV3VGFnIiwiU0NFTkVfVEFHIiwiZGlhbG9ndWUiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJNaW5pIiwiY3RybCIsImFyZ3VtZW50cyIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJpbml0Q29uZmlnIiwiaXRlbV9saXN0Iiwid2FpdF9zZWxsX2xpc3QiLCJvcGVuQ2FsbEJhY2siLCJiYWNrZ3JvdW5kIiwicm9vdF93bmQiLCJnZXRDaGlsZEJ5TmFtZSIsImNvbnRhaW5lciIsInRvdGFsX3dpZHRoIiwiZ2V0Q29udGVudFNpemUiLCJ3aWR0aCIsImNlbGxfcmVzb3VsdCIsImFjdGl2ZSIsImFhYWEiLCJpbnN0YW50aWF0ZSIsImFkZENoaWxkIiwiY2FuY2VsX2J0biIsImNvbmZpcm1fYnRuIiwibGFiZWwiLCJnZXRDb21wb25lbnQiLCJMYWJlbCIsInN0cmluZyIsIlV0aWxzIiwiVEkxOE4iLCJjZWxsX2xhYmVsIiwid2luX3RpdGxlIiwic2VsbF9kZXNjIiwic2VsbF90aXRsZSIsInJlZ2lzdGVyRXZlbnQiLCJvblRvdWNoRW5kIiwib3BlblNlbGxXaW5kb3ciLCJiaW5kIiwibmV4dCIsImJhZ19jb2RlIiwic2VuZGVyMTA1MjIiLCJvcGVuUm9vdFduZCIsImluZm8iLCJzZWxsX3ZhbHVlX2xpc3QiLCJsaXN0IiwiaSIsInYiLCJpZCIsImNvbmZpZyIsInZhbHVlIiwicHVzaCIsImJpZCIsImJhc2VfaWQiLCJudW0iLCJxdWFudGl0eSIsImoiLCJuaWwiLCJCYWdfQ29kZSIsIkVRVUlQUyIsImVuY2hhbnQiLCJnZGF0YSIsImdldE5vcktleSIsInR5cGUiLCJzZWxsIiwic3RvbmVfaWQiLCJzdG9uZV9jb3VudCIsImdlbXN0b25lcyIsImtleSIsImQiLCJsZXYiLCJzdG9uZV9jb25maWciLCJDb25maWciLCJwYXJ0bmVyX2dlbXN0b25lX2RhdGEiLCJkYXRhX3VwZ3JhZGUiLCJhZGQiLCJzaG93U2VsbEl0ZW1WYWx1ZSIsInRpdGxlIiwiQkFDS1BBQ0siLCJqcyIsImZvcm1hdFN0ciIsInN1bSIsInNlbGxfaXRlbSIsInNlbGxfbGlzdCIsIm1heF9jb2x1bW4iLCJpbml0X3kiLCJ5IiwiaGVpZ2h0IiwiZ2V0SXRlbUNvbmZpZyIsImltZyIsIlNwcml0ZSIsImxvYWRSZXMiLCJnZXRJdGVtUmVzIiwiaWNvbiIsInNmX29iaiIsInNwcml0ZUZyYW1lIiwiTWF0aCIsImZsb29yIiwicm93X2NvdW50IiwibGVuZ3RoIiwic3RhcnRfeCIsInN0YXJ0X3kiLCJ4IiwiaXRlbSIsInNldFBvc2l0aW9uIiwiY2xvc2VDYWxsQmFjayJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGFBQWEsR0FBR0QsT0FBTyxDQUFDLGdCQUFELENBQTNCOztBQUVBLElBQUlFLG1CQUFtQixHQUFHQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUMvQixhQUFTQyxRQURzQjtBQUUvQkMsRUFBQUEsSUFBSSxFQUFFLGdCQUFZO0FBQ2QsU0FBS0MsVUFBTCxHQUFrQlIsUUFBUSxDQUFDUyxhQUFULENBQXVCLFVBQXZCLEVBQW1DLHNCQUFuQyxDQUFsQjtBQUNBLFNBQUtDLE9BQUwsR0FBZUMsU0FBUyxDQUFDQyxRQUF6QixDQUZjLENBRW9DOztBQUNsRCxTQUFLQyxRQUFMLEdBQWdCQyxPQUFPLENBQUNDLElBQXhCLENBSGMsQ0FHOEI7O0FBQzVDLFNBQUtDLElBQUwsR0FBWUMsU0FBUyxDQUFD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TUFBeEM7O0FBQ0EsUUFBR1csU0FBUyxJQUFJLENBQWhCLEVBQWtCO0FBQ2RHLE1BQUFBLE9BQU8sR0FBR0EsT0FBTyxHQUFHLEVBQXBCO0FBQ0g7O0FBQ0QsU0FBSSxJQUFJdkQsQ0FBUixJQUFhcUMsU0FBYixFQUF1QjtBQUNuQixVQUFJbUIsQ0FBQyxHQUFHRixPQUFPLEdBQUksQ0FBQ3RELENBQUMsR0FBQyxDQUFILElBQU9zQyxVQUFSLElBQXFCbkUsS0FBSyxHQUFDLEVBQTNCLENBQWxCO0FBQ0EsVUFBSXFFLENBQUMsR0FBR2UsT0FBTyxHQUFHTCxJQUFJLENBQUNDLEtBQUwsQ0FBVyxDQUFDbkQsQ0FBQyxHQUFDLENBQUgsSUFBTXNDLFVBQWpCLEtBQWdDRyxNQUFNLEdBQUcsRUFBekMsQ0FBbEI7QUFDQWdCLE1BQUFBLElBQUksQ0FBQ0MsV0FBTCxDQUFpQkYsQ0FBakIsRUFBb0JoQixDQUFwQjtBQUNIO0FBQ0osR0FoTDhCO0FBa0wvQjtBQUNBbUIsRUFBQUEsYUFBYSxFQUFDLHlCQUFVO0FBQ3BCLFNBQUt0RyxJQUFMLENBQVVrQyxjQUFWLENBQXlCLEtBQXpCO0FBQ0g7QUFyTDhCLENBQVQsQ0FBMUIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAYXV0aG9yOiB4eHhAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICDog4zljIXlhoXlh7rllK7nianlk4HnmoTpnaLmnb9cbi8vIDxici8+Q3JlYXRlOiAyMDE5LTA0LTE1IDE2OjMxOjA0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xudmFyIEJhY2tQYWNrQ29uc3QgPSByZXF1aXJlKFwiYmFja3BhY2tfY29uc3RcIik7XG5cbnZhciBCYWNrcGFja19zZWxsV2luZG93ID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VWaWV3LFxuICAgIGN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcImJhY2twYWNrXCIsIFwiYmFja3BhY2tfc2VsbF93aW5kb3dcIik7XG4gICAgICAgIHRoaXMudmlld1RhZyA9IFNDRU5FX1RBRy5kaWFsb2d1ZTsgICAgICAgICAgICAgICAgLy/or6XnqpfkvZPmiYDlsZ51aeWxgue6pyzlhajlsY91aemcgOimgeWcqHVp5bGCLOmdnuWFqOWxj3Vp5ZyoZGlhbG9ndWXlsYIs6L+Z5Liq6KaB5rOo5oSPXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLk1pbmk7ICAgICAgICAgICAgICAgLy/mmK/lkKbmmK/lhajlsY/nqpfkvZMgIFdpblR5cGUuRnVsbCwgV2luVHlwZS5CaWcsIFdpblR5cGUuTWluaSwgV2luVHlwZS5UaXBzXG4gICAgICAgIHRoaXMuY3RybCA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuY3RybC5nZXRNb2RlbCgpO1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbkuIDkupvphY3nva7mlbDmja4s5Y+v5Lul55So5LqO5aOw5piO5LiA5Lqb5Y+Y6YeP5LmL57G755qEXG4gICAgaW5pdENvbmZpZzpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLml0ZW1fbGlzdCA9IFtdO1xuICAgICAgICB0aGlzLndhaXRfc2VsbF9saXN0ID0gW107XG4gICAgfSxcblxuICAgIC8vIOmihOWItuS9k+WKoOi9veWujOaIkOS5i+WQjueahOWbnuiwgyzlj6/ku6XlnKjov5nph4zmjZXojrfnm7jlhbPoioLngrnmiJbogIXnu4Tku7ZcbiAgICBvcGVuQ2FsbEJhY2s6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcImJhY2tncm91bmRcIik7XG4gICAgXG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcImNvbnRhaW5lclwiKTtcbiAgICAgICAgdGhpcy50b3RhbF93aWR0aCA9IHRoaXMuY29udGFpbmVyLmdldENvbnRlbnRTaXplKCkud2lkdGg7XG4gICAgXG4gICAgICAgIHRoaXMuY2VsbF9yZXNvdWx0ID0gdGhpcy5jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJjZWxsX3Jlc291bHRcIikgIC8vIGltZ+aYr+i1hOS6p+WbvueJh+iKgueCue+8jOaYr+S4qmltYWdlICB2YWx1ZSDmmK/lgLxcbiAgICAgICAgdGhpcy5jZWxsX3Jlc291bHQuYWN0aXZlID0gZmFsc2U7XG4gICAgXG4gICAgICAgIHZhciBhYWFhID0gY2MuaW5zdGFudGlhdGUodGhpcy5jZWxsX3Jlc291bHQpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5hZGRDaGlsZChhYWFhKTtcbiAgICBcbiAgICAgICAgdGhpcy5jYW5jZWxfYnRuID0gdGhpcy5jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJjYW5jZWxfYnRuXCIpO1xuICAgICAgICB0aGlzLmNvbmZpcm1fYnRuID0gdGhpcy5jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJjb25maXJtX2J0blwiKTtcbiAgICBcbiAgICAgICAgdmFyIGxhYmVsID0gdGhpcy5jYW5jZWxfYnRuLmdldENoaWxkQnlOYW1lKFwibGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgbGFiZWwuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLlj5bmtohcIik7XG4gICAgXG4gICAgICAgIHRoaXMuY2VsbF9sYWJlbCA9IHRoaXMuY29uZmlybV9idG4uZ2V0Q2hpbGRCeU5hbWUoXCJsYWJlbFwiKTtcbiAgICAgICAgdGhpcy53aW5fdGl0bGUgPSB0aGlzLmNvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIndpbl90aXRsZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgIFxuICAgICAgICB0aGlzLnNlbGxfZGVzYyA9IHRoaXMuY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwic2VsbF9kZXNjXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMuc2VsbF90aXRsZSA9IHRoaXMuY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwic2VsbF90aXRsZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDpmdW5jdGlvbigpe1xuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuY2FuY2VsX2J0biwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5TZWxsV2luZG93KGZhbHNlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKTtcblxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuYmFja2dyb3VuZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5TZWxsV2luZG93KGZhbHNlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAyKTtcblxuICAgICAgICBVdGlscy5vblRvdWNoRW5kKHRoaXMuY29uZmlybV9idG4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmKFV0aWxzLm5leHQodGhpcy53YWl0X3NlbGxfbGlzdCkgJiYgdGhpcy5iYWdfY29kZSl7XG4gICAgICAgICAgICAgICAgdGhpcy5jdHJsLnNlbmRlcjEwNTIyKHRoaXMuYmFnX2NvZGUsIHRoaXMud2FpdF9zZWxsX2xpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LmJpbmQodGhpcyksIDEpO1xuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDpmdW5jdGlvbihpbmZvKXtcbiAgICAgICAgdmFyIGJhZ19jb2RlID0gaW5mb1swXTtcbiAgICAgICAgdGhpcy5iYWdfY29kZSA9IGJhZ19jb2RlO1xuICAgICAgICB0aGlzLndhaXRfc2VsbF9saXN0ID0gW107XG4gICAgICAgIHZhciBzZWxsX3ZhbHVlX2xpc3QgPSBbXTtcbiAgICAgICAgdmFyIGxpc3QgPSBpbmZvWzFdO1xuICAgICAgICBmb3IodmFyIGkgaW4gbGlzdCl7XG4gICAgICAgICAgICB2YXIgdiA9IGxpc3RbaV07XG4gICAgICAgICAgICBpZih2LmlkICE9IG51bGwgJiYgdi5jb25maWcgIT0gbnVsbCAmJiB2LmNvbmZpZy52YWx1ZSAmJiBVdGlscy5uZXh0KHYuY29uZmlnLnZhbHVlKSl7XG4gICAgICAgICAgICAgICAgdGhpcy53YWl0X3NlbGxfbGlzdC5wdXNoKHtpZDogdi5pZCwgYmlkOiB2LmJhc2VfaWQsIG51bTogdi5xdWFudGl0eX0pO1xuICAgICAgICAgICAgICAgIGZvcih2YXIgaiBpbiB2LmNvbmZpZy52YWx1ZSl7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHYuY29uZmlnLnZhbHVlW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZihzZWxsX3ZhbHVlX2xpc3RbdmFsdWVbMF1dID09IG5pbCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxsX3ZhbHVlX2xpc3RbdmFsdWVbMF1dID0ge2lkOnZhbHVlWzBdLCBudW06MH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2VsbF92YWx1ZV9saXN0W3ZhbHVlWzBdXS5udW0gPSBzZWxsX3ZhbHVlX2xpc3RbdmFsdWVbMF1dLm51bSArIHZhbHVlWzFdICogdi5xdWFudGl0eTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzmmK/oo4XlpIfvvIzliJnov5jpnIDopoHliKTmlq3ku5bnmoTnsr7ngrzpmYTliqBcbiAgICAgICAgICAgICAgICBpZih0aGlzLmJhZ19jb2RlID09IEJhY2tQYWNrQ29uc3QuQmFnX0NvZGUuRVFVSVBTKXtcbiAgICAgICAgICAgICAgICAgICAgaWYodi5lbmNoYW50ICE9IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZyA9IGdkYXRhKFwicGFydG5lcl9lcW1fZGF0YVwiLFwiZGF0YV9wYXJ0bmVyX2VxbVwiLFV0aWxzLmdldE5vcktleSh2LmNvbmZpZy50eXBlLCB2LmVuY2hhbnQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvbmZpZyAhPSBudWxsICYmIGNvbmZpZy5zZWxsICE9IG51bGwgJiYgVXRpbHMubmV4dChjb25maWcuc2VsbCkgIT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBqIGluIGNvbmZpZy5zZWxsKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gY29uZmlnLnNlbGxbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNlbGxfdmFsdWVfbGlzdFt2YWx1ZVswXV0gPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxsX3ZhbHVlX2xpc3RbdmFsdWVbMF1dID0ge2lkOiB2YWx1ZVswXSwgbnVtOiAwfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxsX3ZhbHVlX2xpc3RbdmFsdWVbMF1dLm51bSA9IHNlbGxfdmFsdWVfbGlzdFt2YWx1ZVswXV0ubnVtICsgdmFsdWVbMV0gKiB2LnF1YW50aXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvbmVfaWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvbmVfY291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGogaW4gdi5nZW1zdG9uZXMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IFV0aWxzLmdldE5vcktleSh2LmNvbmZpZy50eXBlLCBkLmxldik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RvbmVfY29uZmlnID0gQ29uZmlnLnBhcnRuZXJfZ2Vtc3RvbmVfZGF0YS5kYXRhX3VwZ3JhZGVba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0b25lX2NvbmZpZyAmJiBVdGlscy5uZXh0KHN0b25lX2NvbmZpZy5hZGQpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9uZV9pZCA9IHN0b25lX2NvbmZpZy5hZGRbMF1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvbmVfY291bnQgPSBzdG9uZV9jb3VudCArIHN0b25lX2NvbmZpZy5hZGRbMF1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYoc3RvbmVfY291bnQgPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNlbGxfdmFsdWVfbGlzdFtzdG9uZV9pZF0gPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsbF92YWx1ZV9saXN0W3N0b25lX2lkXSA9IHtpZDogc3RvbmVfaWQsIG51bTogMH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxsX3ZhbHVlX2xpc3Rbc3RvbmVfaWRdLm51bSA9IHNlbGxfdmFsdWVfbGlzdFtzdG9uZV9pZF0ubnVtICsgc3RvbmVfY291bnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93U2VsbEl0ZW1WYWx1ZShzZWxsX3ZhbHVlX2xpc3QpO1xuICAgICAgICB2YXIgdGl0bGUgPSBcIlwiO1xuICAgICAgICBpZihiYWdfY29kZSA9PSBCYWNrUGFja0NvbnN0LkJhZ19Db2RlLkJBQ0tQQUNLKXtcbiAgICAgICAgICAgIHRpdGxlID0gVXRpbHMuVEkxOE4oXCLliIbop6NcIik7XG4gICAgICAgIH1lbHNlIGlmKGJhZ19jb2RlID09IEJhY2tQYWNrQ29uc3QuQmFnX0NvZGUuRVFVSVBTKXtcbiAgICAgICAgICAgIHRpdGxlID0gVXRpbHMuVEkxOE4oXCLnhpTngrxcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndpbl90aXRsZS5zdHJpbmcgPSB0aXRsZTtcbiAgICAgICAgdGhpcy5jZWxsX2xhYmVsLnN0cmluZyA9IHRpdGxlO1xuICAgICAgICB0aGlzLnNlbGxfZGVzYy5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoVXRpbHMuVEkxOE4oXCIlc+WQjueJqeWTgeWwhuS4jeWPr+aJvuWbnlwiKSwgdGl0bGUpO1xuICAgICAgICB0aGlzLnNlbGxfdGl0bGUuc3RyaW5nID0gY2MuanMuZm9ybWF0U3RyKFV0aWxzLlRJMThOKFwiJXPlkI7lsIbojrflvpfkuIvliJfnianlk4HvvJpcIiksIHRpdGxlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZGVzYzrlsZXnpLrlvoXlh7rllK7nianlk4Hlj6/ojrflvpfotYTkuqdcbiAgICAgKiBhdXRob3I6e2F1dGhvcn1cbiAgICAgKiBsaXN0XG4gICAgICogcmV0dXJuXG4gICAgICovXG4gICAgc2hvd1NlbGxJdGVtVmFsdWU6ZnVuY3Rpb24obGlzdCl7XG4gICAgICAgIGlmKGxpc3QgPT0gbnVsbClyZXR1cm47XG4gICAgICAgIGlmKCF0aGlzLmNlbGxfcmVzb3VsdClyZXR1cm47XG4gICAgICAgIHZhciBzdW0gPSAwO1xuICAgICAgICB2YXIgc2VsbF9pdGVtID0gbnVsbDtcbiAgICAgICAgdmFyIHNlbGxfbGlzdCA9IFtdO1xuICAgICAgICB2YXIgbWF4X2NvbHVtbiA9IDM7IC8v5pyA5aSn5YiX5pWwXG4gICAgICAgIHZhciB0b3RhbF93aWR0aCA9IDA7XG4gICAgICAgIHZhciBpbml0X3kgPSB0aGlzLmNlbGxfcmVzb3VsdC55O1xuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmNlbGxfcmVzb3VsdC5nZXRDb250ZW50U2l6ZSgpLndpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5jZWxsX3Jlc291bHQuZ2V0Q29udGVudFNpemUoKS5oZWlnaHQ7XG5cbiAgICAgICAgZm9yKHZhciBpIGluIGxpc3Qpe1xuICAgICAgICAgICAgdmFyIHYgPSBsaXN0W2ldO1xuICAgICAgICAgICAgdmFyIGNvbmZpZyA9IFV0aWxzLmdldEl0ZW1Db25maWcodi5pZCk7XG4gICAgICAgICAgICBpZihjb25maWchPW51bGwpe1xuICAgICAgICAgICAgICAgIHN1bSA9IHN1bSArIDE7XG4gICAgICAgICAgICAgICAgc2VsbF9pdGVtID0gY2MuaW5zdGFudGlhdGUodGhpcy5jZWxsX3Jlc291bHQpO1xuICAgICAgICAgICAgICAgIHNlbGxfaXRlbS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENoaWxkKHNlbGxfaXRlbSk7XG4gICAgICAgICAgICAgICAgc2VsbF9pdGVtLmltZyA9IHNlbGxfaXRlbS5nZXRDaGlsZEJ5TmFtZShcIml0ZW1faW1nXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRJdGVtUmVzKGNvbmZpZy5pY29uKSwgZnVuY3Rpb24oc2Zfb2JqKXtcbiAgICAgICAgICAgICAgICAgICAgc2VsbF9pdGVtLmltZy5zcHJpdGVGcmFtZSAgPSBzZl9vYmo7XG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICBzZWxsX2l0ZW0udmFsdWUgPSBzZWxsX2l0ZW0uZ2V0Q2hpbGRCeU5hbWUoXCJ2YWx1ZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xuICAgICAgICAgICAgICAgIHNlbGxfaXRlbS52YWx1ZS5zdHJpbmcgPSBNYXRoLmZsb29yKHYubnVtKTtcbiAgICAgICAgICAgICAgICAvLyAtLSBzZWxsX2l0ZW06c2V0UG9zaXRpb25ZKHRoaXMuaW5pdF95KVxuICAgICAgICAgICAgICAgIHNlbGxfbGlzdC5wdXNoKHNlbGxfaXRlbSk7XG4gICAgICAgICAgICAgICAgaWYoc3VtIDwgNCl7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsX3dpZHRoID0gdG90YWxfd2lkdGggKyBzZWxsX2l0ZW0uZ2V0Q29udGVudFNpemUoKS53aWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcm93X2NvdW50ID0gTWF0aC5mbG9vcigoc2VsbF9saXN0Lmxlbmd0aCAtIDEpL21heF9jb2x1bW4pICsgMTtcbiAgICAgICAgdmFyIHN0YXJ0X3ggPSAoIHRoaXMudG90YWxfd2lkdGggLSAgKHNlbGxfbGlzdC5sZW5ndGggLSAxKSAqIDE4IC0gdG90YWxfd2lkdGggKSAqIDAuNTtcbiAgICAgICAgdmFyIHN0YXJ0X3kgPSBpbml0X3kgKyAocm93X2NvdW50IC0gMSkqIGhlaWdodDtcbiAgICAgICAgaWYocm93X2NvdW50ID49IDIpe1xuICAgICAgICAgICAgc3RhcnRfeSA9IHN0YXJ0X3kgLSAxMDtcbiAgICAgICAgfVxuICAgICAgICBmb3IodmFyIGkgaW4gc2VsbF9saXN0KXtcbiAgICAgICAgICAgIHZhciB4ID0gc3RhcnRfeCArICgoaS0xKSUgbWF4X2NvbHVtbikqKHdpZHRoKzE4KTtcbiAgICAgICAgICAgIHZhciB5ID0gc3RhcnRfeSAtIE1hdGguZmxvb3IoKGktMSkvbWF4X2NvbHVtbikgKiAoaGVpZ2h0ICsgMTApO1xuICAgICAgICAgICAgaXRlbS5zZXRQb3NpdGlvbih4LCB5KVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8vIOWFs+mXreeql+S9k+WbnuiwgyzpnIDopoHlnKjov5nph4zosIPnlKjor6XnqpfkvZPmiYDlsZ5jb250cm9sbGVy55qEY2xvc2Xmlrnms5XmsqHnlKjkuo7nva7nqbror6XnqpfkvZPlrp7kvovlr7nosaFcbiAgICBjbG9zZUNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMuY3RybC5vcGVuU2VsbFdpbmRvdyhmYWxzZSk7XG4gICAgfSxcbn0pIl19