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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/common/common_window_tab.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, '3ae3dKMLvdAsK+8BHs+VRRm', 'common_window_tab');
// Scripts/common/common_window_tab.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: zhangyusong@syg.com(必填, 创建模块的人员)
// @description:
//      用户公共窗体
// <br/>Create: new Date().toISOString()
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
window.CommonWindowTab = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("common", "common_window_tab");
    this.tab_info_list = []; //需要写在ctor里面
 
    this.title_str = null; //窗口顶部标题
 
    this.tab_max = 4; //标签最长长度
 
    this.win_type = WinType.Full;
    this.viewTag = SCENE_TAG.ui; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
  },
  openCallBack: function openCallBack() {
    this.main_container = this.root_wnd.getChildByName("main_container");
    this.main_panel = this.main_container.getChildByName("main_panel");
    this.background = this.seekChild("background");
    this.background.scale = this.background.scale * FIT_SCALE;
    this.loadRes(PathTool.getBigBg("bigbg_2"), function (res) {
      this.background.getComponent(cc.Sprite).spriteFrame = res;
    }.bind(this)); // this.tab_container = this.main_panel.getChildByName("tab_container");
 
    this.close_btn = this.main_panel.getChildByName("close_btn");
    this.win_title = this.main_panel.getChildByName("win_title").getComponent(cc.Label);
    this.container = this.main_panel.getChildByName("container");
    this.scroll_con = this.main_panel.getChildByName("scroll_con");
    this.empty_con = this.main_panel.getChildByName("empty_con");
    this.empty_con.active = false;
 
    if (this.empty_con) {
      this.empty_label = this.empty_con.getChildByName("label").getComponent(cc.Label);
    }
 
    if (this.title_str != null) this.win_title.string = this.title_str;
    this.close_btn.on(cc.Node.EventType.TOUCH_END, function () {
      if (this.closeCallBack) this.closeCallBack();
    }, this);
    this.createTabInfoList();
    this.initPanel();
  },
  //---------以下方法在用到时需要重写内容----------
  registerEvent: function registerEvent() {},
  openRootWnd: function openRootWnd() {},
  closeCallBack: function closeCallBack() {},
  initPanel: function initPanel() {},
  //-------------------end-------------------------
  changeTitleName: function changeTitleName(str) {
    if (this.win_title != null) this.win_title.string = str;
  },
  createTabInfoList: function createTabInfoList() {
    if (this.root_wnd == null) return; // this.background = this.root_wnd.getChildByName("background");
 
    if (this.tab_info_list != null && Utils.next(this.tab_info_list) != null) {
      var tab_panel = this.main_panel.getChildByName("tab_container");
      if (this.tab_btn_list == null) this.tab_btn_list = [];
      var tab, tab_btn, tab_tips, info, tab_red_num, select_bg, unselect_bg;
 
      for (var i = 1; i <= this.tab_max; i++) {
        tab = tab_panel.getChildByName("tab_btn_" + i);
 
        if (tab != null) {
          tab_btn = tab;
          tab_btn.setName("tab_btn" + i);
          tab_tips = tab.getChildByName("tab_tips");
          tab_red_num = tab.getChildByName("red_num").getComponent(cc.Label); //要显示出红点跟次数
 
          unselect_bg = tab.getChildByName("unselect_bg");
          select_bg = tab.getChildByName("select_bg");
 
          if (tab_btn != null) {
            tab_btn.tips = tab_tips;
            tab_btn.red_num = tab_red_num;
            tab_btn.select_bg = select_bg;
            tab_btn.unselect_bg = unselect_bg;
            info = this.tab_info_list[i - 1]; //有序数组,直接去下标去创建
 
            if (info != null) {
              tab_btn.notice = info.notice || "";
              tab_btn.label = tab.getChildByName("title").getComponent(cc.Label);
              tab_btn.label.string = info.label || "";
              tab_btn.index = info.index;
              tab_btn.label.node.color = new cc.Color(0xf5, 0xe0, 0xb9, 0xff);
              tab_btn.select_bg.active = false;
              tab_btn.tips.active = false;
              tab_btn.red_num.node.active = false; // tab_btn.touchEnabled = info.status;
              //如果不可点击,就灰掉把
              // if (info.status == false) {
              // setChildUnEnabled(true, tab_btn, Config.ColorData.data_color4[1])
              // }
              //添加注册监听事件
 
              tab_btn.on(cc.Node.EventType.TOUCH_END, function (sender) {
                if (sender.bubbles == false) message(sender.notice);else this.setSelecteTab(sender.currentTarget.index);
              }.bind(this));
              this.tab_btn_list[info.index] = tab_btn;
            } else {
              tab_btn.active = false;
            }
          }
        }
      }
    }
  },
  //切换标签页做的一些事情
  setSelecteTab: function setSelecteTab(index) {
    if (this.cur_selected && this.cur_selected.index == index) return;
 
    if (this.cur_selected != null) {
      if (this.cur_selected.label) {
        this.cur_selected.label.node.color = new cc.Color(0xcf, 0xb5, 0x93, 0xff);
      }
 
      this.cur_selected.select_bg.active = false;
    }
 
    this.cur_selected = this.tab_btn_list[index];
 
    if (this.cur_selected != null) {
      if (this.cur_selected.label) {
        this.cur_selected.label.node.color = new cc.Color(0xff, 0xed, 0xd6, 0xff);
      }
 
      this.cur_selected.select_bg.active = true;
    }
 
    if (this.selectedTabCallBack && this.cur_selected != null) {
      this.selectedTabCallBack(this.cur_selected.index);
    }
  },
  //设置标签页上面的红点
  setTabTips: function setTabTips(status, index) {
    if (this.root_wnd && this.tab_btn_list) {
      var tab_btn = this.tab_btn_list[index];
 
      if (tab_btn && tab_btn.tips) {
        tab_btn.tips.active = status;
      }
    }
  },
  //设置标签页上的红点,要显示出数字出来
  setTabTipsII: function setTabTipsII(num, index) {
    var status = true;
 
    if (num <= 0) {
      status = false;
    }
 
    var tab_btn = this.tab_btn_list[index];
 
    if (tab_btn && tab_btn.tips) {
      tab_btn.tips.active = status;
      tab_btn.red_num.node.active = status;
    }
 
    if (num >= 0) {
      tab_btn.red_num.string = num;
    }
  }
});
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcY29tbW9uXFxjb21tb25fd2luZG93X3RhYi5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJ3aW5kb3ciLCJDb21tb25XaW5kb3dUYWIiLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ0YWJfaW5mb19saXN0IiwidGl0bGVfc3RyIiwidGFiX21heCIsIndpbl90eXBlIiwiV2luVHlwZSIsIkZ1bGwiLCJ2aWV3VGFnIiwiU0NFTkVfVEFHIiwidWkiLCJvcGVuQ2FsbEJhY2siLCJtYWluX2NvbnRhaW5lciIsInJvb3Rfd25kIiwiZ2V0Q2hpbGRCeU5hbWUiLCJtYWluX3BhbmVsIiwiYmFja2dyb3VuZCIsInNlZWtDaGlsZCIsInNjYWxlIiwiRklUX1NDQUxFIiwibG9hZFJlcyIsImdldEJpZ0JnIiwicmVzIiwiZ2V0Q29tcG9uZW50IiwiU3ByaXRlIiwic3ByaXRlRnJhbWUiLCJiaW5kIiwiY2xvc2VfYnRuIiwid2luX3RpdGxlIiwiTGFiZWwiLCJjb250YWluZXIiLCJzY3JvbGxfY29uIiwiZW1wdHlfY29uIiwiYWN0aXZlIiwiZW1wdHlfbGFiZWwiLCJzdHJpbmciLCJvbiIsIk5vZGUiLCJFdmVudFR5cGUiLCJUT1VDSF9FTkQiLCJjbG9zZUNhbGxCYWNrIiwiY3JlYXRlVGFiSW5mb0xpc3QiLCJpbml0UGFuZWwiLCJyZWdpc3RlckV2ZW50Iiwib3BlblJvb3RXbmQiLCJjaGFuZ2VUaXRsZU5hbWUiLCJzdHIiLCJVdGlscyIsIm5leHQiLCJ0YWJfcGFuZWwiLCJ0YWJfYnRuX2xpc3QiLCJ0YWIiLCJ0YWJfYnRuIiwidGFiX3RpcHMiLCJpbmZvIiwidGFiX3JlZF9udW0iLCJzZWxlY3RfYmciLCJ1bnNlbGVjdF9iZyIsImkiLCJzZXROYW1lIiwidGlwcyIsInJlZF9udW0iLCJub3RpY2UiLCJsYWJlbCIsImluZGV4Iiwibm9kZSIsImNvbG9yIiwiQ29sb3IiLCJzZW5kZXIiLCJidWJibGVzIiwibWVzc2FnZSIsInNldFNlbGVjdGVUYWIiLCJjdXJyZW50VGFyZ2V0IiwiY3VyX3NlbGVjdGVkIiwic2VsZWN0ZWRUYWJDYWxsQmFjayIsInNldFRhYlRpcHMiLCJzdGF0dXMiLCJzZXRUYWJUaXBzSUkiLCJudW0iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFFQUMsTUFBTSxDQUFDQyxlQUFQLEdBQXlCQyxFQUFFLENBQUNDLEtBQUgsQ0FBUztBQUM5QixhQUFTQyxRQURxQjtBQUU5QkMsRUFBQUEsSUFBSSxFQUFFLGdCQUFZO0FBQ2QsU0FBS0MsVUFBTCxHQUFrQlIsUUFBUSxDQUFDUyxhQUFULENBQXVCLFFBQXZCLEVBQWlDLG1CQUFqQyxDQUFsQjtBQUNBLFNBQUtDLGFBQUwsR0FBcUIsRUFBckIsQ0FGYyxDQUVjOztBQUM1QixTQUFLQyxTQUFMLEdBQWlCLElBQWpCLENBSGMsQ0FHZ0I7O0FBQzlCLFNBQUtDLE9BQUwsR0FBZSxDQUFmLENBSmMsQ0FJYzs7QUFDNUIsU0FBS0MsUUFBTCxHQUFnQkMsT0FBTyxDQUFDQyxJQUF4QjtBQUNBLFNBQUtDLE9BQUwsR0FBZUMsU0FBUyxDQUFDQyxFQUF6QixDQU5jLENBTThCO0FBQy9DLEdBVDZCO0FBVzlCQyxFQUFBQSxZQUFZLEVBQUUsd0JBQVk7QUFDdEIsU0FBS0MsY0FBTCxHQUFzQixLQUFLQyxRQUFMLENBQWNDLGNBQWQsQ0FBNkIsZ0JBQTdCLENBQXRCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixLQUFLSCxjQUFMLENBQW9CRSxjQUFwQixDQUFtQyxZQUFuQyxDQUFsQjtBQUNBLFNBQUtFLFVBQUwsR0FBa0IsS0FBS0MsU0FBTCxDQUFlLFlBQWYsQ0FBbEI7QUFDQSxTQUFLRCxVQUFMLENBQWdCRSxLQUFoQixHQUF3QixLQUFLRixVQUFMLENBQWdCRSxL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Q0FBeUIsS0FBS0QsWUFBTCxDQUFrQlQsS0FBM0M7QUFDSDtBQUNKLEdBdkk2QjtBQXlJOUI7QUFDQVcsRUFBQUEsVUFBVSxFQUFFLG9CQUFVQyxNQUFWLEVBQWtCWixLQUFsQixFQUF5QjtBQUNqQyxRQUFJLEtBQUtuRCxRQUFMLElBQWlCLEtBQUtxQyxZQUExQixFQUF3QztBQUNwQyxVQUFNRSxPQUFPLEdBQUcsS0FBS0YsWUFBTCxDQUFrQmMsS0FBbEIsQ0FBaEI7O0FBQ0EsVUFBSVosT0FBTyxJQUFJQSxPQUFPLENBQUNRLElBQXZCLEVBQTZCO0FBQ3pCUixRQUFBQSxPQUFPLENBQUNRLElBQVIsQ0FBYTNCLE1BQWIsR0FBc0IyQyxNQUF0QjtBQUNIO0FBQ0o7QUFDSixHQWpKNkI7QUFtSjlCO0FBQ0FDLEVBQUFBLFlBQVksRUFBRSxzQkFBVUMsR0FBVixFQUFlZCxLQUFmLEVBQXNCO0FBQ2hDLFFBQUlZLE1BQU0sR0FBRyxJQUFiOztBQUNBLFFBQUlFLEdBQUcsSUFBSSxDQUFYLEVBQWM7QUFDVkYsTUFBQUEsTUFBTSxHQUFHLEtBQVQ7QUFDSDs7QUFDRCxRQUFJeEIsT0FBTyxHQUFHLEtBQUtGLFlBQUwsQ0FBa0JjLEtBQWxCLENBQWQ7O0FBQ0EsUUFBSVosT0FBTyxJQUFJQSxPQUFPLENBQUNRLElBQXZCLEVBQTZCO0FBQ3pCUixNQUFBQSxPQUFPLENBQUNRLElBQVIsQ0FBYTNCLE1BQWIsR0FBc0IyQyxNQUF0QjtBQUNBeEIsTUFBQUEsT0FBTyxDQUFDUyxPQUFSLENBQWdCSSxJQUFoQixDQUFxQmhDLE1BQXJCLEdBQThCMkMsTUFBOUI7QUFDSDs7QUFDRCxRQUFJRSxHQUFHLElBQUksQ0FBWCxFQUFjO0FBQ1YxQixNQUFBQSxPQUFPLENBQUNTLE9BQVIsQ0FBZ0IxQixNQUFoQixHQUF5QjJDLEdBQXpCO0FBQ0g7QUFDSjtBQWpLNkIsQ0FBVCxDQUF6QiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gQGF1dGhvcjogemhhbmd5dXNvbmdAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcclxuLy8gQGRlc2NyaXB0aW9uOlxyXG4vLyAgICAgIOeUqOaIt+WFrOWFseeql+S9k1xyXG4vLyA8YnIvPkNyZWF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XHJcblxyXG53aW5kb3cuQ29tbW9uV2luZG93VGFiID0gY2MuQ2xhc3Moe1xyXG4gICAgZXh0ZW5kczogQmFzZVZpZXcsXHJcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wcmVmYWJQYXRoID0gUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcImNvbW1vblwiLCBcImNvbW1vbl93aW5kb3dfdGFiXCIpO1xyXG4gICAgICAgIHRoaXMudGFiX2luZm9fbGlzdCA9IFtdOyAgICAvL+mcgOimgeWGmeWcqGN0b3Lph4zpnaJcclxuICAgICAgICB0aGlzLnRpdGxlX3N0ciA9IG51bGw7ICAgICAgICAvL+eql+WPo+mhtumDqOagh+mimFxyXG4gICAgICAgIHRoaXMudGFiX21heCA9IDQ7ICAgICAgICAgICAvL+agh+etvuacgOmVv+mVv+W6plxyXG4gICAgICAgIHRoaXMud2luX3R5cGUgPSBXaW5UeXBlLkZ1bGw7XHJcbiAgICAgICAgdGhpcy52aWV3VGFnID0gU0NFTkVfVEFHLnVpOyAgICAgICAgICAgICAgICAvL+ivpeeql+S9k+aJgOWxnnVp5bGC57qnLOWFqOWxj3Vp6ZyA6KaB5ZyodWnlsYIs6Z2e5YWo5bGPdWnlnKhkaWFsb2d1ZeWxgizov5nkuKropoHms6jmhI9cclxuICAgIH0sXHJcblxyXG4gICAgb3BlbkNhbGxCYWNrOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lciA9IHRoaXMucm9vdF93bmQuZ2V0Q2hpbGRCeU5hbWUoXCJtYWluX2NvbnRhaW5lclwiKTtcclxuICAgICAgICB0aGlzLm1haW5fcGFuZWwgPSB0aGlzLm1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwibWFpbl9wYW5lbFwiKTtcclxuICAgICAgICB0aGlzLmJhY2tncm91bmQgPSB0aGlzLnNlZWtDaGlsZChcImJhY2tncm91bmRcIik7XHJcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLnNjYWxlID0gdGhpcy5iYWNrZ3JvdW5kLnNjYWxlICogRklUX1NDQUxFO1xyXG4gICAgICAgIHRoaXMubG9hZFJlcyhQYXRoVG9vbC5nZXRCaWdCZyhcImJpZ2JnXzJcIiksZnVuY3Rpb24ocmVzKXtcclxuICAgICAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gcmVzXHJcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxyXG4gICAgICAgIC8vIHRoaXMudGFiX2NvbnRhaW5lciA9IHRoaXMubWFpbl9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcInRhYl9jb250YWluZXJcIik7XHJcbiAgICAgICAgdGhpcy5jbG9zZV9idG4gPSB0aGlzLm1haW5fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJjbG9zZV9idG5cIik7XHJcbiAgICAgICAgdGhpcy53aW5fdGl0bGUgPSB0aGlzLm1haW5fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJ3aW5fdGl0bGVcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHRoaXMubWFpbl9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcImNvbnRhaW5lclwiKTtcclxuICAgICAgICB0aGlzLnNjcm9sbF9jb24gPSB0aGlzLm1haW5fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJzY3JvbGxfY29uXCIpO1xyXG4gICAgICAgIHRoaXMuZW1wdHlfY29uID0gdGhpcy5tYWluX3BhbmVsLmdldENoaWxkQnlOYW1lKFwiZW1wdHlfY29uXCIpO1xyXG4gICAgICAgIHRoaXMuZW1wdHlfY29uLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmVtcHR5X2Nvbikge1xyXG4gICAgICAgICAgICB0aGlzLmVtcHR5X2xhYmVsID0gdGhpcy5lbXB0eV9jb24uZ2V0Q2hpbGRCeU5hbWUoXCJsYWJlbFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy50aXRsZV9zdHIgIT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy53aW5fdGl0bGUuc3RyaW5nID0gdGhpcy50aXRsZV9zdHI7XHJcbiAgICAgICAgdGhpcy5jbG9zZV9idG4ub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNsb3NlQ2FsbEJhY2spXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQ2FsbEJhY2soKTtcclxuICAgICAgICB9LCB0aGlzKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZVRhYkluZm9MaXN0KCk7XHJcbiAgICAgICAgdGhpcy5pbml0UGFuZWwoKTtcclxuICAgIH0sXHJcblxyXG4gICAgLy8tLS0tLS0tLS3ku6XkuIvmlrnms5XlnKjnlKjliLDml7bpnIDopoHph43lhpnlhoXlrrktLS0tLS0tLS0tXHJcbiAgICByZWdpc3RlckV2ZW50OiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgfSxcclxuXHJcbiAgICBvcGVuUm9vdFduZDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgIH0sXHJcblxyXG4gICAgY2xvc2VDYWxsQmFjazogZnVuY3Rpb24gKCkge1xyXG4gICAgfSxcclxuXHJcbiAgICBpbml0UGFuZWw6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICB9LFxyXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tZW5kLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICAgIGNoYW5nZVRpdGxlTmFtZTogZnVuY3Rpb24gKHN0cikge1xyXG4gICAgICAgIGlmICh0aGlzLndpbl90aXRsZSAhPSBudWxsKVxyXG4gICAgICAgICAgICB0aGlzLndpbl90aXRsZS5zdHJpbmcgPSBzdHI7XHJcbiAgICB9LFxyXG5cclxuICAgIGNyZWF0ZVRhYkluZm9MaXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQgPT0gbnVsbCkgcmV0dXJuXHJcbiAgICAgICAgLy8gdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcImJhY2tncm91bmRcIik7XHJcbiAgICAgICAgaWYgKHRoaXMudGFiX2luZm9fbGlzdCAhPSBudWxsICYmIFV0aWxzLm5leHQodGhpcy50YWJfaW5mb19saXN0KSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZhciB0YWJfcGFuZWwgPSB0aGlzLm1haW5fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJ0YWJfY29udGFpbmVyXCIpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50YWJfYnRuX2xpc3QgPT0gbnVsbClcclxuICAgICAgICAgICAgICAgIHRoaXMudGFiX2J0bl9saXN0ID0gW107XHJcbiAgICAgICAgICAgIHZhciB0YWIsIHRhYl9idG4sIHRhYl90aXBzLCBpbmZvLCB0YWJfcmVkX251bSwgc2VsZWN0X2JnLCB1bnNlbGVjdF9iZztcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gdGhpcy50YWJfbWF4OyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRhYiA9IHRhYl9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcInRhYl9idG5fXCIgKyBpKTtcclxuICAgICAgICAgICAgICAgIGlmICh0YWIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhYl9idG4gPSB0YWI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFiX2J0bi5zZXROYW1lKFwidGFiX2J0blwiICsgaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFiX3RpcHMgPSB0YWIuZ2V0Q2hpbGRCeU5hbWUoXCJ0YWJfdGlwc1wiKTtcclxuICAgICAgICAgICAgICAgICAgICB0YWJfcmVkX251bSA9IHRhYi5nZXRDaGlsZEJ5TmFtZShcInJlZF9udW1cIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTsgICAgICAgICAgICAvL+imgeaYvuekuuWHuue6oueCuei3n+asoeaVsFxyXG4gICAgICAgICAgICAgICAgICAgIHVuc2VsZWN0X2JnID0gdGFiLmdldENoaWxkQnlOYW1lKFwidW5zZWxlY3RfYmdcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0X2JnID0gdGFiLmdldENoaWxkQnlOYW1lKFwic2VsZWN0X2JnXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YWJfYnRuICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiX2J0bi50aXBzID0gdGFiX3RpcHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYl9idG4ucmVkX251bSA9IHRhYl9yZWRfbnVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJfYnRuLnNlbGVjdF9iZyA9IHNlbGVjdF9iZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiX2J0bi51bnNlbGVjdF9iZyA9IHVuc2VsZWN0X2JnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmZvID0gdGhpcy50YWJfaW5mb19saXN0W2kgLSAxXTsgICAgICAgICAgICAgICAgICAgICAgLy/mnInluo/mlbDnu4TvvIznm7TmjqXljrvkuIvmoIfljrvliJvlu7pcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiX2J0bi5ub3RpY2UgPSBpbmZvLm5vdGljZSB8fCBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiX2J0bi5sYWJlbCA9IHRhYi5nZXRDaGlsZEJ5TmFtZShcInRpdGxlXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJfYnRuLmxhYmVsLnN0cmluZyA9IGluZm8ubGFiZWwgfHwgXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYl9idG4uaW5kZXggPSBpbmZvLmluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiX2J0bi5sYWJlbC5ub2RlLmNvbG9yID0gbmV3IGNjLkNvbG9yKDB4ZjUsIDB4ZTAsIDB4YjksIDB4ZmYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiX2J0bi5zZWxlY3RfYmcuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJfYnRuLnRpcHMuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJfYnRuLnJlZF9udW0ubm9kZS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRhYl9idG4udG91Y2hFbmFibGVkID0gaW5mby5zdGF0dXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL+WmguaenOS4jeWPr+eCueWHu++8jOWwseeBsOaOieaKilxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGluZm8uc3RhdHVzID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXRDaGlsZFVuRW5hYmxlZCh0cnVlLCB0YWJfYnRuLCBDb25maWcuQ29sb3JEYXRhLmRhdGFfY29sb3I0WzFdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy/mt7vliqDms6jlhoznm5HlkKzkuovku7ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYl9idG4ub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCAoZnVuY3Rpb24gKHNlbmRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZW5kZXIuYnViYmxlcyA9PSBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZShzZW5kZXIubm90aWNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZVRhYihzZW5kZXIuY3VycmVudFRhcmdldC5pbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFiX2J0bl9saXN0W2luZm8uaW5kZXhdID0gdGFiX2J0bjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYl9idG4uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8v5YiH5o2i5qCH562+6aG15YGa55qE5LiA5Lqb5LqL5oOFXHJcbiAgICBzZXRTZWxlY3RlVGFiOiBmdW5jdGlvbiAoaW5kZXgpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJfc2VsZWN0ZWQgJiYgdGhpcy5jdXJfc2VsZWN0ZWQuaW5kZXggPT0gaW5kZXgpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIGlmICh0aGlzLmN1cl9zZWxlY3RlZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cl9zZWxlY3RlZC5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJfc2VsZWN0ZWQubGFiZWwubm9kZS5jb2xvciA9IG5ldyBjYy5Db2xvcigweGNmLCAweGI1LCAweDkzLCAweGZmKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY3VyX3NlbGVjdGVkLnNlbGVjdF9iZy5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXJfc2VsZWN0ZWQgPSB0aGlzLnRhYl9idG5fbGlzdFtpbmRleF07XHJcbiAgICAgICAgaWYgKHRoaXMuY3VyX3NlbGVjdGVkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VyX3NlbGVjdGVkLmxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cl9zZWxlY3RlZC5sYWJlbC5ub2RlLmNvbG9yID0gbmV3IGNjLkNvbG9yKDB4ZmYsIDB4ZWQsIDB4ZDYsIDB4ZmYpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jdXJfc2VsZWN0ZWQuc2VsZWN0X2JnLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiQ2FsbEJhY2sgJiYgdGhpcy5jdXJfc2VsZWN0ZWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiQ2FsbEJhY2sodGhpcy5jdXJfc2VsZWN0ZWQuaW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy/orr7nva7moIfnrb7pobXkuIrpnaLnmoTnuqLngrlcclxuICAgIHNldFRhYlRpcHM6IGZ1bmN0aW9uIChzdGF0dXMsIGluZGV4KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucm9vdF93bmQgJiYgdGhpcy50YWJfYnRuX2xpc3QpIHtcclxuICAgICAgICAgICAgY29uc3QgdGFiX2J0biA9IHRoaXMudGFiX2J0bl9saXN0W2luZGV4XTtcclxuICAgICAgICAgICAgaWYgKHRhYl9idG4gJiYgdGFiX2J0bi50aXBzKSB7XHJcbiAgICAgICAgICAgICAgICB0YWJfYnRuLnRpcHMuYWN0aXZlID0gc3RhdHVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvL+iuvue9ruagh+etvumhteS4iueahOe6oueCue+8jOimgeaYvuekuuWHuuaVsOWtl+WHuuadpVxyXG4gICAgc2V0VGFiVGlwc0lJOiBmdW5jdGlvbiAobnVtLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBzdGF0dXMgPSB0cnVlO1xyXG4gICAgICAgIGlmIChudW0gPD0gMCkge1xyXG4gICAgICAgICAgICBzdGF0dXMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHRhYl9idG4gPSB0aGlzLnRhYl9idG5fbGlzdFtpbmRleF07XHJcbiAgICAgICAgaWYgKHRhYl9idG4gJiYgdGFiX2J0bi50aXBzKSB7XHJcbiAgICAgICAgICAgIHRhYl9idG4udGlwcy5hY3RpdmUgPSBzdGF0dXM7XHJcbiAgICAgICAgICAgIHRhYl9idG4ucmVkX251bS5ub2RlLmFjdGl2ZSA9IHN0YXR1cztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG51bSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRhYl9idG4ucmVkX251bS5zdHJpbmcgPSBudW07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbn0pO1xyXG4iXX0=