LogUtil.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. (function() {
  2. var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
  3. var __module = nodeEnv ? module : {exports:{}};
  4. var __filename = 'preview-scripts/assets/script/mk/utils/LogUtil.js';
  5. var __require = nodeEnv ? function (request) {
  6. return cc.require(request);
  7. } : function (request) {
  8. return __quick_compile_project__.require(request, __filename);
  9. };
  10. function __define (exports, require, module) {
  11. if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
  12. cc._RF.push(module, 'a2461HsfJZEfZb/Xlwzf0Nx', 'LogUtil');
  13. // script/mk/utils/LogUtil.ts
  14. "use strict";
  15. var __spreadArrays = (this && this.__spreadArrays) || function () {
  16. for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
  17. for (var r = Array(s), k = 0, i = 0; i < il; i++)
  18. for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
  19. r[k] = a[j];
  20. return r;
  21. };
  22. Object.defineProperty(exports, "__esModule", { value: true });
  23. exports.LogTagColor = void 0;
  24. /**
  25. * 日志打印工具类
  26. * @description
  27. * @author 冯聪
  28. */
  29. var LogUtil = /** @class */ (function () {
  30. function LogUtil() {
  31. /**
  32. * 是否显示Log
  33. * @description
  34. */
  35. this.ifShowLog = true;
  36. /**
  37. * 标签符号
  38. * @description 标签与打印内容之间的拼接符号
  39. */
  40. this._tagChar = "...";
  41. /**
  42. * 标签符号
  43. * @description 标签与打印内容之间的拼接符号
  44. */
  45. this._frontChar = " ";
  46. /**
  47. * 对象key&value间隔符号
  48. * @description 打印对象时,key与value之间的拼接符号
  49. */
  50. this._keyValueChar = " = ";
  51. }
  52. /**
  53. * 打印普通日志
  54. * @description
  55. * @param tag 日志标签(用于标识日志)
  56. * @param data 日志内容
  57. */
  58. LogUtil.prototype.log = function (tag) {
  59. var data = [];
  60. for (var _i = 1; _i < arguments.length; _i++) {
  61. data[_i - 1] = arguments[_i];
  62. }
  63. if (!this.ifShowLog) {
  64. return;
  65. }
  66. var totalTag = tag + this._tagChar;
  67. console.log.apply(console, __spreadArrays(["%c " + totalTag, "color: " + LogTagColor.skyblue], data));
  68. };
  69. /**
  70. * 打印警告日志
  71. * @description
  72. * @param tag 日志标签(用于标识日志)
  73. * @param data 日志内容
  74. */
  75. LogUtil.prototype.warn = function (tag) {
  76. var data = [];
  77. for (var _i = 1; _i < arguments.length; _i++) {
  78. data[_i - 1] = arguments[_i];
  79. }
  80. if (!this.ifShowLog) {
  81. return;
  82. }
  83. var totalTag = tag + this._tagChar;
  84. console.warn.apply(console, __spreadArrays(["%c " + totalTag, "color: " + LogTagColor.orange], data));
  85. };
  86. /**
  87. * 打印错误日志
  88. * @description
  89. * @param tag 日志标签(用于标识日志)
  90. * @param data 日志内容
  91. */
  92. LogUtil.prototype.error = function (tag) {
  93. var data = [];
  94. for (var _i = 1; _i < arguments.length; _i++) {
  95. data[_i - 1] = arguments[_i];
  96. }
  97. if (!this.ifShowLog) {
  98. return;
  99. }
  100. var totalTag = tag + this._tagChar;
  101. console.warn.apply(console, __spreadArrays(["%c " + totalTag, "color: " + LogTagColor.red], data));
  102. };
  103. /**
  104. * 打印单个对象日志
  105. * @description 逐个分层打印所有对象的key,value值
  106. * @param tag 日志标签(用于标识日志)
  107. * @param obj 日志对象
  108. * @param frontStrNum 前缀字符数量(不用填)
  109. * @returns
  110. */
  111. LogUtil.prototype.logSingle = function (tag, obj, frontStrNum) {
  112. if (frontStrNum === void 0) { frontStrNum = 0; }
  113. if (!this.ifShowLog) {
  114. return;
  115. }
  116. if (obj == null || obj == undefined) {
  117. return;
  118. }
  119. if (typeof obj === "number" || typeof obj === "string" || typeof obj === "boolean") {
  120. this.log("" + this.getFrontStr(frontStrNum) + tag, obj);
  121. }
  122. else {
  123. var objKeys = Object.keys(obj);
  124. for (var _i = 0, objKeys_1 = objKeys; _i < objKeys_1.length; _i++) {
  125. var key = objKeys_1[_i];
  126. if (obj.hasOwnProperty(key)) {
  127. var index = objKeys.indexOf(key);
  128. if (typeof obj[key] === "object") {
  129. this.log("" + this.getFrontStr(frontStrNum), key, ": ");
  130. this.logSingle(tag, obj[key], frontStrNum + 1);
  131. }
  132. else {
  133. if (!frontStrNum && index === 0) {
  134. this.log("" + this.getFrontStr(frontStrNum) + tag + "\n", key, this._keyValueChar, obj[key]);
  135. }
  136. else {
  137. this.log("" + this.getFrontStr(frontStrNum), key, this._keyValueChar, obj[key]);
  138. }
  139. }
  140. }
  141. }
  142. }
  143. };
  144. /**
  145. * 把日志内容拼接成字符串
  146. * @param data
  147. * @returns
  148. */
  149. LogUtil.prototype.getMessage = function () {
  150. var data = [];
  151. for (var _i = 0; _i < arguments.length; _i++) {
  152. data[_i] = arguments[_i];
  153. }
  154. var message = "";
  155. for (var i = 0; i < data.length; i++) {
  156. var str = data[i];
  157. var str_new = "";
  158. //屏蔽逗号
  159. for (var j = 0; j < str.length; j++) {
  160. var char = str[j];
  161. str_new += char;
  162. }
  163. message += str_new;
  164. }
  165. return message;
  166. };
  167. /**
  168. * 获取前缀字符串
  169. * @description 根据前缀字符串数目生成前缀字符串,用以标记层级
  170. * @param frontStrNum 字符串数量
  171. * @returns 返回前缀字符串(string)
  172. */
  173. LogUtil.prototype.getFrontStr = function (frontStrNum) {
  174. var str = "";
  175. if (frontStrNum > 0) {
  176. for (var i = 0; i < frontStrNum; i++) {
  177. str += this._frontChar;
  178. }
  179. return str;
  180. }
  181. return str;
  182. };
  183. return LogUtil;
  184. }());
  185. exports.default = LogUtil;
  186. /** 日志字体颜色 */
  187. var LogTagColor;
  188. (function (LogTagColor) {
  189. LogTagColor["red"] = "red;font-weight:bold";
  190. LogTagColor["white"] = "white;font-weight:bold";
  191. LogTagColor["yellow"] = "yellow;font-weight:bold";
  192. LogTagColor["green"] = "green;font-weight:bold";
  193. LogTagColor["bule"] = "blue;font-weight:bold";
  194. LogTagColor["skyblue"] = "#3DB2EF;font-weight:bold";
  195. LogTagColor["orange"] = "orange;font-weight:bold";
  196. LogTagColor["black"] = "black;font-weight:bold";
  197. })(LogTagColor = exports.LogTagColor || (exports.LogTagColor = {}));
  198. cc._RF.pop();
  199. }
  200. if (nodeEnv) {
  201. __define(__module.exports, __require, __module);
  202. }
  203. else {
  204. __quick_compile_project__.registerModuleFunc(__filename, function () {
  205. __define(__module.exports, __require, __module);
  206. });
  207. }
  208. })();
  209. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcc2NyaXB0XFxta1xcdXRpbHNcXExvZ1V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7O0dBSUc7QUFDSDtJQUFBO1FBRUk7OztXQUdHO1FBQ0ksY0FBUyxHQUFZLElBQUksQ0FBQztRQUVqQzs7O1dBR0c7UUFDSyxhQUFRLEdBQVcsS0FBSyxDQUFDO1FBRWpDOzs7V0FHRztRQUNLLGVBQVUsR0FBVyxNQUFNLENBQUM7UUFFcEM7OztXQUdHO1FBQ0ssa0JBQWEsR0FBVyxLQUFLLENBQUM7SUF5SDFDLENBQUM7SUF2SEc7Ozs7O09BS0c7SUFDSSxxQkFBRyxHQUFWLFVBQVcsR0FBVztRQUFFLGNBQWM7YUFBZCxVQUFjLEVBQWQscUJBQWMsRUFBZCxJQUFjO1lBQWQsNkJBQWM7O1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2pCLE9BQU87U0FDVjtRQUNELElBQUksUUFBUSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxHQUFHLE9BQVgsT0FBTyxrQkFBSyxLQUFLLEdBQUcsUUFBUSxFQUFFLFNBQVMsR0FBRyxXQUFXLENBQUMsT0FBTyxHQUFLLElBQUksR0FBRTtJQUM1RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxzQkFBSSxHQUFYLFVBQVksR0FBVztRQUFFLGNBQWM7YUFBZCxVQUFjLEVBQWQscUJBQWMsRUFBZCxJQUFjO1lBQWQsNkJBQWM7O1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2pCLE9BQU87U0FDVjtRQUNELElBQUksUUFBUSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxJQUFJLE9BQVosT0FBTyxrQkFBTSxLQUFLLEdBQUcsUUFBUSxFQUFFLFNBQVMsR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFLLElBQUksR0FBRTtJQUM1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LE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDakIsTUFBTTtZQUNOLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqQyxJQUFJLElBQUksR0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLE9BQU8sSUFBSSxJQUFJLENBQUM7YUFDbkI7WUFDRCxPQUFPLElBQUksT0FBTyxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksNkJBQVcsR0FBbEIsVUFBbUIsV0FBbUI7UUFDbEMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xDLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO2FBQzFCO1lBQ0QsT0FBTyxHQUFHLENBQUM7U0FDZDtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUNMLGNBQUM7QUFBRCxDQWpKQSxBQWlKQyxJQUFBOztBQUVELGFBQWE7QUFDYixJQUFZLFdBU1g7QUFURCxXQUFZLFdBQVc7SUFDbkIsMkNBQTRCLENBQUE7SUFDNUIsK0NBQWdDLENBQUE7SUFDaEMsaURBQWtDLENBQUE7SUFDbEMsK0NBQWdDLENBQUE7SUFDaEMsNkNBQThCLENBQUE7SUFDOUIsbURBQW9DLENBQUE7SUFDcEMsaURBQWtDLENBQUE7SUFDbEMsK0NBQWdDLENBQUE7QUFDcEMsQ0FBQyxFQVRXLFdBQVcsR0FBWCxtQkFBVyxLQUFYLG1CQUFXLFFBU3RCIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIOaXpeW/l+aJk+WNsOW3peWFt+exu1xyXG4gKiBAZGVzY3JpcHRpb24gXHJcbiAqIEBhdXRob3Ig5Yav6IGqXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dVdGlsIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIOaYr+WQpuaYvuekukxvZ1xyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpZlNob3dMb2c6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICog5qCH562+56ym5Y+3XHJcbiAgICAgKiBAZGVzY3JpcHRpb24g5qCH562+5LiO5omT5Y2w5YaF5a655LmL6Ze055qE5ou85o6l56ym5Y+3XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX3RhZ0NoYXI6IHN0cmluZyA9IFwiLi4uXCI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmoIfnrb7nrKblj7dcclxuICAgICAqIEBkZXNjcmlwdGlvbiDmoIfnrb7kuI7miZPljbDlhoXlrrnkuYvpl7TnmoTmi7zmjqXnrKblj7dcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfZnJvbnRDaGFyOiBzdHJpbmcgPSBcIiAgICBcIjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWvueixoWtleSZ2YWx1ZemXtOmalOespuWPt1xyXG4gICAgICogQGRlc2NyaXB0aW9uIOaJk+WNsOWvueixoeaXtixrZXnkuI52YWx1ZeS5i+mXtOeahOaLvOaOpeespuWPt1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9rZXlWYWx1ZUNoYXI6IHN0cmluZyA9IFwiID0gXCI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmiZPljbDmma7pgJrml6Xlv5dcclxuICAgICAqIEBkZXNjcmlwdGlvblxyXG4gICAgICogQHBhcmFtICB0YWcgIOaXpeW/l+agh+etvijnlKjkuo7moIfor4bml6Xlv5cpXHJcbiAgICAgKiBAcGFyYW0gIGRhdGEg5pel5b+X5YaF5a65XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBsb2codGFnOiBzdHJpbmcsIC4uLmRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlmU2hvd0xvZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB0b3RhbFRhZyA9IHRhZyArIHRoaXMuX3RhZ0NoYXI7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCIlYyBcIiArIHRvdGFsVGFnLCBcImNvbG9yOiBcIiArIExvZ1RhZ0NvbG9yLnNreWJsdWUsIC4uLmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5omT5Y2w6K2m5ZGK5pel5b+XXHJcbiAgICAgKiBAZGVzY3JpcHRpb25cclxuICAgICAqIEBwYXJhbSAgdGFnICAg5pel5b+X5qCH562+KOeUqOS6juagh+ivhuaXpeW/lylcclxuICAgICAqIEBwYXJhbSAgZGF0YSAg5pel5b+X5YaF5a65XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB3YXJuKHRhZzogc3RyaW5nLCAuLi5kYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGlmICghdGhpcy5pZlNob3dMb2cpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdG90YWxUYWcgPSB0YWcgKyB0aGlzLl90YWdDaGFyO1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcIiVjIFwiICsgdG90YWxUYWcsIFwiY29sb3I6IFwiICsgTG9nVGFnQ29sb3Iub3JhbmdlLCAuLi5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOaJk+WNsOmUmeivr+aXpeW/l1xyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiBAcGFyYW0gIHRhZyAgIOaXpeW/l+agh+etvijnlKjkuo7moIfor4bml6Xlv5cpXHJcbiAgICAgKiBAcGFyYW0gIGRhdGEgIOaXpeW/l+WGheWuuVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXJyb3IodGFnOiBzdHJpbmcsIC4uLmRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlmU2hvd0xvZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB0b3RhbFRhZyA9IHRhZyArIHRoaXMuX3RhZ0NoYXI7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFwiJWMgXCIgKyB0b3RhbFRhZywgXCJjb2xvcjogXCIgKyBMb2dUYWdDb2xvci5yZWQsLi4uZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmiZPljbDljZXkuKrlr7nosaHml6Xlv5dcclxuICAgICAqIEBkZXNjcmlwdGlvbiAgICAgICAg6YCQ5Liq5YiG5bGC5omT5Y2w5omA5pyJ5a+56LGh55qEa2V5LHZhbHVl5YC8XHJcbiAgICAgKiBAcGFyYW0gdGFnICAgICAgICAgIOaXpeW/l+agh+etvijnlKjkuo7moIfor4bml6Xlv5cpXHJcbiAgICAgKiBAcGFyYW0gb2JqICAgICAgICAgIOaXpeW/l+WvueixoVxyXG4gICAgICogQHBhcmFtIGZyb250U3RyTnVtICDliY3nvIDlrZfnrKbmlbDph48o5LiN55So5aGrKVxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBsb2dTaW5nbGUodGFnOiBzdHJpbmcsIG9iajogYW55LCBmcm9udFN0ck51bTogbnVtYmVyID0gMCkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaWZTaG93TG9nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygb2JqID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyhgJHt0aGlzLmdldEZyb250U3RyKGZyb250U3RyTnVtKX0ke3RhZ31gLCBvYmopO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBvYmpLZXlzID0gT2JqZWN0LmtleXMob2JqKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygb2JqS2V5cykge1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gb2JqS2V5cy5pbmRleE9mKGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZyhgJHt0aGlzLmdldEZyb250U3RyKGZyb250U3RyTnVtKX1gLCBrZXksIFwiOiBcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dTaW5nbGUodGFnLCBvYmpba2V5XSwgZnJvbnRTdHJOdW0gKyAxKVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZnJvbnRTdHJOdW0gJiYgaW5kZXggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nKGAke3RoaXMuZ2V0RnJvbnRTdHIoZnJvbnRTdHJOdW0pfSR7dGFnfVxcbmAsIGtleSwgdGhpcy5fa2V5VmFsdWVDaGFyLCBvYmpba2V5XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZyhgJHt0aGlzLmdldEZyb250U3RyKGZyb250U3RyTnVtKX1gLCBrZXksIHRoaXMuX2tleVZhbHVlQ2hhciwgb2JqW2tleV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5oqK5pel5b+X5YaF5a655ou85o6l5oiQ5a2X56ym5LiyXHJcbiAgICAgKiBAcGFyYW0gZGF0YSBcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0TWVzc2FnZSguLi5kYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGxldCBtZXNzYWdlID0gXCJcIjtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHN0ciA9IGRhdGFbaV07XHJcbiAgICAgICAgICAgIGxldCBzdHJfbmV3ID0gXCJcIjtcclxuICAgICAgICAgICAgLy/lsY/olL3pgJflj7dcclxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdHIubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBjaGFyOiBzdHJpbmcgPSBzdHJbal07XHJcbiAgICAgICAgICAgICAgICBzdHJfbmV3ICs9IGNoYXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbWVzc2FnZSArPSBzdHJfbmV3O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPluWJjee8gOWtl+espuS4slxyXG4gICAgICogQGRlc2NyaXB0aW9uICAgICAgICAg5qC55o2u5YmN57yA5a2X56ym5Liy5pWw55uu55Sf5oiQ5YmN57yA5a2X56ym5Liy77yM55So5Lul5qCH6K6w5bGC57qnXHJcbiAgICAgKiBAcGFyYW0gIGZyb250U3RyTnVtICDlrZfnrKbkuLLmlbDph49cclxuICAgICAqIEByZXR1cm5zICAgICAgICAgICAgIOi/lOWbnuWJjee8gOWtl+espuS4sihzdHJpbmcpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRGcm9udFN0cihmcm9udFN0ck51bTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgc3RyID0gXCJcIjtcclxuICAgICAgICBpZiAoZnJvbnRTdHJOdW0gPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJvbnRTdHJOdW07IGkrKykge1xyXG4gICAgICAgICAgICAgICAgc3RyICs9IHRoaXMuX2Zyb250Q2hhcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKiog5pel5b+X5a2X5L2T6aKc6ImyICovXHJcbmV4cG9ydCBlbnVtIExvZ1RhZ0NvbG9yIHtcclxuICAgIHJlZCA9IFwicmVkO2ZvbnQtd2VpZ2h0OmJvbGRcIixcclxuICAgIHdoaXRlID0gXCJ3aGl0ZTtmb250LXdlaWdodDpib2xkXCIsXHJcbiAgICB5ZWxsb3cgPSBcInllbGxvdztmb250LXdlaWdodDpib2xkXCIsXHJcbiAgICBncmVlbiA9IFwiZ3JlZW47Zm9udC13ZWlnaHQ6Ym9sZFwiLFxyXG4gICAgYnVsZSA9IFwiYmx1ZTtmb250LXdlaWdodDpib2xkXCIsXHJcbiAgICBza3libHVlID0gXCIjM0RCMkVGO2ZvbnQtd2VpZ2h0OmJvbGRcIixcclxuICAgIG9yYW5nZSA9IFwib3JhbmdlO2ZvbnQtd2VpZ2h0OmJvbGRcIixcclxuICAgIGJsYWNrID0gXCJibGFjaztmb250LXdlaWdodDpib2xkXCJcclxufVxyXG4iXX0=