(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
+-----------------------------------------------------*/
//
xxx#1xxx
![]()
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 == "") {
if (end_tags.length > 0) {
str += end_tags.pop();
}
} else if (s.length > 1 && s.charAt(0) == "#") {
var face = s.substr(1);
str += "
";
} 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(/";
}
} 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 += "
";
}
}
} 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 += "";
end_tag = "" + end_tag;
} else if (s2[0] == "fontsize") {
str += "";
end_tag = "" + end_tag;
} else if (s2[0] == "click") {
str += "";
end_tag = "" + end_tag;
} else if (s2[0] == "href") {
str += "";
end_tag = "" + 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 += "";
end_tag = "" + 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 == "") {
if (end_tags.length > 0) {
str += end_tags.pop();
}
} else if (s.length > 1 && s.charAt(0) == "#") {
var face = s.substr(1);
str += "
";
} 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(/";
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 += "
";
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 += "";
end_tag = "" + end_tag;
} else if (s2[0] == "fontsize") {
str += "";
end_tag = "" + end_tag;
} else if (s2[0] == "click") {
str += "";
end_tag = "" + end_tag;
} else if (s2[0] == "href") {
str += "";
end_tag = "" + 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 += "";
end_tag = "" + 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcdXRpbFxcc3RyaW5nX3V0aWwuanMiXSwibmFtZXMiOlsid2luZG93IiwiU3RyaW5nVXRpbCIsInJlZ2V4IiwicGFyc2UiLCJzdHIiLCJoYW5kbGVyIiwiYXJyIiwibWF0Y2giLCJlbmRfdGFncyIsImkiLCJuIiwibGVuZ3RoIiwicyIsInBvcCIsImNoYXJBdCIsImZhY2UiLCJzdWJzdHIiLCJzMSIsInNfZW5kIiwiZW5kX3RhZyIsImEiLCJqIiwibSIsInMyIiwic3BsaXQiLCJyZXBsYWNlIiwiczMiLCJzNCIsImNvbG9yIiwid2lkdGgiLCJwdXNoIiwicGFyc2VTdHIiLCJhcnJfMSIsInN0cmluZyIsInJlc0FyciIsInJpY2h0ZXh0U2V0U3RyaW5nIiwicmljaHRleHQiLCJyaWNodGV4dENsaWNrIiwiX2xhYmVsU2VnbWVudHMiLCJsYWJlbFNlZ21lbnQiLCJfY2xpY2tIYW5kbGVyIiwiX2NsaWNrUGFyYW0iLCJzcGxpdFN0ciIsImxpc3QiLCJ1dGlsX251bV9jaG4iLCJ1dGlsX251bV9zdGQiLCJudW1Ub0NoaW5lc2UiLCJ2YWx1ZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7QUFLQTtBQUVBQSxNQUFNLENBQUNDLFVBQVAsR0FBb0I7QUFFaEJDLEVBQUFBLEtBQUssRUFBRSx3QkFGUztBQUloQkMsRUFBQUEsS0FBSyxFQUFFLGVBQVVDLEdBQVYsRUFBZUMsT0FBZixFQUF3QjtBQUMzQjtBQUNBLFdBQU9ELEdBQVA7QUFDQSxRQUFJRSxHQUFHLEdBQUdGLEdBQUcsQ0FBQ0csS0FBSixDQUFVLEtBQUtMLEtBQWYsQ0FBVjtBQUNBRSxJQUFBQSxHQUFHLEdBQUcsRUFBTjtBQUNBLFFBQUlJLFFBQVEsR0FBRyxFQUFmOztBQUNBLFNBQUssSUFBSUMsQ0FBQyxHQUFHLENBQVIsRUFBV0MsQ0FBQyxHQUFHSixHQUFHLENBQUNLLE1BQXhCLEVBQWdDRixDQUFDLEdBQUdD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDSDtBQTFOZSxDQUFwQjtBQThOQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCaEQsVUFBakIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gKiDlrZfnrKbkuLLnm7jlhbPlpITnkIZcbiAqIEBhdXRob3Igd2hqaW5nMjAxMkAxNjMuY29tXG4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLy8gIDxkaXY+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==