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
264
265
266
267
268
269
270
271
272
273
274
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/util/string_util.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, 'e783aY1FgZLkIb8Lnntomdo', 'string_util');
// Scripts/util/string_util.js
 
"use strict";
 
/*-----------------------------------------------------+
 * 字符串相关处理
 * @author whjing2012@163.com
 +-----------------------------------------------------*/
//  <div><div fontcolor=#xxxxxx click=1|xx href=2|xx>xxx#1xxx<img src='' /></div><assets=1/></div>
window.StringUtil = {
  regex: /(<.*?>|#\d*|[^<>#]+)/ig,
  parse: function parse(str, handler) {
    // handler = handler || 'handler';
    return str;
    var arr = str.match(this.regex);
    str = "";
    var end_tags = [];
 
    for (var i = 0, n = arr.length; i < n; i++) {
      var s = arr[i]; //Log.info("====>", s, s.charAt(0));
 
      if (s == "</div>") {
        if (end_tags.length > 0) {
          str += end_tags.pop();
        }
      } else if (s.length > 1 && s.charAt(0) == "#") {
        var face = s.substr(1);
        str += "<img src='" + face + "' />";
      } else if (s.length > 4 && s.charAt(0) == '<') {
        var s1 = s.substr(1, 3);
        var s_end = s.substr(s.length - 2, 2);
        var end_tag = "";
 
        if (s1 == "ass") {
          var a = s.match(/<assets=(\d+)/i);
 
          if (a && a.length == 2) {
            str += "<img src='" + a[1] + "' />";
          }
        } else if (s1 == "img") {
          var a = s.match(/\w+=[^\s>]+/ig);
          if (!a) continue;
 
          for (var j = 0, m = a.length; j < m; j++) {
            var s2 = a[j].split("=");
            if (s2.length < 2) continue;
 
            if (s2[0] == "src") {
              str += "<img src='" + s2[1].replace(/^['"]|['"]$/ig, '') + "' />";
            }
          }
        } else {
          var a = s.match(/\w+=[^\s>]+/ig);
          if (!a) continue;
 
          for (var j = 0, m = a.length; j < m; j++) {
            var s2 = a[j].split("=");
            if (s2.length < 2) continue;
            var s3 = s2[1].replace(/^['"]|['"]$/ig, '');
 
            if (s2[0] == "fontcolor" || s2[0] == "fontColor") {
              str += "<color=" + s3 + " >";
              end_tag = "</color>" + end_tag;
            } else if (s2[0] == "fontsize") {
              str += "<size=" + s3 + " >";
              end_tag = "</size>" + end_tag;
            } else if (s2[0] == "click") {
              str += "<on click='" + (handler || s3) + "' param='" + s3 + "' >";
              end_tag = "</on>" + end_tag;
            } else if (s2[0] == "href") {
              str += "<u><on click='" + (handler || s3) + "' param='" + s3 + "' >";
              end_tag = "</on></u>" + end_tag;
            } else if (s2[0] == "outline") {
              var s4 = s2[1].split(",");
              if (s4.length < 2) continue;
              var color = "#fffff";
              var width = 1;
 
              if (s4[0].length > 3) {
                color = s4[0];
                width = s4[1];
              } else {
                color = s4[1];
                width = s4[0];
              }
 
              str += "<outline color=" + color + " width=" + width + " >";
              end_tag = "</outline>" + end_tag;
            }
          }
        }
 
        if (s_end == "/>") {
          str += end_tag;
        } else {
          end_tags.push(end_tag);
        }
      } else {
        str += s;
      }
    }
 
    return str;
  },
  //处理字符串,返回处理后的string,和资源数组resArr,
  parseStr: function parseStr(str, handler) {
    var arr = str.match(/(<.*?>|#\d*|[^<>#]+)/ig);
    str = "";
    var end_tags = [];
    var arr_1 = [];
 
    for (var i = 0, n = arr.length; i < n; i++) {
      var s = arr[i];
 
      if (s == "</div>") {
        if (end_tags.length > 0) {
          str += end_tags.pop();
        }
      } else if (s.length > 1 && s.charAt(0) == "#") {
        var face = s.substr(1);
        str += "<img src='" + face + "' />";
      } else if (s.length > 4 && s.charAt(0) == '<') {
        var s1 = s.substr(1, 3);
        var s_end = s.substr(s.length - 2, 2);
        var end_tag = "";
 
        if (s1 == "ass") {
          var a = s.match(/<assets=(\d+)/i);
 
          if (a && a.length == 2) {
            str += "<img src='" + a[1] + "' />";
            arr_1.push(a[1]);
          }
        } else if (s1 == "img") {
          var a = s.match(/\w+=[^\s>]+/ig);
          if (!a) continue;
 
          for (var j = 0, m = a.length; j < m; j++) {
            var s2 = a[j].split("=");
            if (s2.length < 2) continue;
 
            if (s2[0] == "src") {
              str += "<img src='" + s2[1].replace(/^['"]|['"]$/ig, '') + "' />";
              arr_1.push(s2[1]);
            }
          }
        } else {
          var a = s.match(/\w+=[^\s>]+/ig);
          if (!a) continue;
 
          for (var j = 0, m = a.length; j < m; j++) {
            var s2 = a[j].split("=");
            if (s2.length < 2) continue;
            var s3 = s2[1].replace(/^['"]|['"]$/ig, '');
 
            if (s2[0] == "fontcolor" || s2[0] == "fontColor") {
              str += "<color=" + s3 + " >";
              end_tag = "</color>" + end_tag;
            } else if (s2[0] == "fontsize") {
              str += "<size=" + s3 + " >";
              end_tag = "</size>" + end_tag;
            } else if (s2[0] == "click") {
              str += "<on click='" + (handler || s3) + "' param='" + s3 + "' >";
              end_tag = "</on>" + end_tag;
            } else if (s2[0] == "href") {
              str += "<u><on click='" + (handler || s3) + "' param='" + s3 + "' >";
              end_tag = "</on></u>" + end_tag;
            } else if (s2[0] == "outline") {
              var s4 = s2[1].split(",");
              if (s4.length < 2) continue;
              var color = "#fffff";
              var width = 1;
 
              if (s4[0].length > 3) {
                color = s4[0];
                width = s4[1];
              } else {
                color = s4[1];
                width = s4[0];
              }
 
              str += "<outline color=" + color + " width=" + width + " >";
              end_tag = "</outline>" + end_tag;
            }
          }
        }
 
        if (s_end == "/>") {
          str += end_tag;
        } else {
          end_tags.push(end_tag);
        }
      } else {
        str += s;
      }
    }
 
    return {
      string: str,
      resArr: arr_1
    };
  },
  // 给文本设置字符串 先做解析处理
  richtextSetString: function richtextSetString(richtext, str, handler) {
    richtext.string = this.parse(str);
    this.richtextClick(richtext, handler);
  },
  richtextClick: function richtextClick(richtext, handler) {
    handler = handler || 'handler';
 
    for (var i = 0; i < richtext._labelSegments.length; ++i) {
      var labelSegment = richtext._labelSegments[i];
 
      if (labelSegment._clickHandler) {
        labelSegment._clickParam = labelSegment._clickParam || labelSegment._clickHandler;
        labelSegment._clickHandler = handler;
      }
    }
  },
  //拆分成字符
  splitStr: function splitStr(str) {
    var list = {};
  },
  util_num_chn: ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"],
  util_num_std: ["零", "十", "百", "千", "万", "亿"],
  //数字转换成小写中文
  numToChinese: function numToChinese(value) {
    return value; // value = Number(value) || 0;
    // value_str = String(value);
    // var array = value_str.split("");
    // var length = array.length;
    // var flag = false;
    // var str = "";
    // var len = 0;
    // if(length > 13){
    //     print("只支持13位数字")
    //     return
    // }
    // for(var k in array){
    //     var v = array[k];
    //     if(v.charAt == "0" && length > 1){
    //         flag = true;
    //     }else{
    //     }
    // }
  }
};
module.exports = StringUtil;
 
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcdXRpbFxcc3RyaW5nX3V0aWwuanMiXSwibmFtZXMiOlsid2luZG93IiwiU3RyaW5nVXRpbCIsInJlZ2V4IiwicGFyc2UiLCJzdHIiLCJoYW5kbGVyIiwiYXJyIiwibWF0Y2giLCJlbmRfdGFncyIsImkiLCJuIiwibGVuZ3RoIiwicyIsInBvcCIsImNoYXJBdCIsImZhY2UiLCJzdWJzdHIiLCJzMSIsInNfZW5kIiwiZW5kX3RhZyIsImEiLCJqIiwibSIsInMyIiwic3BsaXQiLCJyZXBsYWNlIiwiczMiLCJzNCIsImNvbG9yIiwid2lkdGgiLCJwdXNoIiwicGFyc2VTdHIiLCJhcnJfMSIsInN0cmluZyIsInJlc0FyciIsInJpY2h0ZXh0U2V0U3RyaW5nIiwicmljaHRleHQiLCJyaWNodGV4dENsaWNrIiwiX2xhYmVsU2VnbWVudHMiLCJsYWJlbFNlZ21lbnQiLCJfY2xpY2tIYW5kbGVyIiwiX2NsaWNrUGFyYW0iLCJzcGxpdFN0ciIsImxpc3QiLCJ1dGlsX251bV9jaG4iLCJ1dGlsX251bV9zdGQiLCJudW1Ub0NoaW5lc2UiLCJ2YWx1ZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7QUFLQTtBQUVBQSxNQUFNLENBQUNDLFVBQVAsR0FBb0I7QUFFaEJDLEVBQUFBLEtBQUssRUFBRSx3QkFGUztBQUloQkMsRUFBQUEsS0FBSyxFQUFFLGVBQVVDLEdBQVYsRUFBZUMsT0FBZixFQUF3QjtBQUMzQjtBQUNBLFdBQU9ELEdBQVA7QUFDQSxRQUFJRSxHQUFHLEdBQUdGLEdBQUcsQ0FBQ0csS0FBSixDQUFVLEtBQUtMLEtBQWYsQ0FBVjtBQUNBRSxJQUFBQSxHQUFHLEdBQUcsRUFBTjtBQUNBLFFBQUlJLFFBQVEsR0FBRyxFQUFmOztBQUNBLFNBQUssSUFBSUMsQ0FBQyxHQUFHLENBQVIsRUFBV0MsQ0FBQyxHQUFHSixHQUFHLENBQUNLLE1BQXhCLEVBQWdDRixDQUFDLEdBQUdDLENBQXBDLEVBQXVDRCxDQUFDLEVBQXhDLEVBQTRDO0FBQ3hDLFVBQUlHLENBQUMsR0FBR04sR0FBRyxDQUFDRyxDQUFELENBQVgsQ0FEd0MsQ0FFeEM7O0FBQ0EsVUFBSUcsQ0FBQyxJQUFJLFFBQVQsRUFBbUI7QUFDZixZQUFJSixRQUFRLENBQUNHLE1BQVQsR0FBa0IsQ0FBdEIsRUFBeUI7QUFDckJQLFVBQUFBLEdBQUcsSUFBSUksUUFBUSxDQUFDSyxHQUFULEVBQVA7QUFDSDtBQUNKLE9BSkQsTUFJTyxJQUFJRCxDQUFDLENBQUNELE1BQUYsR0FBVyxDQUFYLElBQWdCQyxDQUFDLENBQUNFLE1BQUYsQ0FBUyxDQUFULEtBQWUsR0FBbkMsRUFBd0M7QUFDM0MsWUFBSUMsSUFBSSxHQUFHSCxDQUFDLENBQUNJLE1BQUYsQ0FBUyxDQUFULENBQVg7QUFDQVosUUFBQUEsR0FBRyxJQUFJLGVBQWVXLElBQWYsR0FBc0IsTUFBN0I7QUFDSCxPQUhNLE1BR0EsSUFBSUgsQ0FBQyxDQUFDRCxNQUFGLEdBQVcsQ0FBWCxJQUFnQkMsQ0FBQyxDQUFDRSxNQUFGLENBQVMsQ0FBVCxLQUFlLEdBQW5DLEVBQXdDO0FBQzNDLFlBQUlHLEVBQUUsR0FBR0wsQ0FBQyxDQUFDSSxNQUFGLENBQVMsQ0FBVCxFQUFZLENBQVosQ0FBVDtBQUNBLFlBQUlFLEtBQUssR0FBR04sQ0FBQyxDQUFDSSxNQUFGLENBQVNKLENBQUMsQ0FBQ0QsTUFBRixHQUFXLENBQXBCLEVBQXVCLENBQXZCLENBQVo7QUFDQSxZQUFJUSxPQUFPLEdBQUcsRUFBZDs7QUFDQSxZQUFJRixFQUFFLElBQUksS0FBVixFQUFpQjtBQUNiLGNBQUlHLENBQUMsR0FBR1IsQ0FBQyxDQUFDTCxLQUFGLENBQVEsZ0JBQVIsQ0FBUjs7QUFDQSxjQUFJYSxDQUFDLElBQUlBLENBQUMsQ0FBQ1QsTUFBRixJQUFZLENBQXJCLEVBQXdCO0FBQ3BCUCxZQUFBQSxHQUFHLElBQUksZUFBZWdCLENBQUMsQ0FBQyxDQUFELENBQWhCLEdBQXNCLE1BQTdCO0FBQ0g7QUFDSixTQUxELE1BS08sSUFBSUgsRUFBRSxJQUFJLEtBQVYsRUFBaUI7QUFDcEIsY0FBSUcsQ0FBQyxHQUFHUixDQUFDLENBQUNMLEtBQUYsQ0FBUSxlQUFSLENBQVI7QUFDQSxjQUFJLENBQUNhLENBQUwsRUFBUTs7QUFDUixlQUFLLElBQUlDLENBQUMsR0FBRyxDQUFSLEVBQVdDLENBQUMsR0FBR0YsQ0FBQyxDQUFDVCxNQUF0QixFQUE4QlUsQ0FBQyxHQUFHQyxDQUFsQyxFQUFxQ0QsQ0FBQyxFQUF0QyxFQUEwQztBQUN0QyxnQkFBSUUsRUFBRSxHQUFHSCxDQUFDLENBQUNDLENBQUQsQ0FBRCxDQUFLRyxLQUFMLENBQVcsR0FBWCxDQUFUO0FBQ0EsZ0JBQUlELEVBQUUsQ0FBQ1osTUFBSCxHQUFZLENBQWhCLEVBQW1COztBQUNuQixnQkFBSVksRUFBRSxDQUFDLENBQUQsQ0FBRixJQUFTLEtBQWIsRUFBb0I7QUFDaEJuQixjQUFBQSxHQUFHLElBQUksZUFBZW1CLEVBQUUsQ0FBQyxDQUFELENBQUYsQ0FBTUUsT0FBTixDQUFjLGVBQWQsRUFBK0IsRUFBL0IsQ0FBZixHQUFvRCxNQUEzRDtBQUNIO0FBQ0o7QUFDSixTQVZNLE1BVUE7QUFDSCxjQUFJTCxDQUFDLEdBQUdSLENBQUMsQ0FBQ0wsS0FBRixDQUFRLGVBQVIsQ0FBUjtBQUNBLGNBQUksQ0FBQ2EsQ0FBTCxFQUFROztBQUNSLGVBQUssSUFBSUMsQ0FBQyxHQUFHLENBQVIsRUFBV0MsQ0FBQyxHQUFHRixDQUFDLENBQUNULE1BQXRCLEVBQThCVSxDQUFDLEdBQUdDLENBQWxDLEVBQXFDRCxDQUFDLEVBQXRDLEVBQTBDO0FBQ3RDLGdCQUFJRSxFQUFFLEdBQUdILENBQUMsQ0FBQ0MsQ0FBRCxDQUFELENBQUtHLEtBQUwsQ0FBVyxHQUFYLENBQVQ7QUFDQSxnQkFBSUQsRUFBRSxDQUFDWixNQUFILEdBQVksQ0FBaEIsRUFBbUI7QUFDbkIsZ0JBQUllLEVBQUUsR0FBR0gsRUFBRSxDQUFDLENBQUQsQ0FBRixDQUFNRSxPQUFOLENBQWMsZUFBZCxFQUErQixFQUEvQixDQUFUOztBQUNBLGdCQUFJRixFQUFFLENBQUMsQ0FBRCxDQUFGLElBQVMsV0FBVCxJQUF3QkEsRUFBRSxDQUFDLENBQUQsQ0FBRixJQUFTLFdBQXJDLEVBQWtEO0FBQzlDbkIsY0FBQUEsR0FBRyxJQUFJLFlBQVlzQixFQUFaLEdBQWlCLElBQXhCO0FBQ0FQLGNBQUFBLE9BQU8sR0FBRyxhQUFhQSxPQUF2QjtBQUNILGFBSEQsTUFHTyxJQUFJSSxFQUFFLENBQUMsQ0FBRCxDQUFGLElBQVMsVUFBYixFQUF5QjtBQUM1Qm5CLGNBQUFBLEdBQUcsSUFBSSxXQUFXc0IsRUFBWCxHQUFnQixJQUF2QjtBQUNBUCxjQUFBQSxPQUFPLEdBQUcsWUFBWUEsT0FBdEI7QUFDSCxhQUhNLE1BR0EsSUFBSUksRUFBRSxDQUFDLENBQUQsQ0FBRixJQUFTLE9BQWIsRUFBc0I7QUFDekJuQixjQUFBQSxHQUFHLElBQUksaUJBQWlCQyxPQUFPLElBQUlxQixFQUE1QixJQUFrQyxXQUFsQyxHQUFnREEsRUFBaEQsR0FBcUQsS0FBNUQ7QUFDQVAsY0FBQUEsT0FBTyxHQUFHLFVBQVVBLE9BQXBCO0FBQ0gsYUFITSxNQUdBLElBQUlJLEVBQUUsQ0FBQyxDQUFELENBQUYsSUFBUyxNQUFiLEVBQXFCO0FBQ3hCbkIsY0FBQUEsR0FBRyxJQUFJLG9CQUFvQkMsT0FBTyxJQUFJcUIsRUFBL0IsSUFBcUMsV0FBckMsR0FBbURBLEVBQW5ELEdBQXdELEtBQS9EO0FBQ0FQLGNBQUFBLE9BQU8sR0FBRyxjQUFjQSxPQUF4QjtBQUNILGFBSE0sTUFHQSxJQUFJSSxFQUFFLENBQUMsQ0FBRCxDQUFGLElBQVMsU0FBYixFQUF3QjtBQUMzQixrQkFBSUksRUFBRSxHQUFHSixFQUFFLENBQUMsQ0FBRCxDQUFGLENBQU1DLEtBQU4sQ0FBWSxHQUFaLENBQVQ7QUFDQSxrQkFBSUcsRUFBRSxDQUFDaEIsTUFBSCxHQUFZLENBQWhCLEVBQW1CO0FBQ25CLGtCQUFJaUIsS0FBSyxHQUFHLFFBQVo7QUFDQSxrQkFBSUMsS0FBSyxHQUFHLENBQVo7O0FBQ0Esa0JBQUdGLEVBQUUsQ0FBQyxDQUFELENBQUYsQ0FBTWhCLE1BQU4sR0FBZSxDQUFsQixFQUFvQjtBQUNoQmlCLGdCQUFBQSxLQUFLLEdBQUdELEVBQUUsQ0FBQyxDQUFELENBQVY7QUFDQUUsZ0JBQUFBLEtBQUssR0FBR0YsRUFBRSxDQUFDLENBQUQsQ0FBVjtBQUNILGVBSEQsTUFHSztBQUNEQyxnQkFBQUEsS0FBSyxHQUFHRCxFQUFFLENBQUMsQ0FBRCxDQUFWO0FBQ0FFLGdCQUFBQSxLQUFLLEdBQUdGLEVBQUUsQ0FBQyxDQUFELENBQVY7QUFDSDs7QUFDRHZCLGNBQUFBLEdBQUcsSUFBSSxvQkFBb0J3QixLQUFwQixHQUE0QixTQUE1QixHQUF3Q0MsS0FBeEMsR0FBZ0QsSUFBdkQ7QUFDQVYsY0FBQUEsT0FBTyxHQUFHLGVBQWVBLE9BQXpCO0FBQ0g7QUFDSjtBQUNKOztBQUNELFlBQUlELEtBQUssSUFBSSxJQUFiLEVBQW1CO0FBQ2ZkLFVBQUFBLEdBQUcsSUFBSWUsT0FBUDtBQUNILFNBRkQsTUFFTztBQUNIWCxVQUFBQSxRQUFRLENBQUNzQixJQUFULENBQWNYLE9BQWQ7QUFDSDtBQUNKLE9BNURNLE1BNERBO0FBQ0hmLFFBQUFBLEdBQUcsSUFBSVEsQ0FBUDtBQUNIO0FBQ0o7O0FBQ0QsV0FBT1IsR0FBUDtBQUNILEdBckZlO0FBdUZoQjtBQUNBMkIsRUFBQUEsUUFBUSxFQUFFLGtCQUFVM0IsR0FBVixFQUFlQyxPQUFmLEVBQXdCO0FBQzlCLFFBQUlDLEdBQUcsR0FBR0YsR0FBRyxDQUFDRyxLQUFKLENBQVUsd0JBQVYsQ0FBVjtBQUNBSCxJQUFBQSxHQUFHLEdBQUcsRUFBTjtBQUNBLFFBQUlJLFFBQVEsR0FBRyxFQUFmO0FBQ0EsUUFBSXdCLEtBQUssR0FBRyxFQUFaOztBQUNBLFNBQUssSUFBSXZCLENBQUMsR0FBRyxDQUFSLEVBQVdDLENBQUMsR0FBR0osR0FBRyxDQUFDSyxNQUF4QixFQUFnQ0YsQ0FBQyxHQUFHQyxDQUFwQyxFQUF1Q0QsQ0FBQyxFQUF4QyxFQUE0QztBQUN4QyxVQUFJRyxDQUFDLEdBQUdOLEdBQUcsQ0FBQ0csQ0FBRCxDQUFYOztBQUNBLFVBQUlHLENBQUMsSUFBSSxRQUFULEVBQW1CO0FBQ2YsWUFBSUosUUFBUSxDQUFDRyxNQUFULEdBQWtCLENBQXRCLEVBQXlCO0FBQ3JCUCxVQUFBQSxHQUFHLElBQUlJLFFBQVEsQ0FBQ0ssR0FBVCxFQUFQO0FBQ0g7QUFDSixPQUpELE1BSU8sSUFBSUQsQ0FBQyxDQUFDRCxNQUFGLEdBQVcsQ0FBWCxJQUFnQkMsQ0FBQyxDQUFDRSxNQUFGLENBQVMsQ0FBVCxLQUFlLEdBQW5DLEVBQXdDO0FBQzNDLFlBQUlDLElBQUksR0FBR0gsQ0FBQyxDQUFDSSxNQUFGLENBQVMsQ0FBVCxDQUFYO0FBQ0FaLFFBQUFBLEdBQUcsSUFBSSxlQUFlVyxJQUFmLEdBQXNCLE1BQTdCO0FBQ0gsT0FITSxNQUdBLElBQUlILENBQUMsQ0FBQ0QsTUFBRixHQUFXLENBQVgsSUFBZ0JDLENBQUMsQ0FBQ0UsTUFBRixDQUFTLENBQVQsS0FBZSxHQUFuQyxFQUF3QztBQUMzQyxZQUFJRyxFQUFFLEdBQUdMLENBQUMsQ0FBQ0ksTUFBRixDQUFTLENBQVQsRUFBWSxDQUFaLENBQVQ7QUFDQSxZQUFJRSxLQUFLLEdBQUdOLENBQUMsQ0FBQ0ksTUFBRixDQUFTSixDQUFDLENBQUNELE1BQUYsR0FBVyxDQUFwQixFQUF1QixDQUF2QixDQUFaO0FBQ0EsWUFBSVEsT0FBTyxHQUFHLEVBQWQ7O0FBQ0EsWUFBSUYsRUFBRSxJQUFJLEtBQVYsRUFBaUI7QUFDYixjQUFJRyxDQUFDLEdBQUdSLENBQUMsQ0FBQ0wsS0FBRixDQUFRLGdCQUFSLENBQVI7O0FBQ0EsY0FBSWEsQ0FBQyxJQUFJQSxDQUFDLENBQUNULE1BQUYsSUFBWSxDQUFyQixFQUF3QjtBQUNwQlAsWUFBQUEsR0FBRyxJQUFJLGVBQWVnQixDQUFDLENBQUMsQ0FBRCxDQUFoQixHQUFzQixNQUE3QjtBQUNBWSxZQUFBQSxLQUFLLENBQUNGLElBQU4sQ0FBV1YsQ0FBQyxDQUFDLENBQUQsQ0FBWjtBQUNIO0FBQ0osU0FORCxNQU1PLElBQUlILEVBQUUsSUFBSSxLQUFWLEVBQWlCO0FBQ3BCLGNBQUlHLENBQUMsR0FBR1IsQ0FBQyxDQUFDTCxLQUFGLENBQVEsZUFBUixDQUFSO0FBQ0EsY0FBSSxDQUFDYSxDQUFMLEVBQVE7O0FBQ1IsZUFBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBUixFQUFXQyxDQUFDLEdBQUdGLENBQUMsQ0FBQ1QsTUFBdEIsRUFBOEJVLENBQUMsR0FBR0MsQ0FBbEMsRUFBcUNELENBQUMsRUFBdEMsRUFBMEM7QUFDdEMsZ0JBQUlFLEVBQUUsR0FBR0gsQ0FBQyxDQUFDQyxDQUFELENBQUQsQ0FBS0csS0FBTCxDQUFXLEdBQVgsQ0FBVDtBQUNBLGdCQUFJRCxFQUFFLENBQUNaLE1BQUgsR0FBWSxDQUFoQixFQUFtQjs7QUFDbkIsZ0JBQUlZLEVBQUUsQ0FBQyxDQUFELENBQUYsSUFBUyxLQUFiLEVBQW9CO0FBQ2hCbkIsY0FBQUEsR0FBRyxJQUFJLGVBQWVtQixFQUFFLENBQUMsQ0FBRCxDQUFGLENBQU1FLE9BQU4sQ0FBYyxlQUFkLEVBQStCLEVBQS9CLENBQWYsR0FBb0QsTUFBM0Q7QUFDQU8sY0FBQUEsS0FBSyxDQUFDRixJQUFOLENBQVdQLEVBQUUsQ0FBQyxDQUFELENBQWI7QUFDSDtBQUNKO0FBQ0osU0FYTSxNQVdBO0FBQ0gsY0FBSUgsQ0FBQyxHQUFHUixDQUFDLENBQUNMLEtBQUYsQ0FBUSxlQUFSLENBQVI7QUFDQSxjQUFJLENBQUNhLENBQUwsRUFBUTs7QUFDUixlQUFLLElBQUlDLENBQUMsR0FBRyxDQUFSLEVBQVdDLENBQUMsR0FBR0YsQ0FBQyxDQUFDVCxNQUF0QixFQUE4QlUsQ0FBQyxHQUFHQyxDQUFsQyxFQUFxQ0QsQ0FBQyxFQUF0QyxFQUEwQztBQUN0QyxnQkFBSUUsRUFBRSxHQUFHSCxDQUFDLENBQUNDLENBQUQsQ0FBRCxDQUFLRyxLQUFMLENBQVcsR0FBWCxDQUFUO0FBQ0EsZ0JBQUlELEVBQUUsQ0FBQ1osTUFBSCxHQUFZLENBQWhCLEVBQW1CO0FBQ25CLGdCQUFJZSxFQUFFLEdBQUdILEVBQUUsQ0FBQyxDQUFELENBQUYsQ0FBTUUsT0FBTixDQUFjLGVBQWQsRUFBK0IsRUFBL0IsQ0FBVDs7QUFDQSxnQkFBSUYsRUFBRSxDQUFDLENBQUQsQ0FBRixJQUFTLFdBQVQsSUFBd0JBLEVBQUUsQ0FBQyxDQUFELENBQUYsSUFBUyxXQUFyQyxFQUFrRDtBQUM5Q25CLGNBQUFBLEdBQUcsSUFBSSxZQUFZc0IsRUFBWixHQUFpQixJQUF4QjtBQUNBUCxjQUFBQSxPQUFPLEdBQUcsYUFBYUEsT0FBdkI7QUFDSCxhQUhELE1BR08sSUFBSUksRUFBRSxDQUFDLENBQUQsQ0FBRixJQUFTLFVBQWIsRUFBeUI7QUFDNUJuQixjQUFBQSxHQUFHLElBQUksV0FBV3NCLEVBQVgsR0FBZ0IsSUFBdkI7QUFDQVAsY0FBQUEsT0FBTyxHQUFHLFlBQVlBLE9BQXRCO0FBQ0gsYUFITSxNQUdBLElBQUlJLEVBQUUsQ0FBQyxDQUFELENBQUYsSUFBUyxPQUFiLEVBQXNCO0FBQ3pCbkIsY0FBQUEsR0FBRyxJQUFJLGlCQUFpQkMsT0FBTyxJQUFJcUIsRUFBNUIsSUFBa0MsV0FBbEMsR0FBZ0RBLEVBQWhELEdBQXFELEtBQTVEO0FBQ0FQLGNBQUFBLE9BQU8sR0FBRyxVQUFVQSxPQUFwQjtBQUNILGFBSE0sTUFHQSxJQUFJSSxFQUFFLENBQUMsQ0FBRCxDQUFGLElBQVMsTUFBYixFQUFxQjtBQUN4Qm5CLGNBQUFBLEdBQUcsSUFBSSxvQkFBb0JDLE9BQU8sSUFBSXFCLEVBQS9CLElBQXFDLFdBQXJDLEdBQW1EQSxFQUFuRCxHQUF3RCxLQUEvRDtBQUNBUCxjQUFBQSxPQUFPLEdBQUcsY0FBY0EsT0FBeEI7QUFDSCxhQUhNLE1BR0EsSUFBSUksRUFBRSxDQUFDLENBQUQsQ0FBRixJQUFTLFNBQWIsRUFBd0I7QUFDM0Isa0JBQUlJLEVBQUUsR0FBR0osRUFBRSxDQUFDLENBQUQsQ0FBRixDQUFNQyxLQUFOLENBQVksR0FBWixDQUFUO0FBQ0Esa0JBQUlHLEVBQUUsQ0FBQ2hCLE1BQUgsR0FBWSxDQUFoQixFQUFtQjtBQUNuQixrQkFBSWlCLEtBQUssR0FBRyxRQUFaO0FBQ0Esa0JBQUlDLEtBQUssR0FBRyxDQUFaOztBQUNBLGtCQUFJRixFQUFFLENBQUMsQ0FBRCxDQUFGLENBQU1oQixNQUFOLEdBQWUsQ0FBbkIsRUFBc0I7QUFDbEJpQixnQkFBQUEsS0FBSyxHQUFHRCxFQUFFLENBQUMsQ0FBRCxDQUFWO0FBQ0FFLGdCQUFBQSxLQUFLLEdBQUdGLEVBQUUsQ0FBQyxDQUFELENBQVY7QUFDSCxlQUhELE1BR087QUFDSEMsZ0JBQUFBLEtBQUssR0FBR0QsRUFBRSxDQUFDLENBQUQsQ0FBVjtBQUNBRSxnQkFBQUEsS0FBSyxHQUFHRixFQUFFLENBQUMsQ0FBRCxDQUFWO0FBQ0g7O0FBQ0R2QixjQUFBQSxHQUFHLElBQUksb0JBQW9Cd0IsS0FBcEIsR0FBNEIsU0FBNUIsR0FBd0NDLEtBQXhDLEdBQWdELElBQXZEO0FBQ0FWLGNBQUFBLE9BQU8sR0FBRyxlQUFlQSxPQUF6QjtBQUNIO0FBQ0o7QUFDSjs7QUFDRCxZQUFJRCxLQUFLLElBQUksSUFBYixFQUFtQjtBQUNmZCxVQUFBQSxHQUFHLElBQUllLE9BQVA7QUFDSCxTQUZELE1BRU87QUFDSFgsVUFBQUEsUUFBUSxDQUFDc0IsSUFBVCxDQUFjWCxPQUFkO0FBQ0g7QUFDSixPQTlETSxNQThEQTtBQUNIZixRQUFBQSxHQUFHLElBQUlRLENBQVA7QUFDSDtBQUNKOztBQUNELFdBQU87QUFBQ3FCLE1BQUFBLE1BQU0sRUFBQzdCLEdBQVI7QUFBWThCLE1BQUFBLE1BQU0sRUFBQ0Y7QUFBbkIsS0FBUDtBQUNILEdBektlO0FBMktoQjtBQUNBRyxFQUFBQSxpQkFBaUIsRUFBRSwyQkFBVUMsUUFBVixFQUFvQmhDLEdBQXBCLEVBQXlCQyxPQUF6QixFQUFrQztBQUNqRCtCLElBQUFBLFFBQVEsQ0FBQ0gsTUFBVCxHQUFrQixLQUFLOUIsS0FBTCxDQUFXQyxHQUFYLENBQWxCO0FBQ0EsU0FBS2lDLGFBQUwsQ0FBbUJELFFBQW5CLEVBQTZCL0IsT0FBN0I7QUFDSCxHQS9LZTtBQWlMaEJnQyxFQUFBQSxhQUFhLEVBQUUsdUJBQVVELFFBQVYsRUFBb0IvQixPQUFwQixFQUE2QjtBQUN4Q0EsSUFBQUEsT0FBTyxHQUFHQSxPQUFPLElBQUksU0FBckI7O0FBQ0EsU0FBSyxJQUFJSSxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHMkIsUUFBUSxDQUFDRSxjQUFULENBQXdCM0IsTUFBNUMsRUFBb0QsRUFBRUYsQ0FBdEQsRUFBeUQ7QUFDckQsVUFBSThCLFlBQVksR0FBR0gsUUFBUSxDQUFDRSxjQUFULENBQXdCN0IsQ0FBeEIsQ0FBbkI7O0FBQ0EsVUFBSThCLFlBQVksQ0FBQ0MsYUFBakIsRUFBZ0M7QUFDNUJELFFBQUFBLFlBQVksQ0FBQ0UsV0FBYixHQUEyQkYsWUFBWSxDQUFDRSxXQUFiLElBQTRCRixZQUFZLENBQUNDLGFBQXBFO0FBQ0FELFFBQUFBLFlBQVksQ0FBQ0MsYUFBYixHQUE2Qm5DLE9BQTdCO0FBQ0g7QUFDSjtBQUNKLEdBMUxlO0FBNExoQjtBQUNBcUMsRUFBQUEsUUFBUSxFQUFFLGtCQUFVdEMsR0FBVixFQUFlO0FBQ3JCLFFBQUl1QyxJQUFJLEdBQUcsRUFBWDtBQUNILEdBL0xlO0FBaU1oQkMsRUFBQUEsWUFBWSxFQUFFLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLEVBQWdCLEdBQWhCLEVBQXFCLEdBQXJCLEVBQTBCLEdBQTFCLEVBQStCLEdBQS9CLEVBQW9DLEdBQXBDLEVBQXlDLEdBQXpDLEVBQThDLEdBQTlDLEVBQW1ELEdBQW5ELENBak1FO0FBa01oQkMsRUFBQUEsWUFBWSxFQUFFLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLEVBQWdCLEdBQWhCLEVBQXFCLEdBQXJCLEVBQTBCLEdBQTFCLENBbE1FO0FBb01oQjtBQUNBQyxFQUFBQSxZQUFZLEVBQUUsc0JBQVVDLEtBQVYsRUFBaUI7QUFDM0IsV0FBT0EsS0FBUCxDQUQyQixDQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDSDtBQTFOZSxDQUFwQjtBQThOQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCaEQsVUFBakIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gKiDlrZfnrKbkuLLnm7jlhbPlpITnkIZcbiAqIEBhdXRob3Igd2hqaW5nMjAxMkAxNjMuY29tXG4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLy8gIDxkaXY+PGRpdiBmb250Y29sb3I9I3h4eHh4eCBjbGljaz0xfHh4IGhyZWY9Mnx4eD54eHgjMXh4eDxpbWcgc3JjPScnIC8+PC9kaXY+PGFzc2V0cz0xLz48L2Rpdj5cblxud2luZG93LlN0cmluZ1V0aWwgPSB7XG5cbiAgICByZWdleDogLyg8Lio/PnwjXFxkKnxbXjw+I10rKS9pZyxcblxuICAgIHBhcnNlOiBmdW5jdGlvbiAoc3RyLCBoYW5kbGVyKSB7XG4gICAgICAgIC8vIGhhbmRsZXIgPSBoYW5kbGVyIHx8ICdoYW5kbGVyJztcbiAgICAgICAgcmV0dXJuIHN0clxuICAgICAgICB2YXIgYXJyID0gc3RyLm1hdGNoKHRoaXMucmVnZXgpO1xuICAgICAgICBzdHIgPSBcIlwiO1xuICAgICAgICB2YXIgZW5kX3RhZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBhcnIubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcyA9IGFycltpXTtcbiAgICAgICAgICAgIC8vTG9nLmluZm8oXCI9PT09PlwiLCBzLCBzLmNoYXJBdCgwKSk7XG4gICAgICAgICAgICBpZiAocyA9PSBcIjwvZGl2PlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVuZF90YWdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9IGVuZF90YWdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocy5sZW5ndGggPiAxICYmIHMuY2hhckF0KDApID09IFwiI1wiKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZhY2UgPSBzLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgICBzdHIgKz0gXCI8aW1nIHNyYz0nXCIgKyBmYWNlICsgXCInIC8+XCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHMubGVuZ3RoID4gNCAmJiBzLmNoYXJBdCgwKSA9PSAnPCcpIHtcbiAgICAgICAgICAgICAgICB2YXIgczEgPSBzLnN1YnN0cigxLCAzKTtcbiAgICAgICAgICAgICAgICB2YXIgc19lbmQgPSBzLnN1YnN0cihzLmxlbmd0aCAtIDIsIDIpO1xuICAgICAgICAgICAgICAgIHZhciBlbmRfdGFnID0gXCJcIjtcbiAgICAgICAgICAgICAgICBpZiAoczEgPT0gXCJhc3NcIikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHMubWF0Y2goLzxhc3NldHM9KFxcZCspL2kpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYSAmJiBhLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCI8aW1nIHNyYz0nXCIgKyBhWzFdICsgXCInIC8+XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoczEgPT0gXCJpbWdcIikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHMubWF0Y2goL1xcdys9W15cXHM+XSsvaWcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWEpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgbSA9IGEubGVuZ3RoOyBqIDwgbTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgczIgPSBhW2pdLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMi5sZW5ndGggPCAyKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMlswXSA9PSBcInNyY1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFwiPGltZyBzcmM9J1wiICsgczJbMV0ucmVwbGFjZSgvXlsnXCJdfFsnXCJdJC9pZywgJycpICsgXCInIC8+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHMubWF0Y2goL1xcdys9W15cXHM+XSsvaWcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWEpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgbSA9IGEubGVuZ3RoOyBqIDwgbTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgczIgPSBhW2pdLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMi5sZW5ndGggPCAyKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzMyA9IHMyWzFdLnJlcGxhY2UoL15bJ1wiXXxbJ1wiXSQvaWcsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMlswXSA9PSBcImZvbnRjb2xvclwiIHx8IHMyWzBdID09IFwiZm9udENvbG9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCI8Y29sb3I9XCIgKyBzMyArIFwiID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L2NvbG9yPlwiICsgZW5kX3RhZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoczJbMF0gPT0gXCJmb250c2l6ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFwiPHNpemU9XCIgKyBzMyArIFwiID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L3NpemU+XCIgKyBlbmRfdGFnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzMlswXSA9PSBcImNsaWNrXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCI8b24gY2xpY2s9J1wiICsgKGhhbmRsZXIgfHwgczMpICsgXCInIHBhcmFtPSdcIiArIHMzICsgXCInID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L29uPlwiICsgZW5kX3RhZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoczJbMF0gPT0gXCJocmVmXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCI8dT48b24gY2xpY2s9J1wiICsgKGhhbmRsZXIgfHwgczMpICsgXCInIHBhcmFtPSdcIiArIHMzICsgXCInID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L29uPjwvdT5cIiArIGVuZF90YWc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMyWzBdID09IFwib3V0bGluZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHM0ID0gczJbMV0uc3BsaXQoXCIsXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNC5sZW5ndGggPCAyKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBcIiNmZmZmZlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoczRbMF0ubGVuZ3RoID4gMyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gczRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gczRbMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBzNFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBzNFswXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCI8b3V0bGluZSBjb2xvcj1cIiArIGNvbG9yICsgXCIgd2lkdGg9XCIgKyB3aWR0aCArIFwiID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L291dGxpbmU+XCIgKyBlbmRfdGFnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzX2VuZCA9PSBcIi8+XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9IGVuZF90YWc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kX3RhZ3MucHVzaChlbmRfdGFnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0ciArPSBzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfSxcblxuICAgIC8v5aSE55CG5a2X56ym5Liy77yM6L+U5Zue5aSE55CG5ZCO55qEc3RyaW5n77yM5ZKM6LWE5rqQ5pWw57uEcmVzQXJy77yMXG4gICAgcGFyc2VTdHI6IGZ1bmN0aW9uIChzdHIsIGhhbmRsZXIpIHtcbiAgICAgICAgdmFyIGFyciA9IHN0ci5tYXRjaCgvKDwuKj8+fCNcXGQqfFtePD4jXSspL2lnKTtcbiAgICAgICAgc3RyID0gXCJcIjtcbiAgICAgICAgdmFyIGVuZF90YWdzID0gW107XG4gICAgICAgIHZhciBhcnJfMSA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGFyci5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzID0gYXJyW2ldO1xuICAgICAgICAgICAgaWYgKHMgPT0gXCI8L2Rpdj5cIikge1xuICAgICAgICAgICAgICAgIGlmIChlbmRfdGFncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSBlbmRfdGFncy5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHMubGVuZ3RoID4gMSAmJiBzLmNoYXJBdCgwKSA9PSBcIiNcIikge1xuICAgICAgICAgICAgICAgIHZhciBmYWNlID0gcy5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgc3RyICs9IFwiPGltZyBzcmM9J1wiICsgZmFjZSArIFwiJyAvPlwiO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzLmxlbmd0aCA+IDQgJiYgcy5jaGFyQXQoMCkgPT0gJzwnKSB7XG4gICAgICAgICAgICAgICAgdmFyIHMxID0gcy5zdWJzdHIoMSwgMyk7XG4gICAgICAgICAgICAgICAgdmFyIHNfZW5kID0gcy5zdWJzdHIocy5sZW5ndGggLSAyLCAyKTtcbiAgICAgICAgICAgICAgICB2YXIgZW5kX3RhZyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgaWYgKHMxID09IFwiYXNzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBzLm1hdGNoKC88YXNzZXRzPShcXGQrKS9pKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEgJiYgYS5sZW5ndGggPT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFwiPGltZyBzcmM9J1wiICsgYVsxXSArIFwiJyAvPlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJfMS5wdXNoKGFbMV0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMxID09IFwiaW1nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBzLm1hdGNoKC9cXHcrPVteXFxzPl0rL2lnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIG0gPSBhLmxlbmd0aDsgaiA8IG07IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMyID0gYVtqXS5zcGxpdChcIj1cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczIubGVuZ3RoIDwgMikgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczJbMF0gPT0gXCJzcmNcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBcIjxpbWcgc3JjPSdcIiArIHMyWzFdLnJlcGxhY2UoL15bJ1wiXXxbJ1wiXSQvaWcsICcnKSArIFwiJyAvPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycl8xLnB1c2goczJbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHMubWF0Y2goL1xcdys9W15cXHM+XSsvaWcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWEpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgbSA9IGEubGVuZ3RoOyBqIDwgbTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgczIgPSBhW2pdLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMi5sZW5ndGggPCAyKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzMyA9IHMyWzFdLnJlcGxhY2UoL15bJ1wiXXxbJ1wiXSQvaWcsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMlswXSA9PSBcImZvbnRjb2xvclwiIHx8IHMyWzBdID09IFwiZm9udENvbG9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCI8Y29sb3I9XCIgKyBzMyArIFwiID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L2NvbG9yPlwiICsgZW5kX3RhZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoczJbMF0gPT0gXCJmb250c2l6ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFwiPHNpemU9XCIgKyBzMyArIFwiID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L3NpemU+XCIgKyBlbmRfdGFnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzMlswXSA9PSBcImNsaWNrXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCI8b24gY2xpY2s9J1wiICsgKGhhbmRsZXIgfHwgczMpICsgXCInIHBhcmFtPSdcIiArIHMzICsgXCInID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L29uPlwiICsgZW5kX3RhZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoczJbMF0gPT0gXCJocmVmXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCI8dT48b24gY2xpY2s9J1wiICsgKGhhbmRsZXIgfHwgczMpICsgXCInIHBhcmFtPSdcIiArIHMzICsgXCInID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L29uPjwvdT5cIiArIGVuZF90YWc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMyWzBdID09IFwib3V0bGluZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHM0ID0gczJbMV0uc3BsaXQoXCIsXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNC5sZW5ndGggPCAyKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBcIiNmZmZmZlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM0WzBdLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBzNFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBzNFsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gczRbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gczRbMF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFwiPG91dGxpbmUgY29sb3I9XCIgKyBjb2xvciArIFwiIHdpZHRoPVwiICsgd2lkdGggKyBcIiA+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX3RhZyA9IFwiPC9vdXRsaW5lPlwiICsgZW5kX3RhZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc19lbmQgPT0gXCIvPlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSBlbmRfdGFnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZF90YWdzLnB1c2goZW5kX3RhZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge3N0cmluZzpzdHIscmVzQXJyOmFycl8xfVxuICAgIH0sXG5cbiAgICAvLyDnu5nmlofmnKzorr7nva7lrZfnrKbkuLIg5YWI5YGa6Kej5p6Q5aSE55CGXG4gICAgcmljaHRleHRTZXRTdHJpbmc6IGZ1bmN0aW9uIChyaWNodGV4dCwgc3RyLCBoYW5kbGVyKSB7XG4gICAgICAgIHJpY2h0ZXh0LnN0cmluZyA9IHRoaXMucGFyc2Uoc3RyKTtcbiAgICAgICAgdGhpcy5yaWNodGV4dENsaWNrKHJpY2h0ZXh0LCBoYW5kbGVyKTtcbiAgICB9LFxuXG4gICAgcmljaHRleHRDbGljazogZnVuY3Rpb24gKHJpY2h0ZXh0LCBoYW5kbGVyKSB7XG4gICAgICAgIGhhbmRsZXIgPSBoYW5kbGVyIHx8ICdoYW5kbGVyJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByaWNodGV4dC5fbGFiZWxTZWdtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgbGV0IGxhYmVsU2VnbWVudCA9IHJpY2h0ZXh0Ll9sYWJlbFNlZ21lbnRzW2ldO1xuICAgICAgICAgICAgaWYgKGxhYmVsU2VnbWVudC5fY2xpY2tIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgbGFiZWxTZWdtZW50Ll9jbGlja1BhcmFtID0gbGFiZWxTZWdtZW50Ll9jbGlja1BhcmFtIHx8IGxhYmVsU2VnbWVudC5fY2xpY2tIYW5kbGVyO1xuICAgICAgICAgICAgICAgIGxhYmVsU2VnbWVudC5fY2xpY2tIYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+aLhuWIhuaIkOWtl+esplxuICAgIHNwbGl0U3RyOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHZhciBsaXN0ID0ge307XG4gICAgfSxcblxuICAgIHV0aWxfbnVtX2NobjogW1wi6Zu2XCIsIFwi5LiAXCIsIFwi5LqMXCIsIFwi5LiJXCIsIFwi5ZubXCIsIFwi5LqUXCIsIFwi5YWtXCIsIFwi5LiDXCIsIFwi5YWrXCIsIFwi5LmdXCIsIFwi5Y2BXCJdLFxuICAgIHV0aWxfbnVtX3N0ZDogW1wi6Zu2XCIsIFwi5Y2BXCIsIFwi55m+XCIsIFwi5Y2DXCIsIFwi5LiHXCIsIFwi5Lq/XCJdLFxuXG4gICAgLy/mlbDlrZfovazmjaLmiJDlsI/lhpnkuK3mlodcbiAgICBudW1Ub0NoaW5lc2U6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgLy8gdmFsdWUgPSBOdW1iZXIodmFsdWUpIHx8IDA7XG4gICAgICAgIC8vIHZhbHVlX3N0ciA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIC8vIHZhciBhcnJheSA9IHZhbHVlX3N0ci5zcGxpdChcIlwiKTtcbiAgICAgICAgLy8gdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgLy8gdmFyIGZsYWcgPSBmYWxzZTtcbiAgICAgICAgLy8gdmFyIHN0ciA9IFwiXCI7XG4gICAgICAgIC8vIHZhciBsZW4gPSAwO1xuICAgICAgICAvLyBpZihsZW5ndGggPiAxMyl7XG4gICAgICAgIC8vICAgICBwcmludChcIuWPquaUr+aMgTEz5L2N5pWw5a2XXCIpXG4gICAgICAgIC8vICAgICByZXR1cm5cbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBmb3IodmFyIGsgaW4gYXJyYXkpe1xuICAgICAgICAvLyAgICAgdmFyIHYgPSBhcnJheVtrXTtcbiAgICAgICAgLy8gICAgIGlmKHYuY2hhckF0ID09IFwiMFwiICYmIGxlbmd0aCA+IDEpe1xuICAgICAgICAvLyAgICAgICAgIGZsYWcgPSB0cnVlO1xuICAgICAgICAvLyAgICAgfWVsc2V7XG5cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuICAgIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmdVdGlsOyJdfQ==