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
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/pokedex/view/partner_comment_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, 'f684bjSyTxMh6OQXOVhoUqi', 'partner_comment_window');
// Scripts/mod/pokedex/view/partner_comment_window.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//     这里是描述这个窗体的作用的
// <br/>Create: 2019-04-08 14:00:13
// --------------------------------------------------------------------
var PathTool = require("pathtool");
 
var PokedexController = require("pokedex_controller");
 
var PokedexEvent = require("pokedex_event");
 
var PokedexCommentItem = require("pokedex_comment_item");
 
var CommonScrollView = require("common_scrollview");
 
var Partner_commentWindow = cc.Class({
  "extends": BaseView,
  ctor: function ctor() {
    this.prefabPath = PathTool.getPrefabPath("pokedex", "pokedex_comment");
    this.viewTag = SCENE_TAG.dialogue; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
 
    this.win_type = WinType.Full; //是否是全屏窗体  WinType.Full, WinType.Big, WinType.Mini, WinType.Tips
 
    this.ctrl = PokedexController.getInstance();
  },
  // 初始化一些配置数据,可以用于声明一些变量之类的
  initConfig: function initConfig() {},
  // 预制体加载完成之后的回调,可以在这里捕获相关节点或者组件
  openCallBack: function openCallBack() {
    var self = this;
    self.main_panel = self.root_wnd.getChildByName("main_panel"); // --喜欢按钮
 
    self.like_btn = self.main_panel.getChildByName("like_btn");
    self.send_btn = self.main_panel.getChildByName("send_btn"); //喜欢人数
 
    self.like_num_lb = this.seekChild("like_num", cc.Label); //点评人数
 
    self.comment_num_lb = this.seekChild("comment_lab", cc.Label); //输入框
 
    self.edit_box_eb = this.seekChild("edit_box", cc.EditBox); //名字
 
    self.hero_name_lb = this.seekChild("name_lab", cc.Label);
    self.close_btn_nd = this.seekChild("close_btn");
  },
  // 注册事件监听的接口,不需要手动调用,如果是使用gcore.GlobalEvent监听,可以直接调用addGlobalEvent
  registerEvent: function registerEvent() {
    var self = this; // --请求整个评论列表
 
    if (!self.get_list_event) {
      self.get_list_event = this.addGlobalEvent(PokedexEvent.Comment_List_Event, function (data) {
        self.data = data;
        self.updateCommentList();
      });
    } // --评论返回
 
 
    if (!self.comment_success_event) {
      self.comment_success_event = this.addGlobalEvent(PokedexEvent.Comment_Say_Event, function () {
        self.ctrl.sender11041(self.hero_data.bid, 1, 100);
        self.edit_box_eb.string = "";
      });
    } // --点击喜欢返回
 
 
    if (!self.like_success_event) {
      self.like_success_event = this.addGlobalEvent(PokedexEvent.Comment_Like_Event, function () {
        if (!self.data) return;
        var like_num = self.data.like_num || 0;
        this.like_num_lb.string = like_num + 1;
        self.like_btn.active = false;
      });
    } // --点击点赞或踩返回
 
 
    if (!self.zan_success_event) {
      self.zan_success_event = this.addGlobalEvent(PokedexEvent.Comment_Zan_Event, function (data) {
        if (self.select_item) {
          self.select_item.updateCommentNum(data);
        }
 
        self.select_item = null;
      });
    }
 
    this.send_btn.on("touchend", function () {
      if (!this.hero_data) return;
      Utils.playButtonSound(1);
 
      if (this.edit_box_eb.string.length <= 0) {
        message("请输入评论内容");
        return;
      }
 
      self.ctrl.sender11043(self.hero_data.bid, this.edit_box_eb.string);
    }, this);
    self.like_btn.on("touchend", function () {
      Utils.playButtonSound(3);
 
      if (self.data && self.data.like && self.data.like == 1) {
        message("你已设置为喜欢");
        return;
      }
 
      if (!self.hero_data) return;
      self.ctrl.sender11042(self.hero_data.bid);
    }, this);
    self.close_btn_nd.on("touchend", function () {
      Utils.playButtonSound(2);
      this.ctrl.openCommentWindow(false);
    }, this);
  },
  // 预制体加载完成之后,添加到对应主节点之后的回调,也就是一个窗体的正式入口,可以设置一些数据了
  openRootWnd: function openRootWnd(data) {
    if (!data) return;
    this.hero_data = data || {};
    this.hero_name_lb.string = this.hero_data.name;
    this.createHeroMessage();
    this.ctrl.sender11041(this.hero_data.bid, 1, 100);
  },
  createHeroMessage: function createHeroMessage() {
    var self = this; // --头像
 
    self.hero_item = ItemsPool.getInstance().getItem("hero_exhibition_item");
    self.hero_item.setParent(self.main_panel);
    self.hero_item.setPosition(85, 740);
    self.hero_item.setData(self.hero_data);
    self.hero_item.show();
  },
  updateCommentList: function updateCommentList() {
    var self = this;
    if (!self.data) return;
    var like_num = self.data.like_num || 0;
    self.like_num_lb.string = like_num;
 
    if (self.data.partner_comments) {
      var num = self.data.partner_comments.length || 0;
      self.comment_num_lb.string = "评论数:" + num;
    }
 
    var bool = true;
 
    if (self.data.like && self.data.like == 1) {
      bool = false;
    }
 
    self.like_btn.active = bool;
    var scroll_view_size = cc.size(620, 560);
    var setting = {
      item_class: PokedexCommentItem,
      //-- 单元类
      start_x: 4,
      //-- 第一个单元的X起点
      space_x: 0,
      //-- x方向的间隔
      start_y: 0,
      //-- 第一个单元的Y起点
      space_y: 5,
      //-- y方向的间隔
      item_width: 610,
      //-- 单元的尺寸width
      item_height: 150,
      //-- 单元的尺寸height
      row: 1,
      //-- 行数,作用于水平滚动类型
      col: 1,
      //-- 列数,作用于垂直滚动类型
      need_dynamic: true
    };
    self.list_view = new CommonScrollView();
    self.list_view.createScroll(self.main_panel, cc.v2(13, 95), ScrollViewDir.vertical, ScrollViewStartPos.top, scroll_view_size, setting);
    var list = self.data.partner_comments || [];
 
    var callback = function callback(item, vo, index) {
      if (vo && Utils.next(vo)) {
        self.select_item = item;
        var partner_id = self.hero_data.bid || 0;
        var comment_id = vo.comment_id || 0;
        self.ctrl.sender11044(partner_id, comment_id, index);
      }
    };
 
    self.list_view.setData(list, callback);
  },
  addCallBack: function addCallBack(call_fun) {
    this.call_fun = call_fun;
  },
  // 关闭窗体回调,需要在这里调用该窗体所属controller的close方法没用于置空该窗体实例对象
  closeCallBack: function closeCallBack() {
    if (this.call_fun) {
      this.call_fun();
    }
 
    if (this.hero_item) {
      this.hero_item.deleteMe();
    }
 
    this.ctrl.openCommentWindow(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxwb2tlZGV4XFx2aWV3XFxwYXJ0bmVyX2NvbW1lbnRfd2luZG93LmpzIl0sIm5hbWVzIjpbIlBhdGhUb29sIiwicmVxdWlyZSIsIlBva2VkZXhDb250cm9sbGVyIiwiUG9rZWRleEV2ZW50IiwiUG9rZWRleENvbW1lbnRJdGVtIiwiQ29tbW9uU2Nyb2xsVmlldyIsIlBhcnRuZXJfY29tbWVudFdpbmRvdyIsImNjIiwiQ2xhc3MiLCJCYXNlVmlldyIsImN0b3IiLCJwcmVmYWJQYXRoIiwiZ2V0UHJlZmFiUGF0aCIsInZpZXdUYWciLCJTQ0VORV9UQUciLCJkaWFsb2d1ZSIsIndpbl90eXBlIiwiV2luVHlwZSIsIkZ1bGwiLCJjdHJsIiwiZ2V0SW5zdGFuY2UiLCJpbml0Q29uZmlnIiwib3BlbkNhbGxCYWNrIiwic2VsZiIsIm1haW5fcGFuZWwiLCJyb290X3duZCIsImdldENoaWxkQnlOYW1lIiwibGlrZV9idG4iLCJzZW5kX2J0biIsImxpa2VfbnVtX2xiIiwic2Vla0NoaWxkIiwiTGFiZWwiLCJjb21tZW50X251bV9sYiIsImVkaXRfYm94X2ViIiwiRWRpdEJveCIsImhlcm9fbmFtZV9sYiIsImNsb3NlX2J0bl9uZCIsInJlZ2lzdGVyRXZlbnQiLCJnZXRfbGlzdF9ldmVudCIsImFkZEdsb2JhbEV2ZW50IiwiQ29tbWVudF9MaXN0X0V2ZW50IiwiZGF0YSIsInVwZGF0ZUNvbW1lbnRMaXN0IiwiY29tbWVudF9zdWNjZXNzX2V2ZW50IiwiQ29tbWVudF9TYXlfRXZlbnQiLCJzZW5kZXIxMTA0MSIsImhlcm9fZGF0YSIsImJpZCIsInN0cmluZyIsImxpa2Vfc3VjY2Vzc19ldmVudCIsIkNvbW1lbnRfTGlrZV9FdmVudCIsImxpa2VfbnVtIiwiYWN0aXZlIiwiemFuX3N1Y2Nlc3NfZXZlbnQiLCJDb21tZW50X1phbl9FdmVudCIsInNlbGVjdF9pdGVtIiwidXBkYXRlQ29tbWVudE51bSIsIm9uIiwiVXRpbHMiLCJwbGF5QnV0dG9uU291bmQiLCJsZW5ndGgiLCJtZXNzYWdlIiwic2VuZGVyMTEwNDMiLCJsaWtlIiwic2VuZGVyMTEwNDIiLCJvcGVuQ29tbWVudFdpbmRvdyIsIm9wZW5Sb290V25kIiwibmFtZSIsImNyZWF0ZUhlcm9NZXNzYWdlIiwiaGVyb19pdGVtIiwiSXRlbXNQb29sIiwiZ2V0SXRlbSIsInNldFBhcmVudCIsInNldFBvc2l0aW9uIiwic2V0RGF0YSIsInNob3ciLCJwYXJ0bmVyX2NvbW1lbnRzIiwibnVtIiwiYm9vbCIsInNjcm9sbF92aWV3X3NpemUiLCJzaXplIiwic2V0dGluZyIsIml0ZW1fY2xhc3MiLCJzdGFydF94Iiwic3BhY2VfeCIsInN0YXJ0X3kiLCJzcGFjZV95IiwiaXRlbV93aWR0aCIsIml0ZW1faGVpZ2h0Iiwicm93IiwiY29sIiwibmVlZF9keW5hbWljIiwibGlzdF92aWV3IiwiY3JlYXRlU2Nyb2xsIiwidjIiLCJTY3JvbGxWaWV3RGlyIiwidmVydGljYWwiLCJTY3JvbGxWaWV3U3RhcnRQb3MiLCJ0b3AiLCJsaXN0IiwiY2FsbGJhY2siLCJpdGVtIiwidm8iLCJpbmRleCIsIm5leHQiLCJwYXJ0bmVyX2lkIiwiY29tbWVudF9pZCIsInNlbmRlcjExMDQ0IiwiYWRkQ2FsbEJhY2siLCJjYWxsX2Z1biIsImNsb3NlQ2FsbEJhY2siLCJkZWxldGVNZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxRQUFRLEdBQUdDLE9BQU8sQ0FBQyxVQUFELENBQXRCOztBQUNBLElBQUlDLGlCQUFpQixHQUFHRCxPQUFPLENBQUMsb0JBQUQsQ0FBL0I7O0FBQ0EsSUFBSUUsWUFBWSxHQUFHRixPQUFPLENBQUMsZUFBRCxDQUExQjs7QUFDQSxJQUFJRyxrQkFBa0IsR0FBR0gsT0FBTyxDQUFDLHNCQUFELENBQWhDOztBQUNBLElBQUlJLGdCQUFnQixHQUFHSixPQUFPLENBQUMsbUJBQUQsQ0FBOUI7O0FBQ0EsSUFB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LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEBhdXRob3I6IHh4eEBzeWcuY29tKOW/heWhqywg5Yib5bu65qih5Z2X55qE5Lq65ZGYKVxuLy8gQGRlc2NyaXB0aW9uOlxuLy8gICAgIOi/memHjOaYr+aPj+i/sOi/meS4queql+S9k+eahOS9nOeUqOeahFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDQtMDggMTQ6MDA6MTNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgUGF0aFRvb2wgPSByZXF1aXJlKFwicGF0aHRvb2xcIik7XG52YXIgUG9rZWRleENvbnRyb2xsZXIgPSByZXF1aXJlKFwicG9rZWRleF9jb250cm9sbGVyXCIpXG52YXIgUG9rZWRleEV2ZW50ID0gcmVxdWlyZShcInBva2VkZXhfZXZlbnRcIilcbnZhciBQb2tlZGV4Q29tbWVudEl0ZW0gPSByZXF1aXJlKFwicG9rZWRleF9jb21tZW50X2l0ZW1cIilcbnZhciBDb21tb25TY3JvbGxWaWV3ID0gcmVxdWlyZShcImNvbW1vbl9zY3JvbGx2aWV3XCIpO1xudmFyIFBhcnRuZXJfY29tbWVudFdpbmRvdyA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlVmlldyxcbiAgICBjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucHJlZmFiUGF0aCA9IFBhdGhUb29sLmdldFByZWZhYlBhdGgoXCJwb2tlZGV4XCIsIFwicG9rZWRleF9jb21tZW50XCIpO1xuICAgICAgICB0aGlzLnZpZXdUYWcgPSBTQ0VORV9UQUcuZGlhbG9ndWU7ICAgICAgICAgICAgICAgIC8v6K+l56qX5L2T5omA5bGedWnlsYLnuqcs5YWo5bGPdWnpnIDopoHlnKh1aeWxgizpnZ7lhajlsY91aeWcqGRpYWxvZ3Vl5bGCLOi/meS4quimgeazqOaEj1xuICAgICAgICB0aGlzLndpbl90eXBlID0gV2luVHlwZS5GdWxsOyAgICAgICAgICAgICAgIC8v5piv5ZCm5piv5YWo5bGP56qX5L2TICBXaW5UeXBlLkZ1bGwsIFdpblR5cGUuQmlnLCBXaW5UeXBlLk1pbmksIFdpblR5cGUuVGlwc1xuICAgICAgICB0aGlzLmN0cmwgPSBQb2tlZGV4Q29udHJvbGxlci5nZXRJbnN0YW5jZSgpXG4gICAgfSxcblxuICAgIC8vIOWIneWni+WMluS4gOS6m+mFjee9ruaVsOaNrizlj6/ku6XnlKjkuo7lo7DmmI7kuIDkupvlj5jph4/kuYvnsbvnmoRcbiAgICBpbml0Q29uZmlnOmZ1bmN0aW9uKCl7XG5cbiAgICB9LFxuXG4gICAgLy8g6aKE5Yi25L2T5Yqg6L295a6M5oiQ5LmL5ZCO55qE5Zue6LCDLOWPr+S7peWcqOi/memHjOaNleiOt+ebuOWFs+iKgueCueaIluiAhee7hOS7tlxuICAgIG9wZW5DYWxsQmFjazpmdW5jdGlvbigpe1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgc2VsZi5tYWluX3BhbmVsID0gc2VsZi5yb290X3duZC5nZXRDaGlsZEJ5TmFtZShcIm1haW5fcGFuZWxcIilcblxuICAgICAgICAvLyAtLeWWnOasouaMiemSrlxuICAgICAgICBzZWxmLmxpa2VfYnRuID0gc2VsZi5tYWluX3BhbmVsLmdldENoaWxkQnlOYW1lKFwibGlrZV9idG5cIilcbiAgICAgICAgc2VsZi5zZW5kX2J0biA9IHNlbGYubWFpbl9wYW5lbC5nZXRDaGlsZEJ5TmFtZShcInNlbmRfYnRuXCIpXG4gICAgICAgIC8v5Zac5qyi5Lq65pWwXG4gICAgICAgIHNlbGYubGlrZV9udW1fbGIgPSB0aGlzLnNlZWtDaGlsZChcImxpa2VfbnVtXCIsY2MuTGFiZWwpXG4gICAgICAgIC8v54K56K+E5Lq65pWwXG4gICAgICAgIHNlbGYuY29tbWVudF9udW1fbGIgPSAgdGhpcy5zZWVrQ2hpbGQoXCJjb21tZW50X2xhYlwiLGNjLkxhYmVsKVxuICAgICAgICAvL+i+k+WFpeahhlxuICAgICAgICBzZWxmLmVkaXRfYm94X2ViID0gdGhpcy5zZWVrQ2hpbGQoXCJlZGl0X2JveFwiLGNjLkVkaXRCb3gpXG4gICAgICAgIC8v5ZCN5a2XXG4gICAgICAgIHNlbGYuaGVyb19uYW1lX2xiID0gdGhpcy5zZWVrQ2hpbGQoXCJuYW1lX2xhYlwiLGNjLkxhYmVsKVxuICAgICAgICBcbiAgICAgICAgc2VsZi5jbG9zZV9idG5fbmQgPSB0aGlzLnNlZWtDaGlsZChcImNsb3NlX2J0blwiKVxuICAgIH0sXG5cbiAgICAvLyDms6jlhozkuovku7bnm5HlkKznmoTmjqXlj6Ms5LiN6ZyA6KaB5omL5Yqo6LCD55SoLOWmguaenOaYr+S9v+eUqGdjb3JlLkdsb2JhbEV2ZW5055uR5ZCsLOWPr+S7peebtOaOpeiwg+eUqGFkZEdsb2JhbEV2ZW50XG4gICAgcmVnaXN0ZXJFdmVudDpmdW5jdGlvbigpe1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXNcbiAgICAgICAgLy8gLS3or7fmsYLmlbTkuKror4TorrrliJfooahcbiAgICAgICAgaWYoIXNlbGYuZ2V0X2xpc3RfZXZlbnQpeyBcbiAgICAgICAgICAgIHNlbGYuZ2V0X2xpc3RfZXZlbnQ9IHRoaXMuYWRkR2xvYmFsRXZlbnQoUG9rZWRleEV2ZW50LkNvbW1lbnRfTGlzdF9FdmVudCxmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgICAgICAgICBzZWxmLmRhdGEgPSBkYXRhXG4gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVDb21tZW50TGlzdCgpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIC8vIC0t6K+E6K666L+U5ZueXG4gICAgICAgIGlmICghc2VsZi5jb21tZW50X3N1Y2Nlc3NfZXZlbnQpeyBcbiAgICAgICAgICAgIHNlbGYuY29tbWVudF9zdWNjZXNzX2V2ZW50ID0gdGhpcy5hZGRHbG9iYWxFdmVudChQb2tlZGV4RXZlbnQuQ29tbWVudF9TYXlfRXZlbnQsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICBzZWxmLmN0cmwuc2VuZGVyMTEwNDEoc2VsZi5oZXJvX2RhdGEuYmlkLDEsMTAwKVxuICAgICAgICAgICAgICAgIHNlbGYuZWRpdF9ib3hfZWIuc3RyaW5nID0gXCJcIlxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICAvLyAtLeeCueWHu+WWnOasoui/lOWbnlxuICAgICAgICBpZiAoIXNlbGYubGlrZV9zdWNjZXNzX2V2ZW50KXsgXG4gICAgICAgICAgICBzZWxmLmxpa2Vfc3VjY2Vzc19ldmVudD0gdGhpcy5hZGRHbG9iYWxFdmVudChQb2tlZGV4RXZlbnQuQ29tbWVudF9MaWtlX0V2ZW50LGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWxmLmRhdGEpIHJldHVybiBcbiAgICAgICAgICAgICAgICBsZXQgbGlrZV9udW0gPSBzZWxmLmRhdGEubGlrZV9udW0gfHwgMFxuICAgICAgICAgICAgICAgIHRoaXMubGlrZV9udW1fbGIuc3RyaW5nID0gIGxpa2VfbnVtICsgMVxuICAgICAgICAgICAgICAgIHNlbGYubGlrZV9idG4uYWN0aXZlID0gZmFsc2VcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gICBcbiAgICAgICAgLy8gLS3ngrnlh7vngrnotZ7miJbouKnov5Tlm55cbiAgICAgICAgaWYgKCFzZWxmLnphbl9zdWNjZXNzX2V2ZW50KXsgXG4gICAgICAgICAgICBzZWxmLnphbl9zdWNjZXNzX2V2ZW50PSB0aGlzLmFkZEdsb2JhbEV2ZW50KFBva2VkZXhFdmVudC5Db21tZW50X1phbl9FdmVudCxmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RfaXRlbSl7IFxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdF9pdGVtLnVwZGF0ZUNvbW1lbnROdW0oZGF0YSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RfaXRlbSA9IG51bGxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gICBcbiAgICAgICAgdGhpcy5zZW5kX2J0bi5vbihcInRvdWNoZW5kXCIsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKCF0aGlzLmhlcm9fZGF0YSlyZXR1cm5cbiAgICAgICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgxKVxuICAgICAgICAgICAgaWYodGhpcy5lZGl0X2JveF9lYi5zdHJpbmcubGVuZ3RoPD0wKXtcbiAgICAgICAgICAgICAgICBtZXNzYWdlKFwi6K+36L6T5YWl6K+E6K665YaF5a65XCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLmN0cmwuc2VuZGVyMTEwNDMoc2VsZi5oZXJvX2RhdGEuYmlkLHRoaXMuZWRpdF9ib3hfZWIuc3RyaW5nKVxuICAgICAgICB9LHRoaXMpXG5cbiAgICAgICAgc2VsZi5saWtlX2J0bi5vbihcInRvdWNoZW5kXCIsZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIFV0aWxzLnBsYXlCdXR0b25Tb3VuZCgzKVxuICAgICAgICAgICAgaWYgKHNlbGYuZGF0YSAmJiBzZWxmLmRhdGEubGlrZSAmJiBzZWxmLmRhdGEubGlrZSA9PTEpe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UoXCLkvaDlt7Lorr7nva7kuLrllpzmrKJcIilcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKCFzZWxmLmhlcm9fZGF0YSlyZXR1cm5cbiAgICAgICAgICAgIHNlbGYuY3RybC5zZW5kZXIxMTA0MihzZWxmLmhlcm9fZGF0YS5iaWQpXG4gICAgICAgIH0sdGhpcylcbiAgICAgICAgc2VsZi5jbG9zZV9idG5fbmQub24oXCJ0b3VjaGVuZFwiLGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBVdGlscy5wbGF5QnV0dG9uU291bmQoMilcbiAgICAgICAgICAgIHRoaXMuY3RybC5vcGVuQ29tbWVudFdpbmRvdyhmYWxzZSlcbiAgICAgICAgfSx0aGlzKVxuICAgIH0sXG5cbiAgICAvLyDpooTliLbkvZPliqDovb3lrozmiJDkuYvlkI4s5re75Yqg5Yiw5a+55bqU5Li76IqC54K55LmL5ZCO55qE5Zue6LCDLOS5n+WwseaYr+S4gOS4queql+S9k+eahOato+W8j+WFpeWPoyzlj6/ku6Xorr7nva7kuIDkupvmlbDmja7kuoZcbiAgICBvcGVuUm9vdFduZDpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgaWYoIWRhdGEpcmV0dXJuXG4gICAgICAgIHRoaXMuaGVyb19kYXRhID0gZGF0YSB8fCB7fVxuICAgICAgICB0aGlzLmhlcm9fbmFtZV9sYi5zdHJpbmcgPSB0aGlzLmhlcm9fZGF0YS5uYW1lXG4gICAgICAgIHRoaXMuY3JlYXRlSGVyb01lc3NhZ2UoKVxuICAgICAgICB0aGlzLmN0cmwuc2VuZGVyMTEwNDEodGhpcy5oZXJvX2RhdGEuYmlkLDEsMTAwKVxuICAgIH0sXG4gICAgY3JlYXRlSGVyb01lc3NhZ2UoKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIC8vIC0t5aS05YOPXG4gICAgICAgIHNlbGYuaGVyb19pdGVtID0gSXRlbXNQb29sLmdldEluc3RhbmNlKCkuZ2V0SXRlbShcImhlcm9fZXhoaWJpdGlvbl9pdGVtXCIpO1xuICAgICAgICBzZWxmLmhlcm9faXRlbS5zZXRQYXJlbnQoc2VsZi5tYWluX3BhbmVsKVxuICAgICAgICBzZWxmLmhlcm9faXRlbS5zZXRQb3NpdGlvbig4NSw3NDApXG4gICAgICAgIHNlbGYuaGVyb19pdGVtLnNldERhdGEoc2VsZi5oZXJvX2RhdGEpXG4gICAgICAgIHNlbGYuaGVyb19pdGVtLnNob3coKVxuICAgIH0sXG4gICAgdXBkYXRlQ29tbWVudExpc3QoKXtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgICAgIGlmICghc2VsZi5kYXRhICkgcmV0dXJuIFxuICAgIFxuICAgICAgICBsZXQgbGlrZV9udW0gPSBzZWxmLmRhdGEubGlrZV9udW0gfHwgMFxuICAgICAgICBzZWxmLmxpa2VfbnVtX2xiLnN0cmluZyA9ICBsaWtlX251bVxuICAgICAgICBpZiAoc2VsZi5kYXRhLnBhcnRuZXJfY29tbWVudHMpIHtcbiAgICAgICAgICAgIGxldCBudW0gPSBzZWxmLmRhdGEucGFydG5lcl9jb21tZW50cy5sZW5ndGggfHwgMFxuICAgICAgICAgICAgc2VsZi5jb21tZW50X251bV9sYi5zdHJpbmcgPSAgXCLor4TorrrmlbDvvJpcIiArIG51bVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGJvb2wgPSB0cnVlXG4gICAgICAgIGlmIChzZWxmLmRhdGEubGlrZSAmJiBzZWxmLmRhdGEubGlrZSA9PSAxKSB7IFxuICAgICAgICAgICAgYm9vbCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5saWtlX2J0bi5hY3RpdmUgPSBib29sXG5cbiAgICAgICAgbGV0IHNjcm9sbF92aWV3X3NpemUgPSBjYy5zaXplKDYyMCw1NjApXG4gICAgICAgIGxldCBzZXR0aW5nID0ge1xuICAgICAgICAgICAgaXRlbV9jbGFzcyA6IFBva2VkZXhDb21tZW50SXRlbSwgICAgICAvLy0tIOWNleWFg+exu1xuICAgICAgICAgICAgc3RhcnRfeCA6IDQsICAgICAgICAgICAgICAgICAgLy8tLSDnrKzkuIDkuKrljZXlhYPnmoRY6LW354K5XG4gICAgICAgICAgICBzcGFjZV94IDogMCwgICAgICAgICAgICAgICAgICAgIC8vLS0geOaWueWQkeeahOmXtOmalFxuICAgICAgICAgICAgc3RhcnRfeSA6IDAsICAgICAgICAgICAgICAgICAgICAvLy0tIOesrOS4gOS4quWNleWFg+eahFnotbfngrlcbiAgICAgICAgICAgIHNwYWNlX3kgOiA1LCAgICAgICAgICAgICAgICAgICAvLy0tIHnmlrnlkJHnmoTpl7TpmpRcbiAgICAgICAgICAgIGl0ZW1fd2lkdGggOiA2MTAsICAgICAgICAgICAgICAgLy8tLSDljZXlhYPnmoTlsLrlr7h3aWR0aFxuICAgICAgICAgICAgaXRlbV9oZWlnaHQgOiAxNTAsICAgICAgICAgICAgICAvLy0tIOWNleWFg+eahOWwuuWvuGhlaWdodFxuICAgICAgICAgICAgcm93IDogMSwgICAgICAgICAgICAgICAgICAgICAgICAvLy0tIOihjOaVsO+8jOS9nOeUqOS6juawtOW5s+a7muWKqOexu+Wei1xuICAgICAgICAgICAgY29sIDogMSwgICAgICAgICAgICAgICAgICAgICAgICAgLy8tLSDliJfmlbDvvIzkvZznlKjkuo7lnoLnm7Tmu5rliqjnsbvlnotcbiAgICAgICAgICAgIG5lZWRfZHluYW1pYzp0cnVlLFxuICAgICAgICB9XG4gICAgICAgIHNlbGYubGlzdF92aWV3ID0gbmV3IENvbW1vblNjcm9sbFZpZXcoKVxuICAgICAgICBcbiAgICAgICAgc2VsZi5saXN0X3ZpZXcuY3JlYXRlU2Nyb2xsKHNlbGYubWFpbl9wYW5lbCxjYy52MigxMywgOTUpLFNjcm9sbFZpZXdEaXIudmVydGljYWwsU2Nyb2xsVmlld1N0YXJ0UG9zLnRvcCxzY3JvbGxfdmlld19zaXplLHNldHRpbmcpXG4gICAgICAgIGxldCBsaXN0ID1zZWxmLmRhdGEucGFydG5lcl9jb21tZW50cyB8fCBbXVxuICAgICAgICBsZXQgY2FsbGJhY2sgPSBmdW5jdGlvbihpdGVtLHZvLGluZGV4KXtcbiAgICAgICAgICAgIGlmKHZvICYmIFV0aWxzLm5leHQodm8pKXtcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdF9pdGVtID0gaXRlbVxuICAgICAgICAgICAgICAgIGxldCBwYXJ0bmVyX2lkID0gc2VsZi5oZXJvX2RhdGEuYmlkIHx8IDBcbiAgICAgICAgICAgICAgICBsZXQgY29tbWVudF9pZCA9IHZvLmNvbW1lbnRfaWQgfHwgMFxuICAgICAgICAgICAgICAgIHNlbGYuY3RybC5zZW5kZXIxMTA0NChwYXJ0bmVyX2lkLGNvbW1lbnRfaWQsaW5kZXgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5saXN0X3ZpZXcuc2V0RGF0YShsaXN0LCBjYWxsYmFjaylcbiAgICB9LFxuICAgIGFkZENhbGxCYWNrKGNhbGxfZnVuKXtcbiAgICAgICAgdGhpcy5jYWxsX2Z1biA9Y2FsbF9mdW5cbiAgICB9LFxuICAgIC8vIOWFs+mXreeql+S9k+WbnuiwgyzpnIDopoHlnKjov5nph4zosIPnlKjor6XnqpfkvZPmiYDlsZ5jb250cm9sbGVy55qEY2xvc2Xmlrnms5XmsqHnlKjkuo7nva7nqbror6XnqpfkvZPlrp7kvovlr7nosaFcbiAgICBjbG9zZUNhbGxCYWNrOmZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKHRoaXMuY2FsbF9mdW4pe1xuICAgICAgICAgICAgdGhpcy5jYWxsX2Z1bigpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGVyb19pdGVtKXtcbiAgICAgICAgICAgIHRoaXMuaGVyb19pdGVtLmRlbGV0ZU1lKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdHJsLm9wZW5Db21tZW50V2luZG93KGZhbHNlKVxuICAgIH0sXG59KSJdfQ==