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/mod/welfare/view/supre_yueka_panel.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, 'cfcf7nkHq9DNLGb+WqqWvBv', 'supre_yueka_panel');
// Scripts/mod/welfare/view/supre_yueka_panel.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     至尊月卡
// <br/>Create: 2019-03-13 19:46:33
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var WelfareController = require("welfare_controller");
 
var WelfareEvent = require("welfare_event");
 
var TimeTool = require("timetool");
 
var Supre_yuekaPanel = cc.Class({
  "extends": BasePanel,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("welfare", "yueka_panel");
  },
  // 可以初始化声明一些变量的
  initConfig: function initConfig() {
    this.ctrl = WelfareController.getInstance();
    this.card_data = Config.charge_data.data_constant;
    this.card1_add_count = this.card_data.month_card1_sun.val;
    this.item_bid_1 = this.card_data.month_card1_items.val[0][0];
    this.item_num_1 = this.card_data.month_card1_items.val[0][1];
    this.add_get_day_1 = this.card_data.month_card1_cont_day.val;
    this.current_day = 0;
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initPanel: function initPanel() {
    this.main_container = this.seekChild("main_container");
    var bg = this.seekChild(this.main_container, "bg", cc.Sprite);
    var res_id = PathTool.getBigBg("txt_cn_welfare_yueka_bg1", null, "welfare");
    this.loadRes(res_id, function (res_object) {
      bg.spriteFrame = res_object;
    }.bind(this));
    this.btn_1_nd = this.seekChild(this.main_container, "btn_1");
    this.seekChild(this.btn_1_nd, "Text_1", cc.Label).string = Utils.TI18N("充值激活");
    this.bar_pb = this.seekChild(this.main_container, "bar", cc.ProgressBar);
    this.bar_pb.progress = 0;
    this.current_change_lb = this.seekChild("current_change", cc.Label);
    this.btn_rule_nd = this.seekChild("btn_rule");
    this.btn_rule_nd.active = true;
    this.image_get_nd = this.seekChild("image_get");
    this.image_get_nd.active = false;
    this.text_day_lb = this.seekChild(this.image_get_nd, "text_day", cc.Label);
    this.text_day_lb.string = "";
    this.text_time_lb = this.seekChild(this.image_get_nd, "text_time", cc.Label);
    this.btn_get_nd = this.seekChild(this.image_get_nd, "btn_get");
    this.btn_get_btn = this.seekChild(this.image_get_nd, "btn_get", cc.Button);
    this.btn_get_lb = this.seekChild(this.btn_get_nd, "Text_4", cc.Label);
    this.btn_get_lo = this.seekChild(this.btn_get_nd, "Text_4", cc.LabelOutline);
    this.btn_get_lb.string = "领取";
    var image_0_1_nd = this.seekChild(this.main_container, "Image_1_0");
    this.text_1_rt = this.seekChild(image_0_1_nd, "text_1", cc.RichText);
    this.text_2_rt = this.seekChild(this.main_container, "text_2", cc.RichText);
    this.text_3_rt = this.seekChild(this.main_container, "text_3", cc.RichText);
    this.text_1_rt.string = cc.js.formatStr(Utils.TI18N("<outline width=1 color=#110800>任意累计充值达到</outline><color=#ffb502> %d元 </c><outline width=1,color=#110800>即可激活</outline>"), this.card1_add_count);
    var item_config = Utils.getItemConfig(this.card_data.month_card1_return.val[0][0]);
    this.text_2_rt.string = cc.js.formatStr(Utils.TI18N("<outline width=1 color=#110800>充值送超值月卡,</outline><outline width=1 color=#000000><color=#ffb502 > 返还%d </c></outline><img src=%s visible=true scale=0.30 />"), this.card_data.month_card1_return.val[0][1], PathTool.getItemRes(item_config.icon));
    var item_config = Utils.getItemConfig(this.item_bid_1);
    this.text_3_rt.string = cc.js.formatStr(Utils.TI18N("<outline width=1 color=#110800>每日可领取</outline><color=#ffb502 ><outline width=1 color=#000000> %d</outline> </c><img src=%s visible=true scale=0.30 /><outline width=1 color=#110800>持续 </outline><color=#ffb502 ><outline width=1 color=#000000>%d天</outline></c>"), this.item_num_1, PathTool.getItemRes(item_config.icon), this.add_get_day_1);
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    this.addGlobalEvent(WelfareEvent.Update_Yueka, function (data) {
      var add_count = 100,
          acc_count = 100;
      var item_bid = null,
          item_num = null;
      var get_day = 0,
          day = 0,
          end_time = 0;
 
      if (data.card1_is_reward == 0) {
        this.image_get_nd.active = false;
        this.btn_1_nd.active = true;
        add_count = this.card1_add_count;
        acc_count = data.card1_acc;
      } else if (data.card1_is_reward == 1 || data.card1_is_reward == 2) {
        item_bid = this.item_bid_1;
        item_num = this.item_num_1;
        day = data.card1_days;
        get_day = this.add_get_day_1;
        end_time = data.card1_end_time;
        this.current_day = day;
        this.image_get_nd.active = true;
        this.btn_1_nd.active = false;
 
        if (data.card1_is_reward == 1) {
          Utils.setGreyButton(this.btn_get_btn, false);
          this.btn_get_lb.string = Utils.TI18N("领取");
          this.btn_get_lo.enabled = true;
        } else if (data.card1_is_reward == 2) {
          Utils.setGreyButton(this.btn_get_btn, true);
          this.btn_get_lb.string = Utils.TI18N("已领取");
          this.btn_get_lo.enabled = false;
        } //领取时间
 
 
        var start_time = end_time - 86400 * get_day;
        var str = cc.js.formatStr("%s - %s", TimeTool.getMD2(start_time), TimeTool.getMD2(end_time - 1));
        this.text_time_lb.string = str;
      }
 
      this.bar_pb.progress = acc_count / add_count;
      var str = cc.js.formatStr(Utils.TI18N("当前充值:%d / %d"), acc_count, add_count);
      this.current_change_lb.string = str;
 
      if (item_bid && item_num) {
        if (!this.reward_item) {
          this.reward_item = ItemsPool.getInstance().getItem("backpack_item");
          this.reward_item.initConfig(null, 1, false, true);
          this.reward_item.show();
          this.reward_item.setPosition(-260, 0);
          this.reward_item.setParent(this.image_get_nd);
        }
 
        if (this.reward_item) {
          this.reward_item.setData({
            bid: item_bid,
            num: item_num
          });
        }
      }
 
      this.text_day_lb.string = this.current_day;
    }, this);
    this.addGlobalEvent(WelfareEvent.Update_Get_Yueka, function (_type) {
      if (_type == 1) {
        Utils.setGreyButton(this.btn_get_btn, true);
        this.btn_get_lb.string = Utils.TI18N("已领取");
        this.btn_get_lo.enabled = false;
        this.current_day = this.current_day + 1;
        this.text_day_lb.string = this.current_day;
      }
    }, this);
    Utils.onTouchEnd(this.btn_1_nd, function () {
      require("vip_controller").getInstance().openVipMainWindow(true, VIPTABCONST.CHARGE);
    }.bind(this), 1);
    Utils.onTouchEnd(this.btn_get_nd, function () {
      this.ctrl.sender16706(1);
    }.bind(this), 1);
    Utils.onTouchEnd(this.btn_rule_nd, function () {
      cc.log(VIPTABCONST.VIP);
 
      require("vip_controller").getInstance().openVipMainWindow(true, VIPTABCONST.VIP);
    }.bind(this), 1);
    this.ctrl.sender16705();
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调可以设置一些数据了
  onShow: function onShow(params) {},
  setVisibleStatus: function setVisibleStatus(bool) {
    bool = bool || false;
    this.setVisible(bool);
  },
  // 面板设置不可见的回调,这里做一些不可见的屏蔽处理
  onHide: function onHide() {},
  // 当面板从主节点释放掉的调用接口,需要手动调用,而且也一定要调用
  onDelete: function onDelete() {
    if (this.reward_item) {
      this.reward_item.deleteMe();
      this.reward_item = 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx3ZWxmYXJlXFx2aWV3XFxzdXByZV95dWVrYV9wYW5lbC5qcyJdLCJuYW1lcyI6WyJQYXRoVG9vbCIsInJlcXVpcmUiLCJXZWxmYXJlQ29udHJvbGxlciIsIldlbGZhcmVFdmVudCIsIlRpbWVUb29sIiwiU3VwcmVfeXVla2FQYW5lbCIsImNjIiwiQ2xhc3MiLCJCYXNlUGFuZWwiLCJjdG9yIiwicHJlZmFiUGF0aCIsImdldFByZWZhYlBhdGgiLCJpbml0Q29uZmlnIiwiY3RybCIsImdldEluc3RhbmNlIiwiY2FyZF9kYXRhIiwiQ29uZmlnIiwiY2hhcmdlX2RhdGEiLCJkYXRhX2NvbnN0YW50IiwiY2FyZDFfYWRkX2NvdW50IiwibW9udGhfY2FyZDFfc3VuIiwidmFsIiwiaXRlbV9iaWRfMSIsIm1vbnRoX2NhcmQxX2l0ZW1zIiwiaXRlbV9udW1fMSIsImFkZF9nZXRfZGF5XzEiLCJtb250aF9jYXJkMV9jb250X2RheSIsImN1cnJlbnRfZGF5IiwiaW5pdFBhbmVsIiwibWFpbl9jb250YWluZXIiLCJzZWVrQ2hpbGQiLCJiZyIsIlNwcml0ZSIsInJlc19pZCIsImdldEJpZ0JnIiwibG9hZFJlcyIsInJlc19vYmplY3QiLCJzcHJpdGVGcmFtZSIsImJpbmQiLCJidG5fMV9uZCIsIkxhYmVsIiwic3RyaW5nIiwiVXRpbHMiLCJUSTE4TiIsImJhcl9wYiIsIlByb2dyZXNzQmFyIiwicHJvZ3Jlc3MiLCJjdXJyZW50X2NoYW5nZV9sYiIsImJ0bl9ydWxlX25kIiwiYWN0aXZlIiwiaW1hZ2VfZ2V0X25kIiwidGV4dF9kYXlfbGIiLCJ0ZXh0X3RpbWVfbGIiLCJidG5fZ2V0X25kIiwiYnRuX2dldF9idG4iLCJCdXR0b24iLCJidG5fZ2V0X2xiIiwiYnRuX2dldF9sbyIsIkxhYmVsT3V0bGluZSIsImltYWdlXzBfMV9uZCIsInRleHRfMV9ydCIsIlJpY2hUZXh0IiwidGV4dF8yX3J0IiwidGV4dF8zX3J0IiwianMiLCJmb3JtYXRTdHIiLCJpdGVtX2NvbmZpZyIsImdldEl0ZW1Db25maWciLCJtb250aF9jYXJkMV9yZXR1cm4iLCJnZXRJdGVtUmVzIiwiaWNvbiIsInJlZ2lzdGVyRXZlbnQiLCJhZGRHbG9iYWxFdmVudCIsIlVwZGF0ZV9ZdWVrYSIsImRhdGEiLCJhZGRfY291bnQiLCJhY2NfY291bnQiLCJpdGVtX2JpZCIsIml0ZW1fbnVtIiwiZ2V0X2RheSIsImRheSIsImVuZF90aW1lIiwiY2FyZDFfaXNfcmV3YXJkIiwiY2FyZDFfYWNjIiwiY2FyZDFfZGF5cyIsImNhcmQxX2VuZF90aW1lIiwic2V0R3JleUJ1dHRvbiIsImVuYWJsZWQiLCJzdGFydF90aW1lIiwic3RyIiwiZ2V0TUQyIiwicmV3YXJkX2l0ZW0iLCJJdGVtc1Bvb2wiLCJnZXRJdGVtIiwic2hvdyIsInNldFBvc2l0aW9uIiwic2V0UGFyZW50Iiwic2V0RGF0YSIsImJpZCIsIm51bSIsIlVwZGF0ZV9HZXRfWXVla2EiLCJfdHlwZSIsIm9uVG91Y2hFbmQiLCJvcGVuVmlwTWFpbldpbmRvdyIsIlZJUFRBQkNPTlNUIiwiQ0hBUkdFIiwic2VuZGVyMTY3MDYiLCJsb2ciLCJWSVAiLCJzZW5kZXIxNjcwNSIsIm9uU2hvdyIsInBhcmFtcyIsInNldFZpc2libGVTdGF0dXMiLCJib29sIiwic2V0VmlzaWJsZSIsIm9uSGlkZSIsIm9uRGVsZXRlIiwiZGVsZXRlTWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxHQUFHQyxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFDQSxJQUFJQyxpQkFBaUIsR0FBR0QsT0FBTyxDQUFDLG9CQUFELENBQS9COztBQUNBLElBQUlFLFlBQVksR0FBR0YsT0FBTyxDQUFDLGVBQUQsQ0FBMUI7O0FBQ0EsSUFBSUcsUUFBUSxHQUFHSCxPQUFPLENBQUMsVUFBRCxDQUF0Qjs7QUFFQSxJQUFJSSxnQkFBZ0IsR0FBR0MsRUFBRSxDQUFDQyxLQUFI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LCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg6Iez5bCK5pyI5Y2hXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wMy0xMyAxOTo0NjozM1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKTtcbnZhciBXZWxmYXJlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJ3ZWxmYXJlX2NvbnRyb2xsZXJcIik7XG52YXIgV2VsZmFyZUV2ZW50ID0gcmVxdWlyZShcIndlbGZhcmVfZXZlbnRcIik7XG52YXIgVGltZVRvb2wgPSByZXF1aXJlKFwidGltZXRvb2xcIik7XG5cbnZhciBTdXByZV95dWVrYVBhbmVsID0gY2MuQ2xhc3Moe1xuICAgIGV4dGVuZHM6IEJhc2VQYW5lbCxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJ3ZWxmYXJlXCIsIFwieXVla2FfcGFuZWxcIik7XG4gICAgfSxcblxuICAgIC8vIOWPr+S7peWIneWni+WMluWjsOaYjuS4gOS6m+WPmOmHj+eahFxuICAgIGluaXRDb25maWc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jdHJsID0gV2VsZmFyZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5jYXJkX2RhdGEgPSBDb25maWcuY2hhcmdlX2RhdGEuZGF0YV9jb25zdGFudDtcbiAgICAgICAgdGhpcy5jYXJkMV9hZGRfY291bnQgPSB0aGlzLmNhcmRfZGF0YS5tb250aF9jYXJkMV9zdW4udmFsO1xuICAgICAgICB0aGlzLml0ZW1fYmlkXzEgPSB0aGlzLmNhcmRfZGF0YS5tb250aF9jYXJkMV9pdGVtcy52YWxbMF1bMF07XG4gICAgICAgIHRoaXMuaXRlbV9udW1fMSA9IHRoaXMuY2FyZF9kYXRhLm1vbnRoX2NhcmQxX2l0ZW1zLnZhbFswXVsxXTtcbiAgICAgICAgdGhpcy5hZGRfZ2V0X2RheV8xID0gdGhpcy5jYXJkX2RhdGEubW9udGhfY2FyZDFfY29udF9kYXkudmFsO1xuICAgICAgICB0aGlzLmN1cnJlbnRfZGF5ID0gMDtcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW5LiA5Lqb6YWN572u5pWw5o2uLOWPr+S7peeUqOS6juWjsOaYjuS4gOS6m+WPmOmHj+S5i+exu+eahFxuICAgIGluaXRQYW5lbDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm1haW5fY29udGFpbmVyID0gdGhpcy5zZWVrQ2hpbGQoXCJtYWluX2NvbnRhaW5lclwiKTtcbiAgICAgICAgdmFyIGJnID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5tYWluX2NvbnRhaW5lciwgXCJiZ1wiLCBjYy5TcHJpdGUpO1xuICAgICAgICB2YXIgcmVzX2lkID0gUGF0aFRvb2wuZ2V0QmlnQmcoXCJ0eHRfY25fd2VsZmFyZV95dWVrYV9iZzFcIiwgbnVsbCwgXCJ3ZWxmYXJlXCIpO1xuICAgICAgICB0aGlzLmxvYWRSZXMocmVzX2lkLCBmdW5jdGlvbiAocmVzX29iamVjdCkge1xuICAgICAgICAgICAgYmcuc3ByaXRlRnJhbWUgPSByZXNfb2JqZWN0O1xuICAgICAgICB9LmJpbmQodGhpcykpXG5cbiAgICAgICAgdGhpcy5idG5fMV9uZCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl9jb250YWluZXIsIFwiYnRuXzFcIik7XG4gICAgICAgIHRoaXMuc2Vla0NoaWxkKHRoaXMuYnRuXzFfbmQsIFwiVGV4dF8xXCIsIGNjLkxhYmVsKS5zdHJpbmcgPSBVdGlscy5USTE4TihcIuWFheWAvOa/gOa0u1wiKTtcbiAgICAgICAgdGhpcy5iYXJfcGIgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm1haW5fY29udGFpbmVyLCBcImJhclwiLCBjYy5Qcm9ncmVzc0Jhcik7XG4gICAgICAgIHRoaXMuYmFyX3BiLnByb2dyZXNzID0gMDtcbiAgICAgICAgdGhpcy5jdXJyZW50X2NoYW5nZV9sYiA9IHRoaXMuc2Vla0NoaWxkKFwiY3VycmVudF9jaGFuZ2VcIiwgY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLmJ0bl9ydWxlX25kID0gdGhpcy5zZWVrQ2hpbGQoXCJidG5fcnVsZVwiKTtcbiAgICAgICAgdGhpcy5idG5fcnVsZV9uZC5hY3RpdmUgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuaW1hZ2VfZ2V0X25kID0gdGhpcy5zZWVrQ2hpbGQoXCJpbWFnZV9nZXRcIik7XG4gICAgICAgIHRoaXMuaW1hZ2VfZ2V0X25kLmFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMudGV4dF9kYXlfbGIgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLmltYWdlX2dldF9uZCwgXCJ0ZXh0X2RheVwiLCBjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMudGV4dF9kYXlfbGIuc3RyaW5nID0gXCJcIjtcbiAgICAgICAgdGhpcy50ZXh0X3RpbWVfbGIgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLmltYWdlX2dldF9uZCwgXCJ0ZXh0X3RpbWVcIiwgY2MuTGFiZWwpO1xuICAgICAgICB0aGlzLmJ0bl9nZXRfbmQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLmltYWdlX2dldF9uZCwgXCJidG5fZ2V0XCIpO1xuICAgICAgICB0aGlzLmJ0bl9nZXRfYnRuID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5pbWFnZV9nZXRfbmQsXCJidG5fZ2V0XCIsY2MuQnV0dG9uKTtcbiAgICAgICAgdGhpcy5idG5fZ2V0X2xiID0gdGhpcy5zZWVrQ2hpbGQodGhpcy5idG5fZ2V0X25kLCBcIlRleHRfNFwiLCBjYy5MYWJlbCk7XG4gICAgICAgIHRoaXMuYnRuX2dldF9sbyA9IHRoaXMuc2Vla0NoaWxkKHRoaXMuYnRuX2dldF9uZCxcIlRleHRfNFwiLGNjLkxhYmVsT3V0bGluZSk7XG4gICAgICAgIHRoaXMuYnRuX2dldF9sYi5zdHJpbmcgPSBcIumihuWPllwiO1xuXG4gICAgICAgIHZhciBpbWFnZV8wXzFfbmQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm1haW5fY29udGFpbmVyLCBcIkltYWdlXzFfMFwiKVxuICAgICAgICB0aGlzLnRleHRfMV9ydCA9IHRoaXMuc2Vla0NoaWxkKGltYWdlXzBfMV9uZCwgXCJ0ZXh0XzFcIiwgY2MuUmljaFRleHQpO1xuICAgICAgICB0aGlzLnRleHRfMl9ydCA9IHRoaXMuc2Vla0NoaWxkKHRoaXMubWFpbl9jb250YWluZXIsIFwidGV4dF8yXCIsIGNjLlJpY2hUZXh0KTtcbiAgICAgICAgdGhpcy50ZXh0XzNfcnQgPSB0aGlzLnNlZWtDaGlsZCh0aGlzLm1haW5fY29udGFpbmVyLCBcInRleHRfM1wiLCBjYy5SaWNoVGV4dCk7XG5cbiAgICAgICAgdGhpcy50ZXh0XzFfcnQuc3RyaW5nID0gY2MuanMuZm9ybWF0U3RyKFxuICAgICAgICAgICAgVXRpbHMuVEkxOE4oXCI8b3V0bGluZSB3aWR0aD0xIGNvbG9yPSMxMTA4MDA+5Lu75oSP57Sv6K6h5YWF5YC86L6+5YiwPC9vdXRsaW5lPjxjb2xvcj0jZmZiNTAyPiAlZOWFgyA8L2M+PG91dGxpbmUgd2lkdGg9MSxjb2xvcj0jMTEwODAwPuWNs+WPr+a/gOa0uzwvb3V0bGluZT5cIiksXG4gICAgICAgICAgICB0aGlzLmNhcmQxX2FkZF9jb3VudClcblxuXG4gICAgICAgIHZhciBpdGVtX2NvbmZpZyA9IFV0aWxzLmdldEl0ZW1Db25maWcodGhpcy5jYXJkX2RhdGEubW9udGhfY2FyZDFfcmV0dXJuLnZhbFswXVswXSk7XG4gICAgICAgIHRoaXMudGV4dF8yX3J0LnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihcbiAgICAgICAgICAgIFV0aWxzLlRJMThOKFwiPG91dGxpbmUgd2lkdGg9MSBjb2xvcj0jMTEwODAwPuWFheWAvOmAgei2heWAvOaciOWNoSw8L291dGxpbmU+PG91dGxpbmUgd2lkdGg9MSBjb2xvcj0jMDAwMDAwPjxjb2xvcj0jZmZiNTAyID4g6L+U6L+YJWQgPC9jPjwvb3V0bGluZT48aW1nIHNyYz0lcyB2aXNpYmxlPXRydWUgc2NhbGU9MC4zMCAvPlwiKSxcbiAgICAgICAgICAgIHRoaXMuY2FyZF9kYXRhLm1vbnRoX2NhcmQxX3JldHVybi52YWxbMF1bMV0sIFBhdGhUb29sLmdldEl0ZW1SZXMoaXRlbV9jb25maWcuaWNvbikpXG5cbiAgICAgICAgdmFyIGl0ZW1fY29uZmlnID0gVXRpbHMuZ2V0SXRlbUNvbmZpZyh0aGlzLml0ZW1fYmlkXzEpO1xuICAgICAgICB0aGlzLnRleHRfM19ydC5zdHJpbmcgPSBjYy5qcy5mb3JtYXRTdHIoXG4gICAgICAgICAgICBVdGlscy5USTE4TihcIjxvdXRsaW5lIHdpZHRoPTEgY29sb3I9IzExMDgwMD7mr4/ml6Xlj6/pooblj5Y8L291dGxpbmU+PGNvbG9yPSNmZmI1MDIgPjxvdXRsaW5lIHdpZHRoPTEgY29sb3I9IzAwMDAwMD4gJWQ8L291dGxpbmU+IDwvYz48aW1nIHNyYz0lcyB2aXNpYmxlPXRydWUgc2NhbGU9MC4zMCAvPjxvdXRsaW5lIHdpZHRoPTEgY29sb3I9IzExMDgwMD7mjIHnu60gPC9vdXRsaW5lPjxjb2xvcj0jZmZiNTAyID48b3V0bGluZSB3aWR0aD0xIGNvbG9yPSMwMDAwMDA+JWTlpKk8L291dGxpbmU+PC9jPlwiKSxcbiAgICAgICAgICAgIHRoaXMuaXRlbV9udW1fMSwgUGF0aFRvb2wuZ2V0SXRlbVJlcyhpdGVtX2NvbmZpZy5pY29uKSwgdGhpcy5hZGRfZ2V0X2RheV8xKVxuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmFkZEdsb2JhbEV2ZW50KFdlbGZhcmVFdmVudC5VcGRhdGVfWXVla2EsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICB2YXIgYWRkX2NvdW50ID0gMTAwLCBhY2NfY291bnQgPSAxMDA7XG4gICAgICAgICAgICB2YXIgaXRlbV9iaWQgPSBudWxsLCBpdGVtX251bSA9IG51bGw7XG4gICAgICAgICAgICB2YXIgZ2V0X2RheSA9IDAsIGRheSA9IDAsIGVuZF90aW1lID0gMDtcbiAgICAgICAgICAgIGlmIChkYXRhLmNhcmQxX2lzX3Jld2FyZCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZV9nZXRfbmQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5idG5fMV9uZC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGFkZF9jb3VudCA9IHRoaXMuY2FyZDFfYWRkX2NvdW50O1xuICAgICAgICAgICAgICAgIGFjY19jb3VudCA9IGRhdGEuY2FyZDFfYWNjO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmNhcmQxX2lzX3Jld2FyZCA9PSAxIHx8IGRhdGEuY2FyZDFfaXNfcmV3YXJkID09IDIpIHtcbiAgICAgICAgICAgICAgICBpdGVtX2JpZCA9IHRoaXMuaXRlbV9iaWRfMTtcbiAgICAgICAgICAgICAgICBpdGVtX251bSA9IHRoaXMuaXRlbV9udW1fMTtcbiAgICAgICAgICAgICAgICBkYXkgPSBkYXRhLmNhcmQxX2RheXM7XG4gICAgICAgICAgICAgICAgZ2V0X2RheSA9IHRoaXMuYWRkX2dldF9kYXlfMTtcbiAgICAgICAgICAgICAgICBlbmRfdGltZSA9IGRhdGEuY2FyZDFfZW5kX3RpbWU7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRfZGF5ID0gZGF5O1xuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VfZ2V0X25kLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5idG5fMV9uZC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5jYXJkMV9pc19yZXdhcmQgPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBVdGlscy5zZXRHcmV5QnV0dG9uKHRoaXMuYnRuX2dldF9idG4sZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnRuX2dldF9sYi5zdHJpbmcgPSBVdGlscy5USTE4TihcIumihuWPllwiKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idG5fZ2V0X2xvLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5jYXJkMV9pc19yZXdhcmQgPT0gMikge1xuICAgICAgICAgICAgICAgICAgICBVdGlscy5zZXRHcmV5QnV0dG9uKHRoaXMuYnRuX2dldF9idG4sdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idG5fZ2V0X2xiLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5bey6aKG5Y+WXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ0bl9nZXRfbG8uZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8v6aKG5Y+W5pe26Ze0XG4gICAgICAgICAgICAgICAgdmFyIHN0YXJ0X3RpbWUgPSBlbmRfdGltZSAtIDg2NDAwICogZ2V0X2RheTtcbiAgICAgICAgICAgICAgICB2YXIgc3RyID0gY2MuanMuZm9ybWF0U3RyKFwiJXMgLSAlc1wiLCBUaW1lVG9vbC5nZXRNRDIoc3RhcnRfdGltZSksIFRpbWVUb29sLmdldE1EMihlbmRfdGltZSAtIDEpKVxuICAgICAgICAgICAgICAgIHRoaXMudGV4dF90aW1lX2xiLnN0cmluZyA9IHN0cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYmFyX3BiLnByb2dyZXNzID0gYWNjX2NvdW50IC8gYWRkX2NvdW50O1xuICAgICAgICAgICAgdmFyIHN0ciA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIuW9k+WJjeWFheWAvO+8miVkIC8gJWRcIiksIGFjY19jb3VudCwgYWRkX2NvdW50KTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudF9jaGFuZ2VfbGIuc3RyaW5nID0gc3RyO1xuICAgICAgICAgICAgaWYgKGl0ZW1fYmlkICYmIGl0ZW1fbnVtKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJld2FyZF9pdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV3YXJkX2l0ZW0gPSBJdGVtc1Bvb2wuZ2V0SW5zdGFuY2UoKS5nZXRJdGVtKFwiYmFja3BhY2tfaXRlbVwiKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRfaXRlbS5pbml0Q29uZmlnKG51bGwsIDEsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRfaXRlbS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmV3YXJkX2l0ZW0uc2V0UG9zaXRpb24oLTI2MCwwKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJld2FyZF9pdGVtLnNldFBhcmVudCh0aGlzLmltYWdlX2dldF9uZCk7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmV3YXJkX2l0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRfaXRlbS5zZXREYXRhKHsgYmlkOiBpdGVtX2JpZCwgbnVtOiBpdGVtX251bSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRleHRfZGF5X2xiLnN0cmluZyA9IHRoaXMuY3VycmVudF9kYXk7XG4gICAgICAgIH0sIHRoaXMpXG5cbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChXZWxmYXJlRXZlbnQuVXBkYXRlX0dldF9ZdWVrYSwgZnVuY3Rpb24gKF90eXBlKSB7XG4gICAgICAgICAgICBpZiAoX3R5cGUgPT0gMSkge1xuICAgICAgICAgICAgICAgIFV0aWxzLnNldEdyZXlCdXR0b24odGhpcy5idG5fZ2V0X2J0bix0cnVlKVxuICAgICAgICAgICAgICAgIHRoaXMuYnRuX2dldF9sYi5zdHJpbmcgPSBVdGlscy5USTE4TihcIuW3sumihuWPllwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ0bl9nZXRfbG8uZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudF9kYXkgPSB0aGlzLmN1cnJlbnRfZGF5ICsgMTtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRfZGF5X2xiLnN0cmluZyA9IHRoaXMuY3VycmVudF9kYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMpXG5cbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLmJ0bl8xX25kLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXF1aXJlKFwidmlwX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKS5vcGVuVmlwTWFpbldpbmRvdyh0cnVlLCBWSVBUQUJDT05TVC5DSEFSR0UpXG4gICAgICAgIH0uYmluZCh0aGlzKSwgMSlcbiAgICAgICAgVXRpbHMub25Ub3VjaEVuZCh0aGlzLmJ0bl9nZXRfbmQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuY3RybC5zZW5kZXIxNjcwNigxKVxuICAgICAgICB9LmJpbmQodGhpcyksIDEpXG4gICAgICAgIFV0aWxzLm9uVG91Y2hFbmQodGhpcy5idG5fcnVsZV9uZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2MubG9nKFZJUFRBQkNPTlNULlZJUClcbiAgICAgICAgICAgIHJlcXVpcmUoXCJ2aXBfY29udHJvbGxlclwiKS5nZXRJbnN0YW5jZSgpLm9wZW5WaXBNYWluV2luZG93KHRydWUsIFZJUFRBQkNPTlNULlZJUClcbiAgICAgICAgfS5iaW5kKHRoaXMpLCAxKVxuXG4gICAgICAgIHRoaXMuY3RybC5zZW5kZXIxNjcwNSgpO1xuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCD5Y+v5Lul6K6+572u5LiA5Lqb5pWw5o2u5LqGXG4gICAgb25TaG93OiBmdW5jdGlvbiAocGFyYW1zKSB7XG5cbiAgICB9LFxuXG4gICAgc2V0VmlzaWJsZVN0YXR1czogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgYm9vbCA9IGJvb2wgfHwgZmFsc2U7XG4gICAgICAgIHRoaXMuc2V0VmlzaWJsZShib29sKVxuICAgIH0sXG5cbiAgICAvLyDpnaLmnb/orr7nva7kuI3lj6/op4HnmoTlm57osIMs6L+Z6YeM5YGa5LiA5Lqb5LiN5Y+v6KeB55qE5bGP6JS95aSE55CGXG4gICAgb25IaWRlOiBmdW5jdGlvbiAoKSB7XG5cbiAgICB9LFxuXG4gICAgLy8g5b2T6Z2i5p2/5LuO5Li76IqC54K56YeK5pS+5o6J55qE6LCD55So5o6l5Y+jLOmcgOimgeaJi+WKqOiwg+eUqCzogIzkuJTkuZ/kuIDlrpropoHosIPnlKhcbiAgICBvbkRlbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5yZXdhcmRfaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5yZXdhcmRfaXRlbS5kZWxldGVNZSgpO1xuICAgICAgICAgICAgdGhpcy5yZXdhcmRfaXRlbSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxufSkiXX0=