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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/activity/view/activity_sign_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, 'fa662d7qhpEWLCKSJGaPb0N', 'activity_sign_window');
// Scripts/mod/activity/view/activity_sign_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     这里是描述这个窗体的作用的
// <br/>Create: 2019-05-06 14:34:01
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var MainuiController = require("mainui_controller");
 
var MainuiConst = require("mainui_const");
 
var ActivityConst = require("activity_const");
 
var Activity_signWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("activity", "activity_sign_window");
    this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
 
    this.win_type = WinType.Tips; //是否是全屏窗体  WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
 
    this.ctrl = arguments[0];
    this.model = this.ctrl.getModel();
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initConfig: function initConfig() {
    this.item_list = [];
  },
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    this.main_panel = this.root_wnd.getChildByName("main_panel");
    this.background = this.root_wnd.getChildByName("background_panel");
    this.background.scale = FIT_SCALE;
    this.main_container = this.main_panel.getChildByName("main_container");
    this.label = Utils.createRichLabel(24, new cc.Color(0x68, 0x45, 0x2a, 0xff), cc.v2(0, 0.5), cc.v2(-this.main_container.width / 2 + 30, -this.main_container.height / 2 + 60), 30, 500);
    this.label.horizontalAlign = cc.macro.TextAlignment.LEFT;
    this.main_container.addChild(this.label.node);
    this.item_container = this.main_panel.getChildByName("item_container");
    this.item_view = this.item_container.getChildByName("item_view");
    this.item_content = this.item_view.getChildByName("content");
    this.ok_btn = this.main_panel.getChildByName("ok_btn");
    this.cancel_btn = this.main_panel.getChildByName("cancel_btn");
    this.close_btn = this.main_panel.getChildByName("close_btn");
    this.cancel_lab = this.cancel_btn.getChildByName("Label").getComponent(cc.Label);
    this.ok_lab = this.ok_btn.getChildByName("Label").getComponent(cc.Label);
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    Utils.onTouchEnd(this.close_btn, function () {
      this.ctrl.openSignView(false);
    }.bind(this), 2);
    Utils.onTouchEnd(this.cancel_btn, function () {
      this.ctrl.openSignView(false);
    }.bind(this), 2);
    Utils.onTouchEnd(this.ok_btn, function () {
      this.clickHandle();
      this.ctrl.openSignView(false);
    }.bind(this), 2);
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd(params) {
    if (!params || params[0] == null) return;
    var config = Config.activity_data.data_sign_info[params[0]];
    if (!config) return;
    this.id = params[0];
    this.time = config.time;
    this.label.string = config.desc;
    this.createItemList(config.items);
    this.cancel_lab.string = config.cancel;
    this.ok_lab.string = config.ok;
 
    if (params[1] && params[1].timer) {
      this.setTimer(config);
    }
  },
  createItemList: function createItemList(list) {
    if (list == null || Utils.next(list) == null) return;
 
    for (var i in this.item_list) {
      this.item_list[i].suspendAllActions();
      this.item_list[i].setVisible(false);
    }
 
    var item = null;
    var scale = 0.8;
    var off = 6;
    var _x = 0;
    var _y = 0;
    var sum = list.length;
    var item_conf = null;
    var total_width = sum * 120 * scale + (sum - 1) * off;
    var start_x = 0;
    var index = 0;
    var max_width = Math.max(this.item_view.getContentSize().width, total_width);
    this.item_content.setContentSize(cc.size(max_width, this.item_view.getContentSize().height));
 
    for (var i in list) {
      var bid = list[i];
      var num = 1;
      item_conf = Utils.getItemConfig(bid);
 
      if (item_conf) {
        item = this.item_list[index];
 
        if (item == null) {
          var item = ItemsPool.getInstance().getItem("backpack_item");
 
          if (this.item_view) {
            item.setParent(this.item_content);
          }
 
          this.item_list.push(item);
          item.initConfig(false, scale, false, true);
          item.show();
        }
 
        _x = start_x + (120 * scale + off) * index + 120 * scale * 0.5;
        item.setData({
          bid: bid,
          num: num
        });
        item.setPosition(_x, _y);
        item.setVisible(true);
        index = index + 1;
      }
    }
  },
  setTimer: function setTimer() {
    var config = Config.activity_data.data_sign_info[this.id];
 
    if (this.timer_id) {
      gcore.Timer.del(this.timer_id);
    }
 
    this.timer_id = gcore.Timer.set(function () {
      this.time = this.time - 1;
 
      if (this.time == 0) {
        this.ctrl.openSignView(false);
      } else if (this.cancel_lab) {
        this.cancel_lab.string = cc.js.formatStr("%s(%s)", config.cancel, this.time);
      }
    }.bind(this), 1000, this.time);
    this.cancel_lab.string = cc.js.formatStr("%s(%s)", config.cancel, this.time);
  },
  clickHandle: function clickHandle() {
    if (this.id == ActivityConst.ActivitySignType.arena_champion) {
      MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.champion_call);
    } else if (this.id == ActivityConst.ActivitySignType.arena_champion_guess) {
      MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.champion_call);
    } else if (this.id == ActivityConst.ActivitySignType.godbattle || this.id == ActivityConst.ActivitySignType.godbattle_sign) {// if(GodbattleController:getInstance():getModel():getApplyStatus() == GodBattleConstants.apply_status.un_apply){
      //     GodbattleController:getInstance():requestApplyGodBattle()
      // }else{
      //     GodbattleController:getInstance():requestEnterGodBattle()
      // }
    }
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    for (var i in this.item_list) {
      this.item_list[i].deleteMe();
    }
 
    if (this.timer_id) {
      gcore.Timer.del(this.timer_id);
    }
 
    this.item_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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxhY3Rpdml0eVxcdmlld1xcYWN0aXZpdHlfc2lnbl93aW5kb3cuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiTWFpbnVpQ29udHJvbGxlciIsIk1haW51aUNvbnN0IiwiQWN0aXZpdHlDb25zdCIsIkFjdGl2aXR5X3NpZ25XaW5kb3ciLCJjYyIsIkNsYXNzIiwiQmFzZVZpZXciLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJ2aWV3VGFnIiwiU0NFTkVfVEFHIiwiZGlhbG9ndWUiLCJ3aW5fdHlwZSIsIldpblR5cGUiLCJUaXBzIiwiY3RybCIsImFyZ3VtZW50cyIsIm1vZGVsIiwiZ2V0TW9kZWwiLCJpbml0Q29uZmlnIiwiaXRlbV9saXN0Iiwib3BlbkNhbGxCYWNrIiwibWFpbl9wYW5lbCIsInJvb3Rfd25kIiwiZ2V0Q2hpbGRCeU5hbWUiLCJiYWNrZ3JvdW5kIiwic2NhbGUiLCJGSVRfU0NBTEUiLCJtYWluX2NvbnRhaW5lciIsImxhYmVsIiwiVXRpbHMiLCJjcmVhdGVSaWNoTGFiZWwiLCJDb2xvciIsInYyIiwid2lkdGgiLCJoZWlnaHQiLCJob3Jpem9udGFsQWxpZ24iLCJtYWNybyIsIlRleHRBbGlnbm1lbnQiLCJMRUZUIiwiYWRkQ2hpbGQiLCJub2RlIiwiaXRlbV9jb250YWluZXIiLCJpdGVtX3ZpZXciLCJpdGVtX2NvbnRlbnQiLCJva19idG4iLCJjYW5jZWxfYnRuIiwiY2xvc2VfYnRuIiwiY2FuY2VsX2xhYiIsImdldENvbXBvbmVudCIsIkxhYmVsIiwib2tfbGFiIiwicmVnaXN0ZXJFdmVudCIsIm9uVG91Y2hFbmQiLCJvcGVuU2lnblZpZXciLCJiaW5kIiwiY2xpY2tIYW5kbGUiLCJvcGVuUm9vdFduZCIsInBhcmFtcyIsImNvbmZpZyIsIkNvbmZpZyIsImFjdGl2aXR5X2RhdGEiLCJkYXRhX3NpZ25faW5mbyIsImlkIiwidGltZSIsInN0cmluZyIsImRlc2MiLCJjcmVhdGVJdGVtTGlzdCIsIml0ZW1zIiwiY2FuY2VsIiwib2siLCJ0aW1lciIsInNldFRpbWVyIiwibGlzdCIsIm5leHQiLCJpIiwic3VzcGVuZEFsbEFjdGlvbnMiLCJzZXRWaXNpYmxlIiwiaXRlbSIsIm9mZiIsIl94IiwiX3kiLCJzdW0iLCJsZW5ndGgiLCJpdGVtX2NvbmYiLCJ0b3RhbF93aWR0aCIsInN0YXJ0X3giLCJpbmRleCIsIm1heF93aWR0aCIsIk1hdGgiLCJtYXgiLCJnZXRDb250ZW50U2l6ZSIsInNldENvbnRlbnRTaXplIiwic2l6ZSIsImJpZCIsIm51bSIsImdldEl0ZW1Db25maWciLCJJdGVtc1Bvb2wiLCJnZXRJbnN0YW5jZSIsImdldEl0ZW0iLCJzZXRQYXJlbnQiLCJwdXNoIiwic2hvdyIsInNldERhdGEiLCJzZXRQb3NpdGlvbiIsInRpbWVyX2lkIiwiZ2NvcmUiLCJUaW1lciIsImRlbCIsInNldCIsImpzIiwiZm9ybWF0U3RyIiwiQWN0aXZpdHlTaWduVHlwZSIsImFyZW5hX2NoYW1waW9uIiwiY2hhbmdlTWFpblVJU3RhdHVzIiwiYnRuX2luZGV4IiwibWFpbl9zY2VuZSIsInN1Yl90eXBlIiwiY2hhbXBpb25fY2FsbCIsImFyZW5hX2NoYW1waW9uX2d1ZXNzIiwiZ29kYmF0dGxlIiwiZ29kYmF0dGxlX3NpZ24iLCJjbG9zZUNhbGxCYWNrIiwiZGVsZXRlTWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxnQkFBZ0IsR0FBR0QsT0FBTyxDQUFDLG1CQUFELENBQTlCOztBQUNBLElBQUlFLFdBQVcsR0FBR0YsT0FBTyxDQUFDLGNBQUQsQ0FBekI7O0FBQ0EsSUFBSUcsYUFBYSxHQUFHSCxPQUFPLENBQUMsZ0JBQUQsQ0FBM0I7O0FBRUEsSUFBSUksbUJBQW1CLEdBQUdDLEVBQUUsQ0FBQ0MsS0FBSCxDQUFT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aUIsSUFBakI7QUFDSDtBQTVKOEIsQ0FBVCxDQUExQiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDUtMDYgMTQ6MzQ6MDFcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgTWFpbnVpQ29udHJvbGxlciA9IHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKVxudmFyIE1haW51aUNvbnN0ID0gcmVxdWlyZShcIm1haW51aV9jb25zdFwiKTtcbnZhciBBY3Rpdml0eUNvbnN0ID0gcmVxdWlyZShcImFjdGl2aXR5X2NvbnN0XCIpO1xuXG52YXIgQWN0aXZpdHlfc2lnbldpbmRvdyA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlVmlldyxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJhY3Rpdml0eVwiLCBcImFjdGl2aXR5X3NpZ25fd2luZG93XCIpO1xuICAgICAgICB0aGlzLnZpZXdUYWcgPSBTQ0VORV9UQUcuZGlhbG9ndWU7ICAgICAgICAgICAgICAgIC8v6K+l56qX5L2T5omA5bGedWnlsYLnuqcs5YWo5bGPdWnpnIDopoHlnKh1aeWxgizpnZ7lhajlsY91aeWcqGRpYWxvZ3Vl5bGCLOi/meS4quimgeazqOaEj1xuICAgICAgICB0aGlzLndpbl90eXBlID0gV2luVHlwZS5UaXBzOyAgICAgICAgICAgICAgIC8v5piv5ZCm5piv5YWo5bGP56qX5L2TICBXaW5UeXBlLkZ1bGwsIFdpblR5cGUuQmlnLCBXaW5UeXBlLk1pbmksIFdpblR5cGUuVGlwc1xuICAgICAgICB0aGlzLmN0cmwgPSBhcmd1bWVudHNbMF07XG4gICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLmN0cmwuZ2V0TW9kZWwoKTtcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW5LiA5Lqb6YWN572u5pWw5o2uLOWPr+S7peeUqOS6juWjsOaYjuS4gOS6m+WPmOmHj+S5i+exu+eahFxuICAgIGluaXRDb25maWc6ZnVuY3Rpb24oKXtcbiAgICAgICAgdGhpcy5pdGVtX2xpc3QgPSBbXTtcbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCO55qE5Zue6LCDLOWPr+S7peWcqOi/memHjOaNleiOt+ebuOWFs+iKgueCueaIluiAhee7hOS7tlxuICAgIG9wZW5DYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLm1haW5fcGFuZWwgPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwibWFpbl9wYW5lbFwiKTtcblxuICAgICAgICB0aGlzLmJhY2tncm91bmQgPSB0aGlzLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwiYmFja2dyb3VuZF9wYW5lbFwiKTtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kLnNjYWxlID0gRklUX1NDQUxFO1xuICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyID0gdGhpcy5tYWluX3BhbmVsLmdldENoaWxkQnlOYW1lKFwibWFpbl9jb250YWluZXJcIik7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmxhYmVsID0gVXRpbHMuY3JlYXRlUmljaExhYmVsKDI0LCBuZXcgY2MuQ29sb3IoMHg2OCwweDQ1LDB4MmEsIDB4ZmYpLCBjYy52MigwLCAwLjUpLCBjYy52MigtdGhpcy5tYWluX2NvbnRhaW5lci53aWR0aC8yKzMwLC10aGlzLm1haW5fY29udGFpbmVyLmhlaWdodC8yKzYwKSwzMCw1MDApO1xuICAgICAgICB0aGlzLmxhYmVsLmhvcml6b250YWxBbGlnbiA9IGNjLm1hY3JvLlRleHRBbGlnbm1lbnQuTEVGVDtcbiAgICAgICAgdGhpcy5tYWluX2NvbnRhaW5lci5hZGRDaGlsZCh0aGlzLmxhYmVsLm5vZGUpO1xuICAgIFxuICAgICAgICB0aGlzLml0ZW1fY29udGFpbmVyID0gdGhpcy5tYWluX3BhbmVsLmdldENoaWxkQnlOYW1lKFwiaXRlbV9jb250YWluZXJcIik7XG4gICAgICAgIHRoaXMuaXRlbV92aWV3ID0gdGhpcy5pdGVtX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcIml0ZW1fdmlld1wiKTtcbiAgICAgICAgdGhpcy5pdGVtX2NvbnRlbnQgPSB0aGlzLml0ZW1fdmlldy5nZXRDaGlsZEJ5TmFtZShcImNvbnRlbnRcIik7XG4gICAgICAgIFxuICAgICAgICB0aGlzLm9rX2J0biA9IHRoaXMubWFpbl9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcIm9rX2J0blwiKTtcbiAgICAgICAgdGhpcy5jYW5jZWxfYnRuID0gdGhpcy5tYWluX3BhbmVsLmdldENoaWxkQnlOYW1lKFwiY2FuY2VsX2J0blwiKTtcbiAgICAgICAgdGhpcy5jbG9zZV9idG4gPSB0aGlzLm1haW5fcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJjbG9zZV9idG5cIik7XG5cbiAgICAgICAgdGhpcy5jYW5jZWxfbGFiID0gdGhpcy5jYW5jZWxfYnRuLmdldENoaWxkQnlOYW1lKFwiTGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgdGhpcy5va19sYWIgPSB0aGlzLm9rX2J0bi5nZXRDaGlsZEJ5TmFtZShcIkxhYmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG5cbiAgICB9LFxuXG4gICAgLy8g5rOo5YaM5LqL5Lu255uR5ZCs55qE5o6l5Y+jLOS4jemcgOimgeaJi+WKqOiwg+eUqCzlpoLmnpzmmK/kvb/nlKhnY29yZS5HbG9iYWxFdmVudOebkeWQrCzlj6/ku6Xnm7TmjqXosIPnlKhhZGRHbG9iYWxFdmVudFxuICAgIHJlZ2lzdGVyRXZlbnQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLmNsb3NlX2J0biwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5TaWduVmlldyhmYWxzZSk7XG4gICAgICAgIH0uYmluZCh0aGlzKSwgMik7XG5cbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLmNhbmNlbF9idG4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuU2lnblZpZXcoZmFsc2UpO1xuICAgICAgICB9LmJpbmQodGhpcyksIDIpO1xuXG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5va19idG4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuY2xpY2tIYW5kbGUoKTtcbiAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuU2lnblZpZXcoZmFsc2UpO1xuICAgICAgICB9LmJpbmQodGhpcyksIDIpO1xuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDpmdW5jdGlvbihwYXJhbXMpe1xuICAgICAgICBpZighcGFyYW1zIHx8IHBhcmFtc1swXSA9PSBudWxsKXJldHVybjtcbiAgICAgICAgdmFyIGNvbmZpZyA9IENvbmZpZy5hY3Rpdml0eV9kYXRhLmRhdGFfc2lnbl9pbmZvW3BhcmFtc1swXV07XG4gICAgICAgIGlmKCFjb25maWcpcmV0dXJuO1xuICAgICAgICB0aGlzLmlkID0gcGFyYW1zWzBdO1xuICAgICAgICB0aGlzLnRpbWUgPSBjb25maWcudGltZTtcbiAgICAgICAgdGhpcy5sYWJlbC5zdHJpbmcgPSBjb25maWcuZGVzYztcbiAgICAgICAgdGhpcy5jcmVhdGVJdGVtTGlzdChjb25maWcuaXRlbXMpO1xuICAgICAgICB0aGlzLmNhbmNlbF9sYWIuc3RyaW5nID0gY29uZmlnLmNhbmNlbDtcbiAgICAgICAgdGhpcy5va19sYWIuc3RyaW5nID0gY29uZmlnLm9rO1xuICAgICAgICBpZihwYXJhbXNbMV0gJiYgcGFyYW1zWzFdLnRpbWVyKXtcbiAgICAgICAgICAgIHRoaXMuc2V0VGltZXIoY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtTGlzdDpmdW5jdGlvbihsaXN0KXtcbiAgICAgICAgaWYobGlzdCA9PSBudWxsIHx8IFV0aWxzLm5leHQobGlzdCkgPT0gbnVsbClyZXR1cm47XG4gICAgICAgIGZvcih2YXIgaSBpbiB0aGlzLml0ZW1fbGlzdCl7XG4gICAgICAgICAgICB0aGlzLml0ZW1fbGlzdFtpXS5zdXNwZW5kQWxsQWN0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3RbaV0uc2V0VmlzaWJsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGl0ZW0gPSBudWxsO1xuICAgICAgICB2YXIgc2NhbGUgPSAwLjg7XG4gICAgICAgIHZhciBvZmYgPSA2O1xuICAgICAgICB2YXIgX3ggPSAwO1xuICAgICAgICB2YXIgX3kgPSAwO1xuICAgICAgICB2YXIgc3VtID0gbGlzdC5sZW5ndGg7XG4gICAgICAgIHZhciBpdGVtX2NvbmYgPSBudWxsO1xuICAgICAgICB2YXIgdG90YWxfd2lkdGggPSBzdW0gKiAxMjAgKiBzY2FsZSArIChzdW0gLSAxKSAqIG9mZjtcbiAgICAgICAgdmFyIHN0YXJ0X3ggPSAwO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuXG4gICAgICAgIHZhciBtYXhfd2lkdGggPSBNYXRoLm1heCh0aGlzLml0ZW1fdmlldy5nZXRDb250ZW50U2l6ZSgpLndpZHRoLCB0b3RhbF93aWR0aClcbiAgICAgICAgdGhpcy5pdGVtX2NvbnRlbnQuc2V0Q29udGVudFNpemUoY2Muc2l6ZShtYXhfd2lkdGgsIHRoaXMuaXRlbV92aWV3LmdldENvbnRlbnRTaXplKCkuaGVpZ2h0KSk7XG5cbiAgICAgICAgZm9yKHZhciBpIGluIGxpc3Qpe1xuICAgICAgICAgICAgdmFyIGJpZCA9IGxpc3RbaV07XG4gICAgICAgICAgICB2YXIgbnVtID0gMTtcbiAgICAgICAgICAgIGl0ZW1fY29uZiA9IFV0aWxzLmdldEl0ZW1Db25maWcoYmlkKTtcbiAgICAgICAgICAgIGlmKGl0ZW1fY29uZil7XG4gICAgICAgICAgICAgICAgaXRlbSA9IHRoaXMuaXRlbV9saXN0W2luZGV4XTtcbiAgICAgICAgICAgICAgICBpZihpdGVtID09IG51bGwpe1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IEl0ZW1zUG9vbC5nZXRJbnN0YW5jZSgpLmdldEl0ZW0oXCJiYWNrcGFja19pdGVtXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLml0ZW1fdmlldyl7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNldFBhcmVudCh0aGlzLml0ZW1fY29udGVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1fbGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmluaXRDb25maWcoZmFsc2UsIHNjYWxlLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2hvdygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfeCA9IHN0YXJ0X3ggKyAoMTIwICogc2NhbGUgKyBvZmYpICogKGluZGV4KSArIDEyMCpzY2FsZSowLjU7XG4gICAgICAgICAgICAgICAgaXRlbS5zZXREYXRhKHtiaWQ6YmlkLCBudW06bnVtfSk7XG4gICAgICAgICAgICAgICAgaXRlbS5zZXRQb3NpdGlvbihfeCwgX3kpO1xuICAgICAgICAgICAgICAgIGl0ZW0uc2V0VmlzaWJsZSh0cnVlKTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4ICsgMVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBcbiAgICBzZXRUaW1lcjpmdW5jdGlvbigpe1xuICAgIHZhciBjb25maWcgPSBDb25maWcuYWN0aXZpdHlfZGF0YS5kYXRhX3NpZ25faW5mb1t0aGlzLmlkXTtcbiAgICAgICAgaWYodGhpcy50aW1lcl9pZCl7XG4gICAgICAgICAgICBnY29yZS5UaW1lci5kZWwodGhpcy50aW1lcl9pZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aW1lcl9pZCA9IGdjb3JlLlRpbWVyLnNldChmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy50aW1lID0gdGhpcy50aW1lIC0gMTtcbiAgICAgICAgICAgIGlmKHRoaXMudGltZSA9PSAwKXtcbiAgICAgICAgICAgICAgICB0aGlzLmN0cmwub3BlblNpZ25WaWV3KGZhbHNlKTtcbiAgICAgICAgICAgIH1lbHNlIGlmKHRoaXMuY2FuY2VsX2xhYil7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxfbGFiLnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihcIiVzKCVzKVwiLCBjb25maWcuY2FuY2VsLCB0aGlzLnRpbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LmJpbmQodGhpcyksIDEwMDAsIHRoaXMudGltZSlcbiAgICAgICAgdGhpcy5jYW5jZWxfbGFiLnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihcIiVzKCVzKVwiLCBjb25maWcuY2FuY2VsLCB0aGlzLnRpbWUpO1xuICAgIH0sXG5cbiAgICBjbGlja0hhbmRsZTpmdW5jdGlvbigpe1xuICAgICAgICBpZih0aGlzLmlkID09IEFjdGl2aXR5Q29uc3QuQWN0aXZpdHlTaWduVHlwZS5hcmVuYV9jaGFtcGlvbil7XG4gICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkuY2hhbmdlTWFpblVJU3RhdHVzKE1haW51aUNvbnN0LmJ0bl9pbmRleC5tYWluX3NjZW5lLCBNYWludWlDb25zdC5zdWJfdHlwZS5jaGFtcGlvbl9jYWxsKTtcbiAgICAgICAgfWVsc2UgaWYodGhpcy5pZCA9PSBBY3Rpdml0eUNvbnN0LkFjdGl2aXR5U2lnblR5cGUuYXJlbmFfY2hhbXBpb25fZ3Vlc3Mpe1xuICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmNoYW5nZU1haW5VSVN0YXR1cyhNYWludWlDb25zdC5idG5faW5kZXgubWFpbl9zY2VuZSwgTWFpbnVpQ29uc3Quc3ViX3R5cGUuY2hhbXBpb25fY2FsbCk7XG4gICAgICAgIH1lbHNlIGlmKHRoaXMuaWQgPT0gQWN0aXZpdHlDb25zdC5BY3Rpdml0eVNpZ25UeXBlLmdvZGJhdHRsZSB8fCB0aGlzLmlkID09IEFjdGl2aXR5Q29uc3QuQWN0aXZpdHlTaWduVHlwZS5nb2RiYXR0bGVfc2lnbil7XG4gICAgICAgICAgICAvLyBpZihHb2RiYXR0bGVDb250cm9sbGVyOmdldEluc3RhbmNlKCk6Z2V0TW9kZWwoKTpnZXRBcHBseVN0YXR1cygpID09IEdvZEJhdHRsZUNvbnN0YW50cy5hcHBseV9zdGF0dXMudW5fYXBwbHkpe1xuICAgICAgICAgICAgLy8gICAgIEdvZGJhdHRsZUNvbnRyb2xsZXI6Z2V0SW5zdGFuY2UoKTpyZXF1ZXN0QXBwbHlHb2RCYXR0bGUoKVxuICAgICAgICAgICAgLy8gfWVsc2V7XG4gICAgICAgICAgICAvLyAgICAgR29kYmF0dGxlQ29udHJvbGxlcjpnZXRJbnN0YW5jZSgpOnJlcXVlc3RFbnRlckdvZEJhdHRsZSgpXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH1cbiAgICB9LFxuXG5cbiAgICAvLyDlhbPpl63nqpfkvZPlm57osIMs6ZyA6KaB5Zyo6L+Z6YeM6LCD55So6K+l56qX5L2T5omA5bGeY29udHJvbGxlcueahGNsb3Nl5pa55rOV5rKh55So5LqO572u56m66K+l56qX5L2T5a6e5L6L5a+56LGhXG4gICAgY2xvc2VDYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICBmb3IodmFyIGkgaW4gdGhpcy5pdGVtX2xpc3Qpe1xuICAgICAgICAgICAgdGhpcy5pdGVtX2xpc3RbaV0uZGVsZXRlTWUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLnRpbWVyX2lkKXtcbiAgICAgICAgICAgIGdjb3JlLlRpbWVyLmRlbCh0aGlzLnRpbWVyX2lkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLml0ZW1fbGlzdCA9IG51bGw7XG4gICAgfSxcbn0pIl19