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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/vedio/view/vedio_collect_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, '6b6a2Ngwu5CLaSrT9lrtvei', 'vedio_collect_window');
// Scripts/mod/vedio/view/vedio_collect_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     录像收藏界面
// <br/>Create: 2019-05-22 14:22:43
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var CommonScrollView = require("common_scrollview");
 
var VedioController = require("vedio_controller");
 
var VedioConst = require("vedio_const");
 
var VedioMainItem = require("vedio_item_panel");
 
var VedioEvent = require("vedio_event");
 
var RoleController = require("role_controller");
 
var ChatConst = require("chat_const");
 
var VedioCollectWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("vedio", "vedio_collect_window");
    this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
 
    this.win_type = WinType.big; //是否是全屏窗体  WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
 
    this.ctrl = VedioController.getInstance();
    this._model = this.ctrl.getModel();
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initConfig: function initConfig() {},
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    var self = this;
    self.background = self.root_wnd.getChildByName("background");
    var main_container = self.root_wnd.getChildByName("main_container");
    self.main_container = main_container;
    self.share_panel = self.root_wnd.getChildByName("share_panel");
    self.share_panel.active = false;
    self.share_bg = self.share_panel.getChildByName("share_bg");
    self.btn_guild = self.share_bg.getChildByName("btn_guild");
    self.btn_world = self.share_bg.getChildByName("btn_world");
    self.btn_cross = self.share_bg.getChildByName("btn_cross");
    self.share_bg.getChildByName("guild_label").getComponent(cc.Label).string = Utils.TI18N("分享到公会频道");
    self.share_bg.getChildByName("world_label").getComponent(cc.Label).string = Utils.TI18N("分享到世界频道"); // self.share_bg.getChildByName("cross_label"):setString(TI18N("分享到跨服频道"))
 
    var win_title = main_container.getChildByName("win_title");
    win_title.getComponent(cc.Label).string = Utils.TI18N("个人收藏");
    self.num_txt = main_container.getChildByName("num_txt").getComponent(cc.Label);
    self.no_vedio_image = main_container.getChildByName("no_vedio_image");
    self.no_vedio_image.getChildByName("label").getComponent(cc.Label).string = Utils.TI18N("暂无录像收藏");
    var vedio_list = main_container.getChildByName("vedio_list");
    var scroll_view_size = vedio_list.getContentSize();
    var setting = {
      item_class: VedioMainItem,
      //-- 单元类
      start_x: 0,
      //-- 第一个单元的X起点
      space_x: 0,
      //-- x方向的间隔
      start_y: 0,
      //-- 第一个单元的Y起点
      space_y: 5,
      //-- y方向的间隔
      item_width: 620,
      //-- 单元的尺寸width
      item_height: 374,
      //-- 单元的尺寸height
      row: 0,
      //-- 行数,作用于水平滚动类型
      col: 1,
      //-- 列数,作用于垂直滚动类型
      need_dynamic: true
    };
    this.vedio_scrollview = new CommonScrollView();
    this.vedio_scrollview.createScroll(vedio_list, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, scroll_view_size, setting);
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    this.btn_guild.on('click', function () {
      Utils.playButtonSound(1);
 
      if (RoleController.getInstance().getRoleVo().isHasGuild() == false) {
        message(Utils.TI18N("您暂未加入公会"));
        return;
      }
 
      if (this.replay_id) {
        this.ctrl.requestShareVedio(this.replay_id, ChatConst.Channel.Gang, this.srv_id, this.combat_type);
 
        this._model.updateVedioData(null, this.replay_id, "share", this.share_num);
 
        var new_data = this.updateVedioDataById(this.replay_id, "share", this.share_num);
        gcore.GlobalEvent.fire(VedioEvent.UpdateVedioDataEvent, new_data);
      }
 
      this.replay_id = null;
      this.srv_id = null;
      this.combat_type = null;
      this.share_panel.active = false;
    }, this);
    this.btn_world.on("click", function () {
      Utils.playButtonSound(1);
 
      if (this.replay_id) {
        this.ctrl.requestShareVedio(this.replay_id, ChatConst.Channel.World, this.srv_id, this.combat_type);
 
        this._model.updateVedioData(null, this.replay_id, "share", this.share_num);
 
        var new_data = this.updateVedioDataById(this.replay_id, "share", this.share_num);
        gcore.GlobalEvent.fire(VedioEvent.UpdateVedioDataEvent, new_data);
      }
 
      this.replay_id = null;
      this.srv_id = null;
      this.combat_type = null;
      this.share_panel.active = false;
    }, this);
    this.share_panel.on("touchend", function () {
      this.share_panel.active = false;
    }, this);
    this.background.on("touchend", function () {
      Utils.playButtonSound(2);
      this.ctrl.openVedioCollectWindow(false);
    }, this);
    this.addGlobalEvent(VedioEvent.UpdateCollectVedioEvent, function (data) {
      this.setData(data);
    }.bind(this));
    this.addGlobalEvent(VedioEvent.CancelCollectVedioEvent, function (id) {
      for (var i = 0; i < this.data.length; ++i) {
        var v = this.data[i];
 
        if (v.id == id) {
          this.data.splice(i, 1);
          break;
        }
      }
 
      if (Utils.next(this.data) == null) {
        this.no_vedio_image.active = true;
        this.vedio_scrollview.setData(this.data);
      } else {
        this.vedio_scrollview.resetAddPosition(this.data, this._onClickShareBtn.bind(this), {
          is_collect: true
        });
        this.no_vedio_image.active = false;
      }
 
      this.refreshCollectNum();
    }.bind(this));
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd(params) {
    this.ctrl.requestMyVedioByType(VedioConst.MyVedio_Type.Collect);
    this.refreshCollectNum();
    gcore.GlobalEvent.fire(VedioEvent.OpenCollectViewEvent, true);
  },
  setData: function setData(data) {
    var self = this;
 
    if (!data || Utils.next(data) == null) {
      self.no_vedio_image.active = true;
    } else {
      self.no_vedio_image.active = false;
      self.data = data;
      self.vedio_scrollview.setData(self.data, this._onClickShareBtn.bind(this), {
        is_collect: true
      }); // self.vedio_scrollview:reloadData()
      // --self.vedio_scrollview:setData(data, handler(self, self._onClickShareBtn), nil, {is_collect = true})
 
      self.refreshCollectNum();
    }
  },
  refreshCollectNum: function refreshCollectNum() {
    var cur_num = 0;
 
    if (this.data) {
      cur_num = this.data.length;
    }
 
    var max_num = 0;
    var collect_cfg = Config.video_data.data_const["self_collection_limit"];
 
    if (collect_cfg) {
      max_num = collect_cfg.val;
    }
 
    this.num_txt.string = cc.js.formatStr(Utils.TI18N("收藏数:%d/%d"), cur_num, max_num);
  },
  _onClickShareBtn: function _onClickShareBtn(world_pos, replay_id, share_num, srv_id, combat_type) {
    var self = this;
    self.replay_id = replay_id;
    self.share_num = share_num;
    self.srv_id = srv_id;
    self.combat_type = combat_type;
    var node_pos = self.share_panel.convertToNodeSpaceAR(world_pos);
 
    if (node_pos) {
      self.share_bg.setPosition(cc.v2(node_pos.x - 60, node_pos.y + 45));
      self.share_panel.active = true;
    }
  },
  updateVedioDataById: function updateVedioDataById(id, key, val) {
    if (!this.data) return;
    var vedio_data = {};
 
    for (var k = 0; k < this.data.length; ++k) {
      var v = this.data[k];
 
      if (v.id == id) {
        v[key] = val;
        vedio_data = v;
        break;
      }
    }
 
    return vedio_data;
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    if (this.vedio_scrollview) {
      this.vedio_scrollview.DeleteMe();
      this.vedio_scrollview = null;
    }
 
    gcore.GlobalEvent.fire(VedioEvent.OpenCollectViewEvent, false);
    this.ctrl.openVedioCollectWindow(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFx2ZWRpb1xcdmlld1xcdmVkaW9fY29sbGVjdF93aW5kb3cuanMiXSwibmFtZXMiOlsiUGF0aFRvb2wiLCJyZXF1aXJlIiwiQ29tbW9uU2Nyb2xsVmlldyIsIlZlZGlvQ29udHJvbGxlciIsIlZlZGlvQ29uc3QiLCJWZWRpb01haW5JdGVtIiwiVmVkaW9FdmVudCIsIlJvbGVDb250cm9sbGVyIiwiQ2hhdENvbnN0IiwiVmVkaW9Db2xsZWN0V2luZG93IiwiY2MiLCJDbGFzcyIsIkJhc2VWaWV3IiwiY3RvciIsInByZWZhYlBhdGgiLCJnZXRQcmVmYWJQYXRoIiwidmlld1RhZyIsIlNDRU5FX1RBRyIsImRpYWxvZ3VlIiwid2luX3R5cGUiLCJXaW5UeXBlIiwiYmlnIiwiY3RybCIsImdldEluc3RhbmNlIiwiX21vZGVsIiwiZ2V0TW9kZWwiLCJpbml0Q29uZmlnIiwib3BlbkNhbGxCYWNrIiwic2VsZiIsImJhY2tncm91bmQiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwibWFpbl9jb250YWluZXIiLCJzaGFyZV9wYW5lbCIsImFjdGl2ZSIsInNoYXJlX2JnIiwiYnRuX2d1aWxkIiwiYnRuX3dvcmxkIiwiYnRuX2Nyb3NzIiwiZ2V0Q29tcG9uZW50IiwiTGFiZWwiLCJzdHJpbmciLCJVdGlscyIsIlRJMThOIiwid2luX3RpdGxlIiwibnVtX3R4dCIsIm5vX3ZlZGlvX2ltYWdlIiwidmVkaW9fbGlzdCIsInNjcm9sbF92aWV3X3NpemUiLCJnZXRDb250ZW50U2l6ZSIsInNldHRpbmciLCJpdGVtX2NsYXNzIiwic3RhcnRfeCIsInNwYWNlX3giLCJzdGFydF95Iiwic3BhY2VfeSIsIml0ZW1fd2lkdGgiLCJpdGVtX2hlaWdodCIsInJvdyIsImNvbCIsIm5lZWRfZHluYW1pYyIsInZlZGlvX3Njcm9sbHZpZXciLCJjcmVhdGVTY3JvbGwiLCJ2MiIsIlNjcm9sbFZpZXdEaXIiLCJ2ZXJ0aWNhbCIsIlNjcm9sbFZpZXdTdGFydFBvcyIsInRvcCIsInJlZ2lzdGVyRXZlbnQiLCJvbiIsInBsYXlCdXR0b25Tb3VuZCIsImdldFJvbGVWbyIsImlzSGFzR3VpbGQiLCJtZXNzYWdlIiwicmVwbGF5X2lkIiwicmVxdWVzdFNoYXJlVmVkaW8iLCJDaGFubmVsIiwiR2FuZyIsInNydl9pZCIsImNvbWJhdF90eXBlIiwidXBkYXRlVmVkaW9EYXRhIiwic2hhcmVfbnVtIiwibmV3X2RhdGEiLCJ1cGRhdGVWZWRpb0RhdGFCeUlkIiwiZ2NvcmUiLCJHbG9iYWxFdmVudCIsImZpcmUiLCJVcGRhdGVWZWRpb0RhdGFFdmVudCIsIldvcmxkIiwib3BlblZlZGlvQ29sbGVjdFdpbmRvdyIsImFkZEdsb2JhbEV2ZW50IiwiVXBkYXRlQ29sbGVjdFZlZGlvRXZlbnQiLCJkYXRhIiwic2V0RGF0YSIsImJpbmQiLCJDYW5jZWxDb2xsZWN0VmVkaW9FdmVudCIsImlkIiwiaSIsImxlbmd0aCIsInYiLCJzcGxpY2UiLCJuZXh0IiwicmVzZXRBZGRQb3NpdGlvbiIsIl9vbkNsaWNrU2hhcmVCdG4iLCJpc19jb2xsZWN0IiwicmVmcmVzaENvbGxlY3ROdW0iLCJvcGVuUm9vdFduZCIsInBhcmFtcyIsInJlcXVlc3RNeVZlZGlvQnlUeXBlIiwiTXlWZWRpb19UeXBlIiwiQ29sbGVjdCIsIk9wZW5Db2xsZWN0Vmlld0V2ZW50IiwiY3VyX251bSIsIm1heF9udW0iLCJjb2xsZWN0X2NmZyIsIkNvbmZpZyIsInZpZGVvX2RhdGEiLCJkYXRhX2NvbnN0IiwidmFsIiwianMiLCJmb3JtYXRTdHIiLCJ3b3JsZF9wb3MiLCJub2RlX3BvcyIsImNvbnZlcnRUb05vZGVTcGFjZUFSIiwic2V0UG9zaXRpb24iLCJ4IiwieSIsImtleSIsInZlZGlvX2RhdGEiLCJrIiwiY2xvc2VDYWxsQmFjayIsIkRlbGV0ZU1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlBLFFBQVEsR0FBR0MsT0FB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QUFqQztBQUNIO0FBdEw2QixDQUFULENBQXpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAg5b2V5YOP5pS26JeP55WM6Z2iXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wNS0yMiAxNDoyMjo0M1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBQYXRoVG9vbCA9IHJlcXVpcmUoXCJwYXRodG9vbFwiKTtcbnZhciBDb21tb25TY3JvbGxWaWV3ID0gcmVxdWlyZShcImNvbW1vbl9zY3JvbGx2aWV3XCIpO1xudmFyIFZlZGlvQ29udHJvbGxlciA9IHJlcXVpcmUoXCJ2ZWRpb19jb250cm9sbGVyXCIpXG52YXIgVmVkaW9Db25zdCA9IHJlcXVpcmUoXCJ2ZWRpb19jb25zdFwiKVxudmFyIFZlZGlvTWFpbkl0ZW0gPSByZXF1aXJlKFwidmVkaW9faXRlbV9wYW5lbFwiKVxudmFyIFZlZGlvRXZlbnQgPSByZXF1aXJlKFwidmVkaW9fZXZlbnRcIilcbnZhciBSb2xlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIilcbnZhciBDaGF0Q29uc3QgPSByZXF1aXJlKFwiY2hhdF9jb25zdFwiKVxudmFyIFZlZGlvQ29sbGVjdFdpbmRvdyA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlVmlldyxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJ2ZWRpb1wiLCBcInZlZGlvX2NvbGxlY3Rfd2luZG93XCIpO1xuICAgICAgICB0aGlzLnZpZXdUYWcgPSBTQ0VORV9UQUcuZGlhbG9ndWU7ICAgICAgICAgICAgICAgIC8v6K+l56qX5L2T5omA5bGedWnlsYLnuqcs5YWo5bGPdWnpnIDopoHlnKh1aeWxgizpnZ7lhajlsY91aeWcqGRpYWxvZ3Vl5bGCLOi/meS4quimgeazqOaEj1xuICAgICAgICB0aGlzLndpbl90eXBlID0gV2luVHlwZS5iaWc7ICAgICAgICAgICAgICAgLy/mmK/lkKbmmK/lhajlsY/nqpfkvZMgIFdpblR5cGUuRnVsbCwgV2luVHlwZS5CaWcsIFdpblR5cGUuTWluaSwgV2luVHlwZS5UaXBzXG4gICAgICAgIHRoaXMuY3RybCA9IFZlZGlvQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpXG4gICAgICAgIHRoaXMuX21vZGVsID0gdGhpcy5jdHJsLmdldE1vZGVsKClcbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW5LiA5Lqb6YWN572u5pWw5o2uLOWPr+S7peeUqOS6juWjsOaYjuS4gOS6m+WPmOmHj+S5i+exu+eahFxuICAgIGluaXRDb25maWc6ZnVuY3Rpb24oKXtcblxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI7nmoTlm57osIMs5Y+v5Lul5Zyo6L+Z6YeM5o2V6I6355u45YWz6IqC54K55oiW6ICF57uE5Lu2XG4gICAgb3BlbkNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBzZWxmID0gdGhpc1xuICAgICAgICBzZWxmLmJhY2tncm91bmQgPSBzZWxmLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwiYmFja2dyb3VuZFwiKVxuICAgICAgICBsZXQgbWFpbl9jb250YWluZXIgPSBzZWxmLnJvb3Rfd25kLmdldENoaWxkQnlOYW1lKFwibWFpbl9jb250YWluZXJcIilcbiAgICAgICAgc2VsZi5tYWluX2NvbnRhaW5lciA9IG1haW5fY29udGFpbmVyXG4gICAgICAgIFxuICAgICAgICBzZWxmLnNoYXJlX3BhbmVsID0gc2VsZi5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcInNoYXJlX3BhbmVsXCIpXG4gICAgICAgIHNlbGYuc2hhcmVfcGFuZWwuYWN0aXZlID0gZmFsc2VcbiAgICAgICAgc2VsZi5zaGFyZV9iZyA9IHNlbGYuc2hhcmVfcGFuZWwuZ2V0Q2hpbGRCeU5hbWUoXCJzaGFyZV9iZ1wiKVxuICAgICAgICBzZWxmLmJ0bl9ndWlsZCA9IHNlbGYuc2hhcmVfYmcuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fZ3VpbGRcIilcbiAgICAgICAgc2VsZi5idG5fd29ybGQgPSBzZWxmLnNoYXJlX2JnLmdldENoaWxkQnlOYW1lKFwiYnRuX3dvcmxkXCIpXG4gICAgICAgIHNlbGYuYnRuX2Nyb3NzID0gc2VsZi5zaGFyZV9iZy5nZXRDaGlsZEJ5TmFtZShcImJ0bl9jcm9zc1wiKVxuICAgICAgICBzZWxmLnNoYXJlX2JnLmdldENoaWxkQnlOYW1lKFwiZ3VpbGRfbGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBVdGlscy5USTE4TihcIuWIhuS6q+WIsOWFrOS8mumikemBk1wiKTtcbiAgICAgICAgc2VsZi5zaGFyZV9iZy5nZXRDaGlsZEJ5TmFtZShcIndvcmxkX2xhYmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLliIbkuqvliLDkuJbnlYzpopHpgZNcIik7XG4gICAgICAgIC8vIHNlbGYuc2hhcmVfYmcuZ2V0Q2hpbGRCeU5hbWUoXCJjcm9zc19sYWJlbFwiKTpzZXRTdHJpbmcoVEkxOE4oXCLliIbkuqvliLDot6jmnI3popHpgZNcIikpXG5cbiAgICAgICAgbGV0IHdpbl90aXRsZSA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwid2luX3RpdGxlXCIpXG4gICAgICAgIHdpbl90aXRsZS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFV0aWxzLlRJMThOKFwi5Liq5Lq65pS26JePXCIpXG5cbiAgICAgICAgc2VsZi5udW1fdHh0ID0gbWFpbl9jb250YWluZXIuZ2V0Q2hpbGRCeU5hbWUoXCJudW1fdHh0XCIpLmdldENvbXBvbmVudChjYy5MYWJlbClcbiAgICAgICAgc2VsZi5ub192ZWRpb19pbWFnZSA9IG1haW5fY29udGFpbmVyLmdldENoaWxkQnlOYW1lKFwibm9fdmVkaW9faW1hZ2VcIilcbiAgICAgICAgc2VsZi5ub192ZWRpb19pbWFnZS5nZXRDaGlsZEJ5TmFtZShcImxhYmVsXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gVXRpbHMuVEkxOE4oXCLmmoLml6DlvZXlg4/mlLbol49cIik7XG5cbiAgICAgICAgbGV0IHZlZGlvX2xpc3QgPSBtYWluX2NvbnRhaW5lci5nZXRDaGlsZEJ5TmFtZShcInZlZGlvX2xpc3RcIilcbiAgICAgICAgbGV0IHNjcm9sbF92aWV3X3NpemUgPSB2ZWRpb19saXN0LmdldENvbnRlbnRTaXplKClcbiAgICAgICAgbGV0IHNldHRpbmcgPSB7XG4gICAgICAgICAgICBpdGVtX2NsYXNzIDogVmVkaW9NYWluSXRlbSwgICAgICAvLy0tIOWNleWFg+exu1xuICAgICAgICAgICAgc3RhcnRfeCA6IDAsICAgICAgICAgICAgICAgICAgLy8tLSDnrKzkuIDkuKrljZXlhYPnmoRY6LW354K5XG4gICAgICAgICAgICBzcGFjZV94IDogMCwgICAgICAgICAgICAgICAgICAgIC8vLS0geOaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgc3RhcnRfeSA6IDAsICAgICAgICAgICAgICAgICAgICAvLy0tIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3kgOiA1LCAgICAgICAgICAgICAgICAgICAvLy0tIHnmlrnlkJHnmoTpl7TpmpRcbiAgICAgICAgICAgIGl0ZW1fd2lkdGggOiA2MjAsICAgICAgICAgICAgICAgLy8tLSDljZXlhYPnmoTlsLrlr7h3aWR0aFxuICAgICAgICAgICAgaXRlbV9oZWlnaHQgOiAzNzQsICAgICAgICAgICAgICAvLy0tIOWNleWFg+eahOWwuuWvuGhlaWdodFxuICAgICAgICAgICAgcm93IDogMCwgICAgICAgICAgICAgICAgICAgICAgICAvLy0tIOihjOaVsO+8jOS9nOeUqOS6juawtOW5s+a7muWKqOexu+Wei1xuICAgICAgICAgICAgY29sIDogMSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8tLSDliJfmlbDvvIzkvZznlKjkuo7lnoLnm7Tmu5rliqjnsbvlnotcbiAgICAgICAgICAgIG5lZWRfZHluYW1pYyA6IHRydWVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZlZGlvX3Njcm9sbHZpZXcgPSBuZXcgQ29tbW9uU2Nyb2xsVmlldygpO1xuICAgICAgICB0aGlzLnZlZGlvX3Njcm9sbHZpZXcuY3JlYXRlU2Nyb2xsKHZlZGlvX2xpc3QsIGNjLnYyKDAsMCkgLCBTY3JvbGxWaWV3RGlyLnZlcnRpY2FsLCBTY3JvbGxWaWV3U3RhcnRQb3MudG9wLCBzY3JvbGxfdmlld19zaXplLCBzZXR0aW5nKVxuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDpmdW5jdGlvbigpe1xuICAgICAgICB0aGlzLmJ0bl9ndWlsZC5vbignY2xpY2snLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMSlcbiAgICAgICAgICAgIGlmKFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCkuaXNIYXNHdWlsZCgpID09IGZhbHNlKXtcbiAgICAgICAgICAgICAgICBtZXNzYWdlKFV0aWxzLlRJMThOKFwi5oKo5pqC5pyq5Yqg5YWl5YWs5LyaXCIpKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodGhpcy5yZXBsYXlfaWQpe1xuICAgICAgICAgICAgICAgIHRoaXMuY3RybC5yZXF1ZXN0U2hhcmVWZWRpbyh0aGlzLnJlcGxheV9pZCwgQ2hhdENvbnN0LkNoYW5uZWwuR2FuZywgdGhpcy5zcnZfaWQsIHRoaXMuY29tYmF0X3R5cGUpXG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZWwudXBkYXRlVmVkaW9EYXRhKG51bGwsIHRoaXMucmVwbGF5X2lkLCBcInNoYXJlXCIsIHRoaXMuc2hhcmVfbnVtKVxuICAgICAgICAgICAgICAgIGxldCBuZXdfZGF0YSA9IHRoaXMudXBkYXRlVmVkaW9EYXRhQnlJZCh0aGlzLnJlcGxheV9pZCwgXCJzaGFyZVwiLCB0aGlzLnNoYXJlX251bSlcbiAgICAgICAgICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFZlZGlvRXZlbnQuVXBkYXRlVmVkaW9EYXRhRXZlbnQsIG5ld19kYXRhKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZXBsYXlfaWQgPSBudWxsXG4gICAgICAgICAgICB0aGlzLnNydl9pZCA9IG51bGxcbiAgICAgICAgICAgIHRoaXMuY29tYmF0X3R5cGUgPSBudWxsXG4gICAgICAgICAgICB0aGlzLnNoYXJlX3BhbmVsLmFjdGl2ZSA9IGZhbHNlXG4gICAgICAgIH0sdGhpcylcbiAgICAgICAgdGhpcy5idG5fd29ybGQub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMSlcbiAgICAgICAgICAgIGlmKHRoaXMucmVwbGF5X2lkKXtcbiAgICAgICAgICAgICAgICB0aGlzLmN0cmwucmVxdWVzdFNoYXJlVmVkaW8odGhpcy5yZXBsYXlfaWQsIENoYXRDb25zdC5DaGFubmVsLldvcmxkLCB0aGlzLnNydl9pZCwgdGhpcy5jb21iYXRfdHlwZSlcbiAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbC51cGRhdGVWZWRpb0RhdGEobnVsbCwgdGhpcy5yZXBsYXlfaWQsIFwic2hhcmVcIiwgdGhpcy5zaGFyZV9udW0pXG4gICAgICAgICAgICAgICAgbGV0IG5ld19kYXRhID0gdGhpcy51cGRhdGVWZWRpb0RhdGFCeUlkKHRoaXMucmVwbGF5X2lkLCBcInNoYXJlXCIsIHRoaXMuc2hhcmVfbnVtKVxuICAgICAgICAgICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoVmVkaW9FdmVudC5VcGRhdGVWZWRpb0RhdGFFdmVudCwgbmV3X2RhdGEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlcGxheV9pZCA9IG51bGxcbiAgICAgICAgICAgIHRoaXMuc3J2X2lkID0gbnVsbFxuICAgICAgICAgICAgdGhpcy5jb21iYXRfdHlwZSA9IG51bGxcbiAgICAgICAgICAgIHRoaXMuc2hhcmVfcGFuZWwuYWN0aXZlID0gZmFsc2VcbiAgICAgICAgfSx0aGlzKVxuICAgICAgICB0aGlzLnNoYXJlX3BhbmVsLm9uKFwidG91Y2hlbmRcIixmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zaGFyZV9wYW5lbC5hY3RpdmUgPSBmYWxzZVxuICAgICAgICB9LHRoaXMpXG4gICAgICAgIHRoaXMuYmFja2dyb3VuZC5vbihcInRvdWNoZW5kXCIsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgyKVxuICAgICAgICAgICAgdGhpcy5jdHJsLm9wZW5WZWRpb0NvbGxlY3RXaW5kb3coZmFsc2UpXG4gICAgICAgIH0sdGhpcylcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChWZWRpb0V2ZW50LlVwZGF0ZUNvbGxlY3RWZWRpb0V2ZW50LGZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICAgIH0uYmluZCh0aGlzKSlcbiAgICAgICAgdGhpcy5hZGRHbG9iYWxFdmVudChWZWRpb0V2ZW50LkNhbmNlbENvbGxlY3RWZWRpb0V2ZW50LGZ1bmN0aW9uKGlkKXtcbiAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8dGhpcy5kYXRhLmxlbmd0aDsrK2kpe1xuICAgICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5kYXRhW2ldXG4gICAgICAgICAgICAgICAgaWYodi5pZCA9PSBpZCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5zcGxpY2UoaSwxKVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKFV0aWxzLm5leHQodGhpcy5kYXRhKSA9PSBudWxsKXtcbiAgICAgICAgICAgICAgICB0aGlzLm5vX3ZlZGlvX2ltYWdlLmFjdGl2ZSA9IHRydWVcbiAgICAgICAgICAgICAgICB0aGlzLnZlZGlvX3Njcm9sbHZpZXcuc2V0RGF0YSh0aGlzLmRhdGEpXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICB0aGlzLnZlZGlvX3Njcm9sbHZpZXcucmVzZXRBZGRQb3NpdGlvbih0aGlzLmRhdGEsdGhpcy5fb25DbGlja1NoYXJlQnRuLmJpbmQodGhpcykse2lzX2NvbGxlY3QgOiB0cnVlfSlcbiAgICAgICAgICAgICAgICB0aGlzLm5vX3ZlZGlvX2ltYWdlLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXHRcdCAgICB0aGlzLnJlZnJlc2hDb2xsZWN0TnVtKClcbiAgICAgICAgfS5iaW5kKHRoaXMpKVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDpmdW5jdGlvbihwYXJhbXMpe1xuICAgICAgICB0aGlzLmN0cmwucmVxdWVzdE15VmVkaW9CeVR5cGUoVmVkaW9Db25zdC5NeVZlZGlvX1R5cGUuQ29sbGVjdClcbiAgICAgICAgdGhpcy5yZWZyZXNoQ29sbGVjdE51bSgpXG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoVmVkaW9FdmVudC5PcGVuQ29sbGVjdFZpZXdFdmVudCwgdHJ1ZSlcbiAgICB9LFxuICAgIHNldERhdGEoIGRhdGEgKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIGlmKCFkYXRhIHx8IFV0aWxzLm5leHQoZGF0YSkgPT0gbnVsbCl7XG4gICAgICAgICAgICBzZWxmLm5vX3ZlZGlvX2ltYWdlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgc2VsZi5ub192ZWRpb19pbWFnZS5hY3RpdmUgPSBmYWxzZVxuICAgICAgICAgICAgc2VsZi5kYXRhID0gZGF0YVxuICAgICAgICAgICAgc2VsZi52ZWRpb19zY3JvbGx2aWV3LnNldERhdGEoc2VsZi5kYXRhLHRoaXMuX29uQ2xpY2tTaGFyZUJ0bi5iaW5kKHRoaXMpLHtpc19jb2xsZWN0IDogdHJ1ZX0pXG4gICAgICAgICAgICAvLyBzZWxmLnZlZGlvX3Njcm9sbHZpZXc6cmVsb2FkRGF0YSgpXG4gICAgICAgICAgICAvLyAtLXNlbGYudmVkaW9fc2Nyb2xsdmlldzpzZXREYXRhKGRhdGEsIGhhbmRsZXIoc2VsZiwgc2VsZi5fb25DbGlja1NoYXJlQnRuKSwgbmlsLCB7aXNfY29sbGVjdCA9IHRydWV9KVxuICAgICAgICAgICAgc2VsZi5yZWZyZXNoQ29sbGVjdE51bSgpXG4gICAgICAgIH1cbiAgICB9LFxuICAgIHJlZnJlc2hDb2xsZWN0TnVtKCl7XG4gICAgICAgIGxldCBjdXJfbnVtID0gMFxuICAgICAgICBpZih0aGlzLmRhdGEpe1xuICAgICAgICAgICAgY3VyX251bSA9IHRoaXMuZGF0YS5sZW5ndGhcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWF4X251bSA9IDBcbiAgICAgICAgbGV0IGNvbGxlY3RfY2ZnID0gQ29uZmlnLnZpZGVvX2RhdGEuZGF0YV9jb25zdFtcInNlbGZfY29sbGVjdGlvbl9saW1pdFwiXVxuICAgICAgICBpZihjb2xsZWN0X2NmZyl7XG4gICAgICAgICAgICBtYXhfbnVtID0gY29sbGVjdF9jZmcudmFsXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5udW1fdHh0LnN0cmluZyA9IGNjLmpzLmZvcm1hdFN0cihVdGlscy5USTE4TihcIuaUtuiXj+aVsDolZC8lZFwiKSwgY3VyX251bSwgbWF4X251bSlcbiAgICB9LFxuICAgIF9vbkNsaWNrU2hhcmVCdG4oIHdvcmxkX3BvcywgcmVwbGF5X2lkLCBzaGFyZV9udW0sIHNydl9pZCwgY29tYmF0X3R5cGUgKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIHNlbGYucmVwbGF5X2lkID0gcmVwbGF5X2lkXG4gICAgICAgIHNlbGYuc2hhcmVfbnVtID0gc2hhcmVfbnVtXG4gICAgICAgIHNlbGYuc3J2X2lkID0gc3J2X2lkXG4gICAgICAgIHNlbGYuY29tYmF0X3R5cGUgPSBjb21iYXRfdHlwZVxuICAgICAgICBsZXQgbm9kZV9wb3MgPSBzZWxmLnNoYXJlX3BhbmVsLmNvbnZlcnRUb05vZGVTcGFjZUFSKHdvcmxkX3BvcylcbiAgICAgICAgaWYobm9kZV9wb3Mpe1xuICAgICAgICAgICAgc2VsZi5zaGFyZV9iZy5zZXRQb3NpdGlvbihjYy52Mihub2RlX3Bvcy54LTYwLCBub2RlX3Bvcy55KzQ1KSlcbiAgICAgICAgICAgIHNlbGYuc2hhcmVfcGFuZWwuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgdXBkYXRlVmVkaW9EYXRhQnlJZCggaWQsIGtleSwgdmFsICl7XG4gICAgICAgIGlmKCF0aGlzLmRhdGEpICByZXR1cm47XG4gICAgICAgIGxldCB2ZWRpb19kYXRhID0ge31cbiAgICAgICAgZm9yKGxldCBrPTA7azx0aGlzLmRhdGEubGVuZ3RoOysrayl7XG4gICAgICAgICAgICBsZXQgdiA9IHRoaXMuZGF0YVtrXVxuICAgICAgICAgICAgaWYodi5pZCA9PSBpZCl7XG4gICAgICAgICAgICAgICAgdltrZXldID0gdmFsXG4gICAgICAgICAgICAgICAgdmVkaW9fZGF0YSA9IHZcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2ZWRpb19kYXRhXG4gICAgfSxcbiAgICAvLyDlhbPpl63nqpfkvZPlm57osIMs6ZyA6KaB5Zyo6L+Z6YeM6LCD55So6K+l56qX5L2T5omA5bGeY29udHJvbGxlcueahGNsb3Nl5pa55rOV5rKh55So5LqO572u56m66K+l56qX5L2T5a6e5L6L5a+56LGhXG4gICAgY2xvc2VDYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICBpZih0aGlzLnZlZGlvX3Njcm9sbHZpZXcpe1xuICAgICAgICAgICAgdGhpcy52ZWRpb19zY3JvbGx2aWV3LkRlbGV0ZU1lKClcbiAgICAgICAgICAgIHRoaXMudmVkaW9fc2Nyb2xsdmlldyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBnY29yZS5HbG9iYWxFdmVudC5maXJlKFZlZGlvRXZlbnQuT3BlbkNvbGxlY3RWaWV3RXZlbnQsIGZhbHNlKVxuICAgICAgICB0aGlzLmN0cmwub3BlblZlZGlvQ29sbGVjdFdpbmRvdyhmYWxzZSlcbiAgICB9LFxufSkiXX0=