@whitesev/utils 2.7.8 → 2.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +176 -176
  2. package/dist/index.amd.js +896 -877
  3. package/dist/index.amd.js.map +1 -1
  4. package/dist/index.cjs.js +896 -877
  5. package/dist/index.cjs.js.map +1 -1
  6. package/dist/index.esm.js +896 -877
  7. package/dist/index.esm.js.map +1 -1
  8. package/dist/index.iife.js +896 -877
  9. package/dist/index.iife.js.map +1 -1
  10. package/dist/index.system.js +896 -877
  11. package/dist/index.system.js.map +1 -1
  12. package/dist/index.umd.js +896 -877
  13. package/dist/index.umd.js.map +1 -1
  14. package/dist/types/src/CommonUtil.d.ts +59 -59
  15. package/dist/types/src/DOMUtils.d.ts +1 -1
  16. package/dist/types/src/Dictionary.d.ts +1 -1
  17. package/dist/types/src/Httpx.d.ts +2 -2
  18. package/dist/types/src/Progress.d.ts +0 -4
  19. package/dist/types/src/TryCatch.d.ts +2 -2
  20. package/dist/types/src/Utils.d.ts +365 -365
  21. package/dist/types/src/UtilsGMCookie.d.ts +2 -2
  22. package/dist/types/src/UtilsGMMenu.d.ts +1 -1
  23. package/dist/types/src/indexedDB.d.ts +3 -3
  24. package/dist/types/src/types/Event.d.ts +188 -188
  25. package/dist/types/src/types/Httpx.d.ts +1344 -1343
  26. package/dist/types/src/types/Log.d.ts +19 -19
  27. package/dist/types/src/types/Progress.d.ts +20 -20
  28. package/dist/types/src/types/React.d.ts +119 -119
  29. package/dist/types/src/types/TryCatch.d.ts +9 -9
  30. package/dist/types/src/types/UtilsGMCookie.d.ts +93 -93
  31. package/dist/types/src/types/UtilsGMMenu.d.ts +77 -77
  32. package/dist/types/src/types/Vue2.d.ts +166 -166
  33. package/dist/types/src/types/WindowApi.d.ts +14 -14
  34. package/dist/types/src/types/ajaxHooker.d.ts +151 -151
  35. package/dist/types/src/types/env.d.ts +7 -2
  36. package/dist/types/src/types/global.d.ts +31 -31
  37. package/package.json +16 -7
  38. package/src/ColorConversion.ts +105 -106
  39. package/src/CommonUtil.ts +280 -279
  40. package/src/DOMUtils.ts +251 -272
  41. package/src/Dictionary.ts +153 -154
  42. package/src/GBKEncoder.ts +108 -112
  43. package/src/Hooks.ts +73 -81
  44. package/src/Httpx.ts +1457 -1466
  45. package/src/LockFunction.ts +62 -62
  46. package/src/Log.ts +258 -259
  47. package/src/ModuleRaid.js +1 -0
  48. package/src/Progress.ts +108 -114
  49. package/src/TryCatch.ts +86 -86
  50. package/src/Utils.ts +4772 -4825
  51. package/src/UtilsCommon.ts +14 -14
  52. package/src/UtilsGMCookie.ts +254 -261
  53. package/src/UtilsGMMenu.ts +445 -454
  54. package/src/Vue.ts +233 -229
  55. package/src/WindowApi.ts +59 -59
  56. package/src/ajaxHooker/ajaxHooker.js +1 -0
  57. package/src/indexedDB.ts +497 -502
  58. package/src/types/Event.d.ts +188 -188
  59. package/src/types/Httpx.d.ts +1344 -1343
  60. package/src/types/Log.d.ts +19 -19
  61. package/src/types/Progress.d.ts +20 -20
  62. package/src/types/React.d.ts +119 -119
  63. package/src/types/TryCatch.d.ts +9 -9
  64. package/src/types/UtilsGMCookie.d.ts +93 -93
  65. package/src/types/UtilsGMMenu.d.ts +77 -77
  66. package/src/types/Vue2.d.ts +166 -166
  67. package/src/types/WindowApi.d.ts +14 -14
  68. package/src/types/ajaxHooker.d.ts +151 -151
  69. package/src/types/env.d.ts +7 -2
  70. package/src/types/global.d.ts +31 -31
package/dist/index.esm.js CHANGED
@@ -7,7 +7,7 @@ class ColorConversion {
7
7
  if (typeof str !== "string") {
8
8
  return false;
9
9
  }
10
- if (!str.match(/^(\#|)[0-9a-fA-F]{6}$/)) {
10
+ if (!str.match(/^(#|)[0-9a-fA-F]{6}$/)) {
11
11
  return false;
12
12
  }
13
13
  return true;
@@ -21,18 +21,10 @@ class ColorConversion {
21
21
  */
22
22
  hexToRgba(hex, opacity) {
23
23
  if (!this.isHex(hex)) {
24
- throw new TypeError("输入错误的hex:" + hex);
24
+ throw new TypeError(`输入错误的hex:${hex}`);
25
25
  }
26
26
  return hex && hex.replace(/\s+/g, "").length === 7
27
- ? "rgba(" +
28
- parseInt("0x" + hex.slice(1, 3)) +
29
- "," +
30
- parseInt("0x" + hex.slice(3, 5)) +
31
- "," +
32
- parseInt("0x" + hex.slice(5, 7)) +
33
- "," +
34
- opacity +
35
- ")"
27
+ ? `rgba(${parseInt(`0x${hex.slice(1, 3)}`)},${parseInt(`0x${hex.slice(3, 5)}`)},${parseInt(`0x${hex.slice(5, 7)}`)},${opacity})`
36
28
  : "";
37
29
  }
38
30
  /**
@@ -41,14 +33,15 @@ class ColorConversion {
41
33
  */
42
34
  hexToRgb(str) {
43
35
  if (!this.isHex(str)) {
44
- throw new TypeError("输入错误的hex:" + str);
36
+ throw new TypeError(`输入错误的hex:${str}`);
45
37
  }
46
38
  /* replace替换查找的到的字符串 */
47
39
  str = str.replace("#", "");
48
40
  /* match得到查询数组 */
49
- let hxs = str.match(/../g);
41
+ const hxs = str.match(/../g);
50
42
  for (let index = 0; index < 3; index++) {
51
- hxs[index] = parseInt(hxs[index], 16);
43
+ const value = parseInt(hxs[index], 16);
44
+ Reflect.set(hxs, index, value);
52
45
  }
53
46
  return hxs;
54
47
  }
@@ -60,16 +53,16 @@ class ColorConversion {
60
53
  */
61
54
  rgbToHex(redValue, greenValue, blueValue) {
62
55
  /* 验证输入的rgb值是否合法 */
63
- let validPattern = /^\d{1,3}$/;
56
+ const validPattern = /^\d{1,3}$/;
64
57
  if (!validPattern.test(redValue.toString()) ||
65
58
  !validPattern.test(greenValue.toString()) ||
66
59
  !validPattern.test(blueValue.toString()))
67
60
  throw new TypeError("输入错误的rgb颜色值");
68
- let hexs = [redValue.toString(16), greenValue.toString(16), blueValue.toString(16)];
61
+ const hexs = [redValue.toString(16), greenValue.toString(16), blueValue.toString(16)];
69
62
  for (let index = 0; index < 3; index++)
70
63
  if (hexs[index].length == 1)
71
- hexs[index] = "0" + hexs[index];
72
- return "#" + hexs.join("");
64
+ hexs[index] = `0${hexs[index]}`;
65
+ return `#${hexs.join("")}`;
73
66
  }
74
67
  /**
75
68
  * 获取颜色变暗或亮
@@ -78,11 +71,13 @@ class ColorConversion {
78
71
  */
79
72
  getDarkColor(color, level) {
80
73
  if (!this.isHex(color)) {
81
- throw new TypeError("输入错误的hex:" + color);
74
+ throw new TypeError(`输入错误的hex:${color}`);
82
75
  }
83
- let rgbc = this.hexToRgb(color);
76
+ const rgbc = this.hexToRgb(color);
84
77
  for (let index = 0; index < 3; index++) {
85
- rgbc[index] = Math.floor(rgbc[index] * (1 - level));
78
+ const rgbcItemValue = rgbc[index];
79
+ const value = Math.floor(Number(rgbcItemValue) * (1 - Number(level)));
80
+ Reflect.set(rgbc, index, value);
86
81
  }
87
82
  return this.rgbToHex(rgbc[0], rgbc[1], rgbc[2]);
88
83
  }
@@ -93,40 +88,43 @@ class ColorConversion {
93
88
  */
94
89
  getLightColor(color, level) {
95
90
  if (!this.isHex(color)) {
96
- throw new TypeError("输入错误的hex:" + color);
91
+ throw new TypeError(`输入错误的hex:${color}`);
97
92
  }
98
- let rgbc = this.hexToRgb(color);
93
+ const rgbc = this.hexToRgb(color);
99
94
  for (let index = 0; index < 3; index++) {
100
- rgbc[index] = Math.floor((255 - rgbc[index]) * level + rgbc[index]);
95
+ const rgbcItemValue = Number(rgbc[index]);
96
+ const value = Math.floor(255 - rgbcItemValue * level + rgbcItemValue);
97
+ Reflect.set(rgbc, index, value);
101
98
  }
102
99
  return this.rgbToHex(rgbc[0], rgbc[1], rgbc[2]);
103
100
  }
104
101
  }
105
102
 
106
103
  class GBKEncoder {
107
- #data = [];
104
+ #data;
108
105
  #U2Ghash = {};
109
106
  #G2Uhash = {};
110
107
  constructor() {
111
- let dataText = this.handleText("4e:020405060f12171f20212326292e2f313335373c40414244464a5155575a5b6263646567686a6b6c6d6e6f727475767778797a7b7c7d7f808182838485878a#909697999c9d9ea3aaafb0b1b4b6b7b8b9bcbdbec8cccfd0d2dadbdce0e2e6e7e9edeeeff1f4f8f9fafcfe,4f:00020304050607080b0c12131415161c1d212328292c2d2e31333537393b3e3f40414244454748494a4b4c525456616266686a6b6d6e7172757778797a7d8081828586878a8c8e909293959698999a9c9e9fa1a2a4abadb0b1b2b3b4b6b7b8b9babbbcbdbec0c1c2c6c7c8c9cbcccdd2d3d4d5d6d9dbe0e2e4e5e7ebecf0f2f4f5f6f7f9fbfcfdff,50:000102030405060708090a#0b0e1011131516171b1d1e20222324272b2f303132333435363738393b3d3f404142444546494a4b4d5051525354565758595b5d5e5f6061626364666768696a6b6d6e6f70717273747578797a7c7d818283848687898a8b8c8e8f909192939495969798999a9b9c9d9e9fa0a1a2a4a6aaabadaeafb0b1b3b4b5b6b7b8b9bcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdced0d1d2d3d4d5d7d8d9dbdcdddedfe0e1e2e3e4e5e8e9eaebeff0f1f2f4f6f7f8f9fafcfdfeff,51:00010203040508#090a0c0d0e0f1011131415161718191a1b1c1d1e1f2022232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e42474a4c4e4f5052535758595b5d5e5f606163646667696a6f727a7e7f838486878a8b8e8f90919394989a9d9e9fa1a3a6a7a8a9aaadaeb4b8b9babebfc1c2c3c5c8cacdced0d2d3d4d5d6d7d8d9dadcdedfe2e3e5e6e7e8e9eaeceef1f2f4f7fe,52:0405090b0c0f101314151c1e1f2122232526272a2c2f313234353c3e4445464748494b4e4f5253555758#595a5b5d5f6062636466686b6c6d6e7071737475767778797a7b7c7e808384858687898a8b8c8d8e8f91929495969798999a9ca4a5a6a7aeafb0b4b5b6b7b8b9babbbcbdc0c1c2c4c5c6c8cacccdcecfd1d3d4d5d7d9dadbdcdddee0e1e2e3e5e6e7e8e9eaebecedeeeff1f2f3f4f5f6f7f8fbfcfd,53:0102030407090a0b0c0e11121314181b1c1e1f2224252728292b2c2d2f3031323334353637383c3d404244464b4c4d505458595b5d65686a6c6d7276797b7c7d7e80818387888a8e8f#90919293949697999b9c9ea0a1a4a7aaabacadafb0b1b2b3b4b5b7b8b9babcbdbec0c3c4c5c6c7cecfd0d2d3d5dadcdddee1e2e7f4fafeff,54:000205070b1418191a1c2224252a303336373a3d3f4142444547494c4d4e4f515a5d5e5f6061636567696a6b6c6d6e6f7074797a7e7f8183858788898a8d919397989c9e9fa0a1a2a5aeb0b2b5b6b7b9babcbec3c5cacbd6d8dbe0e1e2e3e4ebeceff0f1f4f5f6f7f8f9fbfe,55:0002030405080a0b0c0d0e121315161718191a1c1d1e1f212526#28292b2d3234353638393a3b3d40424547484b4c4d4e4f515253545758595a5b5d5e5f60626368696b6f7071727374797a7d7f85868c8d8e9092939596979a9b9ea0a1a2a3a4a5a6a8a9aaabacadaeafb0b2b4b6b8babcbfc0c1c2c3c6c7c8cacbcecfd0d5d7d8d9dadbdee0e2e7e9edeef0f1f4f6f8f9fafbfcff,56:0203040506070a0b0d1011121314151617191a1c1d202122252628292a2b2e2f30333537383a3c3d3e404142434445464748494a4b4f5051525355565a5b5d5e5f6061#636566676d6e6f70727374757778797a7d7e7f80818283848788898a8b8c8d9091929495969798999a9b9c9d9e9fa0a1a2a4a5a6a7a8a9aaabacadaeb0b1b2b3b4b5b6b8b9babbbdbebfc0c1c2c3c4c5c6c7c8c9cbcccdcecfd0d1d2d3d5d6d8d9dce3e5e6e7e8e9eaeceeeff2f3f6f7f8fbfc,57:00010205070b0c0d0e0f101112131415161718191a1b1d1e202122242526272b313234353637383c3d3f414344454648494b52535455565859626365676c6e707172747578797a7d7e7f80#818788898a8d8e8f90919495969798999a9c9d9e9fa5a8aaacafb0b1b3b5b6b7b9babbbcbdbebfc0c1c4c5c6c7c8c9cacccdd0d1d3d6d7dbdcdee1e2e3e5e6e7e8e9eaebeceef0f1f2f3f5f6f7fbfcfeff,58:0103040508090a0c0e0f101213141617181a1b1c1d1f222325262728292b2c2d2e2f31323334363738393a3b3c3d3e3f4041424345464748494a4b4e4f505253555657595a5b5c5d5f6061626364666768696a6d6e6f707172737475767778797a7b7c7d7f82848687888a8b8c#8d8e8f909194959697989b9c9da0a1a2a3a4a5a6a7aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbdbebfc0c2c3c4c6c7c8c9cacbcccdcecfd0d2d3d4d6d7d8d9dadbdcdddedfe0e1e2e3e5e6e7e8e9eaedeff1f2f4f5f7f8fafbfcfdfeff,59:000103050608090a0b0c0e1011121317181b1d1e2021222326282c30323335363b3d3e3f404345464a4c4d505253595b5c5d5e5f616364666768696a6b6c6d6e6f70717275777a7b7c7e7f8085898b8c8e8f90919495989a9b9c9d9fa0a1a2a6#a7acadb0b1b3b4b5b6b7b8babcbdbfc0c1c2c3c4c5c7c8c9cccdcecfd5d6d9dbdedfe0e1e2e4e6e7e9eaebedeeeff0f1f2f3f4f5f6f7f8fafcfdfe,5a:00020a0b0d0e0f101214151617191a1b1d1e2122242627282a2b2c2d2e2f3033353738393a3b3d3e3f414243444547484b4c4d4e4f5051525354565758595b5c5d5e5f60616364656668696b6c6d6e6f7071727378797b7c7d7e808182838485868788898a8b8c8d8e8f9091939495969798999c9d9e9fa0a1a2a3a4a5a6a7a8a9abac#adaeafb0b1b4b6b7b9babbbcbdbfc0c3c4c5c6c7c8cacbcdcecfd0d1d3d5d7d9dadbdddedfe2e4e5e7e8eaecedeeeff0f2f3f4f5f6f7f8f9fafbfcfdfeff,5b:0001020304050607080a0b0c0d0e0f10111213141518191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303133353638393a3b3c3d3e3f4142434445464748494a4b4c4d4e4f52565e606167686b6d6e6f7274767778797b7c7e7f82868a8d8e90919294969fa7a8a9acadaeafb1b2b7babbbcc0c1c3c8c9cacbcdcecf#d1d4d5d6d7d8d9dadbdce0e2e3e6e7e9eaebecedeff1f2f3f4f5f6f7fdfe,5c:0002030507080b0c0d0e10121317191b1e1f2021232628292a2b2d2e2f303233353637434446474c4d5253545657585a5b5c5d5f62646768696a6b6c6d70727374757677787b7c7d7e808384858687898a8b8e8f9293959d9e9fa0a1a4a5a6a7a8aaaeafb0b2b4b6b9babbbcbec0c2c3c5c6c7c8c9cacccdcecfd0d1d3d4d5d6d7d8dadbdcdddedfe0e2e3e7e9ebeceeeff1f2f3f4f5f6f7f8f9fafcfdfeff,5d:00#01040508090a0b0c0d0f10111213151718191a1c1d1f2021222325282a2b2c2f3031323335363738393a3b3c3f4041424344454648494d4e4f5051525354555657595a5c5e5f6061626364656667686a6d6e7071727375767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f9091929394959697989a9b9c9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b8b9babbbcbdbebfc0c1c2c3c4c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d7d8d9dadcdfe0e3e4eaeced#f0f5f6f8f9fafbfcff,5e:000407090a0b0d0e1213171e1f20212223242528292a2b2c2f303233343536393a3e3f404143464748494a4b4d4e4f50515253565758595a5c5d5f60636465666768696a6b6c6d6e6f70717577797e8182838588898c8d8e92989b9da1a2a3a4a8a9aaabacaeafb0b1b2b4babbbcbdbfc0c1c2c3c4c5c6c7c8cbcccdcecfd0d4d5d7d8d9dadcdddedfe0e1e2e3e4e5e6e7e9ebecedeeeff0f1f2f3f5f8f9fbfcfd,5f:050607090c0d0e10121416191a1c1d1e21222324#282b2c2e30323334353637383b3d3e3f4142434445464748494a4b4c4d4e4f5154595a5b5c5e5f60636567686b6e6f72747576787a7d7e7f83868d8e8f919394969a9b9d9e9fa0a2a3a4a5a6a7a9abacafb0b1b2b3b4b6b8b9babbbebfc0c1c2c7c8cacbced3d4d5dadbdcdedfe2e3e5e6e8e9eceff0f2f3f4f6f7f9fafc,60:0708090b0c10111317181a1e1f2223242c2d2e3031323334363738393a3d3e404445464748494a4c4e4f5153545657585b5c5e5f606165666e71727475777e80#8182858687888a8b8e8f909193959798999c9ea1a2a4a5a7a9aaaeb0b3b5b6b7b9babdbebfc0c1c2c3c4c7c8c9cccdcecfd0d2d3d4d6d7d9dbdee1e2e3e4e5eaf1f2f5f7f8fbfcfdfeff,61:02030405070a0b0c1011121314161718191b1c1d1e21222528292a2c2d2e2f303132333435363738393a3b3c3d3e4041424344454647494b4d4f50525354565758595a5b5c5e5f606163646566696a6b6c6d6e6f717273747678797a7b7c7d7e7f808182838485868788898a8c8d8f9091929395#969798999a9b9c9e9fa0a1a2a3a4a5a6aaabadaeafb0b1b2b3b4b5b6b8b9babbbcbdbfc0c1c3c4c5c6c7c9cccdcecfd0d3d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e7e8e9eaebecedeeeff0f1f2f3f4f6f7f8f9fafbfcfdfe,62:00010203040507091314191c1d1e2023262728292b2d2f303132353638393a3b3c424445464a4f50555657595a5c5d5e5f6061626465687172747577787a7b7d818283858687888b8c8d8e8f9094999c9d9ea3a6a7a9aaadaeafb0b2b3b4b6b7b8babec0c1#c3cbcfd1d5dddee0e1e4eaebf0f2f5f8f9fafb,63:00030405060a0b0c0d0f10121314151718191c2627292c2d2e30313334353637383b3c3e3f40414447484a51525354565758595a5b5c5d60646566686a6b6c6f707273747578797c7d7e7f81838485868b8d9193949597999a9b9c9d9e9fa1a4a6abafb1b2b5b6b9bbbdbfc0c1c2c3c5c7c8cacbccd1d3d4d5d7d8d9dadbdcdddfe2e4e5e6e7e8ebeceeeff0f1f3f5f7f9fafbfcfe,64:0304060708090a0d0e111215161718191a1d1f222324#252728292b2e2f3031323335363738393b3c3e404243494b4c4d4e4f505153555657595a5b5c5d5f60616263646566686a6b6c6e6f70717273747576777b7c7d7e7f8081838688898a8b8c8d8e8f90939497989a9b9c9d9fa0a1a2a3a5a6a7a8aaabafb1b2b3b4b6b9bbbdbebfc1c3c4c6c7c8c9cacbcccfd1d3d4d5d6d9dadbdcdddfe0e1e3e5e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,65:01020304050607080a0b0c0d0e0f10111314151617191a1b1c1d1e1f2021#222324262728292a2c2d30313233373a3c3d404142434446474a4b4d4e5052535457585a5c5f606164656768696a6d6e6f7173757678797a7b7c7d7e7f8081828384858688898a8d8e8f92949596989a9d9ea0a2a3a6a8aaacaeb1b2b3b4b5b6b7b8babbbebfc0c2c7c8c9cacdd0d1d3d4d5d8d9dadbdcdddedfe1e3e4eaebf2f3f4f5f8f9fbfcfdfeff,66:0104050708090b0d1011121617181a1b1c1e2122232426292a2b2c2e3032333738393a3b3d3f40424445464748494a4d4e505158#595b5c5d5e6062636567696a6b6c6d7172737578797b7c7d7f808183858688898a8b8d8e8f909293949598999a9b9c9e9fa0a1a2a3a4a5a6a9aaabacadafb0b1b2b3b5b6b7b8babbbcbdbfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8dadedfe0e1e2e3e4e5e7e8eaebecedeeeff1f5f6f8fafbfd,67:010203040506070c0e0f1112131618191a1c1e20212223242527292e303233363738393b3c3e3f414445474a4b4d5254555758595a5b5d62636466676b6c6e717476#78797a7b7d8082838586888a8c8d8e8f9192939496999b9fa0a1a4a6a9acaeb1b2b4b9babbbcbdbebfc0c2c5c6c7c8c9cacbcccdced5d6d7dbdfe1e3e4e6e7e8eaebedeef2f5f6f7f8f9fafbfcfe,68:01020304060d1012141518191a1b1c1e1f20222324252627282b2c2d2e2f30313435363a3b3f474b4d4f52565758595a5b5c5d5e5f6a6c6d6e6f707172737578797a7b7c7d7e7f8082848788898a8b8c8d8e90919294959698999a9b9c9d9e9fa0a1a3a4a5a9aaabacaeb1b2b4b6b7b8#b9babbbcbdbebfc1c3c4c5c6c7c8cacccecfd0d1d3d4d6d7d9dbdcdddedfe1e2e4e5e6e7e8e9eaebecedeff2f3f4f6f7f8fbfdfeff,69:00020304060708090a0c0f11131415161718191a1b1c1d1e21222325262728292a2b2c2e2f313233353637383a3b3c3e4041434445464748494a4b4c4d4e4f50515253555658595b5c5f616264656768696a6c6d6f7072737475767a7b7d7e7f8183858a8b8c8e8f909192939697999a9d9e9fa0a1a2a3a4a5a6a9aaacaeafb0b2b3b5b6b8b9babcbd#bebfc0c2c3c4c5c6c7c8c9cbcdcfd1d2d3d5d6d7d8d9dadcdddee1e2e3e4e5e6e7e8e9eaebeceeeff0f1f3f4f5f6f7f8f9fafbfcfe,6a:000102030405060708090b0c0d0e0f10111213141516191a1b1c1d1e20222324252627292b2c2d2e30323334363738393a3b3c3f40414243454648494a4b4c4d4e4f515253545556575a5c5d5e5f60626364666768696a6b6c6d6e6f70727374757677787a7b7d7e7f81828385868788898a8b8c8d8f929394959698999a9b9c9d9e9fa1a2a3a4a5a6#a7a8aaadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,6b:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f252628292a2b2c2d2e2f303133343536383b3c3d3f4041424445484a4b4d4e4f5051525354555657585a5b5c5d5e5f606168696b6c6d6e6f7071727374757677787a7d7e7f808588#8c8e8f909194959798999c9d9e9fa0a2a3a4a5a6a7a8a9abacadaeafb0b1b2b6b8b9babbbcbdbec0c3c4c6c7c8c9caccced0d1d8dadcdddedfe0e2e3e4e5e6e7e8e9ecedeef0f1f2f4f6f7f8fafbfcfeff,6c:000102030408090a0b0c0e12171c1d1e2023252b2c2d31333637393a3b3c3e3f434445484b4c4d4e4f5152535658595a62636566676b6c6d6e6f71737577787a7b7c7f8084878a8b8d8e9192959697989a9c9d9ea0a2a8acafb0b4b5b6b7bac0c1c2c3c6c7c8cbcdcecfd1d2d8#d9dadcdddfe4e6e7e9ecedf2f4f9ff,6d:000203050608090a0d0f101113141516181c1d1f20212223242628292c2d2f30343637383a3f404244494c50555657585b5d5f6162646567686b6c6d707172737576797a7b7d7e7f8081838486878a8b8d8f9092969798999a9ca2a5acadb0b1b3b4b6b7b9babbbcbdbec1c2c3c8c9cacdcecfd0d2d3d4d5d7dadbdcdfe2e3e5e7e8e9eaedeff0f2f4f5f6f8fafdfeff,6e:0001020304060708090b0f12131518191b1c1e1f222627282a2c2e30313335#3637393b3c3d3e3f40414245464748494a4b4c4f5051525557595a5c5d5e606162636465666768696a6c6d6f707172737475767778797a7b7c7d8081828487888a8b8c8d8e91929394959697999a9b9d9ea0a1a3a4a6a8a9abacadaeb0b3b5b8b9bcbebfc0c3c4c5c6c8c9cacccdced0d2d6d8d9dbdcdde3e7eaebecedeeeff0f1f2f3f5f6f7f8fafbfcfdfeff,6f:000103040507080a0b0c0d0e101112161718191a1b1c1d1e1f212223252627282c2e303234353738393a3b3c3d3f404142#43444548494a4c4e4f5051525354555657595a5b5d5f60616364656768696a6b6c6f707173757677797b7d7e7f808182838586878a8b8f909192939495969798999a9b9d9e9fa0a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b7b8babbbcbdbebfc1c3c4c5c6c7c8cacbcccdcecfd0d3d4d5d6d7d8d9dadbdcdddfe2e3e4e5e6e7e8e9eaebecedf0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,70:000102030405060708090a0b0c0d0e0f1012131415161718191c1d1e1f2021222425262728292a#2b2c2d2e2f30313233343637383a3b3c3d3e3f404142434445464748494a4b4d4e505152535455565758595a5b5c5d5f606162636465666768696a6e7172737477797a7b7d818283848687888b8c8d8f90919397989a9b9e9fa0a1a2a3a4a5a6a7a8a9aab0b2b4b5b6babebfc4c5c6c7c9cbcccdcecfd0d1d2d3d4d5d6d7dadcdddee0e1e2e3e5eaeef0f1f2f3f4f5f6f8fafbfcfeff,71:0001020304050607080b0c0d0e0f111214171b1c1d1e1f2021222324252728292a2b2c2d2e323334#353738393a3b3c3d3e3f4041424344464748494b4d4f505152535455565758595a5b5d5f6061626365696a6b6c6d6f707174757677797b7c7e7f8081828385868788898b8c8d8e909192939596979a9b9c9d9ea1a2a3a4a5a6a7a9aaabadaeafb0b1b2b4b6b7b8babbbcbdbebfc0c1c2c4c5c6c7c8c9cacbcccdcfd0d1d2d3d6d7d8d9dadbdcdddedfe1e2e3e4e6e8e9eaebecedeff0f1f2f3f4f5f6f7f8fafbfcfdfeff,72:0001020304050708090a0b0c0d0e0f101112131415161718191a#1b1c1e1f2021222324252627292b2d2e2f3233343a3c3e40414243444546494a4b4e4f505153545557585a5c5e60636465686a6b6c6d707173747677787b7c7d828385868788898c8e9091939495969798999a9b9c9d9ea0a1a2a3a4a5a6a7a8a9aaabaeb1b2b3b5babbbcbdbebfc0c5c6c7c9cacbcccfd1d3d4d5d6d8dadb#95$,30:000102,00b702:c9c7,00a830:0305,2014ff5e20:162618191c1d,30:141508090a0b0c0d0e0f16171011,00:b1d7f7,22:362728110f2a2908371aa52520,231222:992b2e614c483d1d606e6f64651e3534,26:4240,00b020:3233,2103ff0400a4ff:e0e1,203000a7211626:0605,25:cbcfcec7c6a1a0b3b2,203b21:92909193,30:13#95$,21:70717273747576777879#4$,24:88898a8b8c8d8e8f909192939495969798999a9b7475767778797a7b7c7d7e7f808182838485868760616263646566676869##,32:20212223242526272829##,21:606162636465666768696a6b#97$,ff:010203e505060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5de3#95$,30:4142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293#106$a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6#103$,03:9192939495969798999a9b9c9d9e9fa0a1a3a4a5a6a7a8a9#6$b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c3c4c5c6c7c8c9#5$,fe:3536393a3f403d3e41424344##3b3c373831#3334#104$,04:10111213141501161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f#13$30313233343551363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f#11$,02:cacbd9,20:13152535,21:050996979899,22:151f23526667bf,25:505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727381828384858687#88898a8b8c8d8e8f939495bcbde2e3e4e5,2609229530:121d1e#9$,010100e101ce00e0011300e9011b00e8012b00ed01d000ec014d00f301d200f2016b00fa01d400f901:d6d8dadc,00:fcea,0251e7c701:4448,e7c802:61#2$,31:05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829#19$,30:212223242526272829,32a333:8e8f9c9d9ea1c4ced1d2d5,fe30ff:e2e4#,212132:31#,20:10#1$,30:fc9b9cfdfe069d9e,fe:494a4b4c4d4e4f50515254555657595a5b5c5d5e5f6061#626364656668696a6b,e7:e7e8e9eaebecedeeeff0f1f2f3,30:07#11$,25:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b#13$,72:dcdddfe2e3e4e5e6e7eaebf5f6f9fdfeff,73:00020405060708090b0c0d0f1011121418191a1f2023242627282d2f30323335363a3b3c3d404142434445464748#494a4b4c4e4f515354555658595a5b5c5d5e5f6162636465666768696a6b6e7071#92$72737475767778797a7b7c7d7f808182838586888a8c8d8f90929394959798999a9c9d9ea0a1a3a4a5a6a7a8aaacadb1b4b5b6b8b9bcbdbebfc1c3c4c5c6c7#cbccced2d3d4d5d6d7d8dadbdcdddfe1e2e3e4e6e8eaebeceeeff0f1f3f4f5f6f7#92$f8f9fafbfcfdfeff,74:0001020407080b0c0d0e1112131415161718191c1d1e1f2021232427292b2d2f31323738393a3b3d3e3f4042434445464748494a4b4c4d#4e4f505152535456585d606162636465666768696a6b6c6e6f717273747578797a#92$7b7c7d7f8284858688898a8c8d8f9192939495969798999a9b9d9fa0a1a2a3a4a5a6aaabacadaeafb0b1b2b3b4b5b6b7b8b9bbbcbdbebfc0c1c2c3c4c5c6c7#c8c9cacbcccdcecfd0d1d3d4d5d6d7d8d9dadbdddfe1e5e7e8e9eaebecedf0f1f2#92$f3f5f8f9fafbfcfdfe,75:0001020305060708090a0b0c0e1012141516171b1d1e202122232426272a2e3436393c3d3f414243444647494a4d5051525355565758#5d5e5f60616263646768696b6c6d6e6f7071737576777a7b7c7d7e808182848587#92$88898a8c8d8e909395989b9c9ea2a6a7a8a9aaadb6b7babbbfc0c1c6cbcccecfd0d1d3d7d9dadcdddfe0e1e5e9ecedeeeff2f3f5f6f7f8fafbfdfe,76:02040607#08090b0d0e0f11121314161a1c1d1e212327282c2e2f31323637393a3b3d414244#92$45464748494a4b4e4f50515253555758595a5b5d5f6061626465666768696a6c6d6e7071727374757677797a7c7f80818385898a8c8d8f9092949597989a9b#9c9d9e9fa0a1a2a3a5a6a7a8a9aaabacadafb0b3b5b6b7b8b9babbbcbdbec0c1c3,554a963f57c3632854ce550954c076:914c,853c77ee827e788d72319698978d6c285b894ffa630966975cb880fa684880ae660276ce51f9655671ac7ff1888450b2596561ca6fb382ad634c625253ed54277b06516b75a45df462d48dcb9776628a8019575d97387f627238767d67cf767e64464f708d2562dc7a17659173ed642c6273822c9881677f724862:6ecc,4f3474e3534a529e7eca90a65e2e6886699c81807ed168d278c5868c9551508d8c2482de80de53058912526576:c4c7c9cbccd3d5d9dadcdddee0e1e2e3e4e6e7e8e9eaebecedf0f3f5f6f7fafbfdff,77:00020305060a0c0e0f1011121314151617181b1c1d1e21232425272a2b#2c2e3031323334393b3d3e3f4244454648494a4b4c4d4e4f52535455565758595c,858496f94fdd582199715b9d62:b1a5,66b48c799c8d7206676f789160b253:5117,8f8880cc8d1d94a1500d72c8590760eb711988ab595482ef672c7b285d297ef7752d6cf58e668ff8903c9f3b6bd491197b145f7c78a784d6853d6b:d5d9d6,5e:0187,75f995ed655d5f:0ac5,8f9f58c181c2907f965b97ad8fb97f168d2c62414fbf53:d85e,8f:a8a9ab,904d68075f6a819888689cd6618b522b762a5f6c658c6fd26ee85bbe644851:75b0,67c44e1979c9997c70b377:5d5e5f606467696a6d6e6f7071727374757677787a7b7c818283868788898a8b8f90939495969798999a9b9c9d9ea1a3a4a6a8abadaeafb1b2b4b6b7b8b9ba#bcbec0c1c2c3c4c5c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d8d9dadddedfe0e1e4,75c55e7673bb83e064ad62e894b56ce2535a52c3640f94c27b944f2f5e1b823681:168a,6e246cca9a736355535c54fa886557e04e0d5e036b657c3f90e8601664e6731c88c16750624d8d22776c8e2991c75f6983dc8521991053c286956b8b60:ede8,707f82:cd31,4ed36ca785cf64cd7cd969fd66f9834953957b564fa7518c6d4b5c428e6d63d253c983:2c36,67e578b4643d5bdf5c945dee8be762c667f48c7a640063ba8749998b8c177f2094f24ea7961098a4660c731677:e6e8eaeff0f1f2f4f5f7f9fafbfc,78:0304050607080a0b0e0f101315191b1e20212224282a2b2e2f31323335363d3f414243444648494a4b4d4f51535458595a#5b5c5e5f606162636465666768696f7071727374757678797a7b7d7e7f80818283,573a5c1d5e38957f507f80a05382655e7545553150218d856284949e671d56326f6e5de2543570928f66626f64a463a35f7b6f8890f481e38fb05c1866685ff16c8996488d81886c649179f057ce6a59621054484e587a0b60e96f848bda627f901e9a8b79e4540375f4630153196c608fdf5f1b9a70803b9f7f4f885c3a8d647fc565a570bd51:45b2,866b5d075ba062bd916c75748e0c7a2061017b794ec77ef877854e1181ed521d51fa6a7153a88e87950496cf6ec19664695a78:848586888a8b8f9092949596999d9ea0a2a4a6a8a9aaabacadaeafb5b6b7b8babbbcbdbfc0c2c3c4c6c7c8cccdcecfd1d2d3d6d7d8dadbdcdddedfe0e1e2e3#e4e5e6e7e9eaebedeeeff0f1f3f5f6f8f9fbfcfdfeff,79:00020304060708090a0b0c,784050a877d7641089e6590463e35ddd7a7f693d4f20823955984e3275ae7a975e:628a,95ef521b5439708a6376952457826625693f918755076df37eaf882262337ef075b5832878c196cc8f9e614874f78bcd6b64523a8d506b21806a847156f153064e:ce1b,51d17c97918b7c074fc38e7f7be17a9c64675d1450ac810676017cb96dec7fe067515b:58f8,78cb64:ae13,63:aa2b,9519642d8fbe7b5476296253592754466b7950a362345e266b864ee38d37888b5f85902e79:0d0e0f1011121415161718191a1b1c1d1f2021222325262728292a2b2c2d2e2f3031323335363738393d3f42434445474a4b4c4d4e4f505152545558596163#6466696a6b6c6e70717273747576797b7c7d7e7f8283868788898b8c8d8e909192,6020803d62c54e39535590f863b880c665e66c2e4f4660ee6de18bde5f3986cb5f536321515a83616863520063638e4850125c9b79775bfc52307a3b60bc905376d75f:b797,76848e6c706f767b7b4977aa51f3909358244f4e6ef48fea654c7b1b72c46da47fdf5ae162b55e95573084827b2c5e1d5f1f90127f1498a063826ec7789870b95178975b57ab75354f4375385e9760e659606dc06bbf788953fc96d551cb52016389540a94938c038dcc7239789f87768fed8c0d53e079:939495969798999b9c9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b6b7b8bcbfc2c4c5c7c8cacccecfd0d3d4d6d7d9dadbdcdddee0e1e2e5e8ea#eceef1f2f3f4f5f6f7f9fafcfeff,7a:0104050708090a0c0f10111213151618191b1c,4e0176ef53ee948998769f0e952d5b9a8ba24e:221c,51ac846361c252a8680b4f97606b51bb6d1e515c6296659796618c46901775d890fd77636bd272:8aec,8bfb583577798d4c675c9540809a5ea66e2159927aef77ed953b6bb565ad7f0e58065151961f5bf958a954288e726566987f56e4949d76fe9041638754c659:1a3a,579b8eb267358dfa8235524160f0581586fe5ce89e454fc4989d8bb95a2560765384627c904f9102997f6069800c513f80335c1499756d314e8c7a:1d1f21222425262728292a2b2c2d2e2f303132343536383a3e4041424344454748494a4b4c4d4e4f50525354555658595a5b5c5d5e5f606162636465666768#696a6b6c6d6e6f717273757b7c7d7e828587898a8b8c8e8f909394999a9b9ea1a2,8d3053d17f5a7b4f4f104e4f96006cd573d085e95e06756a7ffb6a0a77fe94927e4151e170e653cd8fd483038d2972af996d6cdb574a82b365b980aa623f963259a84eff8bbf7eba653e83f2975e556198de80a5532a8bfd542080ba5e9f6cb88d3982ac915a54296c1b52067eb7575f711a6c7e7c89594b4efd5fff61247caa4e305c0167ab87025cf0950b98ce75af70fd902251af7f1d8bbd594951e44f5b5426592b657780a45b7562:76c2,8f905e456c1f7b264f:0fd8,670d7a:a3a4a7a9aaabaeafb0b1b2b4b5b6b7b8b9babbbcbdbec0c1c2c3c4c5c6c7c8c9cacccdcecfd0d1d2d3d4d5d7d8dadbdcdde1e2e4e7e8e9eaebeceef0f1f2f3#f4f5f6f7f8fbfcfe,7b:0001020507090c0d0e1012131617181a1c1d1f21222327292d,6d:6eaa,798f88b15f17752b629a8f854fef91dc65a781:2f51,5e9c81508d74526f89868d4b590d50854ed8961c723681798d1f5bcc8ba3964459877f1a549056:760e,8be565396982949976d66e895e72751867:46d1,7aff809d8d76611f79c665628d635188521a94a27f38809b7eb25c976e2f67607bd9768b9ad8818f7f947cd5641e95507a3f54:4ae5,6b4c640162089e3d80f3759952729769845b683c86e496:0194,94ec4e2a54047ed968398ddf801566f45e9a7fb97b:2f303234353637393b3d3f404142434446484a4d4e535557595c5e5f61636465666768696a6b6c6d6f70737476787a7c7d7f81828384868788898a8b8c8e8f#9192939698999a9b9e9fa0a3a4a5aeafb0b2b3b5b6b7b9babbbcbdbebfc0c2c3c4,57c2803f68975de5653b529f606d9f9a4f9b8eac516c5bab5f135de96c5e62f18d21517194a952fe6c9f82df72d757a267848d2d591f8f9c83c754957b8d4f306cbd5b6459d19f1353e486ca9aa88c3780a16545987e56fa96c7522e74dc52505be1630289024e5662d0602a68fa51735b9851a089c27ba199867f5060ef704c8d2f51495e7f901b747089c4572d78455f529f9f95fa8f689b3c8be17678684267dc8d:ea35,523d8f8a6eda68cd950590ed56fd679c88f98fc754c87b:c5c8c9cacbcdcecfd0d2d4d5d6d7d8dbdcdedfe0e2e3e4e7e8e9ebecedeff0f2f3f4f5f6f8f9fafbfdff,7c:0001020304050608090a0d0e101112131415171819#1a1b1c1d1e20212223242528292b2c2d2e2f3031323334353637393a3b3c3d3e42,9ab85b696d776c264ea55bb39a87916361a890af97e9542b6db55bd251fd558a7f:55f0,64bc634d65f161be608d710a6c:5749,592f676d822a58d5568e8c6a6beb90dd597d801753f76d695475559d83:77cf,683879be548c4f55540876d28c8996026cb36db88d6b89109e648d3a563f9ed175d55f8872e0606854fc4ea86a2a886160528f7054c470d886799e3f6d2a5b8f5f187ea255894faf7334543c539a501954:0e7c,4e4e5ffd745a58f6846b80e1877472d07cca6e567c:434445464748494a4b4c4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717275767778797a7e7f8081828384858687#888a8b8c8d8e8f90939496999a9ba0a1a3a6a7a8a9abacadafb0b4b5b6b7b8babb,5f27864e552c62a44e926caa623782b154d7534e733e6ed1753b521253168bdd69d05f8a60006dee574f6b2273af68538fd87f13636260a3552475ea8c6271156da35ba65e7b8352614c9ec478fa87577c27768751f060f6714c66435e4c604d8c0e707063258f895fbd606286d456de6bc160946167534960e066668d3f79fd4f1a70e96c478b:b3f2,7ed88364660f5a5a9b426d:51f7,8c416d3b4f19706b83b7621660d1970d8d27797851fb57:3efa,673a75787a3d79ef7b957c:bfc0c2c3c4c6c9cbcecfd0d1d2d3d4d8dadbdddee1e2e3e4e5e6e7e9eaebecedeef0f1f2f3f4f5f6f7f9fafcfdfeff,7d:000102030405060708090b0c0d0e0f10#1112131415161718191a1b1c1d1e1f212324252628292a2c2d2e30313233343536,808c99658ff96fc08ba59e2159ec7ee97f095409678168d88f917c4d96c653ca602575be6c7253735ac97ea7632451e0810a5df184df628051805b634f0e796d524260b86d4e5b:c4c2,8b:a1b0,65e25fcc964559937e:e7aa,560967b759394f735bb652a0835a988a8d3e753294be50477a3c4ef767b69a7e5ac16b7c76d1575a5c167b3a95f4714e517c80a9827059787f04832768c067ec78:b177,62e363617b804fed526a51cf835069db92748d:f531,89c1952e7bad4ef67d:3738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6f70717273747576#78797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798,506582305251996f6e:1085,6da75efa50f559dc5c066d466c5f7586848b686859568bb253209171964d854969127901712680f64ea490ca6d479a845a0756bc640594f077eb4fa5811a72e189d2997a7f347ede527f655991758f:7f83,53eb7a9663:eda5,768679f888579636622a52ab8282685467706377776b7aed6d017ed389e359d0621285c982a5754c501f4ecb75a58beb5c4a5dfe7b4b65a491d14eca6d25895f7d2795264ec58c288fdb9773664b79818fd170ec6d787d:999a9b9c9d9e9fa0a1a2a3a4a5a7a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9#dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa,5c3d52b283465162830e775b66769cb84eac60ca7c:beb3,7ecf4e958b66666f988897595883656c955c5f8475c997567a:dfde,51c070af7a9863ea7a767ea0739697ed4e4570784e5d915253a965:51e7,81fc8205548e5c31759a97a062d872d975bd5c459a7983ca5c40548077e94e3e6cae805a62d2636e5de851778ddd8e1e952f4ff153e560e770ac526763509e435a1f5026773753777ee26485652b628963985014723589c951b38bc07edd574783cc94a7519b541b5cfb7d:fbfcfdfeff,7e:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839#3a3c3d3e3f40424344454648494a4b4c4d4e4f505152535455565758595a5b5c5d,4fca7ae36d5a90e19a8f55805496536154af5f0063e9697751ef6168520a582a52d8574e780d770b5eb761777ce062:5b97,4ea27095800362f770e49760577782db67ef68f578d5989779d158f354b353ef6e34514b523b5ba28bfe80af554357a660735751542d7a7a60505b5463a762a053e362635bc767af54ed7a9f82e691775e9388e4593857ae630e8de880ef57577b774fa95feb5bbd6b3e53217b5072c2684677:ff36,65f751b54e8f76d45cbf7aa58475594e9b4150807e:5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f909192939495969798999a9c9d9e#aeb4bbbcd6e4ecf9,7f:0a101e37393b3c3d3e3f404143464748494a4b4c4d4e4f5253,998861276e8357646606634656f062:ec69,5ed39614578362c955878721814a8fa3556683b167658d5684dd5a6a680f62e67bee961151706f9c8c3063fd89c861d27f0670c26ee57405699472fc5eca90ce67176d6a635e52b3726280014f6c59e5916a70d96d9d52d24e5096f7956d857e78ca7d2f5121579264c2808b7c7b6cea68f1695e51b7539868a872819ece7bf172f879bb6f137406674e91cc9ca4793c83:8954,540f68174e3d538952b1783e5386522950884f:8bd0,7f:56595b5c5d5e6063646566676b6c6d6f7073757677787a7b7c7d7f8082838485868788898b8d8f9091929395969798999b9ca0a2a3a5a6a8a9aaabacadaeb1#b3b4b5b6b7babbbec0c2c3c4c6c7c8c9cbcdcfd0d1d2d3d6d7d9dadbdcdddee2e3,75e27acb7c926ca596b6529b748354e94fe9805483b28fde95705ec9601c6d9f5e18655b813894fe604b70bc7ec37cae51c968817cb1826f4e248f8691cf667e4eae8c0564a9804a50da759771ce5be58fbd6f664e86648295635ed66599521788c270c852a3730e7433679778f797164e3490bb9cde6dcb51db8d41541d62ce73b283f196f69f8494c34f367f9a51cc707596755cad988653e64ee46e9c740969b4786b998f7559521876246d4167f3516d9f99804b54997b3c7abf7f:e4e7e8eaebecedeff2f4f5f6f7f8f9fafdfeff,80:020708090a0e0f11131a1b1d1e1f2123242b2c2d2e2f303234393a3c3e404144454748494e4f505153555657#595b5c5d5e5f6061626364656667686b6c6d6e6f7072737475767778797a7b7c7d,9686578462e29647697c5a0464027bd36f0f964b82a6536298855e90708963b35364864f9c819e93788c97328d:ef42,9e7f6f5e79845f559646622e9a74541594dd4fa365c55c:6561,7f1586516c2f5f8b73876ee47eff5ce6631b5b6a6ee653754e7163a0756562a18f6e4f264ed16ca67eb68bba841d87ba7f57903b95237ba99aa188f8843d6d1b9a867edc59889ebb739b780186829a:6c82,561b541757cb4e709ea653568fc881097792999286ee6ee1851366fc61626f2b80:7e818285888a8d8e8f909192949597999ea3a6a7a8acb0b3b5b6b8b9bbc5c7c8c9cacbcfd0d1d2d3d4d5d8dfe0e2e3e6eef5f7f9fbfeff,81:000103040507080b#0c1517191b1c1d1f202122232425262728292a2b2d2e3033343537393a3b3c3d3f,8c298292832b76f26c135fd983bd732b8305951a6bdb77db94c6536f830251925e3d8c8c8d384e4873ab679a68859176970971646ca177095a9295416bcf7f8e66275bd059b95a9a95:e8f7,4eec84:0c99,6aac76df9530731b68a65b5f772f919a97617cdc8ff78c1c5f257c7379d889c56ccc871c5bc65e4268c977207ef551:954d,52c95a297f05976282d763cf778485d079d26e3a5e9959998511706d6c1162bf76bf654f60af95fd660e879f9e2394ed54:0d7d,8c2c647881:40414243444547494d4e4f525657585b5c5d5e5f6162636466686a6b6c6f727375767778818384858687898b8c8d8e90929394959697999a9e9fa0a1a2a4a5#a7a9abacadaeafb0b1b2b4b5b6b7b8b9bcbdbebfc4c5c7c8c9cbcdcecfd0d1d2d3,647986116a21819c78e864699b5462b9672b83ab58a89ed86cab6f205bde964c8c0b725f67d062c772614ea959c66bcd589366ae5e5552df6155672876ee776672677a4662ff54:ea50,94a090a35a1c7eb36c164e435976801059485357753796be56ca63208111607c95f96dd65462998151855ae980fd59ae9713502a6ce55c3c62df4f60533f817b90066eba852b62c85e7478be64b5637b5ff55a18917f9e1f5c3f634f80425b7d556e95:4a4d,6d8560a867e072de51dd5b8181:d4d5d6d7d8d9dadbdcdddedfe0e1e2e4e5e6e8e9ebeeeff0f1f2f5f6f7f8f9fafdff,82:030708090a0b0e0f111315161718191a1d2024252627292e323a3c3d3f#404142434546484a4c4d4e5051525354555657595b5c5d5e606162636465666769,62e76cde725b626d94ae7ebd81136d53519c5f04597452aa6012597366968650759f632a61e67cef8bfa54e66b279e256bb485d5545550766ca4556a8db4722c5e156015743662cd6392724c5f986e436d3e65006f5876d878d076fc7554522453db4e535e9e65c180:2ad6,629b5486522870ae888d8dd16ce1547880da57f988f48d54966a914d4f696c9b55b776c6783062a870f96f8e5f6d84ec68da787c7bf781a8670b9e4f636778b0576f7812973962:79ab,528874356bd782:6a6b6c6d71757677787b7c808183858687898c90939495969a9b9ea0a2a3a7b2b5b6babbbcbfc0c2c3c5c6c9d0d6d9dadde2e7e8e9eaecedeef0f2f3f5f6f8#fafcfdfeff,83:000a0b0d1012131618191d1e1f20212223242526292a2e3032373b3d,5564813e75b276ae533975de50fb5c418b6c7bc7504f72479a9798d86f0274e27968648777a562fc98918d2b54c180584e52576a82f9840d5e7351ed74f68bc45c4f57616cfc98875a4678349b448feb7c955256625194fa4ec68386846183e984b257d467345703666e6d668c3166dd7011671f6b3a6816621a59bb4e0351c46f0667d26c8f517668cb59476b6775665d0e81109f5065d779:4841,9a918d775c824e5e4f01542f5951780c56686c148fc45f036c:7de3,8bab639083:3e3f41424445484a4b4c4d4e5355565758595d6270717273747576797a7e7f808182838487888a8b8c8d8f909194959697999a9d9fa1a2a3a4a5a6a7acadae#afb5bbbebfc2c3c4c6c8c9cbcdced0d1d2d3d5d7d9dadbdee2e3e4e6e7e8ebeced,60706d3d7275626694:8ec5,53438fc17b7e4edf8c264e7e9ed494:b1b3,524d6f5c90636d458c3458115d4c6b:2049,67aa545b81547f8c589985375f3a62a26a47953965726084686577a74e544fa85de7979864ac7fd85ced4fcf7a8d520783044e14602f7a8394a64fb54eb279e6743452e482b964d279bd5bdd6c8197528f7b6c22503e537f6e0564ce66746c3060c598778bf75e86743c7a7779cb4e1890b174036c4256da914b6cc58d8b533a86c666f28eaf5c489a716e2083:eeeff3f4f5f6f7fafbfcfeff,84:0002050708090a10121314151617191a1b1e1f20212223292a2b2c2d2e2f30323334353637393a3b3e3f404142434445474849#4a4b4c4d4e4f505253545556585d5e5f606264656667686a6e6f70727477797b7c,53d65a369f8b8da353bb570898a76743919b6cc9516875ca62f372ac52:389d,7f3a7094763853749e4a69b7786e96c088d97fa471:36c3,518967d374e458e4651856b78ba9997662707ed560f970ed58ec4e:c1ba,5fcd97e74efb8ba45203598a7eab62544ecd65e5620e833884c98363878d71946eb65bb97ed2519763c967d480898339881551125b7a59828fb14e736c5d516589258f6f962e854a745e95:10f0,6da682e55f3164926d128428816e9cc3585e8d5b4e0953c184:7d7e7f8081838485868a8d8f90919293949596989a9b9d9e9fa0a2a3a4a5a6a7a8a9aaabacadaeb0b1b3b5b6b7bbbcbec0c2c3c5c6c7c8cbcccecfd2d4d5d7#d8d9dadbdcdee1e2e4e7e8e9eaebedeeeff1f2f3f4f5f6f7f8f9fafbfdfe,85:000102,4f1e6563685155d34e2764149a9a626b5ac2745f82726da968ee50e7838e7802674052396c997eb150bb5565715e7b5b665273ca82eb67495c715220717d886b95ea965564c58d6181b355846c5562477f2e58924f2455468d4f664c4e0a5c1a88f368a2634e7a0d70e7828d52fa97f65c1154e890b57ecd59628d4a86c782:0c0d,8d6664445c0461516d89793e8bbe78377533547b4f388eab6df15a207ec5795e6c885ba15a76751a80be614e6e1758f075:1f25,727253477ef385:030405060708090a0b0d0e0f101214151618191b1c1d1e2022232425262728292a2d2e2f303132333435363e3f404142444546474b4c4d4e4f505152535455#57585a5b5c5d5f60616263656667696a6b6c6d6e6f707173757677787c7d7f8081,770176db526980dc57235e08593172ee65bd6e7f8bd75c388671534177f362fe65f64ec098df86805b9e8bc653f277e24f7f5c4e9a7659cb5f0f793a58eb4e1667ff4e8b62ed8a93901d52bf662f55dc566c90024ed54f8d91ca99706c0f5e0260435ba489c68bd56536624b99965b:88ff,6388552e53d77626517d852c67a268b36b8a62928f9353d482126dd1758f4e668d4e5b70719f85af66:91d9,7f7287009ecd9f205c5e672f8ff06811675f620d7ad658855eb665706f3185:82838688898a8b8c8d8e909192939495969798999a9d9e9fa0a1a2a3a5a6a7a9abacadb1b2b3b4b5b6b8babbbcbdbebfc0c2c3c4c5c6c7c8cacbcccdced1d2#d4d6d7d8d9dadbdddedfe0e1e2e3e5e6e7e8eaebecedeeeff0f1f2f3f4f5f6f7f8,60555237800d6454887075295e05681362f4971c53cc723d8c016c3477617a0e542e77ac987a821c8bf47855671470c165af64955636601d79c153f84e1d6b7b80865bfa55e356db4f:3a3c,99725df3677e80386002988290015b8b8b:bcf5,641c825864de55fd82cf91654fd77d20901f7c9f50f358516eaf5bbf8bc980839178849c7b97867d96:8b8f,7ee59ad3788e5c817a57904296a7795f5b59635f7b0b84d168ad55067f2974107d2295016240584c4ed65b835979585485:f9fafcfdfe,86:0001020304060708090a0b0c0d0e0f10121314151718191a1b1c1d1e1f20212223242526282a2b2c2d2e2f3031323334353637393a3b3d3e3f40#4142434445464748494a4b4c525355565758595b5c5d5f6061636465666768696a,736d631e8e:4b0f,80ce82d462ac53f06cf0915e592a60016c70574d644a8d2a762b6ee9575b6a8075f06f6d8c:2d08,57666bef889278b363a253f970ad6c645858642a580268e0819b55107cd650188eba6dcc8d9f70eb638f6d9b6ed47ee68404684390036dd896768ba85957727985e4817e75bc8a8a68af52548e22951163d098988e44557c4f5366ff568f60d56d9552435c4959296dfb586b75:301c,606c82148146631167618fe2773a8d:f334,94c15e165385542c70c386:6d6f7072737475767778838485868788898e8f90919294969798999a9b9e9fa0a1a2a5a6abadaeb2b3b7b8b9bbbcbdbebfc1c2c3c5c8cccdd2d3d5d6d7dadc#dde0e1e2e3e5e6e7e8eaebeceff5f6f7fafbfcfdff,87:010405060b0c0e0f10111416,6c405ef7505c4ead5ead633a8247901a6850916e77b3540c94dc5f647ae5687663457b527edf75db507762955934900f51f879c37a8156fe5f9290146d825c60571f541051546e4d56e263a89893817f8715892a9000541e5c6f81c062:d658,81319e3596409a:6e7c,692d59a562d3553e631654c786d96d3c5a0374e6889c6b6a59168c4c5f2f6e7e73a9987d4e3870f75b8c7897633d665a769660cb5b9b5a494e0781556c6a738b4ea167897f515f8065fa671b5fd859845a0187:191b1d1f20242627282a2b2c2d2f303233353638393a3c3d404142434445464a4b4d4f505152545556585a5b5c5d5e5f6162666768696a6b6c6d6f71727375#7778797a7f8081848687898a8c8e8f90919294959698999a9b9c9d9ea0a1a2a3a4,5dcd5fae537197e68fdd684556f4552f60df4e3a6f4d7ef482c7840e59d44f:1f2a,5c3e7eac672a851a5473754f80c355829b4f4f4d6e2d8c135c096170536b761f6e29868a658795fb7eb9543b7a337d0a95ee55e17fc174ee631d87176da17a9d621165a1536763e16c835deb545c94a84e4c6c618bec5c4b65e0829c68a754:3e34,6b:cb66,4e9463425348821e4f:0dae,575e620a96fe6664726952:ffa1,609f8bef661471996790897f785277fd6670563b54389521727a87:a5a6a7a9aaaeb0b1b2b4b6b7b8b9bbbcbebfc1c2c3c4c5c7c8c9cccdcecfd0d4d5d6d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedeff0f1f2f3f4f5f6f7f8#fafbfcfdff,88:0001020405060708090b0c0d0e0f101112141718191a1c1d1e1f2023,7a00606f5e0c6089819d591560dc718470ef6eaa6c5072806a8488ad5e2d4e605ab3559c94e36d177cfb9699620f7ec6778e867e5323971e8f9666875ce14fa072ed4e0b53a6590f54136380952851484ed99c9c7ea454b88d248854823795f26d8e5f265acc663e966973:b02e,53bf817a99857fa15baa96:7750,7ebf76f853a2957699997bb189446e584e617fd479658be660f354cd4eab98795df76a6150cf54118c618427785d9704524a54ee56a395006d885bb56dc6665388:2425262728292a2b2c2d2e2f30313334353637383a3b3d3e3f414243464748494a4b4e4f505152535556585a5b5c5d5e5f6066676a6d6f717374757678797a#7b7c80838687898a8c8e8f90919394959798999a9b9d9e9fa0a1a3a5a6a7a8a9aa,5c0f5b5d6821809655787b11654869544e9b6b47874e978b534f631f643a90aa659c80c18c10519968b0537887f961c86c:c4fb,8c225c5185aa82af950c6b238f9b65b05f:fbc3,4fe18845661f8165732960fa51745211578b5f6290a2884c91925e78674f602759d351:44f6,80f853086c7996c4718a4f:11ee,7f9e673d55c5950879c088967ee3589f620c9700865a5618987b5f908bb884c4915753d965ed5e8f755c60647d6e5a7f7e:eaed,8f6955a75ba360ac65cb738488:acaeafb0b2b3b4b5b6b8b9babbbdbebfc0c3c4c7c8cacbcccdcfd0d1d3d6d7dadbdcdddee0e1e6e7e9eaebecedeeeff2f5f6f7fafbfdff,89:0001030405060708#090b0c0d0e0f1114151617181c1d1e1f20222324262728292c2d2e2f3132333537,9009766377297eda9774859b5b667a7496ea884052cb718f5faa65ec8be25bfb9a6f5de16b896c5b8b:adaf,900a8fc5538b62bc9e:262d,54404e2b82bd7259869c5d1688596daf96c554d14e9a8bb6710954bd960970df6df976d04e25781487125ca95ef68a00989c960e708e6cbf594463a9773c884d6f148273583071d5538c781a96c155015f6671305bb48c1a9a8c6b83592e9e2f79e76768626c4f6f75a17f8a6d0b96336c274ef075d2517b68376f3e908081705996747689:38393a3b3c3d3e3f40424345464748494a4b4c4d4e4f505152535455565758595a5b5c5d6061626364656768696a6b6c6d6e6f707172737475767778797a7c#7d7e808284858788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1,64475c2790657a918c2359da54ac8200836f898180006930564e8036723791ce51b64e5f987563964e1a53f666f3814b591c6db24e0058f9533b63d694f14f:9d0a,886398905937905779fb4eea80f075916c825b9c59e85f5d69058681501a5df24e5977e34ee5827a6291661390915c794ebf5f7981c69038808475ab4ea688d4610f6bc55fc64e4976ca6ea28b:e3ae,8c0a8bd15f027f:fccc,7ece83:356b,56e06bb797f3963459fb541f94f66deb5bc5996e5c395f15969089:a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c3cdd3d4d5d7d8d9dbdddfe0e1e2e4e7e8e9eaecedeef0f1f2f4f5f6f7f8f9fa#fbfcfdfeff,8a:01020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d,537082f16a315a749e705e947f2883b984:2425,836787478fce8d6276c85f719896786c662054df62e54f6381c375c85eb896cd8e0a86f9548f6cf36d8c6c38607f52c775285e7d4f1860a05fe75c24753190ae94c072b96cb96e389149670953:cbf3,4f5191c98bf153c85e7c8fc26de44e8e76c26986865e611a82064f:59de,903e9c7c61096e:1d14,96854e885a3196e84e0e5c7f79b95b878bed7fbd738957df828b90c15401904755bb5cea5fa161086b3272f180b28a:891e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f4041424344454647494a4b4c4d4e4f505152535455565758595a5b5c5d5e#5f606162636465666768696a6b6c6d6e6f7071727374757677787a7b7c7d7e7f80,6d745bd388d598848c6b9a6d9e336e0a51:a443,57a38881539f63f48f9556ed54585706733f6e907f188fdc82d1613f6028966266f07ea68d:8ac3,94a55cb37ca4670860a6960580184e9190e75300966851418fd08574915d665597f55b55531d78386742683d54c9707e5bb08f7d518d572854b1651266828d:5e43,810f846c906d7cdf51ff85fb67a365e96fa186a48e81566a90207682707671e58d2362e952196cfd8d3c600e589e618e66fe8d60624e55b36e23672d8f678a:81828384858687888b8c8d8e8f9091929495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3,94e195f87728680569a8548b4e4d70b88bc86458658b5b857a84503a5be877bb6be18a797c986cbe76cf65a98f975d2d5c5586386808536062187ad96e5b7efd6a1f7ae05f706f335f20638c6da867564e085e108d264ed780c07634969c62db662d627e6cbc8d7571677f695146808753ec906e629854f286f08f998005951785178fd96d5973cd659f771f7504782781fb8d1e94884fa6679575b98bca9707632f9547963584b8632377415f8172f04e896014657462ef6b63653f8a:e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8b:0001020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#24252728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,5e2775c790d18bc1829d679d652f5431871877e580a281026c414e4b7ec7804c76f4690d6b966267503c4f84574063076b628dbe53ea65e87eb85fd763:1ab7,81:f3f4,7f6e5e1c5cd95236667a79e97a1a8d28709975d46ede6cbb7a924e2d76c55fe0949f88777ec879cd80bf91cd4ef24f17821f54685dde6d328bcc7ca58f7480985e1a549276b15b99663c9aa473e0682a86db6731732a8b:f8db,90107af970db716e62c477a956314e3b845767f152a986c08d2e94f87b518b:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656768696a6b6d6e6f707172737475767778797a7b7c7d7e7f80818283848586#8788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9facb1bbc7d0ea,8c:091e,4f4f6ce8795d9a7b6293722a62fd4e1378168f6c64b08d5a7bc668695e8488c55986649e58ee72b6690e95258ffd8d5857607f008c0651c6634962d95353684c74228301914c55447740707c6d4a517954a88d4459ff6ecb6dc45b5c7d2b4ed47c7d6ed35b5081ea6e0d5b579b0368d58e2a5b977efc603b7eb590b98d70594f63cd79df8db3535265cf79568bc5963b7ec494bb7e825634918967007f6a5c0a907566285de64f5067de505a4f5c57505e:a7#3$,8c:38393a3b3c3d3e3f4042434445484a4b4d4e4f5051525354565758595b5c5d5e5f60636465666768696c6d6e6f707172747576777b7c7d7e7f808183848687#888b8d8e8f90919293959697999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad,4e:8d0c,51404e105eff53454e:15981e,9b325b6c56694e2879ba4e3f53154e47592d723b536e6c1056df80e499976bd3777e9f174e:369f,9f104e:5c6993,82885b5b556c560f4ec453:8d9da3a5ae,97658d5d53:1af5262e3e,8d5c53:6663,52:02080e2d333f404c5e615c,84af52:7d82819093,51827f544e:bbc3c9c2e8e1ebde,4f1b4ef34f:2264,4ef54f:2527092b5e67,65384f:5a5d,8c:aeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec#edeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8d:000102030405060708090a0b0c0d,4f:5f57323d76749189838f7e7baa7cac94e6e8eac5dae3dcd1dff8,50:294c,4ff350:2c0f2e2d,4ffe50:1c0c25287e4355484e6c7ba5a7a9bad6,510650:edece6ee,51:070b,4edd6c3d4f:5865ce,9fa06c467c74516e5dfd9ec999985181591452f9530d8a07531051eb591951554ea051564eb388:6ea4,4eb5811488d279805b3488037fb851:abb1bdbc,8d:0e0f101112131415161718191a1b1c205152575f6568696a6c6e6f717278797a7b7c7d7e7f808283868788898c8d8e8f90929395969798999a9b9c9d9ea0a1#a2a4a5a6a7a8a9aaabacadaeafb0b2b6b7b9bbbdc0c1c2c5c7c8c9cacdd0d2d3d4,51:c796a2a5,8b:a0a6a7aab4b5b7c2c3cbcfced2d3d4d6d8d9dcdfe0e4e8e9eef0f3f6f9fcff,8c:000204070c0f1112141516191b181d1f202125272a2b2e2f32333536,53:697a,96:1d2221312a3d3c4249545f676c7274888d97b0,90:979b9d99aca1b4b3b6ba,8d:d5d8d9dce0e1e2e5e6e7e9edeef0f1f2f4f6fcfeff,8e:00010203040607080b0d0e1011121315161718191a1b1c202124252627282b2d303233343637383b3c3e#3f4345464c4d4e4f505354555657585a5b5c5d5e5f60616263646567686a6b6e71,90:b8b0cfc5bed0c4c7d3e6e2dcd7dbebeffe,91:04221e23312f394346,520d594252:a2acadbe,54ff52:d0d6f0,53df71ee77cd5ef451:f5fc,9b2f53b65f01755a5def57:4ca9a1,58:7ebcc5d1,57:292c2a33392e2f5c3b4269856b867c7b686d7673ada48cb2cfa7b493a0d5d8dad9d2b8f4eff8e4dd,8e:73757778797a7b7d7e808283848688898a8b8c8d8e91929395969798999a9b9d9fa0a1a2a3a4a5a6a7a8a9aaadaeb0b1b3b4b5b6b7b8b9bbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4,58:0b0d,57:fded,58:001e194420656c81899a80,99a89f1961ff82:797d7f8f8aa8848e919799abb8beb0c8cae398b7aecbccc1a9b4a1aa9fc4cea4e1,830982:f7e4,83:0f07,82:dcf4d2d8,830c82:fbd3,83:111a061415,82:e0d5,83:1c515b5c08923c34319b5e2f4f47435f4017602d3a336665,8e:e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8f:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#2425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344,83:681b696c6a6d6eb078b3b4a0aa939c857cb6a97db87b989ea8babcc1,840183:e5d8,580784:180b,83:ddfdd6,84:1c381106,83:d4df,84:0f03,83:f8f9eac5c0,842683:f0e1,84:5c515a597387887a89783c4669768c8e316dc1cdd0e6bdd3cabfbae0a1b9b497e5e3,850c750d853884f085:391f3a,8f:45464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656a808c929da0a1a2a4a5a6a7aaacadaeafb2b3b4b5b7b8babbbcbfc0c3c6#c9cacbcccdcfd2d6d7dae0e1e3e7eceff1f2f4f5f6fafbfcfeff,90:07080c0e131518,85:563b,84:fffc,85:594868645e7a,77a285:43727ba4a8878f79ae9c85b9b7b0d3c1dcff,86:270529163c,5efe5f0859:3c41,803759:555a58,530f5c:22252c34,62:4c6a9fbbcadad7ee,632262f663:394b43adf6717a8eb46dac8a69aebcf2f8e0ffc4dece,645263:c6be,64:45410b1b200c26215e846d96,90:191c2324252728292a2b2c303132333437393a3d3f4043454648494a4b4c4e545556595a5c5d5e5f6061646667696a6b6c6f70717273767778797a7b7c7e81#84858687898a8c8d8e8f90929496989a9c9e9fa0a4a5a7a8a9abadb2b7bcbdbfc0,64:7ab7b899bac0d0d7e4e2,65:09252e,5f:0bd2,75195f1153:5ff1fde9e8fb,54:1216064b5253545643215759233282947771649a9b8476669dd0adc2b4d2a7a6d3d472a3d5bbbfccd9dadca9aaa4ddcfde,551b54e7552054fd551454f355:22230f11272a678fb5496d41553f503c,90:c2c3c6c8c9cbcccdd2d4d5d6d8d9dadedfe0e3e4e5e9eaeceef0f1f2f3f5f6f7f9fafbfcff,91:00010305060708090a0b0c0d0e0f1011121314151617181a1b1c#1d1f20212425262728292a2b2c2d2e30323334353637383a3b3c3d3e3f40414244,55:375675767733305c8bd283b1b988819f7ed6917bdfbdbe9499eaf7c9,561f55:d1ebecd4e6ddc4efe5f2f3cccde8f5e4,8f9456:1e080c012423,55fe56:00272d5839572c4d62595c4c548664716b7b7c8593afd4d7dde1f5ebf9ff,57:040a091c,5e:0f191411313b3c,91:454748515354555658595b5c5f606667686b6d737a7b7c808182838486888a8e8f939495969798999c9d9e9fa0a1a4a5a6a7a8a9abacb0b1b2b3b6b7b8b9bb#bcbdbebfc0c1c2c3c4c5c6c8cbd0d2d3d4d5d6d7d8d9dadbdddedfe0e1e2e3e4e5,5e:3744545b5e61,5c:8c7a8d9096889899919a9cb5a2bdacabb1a3c1b7c4d2e4cbe5,5d:020327262e241e061b583e343d6c5b6f5d6b4b4a697482999d,8c735d:b7c5,5f:73778287898c95999ca8adb5bc,88625f6172:adb0b4b7b8c3c1cecdd2e8efe9f2f4f7,730172f3730372fa91:e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,92:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324#25262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,72fb73:1713210a1e1d152239252c3831504d57606c6f7e,821b592598e759:2402,99:636768696a6b6c74777d8084878a8d9091939495,5e:80918b96a5a0b9b5beb3,8d535e:d2d1dbe8ea,81ba5f:c4c9d6cf,60035fee60045f:e1e4fe,60:0506,5f:eaedf8,60:1935261b0f0d292b0a3f2178797b7a42,92:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727375767778797a7b7c7d7e7f808182838485#868788898a8b8c8d8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7,60:6a7d969aad9d83928c9becbbb1ddd8c6dab4,61:20261523,60f461:000e2b4a75ac94a7b7d4f5,5fdd96b395:e9ebf1f3f5f6fcfe,96:030406080a0b0c0d0f12151617191a,4e2c723f62156c:35545c4aa38590948c6869747686a9d0d4adf7f8f1d7b2e0d6faebeeb1d3effe,92:a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8#e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,93:00010203040506070809,6d:39270c43480704190e2b4d2e351a4f525433916f9ea05e93945c607c63,6e1a6d:c7c5de,6e0e6d:bfe0,6e116d:e6ddd9,6e166dab6e0c6dae6e:2b6e4e6bb25f865354322544dfb198e0,6f2d6e:e2a5a7bdbbb7d7b4cf8fc29f,6f:6246472415,6ef96f:2f364b742a0929898d8c78727c7ad1,93:0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f40414243444546474849#4a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696b,6f:c9a7b9b6c2e1eedee0ef,70:1a231b39354f5e,5b:80849593a5b8,752f9a9e64345b:e4ee,89305bf08e478b078f:b6d3d5e5eee4e9e6f3e8,90:05040b26110d162135362d2f445152506858625b,66b990:747d8288838b,5f:50575658,5c3b54ab5c:5059,5b715c:6366,7fbc5f:2a292d,82745f3c9b3b5c6e59:81838da9aaa3,93:6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab#acadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cbcccd,59:97caab9ea4d2b2afd7be,5a:0506,59dd5a0859:e3d8f9,5a:0c09323411231340674a553c6275,80ec5a:aa9b777abeebb2d2d4b8e0e3f1d6e6d8dc,5b:091716323740,5c:151c,5b:5a6573515362,9a:7577787a7f7d808185888a90929396989b9c9d9fa0a2a3a5a7,7e:9fa1a3a5a8a9,93:cecfd0d1d2d3d4d5d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,94:000102030405060708090a0b0c0d#0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e,7e:adb0bec0c1c2c9cbccd0d4d7dbe0e1e8ebeeeff1f2,7f0d7e:f6fafbfe,7f:01020307080b0c0f111217191c1b1f212223242526272a2b2c2d2f3031323335,5e7a757f5ddb753e909573:8e91aea29fcfc2d1b7b3c0c9c8e5d9,987c740a73:e9e7debaf2,74:0f2a5b262528302e2c,94:2f303132333435363738393a3b3c3d3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6c6d6e6f#707172737475767778797a7b7c7d7e7f8081828384919698c7cfd3d4dae6fb,95:1c20,74:1b1a415c575559776d7e9c8e8081878b9ea8a990a7d2ba,97:eaebec,67:4c535e4869a5876a7398a775a89ead8b777cf0,680967d8680a67:e9b0,680c67:d9b5dab3dd,680067:c3b8e2,680e67:c1fd,68:323360614e624464831d55664167403e4a4929b58f7477936bc2,696e68fc69:1f20,68f995:27333d43484b555a606e74757778797a7b7c7d7e808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa#abacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb,692468f069:0b0157,68e369:10713960425d846b80987834cc8788ce896663799ba7bbabadd4b1c1cadf95e08dff,6a2f69ed6a:171865,69f26a:443ea0505b358e793d28587c9190a997ab,73:3752,6b:8182878492938d9a9ba1aa,8f:6b6d71727375767877797a7c7e818284878b,95:cccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7ecff,96:0713181b1e20232425262728292b2c2d2f303738393a3e41434a4e4f5152535657#58595a5c5d5e606365666b6d6e6f70717378797a7b7c7d7e7f808182838487898a,8f:8d8e8f989a,8ece62:0b171b1f222125242c,81e774:eff4ff,75:0f1113,65:34eeeff0,66:0a19,677266:031500,708566:f71d34313635,800666:5f54414f56615777848ca79dbedbdce6e9,8d:3233363b3d4045464849474d5559,89:c7cacbcccecfd0d1,72:6e9f5d666f7e7f848b8d8f92,63:0832b0,96:8c8e91929395969a9b9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb1b2b4b5b7b8babbbfc2c3c8cacbd0d1d3d4d6d7d8d9dadbdcdddedfe1e2e3e4e5e6e7eb#ecedeef0f1f2f4f5f8fafbfcfdff,97:0203050a0b0c10111214151718191a1b1d1f20,64:3fd8,80046b:eaf3fdf5f9,6c:0507060d1518191a2129242a32,65:35556b,72:4d525630,8662521680:9f9c93bc,670a80:bdb1abadb4b7e7e8e9eadbc2c4d9cdd7,671080:ddebf1f4ed,81:0d0e,80:f2fc,671581128c5a81:361e2c1832484c5374595a7160697c7d6d67,584d5ab581:888291,6ed581:a3aacc,672681:cabb,97:2122232425262728292b2c2e2f3133343536373a3b3c3d3f404142434445464748494a4b4c4d4e4f5051545557585a5c5d5f63646667686a6b6c6d6e6f7071#72757778797a7b7d7e7f8081828384868788898a8c8e8f9093959697999a9b9c9d,81:c1a6,6b:243739434659,98:d1d2d3d5d9da,6bb35f406bc289f365909f5165:93bcc6c4c3ccced2d6,70:809c969dbbc0b7abb1e8ca,71:1013162f31735c6845724a787a98b3b5a8a0e0d4e7f9,72:1d28,706c71:1866b9,62:3e3d434849,79:3b4046495b5c535a6257606f677a858a9aa7b3,5f:d1d0,97:9e9fa1a2a4a5a6a7a8a9aaacaeb0b1b3b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3#e4e5e8eeeff0f1f2f4f7f8f9fafbfcfdfeff,98:000102030405060708090a0b0c0d0e,60:3c5d5a67415963ab,61:060d5da99dcbd1,620680:807f,6c:93f6,6dfc77:f6f8,78:0009171811,65ab78:2d1c1d393a3b1f3c252c23294e6d56572650474c6a9b939a879ca1a3b2b9a5d4d9c9ecf2,790578f479:13241e34,9f9b9e:f9fbfc,76f177:040d,76f977:07081a22192d263538505147435a68,98:0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d#4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e,77:62657f8d7d808c919fa0b0b5bd,75:3a404e4b485b727983,7f:58615f,8a487f:68747179817e,76:cde5,883294:8586878b8a8c8d8f909497959a9b9ca3a4abaaadacafb0b2b4b6b7b8b9babcbdbfc4c8c9cacbcccdced0d1d2d5d6d7d9d8dbdedfe0e2e4e5e7e8ea,98:6f70717273748b8e929599a3a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcfd0d4d6d7dbdcdde0e1e2e3e4#e5e6e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,99:0001020304050607,94:e9ebeeeff3f4f5f7f9fcfdff,95:03020607090a0d0e0f1213141516181b1d1e1f222a2b292c3132343637383c3e3f4235444546494c4e4f525354565758595b5e5f5d61626465666768696a6b6c6f7172733a,77:e7ec,96c979:d5ede3eb,7a065d477a:03021e14,99:08090a0b0c0e0f1112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2f303132333435363738393a3b3c3d3e3f40414243444546474849#4a4b4c4d4e4f50515253565758595a5b5c5d5e5f60616264667378797b7e828389,7a:393751,9ecf99a57a7076:888e9399a4,74:dee0,752c9e:202228292a2b2c3231363837393a3e414244464748494b4c4e5155575a5b5c5e63666768696a6b6c716d73,75:929496a09daca3b3b4b8c4b1b0c3c2d6cde3e8e6e4ebe7,760375:f1fcff,76:1000050c170a25181519,99:8c8e9a9b9c9d9e9fa0a1a2a3a4a6a7a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8#d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9,76:1b3c2220402d303f35433e334d5e545c566b6f,7fca7a:e6787980868895a6a0aca8adb3,88:6469727d7f82a2c6b7bcc9e2cee3e5f1,891a88:fce8fef0,89:2119131b0a342b3641667b,758b80e576:b2b4,77dc80:1214161c20222526272928310b3543464d526971,898398:788083,99:fafbfcfdfeff,9a:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738#393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859,98:898c8d8f949a9b9e9fa1a2a5a6,86:4d546c6e7f7a7c7ba88d8bac9da7a3aa93a9b6c4b5ceb0bab1afc9cfb4e9f1f2edf3d0,871386:def4dfd8d1,87:0307,86f887:080a0d09233b1e252e1a3e48343129373f82227d7e7b60704c6e8b53637c64596593afa8d2,9a:5a5b5c5d5e5f606162636465666768696a6b7283898d8e949599a6a9aaabacadaeafb2b3b4b5b9bbbdbebfc3c4c6c7c8c9cacdcecfd0d2d4d5d6d7d9dadbdc#dddee0e2e3e4e5e7e8e9eaeceef0f1f2f3f4f5f6f7f8fafcfdfeff,9b:000102040506,87:c68885ad9783abe5acb5b3cbd3bdd1c0cadbeae0ee,88:1613,87fe88:0a1b21393c,7f:36424445,82107a:fafd,7b:080304150a2b0f47382a192e31202524333e1e585a45754c5d606e7b62727190a6a7b8ac9da885aa9ca2abb4d1c1ccdddae5e6ea,7c0c7b:fefc,7c:0f160b,9b:07090a0b0c0d0e1011121415161718191a1b1c1d1e2021222425262728292a2b2c2d2e3031333435363738393a3d3e3f40464a4b4c4e50525355565758595a#5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b,7c:1f2a26384140,81fe82:010204,81ec884482:2122232d2f282b383b33343e44494b4f5a5f68,88:7e8588d8df,895e7f:9d9fa7afb0b2,7c7c65497c:919d9c9ea2b2bcbdc1c7cccdc8c5d7e8,826e66a87f:bfced5e5e1e6e9eef3,7cf87d:77a6ae,7e:479b,9e:b8b4,8d:73849491b1676d,8c:4749,91:4a504e4f64,9b:7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba#bbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb,91:626170696f7d7e7274798c85908d91a2a3aaadaeafb5b4ba,8c559e7e8d:b8eb,8e:055969,8d:b5bfbcbac4d6d7dadececfdbc6ecf7f8e3f9fbe4,8e098dfd8e:141d1f2c2e232f3a4039353d3149414251524a70767c6f74858f94909c9e,8c:78828a859894,659b89:d6dedadc,9b:dcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9c:000102030405060708090a0b0c0d0e0f101112131415161718191a#1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b,89:e5ebef,8a3e8b26975396:e9f3ef,97:0601080f0e2a2d303e,9f:808385868788898a8c,9efe9f:0b0d,96:b9bcbdced2,77bf96e092:8eaec8,93:3e6aca8f,94:3e6b,9c:7f8285868788,7a239c:8b8e90919294959a9b9e9fa0a1a2a3a5a6a7a8a9abadaeb0b1b2b3b4b5b6b7babbbcbdc4c5c6c7cacb3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a#7b7d7e808384898a8c8f93969798999daaacafb9bebfc0c1c2c8c9d1d2dadbe0e1cccdcecfd0d3d4d5d7d8d9dcdddfe2,97:7c85919294afaba3b2b4,9a:b1b0b7,9e589a:b6babcc1c0c5c2cbccd1,9b:45434749484d51,98e899:0d2e5554,9a:dfe1e6efebfbedf9,9b:080f131f23,9e:bdbe,7e3b9e:8287888b92,93d69e:9d9fdbdcdde0dfe2e9e7e5eaef,9f:222c2f39373d3e44,9c:e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9d:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021#22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142#92$434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081#82838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2#92$a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1#e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9e:000102#92$030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e24272e30343b3c404d5052535456595d5f606162656e6f727475767778797a7b7c7d80#8183848586898a8c8d8e8f90919495969798999a9b9c9ea0a1a2a3a4a5a7a8a9aa#92$abacadaeafb0b1b2b3b5b6b7b9babcbfc0c1c2c3c5c6c7c8cacbccd0d2d3d5d6d7d9dadee1e3e4e6e8ebecedeef0f1f2f3f4f5f6f7f8fafdff,9f:000102030405#060708090a0c0f1112141516181a1b1c1d1e1f21232425262728292a2b2d2e3031#92$3233343536383a3c3f4041424345464748494a4b4c4d4e4f52535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778#797a7b7c7d7e81828d8e8f9091929394959697989c9d9ea1a2a3a4a5,f9:2c7995e7f1#92$,fa:0c0d0e0f111314181f20212324272829,e8:15161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243#4445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364");
108
+ const dataText = this.handleText("4e:020405060f12171f20212326292e2f313335373c40414244464a5155575a5b6263646567686a6b6c6d6e6f727475767778797a7b7c7d7f808182838485878a#909697999c9d9ea3aaafb0b1b4b6b7b8b9bcbdbec8cccfd0d2dadbdce0e2e6e7e9edeeeff1f4f8f9fafcfe,4f:00020304050607080b0c12131415161c1d212328292c2d2e31333537393b3e3f40414244454748494a4b4c525456616266686a6b6d6e7172757778797a7d8081828586878a8c8e909293959698999a9c9e9fa1a2a4abadb0b1b2b3b4b6b7b8b9babbbcbdbec0c1c2c6c7c8c9cbcccdd2d3d4d5d6d9dbe0e2e4e5e7ebecf0f2f4f5f6f7f9fbfcfdff,50:000102030405060708090a#0b0e1011131516171b1d1e20222324272b2f303132333435363738393b3d3f404142444546494a4b4d5051525354565758595b5d5e5f6061626364666768696a6b6d6e6f70717273747578797a7c7d818283848687898a8b8c8e8f909192939495969798999a9b9c9d9e9fa0a1a2a4a6aaabadaeafb0b1b3b4b5b6b7b8b9bcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdced0d1d2d3d4d5d7d8d9dbdcdddedfe0e1e2e3e4e5e8e9eaebeff0f1f2f4f6f7f8f9fafcfdfeff,51:00010203040508#090a0c0d0e0f1011131415161718191a1b1c1d1e1f2022232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e42474a4c4e4f5052535758595b5d5e5f606163646667696a6f727a7e7f838486878a8b8e8f90919394989a9d9e9fa1a3a6a7a8a9aaadaeb4b8b9babebfc1c2c3c5c8cacdced0d2d3d4d5d6d7d8d9dadcdedfe2e3e5e6e7e8e9eaeceef1f2f4f7fe,52:0405090b0c0f101314151c1e1f2122232526272a2c2f313234353c3e4445464748494b4e4f5253555758#595a5b5d5f6062636466686b6c6d6e7071737475767778797a7b7c7e808384858687898a8b8c8d8e8f91929495969798999a9ca4a5a6a7aeafb0b4b5b6b7b8b9babbbcbdc0c1c2c4c5c6c8cacccdcecfd1d3d4d5d7d9dadbdcdddee0e1e2e3e5e6e7e8e9eaebecedeeeff1f2f3f4f5f6f7f8fbfcfd,53:0102030407090a0b0c0e11121314181b1c1e1f2224252728292b2c2d2f3031323334353637383c3d404244464b4c4d505458595b5d65686a6c6d7276797b7c7d7e80818387888a8e8f#90919293949697999b9c9ea0a1a4a7aaabacadafb0b1b2b3b4b5b7b8b9babcbdbec0c3c4c5c6c7cecfd0d2d3d5dadcdddee1e2e7f4fafeff,54:000205070b1418191a1c2224252a303336373a3d3f4142444547494c4d4e4f515a5d5e5f6061636567696a6b6c6d6e6f7074797a7e7f8183858788898a8d919397989c9e9fa0a1a2a5aeb0b2b5b6b7b9babcbec3c5cacbd6d8dbe0e1e2e3e4ebeceff0f1f4f5f6f7f8f9fbfe,55:0002030405080a0b0c0d0e121315161718191a1c1d1e1f212526#28292b2d3234353638393a3b3d40424547484b4c4d4e4f515253545758595a5b5d5e5f60626368696b6f7071727374797a7d7f85868c8d8e9092939596979a9b9ea0a1a2a3a4a5a6a8a9aaabacadaeafb0b2b4b6b8babcbfc0c1c2c3c6c7c8cacbcecfd0d5d7d8d9dadbdee0e2e7e9edeef0f1f4f6f8f9fafbfcff,56:0203040506070a0b0d1011121314151617191a1c1d202122252628292a2b2e2f30333537383a3c3d3e404142434445464748494a4b4f5051525355565a5b5d5e5f6061#636566676d6e6f70727374757778797a7d7e7f80818283848788898a8b8c8d9091929495969798999a9b9c9d9e9fa0a1a2a4a5a6a7a8a9aaabacadaeb0b1b2b3b4b5b6b8b9babbbdbebfc0c1c2c3c4c5c6c7c8c9cbcccdcecfd0d1d2d3d5d6d8d9dce3e5e6e7e8e9eaeceeeff2f3f6f7f8fbfc,57:00010205070b0c0d0e0f101112131415161718191a1b1d1e202122242526272b313234353637383c3d3f414344454648494b52535455565859626365676c6e707172747578797a7d7e7f80#818788898a8d8e8f90919495969798999a9c9d9e9fa5a8aaacafb0b1b3b5b6b7b9babbbcbdbebfc0c1c4c5c6c7c8c9cacccdd0d1d3d6d7dbdcdee1e2e3e5e6e7e8e9eaebeceef0f1f2f3f5f6f7fbfcfeff,58:0103040508090a0c0e0f101213141617181a1b1c1d1f222325262728292b2c2d2e2f31323334363738393a3b3c3d3e3f4041424345464748494a4b4e4f505253555657595a5b5c5d5f6061626364666768696a6d6e6f707172737475767778797a7b7c7d7f82848687888a8b8c#8d8e8f909194959697989b9c9da0a1a2a3a4a5a6a7aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbdbebfc0c2c3c4c6c7c8c9cacbcccdcecfd0d2d3d4d6d7d8d9dadbdcdddedfe0e1e2e3e5e6e7e8e9eaedeff1f2f4f5f7f8fafbfcfdfeff,59:000103050608090a0b0c0e1011121317181b1d1e2021222326282c30323335363b3d3e3f404345464a4c4d505253595b5c5d5e5f616364666768696a6b6c6d6e6f70717275777a7b7c7e7f8085898b8c8e8f90919495989a9b9c9d9fa0a1a2a6#a7acadb0b1b3b4b5b6b7b8babcbdbfc0c1c2c3c4c5c7c8c9cccdcecfd5d6d9dbdedfe0e1e2e4e6e7e9eaebedeeeff0f1f2f3f4f5f6f7f8fafcfdfe,5a:00020a0b0d0e0f101214151617191a1b1d1e2122242627282a2b2c2d2e2f3033353738393a3b3d3e3f414243444547484b4c4d4e4f5051525354565758595b5c5d5e5f60616364656668696b6c6d6e6f7071727378797b7c7d7e808182838485868788898a8b8c8d8e8f9091939495969798999c9d9e9fa0a1a2a3a4a5a6a7a8a9abac#adaeafb0b1b4b6b7b9babbbcbdbfc0c3c4c5c6c7c8cacbcdcecfd0d1d3d5d7d9dadbdddedfe2e4e5e7e8eaecedeeeff0f2f3f4f5f6f7f8f9fafbfcfdfeff,5b:0001020304050607080a0b0c0d0e0f10111213141518191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303133353638393a3b3c3d3e3f4142434445464748494a4b4c4d4e4f52565e606167686b6d6e6f7274767778797b7c7e7f82868a8d8e90919294969fa7a8a9acadaeafb1b2b7babbbcc0c1c3c8c9cacbcdcecf#d1d4d5d6d7d8d9dadbdce0e2e3e6e7e9eaebecedeff1f2f3f4f5f6f7fdfe,5c:0002030507080b0c0d0e10121317191b1e1f2021232628292a2b2d2e2f303233353637434446474c4d5253545657585a5b5c5d5f62646768696a6b6c6d70727374757677787b7c7d7e808384858687898a8b8e8f9293959d9e9fa0a1a4a5a6a7a8aaaeafb0b2b4b6b9babbbcbec0c2c3c5c6c7c8c9cacccdcecfd0d1d3d4d5d6d7d8dadbdcdddedfe0e2e3e7e9ebeceeeff1f2f3f4f5f6f7f8f9fafcfdfeff,5d:00#01040508090a0b0c0d0f10111213151718191a1c1d1f2021222325282a2b2c2f3031323335363738393a3b3c3f4041424344454648494d4e4f5051525354555657595a5c5e5f6061626364656667686a6d6e7071727375767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f9091929394959697989a9b9c9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b8b9babbbcbdbebfc0c1c2c3c4c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d7d8d9dadcdfe0e3e4eaeced#f0f5f6f8f9fafbfcff,5e:000407090a0b0d0e1213171e1f20212223242528292a2b2c2f303233343536393a3e3f404143464748494a4b4d4e4f50515253565758595a5c5d5f60636465666768696a6b6c6d6e6f70717577797e8182838588898c8d8e92989b9da1a2a3a4a8a9aaabacaeafb0b1b2b4babbbcbdbfc0c1c2c3c4c5c6c7c8cbcccdcecfd0d4d5d7d8d9dadcdddedfe0e1e2e3e4e5e6e7e9ebecedeeeff0f1f2f3f5f8f9fbfcfd,5f:050607090c0d0e10121416191a1c1d1e21222324#282b2c2e30323334353637383b3d3e3f4142434445464748494a4b4c4d4e4f5154595a5b5c5e5f60636567686b6e6f72747576787a7d7e7f83868d8e8f919394969a9b9d9e9fa0a2a3a4a5a6a7a9abacafb0b1b2b3b4b6b8b9babbbebfc0c1c2c7c8cacbced3d4d5dadbdcdedfe2e3e5e6e8e9eceff0f2f3f4f6f7f9fafc,60:0708090b0c10111317181a1e1f2223242c2d2e3031323334363738393a3d3e404445464748494a4c4e4f5153545657585b5c5e5f606165666e71727475777e80#8182858687888a8b8e8f909193959798999c9ea1a2a4a5a7a9aaaeb0b3b5b6b7b9babdbebfc0c1c2c3c4c7c8c9cccdcecfd0d2d3d4d6d7d9dbdee1e2e3e4e5eaf1f2f5f7f8fbfcfdfeff,61:02030405070a0b0c1011121314161718191b1c1d1e21222528292a2c2d2e2f303132333435363738393a3b3c3d3e4041424344454647494b4d4f50525354565758595a5b5c5e5f606163646566696a6b6c6d6e6f717273747678797a7b7c7d7e7f808182838485868788898a8c8d8f9091929395#969798999a9b9c9e9fa0a1a2a3a4a5a6aaabadaeafb0b1b2b3b4b5b6b8b9babbbcbdbfc0c1c3c4c5c6c7c9cccdcecfd0d3d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e7e8e9eaebecedeeeff0f1f2f3f4f6f7f8f9fafbfcfdfe,62:00010203040507091314191c1d1e2023262728292b2d2f303132353638393a3b3c424445464a4f50555657595a5c5d5e5f6061626465687172747577787a7b7d818283858687888b8c8d8e8f9094999c9d9ea3a6a7a9aaadaeafb0b2b3b4b6b7b8babec0c1#c3cbcfd1d5dddee0e1e4eaebf0f2f5f8f9fafb,63:00030405060a0b0c0d0f10121314151718191c2627292c2d2e30313334353637383b3c3e3f40414447484a51525354565758595a5b5c5d60646566686a6b6c6f707273747578797c7d7e7f81838485868b8d9193949597999a9b9c9d9e9fa1a4a6abafb1b2b5b6b9bbbdbfc0c1c2c3c5c7c8cacbccd1d3d4d5d7d8d9dadbdcdddfe2e4e5e6e7e8ebeceeeff0f1f3f5f7f9fafbfcfe,64:0304060708090a0d0e111215161718191a1d1f222324#252728292b2e2f3031323335363738393b3c3e404243494b4c4d4e4f505153555657595a5b5c5d5f60616263646566686a6b6c6e6f70717273747576777b7c7d7e7f8081838688898a8b8c8d8e8f90939497989a9b9c9d9fa0a1a2a3a5a6a7a8aaabafb1b2b3b4b6b9bbbdbebfc1c3c4c6c7c8c9cacbcccfd1d3d4d5d6d9dadbdcdddfe0e1e3e5e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,65:01020304050607080a0b0c0d0e0f10111314151617191a1b1c1d1e1f2021#222324262728292a2c2d30313233373a3c3d404142434446474a4b4d4e5052535457585a5c5f606164656768696a6d6e6f7173757678797a7b7c7d7e7f8081828384858688898a8d8e8f92949596989a9d9ea0a2a3a6a8aaacaeb1b2b3b4b5b6b7b8babbbebfc0c2c7c8c9cacdd0d1d3d4d5d8d9dadbdcdddedfe1e3e4eaebf2f3f4f5f8f9fbfcfdfeff,66:0104050708090b0d1011121617181a1b1c1e2122232426292a2b2c2e3032333738393a3b3d3f40424445464748494a4d4e505158#595b5c5d5e6062636567696a6b6c6d7172737578797b7c7d7f808183858688898a8b8d8e8f909293949598999a9b9c9e9fa0a1a2a3a4a5a6a9aaabacadafb0b1b2b3b5b6b7b8babbbcbdbfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8dadedfe0e1e2e3e4e5e7e8eaebecedeeeff1f5f6f8fafbfd,67:010203040506070c0e0f1112131618191a1c1e20212223242527292e303233363738393b3c3e3f414445474a4b4d5254555758595a5b5d62636466676b6c6e717476#78797a7b7d8082838586888a8c8d8e8f9192939496999b9fa0a1a4a6a9acaeb1b2b4b9babbbcbdbebfc0c2c5c6c7c8c9cacbcccdced5d6d7dbdfe1e3e4e6e7e8eaebedeef2f5f6f7f8f9fafbfcfe,68:01020304060d1012141518191a1b1c1e1f20222324252627282b2c2d2e2f30313435363a3b3f474b4d4f52565758595a5b5c5d5e5f6a6c6d6e6f707172737578797a7b7c7d7e7f8082848788898a8b8c8d8e90919294959698999a9b9c9d9e9fa0a1a3a4a5a9aaabacaeb1b2b4b6b7b8#b9babbbcbdbebfc1c3c4c5c6c7c8cacccecfd0d1d3d4d6d7d9dbdcdddedfe1e2e4e5e6e7e8e9eaebecedeff2f3f4f6f7f8fbfdfeff,69:00020304060708090a0c0f11131415161718191a1b1c1d1e21222325262728292a2b2c2e2f313233353637383a3b3c3e4041434445464748494a4b4c4d4e4f50515253555658595b5c5f616264656768696a6c6d6f7072737475767a7b7d7e7f8183858a8b8c8e8f909192939697999a9d9e9fa0a1a2a3a4a5a6a9aaacaeafb0b2b3b5b6b8b9babcbd#bebfc0c2c3c4c5c6c7c8c9cbcdcfd1d2d3d5d6d7d8d9dadcdddee1e2e3e4e5e6e7e8e9eaebeceeeff0f1f3f4f5f6f7f8f9fafbfcfe,6a:000102030405060708090b0c0d0e0f10111213141516191a1b1c1d1e20222324252627292b2c2d2e30323334363738393a3b3c3f40414243454648494a4b4c4d4e4f515253545556575a5c5d5e5f60626364666768696a6b6c6d6e6f70727374757677787a7b7d7e7f81828385868788898a8b8c8d8f929394959698999a9b9c9d9e9fa1a2a3a4a5a6#a7a8aaadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,6b:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f252628292a2b2c2d2e2f303133343536383b3c3d3f4041424445484a4b4d4e4f5051525354555657585a5b5c5d5e5f606168696b6c6d6e6f7071727374757677787a7d7e7f808588#8c8e8f909194959798999c9d9e9fa0a2a3a4a5a6a7a8a9abacadaeafb0b1b2b6b8b9babbbcbdbec0c3c4c6c7c8c9caccced0d1d8dadcdddedfe0e2e3e4e5e6e7e8e9ecedeef0f1f2f4f6f7f8fafbfcfeff,6c:000102030408090a0b0c0e12171c1d1e2023252b2c2d31333637393a3b3c3e3f434445484b4c4d4e4f5152535658595a62636566676b6c6d6e6f71737577787a7b7c7f8084878a8b8d8e9192959697989a9c9d9ea0a2a8acafb0b4b5b6b7bac0c1c2c3c6c7c8cbcdcecfd1d2d8#d9dadcdddfe4e6e7e9ecedf2f4f9ff,6d:000203050608090a0d0f101113141516181c1d1f20212223242628292c2d2f30343637383a3f404244494c50555657585b5d5f6162646567686b6c6d707172737576797a7b7d7e7f8081838486878a8b8d8f9092969798999a9ca2a5acadb0b1b3b4b6b7b9babbbcbdbec1c2c3c8c9cacdcecfd0d2d3d4d5d7dadbdcdfe2e3e5e7e8e9eaedeff0f2f4f5f6f8fafdfeff,6e:0001020304060708090b0f12131518191b1c1e1f222627282a2c2e30313335#3637393b3c3d3e3f40414245464748494a4b4c4f5051525557595a5c5d5e606162636465666768696a6c6d6f707172737475767778797a7b7c7d8081828487888a8b8c8d8e91929394959697999a9b9d9ea0a1a3a4a6a8a9abacadaeb0b3b5b8b9bcbebfc0c3c4c5c6c8c9cacccdced0d2d6d8d9dbdcdde3e7eaebecedeeeff0f1f2f3f5f6f7f8fafbfcfdfeff,6f:000103040507080a0b0c0d0e101112161718191a1b1c1d1e1f212223252627282c2e303234353738393a3b3c3d3f404142#43444548494a4c4e4f5051525354555657595a5b5d5f60616364656768696a6b6c6f707173757677797b7d7e7f808182838586878a8b8f909192939495969798999a9b9d9e9fa0a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b7b8babbbcbdbebfc1c3c4c5c6c7c8cacbcccdcecfd0d3d4d5d6d7d8d9dadbdcdddfe2e3e4e5e6e7e8e9eaebecedf0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,70:000102030405060708090a0b0c0d0e0f1012131415161718191c1d1e1f2021222425262728292a#2b2c2d2e2f30313233343637383a3b3c3d3e3f404142434445464748494a4b4d4e505152535455565758595a5b5c5d5f606162636465666768696a6e7172737477797a7b7d818283848687888b8c8d8f90919397989a9b9e9fa0a1a2a3a4a5a6a7a8a9aab0b2b4b5b6babebfc4c5c6c7c9cbcccdcecfd0d1d2d3d4d5d6d7dadcdddee0e1e2e3e5eaeef0f1f2f3f4f5f6f8fafbfcfeff,71:0001020304050607080b0c0d0e0f111214171b1c1d1e1f2021222324252728292a2b2c2d2e323334#353738393a3b3c3d3e3f4041424344464748494b4d4f505152535455565758595a5b5d5f6061626365696a6b6c6d6f707174757677797b7c7e7f8081828385868788898b8c8d8e909192939596979a9b9c9d9ea1a2a3a4a5a6a7a9aaabadaeafb0b1b2b4b6b7b8babbbcbdbebfc0c1c2c4c5c6c7c8c9cacbcccdcfd0d1d2d3d6d7d8d9dadbdcdddedfe1e2e3e4e6e8e9eaebecedeff0f1f2f3f4f5f6f7f8fafbfcfdfeff,72:0001020304050708090a0b0c0d0e0f101112131415161718191a#1b1c1e1f2021222324252627292b2d2e2f3233343a3c3e40414243444546494a4b4e4f505153545557585a5c5e60636465686a6b6c6d707173747677787b7c7d828385868788898c8e9091939495969798999a9b9c9d9ea0a1a2a3a4a5a6a7a8a9aaabaeb1b2b3b5babbbcbdbebfc0c5c6c7c9cacbcccfd1d3d4d5d6d8dadb#95$,30:000102,00b702:c9c7,00a830:0305,2014ff5e20:162618191c1d,30:141508090a0b0c0d0e0f16171011,00:b1d7f7,22:362728110f2a2908371aa52520,231222:992b2e614c483d1d606e6f64651e3534,26:4240,00b020:3233,2103ff0400a4ff:e0e1,203000a7211626:0605,25:cbcfcec7c6a1a0b3b2,203b21:92909193,30:13#95$,21:70717273747576777879#4$,24:88898a8b8c8d8e8f909192939495969798999a9b7475767778797a7b7c7d7e7f808182838485868760616263646566676869##,32:20212223242526272829##,21:606162636465666768696a6b#97$,ff:010203e505060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5de3#95$,30:4142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293#106$a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6#103$,03:9192939495969798999a9b9c9d9e9fa0a1a3a4a5a6a7a8a9#6$b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c3c4c5c6c7c8c9#5$,fe:3536393a3f403d3e41424344##3b3c373831#3334#104$,04:10111213141501161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f#13$30313233343551363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f#11$,02:cacbd9,20:13152535,21:050996979899,22:151f23526667bf,25:505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727381828384858687#88898a8b8c8d8e8f939495bcbde2e3e4e5,2609229530:121d1e#9$,010100e101ce00e0011300e9011b00e8012b00ed01d000ec014d00f301d200f2016b00fa01d400f901:d6d8dadc,00:fcea,0251e7c701:4448,e7c802:61#2$,31:05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829#19$,30:212223242526272829,32a333:8e8f9c9d9ea1c4ced1d2d5,fe30ff:e2e4#,212132:31#,20:10#1$,30:fc9b9cfdfe069d9e,fe:494a4b4c4d4e4f50515254555657595a5b5c5d5e5f6061#626364656668696a6b,e7:e7e8e9eaebecedeeeff0f1f2f3,30:07#11$,25:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b#13$,72:dcdddfe2e3e4e5e6e7eaebf5f6f9fdfeff,73:00020405060708090b0c0d0f1011121418191a1f2023242627282d2f30323335363a3b3c3d404142434445464748#494a4b4c4e4f515354555658595a5b5c5d5e5f6162636465666768696a6b6e7071#92$72737475767778797a7b7c7d7f808182838586888a8c8d8f90929394959798999a9c9d9ea0a1a3a4a5a6a7a8aaacadb1b4b5b6b8b9bcbdbebfc1c3c4c5c6c7#cbccced2d3d4d5d6d7d8dadbdcdddfe1e2e3e4e6e8eaebeceeeff0f1f3f4f5f6f7#92$f8f9fafbfcfdfeff,74:0001020407080b0c0d0e1112131415161718191c1d1e1f2021232427292b2d2f31323738393a3b3d3e3f4042434445464748494a4b4c4d#4e4f505152535456585d606162636465666768696a6b6c6e6f717273747578797a#92$7b7c7d7f8284858688898a8c8d8f9192939495969798999a9b9d9fa0a1a2a3a4a5a6aaabacadaeafb0b1b2b3b4b5b6b7b8b9bbbcbdbebfc0c1c2c3c4c5c6c7#c8c9cacbcccdcecfd0d1d3d4d5d6d7d8d9dadbdddfe1e5e7e8e9eaebecedf0f1f2#92$f3f5f8f9fafbfcfdfe,75:0001020305060708090a0b0c0e1012141516171b1d1e202122232426272a2e3436393c3d3f414243444647494a4d5051525355565758#5d5e5f60616263646768696b6c6d6e6f7071737576777a7b7c7d7e808182848587#92$88898a8c8d8e909395989b9c9ea2a6a7a8a9aaadb6b7babbbfc0c1c6cbcccecfd0d1d3d7d9dadcdddfe0e1e5e9ecedeeeff2f3f5f6f7f8fafbfdfe,76:02040607#08090b0d0e0f11121314161a1c1d1e212327282c2e2f31323637393a3b3d414244#92$45464748494a4b4e4f50515253555758595a5b5d5f6061626465666768696a6c6d6e7071727374757677797a7c7f80818385898a8c8d8f9092949597989a9b#9c9d9e9fa0a1a2a3a5a6a7a8a9aaabacadafb0b3b5b6b7b8b9babbbcbdbec0c1c3,554a963f57c3632854ce550954c076:914c,853c77ee827e788d72319698978d6c285b894ffa630966975cb880fa684880ae660276ce51f9655671ac7ff1888450b2596561ca6fb382ad634c625253ed54277b06516b75a45df462d48dcb9776628a8019575d97387f627238767d67cf767e64464f708d2562dc7a17659173ed642c6273822c9881677f724862:6ecc,4f3474e3534a529e7eca90a65e2e6886699c81807ed168d278c5868c9551508d8c2482de80de53058912526576:c4c7c9cbccd3d5d9dadcdddee0e1e2e3e4e6e7e8e9eaebecedf0f3f5f6f7fafbfdff,77:00020305060a0c0e0f1011121314151617181b1c1d1e21232425272a2b#2c2e3031323334393b3d3e3f4244454648494a4b4c4d4e4f52535455565758595c,858496f94fdd582199715b9d62:b1a5,66b48c799c8d7206676f789160b253:5117,8f8880cc8d1d94a1500d72c8590760eb711988ab595482ef672c7b285d297ef7752d6cf58e668ff8903c9f3b6bd491197b145f7c78a784d6853d6b:d5d9d6,5e:0187,75f995ed655d5f:0ac5,8f9f58c181c2907f965b97ad8fb97f168d2c62414fbf53:d85e,8f:a8a9ab,904d68075f6a819888689cd6618b522b762a5f6c658c6fd26ee85bbe644851:75b0,67c44e1979c9997c70b377:5d5e5f606467696a6d6e6f7071727374757677787a7b7c818283868788898a8b8f90939495969798999a9b9c9d9ea1a3a4a6a8abadaeafb1b2b4b6b7b8b9ba#bcbec0c1c2c3c4c5c6c7c8c9cacbcccecfd0d1d2d3d4d5d6d8d9dadddedfe0e1e4,75c55e7673bb83e064ad62e894b56ce2535a52c3640f94c27b944f2f5e1b823681:168a,6e246cca9a736355535c54fa886557e04e0d5e036b657c3f90e8601664e6731c88c16750624d8d22776c8e2991c75f6983dc8521991053c286956b8b60:ede8,707f82:cd31,4ed36ca785cf64cd7cd969fd66f9834953957b564fa7518c6d4b5c428e6d63d253c983:2c36,67e578b4643d5bdf5c945dee8be762c667f48c7a640063ba8749998b8c177f2094f24ea7961098a4660c731677:e6e8eaeff0f1f2f4f5f7f9fafbfc,78:0304050607080a0b0e0f101315191b1e20212224282a2b2e2f31323335363d3f414243444648494a4b4d4f51535458595a#5b5c5e5f606162636465666768696f7071727374757678797a7b7d7e7f80818283,573a5c1d5e38957f507f80a05382655e7545553150218d856284949e671d56326f6e5de2543570928f66626f64a463a35f7b6f8890f481e38fb05c1866685ff16c8996488d81886c649179f057ce6a59621054484e587a0b60e96f848bda627f901e9a8b79e4540375f4630153196c608fdf5f1b9a70803b9f7f4f885c3a8d647fc565a570bd51:45b2,866b5d075ba062bd916c75748e0c7a2061017b794ec77ef877854e1181ed521d51fa6a7153a88e87950496cf6ec19664695a78:848586888a8b8f9092949596999d9ea0a2a4a6a8a9aaabacadaeafb5b6b7b8babbbcbdbfc0c2c3c4c6c7c8cccdcecfd1d2d3d6d7d8dadbdcdddedfe0e1e2e3#e4e5e6e7e9eaebedeeeff0f1f3f5f6f8f9fbfcfdfeff,79:00020304060708090a0b0c,784050a877d7641089e6590463e35ddd7a7f693d4f20823955984e3275ae7a975e:628a,95ef521b5439708a6376952457826625693f918755076df37eaf882262337ef075b5832878c196cc8f9e614874f78bcd6b64523a8d506b21806a847156f153064e:ce1b,51d17c97918b7c074fc38e7f7be17a9c64675d1450ac810676017cb96dec7fe067515b:58f8,78cb64:ae13,63:aa2b,9519642d8fbe7b5476296253592754466b7950a362345e266b864ee38d37888b5f85902e79:0d0e0f1011121415161718191a1b1c1d1f2021222325262728292a2b2c2d2e2f3031323335363738393d3f42434445474a4b4c4d4e4f505152545558596163#6466696a6b6c6e70717273747576797b7c7d7e7f8283868788898b8c8d8e909192,6020803d62c54e39535590f863b880c665e66c2e4f4660ee6de18bde5f3986cb5f536321515a83616863520063638e4850125c9b79775bfc52307a3b60bc905376d75f:b797,76848e6c706f767b7b4977aa51f3909358244f4e6ef48fea654c7b1b72c46da47fdf5ae162b55e95573084827b2c5e1d5f1f90127f1498a063826ec7789870b95178975b57ab75354f4375385e9760e659606dc06bbf788953fc96d551cb52016389540a94938c038dcc7239789f87768fed8c0d53e079:939495969798999b9c9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb0b1b2b4b5b6b7b8bcbfc2c4c5c7c8cacccecfd0d3d4d6d7d9dadbdcdddee0e1e2e5e8ea#eceef1f2f3f4f5f6f7f9fafcfeff,7a:0104050708090a0c0f10111213151618191b1c,4e0176ef53ee948998769f0e952d5b9a8ba24e:221c,51ac846361c252a8680b4f97606b51bb6d1e515c6296659796618c46901775d890fd77636bd272:8aec,8bfb583577798d4c675c9540809a5ea66e2159927aef77ed953b6bb565ad7f0e58065151961f5bf958a954288e726566987f56e4949d76fe9041638754c659:1a3a,579b8eb267358dfa8235524160f0581586fe5ce89e454fc4989d8bb95a2560765384627c904f9102997f6069800c513f80335c1499756d314e8c7a:1d1f21222425262728292a2b2c2d2e2f303132343536383a3e4041424344454748494a4b4c4d4e4f50525354555658595a5b5c5d5e5f606162636465666768#696a6b6c6d6e6f717273757b7c7d7e828587898a8b8c8e8f909394999a9b9ea1a2,8d3053d17f5a7b4f4f104e4f96006cd573d085e95e06756a7ffb6a0a77fe94927e4151e170e653cd8fd483038d2972af996d6cdb574a82b365b980aa623f963259a84eff8bbf7eba653e83f2975e556198de80a5532a8bfd542080ba5e9f6cb88d3982ac915a54296c1b52067eb7575f711a6c7e7c89594b4efd5fff61247caa4e305c0167ab87025cf0950b98ce75af70fd902251af7f1d8bbd594951e44f5b5426592b657780a45b7562:76c2,8f905e456c1f7b264f:0fd8,670d7a:a3a4a7a9aaabaeafb0b1b2b4b5b6b7b8b9babbbcbdbec0c1c2c3c4c5c6c7c8c9cacccdcecfd0d1d2d3d4d5d7d8dadbdcdde1e2e4e7e8e9eaebeceef0f1f2f3#f4f5f6f7f8fbfcfe,7b:0001020507090c0d0e1012131617181a1c1d1f21222327292d,6d:6eaa,798f88b15f17752b629a8f854fef91dc65a781:2f51,5e9c81508d74526f89868d4b590d50854ed8961c723681798d1f5bcc8ba3964459877f1a549056:760e,8be565396982949976d66e895e72751867:46d1,7aff809d8d76611f79c665628d635188521a94a27f38809b7eb25c976e2f67607bd9768b9ad8818f7f947cd5641e95507a3f54:4ae5,6b4c640162089e3d80f3759952729769845b683c86e496:0194,94ec4e2a54047ed968398ddf801566f45e9a7fb97b:2f303234353637393b3d3f404142434446484a4d4e535557595c5e5f61636465666768696a6b6c6d6f70737476787a7c7d7f81828384868788898a8b8c8e8f#9192939698999a9b9e9fa0a3a4a5aeafb0b2b3b5b6b7b9babbbcbdbebfc0c2c3c4,57c2803f68975de5653b529f606d9f9a4f9b8eac516c5bab5f135de96c5e62f18d21517194a952fe6c9f82df72d757a267848d2d591f8f9c83c754957b8d4f306cbd5b6459d19f1353e486ca9aa88c3780a16545987e56fa96c7522e74dc52505be1630289024e5662d0602a68fa51735b9851a089c27ba199867f5060ef704c8d2f51495e7f901b747089c4572d78455f529f9f95fa8f689b3c8be17678684267dc8d:ea35,523d8f8a6eda68cd950590ed56fd679c88f98fc754c87b:c5c8c9cacbcdcecfd0d2d4d5d6d7d8dbdcdedfe0e2e3e4e7e8e9ebecedeff0f2f3f4f5f6f8f9fafbfdff,7c:0001020304050608090a0d0e101112131415171819#1a1b1c1d1e20212223242528292b2c2d2e2f3031323334353637393a3b3c3d3e42,9ab85b696d776c264ea55bb39a87916361a890af97e9542b6db55bd251fd558a7f:55f0,64bc634d65f161be608d710a6c:5749,592f676d822a58d5568e8c6a6beb90dd597d801753f76d695475559d83:77cf,683879be548c4f55540876d28c8996026cb36db88d6b89109e648d3a563f9ed175d55f8872e0606854fc4ea86a2a886160528f7054c470d886799e3f6d2a5b8f5f187ea255894faf7334543c539a501954:0e7c,4e4e5ffd745a58f6846b80e1877472d07cca6e567c:434445464748494a4b4c4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717275767778797a7e7f8081828384858687#888a8b8c8d8e8f90939496999a9ba0a1a3a6a7a8a9abacadafb0b4b5b6b7b8babb,5f27864e552c62a44e926caa623782b154d7534e733e6ed1753b521253168bdd69d05f8a60006dee574f6b2273af68538fd87f13636260a3552475ea8c6271156da35ba65e7b8352614c9ec478fa87577c27768751f060f6714c66435e4c604d8c0e707063258f895fbd606286d456de6bc160946167534960e066668d3f79fd4f1a70e96c478b:b3f2,7ed88364660f5a5a9b426d:51f7,8c416d3b4f19706b83b7621660d1970d8d27797851fb57:3efa,673a75787a3d79ef7b957c:bfc0c2c3c4c6c9cbcecfd0d1d2d3d4d8dadbdddee1e2e3e4e5e6e7e9eaebecedeef0f1f2f3f4f5f6f7f9fafcfdfeff,7d:000102030405060708090b0c0d0e0f10#1112131415161718191a1b1c1d1e1f212324252628292a2c2d2e30313233343536,808c99658ff96fc08ba59e2159ec7ee97f095409678168d88f917c4d96c653ca602575be6c7253735ac97ea7632451e0810a5df184df628051805b634f0e796d524260b86d4e5b:c4c2,8b:a1b0,65e25fcc964559937e:e7aa,560967b759394f735bb652a0835a988a8d3e753294be50477a3c4ef767b69a7e5ac16b7c76d1575a5c167b3a95f4714e517c80a9827059787f04832768c067ec78:b177,62e363617b804fed526a51cf835069db92748d:f531,89c1952e7bad4ef67d:3738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6f70717273747576#78797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798,506582305251996f6e:1085,6da75efa50f559dc5c066d466c5f7586848b686859568bb253209171964d854969127901712680f64ea490ca6d479a845a0756bc640594f077eb4fa5811a72e189d2997a7f347ede527f655991758f:7f83,53eb7a9663:eda5,768679f888579636622a52ab8282685467706377776b7aed6d017ed389e359d0621285c982a5754c501f4ecb75a58beb5c4a5dfe7b4b65a491d14eca6d25895f7d2795264ec58c288fdb9773664b79818fd170ec6d787d:999a9b9c9d9e9fa0a1a2a3a4a5a7a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9#dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa,5c3d52b283465162830e775b66769cb84eac60ca7c:beb3,7ecf4e958b66666f988897595883656c955c5f8475c997567a:dfde,51c070af7a9863ea7a767ea0739697ed4e4570784e5d915253a965:51e7,81fc8205548e5c31759a97a062d872d975bd5c459a7983ca5c40548077e94e3e6cae805a62d2636e5de851778ddd8e1e952f4ff153e560e770ac526763509e435a1f5026773753777ee26485652b628963985014723589c951b38bc07edd574783cc94a7519b541b5cfb7d:fbfcfdfeff,7e:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839#3a3c3d3e3f40424344454648494a4b4c4d4e4f505152535455565758595a5b5c5d,4fca7ae36d5a90e19a8f55805496536154af5f0063e9697751ef6168520a582a52d8574e780d770b5eb761777ce062:5b97,4ea27095800362f770e49760577782db67ef68f578d5989779d158f354b353ef6e34514b523b5ba28bfe80af554357a660735751542d7a7a60505b5463a762a053e362635bc767af54ed7a9f82e691775e9388e4593857ae630e8de880ef57577b774fa95feb5bbd6b3e53217b5072c2684677:ff36,65f751b54e8f76d45cbf7aa58475594e9b4150807e:5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081838485868788898a8b8c8d8e8f909192939495969798999a9c9d9e#aeb4bbbcd6e4ecf9,7f:0a101e37393b3c3d3e3f404143464748494a4b4c4d4e4f5253,998861276e8357646606634656f062:ec69,5ed39614578362c955878721814a8fa3556683b167658d5684dd5a6a680f62e67bee961151706f9c8c3063fd89c861d27f0670c26ee57405699472fc5eca90ce67176d6a635e52b3726280014f6c59e5916a70d96d9d52d24e5096f7956d857e78ca7d2f5121579264c2808b7c7b6cea68f1695e51b7539868a872819ece7bf172f879bb6f137406674e91cc9ca4793c83:8954,540f68174e3d538952b1783e5386522950884f:8bd0,7f:56595b5c5d5e6063646566676b6c6d6f7073757677787a7b7c7d7f8082838485868788898b8d8f9091929395969798999b9ca0a2a3a5a6a8a9aaabacadaeb1#b3b4b5b6b7babbbec0c2c3c4c6c7c8c9cbcdcfd0d1d2d3d6d7d9dadbdcdddee2e3,75e27acb7c926ca596b6529b748354e94fe9805483b28fde95705ec9601c6d9f5e18655b813894fe604b70bc7ec37cae51c968817cb1826f4e248f8691cf667e4eae8c0564a9804a50da759771ce5be58fbd6f664e86648295635ed66599521788c270c852a3730e7433679778f797164e3490bb9cde6dcb51db8d41541d62ce73b283f196f69f8494c34f367f9a51cc707596755cad988653e64ee46e9c740969b4786b998f7559521876246d4167f3516d9f99804b54997b3c7abf7f:e4e7e8eaebecedeff2f4f5f6f7f8f9fafdfeff,80:020708090a0e0f11131a1b1d1e1f2123242b2c2d2e2f303234393a3c3e404144454748494e4f505153555657#595b5c5d5e5f6061626364656667686b6c6d6e6f7072737475767778797a7b7c7d,9686578462e29647697c5a0464027bd36f0f964b82a6536298855e90708963b35364864f9c819e93788c97328d:ef42,9e7f6f5e79845f559646622e9a74541594dd4fa365c55c:6561,7f1586516c2f5f8b73876ee47eff5ce6631b5b6a6ee653754e7163a0756562a18f6e4f264ed16ca67eb68bba841d87ba7f57903b95237ba99aa188f8843d6d1b9a867edc59889ebb739b780186829a:6c82,561b541757cb4e709ea653568fc881097792999286ee6ee1851366fc61626f2b80:7e818285888a8d8e8f909192949597999ea3a6a7a8acb0b3b5b6b8b9bbc5c7c8c9cacbcfd0d1d2d3d4d5d8dfe0e2e3e6eef5f7f9fbfeff,81:000103040507080b#0c1517191b1c1d1f202122232425262728292a2b2d2e3033343537393a3b3c3d3f,8c298292832b76f26c135fd983bd732b8305951a6bdb77db94c6536f830251925e3d8c8c8d384e4873ab679a68859176970971646ca177095a9295416bcf7f8e66275bd059b95a9a95:e8f7,4eec84:0c99,6aac76df9530731b68a65b5f772f919a97617cdc8ff78c1c5f257c7379d889c56ccc871c5bc65e4268c977207ef551:954d,52c95a297f05976282d763cf778485d079d26e3a5e9959998511706d6c1162bf76bf654f60af95fd660e879f9e2394ed54:0d7d,8c2c647881:40414243444547494d4e4f525657585b5c5d5e5f6162636466686a6b6c6f727375767778818384858687898b8c8d8e90929394959697999a9e9fa0a1a2a4a5#a7a9abacadaeafb0b1b2b4b5b6b7b8b9bcbdbebfc4c5c7c8c9cbcdcecfd0d1d2d3,647986116a21819c78e864699b5462b9672b83ab58a89ed86cab6f205bde964c8c0b725f67d062c772614ea959c66bcd589366ae5e5552df6155672876ee776672677a4662ff54:ea50,94a090a35a1c7eb36c164e435976801059485357753796be56ca63208111607c95f96dd65462998151855ae980fd59ae9713502a6ce55c3c62df4f60533f817b90066eba852b62c85e7478be64b5637b5ff55a18917f9e1f5c3f634f80425b7d556e95:4a4d,6d8560a867e072de51dd5b8181:d4d5d6d7d8d9dadbdcdddedfe0e1e2e4e5e6e8e9ebeeeff0f1f2f5f6f7f8f9fafdff,82:030708090a0b0e0f111315161718191a1d2024252627292e323a3c3d3f#404142434546484a4c4d4e5051525354555657595b5c5d5e606162636465666769,62e76cde725b626d94ae7ebd81136d53519c5f04597452aa6012597366968650759f632a61e67cef8bfa54e66b279e256bb485d5545550766ca4556a8db4722c5e156015743662cd6392724c5f986e436d3e65006f5876d878d076fc7554522453db4e535e9e65c180:2ad6,629b5486522870ae888d8dd16ce1547880da57f988f48d54966a914d4f696c9b55b776c6783062a870f96f8e5f6d84ec68da787c7bf781a8670b9e4f636778b0576f7812973962:79ab,528874356bd782:6a6b6c6d71757677787b7c808183858687898c90939495969a9b9ea0a2a3a7b2b5b6babbbcbfc0c2c3c5c6c9d0d6d9dadde2e7e8e9eaecedeef0f2f3f5f6f8#fafcfdfeff,83:000a0b0d1012131618191d1e1f20212223242526292a2e3032373b3d,5564813e75b276ae533975de50fb5c418b6c7bc7504f72479a9798d86f0274e27968648777a562fc98918d2b54c180584e52576a82f9840d5e7351ed74f68bc45c4f57616cfc98875a4678349b448feb7c955256625194fa4ec68386846183e984b257d467345703666e6d668c3166dd7011671f6b3a6816621a59bb4e0351c46f0667d26c8f517668cb59476b6775665d0e81109f5065d779:4841,9a918d775c824e5e4f01542f5951780c56686c148fc45f036c:7de3,8bab639083:3e3f41424445484a4b4c4d4e5355565758595d6270717273747576797a7e7f808182838487888a8b8c8d8f909194959697999a9d9fa1a2a3a4a5a6a7acadae#afb5bbbebfc2c3c4c6c8c9cbcdced0d1d2d3d5d7d9dadbdee2e3e4e6e7e8ebeced,60706d3d7275626694:8ec5,53438fc17b7e4edf8c264e7e9ed494:b1b3,524d6f5c90636d458c3458115d4c6b:2049,67aa545b81547f8c589985375f3a62a26a47953965726084686577a74e544fa85de7979864ac7fd85ced4fcf7a8d520783044e14602f7a8394a64fb54eb279e6743452e482b964d279bd5bdd6c8197528f7b6c22503e537f6e0564ce66746c3060c598778bf75e86743c7a7779cb4e1890b174036c4256da914b6cc58d8b533a86c666f28eaf5c489a716e2083:eeeff3f4f5f6f7fafbfcfeff,84:0002050708090a10121314151617191a1b1e1f20212223292a2b2c2d2e2f30323334353637393a3b3e3f404142434445474849#4a4b4c4d4e4f505253545556585d5e5f606264656667686a6e6f70727477797b7c,53d65a369f8b8da353bb570898a76743919b6cc9516875ca62f372ac52:389d,7f3a7094763853749e4a69b7786e96c088d97fa471:36c3,518967d374e458e4651856b78ba9997662707ed560f970ed58ec4e:c1ba,5fcd97e74efb8ba45203598a7eab62544ecd65e5620e833884c98363878d71946eb65bb97ed2519763c967d480898339881551125b7a59828fb14e736c5d516589258f6f962e854a745e95:10f0,6da682e55f3164926d128428816e9cc3585e8d5b4e0953c184:7d7e7f8081838485868a8d8f90919293949596989a9b9d9e9fa0a2a3a4a5a6a7a8a9aaabacadaeb0b1b3b5b6b7bbbcbec0c2c3c5c6c7c8cbcccecfd2d4d5d7#d8d9dadbdcdee1e2e4e7e8e9eaebedeeeff1f2f3f4f5f6f7f8f9fafbfdfe,85:000102,4f1e6563685155d34e2764149a9a626b5ac2745f82726da968ee50e7838e7802674052396c997eb150bb5565715e7b5b665273ca82eb67495c715220717d886b95ea965564c58d6181b355846c5562477f2e58924f2455468d4f664c4e0a5c1a88f368a2634e7a0d70e7828d52fa97f65c1154e890b57ecd59628d4a86c782:0c0d,8d6664445c0461516d89793e8bbe78377533547b4f388eab6df15a207ec5795e6c885ba15a76751a80be614e6e1758f075:1f25,727253477ef385:030405060708090a0b0d0e0f101214151618191b1c1d1e2022232425262728292a2d2e2f303132333435363e3f404142444546474b4c4d4e4f505152535455#57585a5b5c5d5f60616263656667696a6b6c6d6e6f707173757677787c7d7f8081,770176db526980dc57235e08593172ee65bd6e7f8bd75c388671534177f362fe65f64ec098df86805b9e8bc653f277e24f7f5c4e9a7659cb5f0f793a58eb4e1667ff4e8b62ed8a93901d52bf662f55dc566c90024ed54f8d91ca99706c0f5e0260435ba489c68bd56536624b99965b:88ff,6388552e53d77626517d852c67a268b36b8a62928f9353d482126dd1758f4e668d4e5b70719f85af66:91d9,7f7287009ecd9f205c5e672f8ff06811675f620d7ad658855eb665706f3185:82838688898a8b8c8d8e909192939495969798999a9d9e9fa0a1a2a3a5a6a7a9abacadb1b2b3b4b5b6b8babbbcbdbebfc0c2c3c4c5c6c7c8cacbcccdced1d2#d4d6d7d8d9dadbdddedfe0e1e2e3e5e6e7e8eaebecedeeeff0f1f2f3f4f5f6f7f8,60555237800d6454887075295e05681362f4971c53cc723d8c016c3477617a0e542e77ac987a821c8bf47855671470c165af64955636601d79c153f84e1d6b7b80865bfa55e356db4f:3a3c,99725df3677e80386002988290015b8b8b:bcf5,641c825864de55fd82cf91654fd77d20901f7c9f50f358516eaf5bbf8bc980839178849c7b97867d96:8b8f,7ee59ad3788e5c817a57904296a7795f5b59635f7b0b84d168ad55067f2974107d2295016240584c4ed65b835979585485:f9fafcfdfe,86:0001020304060708090a0b0c0d0e0f10121314151718191a1b1c1d1e1f20212223242526282a2b2c2d2e2f3031323334353637393a3b3d3e3f40#4142434445464748494a4b4c525355565758595b5c5d5f6061636465666768696a,736d631e8e:4b0f,80ce82d462ac53f06cf0915e592a60016c70574d644a8d2a762b6ee9575b6a8075f06f6d8c:2d08,57666bef889278b363a253f970ad6c645858642a580268e0819b55107cd650188eba6dcc8d9f70eb638f6d9b6ed47ee68404684390036dd896768ba85957727985e4817e75bc8a8a68af52548e22951163d098988e44557c4f5366ff568f60d56d9552435c4959296dfb586b75:301c,606c82148146631167618fe2773a8d:f334,94c15e165385542c70c386:6d6f7072737475767778838485868788898e8f90919294969798999a9b9e9fa0a1a2a5a6abadaeb2b3b7b8b9bbbcbdbebfc1c2c3c5c8cccdd2d3d5d6d7dadc#dde0e1e2e3e5e6e7e8eaebeceff5f6f7fafbfcfdff,87:010405060b0c0e0f10111416,6c405ef7505c4ead5ead633a8247901a6850916e77b3540c94dc5f647ae5687663457b527edf75db507762955934900f51f879c37a8156fe5f9290146d825c60571f541051546e4d56e263a89893817f8715892a9000541e5c6f81c062:d658,81319e3596409a:6e7c,692d59a562d3553e631654c786d96d3c5a0374e6889c6b6a59168c4c5f2f6e7e73a9987d4e3870f75b8c7897633d665a769660cb5b9b5a494e0781556c6a738b4ea167897f515f8065fa671b5fd859845a0187:191b1d1f20242627282a2b2c2d2f303233353638393a3c3d404142434445464a4b4d4f505152545556585a5b5c5d5e5f6162666768696a6b6c6d6f71727375#7778797a7f8081848687898a8c8e8f90919294959698999a9b9c9d9ea0a1a2a3a4,5dcd5fae537197e68fdd684556f4552f60df4e3a6f4d7ef482c7840e59d44f:1f2a,5c3e7eac672a851a5473754f80c355829b4f4f4d6e2d8c135c096170536b761f6e29868a658795fb7eb9543b7a337d0a95ee55e17fc174ee631d87176da17a9d621165a1536763e16c835deb545c94a84e4c6c618bec5c4b65e0829c68a754:3e34,6b:cb66,4e9463425348821e4f:0dae,575e620a96fe6664726952:ffa1,609f8bef661471996790897f785277fd6670563b54389521727a87:a5a6a7a9aaaeb0b1b2b4b6b7b8b9bbbcbebfc1c2c3c4c5c7c8c9cccdcecfd0d4d5d6d7d8d9dadcdddedfe1e2e3e4e6e7e8e9ebecedeff0f1f2f3f4f5f6f7f8#fafbfcfdff,88:0001020405060708090b0c0d0e0f101112141718191a1c1d1e1f2023,7a00606f5e0c6089819d591560dc718470ef6eaa6c5072806a8488ad5e2d4e605ab3559c94e36d177cfb9699620f7ec6778e867e5323971e8f9666875ce14fa072ed4e0b53a6590f54136380952851484ed99c9c7ea454b88d248854823795f26d8e5f265acc663e966973:b02e,53bf817a99857fa15baa96:7750,7ebf76f853a2957699997bb189446e584e617fd479658be660f354cd4eab98795df76a6150cf54118c618427785d9704524a54ee56a395006d885bb56dc6665388:2425262728292a2b2c2d2e2f30313334353637383a3b3d3e3f414243464748494a4b4e4f505152535556585a5b5c5d5e5f6066676a6d6f717374757678797a#7b7c80838687898a8c8e8f90919394959798999a9b9d9e9fa0a1a3a5a6a7a8a9aa,5c0f5b5d6821809655787b11654869544e9b6b47874e978b534f631f643a90aa659c80c18c10519968b0537887f961c86c:c4fb,8c225c5185aa82af950c6b238f9b65b05f:fbc3,4fe18845661f8165732960fa51745211578b5f6290a2884c91925e78674f602759d351:44f6,80f853086c7996c4718a4f:11ee,7f9e673d55c5950879c088967ee3589f620c9700865a5618987b5f908bb884c4915753d965ed5e8f755c60647d6e5a7f7e:eaed,8f6955a75ba360ac65cb738488:acaeafb0b2b3b4b5b6b8b9babbbdbebfc0c3c4c7c8cacbcccdcfd0d1d3d6d7dadbdcdddee0e1e6e7e9eaebecedeeeff2f5f6f7fafbfdff,89:0001030405060708#090b0c0d0e0f1114151617181c1d1e1f20222324262728292c2d2e2f3132333537,9009766377297eda9774859b5b667a7496ea884052cb718f5faa65ec8be25bfb9a6f5de16b896c5b8b:adaf,900a8fc5538b62bc9e:262d,54404e2b82bd7259869c5d1688596daf96c554d14e9a8bb6710954bd960970df6df976d04e25781487125ca95ef68a00989c960e708e6cbf594463a9773c884d6f148273583071d5538c781a96c155015f6671305bb48c1a9a8c6b83592e9e2f79e76768626c4f6f75a17f8a6d0b96336c274ef075d2517b68376f3e908081705996747689:38393a3b3c3d3e3f40424345464748494a4b4c4d4e4f505152535455565758595a5b5c5d6061626364656768696a6b6c6d6e6f707172737475767778797a7c#7d7e808284858788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1,64475c2790657a918c2359da54ac8200836f898180006930564e8036723791ce51b64e5f987563964e1a53f666f3814b591c6db24e0058f9533b63d694f14f:9d0a,886398905937905779fb4eea80f075916c825b9c59e85f5d69058681501a5df24e5977e34ee5827a6291661390915c794ebf5f7981c69038808475ab4ea688d4610f6bc55fc64e4976ca6ea28b:e3ae,8c0a8bd15f027f:fccc,7ece83:356b,56e06bb797f3963459fb541f94f66deb5bc5996e5c395f15969089:a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c3cdd3d4d5d7d8d9dbdddfe0e1e2e4e7e8e9eaecedeef0f1f2f4f5f6f7f8f9fa#fbfcfdfeff,8a:01020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d,537082f16a315a749e705e947f2883b984:2425,836787478fce8d6276c85f719896786c662054df62e54f6381c375c85eb896cd8e0a86f9548f6cf36d8c6c38607f52c775285e7d4f1860a05fe75c24753190ae94c072b96cb96e389149670953:cbf3,4f5191c98bf153c85e7c8fc26de44e8e76c26986865e611a82064f:59de,903e9c7c61096e:1d14,96854e885a3196e84e0e5c7f79b95b878bed7fbd738957df828b90c15401904755bb5cea5fa161086b3272f180b28a:891e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f4041424344454647494a4b4c4d4e4f505152535455565758595a5b5c5d5e#5f606162636465666768696a6b6c6d6e6f7071727374757677787a7b7c7d7e7f80,6d745bd388d598848c6b9a6d9e336e0a51:a443,57a38881539f63f48f9556ed54585706733f6e907f188fdc82d1613f6028966266f07ea68d:8ac3,94a55cb37ca4670860a6960580184e9190e75300966851418fd08574915d665597f55b55531d78386742683d54c9707e5bb08f7d518d572854b1651266828d:5e43,810f846c906d7cdf51ff85fb67a365e96fa186a48e81566a90207682707671e58d2362e952196cfd8d3c600e589e618e66fe8d60624e55b36e23672d8f678a:81828384858687888b8c8d8e8f9091929495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3,94e195f87728680569a8548b4e4d70b88bc86458658b5b857a84503a5be877bb6be18a797c986cbe76cf65a98f975d2d5c5586386808536062187ad96e5b7efd6a1f7ae05f706f335f20638c6da867564e085e108d264ed780c07634969c62db662d627e6cbc8d7571677f695146808753ec906e629854f286f08f998005951785178fd96d5973cd659f771f7504782781fb8d1e94884fa6679575b98bca9707632f9547963584b8632377415f8172f04e896014657462ef6b63653f8a:e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8b:0001020304050608090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#24252728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,5e2775c790d18bc1829d679d652f5431871877e580a281026c414e4b7ec7804c76f4690d6b966267503c4f84574063076b628dbe53ea65e87eb85fd763:1ab7,81:f3f4,7f6e5e1c5cd95236667a79e97a1a8d28709975d46ede6cbb7a924e2d76c55fe0949f88777ec879cd80bf91cd4ef24f17821f54685dde6d328bcc7ca58f7480985e1a549276b15b99663c9aa473e0682a86db6731732a8b:f8db,90107af970db716e62c477a956314e3b845767f152a986c08d2e94f87b518b:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656768696a6b6d6e6f707172737475767778797a7b7c7d7e7f80818283848586#8788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9facb1bbc7d0ea,8c:091e,4f4f6ce8795d9a7b6293722a62fd4e1378168f6c64b08d5a7bc668695e8488c55986649e58ee72b6690e95258ffd8d5857607f008c0651c6634962d95353684c74228301914c55447740707c6d4a517954a88d4459ff6ecb6dc45b5c7d2b4ed47c7d6ed35b5081ea6e0d5b579b0368d58e2a5b977efc603b7eb590b98d70594f63cd79df8db3535265cf79568bc5963b7ec494bb7e825634918967007f6a5c0a907566285de64f5067de505a4f5c57505e:a7#3$,8c:38393a3b3c3d3e3f4042434445484a4b4d4e4f5051525354565758595b5c5d5e5f60636465666768696c6d6e6f707172747576777b7c7d7e7f808183848687#888b8d8e8f90919293959697999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad,4e:8d0c,51404e105eff53454e:15981e,9b325b6c56694e2879ba4e3f53154e47592d723b536e6c1056df80e499976bd3777e9f174e:369f,9f104e:5c6993,82885b5b556c560f4ec453:8d9da3a5ae,97658d5d53:1af5262e3e,8d5c53:6663,52:02080e2d333f404c5e615c,84af52:7d82819093,51827f544e:bbc3c9c2e8e1ebde,4f1b4ef34f:2264,4ef54f:2527092b5e67,65384f:5a5d,8c:aeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec#edeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8d:000102030405060708090a0b0c0d,4f:5f57323d76749189838f7e7baa7cac94e6e8eac5dae3dcd1dff8,50:294c,4ff350:2c0f2e2d,4ffe50:1c0c25287e4355484e6c7ba5a7a9bad6,510650:edece6ee,51:070b,4edd6c3d4f:5865ce,9fa06c467c74516e5dfd9ec999985181591452f9530d8a07531051eb591951554ea051564eb388:6ea4,4eb5811488d279805b3488037fb851:abb1bdbc,8d:0e0f101112131415161718191a1b1c205152575f6568696a6c6e6f717278797a7b7c7d7e7f808283868788898c8d8e8f90929395969798999a9b9c9d9ea0a1#a2a4a5a6a7a8a9aaabacadaeafb0b2b6b7b9bbbdc0c1c2c5c7c8c9cacdd0d2d3d4,51:c796a2a5,8b:a0a6a7aab4b5b7c2c3cbcfced2d3d4d6d8d9dcdfe0e4e8e9eef0f3f6f9fcff,8c:000204070c0f1112141516191b181d1f202125272a2b2e2f32333536,53:697a,96:1d2221312a3d3c4249545f676c7274888d97b0,90:979b9d99aca1b4b3b6ba,8d:d5d8d9dce0e1e2e5e6e7e9edeef0f1f2f4f6fcfeff,8e:00010203040607080b0d0e1011121315161718191a1b1c202124252627282b2d303233343637383b3c3e#3f4345464c4d4e4f505354555657585a5b5c5d5e5f60616263646567686a6b6e71,90:b8b0cfc5bed0c4c7d3e6e2dcd7dbebeffe,91:04221e23312f394346,520d594252:a2acadbe,54ff52:d0d6f0,53df71ee77cd5ef451:f5fc,9b2f53b65f01755a5def57:4ca9a1,58:7ebcc5d1,57:292c2a33392e2f5c3b4269856b867c7b686d7673ada48cb2cfa7b493a0d5d8dad9d2b8f4eff8e4dd,8e:73757778797a7b7d7e808283848688898a8b8c8d8e91929395969798999a9b9d9fa0a1a2a3a4a5a6a7a8a9aaadaeb0b1b3b4b5b6b7b8b9bbbcbdbebfc0c1c2#c3c4c5c6c7c8c9cacbcccdcfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4,58:0b0d,57:fded,58:001e194420656c81899a80,99a89f1961ff82:797d7f8f8aa8848e919799abb8beb0c8cae398b7aecbccc1a9b4a1aa9fc4cea4e1,830982:f7e4,83:0f07,82:dcf4d2d8,830c82:fbd3,83:111a061415,82:e0d5,83:1c515b5c08923c34319b5e2f4f47435f4017602d3a336665,8e:e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,8f:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223#2425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344,83:681b696c6a6d6eb078b3b4a0aa939c857cb6a97db87b989ea8babcc1,840183:e5d8,580784:180b,83:ddfdd6,84:1c381106,83:d4df,84:0f03,83:f8f9eac5c0,842683:f0e1,84:5c515a597387887a89783c4669768c8e316dc1cdd0e6bdd3cabfbae0a1b9b497e5e3,850c750d853884f085:391f3a,8f:45464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656a808c929da0a1a2a4a5a6a7aaacadaeafb2b3b4b5b7b8babbbcbfc0c3c6#c9cacbcccdcfd2d6d7dae0e1e3e7eceff1f2f4f5f6fafbfcfeff,90:07080c0e131518,85:563b,84:fffc,85:594868645e7a,77a285:43727ba4a8878f79ae9c85b9b7b0d3c1dcff,86:270529163c,5efe5f0859:3c41,803759:555a58,530f5c:22252c34,62:4c6a9fbbcadad7ee,632262f663:394b43adf6717a8eb46dac8a69aebcf2f8e0ffc4dece,645263:c6be,64:45410b1b200c26215e846d96,90:191c2324252728292a2b2c303132333437393a3d3f4043454648494a4b4c4e545556595a5c5d5e5f6061646667696a6b6c6f70717273767778797a7b7c7e81#84858687898a8c8d8e8f90929496989a9c9e9fa0a4a5a7a8a9abadb2b7bcbdbfc0,64:7ab7b899bac0d0d7e4e2,65:09252e,5f:0bd2,75195f1153:5ff1fde9e8fb,54:1216064b5253545643215759233282947771649a9b8476669dd0adc2b4d2a7a6d3d472a3d5bbbfccd9dadca9aaa4ddcfde,551b54e7552054fd551454f355:22230f11272a678fb5496d41553f503c,90:c2c3c6c8c9cbcccdd2d4d5d6d8d9dadedfe0e3e4e5e9eaeceef0f1f2f3f5f6f7f9fafbfcff,91:00010305060708090a0b0c0d0e0f1011121314151617181a1b1c#1d1f20212425262728292a2b2c2d2e30323334353637383a3b3c3d3e3f40414244,55:375675767733305c8bd283b1b988819f7ed6917bdfbdbe9499eaf7c9,561f55:d1ebecd4e6ddc4efe5f2f3cccde8f5e4,8f9456:1e080c012423,55fe56:00272d5839572c4d62595c4c548664716b7b7c8593afd4d7dde1f5ebf9ff,57:040a091c,5e:0f191411313b3c,91:454748515354555658595b5c5f606667686b6d737a7b7c808182838486888a8e8f939495969798999c9d9e9fa0a1a4a5a6a7a8a9abacb0b1b2b3b6b7b8b9bb#bcbdbebfc0c1c2c3c4c5c6c8cbd0d2d3d4d5d6d7d8d9dadbdddedfe0e1e2e3e4e5,5e:3744545b5e61,5c:8c7a8d9096889899919a9cb5a2bdacabb1a3c1b7c4d2e4cbe5,5d:020327262e241e061b583e343d6c5b6f5d6b4b4a697482999d,8c735d:b7c5,5f:73778287898c95999ca8adb5bc,88625f6172:adb0b4b7b8c3c1cecdd2e8efe9f2f4f7,730172f3730372fa91:e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,92:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324#25262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445,72fb73:1713210a1e1d152239252c3831504d57606c6f7e,821b592598e759:2402,99:636768696a6b6c74777d8084878a8d9091939495,5e:80918b96a5a0b9b5beb3,8d535e:d2d1dbe8ea,81ba5f:c4c9d6cf,60035fee60045f:e1e4fe,60:0506,5f:eaedf8,60:1935261b0f0d292b0a3f2178797b7a42,92:464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727375767778797a7b7c7d7e7f808182838485#868788898a8b8c8d8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7,60:6a7d969aad9d83928c9becbbb1ddd8c6dab4,61:20261523,60f461:000e2b4a75ac94a7b7d4f5,5fdd96b395:e9ebf1f3f5f6fcfe,96:030406080a0b0c0d0f12151617191a,4e2c723f62156c:35545c4aa38590948c6869747686a9d0d4adf7f8f1d7b2e0d6faebeeb1d3effe,92:a8a9aaabacadafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8#e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,93:00010203040506070809,6d:39270c43480704190e2b4d2e351a4f525433916f9ea05e93945c607c63,6e1a6d:c7c5de,6e0e6d:bfe0,6e116d:e6ddd9,6e166dab6e0c6dae6e:2b6e4e6bb25f865354322544dfb198e0,6f2d6e:e2a5a7bdbbb7d7b4cf8fc29f,6f:6246472415,6ef96f:2f364b742a0929898d8c78727c7ad1,93:0a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3f40414243444546474849#4a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696b,6f:c9a7b9b6c2e1eedee0ef,70:1a231b39354f5e,5b:80849593a5b8,752f9a9e64345b:e4ee,89305bf08e478b078f:b6d3d5e5eee4e9e6f3e8,90:05040b26110d162135362d2f445152506858625b,66b990:747d8288838b,5f:50575658,5c3b54ab5c:5059,5b715c:6366,7fbc5f:2a292d,82745f3c9b3b5c6e59:81838da9aaa3,93:6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab#acadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cbcccd,59:97caab9ea4d2b2afd7be,5a:0506,59dd5a0859:e3d8f9,5a:0c09323411231340674a553c6275,80ec5a:aa9b777abeebb2d2d4b8e0e3f1d6e6d8dc,5b:091716323740,5c:151c,5b:5a6573515362,9a:7577787a7f7d808185888a90929396989b9c9d9fa0a2a3a5a7,7e:9fa1a3a5a8a9,93:cecfd0d1d2d3d4d5d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,94:000102030405060708090a0b0c0d#0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e,7e:adb0bec0c1c2c9cbccd0d4d7dbe0e1e8ebeeeff1f2,7f0d7e:f6fafbfe,7f:01020307080b0c0f111217191c1b1f212223242526272a2b2c2d2f3031323335,5e7a757f5ddb753e909573:8e91aea29fcfc2d1b7b3c0c9c8e5d9,987c740a73:e9e7debaf2,74:0f2a5b262528302e2c,94:2f303132333435363738393a3b3c3d3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6c6d6e6f#707172737475767778797a7b7c7d7e7f8081828384919698c7cfd3d4dae6fb,95:1c20,74:1b1a415c575559776d7e9c8e8081878b9ea8a990a7d2ba,97:eaebec,67:4c535e4869a5876a7398a775a89ead8b777cf0,680967d8680a67:e9b0,680c67:d9b5dab3dd,680067:c3b8e2,680e67:c1fd,68:323360614e624464831d55664167403e4a4929b58f7477936bc2,696e68fc69:1f20,68f995:27333d43484b555a606e74757778797a7b7c7d7e808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa#abacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb,692468f069:0b0157,68e369:10713960425d846b80987834cc8788ce896663799ba7bbabadd4b1c1cadf95e08dff,6a2f69ed6a:171865,69f26a:443ea0505b358e793d28587c9190a997ab,73:3752,6b:8182878492938d9a9ba1aa,8f:6b6d71727375767877797a7c7e818284878b,95:cccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7ecff,96:0713181b1e20232425262728292b2c2d2f303738393a3e41434a4e4f5152535657#58595a5c5d5e606365666b6d6e6f70717378797a7b7c7d7e7f808182838487898a,8f:8d8e8f989a,8ece62:0b171b1f222125242c,81e774:eff4ff,75:0f1113,65:34eeeff0,66:0a19,677266:031500,708566:f71d34313635,800666:5f54414f56615777848ca79dbedbdce6e9,8d:3233363b3d4045464849474d5559,89:c7cacbcccecfd0d1,72:6e9f5d666f7e7f848b8d8f92,63:0832b0,96:8c8e91929395969a9b9d9e9fa0a1a2a3a4a5a6a8a9aaabacadaeafb1b2b4b5b7b8babbbfc2c3c8cacbd0d1d3d4d6d7d8d9dadbdcdddedfe1e2e3e4e5e6e7eb#ecedeef0f1f2f4f5f8fafbfcfdff,97:0203050a0b0c10111214151718191a1b1d1f20,64:3fd8,80046b:eaf3fdf5f9,6c:0507060d1518191a2129242a32,65:35556b,72:4d525630,8662521680:9f9c93bc,670a80:bdb1abadb4b7e7e8e9eadbc2c4d9cdd7,671080:ddebf1f4ed,81:0d0e,80:f2fc,671581128c5a81:361e2c1832484c5374595a7160697c7d6d67,584d5ab581:888291,6ed581:a3aacc,672681:cabb,97:2122232425262728292b2c2e2f3133343536373a3b3c3d3f404142434445464748494a4b4c4d4e4f5051545557585a5c5d5f63646667686a6b6c6d6e6f7071#72757778797a7b7d7e7f8081828384868788898a8c8e8f9093959697999a9b9c9d,81:c1a6,6b:243739434659,98:d1d2d3d5d9da,6bb35f406bc289f365909f5165:93bcc6c4c3ccced2d6,70:809c969dbbc0b7abb1e8ca,71:1013162f31735c6845724a787a98b3b5a8a0e0d4e7f9,72:1d28,706c71:1866b9,62:3e3d434849,79:3b4046495b5c535a6257606f677a858a9aa7b3,5f:d1d0,97:9e9fa1a2a4a5a6a7a8a9aaacaeb0b1b3b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3#e4e5e8eeeff0f1f2f4f7f8f9fafbfcfdfeff,98:000102030405060708090a0b0c0d0e,60:3c5d5a67415963ab,61:060d5da99dcbd1,620680:807f,6c:93f6,6dfc77:f6f8,78:0009171811,65ab78:2d1c1d393a3b1f3c252c23294e6d56572650474c6a9b939a879ca1a3b2b9a5d4d9c9ecf2,790578f479:13241e34,9f9b9e:f9fbfc,76f177:040d,76f977:07081a22192d263538505147435a68,98:0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d#4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e,77:62657f8d7d808c919fa0b0b5bd,75:3a404e4b485b727983,7f:58615f,8a487f:68747179817e,76:cde5,883294:8586878b8a8c8d8f909497959a9b9ca3a4abaaadacafb0b2b4b6b7b8b9babcbdbfc4c8c9cacbcccdced0d1d2d5d6d7d9d8dbdedfe0e2e4e5e7e8ea,98:6f70717273748b8e929599a3a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcfd0d4d6d7dbdcdde0e1e2e3e4#e5e6e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,99:0001020304050607,94:e9ebeeeff3f4f5f7f9fcfdff,95:03020607090a0d0e0f1213141516181b1d1e1f222a2b292c3132343637383c3e3f4235444546494c4e4f525354565758595b5e5f5d61626465666768696a6b6c6f7172733a,77:e7ec,96c979:d5ede3eb,7a065d477a:03021e14,99:08090a0b0c0e0f1112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2f303132333435363738393a3b3c3d3e3f40414243444546474849#4a4b4c4d4e4f50515253565758595a5b5c5d5e5f60616264667378797b7e828389,7a:393751,9ecf99a57a7076:888e9399a4,74:dee0,752c9e:202228292a2b2c3231363837393a3e414244464748494b4c4e5155575a5b5c5e63666768696a6b6c716d73,75:929496a09daca3b3b4b8c4b1b0c3c2d6cde3e8e6e4ebe7,760375:f1fcff,76:1000050c170a25181519,99:8c8e9a9b9c9d9e9fa0a1a2a3a4a6a7a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8#d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9,76:1b3c2220402d303f35433e334d5e545c566b6f,7fca7a:e6787980868895a6a0aca8adb3,88:6469727d7f82a2c6b7bcc9e2cee3e5f1,891a88:fce8fef0,89:2119131b0a342b3641667b,758b80e576:b2b4,77dc80:1214161c20222526272928310b3543464d526971,898398:788083,99:fafbfcfdfeff,9a:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738#393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859,98:898c8d8f949a9b9e9fa1a2a5a6,86:4d546c6e7f7a7c7ba88d8bac9da7a3aa93a9b6c4b5ceb0bab1afc9cfb4e9f1f2edf3d0,871386:def4dfd8d1,87:0307,86f887:080a0d09233b1e252e1a3e48343129373f82227d7e7b60704c6e8b53637c64596593afa8d2,9a:5a5b5c5d5e5f606162636465666768696a6b7283898d8e949599a6a9aaabacadaeafb2b3b4b5b9bbbdbebfc3c4c6c7c8c9cacdcecfd0d2d4d5d6d7d9dadbdc#dddee0e2e3e4e5e7e8e9eaeceef0f1f2f3f4f5f6f7f8fafcfdfeff,9b:000102040506,87:c68885ad9783abe5acb5b3cbd3bdd1c0cadbeae0ee,88:1613,87fe88:0a1b21393c,7f:36424445,82107a:fafd,7b:080304150a2b0f47382a192e31202524333e1e585a45754c5d606e7b62727190a6a7b8ac9da885aa9ca2abb4d1c1ccdddae5e6ea,7c0c7b:fefc,7c:0f160b,9b:07090a0b0c0d0e1011121415161718191a1b1c1d1e2021222425262728292a2b2c2d2e3031333435363738393a3d3e3f40464a4b4c4e50525355565758595a#5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b,7c:1f2a26384140,81fe82:010204,81ec884482:2122232d2f282b383b33343e44494b4f5a5f68,88:7e8588d8df,895e7f:9d9fa7afb0b2,7c7c65497c:919d9c9ea2b2bcbdc1c7cccdc8c5d7e8,826e66a87f:bfced5e5e1e6e9eef3,7cf87d:77a6ae,7e:479b,9e:b8b4,8d:73849491b1676d,8c:4749,91:4a504e4f64,9b:7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba#bbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb,91:626170696f7d7e7274798c85908d91a2a3aaadaeafb5b4ba,8c559e7e8d:b8eb,8e:055969,8d:b5bfbcbac4d6d7dadececfdbc6ecf7f8e3f9fbe4,8e098dfd8e:141d1f2c2e232f3a4039353d3149414251524a70767c6f74858f94909c9e,8c:78828a859894,659b89:d6dedadc,9b:dcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9c:000102030405060708090a0b0c0d0e0f101112131415161718191a#1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b,89:e5ebef,8a3e8b26975396:e9f3ef,97:0601080f0e2a2d303e,9f:808385868788898a8c,9efe9f:0b0d,96:b9bcbdced2,77bf96e092:8eaec8,93:3e6aca8f,94:3e6b,9c:7f8285868788,7a239c:8b8e90919294959a9b9e9fa0a1a2a3a5a6a7a8a9abadaeb0b1b2b3b4b5b6b7babbbcbdc4c5c6c7cacb3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a#7b7d7e808384898a8c8f93969798999daaacafb9bebfc0c1c2c8c9d1d2dadbe0e1cccdcecfd0d3d4d5d7d8d9dcdddfe2,97:7c85919294afaba3b2b4,9a:b1b0b7,9e589a:b6babcc1c0c5c2cbccd1,9b:45434749484d51,98e899:0d2e5554,9a:dfe1e6efebfbedf9,9b:080f131f23,9e:bdbe,7e3b9e:8287888b92,93d69e:9d9fdbdcdde0dfe2e9e7e5eaef,9f:222c2f39373d3e44,9c:e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9d:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021#22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142#92$434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081#82838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2#92$a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1#e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff,9e:000102#92$030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e24272e30343b3c404d5052535456595d5f606162656e6f727475767778797a7b7c7d80#8183848586898a8c8d8e8f90919495969798999a9b9c9ea0a1a2a3a4a5a7a8a9aa#92$abacadaeafb0b1b2b3b5b6b7b9babcbfc0c1c2c3c5c6c7c8cacbccd0d2d3d5d6d7d9dadee1e3e4e6e8ebecedeef0f1f2f3f4f5f6f7f8fafdff,9f:000102030405#060708090a0c0f1112141516181a1b1c1d1e1f21232425262728292a2b2d2e3031#92$3233343536383a3c3f4041424345464748494a4b4c4d4e4f52535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778#797a7b7c7d7e81828d8e8f9091929394959697989c9d9ea1a2a3a4a5,f9:2c7995e7f1#92$,fa:0c0d0e0f111314181f20212324272829,e8:15161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243#4445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364");
112
109
  let index = 0;
113
110
  this.#data = dataText.match(/..../g);
114
111
  for (let i = 0x81; i <= 0xfe; i++) {
115
112
  for (let j = 0x40; j <= 0xfe; j++) {
116
- this.#U2Ghash[this.#data[index++]] = ("%" + i.toString(16) + "%" + j.toString(16)).toUpperCase();
113
+ this.#U2Ghash[this.#data[index++]] = `%${i.toString(16)}%${j.toString(16)}`.toUpperCase();
117
114
  }
118
115
  }
119
- for (let key in this.#U2Ghash) {
120
- this.#G2Uhash[this.#U2Ghash[key]] = key;
116
+ for (const key in this.#U2Ghash) {
117
+ const u2ghashValue = Reflect.get(this.#U2Ghash, key);
118
+ Reflect.set(this.#G2Uhash, u2ghashValue, key);
121
119
  }
122
120
  }
123
121
  handleText(text) {
124
122
  text = text
125
- .replace(/#(\d+)\$/g, function (a, b) {
123
+ .replace(/#(\d+)\$/g, function (_, b) {
126
124
  return Array(+b + 3).join("#");
127
125
  })
128
126
  .replace(/#/g, "####")
129
- .replace(/(\w\w):([\w#]+)(?:,|$)/g, function (a, hd, dt) {
127
+ .replace(/(\w\w):([\w#]+)(?:,|$)/g, function (_, hd, dt) {
130
128
  return dt.replace(/../g, function (a) {
131
129
  if (a != "##") {
132
130
  return hd + a;
@@ -146,8 +144,8 @@ class GBKEncoder {
146
144
  * @param str
147
145
  */
148
146
  encode(str) {
149
- let that = this;
150
- return [...str].reduce((result, val, i) => {
147
+ const that = this;
148
+ return [...str].reduce((result, val) => {
151
149
  return result + toGBK(val);
152
150
  }, "");
153
151
  function toGBK(val) {
@@ -156,7 +154,7 @@ class GBKEncoder {
156
154
  const codePoint = val.codePointAt(i);
157
155
  const code = String.fromCodePoint(codePoint);
158
156
  let key = codePoint.toString(16);
159
- key.length != 4 && (key = ("000" + key).match(/....$/)?.[0]);
157
+ key.length != 4 && (key = `000${key}`.match(/....$/)?.[0]);
160
158
  /* Add up i by code.length */
161
159
  i += code.length - 1;
162
160
  /* If code is in ascii range */
@@ -170,9 +168,9 @@ class GBKEncoder {
170
168
  continue;
171
169
  }
172
170
  /*
173
- If 2 or more char combines to one visible code,
174
- or just this code is not in GBK
175
- */
171
+ If 2 or more char combines to one visible code,
172
+ or just this code is not in GBK
173
+ */
176
174
  result += toGBK(`&#${codePoint};`);
177
175
  }
178
176
  return result;
@@ -183,18 +181,18 @@ class GBKEncoder {
183
181
  * @param str
184
182
  */
185
183
  decode(str) {
186
- let GBKMatcher = /%[0-9A-F]{2}%[0-9A-F]{2}/;
187
- let UTFMatcher = /%[0-9A-F]{2}/;
184
+ const GBKMatcher = /%[0-9A-F]{2}%[0-9A-F]{2}/;
185
+ const UTFMatcher = /%[0-9A-F]{2}/;
188
186
  // let gbk = true;
189
187
  let utf = true;
190
188
  const that = this;
191
189
  while (utf) {
192
- let gbkMatch = str.match(GBKMatcher);
193
- let utfMatch = str.match(UTFMatcher);
190
+ const gbkMatch = str.match(GBKMatcher);
191
+ const utfMatch = str.match(UTFMatcher);
194
192
  // gbk = Boolean(gbkMatch);
195
193
  utf = Boolean(utfMatch);
196
194
  if (gbkMatch && gbkMatch in that.#G2Uhash) {
197
- str = str.replace(gbkMatch, String.fromCharCode(("0x" + that.#G2Uhash[gbkMatch])));
195
+ str = str.replace(gbkMatch, String.fromCharCode(`0x${that.#G2Uhash[gbkMatch]}`));
198
196
  }
199
197
  else {
200
198
  str = str.replace(utfMatch, decodeURIComponent(utfMatch));
@@ -208,7 +206,7 @@ const TryCatch = function (...args) {
208
206
  /* 定义变量和函数 */
209
207
  let callbackFunction = null;
210
208
  let context = null;
211
- let handleError = (error) => { };
209
+ let handleError = () => { };
212
210
  let defaultDetails = {
213
211
  log: true,
214
212
  };
@@ -240,7 +238,7 @@ const TryCatch = function (...args) {
240
238
  run(callback, __context__) {
241
239
  callbackFunction = callback;
242
240
  context = __context__ || this;
243
- let result = executeTryCatch(callbackFunction, handleError, context);
241
+ const result = executeTryCatch(callbackFunction, handleError, context);
244
242
  return result !== void 0 ? result : TryCatchCore;
245
243
  },
246
244
  };
@@ -264,8 +262,8 @@ const TryCatch = function (...args) {
264
262
  catch (error) {
265
263
  if (defaultDetails.log) {
266
264
  callback = callback;
267
- console.log(`%c ${callback?.name ? callback?.name : callback + "出现错误"} `, "color: #f20000");
268
- console.log(`%c 错误原因:${error}`, "color: #f20000");
265
+ console.log(`%c ${callback?.name ? callback?.name : `${callback}`} `, "color: #f20000");
266
+ console.log(`%c ${error}`, "color: #f20000");
269
267
  console.trace(callback);
270
268
  }
271
269
  if (handleErrorFunc) {
@@ -284,9 +282,9 @@ const TryCatch = function (...args) {
284
282
 
285
283
  class CommonUtil {
286
284
  assign(target = {}, source = {}, isAdd = false) {
287
- let UtilsContext = this;
285
+ const UtilsContext = this;
288
286
  if (Array.isArray(source)) {
289
- let canTraverse = source.filter((item) => {
287
+ const canTraverse = source.filter((item) => {
290
288
  return typeof item === "object";
291
289
  });
292
290
  if (!canTraverse.length) {
@@ -302,34 +300,34 @@ class CommonUtil {
302
300
  if (isAdd) {
303
301
  for (const sourceKeyName in source) {
304
302
  const targetKeyName = sourceKeyName;
305
- let targetValue = target[targetKeyName];
306
- let sourceValue = source[sourceKeyName];
303
+ const targetValue = Reflect.get(target, targetKeyName);
304
+ const sourceValue = Reflect.get(source, sourceKeyName);
307
305
  if (typeof sourceValue === "object" &&
308
306
  sourceValue != null &&
309
307
  sourceKeyName in target &&
310
308
  !UtilsContext.isDOM(sourceValue)) {
311
309
  /* 源端的值是object类型,且不是元素节点 */
312
- target[sourceKeyName] = UtilsContext.assign(targetValue, sourceValue, isAdd);
310
+ Reflect.set(target, sourceKeyName, UtilsContext.assign(targetValue, sourceValue, isAdd));
313
311
  continue;
314
312
  }
315
- target[sourceKeyName] = sourceValue;
313
+ Reflect.set(target, sourceKeyName, sourceValue);
316
314
  }
317
315
  }
318
316
  else {
319
317
  for (const targetKeyName in target) {
320
318
  if (targetKeyName in source) {
321
- let targetValue = target[targetKeyName];
322
- let sourceValue = source[targetKeyName];
319
+ const targetValue = Reflect.get(target, targetKeyName);
320
+ const sourceValue = Reflect.get(source, targetKeyName);
323
321
  if (typeof sourceValue === "object" &&
324
322
  sourceValue != null &&
325
323
  !UtilsContext.isDOM(sourceValue) &&
326
324
  Object.keys(sourceValue).length) {
327
325
  /* 源端的值是object类型,且不是元素节点 */
328
- target[targetKeyName] = UtilsContext.assign(targetValue, sourceValue, isAdd);
326
+ Reflect.set(target, targetKeyName, UtilsContext.assign(targetValue, sourceValue, isAdd));
329
327
  continue;
330
328
  }
331
329
  /* 直接赋值 */
332
- target[targetKeyName] = sourceValue;
330
+ Reflect.set(target, targetKeyName, sourceValue);
333
331
  }
334
332
  }
335
333
  }
@@ -337,7 +335,7 @@ class CommonUtil {
337
335
  }
338
336
  isNull(...args) {
339
337
  let result = true;
340
- let checkList = [...args];
338
+ const checkList = [...args];
341
339
  for (const objItem of checkList) {
342
340
  let itemResult = false;
343
341
  if (objItem === null || objItem === undefined) {
@@ -363,11 +361,12 @@ class CommonUtil {
363
361
  case "boolean":
364
362
  itemResult = !objItem;
365
363
  break;
366
- case "function":
367
- let funcStr = objItem.toString().replace(/\s/g, "");
364
+ case "function": {
365
+ const funcStr = objItem.toString().replace(/\s/g, "");
368
366
  /* 排除()=>{}、(xxx="")=>{}、function(){}、function(xxx=""){} */
369
367
  itemResult = Boolean(funcStr.match(/^\(.*?\)=>\{\}$|^function.*?\(.*?\)\{\}$/));
370
368
  break;
369
+ }
371
370
  }
372
371
  }
373
372
  result = result && itemResult;
@@ -388,18 +387,23 @@ class CommonUtil {
388
387
  return target instanceof Node;
389
388
  }
390
389
  isNotNull(...args) {
391
- let UtilsContext = this;
390
+ const UtilsContext = this;
392
391
  return !UtilsContext.isNull.apply(this, args);
393
392
  }
394
393
  deepClone(obj) {
395
- let UtilsContext = this;
394
+ const UtilsContext = this;
396
395
  if (obj === void 0)
397
396
  return void 0;
398
397
  if (obj === null)
399
398
  return null;
400
- let clone = obj instanceof Array ? [] : {};
399
+ const clone = obj instanceof Array ? [] : {};
401
400
  for (const [key, value] of Object.entries(obj)) {
402
- clone[key] = typeof value === "object" ? UtilsContext.deepClone(value) : value;
401
+ if (typeof value === "object") {
402
+ Reflect.set(clone, key, UtilsContext.deepClone(value));
403
+ }
404
+ else {
405
+ Reflect.set(clone, key, value);
406
+ }
403
407
  }
404
408
  return clone;
405
409
  }
@@ -426,11 +430,11 @@ class CommonUtil {
426
430
  }
427
431
  TryCatch()
428
432
  .config({ log: false })
429
- .error((error) => {
433
+ .error(() => {
430
434
  TryCatch()
431
435
  .error(() => {
432
436
  try {
433
- result = new Function("return " + data)();
437
+ result = new Function(`return ${data}`)();
434
438
  }
435
439
  catch (error2) {
436
440
  if (typeof errorCallBack === "function") {
@@ -441,14 +445,14 @@ class CommonUtil {
441
445
  .run(() => {
442
446
  if (data &&
443
447
  /^[\],:{}\s]*$/.test(data
444
- .replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
445
- .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
448
+ .replace(/\\(?:["\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
449
+ .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?/g, "]")
446
450
  .replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) {
447
- result = new Function("return " + data)();
451
+ result = new Function(`return ${data}`)();
448
452
  }
449
453
  else {
450
454
  if (typeof errorCallBack === "function") {
451
- errorCallBack(new Error("target is not a JSON"));
455
+ errorCallBack(new Error("target is not JSON object"));
452
456
  }
453
457
  }
454
458
  });
@@ -460,7 +464,7 @@ class CommonUtil {
460
464
  return result;
461
465
  }
462
466
  }
463
- let commonUtil = new CommonUtil();
467
+ const commonUtil = new CommonUtil();
464
468
 
465
469
  class UtilsGMCookie {
466
470
  windowApi = {
@@ -489,14 +493,14 @@ class UtilsGMCookie {
489
493
  if (typeof cookieName !== "string") {
490
494
  throw new TypeError("Utils.GMCookie.get 参数cookieName 必须为字符串");
491
495
  }
492
- let cookies = this.getCookiesList();
496
+ const cookies = this.getCookiesList();
493
497
  let findValue = void 0;
494
498
  for (const cookieItem of cookies) {
495
- let item = cookieItem.trim();
496
- let itemSplit = item.split("=");
497
- let itemName = itemSplit[0];
499
+ const item = cookieItem.trim();
500
+ const itemSplit = item.split("=");
501
+ const itemName = itemSplit[0];
498
502
  itemSplit.splice(0, 1);
499
- let itemValue = decodeURIComponent(itemSplit.join(""));
503
+ const itemValue = decodeURIComponent(itemSplit.join(""));
500
504
  if (itemName === cookieName) {
501
505
  findValue = {
502
506
  domain: this.windowApi.window.location.hostname,
@@ -526,7 +530,7 @@ class UtilsGMCookie {
526
530
  if (option == null) {
527
531
  throw new Error("Utils.GMCookie.list 参数不能为空");
528
532
  }
529
- let resultData = [];
533
+ const resultData = [];
530
534
  try {
531
535
  let defaultOption = {
532
536
  url: this.windowApi.window.location.href,
@@ -535,16 +539,16 @@ class UtilsGMCookie {
535
539
  path: "/",
536
540
  };
537
541
  defaultOption = commonUtil.assign(defaultOption, option);
538
- let cookies = this.getCookiesList();
542
+ const cookies = this.getCookiesList();
539
543
  cookies.forEach((item) => {
540
544
  item = item.trim();
541
- let itemSplit = item.split("=");
542
- let itemName = itemSplit[0];
545
+ const itemSplit = item.split("=");
546
+ const itemName = itemSplit[0];
543
547
  itemSplit.splice(0, 1);
544
- let itemValue = decodeURIComponent(itemSplit.join(""));
545
- let nameRegexp = defaultOption.name instanceof RegExp
548
+ const itemValue = decodeURIComponent(itemSplit.join(""));
549
+ const nameRegexp = defaultOption.name instanceof RegExp
546
550
  ? defaultOption.name
547
- : new RegExp("^" + defaultOption.name, "g");
551
+ : new RegExp(`^${defaultOption.name}`, "g");
548
552
  if (itemName.match(nameRegexp)) {
549
553
  resultData.push({
550
554
  domain: this.windowApi.window.location.hostname,
@@ -578,7 +582,7 @@ class UtilsGMCookie {
578
582
  if (option == null) {
579
583
  throw new Error("Utils.GMCookie.list 参数不能为空");
580
584
  }
581
- let resultData = [];
585
+ const resultData = [];
582
586
  let defaultOption = {
583
587
  url: this.windowApi.window.location.href,
584
588
  domain: this.windowApi.window.location.hostname,
@@ -586,16 +590,16 @@ class UtilsGMCookie {
586
590
  path: "/",
587
591
  };
588
592
  defaultOption = commonUtil.assign(defaultOption, option);
589
- let cookies = this.getCookiesList();
593
+ const cookies = this.getCookiesList();
590
594
  cookies.forEach((item) => {
591
595
  item = item.trim();
592
- let itemSplit = item.split("=");
593
- let itemName = itemSplit[0];
596
+ const itemSplit = item.split("=");
597
+ const itemName = itemSplit[0];
594
598
  itemSplit.splice(0, 1);
595
- let itemValue = decodeURIComponent(itemSplit.join(""));
596
- let nameRegexp = defaultOption.name instanceof RegExp
599
+ const itemValue = decodeURIComponent(itemSplit.join(""));
600
+ const nameRegexp = defaultOption.name instanceof RegExp
597
601
  ? defaultOption.name
598
- : new RegExp("^" + defaultOption.name, "g");
602
+ : new RegExp(`^${defaultOption.name}`, "g");
599
603
  if (itemName.match(nameRegexp)) {
600
604
  resultData.push({
601
605
  domain: this.windowApi.window.location.hostname,
@@ -635,17 +639,12 @@ class UtilsGMCookie {
635
639
  expirationDate: Math.floor(Date.now()) + 60 * 60 * 24 * 30,
636
640
  };
637
641
  defaultOption = commonUtil.assign(defaultOption, option);
638
- let life = defaultOption.expirationDate
642
+ const life = defaultOption.expirationDate
639
643
  ? defaultOption.expirationDate
640
644
  : Math.floor(Date.now()) + 60 * 60 * 24 * 30;
641
- let cookieStr = defaultOption.name +
642
- "=" +
643
- decodeURIComponent(defaultOption.value) +
644
- ";expires=" +
645
- new Date(life).toGMTString() +
646
- "; path=/";
645
+ let cookieStr = `${defaultOption.name}=${decodeURIComponent(defaultOption.value)};expires=${new Date(life).toGMTString()}; path=/`;
647
646
  if (commonUtil.isNull(defaultOption.domain)) {
648
- cookieStr += "; domain=" + defaultOption.domain;
647
+ cookieStr += `; domain=${defaultOption.domain}`;
649
648
  }
650
649
  this.windowApi.document.cookie = cookieStr;
651
650
  }
@@ -697,14 +696,14 @@ class UtilsGMCookie {
697
696
  if (cookieStr.trim() === "") {
698
697
  return [];
699
698
  }
700
- let cookies = cookieStr.split(";");
701
- let result = [];
699
+ const cookies = cookieStr.split(";");
700
+ const result = [];
702
701
  for (const cookieItem of cookies) {
703
- let item = cookieItem.trim();
704
- let itemSplit = item.split("=");
705
- let itemName = itemSplit[0];
702
+ const item = cookieItem.trim();
703
+ const itemSplit = item.split("=");
704
+ const itemName = itemSplit[0];
706
705
  itemSplit.splice(0, 1);
707
- let itemValue = decodeURIComponent(itemSplit.join(""));
706
+ const itemValue = decodeURIComponent(itemSplit.join(""));
708
707
  result.push({
709
708
  key: itemName,
710
709
  value: itemValue,
@@ -714,6 +713,7 @@ class UtilsGMCookie {
714
713
  }
715
714
  }
716
715
 
716
+ /* eslint-disable */
717
717
  // ==UserScript==
718
718
  // @name ajaxHooker
719
719
  // @author cxxjackie
@@ -1764,15 +1764,15 @@ class GMMenu {
1764
1764
  */
1765
1765
  init() {
1766
1766
  for (let index = 0; index < this.$data.data.length; index++) {
1767
- let menuOption = this.$data.data[index]["data"];
1767
+ const menuOption = this.$data.data[index]["data"];
1768
1768
  menuOption.enable = Boolean(this.getLocalMenuData(menuOption.key, menuOption.enable));
1769
1769
  if (typeof menuOption.showText !== "function") {
1770
1770
  menuOption.showText = (menuText, menuEnable) => {
1771
1771
  if (menuEnable) {
1772
- return this.$emoji.success + " " + menuText;
1772
+ return `${this.$emoji.success} ${menuText}`;
1773
1773
  }
1774
1774
  else {
1775
- return this.$emoji.error + " " + menuText;
1775
+ return `${this.$emoji.error} ${menuText}`;
1776
1776
  }
1777
1777
  };
1778
1778
  }
@@ -1783,7 +1783,7 @@ class GMMenu {
1783
1783
  * @param menuOptions 如果存在,使用它
1784
1784
  */
1785
1785
  register(menuOptions) {
1786
- let that = this;
1786
+ const that = this;
1787
1787
  if (menuOptions == null) {
1788
1788
  throw new TypeError("register菜单数据不能为空");
1789
1789
  }
@@ -1791,9 +1791,9 @@ class GMMenu {
1791
1791
  menuOptions = [menuOptions];
1792
1792
  }
1793
1793
  for (let index = 0; index < menuOptions.length; index++) {
1794
- let cloneMenuOptionData = commonUtil.deepClone(menuOptions[index].data);
1794
+ const cloneMenuOptionData = commonUtil.deepClone(menuOptions[index].data);
1795
1795
  const { showText, clickCallBack } = this.handleMenuData(cloneMenuOptionData);
1796
- let menuId = that.context.GM_Api.registerMenuCommand(showText, clickCallBack);
1796
+ const menuId = that.context.GM_Api.registerMenuCommand(showText, clickCallBack);
1797
1797
  menuOptions[index].id = menuId;
1798
1798
  cloneMenuOptionData.deleteMenu = function () {
1799
1799
  that.context.GM_Api.unregisterMenuCommand(menuId);
@@ -1807,7 +1807,7 @@ class GMMenu {
1807
1807
  * @param {string} key 键
1808
1808
  */
1809
1809
  getLocalMenuData(key, defaultValue) {
1810
- let localData = this.context.GM_Api.getValue(this.$data.key, {});
1810
+ const localData = this.context.GM_Api.getValue(this.$data.key, {});
1811
1811
  if (key in localData) {
1812
1812
  return localData[key];
1813
1813
  }
@@ -1821,7 +1821,7 @@ class GMMenu {
1821
1821
  * @param value 值
1822
1822
  */
1823
1823
  setLocalMenuData(key, value) {
1824
- let localData = this.context.GM_Api.getValue(this.$data.key, {});
1824
+ const localData = this.context.GM_Api.getValue(this.$data.key, {});
1825
1825
  localData[key] = value;
1826
1826
  this.context.GM_Api.setValue(this.$data.key, localData);
1827
1827
  },
@@ -1834,10 +1834,10 @@ class GMMenu {
1834
1834
  if (typeof menuOption.showText !== "function") {
1835
1835
  menuOption.showText = (menuText, menuEnable) => {
1836
1836
  if (menuEnable) {
1837
- return this.$emoji.success + " " + menuText;
1837
+ return `${this.$emoji.success} ${menuText}`;
1838
1838
  }
1839
1839
  else {
1840
- return this.$emoji.error + " " + menuText;
1840
+ return `${this.$emoji.error} ${menuText}`;
1841
1841
  }
1842
1842
  };
1843
1843
  }
@@ -1848,12 +1848,12 @@ class GMMenu {
1848
1848
  * @param menuOption
1849
1849
  */
1850
1850
  handleMenuData(menuOption) {
1851
- let that = this;
1852
- let menuLocalDataItemKey = menuOption.key;
1851
+ const that = this;
1852
+ const menuLocalDataItemKey = menuOption.key;
1853
1853
  /* 菜单默认开启的状态 */
1854
- let defaultEnable = Boolean(this.getLocalMenuData(menuLocalDataItemKey, menuOption.enable));
1854
+ const defaultEnable = Boolean(this.getLocalMenuData(menuLocalDataItemKey, menuOption.enable));
1855
1855
  /** 油猴菜单上显示的文本 */
1856
- let showText = menuOption.showText(menuOption.text, defaultEnable);
1856
+ const showText = menuOption.showText(menuOption.text, defaultEnable);
1857
1857
  // const GMMenuOptions = {
1858
1858
  // /**
1859
1859
  // * 菜单的id
@@ -1883,7 +1883,7 @@ class GMMenu {
1883
1883
  * @param event
1884
1884
  */
1885
1885
  function clickCallBack(event) {
1886
- let localEnable = Boolean(that.getLocalMenuData(menuLocalDataItemKey, defaultEnable));
1886
+ const localEnable = Boolean(that.getLocalMenuData(menuLocalDataItemKey, defaultEnable));
1887
1887
  if (menuOption.isStoreValue) {
1888
1888
  that.setLocalMenuData(menuLocalDataItemKey, !localEnable);
1889
1889
  }
@@ -1996,7 +1996,7 @@ class GMMenu {
1996
1996
  menuOptionList = [...menuOptionList, options];
1997
1997
  }
1998
1998
  menuOptionList.forEach((menuOption) => {
1999
- let oldMenuOption = this.MenuHandle.getMenuOption(menuOption.key);
1999
+ const oldMenuOption = this.MenuHandle.getMenuOption(menuOption.key);
2000
2000
  if (oldMenuOption) {
2001
2001
  // 覆盖
2002
2002
  Object.assign(oldMenuOption, menuOption);
@@ -2164,42 +2164,42 @@ class Hooks {
2164
2164
  * 在Function原型上添加自定义方法.hook和.unhook
2165
2165
  */
2166
2166
  initEnv() {
2167
- Function.prototype.hook = function (realFunc, hookFunc, context) {
2167
+ Function.prototype.hook = function (_, hookFunc, context) {
2168
2168
  let _context = null; //函数上下文
2169
2169
  let _funcName = null; //函数名
2170
2170
  _context = context || window;
2171
2171
  _funcName = getFuncName(this);
2172
- _context["realFunc_" + _funcName] = this;
2172
+ _context[`realFunc_${_funcName}`] = this;
2173
2173
  if (_context[_funcName].prototype && _context[_funcName].prototype.isHooked) {
2174
2174
  console.log("Already has been hooked,unhook first");
2175
2175
  return false;
2176
2176
  }
2177
2177
  function getFuncName(fn) {
2178
2178
  // 获取函数名
2179
- let strFunc = fn.toString();
2180
- let _regex = /function\s+(\w+)\s*\(/;
2181
- let patten = strFunc.match(_regex);
2179
+ const strFunc = fn.toString();
2180
+ const _regex = /function\s+(\w+)\s*\(/;
2181
+ const patten = strFunc.match(_regex);
2182
2182
  if (patten) {
2183
2183
  return patten[1];
2184
2184
  }
2185
2185
  return "";
2186
2186
  }
2187
2187
  try {
2188
- new Function("_context", "_funcName", "hookFunc", `_context[_funcName] = function ${_funcName}() {
2189
- let args = Array.prototype.slice.call(arguments, 0);
2190
- let obj = this;
2191
- hookFunc.apply(obj, args);
2192
- return _context['realFunc_${_funcName}'].apply(obj, args);
2188
+ new Function("_context", "_funcName", "hookFunc", `_context[_funcName] = function ${_funcName}() {
2189
+ let args = Array.prototype.slice.call(arguments, 0);
2190
+ let obj = this;
2191
+ hookFunc.apply(obj, args);
2192
+ return _context['realFunc_${_funcName}'].apply(obj, args);
2193
2193
  };`)(_context, _funcName, hookFunc);
2194
2194
  _context[_funcName].prototype.isHooked = true;
2195
2195
  return true;
2196
2196
  }
2197
2197
  catch (e) {
2198
- console.log("Hook failed,check the params.");
2198
+ console.log("Hook failed,check the params.", e);
2199
2199
  return false;
2200
2200
  }
2201
2201
  };
2202
- Function.prototype.unhook = function (realFunc, funcName, context) {
2202
+ Function.prototype.unhook = function (_, funcName, context) {
2203
2203
  let _context = null;
2204
2204
  let _funcName = null;
2205
2205
  _context = context || window;
@@ -2208,8 +2208,8 @@ class Hooks {
2208
2208
  console.log("No function is hooked on");
2209
2209
  return false;
2210
2210
  }
2211
- _context[_funcName] = _context["realFunc" + _funcName];
2212
- Reflect.deleteProperty(_context, "realFunc_" + _funcName);
2211
+ _context[_funcName] = _context[`realFunc${_funcName}`];
2212
+ Reflect.deleteProperty(_context, `realFunc_${_funcName}`);
2213
2213
  return true;
2214
2214
  };
2215
2215
  }
@@ -2217,10 +2217,10 @@ class Hooks {
2217
2217
  * 删除在Function原型上添加的自定义方法.hook和.unhook
2218
2218
  */
2219
2219
  cleanEnv() {
2220
- if (Function.prototype.hasOwnProperty("hook")) {
2220
+ if (Object.prototype.hasOwnProperty.call(Function.prototype, "hook")) {
2221
2221
  Reflect.deleteProperty(Function.prototype, "hook");
2222
2222
  }
2223
- if (Function.prototype.hasOwnProperty("unhook")) {
2223
+ if (Object.prototype.hasOwnProperty.call(Function.prototype, "unhook")) {
2224
2224
  Reflect.deleteProperty(Function.prototype, "unhook");
2225
2225
  }
2226
2226
  return true;
@@ -2236,7 +2236,7 @@ const GenerateUUID = function () {
2236
2236
  }
2237
2237
  else {
2238
2238
  return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (charStr) {
2239
- var randomValue = (Math.random() * 16) | 0, randomCharValue = charStr === "x" ? randomValue : (randomValue & 0x3) | 0x8;
2239
+ const randomValue = (Math.random() * 16) | 0, randomCharValue = charStr === "x" ? randomValue : (randomValue & 0x3) | 0x8;
2240
2240
  return randomCharValue.toString(16);
2241
2241
  });
2242
2242
  }
@@ -2278,9 +2278,9 @@ class Httpx {
2278
2278
  }
2279
2279
  }
2280
2280
  for (let index = 0; index < this.$config.configList.length; index++) {
2281
- let item = this.$config.configList[index];
2281
+ const item = this.$config.configList[index];
2282
2282
  if (typeof item.fn === "function") {
2283
- let result = await item.fn(details);
2283
+ const result = await item.fn(details);
2284
2284
  if (result == null) {
2285
2285
  return;
2286
2286
  }
@@ -2293,7 +2293,7 @@ class Httpx {
2293
2293
  */
2294
2294
  add(fn) {
2295
2295
  if (typeof fn === "function") {
2296
- let uuid = GenerateUUID();
2296
+ const uuid = GenerateUUID();
2297
2297
  this.$config.configList.push({
2298
2298
  id: uuid,
2299
2299
  fn: fn,
@@ -2310,7 +2310,7 @@ class Httpx {
2310
2310
  */
2311
2311
  delete(id) {
2312
2312
  if (typeof id === "string") {
2313
- let findIndex = this.$config.configList.findIndex((item) => item.id === id);
2313
+ const findIndex = this.$config.configList.findIndex((item) => item.id === id);
2314
2314
  if (findIndex !== -1) {
2315
2315
  this.$config.configList.splice(findIndex, 1);
2316
2316
  return true;
@@ -2356,9 +2356,9 @@ class Httpx {
2356
2356
  }
2357
2357
  }
2358
2358
  for (let index = 0; index < this.$config.configList.length; index++) {
2359
- let item = this.$config.configList[index];
2359
+ const item = this.$config.configList[index];
2360
2360
  if (typeof item.successFn === "function") {
2361
- let result = await item.successFn(response, details);
2361
+ const result = await item.successFn(response, details);
2362
2362
  if (result == null) {
2363
2363
  return;
2364
2364
  }
@@ -2391,9 +2391,9 @@ class Httpx {
2391
2391
  }
2392
2392
  }
2393
2393
  for (let index = 0; index < this.$config.configList.length; index++) {
2394
- let item = this.$config.configList[index];
2394
+ const item = this.$config.configList[index];
2395
2395
  if (typeof item.errorFn === "function") {
2396
- let result = await item.errorFn(data);
2396
+ const result = await item.errorFn(data);
2397
2397
  if (result == null) {
2398
2398
  return;
2399
2399
  }
@@ -2405,7 +2405,7 @@ class Httpx {
2405
2405
  * 添加请求前的回调处理配置
2406
2406
  */
2407
2407
  add(successFn, errorFn) {
2408
- let id = GenerateUUID();
2408
+ const id = GenerateUUID();
2409
2409
  this.$config.configList.push({
2410
2410
  id: id,
2411
2411
  successFn: successFn,
@@ -2419,7 +2419,7 @@ class Httpx {
2419
2419
  */
2420
2420
  delete(id) {
2421
2421
  if (typeof id === "string") {
2422
- let findIndex = this.$config.configList.findIndex((item) => item.id === id);
2422
+ const findIndex = this.$config.configList.findIndex((item) => item.id === id);
2423
2423
  if (findIndex !== -1) {
2424
2424
  this.$config.configList.splice(findIndex, 1);
2425
2425
  return true;
@@ -2440,23 +2440,23 @@ class Httpx {
2440
2440
  * 对请求的参数进行合并处理
2441
2441
  */
2442
2442
  handleBeforeRequestOptionArgs(...args) {
2443
- let option = {
2443
+ const option = {
2444
2444
  url: void 0,
2445
2445
  };
2446
2446
  if (typeof args[0] === "string") {
2447
2447
  /* 传入的是url,转为配置 */
2448
- let url = args[0];
2448
+ const url = args[0];
2449
2449
  option.url = url;
2450
2450
  if (typeof args[1] === "object") {
2451
2451
  /* 处理第二个参数details */
2452
- let optionArg = args[1];
2452
+ const optionArg = args[1];
2453
2453
  commonUtil.assign(option, optionArg, true);
2454
2454
  option.url = url;
2455
2455
  }
2456
2456
  }
2457
2457
  else {
2458
2458
  /* 传入的是配置 */
2459
- let optionArg = args[0];
2459
+ const optionArg = args[0];
2460
2460
  commonUtil.assign(option, optionArg, true);
2461
2461
  }
2462
2462
  return option;
@@ -2469,7 +2469,7 @@ class Httpx {
2469
2469
  * @param reject promise抛出错误回调
2470
2470
  */
2471
2471
  getRequestOption(method, userRequestOption, resolve, reject) {
2472
- let that = this;
2472
+ const that = this;
2473
2473
  let url = userRequestOption.url || this.context.#defaultRequestOption.url;
2474
2474
  if (typeof url === "string") {
2475
2475
  // 去除左右空格
@@ -2482,7 +2482,7 @@ class Httpx {
2482
2482
  }
2483
2483
  }
2484
2484
  }
2485
- let requestOption = {
2485
+ const requestOption = {
2486
2486
  url: url,
2487
2487
  method: (method || "GET").toString().toUpperCase().trim(),
2488
2488
  timeout: userRequestOption.timeout || this.context.#defaultRequestOption.timeout,
@@ -2504,9 +2504,12 @@ class Httpx {
2504
2504
  /* 对象使用深拷贝 */
2505
2505
  fetchInit: commonUtil.deepClone(this.context.#defaultRequestOption.fetchInit),
2506
2506
  allowInterceptConfig: {
2507
- beforeRequest: this.context.#defaultRequestOption.allowInterceptConfig.beforeRequest,
2508
- afterResponseSuccess: this.context.#defaultRequestOption.allowInterceptConfig.afterResponseSuccess,
2509
- afterResponseError: this.context.#defaultRequestOption.allowInterceptConfig.afterResponseError,
2507
+ beforeRequest: this.context.#defaultRequestOption.allowInterceptConfig
2508
+ .beforeRequest,
2509
+ afterResponseSuccess: this.context.#defaultRequestOption.allowInterceptConfig
2510
+ .afterResponseSuccess,
2511
+ afterResponseError: this.context.#defaultRequestOption.allowInterceptConfig
2512
+ .afterResponseError,
2510
2513
  },
2511
2514
  user: userRequestOption.user || this.context.#defaultRequestOption.user,
2512
2515
  password: userRequestOption.password || this.context.#defaultRequestOption.password,
@@ -2534,15 +2537,17 @@ class Httpx {
2534
2537
  };
2535
2538
  // 补全allowInterceptConfig参数
2536
2539
  if (typeof userRequestOption.allowInterceptConfig === "boolean") {
2537
- Object.keys(requestOption.allowInterceptConfig).forEach((keyName) => {
2540
+ const allowInterceptConfigKeys = Object.keys(requestOption.allowInterceptConfig);
2541
+ allowInterceptConfigKeys.forEach((keyName) => {
2538
2542
  Reflect.set(requestOption.allowInterceptConfig, keyName, userRequestOption.allowInterceptConfig);
2539
2543
  });
2540
2544
  }
2541
2545
  else {
2542
2546
  if (typeof userRequestOption.allowInterceptConfig === "object" &&
2543
2547
  userRequestOption.allowInterceptConfig != null) {
2544
- Object.keys(userRequestOption.allowInterceptConfig).forEach((keyName) => {
2545
- let value = Reflect.get(userRequestOption.allowInterceptConfig, keyName);
2548
+ const allowInterceptConfigKeys = Object.keys(requestOption.allowInterceptConfig);
2549
+ allowInterceptConfigKeys.forEach((keyName) => {
2550
+ const value = Reflect.get(userRequestOption.allowInterceptConfig, keyName);
2546
2551
  if (typeof value === "boolean" &&
2547
2552
  Reflect.has(requestOption.allowInterceptConfig, keyName)) {
2548
2553
  Reflect.set(requestOption.allowInterceptConfig, keyName, value);
@@ -2556,7 +2561,8 @@ class Httpx {
2556
2561
  }
2557
2562
  if (typeof requestOption.headers === "object") {
2558
2563
  if (typeof userRequestOption.headers === "object") {
2559
- Object.keys(userRequestOption.headers).forEach((keyName, index) => {
2564
+ const headerKeys = Object.keys(requestOption.headers);
2565
+ headerKeys.forEach((keyName) => {
2560
2566
  if (keyName in requestOption.headers && userRequestOption.headers?.[keyName] == null) {
2561
2567
  /* 在默认的header中存在,且设置它新的值为空,那么就是默认的值 */
2562
2568
  Reflect.deleteProperty(requestOption.headers, keyName);
@@ -2574,8 +2580,9 @@ class Httpx {
2574
2580
  if (typeof requestOption.fetchInit === "object") {
2575
2581
  /* 使用assign替换且添加 */
2576
2582
  if (typeof userRequestOption.fetchInit === "object") {
2577
- Object.keys(userRequestOption.fetchInit).forEach((keyName, index) => {
2578
- if (keyName in requestOption.fetchInit && userRequestOption.fetchInit[keyName] == null) {
2583
+ const fetchInitKeys = Object.keys(requestOption.fetchInit);
2584
+ fetchInitKeys.forEach((keyName) => {
2585
+ if (keyName in requestOption.fetchInit && Reflect.get(userRequestOption.fetchInit ?? {}, keyName) == null) {
2579
2586
  /* 在默认的fetchInit中存在,且设置它新的值为空,那么就是默认的值 */
2580
2587
  Reflect.deleteProperty(requestOption.fetchInit, keyName);
2581
2588
  }
@@ -2600,7 +2607,7 @@ class Httpx {
2600
2607
  try {
2601
2608
  new URL(requestOption.url);
2602
2609
  }
2603
- catch (error) {
2610
+ catch {
2604
2611
  if (requestOption.url.startsWith("//")) {
2605
2612
  // 补充https:
2606
2613
  requestOption.url = globalThis.location.protocol + requestOption.url;
@@ -2611,7 +2618,7 @@ class Httpx {
2611
2618
  }
2612
2619
  else {
2613
2620
  // 补充origin+/
2614
- requestOption.url = globalThis.location.origin + "/" + requestOption.url;
2621
+ requestOption.url = `${globalThis.location.origin}/${requestOption.url}`;
2615
2622
  }
2616
2623
  }
2617
2624
  if (requestOption.fetchInit && !requestOption.fetch) {
@@ -2621,12 +2628,12 @@ class Httpx {
2621
2628
  // 转换data类型
2622
2629
  try {
2623
2630
  /** 是否对数据进行处理 */
2624
- let processData = userRequestOption.processData ?? true;
2631
+ const processData = userRequestOption.processData ?? true;
2625
2632
  if (requestOption.data != null && processData) {
2626
- let method = requestOption.method;
2633
+ const method = requestOption.method;
2627
2634
  if (method === "GET" || method === "HEAD") {
2628
2635
  // GET类型,data如果有,那么需要转为searchParams
2629
- let urlObj = new URL(requestOption.url);
2636
+ const urlObj = new URL(requestOption.url);
2630
2637
  let urlSearch = "";
2631
2638
  let isHandler = false;
2632
2639
  if (typeof requestOption.data === "string") {
@@ -2636,7 +2643,7 @@ class Httpx {
2636
2643
  else if (typeof requestOption.data === "object") {
2637
2644
  isHandler = true;
2638
2645
  // URLSearchParams参数可以转普通的string:string,包括FormData
2639
- let searchParams = new URLSearchParams(requestOption.data);
2646
+ const searchParams = new URLSearchParams(requestOption.data);
2640
2647
  urlSearch = searchParams.toString();
2641
2648
  }
2642
2649
  if (isHandler) {
@@ -2657,7 +2664,7 @@ class Httpx {
2657
2664
  }
2658
2665
  else {
2659
2666
  // xxx=xxx&xxx=
2660
- urlObj.search = urlObj.search + "&" + urlSearch;
2667
+ urlObj.search = `${urlObj.search}&${urlSearch}`;
2661
2668
  }
2662
2669
  }
2663
2670
  }
@@ -2665,14 +2672,14 @@ class Httpx {
2665
2672
  }
2666
2673
  else if (method === "POST" && requestOption.headers != null) {
2667
2674
  // POST类型,data如果是FormData,那么需要转为string
2668
- let headersKeyList = Object.keys(requestOption.headers);
2669
- let ContentTypeIndex = headersKeyList.findIndex((headerKey) => {
2675
+ const headersKeyList = Object.keys(requestOption.headers);
2676
+ const ContentTypeIndex = headersKeyList.findIndex((headerKey) => {
2670
2677
  return (headerKey.trim().toLowerCase() === "content-type" &&
2671
2678
  typeof requestOption.headers[headerKey] === "string");
2672
2679
  });
2673
2680
  if (ContentTypeIndex !== -1) {
2674
- let ContentTypeKey = headersKeyList[ContentTypeIndex];
2675
- let ContentType = requestOption.headers[ContentTypeKey];
2681
+ const ContentTypeKey = headersKeyList[ContentTypeIndex];
2682
+ const ContentType = requestOption.headers[ContentTypeKey];
2676
2683
  // 设置了Content-Type
2677
2684
  if (ContentType.includes("application/json")) {
2678
2685
  // application/json
@@ -2713,10 +2720,10 @@ class Httpx {
2713
2720
  * @param option 请求配置
2714
2721
  */
2715
2722
  removeRequestNullOption(option) {
2716
- Object.keys(option).forEach((keyName) => {
2717
- if (option[keyName] == null ||
2718
- (option[keyName] instanceof Function &&
2719
- commonUtil.isNull(option[keyName]))) {
2723
+ const optionKeys = Object.keys(option);
2724
+ optionKeys.forEach((keyName) => {
2725
+ const optionValue = option[keyName];
2726
+ if (optionValue == null || (optionValue instanceof Function && commonUtil.isNull(optionValue))) {
2720
2727
  Reflect.deleteProperty(option, keyName);
2721
2728
  return;
2722
2729
  }
@@ -2734,14 +2741,14 @@ class Httpx {
2734
2741
  /**
2735
2742
  * fetch的请求配置
2736
2743
  **/
2737
- let fetchRequestOption = {};
2744
+ const fetchRequestOption = {};
2738
2745
  if ((option.method === "GET" || option.method === "HEAD") && option.data != null) {
2739
2746
  /* GET 或 HEAD 方法的请求不能包含 body 信息 */
2740
2747
  Reflect.deleteProperty(option, "data");
2741
2748
  }
2742
2749
  /* 中止信号控制器 */
2743
- let abortController = new AbortController();
2744
- let signal = abortController.signal;
2750
+ const abortController = new AbortController();
2751
+ const signal = abortController.signal;
2745
2752
  signal.onabort = () => {
2746
2753
  option.onabort({
2747
2754
  isFetch: true,
@@ -2786,10 +2793,10 @@ class Httpx {
2786
2793
  * onabort请求被取消-触发
2787
2794
  * @param details 配置
2788
2795
  * @param resolve promise回调
2789
- * @param reject promise抛出错误回调
2796
+ * @param _reject promise抛出错误回调
2790
2797
  * @param argsResult 返回的参数列表
2791
2798
  */
2792
- async onAbort(details, resolve, reject, argsResult) {
2799
+ async onAbort(details, resolve, _reject, argsResult) {
2793
2800
  // console.log(argsResult);
2794
2801
  if (typeof details?.onabort === "function") {
2795
2802
  details.onabort.apply(this, argsResult);
@@ -2826,7 +2833,7 @@ class Httpx {
2826
2833
  * @param reject 抛出错误
2827
2834
  * @param argsResult 返回的参数列表
2828
2835
  */
2829
- async onTimeout(details, resolve, reject, argsResult) {
2836
+ async onTimeout(details, resolve, _reject, argsResult) {
2830
2837
  // console.log(argsResult);
2831
2838
  if (typeof details?.ontimeout === "function") {
2832
2839
  // 执行配置中的ontime回调
@@ -2864,10 +2871,10 @@ class Httpx {
2864
2871
  * onerror请求异常-触发
2865
2872
  * @param details 配置
2866
2873
  * @param resolve 回调
2867
- * @param reject 抛出错误
2874
+ * @param _reject 抛出错误
2868
2875
  * @param argsResult 返回的参数列表
2869
2876
  */
2870
- async onError(details, resolve, reject, argsResult) {
2877
+ async onError(details, resolve, _reject, argsResult) {
2871
2878
  // console.log(argsResult);
2872
2879
  if (typeof details?.onerror === "function") {
2873
2880
  details.onerror.apply(this, argsResult);
@@ -2901,16 +2908,15 @@ class Httpx {
2901
2908
  * onload加载完毕-触发
2902
2909
  * @param details 请求的配置
2903
2910
  * @param resolve 回调
2904
- * @param reject 抛出错误
2911
+ * @param _reject 抛出错误
2905
2912
  * @param argsResult 返回的参数列表
2906
2913
  */
2907
- async onLoad(details, resolve, reject, argsResult) {
2914
+ async onLoad(details, resolve, _reject, argsResult) {
2908
2915
  // console.log(argsResult);
2909
2916
  /* X浏览器会因为设置了responseType导致不返回responseText */
2910
- let originResponse = argsResult[0];
2917
+ const originResponse = argsResult[0];
2911
2918
  /* responseText为空,response不为空的情况 */
2912
- if (commonUtil.isNull(originResponse["responseText"]) &&
2913
- commonUtil.isNotNull(originResponse["response"])) {
2919
+ if (commonUtil.isNull(originResponse["responseText"]) && commonUtil.isNotNull(originResponse["response"])) {
2914
2920
  if (typeof originResponse["response"] === "object") {
2915
2921
  TryCatch().run(() => {
2916
2922
  originResponse["responseText"] = JSON.stringify(originResponse["response"]);
@@ -2925,51 +2931,51 @@ class Httpx {
2925
2931
  typeof originResponse["responseText"] === "string" &&
2926
2932
  originResponse["responseText"].trim() !== "") {
2927
2933
  /** 原始的请求text */
2928
- let httpxResponseText = originResponse.responseText;
2934
+ const httpxResponseText = originResponse.responseText;
2929
2935
  // 自定义个新的response
2930
2936
  let httpxResponse = httpxResponseText;
2931
2937
  if (details.responseType === "json") {
2932
2938
  httpxResponse = commonUtil.toJSON(httpxResponseText);
2933
2939
  }
2934
2940
  else if (details.responseType === "document") {
2935
- let parser = new DOMParser();
2941
+ const parser = new DOMParser();
2936
2942
  httpxResponse = parser.parseFromString(httpxResponseText, "text/html");
2937
2943
  }
2938
2944
  else if (details.responseType === "arraybuffer") {
2939
- let encoder = new TextEncoder();
2940
- let arrayBuffer = encoder.encode(httpxResponseText);
2945
+ const encoder = new TextEncoder();
2946
+ const arrayBuffer = encoder.encode(httpxResponseText);
2941
2947
  httpxResponse = arrayBuffer;
2942
2948
  }
2943
2949
  else if (details.responseType === "blob") {
2944
- let encoder = new TextEncoder();
2945
- let arrayBuffer = encoder.encode(httpxResponseText);
2950
+ const encoder = new TextEncoder();
2951
+ const arrayBuffer = encoder.encode(httpxResponseText);
2946
2952
  httpxResponse = new Blob([arrayBuffer]);
2947
2953
  }
2948
2954
  // 尝试覆盖原response
2949
2955
  try {
2950
- let setStatus = Reflect.set(originResponse, "response", httpxResponse);
2956
+ const setStatus = Reflect.set(originResponse, "response", httpxResponse);
2951
2957
  if (!setStatus) {
2952
2958
  console.warn("[Httpx-HttpxCallBack.oonLoad] 覆盖原始 response 失败,尝试添加新的httpxResponse");
2953
2959
  try {
2954
2960
  Reflect.set(originResponse, "httpxResponse", httpxResponse);
2955
2961
  }
2956
- catch (error) {
2962
+ catch {
2957
2963
  console.warn("[Httpx-HttpxCallBack.oonLoad] httpxResponse 无法被覆盖");
2958
2964
  }
2959
2965
  }
2960
2966
  }
2961
- catch (error) {
2967
+ catch {
2962
2968
  console.warn("[Httpx-HttpxCallBack.oonLoad] 原始 response 无法被覆盖,尝试添加新的httpxResponse");
2963
2969
  try {
2964
2970
  Reflect.set(originResponse, "httpxResponse", httpxResponse);
2965
2971
  }
2966
- catch (error) {
2972
+ catch {
2967
2973
  console.warn("[Httpx-HttpxCallBack.oonLoad] httpxResponse 无法被覆盖");
2968
2974
  }
2969
2975
  }
2970
2976
  }
2971
2977
  /* Stay扩展中没有finalUrl,对应的是responseURL */
2972
- let originResponseURL = Reflect.get(originResponse, "responseURL");
2978
+ const originResponseURL = Reflect.get(originResponse, "responseURL");
2973
2979
  if (originResponse["finalUrl"] == null && originResponseURL != null) {
2974
2980
  Reflect.set(originResponse, "finalUrl", originResponseURL);
2975
2981
  }
@@ -2989,7 +2995,7 @@ class Httpx {
2989
2995
  });
2990
2996
  }
2991
2997
  else {
2992
- this.context.HttpxResponseCallBack.onError(details, resolve, reject, argsResult);
2998
+ this.context.HttpxResponseCallBack.onError(details, resolve, _reject, argsResult);
2993
2999
  }
2994
3000
  },
2995
3001
  /**
@@ -3046,7 +3052,7 @@ class Httpx {
3046
3052
  console.log("[Httpx-HttpxRequest.request] 请求前的配置👇", details);
3047
3053
  }
3048
3054
  if (typeof this.context.HttpxRequestHook.beforeRequestCallBack === "function") {
3049
- let hookResult = await this.context.HttpxRequestHook.beforeRequestCallBack(details);
3055
+ const hookResult = await this.context.HttpxRequestHook.beforeRequestCallBack(details);
3050
3056
  if (hookResult == null) {
3051
3057
  return;
3052
3058
  }
@@ -3078,7 +3084,7 @@ class Httpx {
3078
3084
  fetch(option.url, fetchRequestOption)
3079
3085
  .then(async (fetchResponse) => {
3080
3086
  /** 自定义的response */
3081
- let httpxResponse = {
3087
+ const httpxResponse = {
3082
3088
  isFetch: true,
3083
3089
  finalUrl: fetchResponse.url,
3084
3090
  readyState: 4,
@@ -3093,9 +3099,9 @@ class Httpx {
3093
3099
  };
3094
3100
  Object.assign(httpxResponse, option.context || {});
3095
3101
  // 把headers转为字符串
3096
- for (const [key, value] of fetchResponse.headers.entries()) {
3102
+ fetchResponse.headers.forEach((value, key) => {
3097
3103
  httpxResponse.responseHeaders += `${key}: ${value}\n`;
3098
- }
3104
+ });
3099
3105
  /** 请求返回的类型 */
3100
3106
  const fetchResponseType = fetchResponse.headers.get("Content-Type");
3101
3107
  /* 如果需要stream,且获取到的是stream,那直接返回 */
@@ -3116,11 +3122,11 @@ class Httpx {
3116
3122
  /** 响应xml文档 */
3117
3123
  let responseXML = "";
3118
3124
  /** 先获取二进制数据 */
3119
- let arrayBuffer = await fetchResponse.arrayBuffer();
3125
+ const arrayBuffer = await fetchResponse.arrayBuffer();
3120
3126
  /** 数据编码 */
3121
3127
  let encoding = "utf-8";
3122
3128
  if (fetchResponse.headers.has("Content-Type")) {
3123
- let charsetMatched = fetchResponse.headers.get("Content-Type")?.match(/charset=(.+)/);
3129
+ const charsetMatched = fetchResponse.headers.get("Content-Type")?.match(/charset=(.+)/);
3124
3130
  if (charsetMatched) {
3125
3131
  encoding = charsetMatched[1];
3126
3132
  encoding = encoding.toLowerCase();
@@ -3130,7 +3136,7 @@ class Httpx {
3130
3136
  // 去除引号
3131
3137
  encoding = encoding.replace(/('|")/gi, "");
3132
3138
  // 编码
3133
- let textDecoder = new TextDecoder(encoding);
3139
+ const textDecoder = new TextDecoder(encoding);
3134
3140
  responseText = textDecoder.decode(arrayBuffer);
3135
3141
  response = responseText;
3136
3142
  if (option.responseType === "arraybuffer") {
@@ -3148,11 +3154,11 @@ class Httpx {
3148
3154
  }
3149
3155
  else if (option.responseType === "document" || option.responseType == null) {
3150
3156
  // response返回格式是文档格式
3151
- let parser = new DOMParser();
3157
+ const parser = new DOMParser();
3152
3158
  response = parser.parseFromString(responseText, "text/html");
3153
3159
  }
3154
3160
  // 转为XML结构
3155
- let parser = new DOMParser();
3161
+ const parser = new DOMParser();
3156
3162
  responseXML = parser.parseFromString(responseText, "text/xml");
3157
3163
  httpxResponse.response = response;
3158
3164
  httpxResponse.responseText = responseText;
@@ -3226,6 +3232,9 @@ class Httpx {
3226
3232
  onreadystatechange() { },
3227
3233
  onprogress() { },
3228
3234
  };
3235
+ /**
3236
+ * 实例化的默认配置
3237
+ */
3229
3238
  #defaultInitOption = {
3230
3239
  /**
3231
3240
  * `baseURL` 将自动加在 `url` 前面,除非 `url` 是一个绝对 URL。
@@ -3341,7 +3350,7 @@ class Httpx {
3341
3350
  * @param details 配置
3342
3351
  */
3343
3352
  get(...args) {
3344
- let useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
3353
+ const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
3345
3354
  useRequestOption.method = "GET";
3346
3355
  return this.request(useRequestOption, (option) => {
3347
3356
  Reflect.deleteProperty(option, "onprogress");
@@ -3351,7 +3360,7 @@ class Httpx {
3351
3360
  * POST 请求
3352
3361
  */
3353
3362
  post(...args) {
3354
- let useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
3363
+ const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
3355
3364
  useRequestOption.method = "POST";
3356
3365
  return this.request(useRequestOption);
3357
3366
  }
@@ -3359,7 +3368,7 @@ class Httpx {
3359
3368
  * HEAD 请求
3360
3369
  */
3361
3370
  head(...args) {
3362
- let useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
3371
+ const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
3363
3372
  useRequestOption.method = "HEAD";
3364
3373
  return this.request(useRequestOption, (option) => {
3365
3374
  Reflect.deleteProperty(option, "onprogress");
@@ -3369,7 +3378,7 @@ class Httpx {
3369
3378
  * OPTIONS 请求
3370
3379
  */
3371
3380
  options(...args) {
3372
- let useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
3381
+ const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
3373
3382
  useRequestOption.method = "OPTIONS";
3374
3383
  return this.request(useRequestOption, (option) => {
3375
3384
  Reflect.deleteProperty(option, "onprogress");
@@ -3379,7 +3388,7 @@ class Httpx {
3379
3388
  * DELETE 请求
3380
3389
  */
3381
3390
  delete(...args) {
3382
- let useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
3391
+ const useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
3383
3392
  useRequestOption.method = "DELETE";
3384
3393
  return this.request(useRequestOption, (option) => {
3385
3394
  Reflect.deleteProperty(option, "onprogress");
@@ -3389,7 +3398,7 @@ class Httpx {
3389
3398
  * PUT 请求
3390
3399
  */
3391
3400
  put(...args) {
3392
- let userRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
3401
+ const userRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(...args);
3393
3402
  userRequestOption.method = "PUT";
3394
3403
  return this.request(userRequestOption);
3395
3404
  }
@@ -3399,18 +3408,30 @@ class Httpx {
3399
3408
  * @param beforeRequestOption 处理请求前的配置
3400
3409
  */
3401
3410
  request(details, beforeRequestOption) {
3402
- let useRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(details);
3403
- /** 取消请求 */
3411
+ // 对请求的参数进行合并处理
3412
+ const userRequestOption = this.HttpxRequestOption.handleBeforeRequestOptionArgs(details);
3413
+ /**
3414
+ * 取消请求
3415
+ */
3404
3416
  let abortFn = null;
3405
- let promise = new globalThis.Promise(async (resolve, reject) => {
3406
- let requestOption = (this.HttpxRequestOption.getRequestOption(useRequestOption.method, useRequestOption, resolve, reject));
3417
+ const promise = new globalThis.Promise(async (resolve, reject) => {
3418
+ // 请求配置
3419
+ let requestOption = this.HttpxRequestOption.getRequestOption(userRequestOption.method, userRequestOption, (resultOption) => {
3420
+ resolve(resultOption);
3421
+ }, (...args) => {
3422
+ reject(...args);
3423
+ });
3424
+ requestOption = this.HttpxRequestOption.removeRequestNullOption(requestOption);
3407
3425
  if (typeof beforeRequestOption === "function") {
3408
3426
  beforeRequestOption(requestOption);
3409
3427
  }
3410
- requestOption = this.HttpxRequestOption.removeRequestNullOption(requestOption);
3428
+ // 处理重试逻辑
3411
3429
  const requestResult = await this.HttpxRequest.request(requestOption);
3412
3430
  if (requestResult != null && typeof requestResult.abort === "function") {
3413
- abortFn = requestResult.abort;
3431
+ abortFn = () => {
3432
+ // 取消请求
3433
+ requestResult.abort();
3434
+ };
3414
3435
  }
3415
3436
  });
3416
3437
  promise.abort = () => {
@@ -3429,10 +3450,7 @@ class indexedDB {
3429
3450
  /* websql的版本号,由于ios的问题,版本号的写法不一样 */
3430
3451
  // #slqVersion = "1";
3431
3452
  /* 监听IndexDB */
3432
- #indexedDB = window.indexedDB ||
3433
- window.mozIndexedDB ||
3434
- window.webkitIndexedDB ||
3435
- window.msIndexedDB;
3453
+ #indexedDB = globalThis.indexedDB || globalThis.mozIndexedDB || globalThis.webkitIndexedDB || globalThis.msIndexedDB;
3436
3454
  /* 缓存数据库,避免同一个页面重复创建和销毁 */
3437
3455
  #db = {};
3438
3456
  // #store: IDBObjectStore = null as any;
@@ -3467,7 +3485,7 @@ class indexedDB {
3467
3485
  this.#storeName = storeName;
3468
3486
  this.#dbVersion = dbVersion;
3469
3487
  if (!this.#indexedDB) {
3470
- alert("很抱歉,您的浏览器不支持indexedDB");
3488
+ window.alert("很抱歉,您的浏览器不支持indexedDB");
3471
3489
  throw new TypeError("很抱歉,您的浏览器不支持indexedDB");
3472
3490
  }
3473
3491
  }
@@ -3476,10 +3494,9 @@ class indexedDB {
3476
3494
  * @param dbName 表名
3477
3495
  */
3478
3496
  createStore(dbName) {
3479
- let txn, store;
3480
- txn = this.#db[dbName].transaction(this.#storeName, "readwrite");
3497
+ const txn = this.#db[dbName].transaction(this.#storeName, "readwrite");
3481
3498
  /* IndexDB的读写权限 */
3482
- store = txn.objectStore(this.#storeName);
3499
+ const store = txn.objectStore(this.#storeName);
3483
3500
  // this.#store = store;
3484
3501
  return store;
3485
3502
  }
@@ -3489,12 +3506,12 @@ class indexedDB {
3489
3506
  * @param dbName 数据库名
3490
3507
  */
3491
3508
  open(callback, dbName) {
3492
- let that = this;
3509
+ const that = this;
3493
3510
  /* 打开数据库 */
3494
3511
  /* 如果支持IndexDB */
3495
3512
  if (!that.#db[dbName]) {
3496
3513
  /* 如果缓存中没有,则进行数据库的创建或打开,提高效率 */
3497
- let request = that.#indexedDB.open(dbName, that.#dbVersion);
3514
+ const request = that.#indexedDB.open(dbName, that.#dbVersion);
3498
3515
  request.onerror = function (event) {
3499
3516
  callback(null, {
3500
3517
  code: that.#statusCode.openFailed.code,
@@ -3504,26 +3521,26 @@ class indexedDB {
3504
3521
  };
3505
3522
  request.onsuccess = function (event) {
3506
3523
  if (!that.#db[dbName]) {
3507
- let target = event.target;
3524
+ const target = event.target;
3508
3525
  that.#db[dbName] = target.result;
3509
3526
  }
3510
- let store = that.createStore(dbName);
3527
+ const store = that.createStore(dbName);
3511
3528
  callback(store);
3512
3529
  };
3513
3530
  request.onupgradeneeded = function (event) {
3514
- let target = event.target;
3531
+ const target = event.target;
3515
3532
  that.#db[dbName] = target.result;
3516
- let store = that.#db[dbName].createObjectStore(that.#storeName, {
3533
+ const store = that.#db[dbName].createObjectStore(that.#storeName, {
3517
3534
  keyPath: "key",
3518
3535
  });
3519
- store.transaction.oncomplete = function (event) {
3536
+ store.transaction.oncomplete = function () {
3520
3537
  callback(store);
3521
3538
  };
3522
3539
  };
3523
3540
  }
3524
3541
  else {
3525
3542
  /* 如果缓存中已经打开了数据库,就直接使用 */
3526
- let store = this.createStore(dbName);
3543
+ const store = this.createStore(dbName);
3527
3544
  callback(store);
3528
3545
  }
3529
3546
  }
@@ -3533,10 +3550,10 @@ class indexedDB {
3533
3550
  * @param value 数据值
3534
3551
  */
3535
3552
  async save(key, value) {
3536
- let that = this;
3553
+ const that = this;
3537
3554
  return new Promise((resolve) => {
3538
- let dbName = this.#dbName;
3539
- let inData = {
3555
+ const dbName = this.#dbName;
3556
+ const inData = {
3540
3557
  key: key,
3541
3558
  value: value,
3542
3559
  };
@@ -3549,7 +3566,7 @@ class indexedDB {
3549
3566
  });
3550
3567
  }
3551
3568
  else {
3552
- let request = idbStore.put(inData);
3569
+ const request = idbStore.put(inData);
3553
3570
  request.onsuccess = function (event) {
3554
3571
  /* 保存成功有success 字段 */
3555
3572
  resolve({
@@ -3576,9 +3593,9 @@ class indexedDB {
3576
3593
  * @param key 数据key
3577
3594
  */
3578
3595
  async has(key) {
3579
- let that = this;
3596
+ const that = this;
3580
3597
  return new Promise((resolve) => {
3581
- let dbName = this.#dbName;
3598
+ const dbName = this.#dbName;
3582
3599
  this.open(function (idbStore) {
3583
3600
  /* 判断返回的数据中是否有error字段 */
3584
3601
  if (idbStore == null) {
@@ -3589,7 +3606,7 @@ class indexedDB {
3589
3606
  });
3590
3607
  }
3591
3608
  else {
3592
- let request = idbStore.get(key);
3609
+ const request = idbStore.get(key);
3593
3610
  request.onsuccess = function (event) {
3594
3611
  /* result 返回的是 {key: string, value: any} */
3595
3612
  /* 键值对存储 */
@@ -3617,9 +3634,9 @@ class indexedDB {
3617
3634
  * @param key 数据key
3618
3635
  */
3619
3636
  async get(key) {
3620
- let that = this;
3637
+ const that = this;
3621
3638
  return new Promise((resolve) => {
3622
- let dbName = this.#dbName;
3639
+ const dbName = this.#dbName;
3623
3640
  this.open(function (idbStore) {
3624
3641
  /* 判断返回的数据中是否有error字段 */
3625
3642
  if (idbStore == null) {
@@ -3631,13 +3648,13 @@ class indexedDB {
3631
3648
  });
3632
3649
  }
3633
3650
  else {
3634
- let request = idbStore.get(key);
3651
+ const request = idbStore.get(key);
3635
3652
  request.onsuccess = function (event) {
3636
- let target = event.target;
3637
- let result = target.result;
3653
+ const target = event.target;
3654
+ const result = target.result;
3638
3655
  /* result 返回的是 {key: string, value: any} */
3639
3656
  /* 键值对存储 */
3640
- let data = result ? result.value : void 0;
3657
+ const data = result ? result.value : void 0;
3641
3658
  if (data == null) {
3642
3659
  resolve({
3643
3660
  success: true,
@@ -3678,10 +3695,10 @@ class indexedDB {
3678
3695
  */
3679
3696
  async regexpGet(key) {
3680
3697
  let list = [];
3681
- let that = this;
3698
+ const that = this;
3682
3699
  return new Promise((resolve) => {
3683
3700
  /* 正则查询 */
3684
- let dbName = that.#dbName;
3701
+ const dbName = that.#dbName;
3685
3702
  this.open(function (idbStore) {
3686
3703
  /* 判断返回的数据中是否有error字段 */
3687
3704
  if (idbStore == null) {
@@ -3693,16 +3710,16 @@ class indexedDB {
3693
3710
  });
3694
3711
  }
3695
3712
  else {
3696
- let request = idbStore.getAll();
3713
+ const request = idbStore.getAll();
3697
3714
  request.onsuccess = function (event) {
3698
- let target = event.target;
3699
- let result = target.result;
3715
+ const target = event.target;
3716
+ const result = target.result;
3700
3717
  if (result.length !== 0) {
3701
- result.forEach((dataItem, index) => {
3718
+ result.forEach((dataItem) => {
3702
3719
  // 当前项的key
3703
- let __key = dataItem["key"];
3720
+ const __key = dataItem["key"];
3704
3721
  // 当前项的value
3705
- let __value = dataItem["value"];
3722
+ const __value = dataItem["value"];
3706
3723
  if (__key.match(key)) {
3707
3724
  list = list.concat(__value);
3708
3725
  }
@@ -3734,10 +3751,10 @@ class indexedDB {
3734
3751
  * @param key 数据key
3735
3752
  */
3736
3753
  async delete(key) {
3737
- let that = this;
3754
+ const that = this;
3738
3755
  return new Promise((resolve) => {
3739
3756
  /* 根据key删除某条数据 */
3740
- let dbName = that.#dbName;
3757
+ const dbName = that.#dbName;
3741
3758
  this.open(function (idbStore) {
3742
3759
  if (idbStore == null) {
3743
3760
  resolve({
@@ -3748,7 +3765,7 @@ class indexedDB {
3748
3765
  }
3749
3766
  else {
3750
3767
  // 删除键
3751
- let request = idbStore.delete(key);
3768
+ const request = idbStore.delete(key);
3752
3769
  request.onsuccess = function (event) {
3753
3770
  resolve({
3754
3771
  success: true,
@@ -3773,10 +3790,10 @@ class indexedDB {
3773
3790
  * 删除所有数据
3774
3791
  */
3775
3792
  async deleteAll() {
3776
- let that = this;
3793
+ const that = this;
3777
3794
  return new Promise((resolve) => {
3778
3795
  /* 清空数据库 */
3779
- let dbName = that.#dbName;
3796
+ const dbName = that.#dbName;
3780
3797
  this.open(function (idbStore) {
3781
3798
  if (idbStore == null) {
3782
3799
  resolve({
@@ -3787,7 +3804,7 @@ class indexedDB {
3787
3804
  }
3788
3805
  else {
3789
3806
  // 清空
3790
- let operateResult = idbStore.clear();
3807
+ const operateResult = idbStore.clear();
3791
3808
  operateResult.onsuccess = function (event) {
3792
3809
  resolve({
3793
3810
  success: true,
@@ -3820,7 +3837,7 @@ class LockFunction {
3820
3837
  run;
3821
3838
  isLock;
3822
3839
  constructor(callback, context, delayTime) {
3823
- let that = this;
3840
+ const that = this;
3824
3841
  this.#callback = callback;
3825
3842
  if (typeof context === "number") {
3826
3843
  this.#delayTime = context;
@@ -3910,14 +3927,14 @@ class Log {
3910
3927
  * @param stack
3911
3928
  */
3912
3929
  parseErrorStack(stack) {
3913
- let result = {
3930
+ const result = {
3914
3931
  name: "",
3915
3932
  position: "",
3916
3933
  };
3917
3934
  for (let stackString of stack) {
3918
3935
  stackString = stackString.trim();
3919
- let stackFunctionNameMatch = stackString.match(/^at[\s]+(.+?)[\s]+/i);
3920
- let stackFunctionNamePositionMatch = stackString.match(/^at[\s]+.+[\s]+\((.+?)\)/i);
3936
+ const stackFunctionNameMatch = stackString.match(/^at[\s]+(.+?)[\s]+/i);
3937
+ const stackFunctionNamePositionMatch = stackString.match(/^at[\s]+.+[\s]+\((.+?)\)/i);
3921
3938
  if (stackFunctionNameMatch == null) {
3922
3939
  continue;
3923
3940
  }
@@ -3925,8 +3942,8 @@ class Log {
3925
3942
  continue;
3926
3943
  }
3927
3944
  /* 获取最后一个,因为第一个是包含了at */
3928
- let stackFunctionName = stackFunctionNameMatch[stackFunctionNameMatch.length - 1];
3929
- let stackFunctionNamePosition = stackFunctionNamePositionMatch[stackFunctionNamePositionMatch.length - 1];
3945
+ const stackFunctionName = stackFunctionNameMatch[stackFunctionNameMatch.length - 1];
3946
+ const stackFunctionNamePosition = stackFunctionNamePositionMatch[stackFunctionNamePositionMatch.length - 1];
3930
3947
  if (stackFunctionName === "" ||
3931
3948
  stackFunctionName.match(/^(Utils\.|)Log(\.|)|.<anonymous>$|^Function.each|^NodeList.forEach|^k.fn.init.each/g)) {
3932
3949
  continue;
@@ -3938,9 +3955,9 @@ class Log {
3938
3955
  }
3939
3956
  }
3940
3957
  if (result.position === "") {
3941
- let lastStackString = stack[stack.length - 1].trim();
3958
+ const lastStackString = stack[stack.length - 1].trim();
3942
3959
  if (lastStackString.startsWith("at chrome-extension://")) {
3943
- let lastStackMatch = lastStackString.match(/^at[\s]+(.+)/);
3960
+ const lastStackMatch = lastStackString.match(/^at[\s]+(.+)/);
3944
3961
  if (lastStackMatch) {
3945
3962
  result.position = lastStackMatch[lastStackMatch.length - 1];
3946
3963
  }
@@ -3970,16 +3987,18 @@ class Log {
3970
3987
  printContent(msg, color, otherStyle) {
3971
3988
  this.checkClearConsole();
3972
3989
  otherStyle = otherStyle || "";
3973
- let stackSplit = new Error().stack.split("\n");
3990
+ const stackSplit = new Error().stack.split("\n");
3974
3991
  stackSplit.splice(0, 2);
3975
- let { name: callerName, position: callerPosition } = this.parseErrorStack(stackSplit);
3976
- let tagName = this.tag;
3977
- let that = this;
3992
+ const { name: callerName, position: callerPosition } = this.parseErrorStack(stackSplit);
3993
+ const tagName = this.tag;
3994
+ const that = this;
3978
3995
  /** tag的html输出格式 */
3979
- let tagNameHTML = `%c[${tagName}%c`;
3996
+ const tagNameHTML = `%c[${tagName}%c`;
3980
3997
  /** 调用的函数名的html输出格式 */
3981
3998
  let callerNameHTML = `%c${callerName}%c]%c`;
3982
- callerName.trim() !== "" && (callerNameHTML = "-" + callerNameHTML);
3999
+ if (callerName.trim() === "") {
4000
+ callerNameHTML = `-${callerNameHTML}`;
4001
+ }
3983
4002
  /**
3984
4003
  * 输出消息到控制台
3985
4004
  * @param message
@@ -4065,14 +4084,14 @@ class Log {
4065
4084
  if (this.#disable)
4066
4085
  return;
4067
4086
  this.checkClearConsole();
4068
- let stack = new Error().stack.split("\n");
4087
+ const stack = new Error().stack.split("\n");
4069
4088
  stack.splice(0, 1);
4070
- let errorStackParse = this.parseErrorStack(stack);
4089
+ const errorStackParse = this.parseErrorStack(stack);
4071
4090
  /** 堆栈函数名 */
4072
- let stackFunctionName = errorStackParse.name;
4091
+ const stackFunctionName = errorStackParse.name;
4073
4092
  /** 堆栈位置 */
4074
- let stackFunctionNamePosition = errorStackParse.position;
4075
- let callerName = stackFunctionName;
4093
+ const stackFunctionNamePosition = errorStackParse.position;
4094
+ const callerName = stackFunctionName;
4076
4095
  this.#console.log(`%c[${this.tag}%c-%c${callerName}%c]%c`, ...this.#msgColorDetails, `color: ${this.#details.infoColor};`);
4077
4096
  this.#console.table(msg);
4078
4097
  if (this.#details.debug) {
@@ -4135,9 +4154,9 @@ class Progress {
4135
4154
  */
4136
4155
  circleRadius: 50,
4137
4156
  };
4138
- #ctx = null;
4139
- #width = null;
4140
- #height = null;
4157
+ #ctx;
4158
+ #width;
4159
+ #height;
4141
4160
  /**
4142
4161
  *
4143
4162
  * @param paramConfig 配置信息
@@ -4147,14 +4166,8 @@ class Progress {
4147
4166
  if (!(this.#config.canvasNode instanceof HTMLCanvasElement)) {
4148
4167
  throw new Error("Utils.Progress 参数 canvasNode 必须是 HTMLCanvasElement");
4149
4168
  }
4150
- this.init();
4151
- }
4152
- /**
4153
- * 初始化
4154
- */
4155
- init() {
4156
4169
  /* 获取画笔 */
4157
- let ctx = this.#config.canvasNode.getContext("2d");
4170
+ const ctx = this.#config.canvasNode.getContext("2d");
4158
4171
  if (ctx == null) {
4159
4172
  throw new Error("Utils.Progress 获取画笔失败");
4160
4173
  }
@@ -4165,8 +4178,8 @@ class Progress {
4165
4178
  this.#height = this.#config.canvasNode.height;
4166
4179
  /* 清除锯齿 */
4167
4180
  if (window.devicePixelRatio) {
4168
- this.#config.canvasNode.style.width = this.#width + "px";
4169
- this.#config.canvasNode.style.height = this.#height + "px";
4181
+ this.#config.canvasNode.style.width = `${this.#width}px`;
4182
+ this.#config.canvasNode.style.height = `${this.#height}px`;
4170
4183
  this.#config.canvasNode.height = this.#height * window.devicePixelRatio;
4171
4184
  this.#config.canvasNode.width = this.#width * window.devicePixelRatio;
4172
4185
  this.#ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
@@ -4178,7 +4191,7 @@ class Progress {
4178
4191
  * 绘制
4179
4192
  */
4180
4193
  draw() {
4181
- let degActive = (this.#config.progress * 360) / 100;
4194
+ const degActive = (this.#config.progress * 360) / 100;
4182
4195
  /* 清除画布 */
4183
4196
  this.#ctx.clearRect(0, 0, this.#width, this.#height);
4184
4197
  /* 开始绘制底圆 */
@@ -4192,11 +4205,11 @@ class Progress {
4192
4205
  this.#ctx.strokeStyle = this.#config.lineColor;
4193
4206
  this.#ctx.stroke();
4194
4207
  /* 获取百分比 */
4195
- let txt = parseInt(this.#config.progress.toString()) + "%";
4196
- this.#ctx.font = this.#config.fontSize + "px SimHei";
4208
+ const txt = `${parseInt(this.#config.progress.toString())}%`;
4209
+ this.#ctx.font = `${this.#config.fontSize}px SimHei`;
4197
4210
  /* 获取文本宽度 */
4198
- let w = this.#ctx.measureText(txt).width;
4199
- let h = this.#config.fontSize / 2;
4211
+ const w = this.#ctx.measureText(txt).width;
4212
+ const h = this.#config.fontSize / 2;
4200
4213
  this.#ctx.fillStyle = this.#config.textColor;
4201
4214
  this.#ctx.fillText(txt, this.#width / 2 - w / 2, this.#height / 2 + h / 2);
4202
4215
  }
@@ -4220,9 +4233,9 @@ class UtilsDictionary {
4220
4233
  * 迭代器
4221
4234
  */
4222
4235
  get entries() {
4223
- let that = this;
4236
+ const that = this;
4224
4237
  return function* () {
4225
- let itemKeys = Object.keys(that.getItems());
4238
+ const itemKeys = Object.keys(that.getItems());
4226
4239
  for (const keyName of itemKeys) {
4227
4240
  yield [keyName, that.get(keyName)];
4228
4241
  }
@@ -4232,9 +4245,8 @@ class UtilsDictionary {
4232
4245
  * 是否可遍历
4233
4246
  */
4234
4247
  get [Symbol.iterator]() {
4235
- let that = this;
4236
- return function () {
4237
- return that.entries();
4248
+ return () => {
4249
+ return this.entries();
4238
4250
  };
4239
4251
  }
4240
4252
  /**
@@ -4281,13 +4293,13 @@ class UtilsDictionary {
4281
4293
  * 获取字典所有的键
4282
4294
  */
4283
4295
  keys() {
4284
- return this.items.keys().toArray();
4296
+ return Array.from(this.items.keys());
4285
4297
  }
4286
4298
  /**
4287
4299
  * 返回字典中的所有值
4288
4300
  */
4289
4301
  values() {
4290
- return this.items.values().toArray();
4302
+ return Array.from(this.items.values());
4291
4303
  }
4292
4304
  /**
4293
4305
  * 清空字典
@@ -4321,7 +4333,7 @@ class UtilsDictionary {
4321
4333
  * @param callbackfn 回调函数
4322
4334
  */
4323
4335
  forEach(callbackfn) {
4324
- this.items.forEach((value, key, self) => {
4336
+ this.items.forEach((value, key) => {
4325
4337
  callbackfn(value, key, this);
4326
4338
  });
4327
4339
  }
@@ -4413,6 +4425,7 @@ class WindowApi {
4413
4425
  }
4414
4426
  }
4415
4427
 
4428
+ // @ts-nocheck
4416
4429
  const VueUtils = {
4417
4430
  /** 标签 */
4418
4431
  ReactiveFlags: {
@@ -4451,10 +4464,10 @@ class ReactiveEffect {
4451
4464
  deps = [];
4452
4465
  active = true;
4453
4466
  fn;
4454
- // private scheduler;
4467
+ scheduler;
4455
4468
  constructor(fn, scheduler) {
4456
4469
  this.fn = fn;
4457
- // this.scheduler = scheduler;
4470
+ this.scheduler = scheduler;
4458
4471
  }
4459
4472
  run(cb) {
4460
4473
  if (!this.active) {
@@ -4526,7 +4539,7 @@ class Vue {
4526
4539
  if (VueUtils.isReactive(target)) {
4527
4540
  return target;
4528
4541
  }
4529
- let exisProxy = this.reactMap.get(target);
4542
+ const exisProxy = this.reactMap.get(target);
4530
4543
  if (exisProxy) {
4531
4544
  return exisProxy;
4532
4545
  }
@@ -4539,8 +4552,8 @@ class Vue {
4539
4552
  return Reflect.get(target, key, receiver);
4540
4553
  },
4541
4554
  set(target, key, value, receiver) {
4542
- let oldValue = target[key];
4543
- let result = Reflect.set(target, key, value, receiver);
4555
+ const oldValue = target[key];
4556
+ const result = Reflect.set(target, key, value, receiver);
4544
4557
  if (oldValue !== value) {
4545
4558
  that.trigger(target, "set", key, oldValue, value);
4546
4559
  }
@@ -4590,11 +4603,12 @@ class Vue {
4590
4603
  }
4591
4604
  toRefs(object) {
4592
4605
  const result = VueUtils.isArray(object) ? new Array(object.length) : {};
4593
- for (let key in object) {
4606
+ for (const key in object) {
4594
4607
  result[key] = this.toRef(object, key);
4595
4608
  }
4596
4609
  return result;
4597
4610
  }
4611
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4598
4612
  trigger(target, type, key, oldValue, value) {
4599
4613
  const depsMap = this.targetMap.get(target);
4600
4614
  if (!depsMap)
@@ -4602,8 +4616,9 @@ class Vue {
4602
4616
  const effects = depsMap.get(key);
4603
4617
  this.triggerEffect(effects, "effects");
4604
4618
  }
4619
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4605
4620
  triggerEffect(effects, name) {
4606
- effects &&
4621
+ if (effects) {
4607
4622
  effects.forEach((effect) => {
4608
4623
  if (effect.scheduler) {
4609
4624
  effect.scheduler();
@@ -4612,6 +4627,7 @@ class Vue {
4612
4627
  effect.run();
4613
4628
  }
4614
4629
  });
4630
+ }
4615
4631
  }
4616
4632
  track(target, type, key) {
4617
4633
  if (!this.activeEffect)
@@ -4628,7 +4644,7 @@ class Vue {
4628
4644
  }
4629
4645
  trackEffect(dep) {
4630
4646
  if (this.activeEffect) {
4631
- let shouldTrack = !dep.has(this.activeEffect);
4647
+ const shouldTrack = !dep.has(this.activeEffect);
4632
4648
  if (shouldTrack) {
4633
4649
  dep.add(this.activeEffect);
4634
4650
  this.activeEffect.deps.push(dep);
@@ -4642,7 +4658,7 @@ class Vue {
4642
4658
  return value;
4643
4659
  }
4644
4660
  set.add(value);
4645
- for (let key in value) {
4661
+ for (const key in value) {
4646
4662
  this.traversal(value[key], set);
4647
4663
  }
4648
4664
  return value;
@@ -4894,6 +4910,7 @@ const clearTimeout$1 = (timerId) => loadOrReturnBroker().clearTimeout(timerId);
4894
4910
  const setInterval = (...args) => loadOrReturnBroker().setInterval(...args);
4895
4911
  const setTimeout$1 = (...args) => loadOrReturnBroker().setTimeout(...args);
4896
4912
 
4913
+ /* eslint-disable */
4897
4914
  // ==UserScript==
4898
4915
  // @name ModuleRaid.js
4899
4916
  // @namespace http://tampermonkey.net/
@@ -5311,28 +5328,26 @@ class DOMUtils {
5311
5328
  return $ele?.innerHTML?.trim() === "";
5312
5329
  });
5313
5330
  }
5314
- else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
5315
- selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
5331
+ else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) || selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
5316
5332
  // contains 语法
5317
- let textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
5318
- let text = textMatch[2];
5333
+ const textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
5334
+ const text = textMatch[2];
5319
5335
  selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
5320
5336
  return Array.from(parent.querySelectorAll(selector)).filter(($ele) => {
5321
5337
  return ($ele?.textContent || $ele?.innerText)?.includes(text);
5322
5338
  });
5323
5339
  }
5324
- else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
5325
- selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
5340
+ else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) || selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
5326
5341
  // regexp 语法
5327
- let textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
5342
+ const textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
5328
5343
  let pattern = textMatch[2];
5329
- let flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
5344
+ const flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
5330
5345
  let flags = "";
5331
5346
  if (flagMatch) {
5332
5347
  pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
5333
5348
  flags = flagMatch[3];
5334
5349
  }
5335
- let regexp = new RegExp(pattern, flags);
5350
+ const regexp = new RegExp(pattern, flags);
5336
5351
  selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
5337
5352
  return Array.from(parent.querySelectorAll(selector)).filter(($ele) => {
5338
5353
  return Boolean(($ele?.textContent || $ele?.innerText)?.match(regexp));
@@ -5374,11 +5389,10 @@ class DOMUtils {
5374
5389
  selector = selector.replace(/:empty$/gi, "");
5375
5390
  return $el.matches(selector) && $el?.innerHTML?.trim() === "";
5376
5391
  }
5377
- else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
5378
- selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
5392
+ else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) || selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
5379
5393
  // contains 语法
5380
- let textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
5381
- let text = textMatch[2];
5394
+ const textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
5395
+ const text = textMatch[2];
5382
5396
  selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
5383
5397
  let content = $el?.textContent || $el?.innerText;
5384
5398
  if (typeof content !== "string") {
@@ -5386,18 +5400,17 @@ class DOMUtils {
5386
5400
  }
5387
5401
  return $el.matches(selector) && content?.includes(text);
5388
5402
  }
5389
- else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
5390
- selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
5403
+ else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) || selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
5391
5404
  // regexp 语法
5392
- let textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
5405
+ const textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
5393
5406
  let pattern = textMatch[2];
5394
- let flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
5407
+ const flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
5395
5408
  let flags = "";
5396
5409
  if (flagMatch) {
5397
5410
  pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
5398
5411
  flags = flagMatch[3];
5399
5412
  }
5400
- let regexp = new RegExp(pattern, flags);
5413
+ const regexp = new RegExp(pattern, flags);
5401
5414
  selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
5402
5415
  let content = $el?.textContent || $el?.innerText;
5403
5416
  if (typeof content !== "string") {
@@ -5415,43 +5428,41 @@ class DOMUtils {
5415
5428
  if (selector.match(/[^\s]{1}:empty$/gi)) {
5416
5429
  // empty 语法
5417
5430
  selector = selector.replace(/:empty$/gi, "");
5418
- let $closest = $el?.closest(selector);
5431
+ const $closest = $el?.closest(selector);
5419
5432
  if ($closest && $closest?.innerHTML?.trim() === "") {
5420
5433
  return $closest;
5421
5434
  }
5422
5435
  return null;
5423
5436
  }
5424
- else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) ||
5425
- selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
5437
+ else if (selector.match(/[^\s]{1}:contains\("(.*)"\)$/i) || selector.match(/[^\s]{1}:contains\('(.*)'\)$/i)) {
5426
5438
  // contains 语法
5427
- let textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
5428
- let text = textMatch[2];
5439
+ const textMatch = selector.match(/:contains\(("|')(.*)("|')\)$/i);
5440
+ const text = textMatch[2];
5429
5441
  selector = selector.replace(/:contains\(("|')(.*)("|')\)$/gi, "");
5430
- let $closest = $el?.closest(selector);
5442
+ const $closest = $el?.closest(selector);
5431
5443
  if ($closest) {
5432
- let content = $el?.textContent || $el?.innerText;
5444
+ const content = $el?.textContent || $el?.innerText;
5433
5445
  if (typeof content === "string" && content.includes(text)) {
5434
5446
  return $closest;
5435
5447
  }
5436
5448
  }
5437
5449
  return null;
5438
5450
  }
5439
- else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) ||
5440
- selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
5451
+ else if (selector.match(/[^\s]{1}:regexp\("(.*)"\)$/i) || selector.match(/[^\s]{1}:regexp\('(.*)'\)$/i)) {
5441
5452
  // regexp 语法
5442
- let textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
5453
+ const textMatch = selector.match(/:regexp\(("|')(.*)("|')\)$/i);
5443
5454
  let pattern = textMatch[2];
5444
- let flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
5455
+ const flagMatch = pattern.match(/("|'),[\s]*("|')([igm]{0,3})$/i);
5445
5456
  let flags = "";
5446
5457
  if (flagMatch) {
5447
5458
  pattern = pattern.replace(/("|'),[\s]*("|')([igm]{0,3})$/gi, "");
5448
5459
  flags = flagMatch[3];
5449
5460
  }
5450
- let regexp = new RegExp(pattern, flags);
5461
+ const regexp = new RegExp(pattern, flags);
5451
5462
  selector = selector.replace(/:regexp\(("|')(.*)("|')\)$/gi, "");
5452
- let $closest = $el?.closest(selector);
5463
+ const $closest = $el?.closest(selector);
5453
5464
  if ($closest) {
5454
- let content = $el?.textContent || $el?.innerText;
5465
+ const content = $el?.textContent || $el?.innerText;
5455
5466
  if (typeof content === "string" && content.match(regexp)) {
5456
5467
  return $closest;
5457
5468
  }
@@ -5460,12 +5471,12 @@ class DOMUtils {
5460
5471
  }
5461
5472
  else {
5462
5473
  // 普通语法
5463
- let $closest = $el?.closest(selector);
5474
+ const $closest = $el?.closest(selector);
5464
5475
  return $closest;
5465
5476
  }
5466
5477
  }
5467
5478
  }
5468
- let domUtils = new DOMUtils();
5479
+ const domUtils = new DOMUtils();
5469
5480
 
5470
5481
  class Utils {
5471
5482
  windowApi;
@@ -5473,12 +5484,12 @@ class Utils {
5473
5484
  this.windowApi = new WindowApi(option);
5474
5485
  }
5475
5486
  /** 版本号 */
5476
- version = "2025.9.8";
5487
+ version = "2025.9.14";
5477
5488
  addStyle(cssText) {
5478
5489
  if (typeof cssText !== "string") {
5479
5490
  throw new Error("Utils.addStyle 参数cssText 必须为String类型");
5480
5491
  }
5481
- let cssNode = this.windowApi.document.createElement("style");
5492
+ const cssNode = this.windowApi.document.createElement("style");
5482
5493
  cssNode.setAttribute("type", "text/css");
5483
5494
  cssNode.innerHTML = cssText;
5484
5495
  if (this.windowApi.document.head) {
@@ -5500,23 +5511,23 @@ class Utils {
5500
5511
  return cssNode;
5501
5512
  }
5502
5513
  /**
5503
- * JSON数据从源端替换到目标端中,如果目标端存在该数据则替换,不添加,返回结果为目标端替换完毕的结果
5504
- * @param target 目标数据
5505
- * @param source 源数据
5506
- * @param isAdd 是否可以追加键,默认false
5507
- * @example
5508
- * Utils.assign({"1":1,"2":{"3":3}}, {"2":{"3":4}});
5509
- * >
5510
- * {
5511
- "1": 1,
5512
- "2": {
5513
- "3": 4
5514
- }
5515
- }
5516
- */
5514
+ * JSON数据从源端替换到目标端中,如果目标端存在该数据则替换,不添加,返回结果为目标端替换完毕的结果
5515
+ * @param target 目标数据
5516
+ * @param source 源数据
5517
+ * @param isAdd 是否可以追加键,默认false
5518
+ * @example
5519
+ * Utils.assign({"1":1,"2":{"3":3}}, {"2":{"3":4}});
5520
+ * >
5521
+ * {
5522
+ "1": 1,
5523
+ "2": {
5524
+ "3": 4
5525
+ }
5526
+ }
5527
+ */
5517
5528
  assign = commonUtil.assign.bind(commonUtil);
5518
5529
  async asyncReplaceAll(string, pattern, asyncFn) {
5519
- let UtilsContext = this;
5530
+ const UtilsContext = this;
5520
5531
  if (typeof string !== "string") {
5521
5532
  throw new TypeError("string必须是字符串");
5522
5533
  }
@@ -5588,18 +5599,18 @@ class Utils {
5588
5599
  canvasElement.dispatchEvent(new MouseEvent("mouseup", eventInit));
5589
5600
  }
5590
5601
  checkUserClickInNode(element) {
5591
- let UtilsContext = this;
5602
+ const UtilsContext = this;
5592
5603
  if (!UtilsContext.isDOM(element)) {
5593
5604
  throw new Error("Utils.checkUserClickInNode 参数 targetNode 必须为 Element|Node 类型");
5594
5605
  }
5595
- let clickEvent = UtilsContext.windowApi.window.event;
5596
- let touchEvent = UtilsContext.windowApi.window.event;
5597
- let $click = clickEvent?.composedPath()?.[0];
5606
+ const clickEvent = UtilsContext.windowApi.window.event;
5607
+ const touchEvent = UtilsContext.windowApi.window.event;
5608
+ const $click = clickEvent?.composedPath()?.[0];
5598
5609
  // 点击的x坐标
5599
- let clickPosX = clickEvent?.clientX != null ? clickEvent.clientX : touchEvent.touches[0].clientX;
5610
+ const clickPosX = clickEvent?.clientX != null ? clickEvent.clientX : touchEvent.touches[0].clientX;
5600
5611
  // 点击的y坐标
5601
- let clickPosY = clickEvent?.clientY != null ? clickEvent.clientY : touchEvent.touches[0].clientY;
5602
- let {
5612
+ const clickPosY = clickEvent?.clientY != null ? clickEvent.clientY : touchEvent.touches[0].clientY;
5613
+ const {
5603
5614
  /* 要检测的元素的相对屏幕的横坐标最左边 */
5604
5615
  left: elementPosXLeft,
5605
5616
  /* 要检测的元素的相对屏幕的横坐标最右边 */
@@ -5627,32 +5638,32 @@ class Utils {
5627
5638
  * @param formData 需要clone的数据
5628
5639
  */
5629
5640
  cloneFormData(formData, filterFn) {
5630
- let clonedFormData = new FormData();
5631
- for (let [key, value] of formData.entries()) {
5632
- let isFilter = typeof filterFn === "function" ? filterFn(key, value) : false;
5641
+ const clonedFormData = new FormData();
5642
+ formData.forEach((value, key) => {
5643
+ const isFilter = typeof filterFn === "function" ? filterFn(key, value) : false;
5633
5644
  if (typeof isFilter === "boolean" && isFilter) {
5634
- continue;
5645
+ return;
5635
5646
  }
5636
5647
  clonedFormData.append(key, value);
5637
- }
5648
+ });
5638
5649
  return clonedFormData;
5639
5650
  }
5640
5651
  createOverload() {
5641
- let fnMap = new Map();
5652
+ const fnMap = new Map();
5642
5653
  function overload(...args) {
5643
- let key = args.map((it) => typeof it).join(",");
5644
- let fn = fnMap.get(key);
5654
+ const key = args.map((it) => typeof it).join(",");
5655
+ const fn = fnMap.get(key);
5645
5656
  if (!fn) {
5646
5657
  throw new TypeError("没有找到对应的实现");
5647
5658
  }
5648
5659
  return fn.apply(this, args);
5649
5660
  }
5650
5661
  overload.addImpl = function (...args) {
5651
- let fn = args.pop();
5662
+ const fn = args.pop();
5652
5663
  if (typeof fn !== "function") {
5653
5664
  throw new TypeError("最后一个参数必须是函数");
5654
5665
  }
5655
- let key = args.join(",");
5666
+ const key = args.join(",");
5656
5667
  fnMap.set(key, fn);
5657
5668
  };
5658
5669
  return overload;
@@ -5669,7 +5680,7 @@ class Utils {
5669
5680
  deepClone = commonUtil.deepClone.bind(commonUtil);
5670
5681
  debounce(fn, delay = 0) {
5671
5682
  let timer = null;
5672
- let UtilsContext = this;
5683
+ const UtilsContext = this;
5673
5684
  return function (...args) {
5674
5685
  UtilsContext.workerClearTimeout(timer);
5675
5686
  timer = UtilsContext.workerSetTimeout(function () {
@@ -5678,7 +5689,7 @@ class Utils {
5678
5689
  };
5679
5690
  }
5680
5691
  deleteParentNode(element, targetSelector) {
5681
- let UtilsContext = this;
5692
+ const UtilsContext = this;
5682
5693
  if (element == null) {
5683
5694
  return;
5684
5695
  }
@@ -5689,7 +5700,7 @@ class Utils {
5689
5700
  throw new Error("Utils.deleteParentNode 参数 targetSelector 必须为 string 类型");
5690
5701
  }
5691
5702
  let result = false;
5692
- let needRemoveDOM = domUtils.closest(element, targetSelector);
5703
+ const needRemoveDOM = domUtils.closest(element, targetSelector);
5693
5704
  if (needRemoveDOM) {
5694
5705
  needRemoveDOM.remove();
5695
5706
  result = true;
@@ -5719,7 +5730,7 @@ class Utils {
5719
5730
  eventNameList = [...eventName];
5720
5731
  }
5721
5732
  eventNameList.forEach((_eventName_) => {
5722
- let event = new Event(_eventName_);
5733
+ const event = new Event(_eventName_);
5723
5734
  if (details) {
5724
5735
  Object.assign(event, details);
5725
5736
  }
@@ -5727,7 +5738,7 @@ class Utils {
5727
5738
  });
5728
5739
  }
5729
5740
  downloadBase64(base64Data, fileName, isIFrame = false) {
5730
- let UtilsContext = this;
5741
+ const UtilsContext = this;
5731
5742
  if (typeof base64Data !== "string") {
5732
5743
  throw new Error("Utils.downloadBase64 参数 base64Data 必须为 string 类型");
5733
5744
  }
@@ -5759,7 +5770,7 @@ class Utils {
5759
5770
  let strFound;
5760
5771
  if (this.windowApi.globalThis.find) {
5761
5772
  /* CODE FOR BROWSERS THAT SUPPORT window.find */
5762
- let windowFind = this.windowApi.self.find;
5773
+ const windowFind = this.windowApi.self.find;
5763
5774
  strFound = windowFind(str, caseSensitive, true, true, false);
5764
5775
  if (strFound && this.windowApi.self.getSelection && !this.windowApi.self.getSelection().anchorNode) {
5765
5776
  strFound = windowFind(str, caseSensitive, true, true, false);
@@ -5793,19 +5804,19 @@ class Utils {
5793
5804
  return strFound ? true : false;
5794
5805
  }
5795
5806
  *findElementsWithText(element, text, filter) {
5796
- let that = this;
5807
+ const that = this;
5797
5808
  if (element.outerHTML.includes(text)) {
5798
5809
  if (element.children.length === 0) {
5799
- let filterResult = typeof filter === "function" ? filter(element) : false;
5810
+ const filterResult = typeof filter === "function" ? filter(element) : false;
5800
5811
  if (!filterResult) {
5801
5812
  yield element;
5802
5813
  }
5803
5814
  }
5804
5815
  else {
5805
- let textElement = Array.from(element.childNodes).filter((ele) => ele.nodeType === Node.TEXT_NODE);
5806
- for (let $child of textElement) {
5816
+ const textElement = Array.from(element.childNodes).filter((ele) => ele.nodeType === Node.TEXT_NODE);
5817
+ for (const $child of textElement) {
5807
5818
  if ($child.textContent.includes(text)) {
5808
- let filterResult = typeof filter === "function" ? filter(element) : false;
5819
+ const filterResult = typeof filter === "function" ? filter(element) : false;
5809
5820
  if (!filterResult) {
5810
5821
  yield $child;
5811
5822
  }
@@ -5814,7 +5825,7 @@ class Utils {
5814
5825
  }
5815
5826
  }
5816
5827
  for (let index = 0; index < element.children.length; index++) {
5817
- let $child = element.children[index];
5828
+ const $child = element.children[index];
5818
5829
  yield* that.findElementsWithText($child, text, filter);
5819
5830
  }
5820
5831
  }
@@ -5828,8 +5839,8 @@ class Utils {
5828
5839
  findVisibleElement(element) {
5829
5840
  let currentElement = element;
5830
5841
  while (currentElement) {
5831
- let elementRect = currentElement.getBoundingClientRect();
5832
- if (Boolean(elementRect.length)) {
5842
+ const elementRect = currentElement.getBoundingClientRect();
5843
+ if (elementRect.length) {
5833
5844
  return currentElement;
5834
5845
  }
5835
5846
  currentElement = currentElement.parentElement;
@@ -5843,7 +5854,7 @@ class Utils {
5843
5854
  }
5844
5855
  let result = 0;
5845
5856
  let resultType = "KB";
5846
- let sizeData = {};
5857
+ const sizeData = {};
5847
5858
  sizeData.B = 1;
5848
5859
  sizeData.KB = 1024;
5849
5860
  sizeData.MB = sizeData.KB * sizeData.KB;
@@ -5856,7 +5867,7 @@ class Utils {
5856
5867
  sizeData.BB = sizeData.YB * sizeData.KB;
5857
5868
  sizeData.NB = sizeData.BB * sizeData.KB;
5858
5869
  sizeData.DB = sizeData.NB * sizeData.KB;
5859
- for (let key in sizeData) {
5870
+ for (const key in sizeData) {
5860
5871
  result = byteSize / sizeData[key];
5861
5872
  resultType = key;
5862
5873
  if (sizeData.KB >= result) {
@@ -5869,7 +5880,7 @@ class Utils {
5869
5880
  }
5870
5881
  getNodeListValue(...args) {
5871
5882
  let resultArray = [];
5872
- for (let arg of args) {
5883
+ for (const arg of args) {
5873
5884
  let value = arg;
5874
5885
  if (typeof arg === "function") {
5875
5886
  /* 方法 */
@@ -5884,7 +5895,7 @@ class Utils {
5884
5895
  }
5885
5896
  getNonNullValue(...args) {
5886
5897
  let resultValue = args[args.length - 1];
5887
- let UtilsContext = this;
5898
+ const UtilsContext = this;
5888
5899
  for (const argValue of args) {
5889
5900
  if (UtilsContext.isNotNull(argValue)) {
5890
5901
  resultValue = argValue;
@@ -5894,7 +5905,7 @@ class Utils {
5894
5905
  return resultValue;
5895
5906
  }
5896
5907
  formatTime(text = new Date(), formatType = "yyyy-MM-dd HH:mm:ss") {
5897
- let time = text == null ? new Date() : new Date(text);
5908
+ const time = text == null ? new Date() : new Date(text);
5898
5909
  /**
5899
5910
  * 校验时间补0
5900
5911
  * @param timeNum
@@ -5902,7 +5913,7 @@ class Utils {
5902
5913
  */
5903
5914
  function checkTime(timeNum) {
5904
5915
  if (timeNum < 10)
5905
- return "0" + timeNum;
5916
+ return `0${timeNum}`;
5906
5917
  return timeNum;
5907
5918
  }
5908
5919
  /**
@@ -5913,7 +5924,7 @@ class Utils {
5913
5924
  function timeSystemChange(hourNum) {
5914
5925
  return hourNum > 12 ? hourNum - 12 : hourNum;
5915
5926
  }
5916
- let timeRegexp = {
5927
+ const timeRegexp = {
5917
5928
  yyyy: time.getFullYear(),
5918
5929
  /* 年 */
5919
5930
  MM: checkTime(time.getMonth() + 1),
@@ -5930,7 +5941,7 @@ class Utils {
5930
5941
  /* 秒 */
5931
5942
  };
5932
5943
  Object.keys(timeRegexp).forEach(function (key) {
5933
- let replaecRegexp = new RegExp(key, "g");
5944
+ const replaecRegexp = new RegExp(key, "g");
5934
5945
  formatType = formatType.replace(replaecRegexp, timeRegexp[key]);
5935
5946
  });
5936
5947
  return formatType;
@@ -5942,12 +5953,12 @@ class Utils {
5942
5953
  }
5943
5954
  if (text.length === 8) {
5944
5955
  /* 该字符串只有时分秒 */
5945
- let today = new Date();
5946
- text = today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate() + " " + text;
5956
+ const today = new Date();
5957
+ text = `${today.getFullYear()}-${today.getMonth() + 1}-${today.getDate()} ${text}`;
5947
5958
  }
5948
5959
  text = text.substring(0, 19);
5949
5960
  text = text.replace(/-/g, "/");
5950
- let timestamp = new Date(text).getTime();
5961
+ const timestamp = new Date(text).getTime();
5951
5962
  return timestamp;
5952
5963
  }
5953
5964
  /**
@@ -5997,16 +6008,16 @@ class Utils {
5997
6008
  if (timestamp2.toString().length === 10) {
5998
6009
  timestamp2 = timestamp2 * 1000;
5999
6010
  }
6000
- let smallTimeStamp = timestamp1 > timestamp2 ? timestamp2 : timestamp1;
6001
- let bigTimeStamp = timestamp1 > timestamp2 ? timestamp1 : timestamp2;
6002
- let oneSecond = 1000; /* 一秒的毫秒数 */
6003
- let oneMinute = 60 * oneSecond; /* 一分钟的毫秒数 */
6004
- let oneHour = 60 * oneMinute; /* 一小时的毫秒数 */
6005
- let oneDay = 24 * oneHour; /* 一天的毫秒数 */
6006
- let oneMonth = 30 * oneDay; /* 一个月的毫秒数(30天) */
6007
- let oneYear = 12 * oneMonth; /* 一年的毫秒数 */
6008
- let bigDate = new Date(bigTimeStamp);
6009
- let smallDate = new Date(smallTimeStamp);
6011
+ const smallTimeStamp = timestamp1 > timestamp2 ? timestamp2 : timestamp1;
6012
+ const bigTimeStamp = timestamp1 > timestamp2 ? timestamp1 : timestamp2;
6013
+ const oneSecond = 1000; /* 一秒的毫秒数 */
6014
+ const oneMinute = 60 * oneSecond; /* 一分钟的毫秒数 */
6015
+ const oneHour = 60 * oneMinute; /* 一小时的毫秒数 */
6016
+ const oneDay = 24 * oneHour; /* 一天的毫秒数 */
6017
+ const oneMonth = 30 * oneDay; /* 一个月的毫秒数(30天) */
6018
+ const oneYear = 12 * oneMonth; /* 一年的毫秒数 */
6019
+ const bigDate = new Date(bigTimeStamp);
6020
+ const smallDate = new Date(smallTimeStamp);
6010
6021
  let remainderValue = 1;
6011
6022
  if (type === "年") {
6012
6023
  remainderValue = oneYear;
@@ -6028,30 +6039,30 @@ class Utils {
6028
6039
  }
6029
6040
  let diffValue = Math.round(Math.abs((bigDate - smallDate) / remainderValue));
6030
6041
  if (type === "auto") {
6031
- let timeDifference = bigTimeStamp - smallTimeStamp;
6042
+ const timeDifference = bigTimeStamp - smallTimeStamp;
6032
6043
  diffValue = Math.floor(timeDifference / (24 * 3600 * 1000));
6033
6044
  if (diffValue > 0) {
6034
- diffValue = diffValue + "天";
6045
+ diffValue = `${diffValue}天`;
6035
6046
  }
6036
6047
  else {
6037
6048
  /* 计算出小时数 */
6038
- let leave1 = timeDifference % (24 * 3600 * 1000); /* 计算天数后剩余的毫秒数 */
6039
- let hours = Math.floor(leave1 / (3600 * 1000));
6049
+ const leave1 = timeDifference % (24 * 3600 * 1000); /* 计算天数后剩余的毫秒数 */
6050
+ const hours = Math.floor(leave1 / (3600 * 1000));
6040
6051
  if (hours > 0) {
6041
- diffValue = hours + "小时";
6052
+ diffValue = `${hours}小时`;
6042
6053
  }
6043
6054
  else {
6044
6055
  /* 计算相差分钟数 */
6045
- let leave2 = leave1 % (3600 * 1000); /* 计算小时数后剩余的毫秒数 */
6046
- let minutes = Math.floor(leave2 / (60 * 1000));
6056
+ const leave2 = leave1 % (3600 * 1000); /* 计算小时数后剩余的毫秒数 */
6057
+ const minutes = Math.floor(leave2 / (60 * 1000));
6047
6058
  if (minutes > 0) {
6048
- diffValue = minutes + "分钟";
6059
+ diffValue = `${minutes}分钟`;
6049
6060
  }
6050
6061
  else {
6051
6062
  /* 计算相差秒数 */
6052
- let leave3 = leave2 % (60 * 1000); /* 计算分钟数后剩余的毫秒数 */
6053
- let seconds = Math.round(leave3 / 1000);
6054
- diffValue = seconds + "秒";
6063
+ const leave3 = leave2 % (60 * 1000); /* 计算分钟数后剩余的毫秒数 */
6064
+ const seconds = Math.round(leave3 / 1000);
6065
+ diffValue = `${seconds}秒`;
6055
6066
  }
6056
6067
  }
6057
6068
  }
@@ -6059,14 +6070,14 @@ class Utils {
6059
6070
  return diffValue;
6060
6071
  }
6061
6072
  getElementSelector(element) {
6062
- let UtilsContext = this;
6073
+ const UtilsContext = this;
6063
6074
  if (!element)
6064
6075
  return void 0;
6065
6076
  if (!element.parentElement)
6066
6077
  return void 0;
6067
6078
  /* 如果元素有id属性,则直接返回id选择器 */
6068
6079
  if (element.id)
6069
- return "#" + element.id;
6080
+ return `#${element.id}`;
6070
6081
  /* 递归地获取父元素的选择器 */
6071
6082
  let selector = UtilsContext.getElementSelector(element.parentElement);
6072
6083
  if (!selector) {
@@ -6074,11 +6085,11 @@ class Utils {
6074
6085
  }
6075
6086
  /* 如果有多个相同类型的兄弟元素,则需要添加索引 */
6076
6087
  if (element.parentElement.querySelectorAll(element.tagName).length > 1) {
6077
- let index = Array.prototype.indexOf.call(element.parentElement.children, element) + 1;
6078
- selector += " > " + element.tagName.toLowerCase() + ":nth-child(" + index + ")";
6088
+ const index = Array.prototype.indexOf.call(element.parentElement.children, element) + 1;
6089
+ selector += ` > ${element.tagName.toLowerCase()}:nth-child(${index})`;
6079
6090
  }
6080
6091
  else {
6081
- selector += " > " + element.tagName.toLowerCase();
6092
+ selector += ` > ${element.tagName.toLowerCase()}`;
6082
6093
  }
6083
6094
  return selector;
6084
6095
  }
@@ -6089,15 +6100,15 @@ class Utils {
6089
6100
  * > 2
6090
6101
  */
6091
6102
  getMaxValue(...args) {
6092
- let result = [...args];
6103
+ const result = [...args];
6093
6104
  let newResult = [];
6094
6105
  if (result.length === 0) {
6095
6106
  return void 0;
6096
6107
  }
6097
6108
  if (result.length > 1) {
6098
6109
  if (result.length === 2 && typeof result[0] === "object" && typeof result[1] === "function") {
6099
- let data = result[0];
6100
- let handleDataFunc = result[1];
6110
+ const data = result[0];
6111
+ const handleDataFunc = result[1];
6101
6112
  Object.keys(data).forEach((keyName) => {
6102
6113
  newResult = [...newResult, handleDataFunc(keyName, data[keyName])];
6103
6114
  });
@@ -6145,7 +6156,7 @@ class Utils {
6145
6156
  */
6146
6157
  function queryMaxZIndex($ele) {
6147
6158
  if (typeof ignoreCallBack === "function") {
6148
- let ignoreResult = ignoreCallBack($ele);
6159
+ const ignoreResult = ignoreCallBack($ele);
6149
6160
  if (typeof ignoreResult === "boolean" && !ignoreResult) {
6150
6161
  return;
6151
6162
  }
@@ -6154,7 +6165,7 @@ class Utils {
6154
6165
  const nodeStyle = UtilsContext.windowApi.window.getComputedStyle($ele);
6155
6166
  /* 不对position为static和display为none的元素进行获取它们的z-index */
6156
6167
  if (isVisibleNode(nodeStyle)) {
6157
- let nodeZIndex = parseInt(nodeStyle.zIndex);
6168
+ const nodeZIndex = parseInt(nodeStyle.zIndex);
6158
6169
  if (!isNaN(nodeZIndex)) {
6159
6170
  if (nodeZIndex > zIndex) {
6160
6171
  // 赋值到全局
@@ -6170,7 +6181,7 @@ class Utils {
6170
6181
  }
6171
6182
  }
6172
6183
  }
6173
- target.querySelectorAll("*").forEach(($ele, index) => {
6184
+ target.querySelectorAll("*").forEach(($ele) => {
6174
6185
  queryMaxZIndex($ele);
6175
6186
  });
6176
6187
  zIndex += deviation;
@@ -6187,15 +6198,15 @@ class Utils {
6187
6198
  return this.getMaxZIndexNodeInfo(deviation, target, ignoreCallBack).zIndex;
6188
6199
  }
6189
6200
  getMinValue(...args) {
6190
- let result = [...args];
6201
+ const result = [...args];
6191
6202
  let newResult = [];
6192
6203
  if (result.length === 0) {
6193
6204
  return void 0;
6194
6205
  }
6195
6206
  if (result.length > 1) {
6196
6207
  if (result.length === 2 && typeof result[0] === "object" && typeof result[1] === "function") {
6197
- let data = result[0];
6198
- let handleDataFunc = result[1];
6208
+ const data = result[0];
6209
+ const handleDataFunc = result[1];
6199
6210
  Object.keys(data).forEach((keyName) => {
6200
6211
  newResult = [...newResult, handleDataFunc(keyName, data[keyName])];
6201
6212
  });
@@ -6225,8 +6236,8 @@ class Utils {
6225
6236
  * > 'Mozilla/5.0 (Linux; Android 10; MI 13 Build/OPR1.170623.027; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.3490.40 Mobile Safari/537.36'
6226
6237
  **/
6227
6238
  getRandomAndroidUA() {
6228
- let UtilsContext = this;
6229
- let mobileNameList = [
6239
+ const UtilsContext = this;
6240
+ const mobileNameList = [
6230
6241
  "LDN-LX3",
6231
6242
  "RNE-L03",
6232
6243
  "ASUS_X00ID Build/NMF26F",
@@ -6243,14 +6254,14 @@ class Utils {
6243
6254
  "MI 13 Build/OPR1.170623.027; wv",
6244
6255
  ];
6245
6256
  /* 安卓版本 */
6246
- let androidVersion = UtilsContext.getRandomValue(12, 14);
6257
+ const androidVersion = UtilsContext.getRandomValue(12, 14);
6247
6258
  /* 手机型号 */
6248
- let randomMobile = UtilsContext.getRandomValue(mobileNameList);
6259
+ const randomMobile = UtilsContext.getRandomValue(mobileNameList);
6249
6260
  /* chrome大版本号 */
6250
- let chromeVersion1 = UtilsContext.getRandomValue(120, 132);
6251
- let chromeVersion2 = UtilsContext.getRandomValue(0, 0);
6252
- let chromeVersion3 = UtilsContext.getRandomValue(2272, 6099);
6253
- let chromeVersion4 = UtilsContext.getRandomValue(1, 218);
6261
+ const chromeVersion1 = UtilsContext.getRandomValue(120, 132);
6262
+ const chromeVersion2 = UtilsContext.getRandomValue(0, 0);
6263
+ const chromeVersion3 = UtilsContext.getRandomValue(2272, 6099);
6264
+ const chromeVersion4 = UtilsContext.getRandomValue(1, 218);
6254
6265
  return `Mozilla/5.0 (Linux; Android ${androidVersion}; ${randomMobile}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${chromeVersion1}.${chromeVersion2}.${chromeVersion3}.${chromeVersion4} Mobile Safari/537.36`;
6255
6266
  }
6256
6267
  /**
@@ -6272,20 +6283,20 @@ class Utils {
6272
6283
  * > 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5068.19 Safari/537.36'
6273
6284
  **/
6274
6285
  getRandomPCUA() {
6275
- let UtilsContext = this;
6286
+ const UtilsContext = this;
6276
6287
  /* chrome大版本号 */
6277
- let chromeVersion1 = UtilsContext.getRandomValue(120, 132);
6278
- let chromeVersion2 = UtilsContext.getRandomValue(0, 0);
6279
- let chromeVersion3 = UtilsContext.getRandomValue(2272, 6099);
6280
- let chromeVersion4 = UtilsContext.getRandomValue(1, 218);
6288
+ const chromeVersion1 = UtilsContext.getRandomValue(120, 132);
6289
+ const chromeVersion2 = UtilsContext.getRandomValue(0, 0);
6290
+ const chromeVersion3 = UtilsContext.getRandomValue(2272, 6099);
6291
+ const chromeVersion4 = UtilsContext.getRandomValue(1, 218);
6281
6292
  return `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${chromeVersion1}.${chromeVersion2}.${chromeVersion3}.${chromeVersion4} Safari/537.36`;
6282
6293
  }
6283
6294
  getRandomValue(...args) {
6284
- let result = [...args];
6295
+ const result = [...args];
6285
6296
  if (result.length > 1) {
6286
6297
  if (result.length === 2 && typeof result[0] === "number" && typeof result[1] === "number") {
6287
- let leftNumber = result[0] > result[1] ? result[1] : result[0];
6288
- let rightNumber = result[0] > result[1] ? result[0] : result[1];
6298
+ const leftNumber = result[0] > result[1] ? result[1] : result[0];
6299
+ const rightNumber = result[0] > result[1] ? result[0] : result[1];
6289
6300
  return Math.round(Math.random() * (rightNumber - leftNumber)) + leftNumber;
6290
6301
  }
6291
6302
  else {
@@ -6293,12 +6304,12 @@ class Utils {
6293
6304
  }
6294
6305
  }
6295
6306
  else if (result.length === 1) {
6296
- let paramData = result[0];
6307
+ const paramData = result[0];
6297
6308
  if (Array.isArray(paramData)) {
6298
6309
  return paramData[Math.floor(Math.random() * paramData.length)];
6299
6310
  }
6300
6311
  else if (typeof paramData === "object" && Object.keys(paramData).length > 0) {
6301
- let paramObjDataKey = Object.keys(paramData)[Math.floor(Math.random() * Object.keys(paramData).length)];
6312
+ const paramObjDataKey = Object.keys(paramData)[Math.floor(Math.random() * Object.keys(paramData).length)];
6302
6313
  return paramData[paramObjDataKey];
6303
6314
  }
6304
6315
  else {
@@ -6314,7 +6325,7 @@ class Utils {
6314
6325
  * Utils.getReactObj(document.querySelector("input"))?.reactProps?.onChange({target:{value:"123"}});
6315
6326
  */
6316
6327
  getReactObj(element) {
6317
- let result = {};
6328
+ const result = {};
6318
6329
  if (element == null) {
6319
6330
  return result;
6320
6331
  }
@@ -6340,9 +6351,9 @@ class Utils {
6340
6351
  if (typeof target !== "object") {
6341
6352
  throw new TypeError("target不是一个对象");
6342
6353
  }
6343
- let objectsSymbols = Object.getOwnPropertySymbols(target);
6354
+ const objectsSymbols = Object.getOwnPropertySymbols(target);
6344
6355
  if (typeof keyName === "string") {
6345
- let findSymbol = objectsSymbols.find((key) => {
6356
+ const findSymbol = objectsSymbols.find((key) => {
6346
6357
  return key.toString() === keyName;
6347
6358
  });
6348
6359
  if (findSymbol) {
@@ -6350,7 +6361,7 @@ class Utils {
6350
6361
  }
6351
6362
  }
6352
6363
  else if (typeof keyName === "symbol") {
6353
- let findSymbol = objectsSymbols.find((key) => {
6364
+ const findSymbol = objectsSymbols.find((key) => {
6354
6365
  return key === keyName;
6355
6366
  });
6356
6367
  if (findSymbol) {
@@ -6358,7 +6369,7 @@ class Utils {
6358
6369
  }
6359
6370
  }
6360
6371
  else {
6361
- let result = {};
6372
+ const result = {};
6362
6373
  objectsSymbols.forEach((item) => {
6363
6374
  result[item] = target[item];
6364
6375
  });
@@ -6373,12 +6384,12 @@ class Utils {
6373
6384
  * > 12
6374
6385
  */
6375
6386
  getTextLength(text) {
6376
- let encoder = new TextEncoder();
6377
- let bytes = encoder.encode(text);
6387
+ const encoder = new TextEncoder();
6388
+ const bytes = encoder.encode(text);
6378
6389
  return bytes.length;
6379
6390
  }
6380
6391
  getTextStorageSize(text, addType = true) {
6381
- let UtilsContext = this;
6392
+ const UtilsContext = this;
6382
6393
  return UtilsContext.formatByteToSize(UtilsContext.getTextLength(text), addType);
6383
6394
  }
6384
6395
  getThunderUrl(url) {
@@ -6391,88 +6402,75 @@ class Utils {
6391
6402
  if (url.trim() === "") {
6392
6403
  throw new TypeError("url不能为空字符串或纯空格");
6393
6404
  }
6394
- return `thunder://${this.windowApi.globalThis.btoa("AA" + url + "ZZ")}`;
6405
+ return `thunder://${this.windowApi.globalThis.btoa(`AA${url}ZZ`)}`;
6395
6406
  }
6396
6407
  /**
6397
- * 对于GM_cookie的兼容写法,当无法使用GM_cookie时可以使用这个,但是并不完全兼容,有些写不出来且限制了httponly是无法访问的
6398
- * @example
6399
- let GM_cookie = new Utils.GM_Cookie();
6400
- GM_cookie.list({name:"xxx_cookie_xxx"},function(cookies,error){
6401
- if (!error) {
6402
- console.log(cookies);
6403
- console.log(cookies.value);
6404
- } else {
6405
- console.error(error);
6406
- }
6407
- });
6408
- GM_cookie.set({name:"xxx_cookie_test_xxx",value:"这是Cookie测试值"},function(error){
6409
- if (error) {
6410
- console.error(error);
6411
- } else {
6412
- console.log('Cookie set successfully.');
6413
- }
6414
- })
6415
- GM_cookie.delete({name:"xxx_cookie_test_xxx"},function(error){
6416
- if (error) {
6417
- console.error(error);
6418
- } else {
6419
- console.log('Cookie set successfully.');
6420
- }
6421
- })
6422
- **/
6408
+ * 对于GM_cookie的兼容写法,当无法使用GM_cookie时可以使用这个,但是并不完全兼容,有些写不出来且限制了httponly是无法访问的
6409
+ * @example
6410
+ let GM_cookie = new Utils.GM_Cookie();
6411
+ GM_cookie.list({name:"xxx_cookie_xxx"},function(cookies,error){
6412
+ if (!error) {
6413
+ console.log(cookies);
6414
+ console.log(cookies.value);
6415
+ } else {
6416
+ console.error(error);
6417
+ }
6418
+ });
6419
+ GM_cookie.set({name:"xxx_cookie_test_xxx",value:"这是Cookie测试值"},function(error){
6420
+ if (error) {
6421
+ console.error(error);
6422
+ } else {
6423
+ console.log('Cookie set successfully.');
6424
+ }
6425
+ })
6426
+ GM_cookie.delete({name:"xxx_cookie_test_xxx"},function(error){
6427
+ if (error) {
6428
+ console.error(error);
6429
+ } else {
6430
+ console.log('Cookie set successfully.');
6431
+ }
6432
+ })
6433
+ **/
6423
6434
  GM_Cookie = UtilsGMCookie;
6424
6435
  /**
6425
- * 注册油猴菜单,要求本地存储的键名不能存在其它键名`GM_Menu_Local_Map`会冲突/覆盖
6426
- * @example
6427
- let GM_Menu = new Utils.GM_Menu({
6428
- data: [
6429
- {
6430
- menu_key: "menu_key",
6431
- text: "测试按钮",
6432
- enable: true,
6433
- accessKey: "a",
6434
- autoClose: false,
6435
- showText(text, enable) {
6436
- return "[" + (enable ? "√" : "×") + "]" + text;
6436
+ * 注册油猴菜单,要求本地存储的键名不能存在其它键名`GM_Menu_Local_Map`会冲突/覆盖
6437
+ * @example
6438
+ let GM_Menu = new Utils.GM_Menu({
6439
+ data: [
6440
+ {
6441
+ menu_key: "menu_key",
6442
+ text: "测试按钮",
6443
+ enable: true,
6444
+ accessKey: "a",
6445
+ autoClose: false,
6446
+ showText(text, enable) {
6447
+ return "[" + (enable ? "√" : "×") + "]" + text;
6448
+ },
6449
+ callback(data) {
6450
+ console.log("点击菜单,值修改为", data.enable);
6451
+ },
6437
6452
  },
6438
- callback(data) {
6439
- console.log("点击菜单,值修改为", data.enable);
6440
- },
6441
- },
6442
- ],
6443
- autoReload: false,
6444
- GM_getValue,
6445
- GM_setValue,
6446
- GM_registerMenuCommand,
6447
- GM_unregisterMenuCommand,
6448
- });
6449
-
6450
-
6451
- // 获取某个菜单项的值
6452
- GM_Menu.get("menu_key");
6453
- > true
6454
-
6455
- // 获取某个菜单项的开启/关闭后显示的文本
6456
- GM_Menu.getShowTextValue("menu_key");
6457
- > √测试按钮
6458
-
6459
- // 添加键为menu_key2的菜单项
6460
- GM_Menu.add({
6461
- key:"menu_key2",
6462
- text: "测试按钮2",
6463
- enable: false,
6464
- showText(text,enable){
6465
- return "[" + (enable ? "√" : "×") + "]" + text;
6466
- },
6467
- callback(data){
6468
- console.log("点击菜单,值修改为",data.enable);
6469
- }
6470
- });
6471
- // 使用数组的方式添加多个菜单,如menu_key3、menu_key4
6472
- GM_Menu.add([
6473
- {
6474
- key:"menu_key3",
6475
- text: "测试按钮3",
6453
+ ],
6454
+ autoReload: false,
6455
+ GM_getValue,
6456
+ GM_setValue,
6457
+ GM_registerMenuCommand,
6458
+ GM_unregisterMenuCommand,
6459
+ });
6460
+
6461
+
6462
+ // 获取某个菜单项的值
6463
+ GM_Menu.get("menu_key");
6464
+ > true
6465
+
6466
+ // 获取某个菜单项的开启/关闭后显示的文本
6467
+ GM_Menu.getShowTextValue("menu_key");
6468
+ > √测试按钮
6469
+
6470
+ // 添加键为menu_key2的菜单项
6471
+ GM_Menu.add({
6472
+ key:"menu_key2",
6473
+ text: "测试按钮2",
6476
6474
  enable: false,
6477
6475
  showText(text,enable){
6478
6476
  return "[" + (enable ? "√" : "×") + "]" + text;
@@ -6480,152 +6478,165 @@ class Utils {
6480
6478
  callback(data){
6481
6479
  console.log("点击菜单,值修改为",data.enable);
6482
6480
  }
6483
- },
6484
- {
6485
- key:"menu_key4",
6486
- text: "测试按钮4",
6487
- enable: false,
6488
- showText(text,enable){
6489
- return "[" + (enable ? "√" : "×") + "]" + text;
6481
+ });
6482
+ // 使用数组的方式添加多个菜单,如menu_key3、menu_key4
6483
+ GM_Menu.add([
6484
+ {
6485
+ key:"menu_key3",
6486
+ text: "测试按钮3",
6487
+ enable: false,
6488
+ showText(text,enable){
6489
+ return "[" + (enable ? "√" : "×") + "]" + text;
6490
+ },
6491
+ callback(data){
6492
+ console.log("点击菜单,值修改为",data.enable);
6493
+ }
6490
6494
  },
6491
- callback(data){
6492
- console.log("点击菜单,值修改为",data.enable);
6495
+ {
6496
+ key:"menu_key4",
6497
+ text: "测试按钮4",
6498
+ enable: false,
6499
+ showText(text,enable){
6500
+ return "[" + (enable ? "√" : "×") + "]" + text;
6501
+ },
6502
+ callback(data){
6503
+ console.log("点击菜单,值修改为",data.enable);
6504
+ }
6493
6505
  }
6494
- }
6495
- ]);
6496
-
6497
- // 更新键为menu_key的显示文字和点击回调
6498
- GM_Menu.update({
6499
- menu_key:{
6500
- text: "更新后的测试按钮",
6501
- enable: true,
6502
- showText(text,enable){
6503
- return "[" + (enable ? "√" : "×") + "]" + text;
6504
- },
6505
- callback(data){
6506
- console.log("点击菜单更新后的测试按钮,新值修改为",data.enable);
6506
+ ]);
6507
+
6508
+ // 更新键为menu_key的显示文字和点击回调
6509
+ GM_Menu.update({
6510
+ menu_key:{
6511
+ text: "更新后的测试按钮",
6512
+ enable: true,
6513
+ showText(text,enable){
6514
+ return "[" + (enable ? "√" : "×") + "]" + text;
6515
+ },
6516
+ callback(data){
6517
+ console.log("点击菜单更新后的测试按钮,新值修改为",data.enable);
6518
+ }
6507
6519
  }
6508
- }
6509
- });
6510
-
6511
- // 删除键为menu_key的菜单
6512
- GM_Menu.delete("menu_key");
6513
- **/
6520
+ });
6521
+
6522
+ // 删除键为menu_key的菜单
6523
+ GM_Menu.delete("menu_key");
6524
+ **/
6514
6525
  GM_Menu = GMMenu;
6515
6526
  /**
6516
- * 基于Function prototype,能够勾住和释放任何函数
6517
- *
6518
- * .hook
6519
- * + realFunc {string} 用于保存原始函数的函数名称,用于unHook
6520
- * + hookFunc {string} 替换的hook函数
6521
- * + context {object} 目标函数所在对象,用于hook非window对象下的函数,如String.protype.slice,carInstance1
6522
- * + methodName {string} 匿名函数需显式传入目标函数名eg:this.Begin = function(){....};}
6523
- *
6524
- * .unhook
6525
- * + realFunc {string} 用于保存原始函数的函数名称,用于unHook
6526
- * + funcName {string} 被Hook的函数名称
6527
- * + context {object} 目标函数所在对象,用于hook非window对象下的函数,如String.protype.slice,carInstance1
6528
- * @example
6529
- let hook = new Utils.Hooks();
6530
- hook.initEnv();
6531
- function myFunction(){
6532
- console.log("我自己需要执行的函数");
6533
- }
6534
- function testFunction(){
6535
- console.log("正常执行的函数");
6536
- }
6537
- testFunction.hook(testFunction,myFunction,window);
6538
- **/
6527
+ * 基于Function prototype,能够勾住和释放任何函数
6528
+ *
6529
+ * .hook
6530
+ * + realFunc {string} 用于保存原始函数的函数名称,用于unHook
6531
+ * + hookFunc {string} 替换的hook函数
6532
+ * + context {object} 目标函数所在对象,用于hook非window对象下的函数,如String.protype.slice,carInstance1
6533
+ * + methodName {string} 匿名函数需显式传入目标函数名eg:this.Begin = function(){....};}
6534
+ *
6535
+ * .unhook
6536
+ * + realFunc {string} 用于保存原始函数的函数名称,用于unHook
6537
+ * + funcName {string} 被Hook的函数名称
6538
+ * + context {object} 目标函数所在对象,用于hook非window对象下的函数,如String.protype.slice,carInstance1
6539
+ * @example
6540
+ let hook = new Utils.Hooks();
6541
+ hook.initEnv();
6542
+ function myFunction(){
6543
+ console.log("我自己需要执行的函数");
6544
+ }
6545
+ function testFunction(){
6546
+ console.log("正常执行的函数");
6547
+ }
6548
+ testFunction.hook(testFunction,myFunction,window);
6549
+ **/
6539
6550
  Hooks = Hooks;
6540
6551
  /**
6541
- * 为减少代码量和回调,把GM_xmlhttpRequest封装
6542
- * 文档地址: https://www.tampermonkey.net/documentation.php?ext=iikm
6543
- * 其中onloadstart、onprogress、onreadystatechange是回调形式,onabort、ontimeout、onerror可以设置全局回调函数
6544
- * @param _GM_xmlHttpRequest_ 油猴中的GM_xmlhttpRequest
6545
- * @example
6546
- let httpx = new Utils.Httpx(GM_xmlhttpRequest);
6547
- let postResp = await httpx.post({
6548
- url:url,
6549
- data:JSON.stringify({
6550
- test:1
6551
- }),
6552
- timeout: 5000
6553
- });
6554
- console.log(postResp);
6555
- > {
6556
- status: true,
6557
- data: {responseText: "...", response: xxx,...},
6558
- msg: "请求完毕",
6559
- type: "onload",
6560
- }
6561
-
6562
- if(postResp === "onload" && postResp.status){
6563
- // onload
6564
- }else if(postResp === "ontimeout"){
6565
- // ontimeout
6566
- }
6567
- * @example
6568
- // 也可以先配置全局参数
6569
- let httpx = new Utils.Httpx(GM_xmlhttpRequest);
6570
- httpx.config({
6571
- timeout: 5000,
6572
- async: false,
6573
- responseType: "html",
6574
- redirect: "follow",
6575
- })
6576
- // 优先级为 默认details < 全局details < 单独的details
6577
- */
6552
+ * 为减少代码量和回调,把GM_xmlhttpRequest封装
6553
+ * 文档地址: https://www.tampermonkey.net/documentation.php?ext=iikm
6554
+ * 其中onloadstart、onprogress、onreadystatechange是回调形式,onabort、ontimeout、onerror可以设置全局回调函数
6555
+ * @param _GM_xmlHttpRequest_ 油猴中的GM_xmlhttpRequest
6556
+ * @example
6557
+ let httpx = new Utils.Httpx(GM_xmlhttpRequest);
6558
+ let postResp = await httpx.post({
6559
+ url:url,
6560
+ data:JSON.stringify({
6561
+ test:1
6562
+ }),
6563
+ timeout: 5000
6564
+ });
6565
+ console.log(postResp);
6566
+ > {
6567
+ status: true,
6568
+ data: {responseText: "...", response: xxx,...},
6569
+ msg: "请求完毕",
6570
+ type: "onload",
6571
+ }
6572
+
6573
+ if(postResp === "onload" && postResp.status){
6574
+ // onload
6575
+ }else if(postResp === "ontimeout"){
6576
+ // ontimeout
6577
+ }
6578
+ * @example
6579
+ // 也可以先配置全局参数
6580
+ let httpx = new Utils.Httpx(GM_xmlhttpRequest);
6581
+ httpx.config({
6582
+ timeout: 5000,
6583
+ async: false,
6584
+ responseType: "html",
6585
+ redirect: "follow",
6586
+ })
6587
+ // 优先级为 默认details < 全局details < 单独的details
6588
+ */
6578
6589
  Httpx = Httpx;
6579
6590
  /**
6580
- * 浏览器端的indexedDB操作封装
6581
- * @example
6582
- let db = new Utils.indexedDB('web_DB', 'nav_text')
6583
- let data = {name:'管理员', roleId: 1, type: 1};
6584
- db.save('list',data).then((resolve)=>{
6585
- console.log(resolve,'存储成功')
6586
- })
6587
-
6588
- db.get('list').then((resolve)=>{
6589
- console.log(resolve,'查询成功')
6590
- })
6591
-
6592
- db.getPaging('list',20,10).then((resolve)=>{
6593
- console.log(resolve,'查询分页偏移第20,一共10行成功');
6594
- })
6595
-
6596
- db.delete('list').then(resolve=>{
6597
- console.log(resolve,'删除成功---->>>>>>name')
6598
- })
6599
-
6600
- db.deleteAll().then(resolve=>{
6601
- console.log(resolve,'清除数据库---->>>>>>name')
6602
- })
6603
- **/
6591
+ * 浏览器端的indexedDB操作封装
6592
+ * @example
6593
+ let db = new Utils.indexedDB('web_DB', 'nav_text')
6594
+ let data = {name:'管理员', roleId: 1, type: 1};
6595
+ db.save('list',data).then((resolve)=>{
6596
+ console.log(resolve,'存储成功')
6597
+ })
6598
+
6599
+ db.get('list').then((resolve)=>{
6600
+ console.log(resolve,'查询成功')
6601
+ })
6602
+
6603
+ db.getPaging('list',20,10).then((resolve)=>{
6604
+ console.log(resolve,'查询分页偏移第20,一共10行成功');
6605
+ })
6606
+
6607
+ db.delete('list').then(resolve=>{
6608
+ console.log(resolve,'删除成功---->>>>>>name')
6609
+ })
6610
+
6611
+ db.deleteAll().then(resolve=>{
6612
+ console.log(resolve,'清除数据库---->>>>>>name')
6613
+ })
6614
+ **/
6604
6615
  indexedDB = indexedDB;
6605
6616
  isNativeFunc(target) {
6606
6617
  return Boolean(target.toString().match(/^function .*\(\) { \[native code\] }$/));
6607
6618
  }
6608
6619
  isNearBottom(...args) {
6609
6620
  let nearBottomHeight = 50;
6610
- let checkWindow = () => {
6621
+ const checkWindow = () => {
6611
6622
  // 已滚动的距离
6612
- let scrollTop = this.windowApi.window.pageYOffset || this.windowApi.document.documentElement.scrollTop;
6623
+ const scrollTop = this.windowApi.window.pageYOffset || this.windowApi.document.documentElement.scrollTop;
6613
6624
  // 视窗高度
6614
- let viewportHeight = this.windowApi.window.innerHeight || this.windowApi.document.documentElement.clientHeight;
6625
+ const viewportHeight = this.windowApi.window.innerHeight || this.windowApi.document.documentElement.clientHeight;
6615
6626
  // 最大滚动距离
6616
- let maxScrollHeight = this.windowApi.document.documentElement.scrollHeight - nearBottomHeight;
6627
+ const maxScrollHeight = this.windowApi.document.documentElement.scrollHeight - nearBottomHeight;
6617
6628
  return scrollTop + viewportHeight >= maxScrollHeight;
6618
6629
  };
6619
- let checkNode = ($ele) => {
6630
+ const checkNode = ($ele) => {
6620
6631
  // 已滚动的距离
6621
- let scrollTop = $ele.scrollTop;
6632
+ const scrollTop = $ele.scrollTop;
6622
6633
  // 视窗高度
6623
- let viewportHeight = $ele.clientHeight;
6634
+ const viewportHeight = $ele.clientHeight;
6624
6635
  // 最大滚动距离
6625
- let maxScrollHeight = $ele.scrollHeight - viewportHeight - nearBottomHeight;
6636
+ const maxScrollHeight = $ele.scrollHeight - viewportHeight - nearBottomHeight;
6626
6637
  return scrollTop >= maxScrollHeight;
6627
6638
  };
6628
- let firstArg = args[0];
6639
+ const firstArg = args[0];
6629
6640
  if (args.length === 0 || typeof args[0] === "number") {
6630
6641
  // nearBottomHeight
6631
6642
  //
@@ -6640,7 +6651,7 @@ class Utils {
6640
6651
  return checkNode(args[0]);
6641
6652
  }
6642
6653
  else {
6643
- throw new TypeError("参数1类型错误" + typeof firstArg);
6654
+ throw new TypeError(`参数1类型错误${typeof firstArg}`);
6644
6655
  }
6645
6656
  }
6646
6657
  /**
@@ -6670,7 +6681,7 @@ class Utils {
6670
6681
  }
6671
6682
  if (typeof target === "object") {
6672
6683
  /* 也有种可能,这个jQuery对象是1.8.3版本的,页面中的jQuery是3.4.1版本的 */
6673
- let jQueryProps = [
6684
+ const jQueryProps = [
6674
6685
  "add",
6675
6686
  "addBack",
6676
6687
  "addClass",
@@ -6854,50 +6865,50 @@ class Utils {
6854
6865
  */
6855
6866
  isNotNull = commonUtil.isNotNull.bind(commonUtil);
6856
6867
  /**
6857
- * 判断对象或数据是否为空
6858
- * + `String`判空的值,如 ""、"null"、"undefined"、" "
6859
- * + `Number`判空的值,如 0
6860
- * + `Object`判空的值,如 {}、null、undefined
6861
- * + `Array`(存在属性Symbol.iterator)判空的值,如 []
6862
- * + `Boolean`判空的值,如false
6863
- * + `Function`判空的值,如()=>{}、(xxx="")=>{}、function(){}、function(xxx=""){}
6864
- * @returns
6865
- * + true 为空
6866
- * + false 不为空
6867
- * @example
6868
- Utils.isNull({});
6869
- > true
6870
- * @example
6871
- Utils.isNull([]);
6872
- > true
6873
- * @example
6874
- Utils.isNull(" ");
6875
- > true
6876
- * @example
6877
- Utils.isNull(function(){});
6878
- > true
6879
- * @example
6880
- Utils.isNull(()=>{}));
6881
- > true
6882
- * @example
6883
- Utils.isNull("undefined");
6884
- > true
6885
- * @example
6886
- Utils.isNull("null");
6887
- > true
6888
- * @example
6889
- Utils.isNull(" ", false);
6890
- > true
6891
- * @example
6892
- Utils.isNull([1],[]);
6893
- > false
6894
- * @example
6895
- Utils.isNull([],[1]);
6896
- > false
6897
- * @example
6898
- Utils.isNull(false,[123]);
6899
- > false
6900
- **/
6868
+ * 判断对象或数据是否为空
6869
+ * + `String`判空的值,如 ""、"null"、"undefined"、" "
6870
+ * + `Number`判空的值,如 0
6871
+ * + `Object`判空的值,如 {}、null、undefined
6872
+ * + `Array`(存在属性Symbol.iterator)判空的值,如 []
6873
+ * + `Boolean`判空的值,如false
6874
+ * + `Function`判空的值,如()=>{}、(xxx="")=>{}、function(){}、function(xxx=""){}
6875
+ * @returns
6876
+ * + true 为空
6877
+ * + false 不为空
6878
+ * @example
6879
+ Utils.isNull({});
6880
+ > true
6881
+ * @example
6882
+ Utils.isNull([]);
6883
+ > true
6884
+ * @example
6885
+ Utils.isNull(" ");
6886
+ > true
6887
+ * @example
6888
+ Utils.isNull(function(){});
6889
+ > true
6890
+ * @example
6891
+ Utils.isNull(()=>{}));
6892
+ > true
6893
+ * @example
6894
+ Utils.isNull("undefined");
6895
+ > true
6896
+ * @example
6897
+ Utils.isNull("null");
6898
+ > true
6899
+ * @example
6900
+ Utils.isNull(" ", false);
6901
+ > true
6902
+ * @example
6903
+ Utils.isNull([1],[]);
6904
+ > false
6905
+ * @example
6906
+ Utils.isNull([],[1]);
6907
+ > false
6908
+ * @example
6909
+ Utils.isNull(false,[123]);
6910
+ > false
6911
+ **/
6901
6912
  isNull = commonUtil.isNull.bind(commonUtil);
6902
6913
  isThemeDark() {
6903
6914
  return this.windowApi.globalThis.matchMedia("(prefers-color-scheme: dark)").matches;
@@ -6926,15 +6937,15 @@ class Utils {
6926
6937
  }
6927
6938
  let result = true;
6928
6939
  for (const domItem of needCheckDomList) {
6929
- let domDisplay = this.windowApi.window.getComputedStyle(domItem);
6940
+ const domDisplay = this.windowApi.window.getComputedStyle(domItem);
6930
6941
  if (domDisplay.display === "none") {
6931
6942
  result = false;
6932
6943
  }
6933
6944
  else {
6934
- let domClientRect = domItem.getBoundingClientRect();
6945
+ const domClientRect = domItem.getBoundingClientRect();
6935
6946
  if (inView) {
6936
- let viewportWidth = this.windowApi.window.innerWidth || this.windowApi.document.documentElement.clientWidth;
6937
- let viewportHeight = this.windowApi.window.innerHeight || this.windowApi.document.documentElement.clientHeight;
6947
+ const viewportWidth = this.windowApi.window.innerWidth || this.windowApi.document.documentElement.clientWidth;
6948
+ const viewportHeight = this.windowApi.window.innerHeight || this.windowApi.document.documentElement.clientHeight;
6938
6949
  result = !(domClientRect.right < 0 ||
6939
6950
  domClientRect.left > viewportWidth ||
6940
6951
  domClientRect.bottom < 0 ||
@@ -6953,11 +6964,11 @@ class Utils {
6953
6964
  }
6954
6965
  isWebView_Via() {
6955
6966
  let result = true;
6956
- let UtilsContext = this;
6967
+ const UtilsContext = this;
6957
6968
  if (typeof this.windowApi.top.window.via === "object") {
6958
6969
  for (const key in Object.values(this.windowApi.top.window.via)) {
6959
6970
  if (Reflect.has(this.windowApi.top.window.via, key)) {
6960
- let objValueFunc = this.windowApi.top.window.via[key];
6971
+ const objValueFunc = this.windowApi.top.window.via[key];
6961
6972
  if (typeof objValueFunc === "function" && UtilsContext.isNativeFunc(objValueFunc)) {
6962
6973
  result = true;
6963
6974
  }
@@ -6975,11 +6986,11 @@ class Utils {
6975
6986
  }
6976
6987
  isWebView_X() {
6977
6988
  let result = true;
6978
- let UtilsContext = this;
6989
+ const UtilsContext = this;
6979
6990
  if (typeof this.windowApi.top.window.mbrowser === "object") {
6980
6991
  for (const key in Object.values(this.windowApi.top.window.mbrowser)) {
6981
6992
  if (Reflect.has(this.windowApi.top.window.mbrowser, key)) {
6982
- let objValueFunc = this.windowApi.top.window.mbrowser[key];
6993
+ const objValueFunc = this.windowApi.top.window.mbrowser[key];
6983
6994
  if (typeof objValueFunc === "function" && UtilsContext.isNativeFunc(objValueFunc)) {
6984
6995
  result = true;
6985
6996
  }
@@ -7006,46 +7017,46 @@ class Utils {
7006
7017
  return result;
7007
7018
  }
7008
7019
  /**
7009
- * 自动锁对象,用于循环判断运行的函数,在循环外new后使用,注意,如果函数内部存在异步操作,需要使用await
7010
- * @example
7011
- let lock = new Utils.LockFunction(()=>{console.log(1)}))
7012
- lock.run();
7013
- > 1
7014
- * @example
7015
- let lock = new Utils.LockFunction(()=>{console.log(1)}),true) -- 异步操作
7016
- await lock.run();
7017
- > 1
7018
- **/
7020
+ * 自动锁对象,用于循环判断运行的函数,在循环外new后使用,注意,如果函数内部存在异步操作,需要使用await
7021
+ * @example
7022
+ let lock = new Utils.LockFunction(()=>{console.log(1)}))
7023
+ lock.run();
7024
+ > 1
7025
+ * @example
7026
+ let lock = new Utils.LockFunction(()=>{console.log(1)}),true) -- 异步操作
7027
+ await lock.run();
7028
+ > 1
7029
+ **/
7019
7030
  LockFunction = LockFunction;
7020
7031
  /**
7021
- * 日志对象
7022
- * @param _GM_info_ 油猴管理器的API GM_info,或者是一个对象,如{"script":{name:"Utils.Log"}}
7023
- * @example
7024
- let log = new Utils.Log(GM_info);
7025
- log.info("普通输出");
7026
- > 普通输出
7027
-
7028
- log.success("成功输出");
7029
- > 成功输出
7030
-
7031
- log.error("错误输出");
7032
- > 错误输出
7033
-
7034
- log.warn("警告输出");
7035
- > 警告输出
7036
-
7037
- log.tag = "自定义tag信息";
7038
- log.info("自定义info的颜色","#e0e0e0");
7039
- > 自定义info的颜色
7040
-
7041
- log.config({
7042
- successColor: "#31dc02",
7043
- errorColor: "#e02d2d",
7044
- infoColor: "black",
7045
- })
7046
- log.success("颜色为#31dc02");
7047
- > 颜色为#31dc02
7048
- */
7032
+ * 日志对象
7033
+ * @param _GM_info_ 油猴管理器的API GM_info,或者是一个对象,如{"script":{name:"Utils.Log"}}
7034
+ * @example
7035
+ let log = new Utils.Log(GM_info);
7036
+ log.info("普通输出");
7037
+ > 普通输出
7038
+
7039
+ log.success("成功输出");
7040
+ > 成功输出
7041
+
7042
+ log.error("错误输出");
7043
+ > 错误输出
7044
+
7045
+ log.warn("警告输出");
7046
+ > 警告输出
7047
+
7048
+ log.tag = "自定义tag信息";
7049
+ log.info("自定义info的颜色","#e0e0e0");
7050
+ > 自定义info的颜色
7051
+
7052
+ log.config({
7053
+ successColor: "#31dc02",
7054
+ errorColor: "#e02d2d",
7055
+ infoColor: "black",
7056
+ })
7057
+ log.success("颜色为#31dc02");
7058
+ > 颜色为#31dc02
7059
+ */
7049
7060
  Log = Log;
7050
7061
  mergeArrayToString(data, handleFunc) {
7051
7062
  if (!(data instanceof Array)) {
@@ -7074,8 +7085,8 @@ class Utils {
7074
7085
  return content;
7075
7086
  }
7076
7087
  mutationObserver(target, observer_config) {
7077
- let UtilsContext = this;
7078
- let default_obverser_config = {
7088
+ const UtilsContext = this;
7089
+ const default_obverser_config = {
7079
7090
  /* 监听到元素有反馈,需执行的函数 */
7080
7091
  callback: () => { },
7081
7092
  config: {
@@ -7117,11 +7128,11 @@ class Utils {
7117
7128
  immediate: false,
7118
7129
  };
7119
7130
  observer_config = UtilsContext.assign(default_obverser_config, observer_config);
7120
- let windowMutationObserver = this.windowApi.window.MutationObserver ||
7131
+ const windowMutationObserver = this.windowApi.window.MutationObserver ||
7121
7132
  this.windowApi.window.webkitMutationObserver ||
7122
7133
  this.windowApi.window.MozMutationObserver;
7123
7134
  // 观察者对象
7124
- let mutationObserver = new windowMutationObserver(function (mutations, observer) {
7135
+ const mutationObserver = new windowMutationObserver(function (mutations, observer) {
7125
7136
  if (typeof observer_config.callback === "function") {
7126
7137
  observer_config.callback(mutations, observer);
7127
7138
  }
@@ -7134,7 +7145,7 @@ class Utils {
7134
7145
  }
7135
7146
  else if (UtilsContext.isJQuery(target)) {
7136
7147
  /* 传入的参数是jQuery对象 */
7137
- target.each((index, item) => {
7148
+ target.each((_, item) => {
7138
7149
  mutationObserver.observe(item, observer_config.config);
7139
7150
  });
7140
7151
  }
@@ -7172,7 +7183,7 @@ class Utils {
7172
7183
  threshold: [0.01, 0.99],
7173
7184
  };
7174
7185
  defaultOptions = this.assign(defaultOptions, options || {});
7175
- let intersectionObserver = new IntersectionObserver((entries, observer) => {
7186
+ const intersectionObserver = new IntersectionObserver((entries, observer) => {
7176
7187
  if (entries[0].isIntersecting) {
7177
7188
  if (typeof callback === "function") {
7178
7189
  callback(entries, observer);
@@ -7202,7 +7213,7 @@ class Utils {
7202
7213
  return utils;
7203
7214
  }
7204
7215
  noConflictFunc(needReleaseObject, needReleaseName, functionNameList = [], release = true) {
7205
- let UtilsContext = this;
7216
+ const UtilsContext = this;
7206
7217
  if (typeof needReleaseObject !== "object") {
7207
7218
  throw new Error("Utils.noConflictFunc 参数 needReleaseObject 必须为 object 类型");
7208
7219
  }
@@ -7212,7 +7223,7 @@ class Utils {
7212
7223
  if (!Array.isArray(functionNameList)) {
7213
7224
  throw new Error("Utils.noConflictFunc 参数 functionNameList 必须为 Array 类型");
7214
7225
  }
7215
- let needReleaseKey = "__" + needReleaseName;
7226
+ const needReleaseKey = `__${needReleaseName}`;
7216
7227
  /**
7217
7228
  * 释放所有
7218
7229
  */
@@ -7300,7 +7311,9 @@ class Utils {
7300
7311
  if (typeof dataUri !== "string") {
7301
7312
  throw new Error("Utils.parseBase64ToBlob 参数 dataUri 必须为 string 类型");
7302
7313
  }
7303
- let dataUriSplit = dataUri.split(","), dataUriMime = dataUriSplit[0].match(/:(.*?);/)[1], dataUriBase64Str = atob(dataUriSplit[1]), dataUriLength = dataUriBase64Str.length, u8arr = new Uint8Array(dataUriLength);
7314
+ const dataUriSplit = dataUri.split(","), dataUriMime = dataUriSplit[0].match(/:(.*?);/)[1], dataUriBase64Str = atob(dataUriSplit[1]);
7315
+ let dataUriLength = dataUriBase64Str.length;
7316
+ const u8arr = new Uint8Array(dataUriLength);
7304
7317
  while (dataUriLength--) {
7305
7318
  u8arr[dataUriLength] = dataUriBase64Str.charCodeAt(dataUriLength);
7306
7319
  }
@@ -7315,7 +7328,9 @@ class Utils {
7315
7328
  if (typeof fileName !== "string") {
7316
7329
  throw new Error("Utils.parseBase64ToFile 参数 fileName 必须为 string 类型");
7317
7330
  }
7318
- let dataUriSplit = dataUri.split(","), dataUriMime = dataUriSplit[0].match(/:(.*?);/)[1], dataUriBase64Str = atob(dataUriSplit[1]), dataUriLength = dataUriBase64Str.length, u8arr = new Uint8Array(dataUriLength);
7331
+ const dataUriSplit = dataUri.split(","), dataUriMime = dataUriSplit[0].match(/:(.*?);/)[1], dataUriBase64Str = atob(dataUriSplit[1]);
7332
+ let dataUriLength = dataUriBase64Str.length;
7333
+ const u8arr = new Uint8Array(dataUriLength);
7319
7334
  while (dataUriLength--) {
7320
7335
  u8arr[dataUriLength] = dataUriBase64Str.charCodeAt(dataUriLength);
7321
7336
  }
@@ -7349,15 +7364,15 @@ class Utils {
7349
7364
  }
7350
7365
  parseCDATA(text = "") {
7351
7366
  let result = "";
7352
- let cdataRegexp = /<\!\[CDATA\[([\s\S]*)\]\]>/;
7353
- let cdataMatch = cdataRegexp.exec(text.trim());
7367
+ const cdataRegexp = /<!\[CDATA\[([\s\S]*)\]\]>/;
7368
+ const cdataMatch = cdataRegexp.exec(text.trim());
7354
7369
  if (cdataMatch && cdataMatch.length > 1) {
7355
7370
  result = cdataMatch[cdataMatch.length - 1];
7356
7371
  }
7357
7372
  return result;
7358
7373
  }
7359
7374
  async parseFileToBase64(fileObj) {
7360
- let reader = new FileReader();
7375
+ const reader = new FileReader();
7361
7376
  reader.readAsDataURL(fileObj);
7362
7377
  return new Promise((resolve) => {
7363
7378
  reader.onload = function (event) {
@@ -7366,14 +7381,14 @@ class Utils {
7366
7381
  });
7367
7382
  }
7368
7383
  parseFromString(text, mimeType = "text/html") {
7369
- let parser = new DOMParser();
7384
+ const parser = new DOMParser();
7370
7385
  return parser.parseFromString(text, mimeType);
7371
7386
  }
7372
7387
  parseStringToRegExpString(text) {
7373
7388
  if (typeof text !== "string") {
7374
7389
  throw new TypeError("string必须是字符串");
7375
7390
  }
7376
- let regString = text.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&");
7391
+ const regString = text.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&");
7377
7392
  return regString;
7378
7393
  }
7379
7394
  preventEvent(element, eventNameList = [], capture) {
@@ -7388,6 +7403,7 @@ class Utils {
7388
7403
  }
7389
7404
  if (arguments.length === 1) {
7390
7405
  /* 直接阻止事件 */
7406
+ // eslint-disable-next-line prefer-rest-params
7391
7407
  return stopEvent(arguments[0]);
7392
7408
  }
7393
7409
  else {
@@ -7403,11 +7419,11 @@ class Utils {
7403
7419
  }
7404
7420
  }
7405
7421
  /**
7406
- * 在canvas元素节点上绘制进度圆圈
7407
- * @example
7408
- let progress = new Utils.Process({canvasNode:document.querySelector("canvas")});
7409
- progress.draw();
7410
- * **/
7422
+ * 在canvas元素节点上绘制进度圆圈
7423
+ * @example
7424
+ let progress = new Utils.Process({canvasNode:document.querySelector("canvas")});
7425
+ progress.draw();
7426
+ * **/
7411
7427
  Progress = Progress;
7412
7428
  registerTrustClickEvent(isTrustValue = true, filter) {
7413
7429
  function trustEvent(event) {
@@ -7429,8 +7445,8 @@ class Utils {
7429
7445
  }
7430
7446
  const originalListener = EventTarget.prototype.addEventListener;
7431
7447
  EventTarget.prototype.addEventListener = function (...args) {
7432
- let type = args[0];
7433
- let callback = args[1];
7448
+ const type = args[0];
7449
+ const callback = args[1];
7434
7450
  // let options = args[2];
7435
7451
  if (filter(type)) {
7436
7452
  if (typeof callback === "function") {
@@ -7439,7 +7455,7 @@ class Utils {
7439
7455
  };
7440
7456
  }
7441
7457
  else if (typeof callback === "object" && "handleEvent" in callback) {
7442
- let oldHandleEvent = callback["handleEvent"];
7458
+ const oldHandleEvent = callback["handleEvent"];
7443
7459
  args[1]["handleEvent"] = function (event) {
7444
7460
  if (event == null) {
7445
7461
  return;
@@ -7450,7 +7466,7 @@ class Utils {
7450
7466
  event instanceof Proxy;
7451
7467
  oldHandleEvent.call(this, trustEvent(event));
7452
7468
  }
7453
- catch (error) {
7469
+ catch {
7454
7470
  Reflect.set(event, "isTrusted", isTrustValue);
7455
7471
  }
7456
7472
  };
@@ -7473,7 +7489,7 @@ class Utils {
7473
7489
  return isNegative ? -reversedNum : reversedNum;
7474
7490
  }
7475
7491
  selectElementText(element, childTextNode, startIndex, endIndex) {
7476
- let range = this.windowApi.document.createRange();
7492
+ const range = this.windowApi.document.createRange();
7477
7493
  range.selectNodeContents(element);
7478
7494
  if (childTextNode) {
7479
7495
  if (childTextNode.nodeType !== Node.TEXT_NODE) {
@@ -7484,7 +7500,7 @@ class Utils {
7484
7500
  range.setEnd(childTextNode, endIndex);
7485
7501
  }
7486
7502
  }
7487
- let selection = this.windowApi.globalThis.getSelection();
7503
+ const selection = this.windowApi.globalThis.getSelection();
7488
7504
  if (selection) {
7489
7505
  selection.removeAllRanges();
7490
7506
  selection.addRange(range);
@@ -7512,7 +7528,7 @@ class Utils {
7512
7528
  else {
7513
7529
  textType = "text/plain";
7514
7530
  }
7515
- let UtilsContext = this;
7531
+ const UtilsContext = this;
7516
7532
  class UtilsClipboard {
7517
7533
  #resolve;
7518
7534
  #copyData;
@@ -7524,7 +7540,7 @@ class Utils {
7524
7540
  }
7525
7541
  async init() {
7526
7542
  let copyStatus = false;
7527
- let requestPermissionStatus = await this.requestClipboardPermission();
7543
+ const requestPermissionStatus = await this.requestClipboardPermission();
7528
7544
  console.log(requestPermissionStatus);
7529
7545
  if (this.hasClipboard() && (this.hasClipboardWrite() || this.hasClipboardWriteText())) {
7530
7546
  try {
@@ -7563,7 +7579,7 @@ class Utils {
7563
7579
  */
7564
7580
  copyTextByTextArea() {
7565
7581
  try {
7566
- let copyElement = UtilsContext.windowApi.document.createElement("textarea");
7582
+ const copyElement = UtilsContext.windowApi.document.createElement("textarea");
7567
7583
  copyElement.value = this.#copyData;
7568
7584
  copyElement.setAttribute("type", "text");
7569
7585
  copyElement.setAttribute("style", "opacity:0;position:absolute;");
@@ -7583,20 +7599,17 @@ class Utils {
7583
7599
  * 申请剪贴板权限
7584
7600
  */
7585
7601
  requestClipboardPermission() {
7586
- return new Promise((resolve, reject) => {
7602
+ return new Promise((resolve) => {
7587
7603
  if (navigator.permissions && navigator.permissions.query) {
7588
7604
  navigator.permissions
7589
7605
  .query({
7590
7606
  name: "clipboard-write",
7591
7607
  })
7592
- .then((permissionStatus) => {
7608
+ .then(() => {
7593
7609
  resolve(true);
7594
7610
  })
7595
7611
  .catch((error) => {
7596
- console.error([
7597
- "申请剪贴板权限失败,尝试直接写入👉",
7598
- error.message ?? error.name ?? error.stack,
7599
- ]);
7612
+ console.error(["申请剪贴板权限失败,尝试直接写入👉", error.message ?? error.name ?? error.stack]);
7600
7613
  resolve(false);
7601
7614
  });
7602
7615
  }
@@ -7623,7 +7636,7 @@ class Utils {
7623
7636
  }
7624
7637
  else {
7625
7638
  /* 可复制对象 */
7626
- let textBlob = new Blob([this.#copyData], {
7639
+ const textBlob = new Blob([this.#copyData], {
7627
7640
  type: this.#copyDataType,
7628
7641
  });
7629
7642
  navigator.clipboard
@@ -7655,7 +7668,7 @@ class Utils {
7655
7668
  });
7656
7669
  }
7657
7670
  setTimeout(callback, delayTime = 0) {
7658
- let UtilsContext = this;
7671
+ const UtilsContext = this;
7659
7672
  if (typeof callback !== "function" && typeof callback !== "string") {
7660
7673
  throw new TypeError("Utils.setTimeout 参数 callback 必须为 function|string 类型");
7661
7674
  }
@@ -7669,7 +7682,7 @@ class Utils {
7669
7682
  });
7670
7683
  }
7671
7684
  sleep(delayTime = 0) {
7672
- let UtilsContext = this;
7685
+ const UtilsContext = this;
7673
7686
  if (typeof delayTime !== "number") {
7674
7687
  throw new Error("Utils.sleep 参数 delayTime 必须为 number 类型");
7675
7688
  }
@@ -7680,18 +7693,18 @@ class Utils {
7680
7693
  });
7681
7694
  }
7682
7695
  dragSlider(selector, offsetX = this.windowApi.window.innerWidth) {
7683
- let UtilsContext = this;
7696
+ const UtilsContext = this;
7684
7697
  function initMouseEvent(eventName, offSetX, offSetY) {
7685
- let win = typeof unsafeWindow === "undefined" ? globalThis : unsafeWindow;
7686
- let mouseEvent = UtilsContext.windowApi.document.createEvent("MouseEvents");
7698
+ const win = typeof unsafeWindow === "undefined" ? globalThis : unsafeWindow;
7699
+ const mouseEvent = UtilsContext.windowApi.document.createEvent("MouseEvents");
7687
7700
  mouseEvent.initMouseEvent(eventName, true, true, win, 0, offSetX, offSetY, offSetX, offSetY, false, false, false, false, 0, null);
7688
7701
  return mouseEvent;
7689
7702
  }
7690
- let sliderElement = typeof selector === "string" ? domUtils.selector(selector) : selector;
7703
+ const sliderElement = typeof selector === "string" ? domUtils.selector(selector) : selector;
7691
7704
  if (!(sliderElement instanceof Node) || !(sliderElement instanceof Element)) {
7692
7705
  throw new Error("Utils.dragSlider 参数selector 必须为Node/Element类型");
7693
7706
  }
7694
- let rect = sliderElement.getBoundingClientRect(), x0 = rect.x || rect.left, y0 = rect.y || rect.top, x1 = x0 + offsetX, y1 = y0;
7707
+ const rect = sliderElement.getBoundingClientRect(), x0 = rect.x || rect.left, y0 = rect.y || rect.top, x1 = x0 + offsetX, y1 = y0;
7695
7708
  sliderElement.dispatchEvent(initMouseEvent("mousedown", x0, y0));
7696
7709
  sliderElement.dispatchEvent(initMouseEvent("mousemove", x1, y1));
7697
7710
  sliderElement.dispatchEvent(initMouseEvent("mouseleave", x1, y1));
@@ -7719,34 +7732,34 @@ class Utils {
7719
7732
  console.error(err);
7720
7733
  }
7721
7734
  }
7722
- exitFullScreen(element = this.windowApi.document.documentElement) {
7723
- if (this.windowApi.document.exitFullscreen) {
7724
- return this.windowApi.document.exitFullscreen();
7735
+ exitFullScreen($el = this.windowApi.document.documentElement) {
7736
+ if ($el.exitFullscreen) {
7737
+ return $el.exitFullscreen();
7725
7738
  }
7726
- else if (this.windowApi.document.msExitFullscreen) {
7727
- return this.windowApi.document.msExitFullscreen();
7739
+ else if ($el.msExitFullscreen) {
7740
+ return $el.msExitFullscreen();
7728
7741
  }
7729
- else if (this.windowApi.document.mozCancelFullScreen) {
7730
- return this.windowApi.document.mozCancelFullScreen();
7742
+ else if ($el.mozCancelFullScreen) {
7743
+ return $el.mozCancelFullScreen();
7731
7744
  }
7732
- else if (this.windowApi.document.webkitCancelFullScreen) {
7733
- return this.windowApi.document.webkitCancelFullScreen();
7745
+ else if ($el.webkitCancelFullScreen) {
7746
+ return $el.webkitCancelFullScreen();
7734
7747
  }
7735
7748
  else {
7736
- return new Promise((resolve, reject) => {
7749
+ return new Promise((_, reject) => {
7737
7750
  reject(new TypeError("该浏览器不支持全屏API"));
7738
7751
  });
7739
7752
  }
7740
7753
  }
7741
7754
  sortListByProperty(data, getPropertyValueFunc, sortByDesc = true) {
7742
- let UtilsContext = this;
7755
+ const UtilsContext = this;
7743
7756
  if (typeof getPropertyValueFunc !== "function" && typeof getPropertyValueFunc !== "string") {
7744
7757
  throw new Error("Utils.sortListByProperty 参数 getPropertyValueFunc 必须为 function|string 类型");
7745
7758
  }
7746
7759
  if (typeof sortByDesc !== "boolean") {
7747
7760
  throw new Error("Utils.sortListByProperty 参数 sortByDesc 必须为 boolean 类型");
7748
7761
  }
7749
- let getObjValue = function (obj) {
7762
+ const getObjValue = function (obj) {
7750
7763
  return typeof getPropertyValueFunc === "string" ? obj[getPropertyValueFunc] : getPropertyValueFunc(obj);
7751
7764
  };
7752
7765
  /**
@@ -7755,9 +7768,9 @@ class Utils {
7755
7768
  * @param {any} before_obj
7756
7769
  * @returns
7757
7770
  */
7758
- let sortFunc = function (after_obj, before_obj) {
7759
- let beforeValue = getObjValue(before_obj); /* 前 */
7760
- let afterValue = getObjValue(after_obj); /* 后 */
7771
+ const sortFunc = function (after_obj, before_obj) {
7772
+ const beforeValue = getObjValue(before_obj); /* 前 */
7773
+ const afterValue = getObjValue(after_obj); /* 后 */
7761
7774
  if (sortByDesc) {
7762
7775
  if (afterValue > beforeValue) {
7763
7776
  return -1;
@@ -7786,19 +7799,18 @@ class Utils {
7786
7799
  * @param nodeList 元素列表
7787
7800
  * @param getNodeListFunc 获取元素列表的函数
7788
7801
  */
7789
- let sortNodeFunc = function (nodeList, getNodeListFunc) {
7790
- let nodeListLength = nodeList.length;
7802
+ const sortNodeFunc = function (nodeList, getNodeListFunc) {
7803
+ const nodeListLength = nodeList.length;
7791
7804
  for (let i = 0; i < nodeListLength - 1; i++) {
7792
7805
  for (let j = 0; j < nodeListLength - 1 - i; j++) {
7793
- let beforeNode = nodeList[j];
7794
- let afterNode = nodeList[j + 1];
7795
- let beforeValue = getObjValue(beforeNode); /* 前 */
7796
- let afterValue = getObjValue(afterNode); /* 后 */
7797
- if ((sortByDesc == true && beforeValue < afterValue) ||
7798
- (sortByDesc == false && beforeValue > afterValue)) {
7806
+ const beforeNode = nodeList[j];
7807
+ const afterNode = nodeList[j + 1];
7808
+ const beforeValue = getObjValue(beforeNode); /* 前 */
7809
+ const afterValue = getObjValue(afterNode); /* 后 */
7810
+ if ((sortByDesc == true && beforeValue < afterValue) || (sortByDesc == false && beforeValue > afterValue)) {
7799
7811
  /* 升序/降序 */
7800
7812
  /* 相邻元素两两对比 */
7801
- let temp = beforeNode.nextElementSibling;
7813
+ const temp = beforeNode.nextElementSibling;
7802
7814
  afterNode.after(beforeNode);
7803
7815
  if (temp == null) {
7804
7816
  /* 如果为空,那么是最后一个元素,使用append */
@@ -7856,7 +7868,7 @@ class Utils {
7856
7868
  return newTargetString;
7857
7869
  }
7858
7870
  startsWith(target, searchString, position = 0) {
7859
- let UtilsContext = this;
7871
+ const UtilsContext = this;
7860
7872
  if (position > target.length) {
7861
7873
  /* 超出目标字符串的长度 */
7862
7874
  return false;
@@ -7900,7 +7912,7 @@ class Utils {
7900
7912
  */
7901
7913
  toJSON = commonUtil.toJSON.bind(commonUtil);
7902
7914
  toSearchParamsStr(obj, addPrefix) {
7903
- let UtilsContext = this;
7915
+ const UtilsContext = this;
7904
7916
  let searhParamsStr = "";
7905
7917
  if (Array.isArray(obj)) {
7906
7918
  obj.forEach((item) => {
@@ -7908,7 +7920,7 @@ class Utils {
7908
7920
  searhParamsStr += UtilsContext.toSearchParamsStr(item);
7909
7921
  }
7910
7922
  else {
7911
- searhParamsStr += "&" + UtilsContext.toSearchParamsStr(item);
7923
+ searhParamsStr += `&${UtilsContext.toSearchParamsStr(item)}`;
7912
7924
  }
7913
7925
  });
7914
7926
  }
@@ -7916,7 +7928,7 @@ class Utils {
7916
7928
  searhParamsStr = new URLSearchParams(Object.entries(obj)).toString();
7917
7929
  }
7918
7930
  if (addPrefix && !searhParamsStr.startsWith("?")) {
7919
- searhParamsStr = "?" + searhParamsStr;
7931
+ searhParamsStr = `?${searhParamsStr}`;
7920
7932
  }
7921
7933
  return searhParamsStr;
7922
7934
  }
@@ -7964,7 +7976,7 @@ class Utils {
7964
7976
  }
7965
7977
  }
7966
7978
  waitArrayLoopToEnd(data, handleFunc) {
7967
- let UtilsContext = this;
7979
+ const UtilsContext = this;
7968
7980
  if (typeof handleFunc !== "function" && typeof handleFunc !== "string") {
7969
7981
  throw new Error("Utils.waitArrayLoopToEnd 参数 handleDataFunction 必须为 function|string 类型");
7970
7982
  }
@@ -7974,17 +7986,17 @@ class Utils {
7974
7986
  }
7975
7987
  wait(checkFn, timeout, parent) {
7976
7988
  const UtilsContext = this;
7977
- let __timeout__ = typeof timeout === "number" ? timeout : 0;
7989
+ const __timeout__ = typeof timeout === "number" ? timeout : 0;
7978
7990
  return new Promise((resolve) => {
7979
- let observer = UtilsContext.mutationObserver(parent || UtilsContext.windowApi.document, {
7991
+ const observer = UtilsContext.mutationObserver(parent || UtilsContext.windowApi.document, {
7980
7992
  config: {
7981
7993
  subtree: true,
7982
7994
  childList: true,
7983
7995
  attributes: true,
7984
7996
  },
7985
7997
  immediate: true,
7986
- callback(mutations, __observer__) {
7987
- let result = checkFn();
7998
+ callback(_, __observer__) {
7999
+ const result = checkFn();
7988
8000
  if (result.success) {
7989
8001
  // 取消观察器
7990
8002
  if (typeof __observer__?.disconnect === "function") {
@@ -8008,9 +8020,9 @@ class Utils {
8008
8020
  waitNode(...args) {
8009
8021
  // 过滤掉undefined
8010
8022
  args = args.filter((arg) => arg !== void 0);
8011
- let UtilsContext = this;
8023
+ const UtilsContext = this;
8012
8024
  // 选择器
8013
- let selector = args[0];
8025
+ const selector = args[0];
8014
8026
  // 父元素(监听的元素)
8015
8027
  let parent = UtilsContext.windowApi.document;
8016
8028
  // 超时时间
@@ -8020,7 +8032,7 @@ class Utils {
8020
8032
  }
8021
8033
  if (args.length === 1) ;
8022
8034
  else if (args.length === 2) {
8023
- let secondParam = args[1];
8035
+ const secondParam = args[1];
8024
8036
  if (typeof secondParam === "number") {
8025
8037
  // "div",10000
8026
8038
  timeout = secondParam;
@@ -8036,9 +8048,9 @@ class Utils {
8036
8048
  else if (args.length === 3) {
8037
8049
  // "div",document,10000
8038
8050
  // 第二个参数,parent
8039
- let secondParam = args[1];
8051
+ const secondParam = args[1];
8040
8052
  // 第三个参数,timeout
8041
- let thirdParam = args[2];
8053
+ const thirdParam = args[2];
8042
8054
  if (typeof secondParam === "object" && secondParam instanceof Node) {
8043
8055
  parent = secondParam;
8044
8056
  if (typeof thirdParam === "number") {
@@ -8057,9 +8069,9 @@ class Utils {
8057
8069
  }
8058
8070
  function getNode() {
8059
8071
  if (Array.isArray(selector)) {
8060
- let result = [];
8072
+ const result = [];
8061
8073
  for (let index = 0; index < selector.length; index++) {
8062
- let node = domUtils.selector(selector[index]);
8074
+ const node = domUtils.selector(selector[index]);
8063
8075
  if (node) {
8064
8076
  result.push(node);
8065
8077
  }
@@ -8076,7 +8088,7 @@ class Utils {
8076
8088
  }
8077
8089
  }
8078
8090
  return UtilsContext.wait(() => {
8079
- let node = getNode();
8091
+ const node = getNode();
8080
8092
  if (node) {
8081
8093
  return {
8082
8094
  success: true,
@@ -8094,9 +8106,9 @@ class Utils {
8094
8106
  waitAnyNode(...args) {
8095
8107
  // 过滤掉undefined
8096
8108
  args = args.filter((arg) => arg !== void 0);
8097
- let UtilsContext = this;
8109
+ const UtilsContext = this;
8098
8110
  // 选择器
8099
- let selectorList = args[0];
8111
+ const selectorList = args[0];
8100
8112
  // 父元素(监听的元素)
8101
8113
  let parent = UtilsContext.windowApi.document;
8102
8114
  // 超时时间
@@ -8106,7 +8118,7 @@ class Utils {
8106
8118
  }
8107
8119
  if (args.length === 1) ;
8108
8120
  else if (args.length === 2) {
8109
- let secondParam = args[1];
8121
+ const secondParam = args[1];
8110
8122
  if (typeof secondParam === "number") {
8111
8123
  // "div",10000
8112
8124
  timeout = secondParam;
@@ -8122,9 +8134,9 @@ class Utils {
8122
8134
  else if (args.length === 3) {
8123
8135
  // "div",document,10000
8124
8136
  // 第二个参数,parent
8125
- let secondParam = args[1];
8137
+ const secondParam = args[1];
8126
8138
  // 第三个参数,timeout
8127
- let thirdParam = args[2];
8139
+ const thirdParam = args[2];
8128
8140
  if (typeof secondParam === "object" && secondParam instanceof Node) {
8129
8141
  parent = secondParam;
8130
8142
  if (typeof thirdParam === "number") {
@@ -8141,7 +8153,7 @@ class Utils {
8141
8153
  else {
8142
8154
  throw new TypeError("Utils.waitAnyNode 参数个数错误");
8143
8155
  }
8144
- let promiseList = selectorList.map((selector) => {
8156
+ const promiseList = selectorList.map((selector) => {
8145
8157
  return UtilsContext.waitNode(selector, parent, timeout);
8146
8158
  });
8147
8159
  return Promise.any(promiseList);
@@ -8149,9 +8161,9 @@ class Utils {
8149
8161
  waitNodeList(...args) {
8150
8162
  // 过滤掉undefined
8151
8163
  args = args.filter((arg) => arg !== void 0);
8152
- let UtilsContext = this;
8164
+ const UtilsContext = this;
8153
8165
  // 选择器数组
8154
- let selector = args[0];
8166
+ const selector = args[0];
8155
8167
  // 父元素(监听的元素)
8156
8168
  let parent = UtilsContext.windowApi.document;
8157
8169
  // 超时时间
@@ -8161,7 +8173,7 @@ class Utils {
8161
8173
  }
8162
8174
  if (args.length === 1) ;
8163
8175
  else if (args.length === 2) {
8164
- let secondParam = args[1];
8176
+ const secondParam = args[1];
8165
8177
  if (typeof secondParam === "number") {
8166
8178
  // "div",10000
8167
8179
  timeout = secondParam;
@@ -8177,9 +8189,9 @@ class Utils {
8177
8189
  else if (args.length === 3) {
8178
8190
  // "div",document,10000
8179
8191
  // 第二个参数,parent
8180
- let secondParam = args[1];
8192
+ const secondParam = args[1];
8181
8193
  // 第三个参数,timeout
8182
- let thirdParam = args[2];
8194
+ const thirdParam = args[2];
8183
8195
  if (typeof secondParam === "object" && secondParam instanceof Node) {
8184
8196
  parent = secondParam;
8185
8197
  if (typeof thirdParam === "number") {
@@ -8198,9 +8210,9 @@ class Utils {
8198
8210
  }
8199
8211
  function getNodeList() {
8200
8212
  if (Array.isArray(selector)) {
8201
- let result = [];
8213
+ const result = [];
8202
8214
  for (let index = 0; index < selector.length; index++) {
8203
- let nodeList = domUtils.selectorAll(selector[index], parent);
8215
+ const nodeList = domUtils.selectorAll(selector[index], parent);
8204
8216
  if (nodeList.length) {
8205
8217
  result.push(nodeList);
8206
8218
  }
@@ -8210,14 +8222,14 @@ class Utils {
8210
8222
  }
8211
8223
  }
8212
8224
  else {
8213
- let nodeList = domUtils.selectorAll(selector, parent);
8225
+ const nodeList = domUtils.selectorAll(selector, parent);
8214
8226
  if (nodeList.length) {
8215
8227
  return nodeList;
8216
8228
  }
8217
8229
  }
8218
8230
  }
8219
8231
  return UtilsContext.wait(() => {
8220
- let node = getNodeList();
8232
+ const node = getNodeList();
8221
8233
  if (node) {
8222
8234
  return {
8223
8235
  success: true,
@@ -8235,9 +8247,9 @@ class Utils {
8235
8247
  waitAnyNodeList(...args) {
8236
8248
  // 过滤掉undefined
8237
8249
  args = args.filter((arg) => arg !== void 0);
8238
- let UtilsContext = this;
8250
+ const UtilsContext = this;
8239
8251
  // 选择器数组
8240
- let selectorList = args[0];
8252
+ const selectorList = args[0];
8241
8253
  // 父元素(监听的元素)
8242
8254
  let parent = UtilsContext.windowApi.document;
8243
8255
  // 超时时间
@@ -8247,7 +8259,7 @@ class Utils {
8247
8259
  }
8248
8260
  if (args.length === 1) ;
8249
8261
  else if (args.length === 2) {
8250
- let secondParam = args[1];
8262
+ const secondParam = args[1];
8251
8263
  if (typeof secondParam === "number") {
8252
8264
  // "div",10000
8253
8265
  timeout = secondParam;
@@ -8263,9 +8275,9 @@ class Utils {
8263
8275
  else if (args.length === 3) {
8264
8276
  // "div",document,10000
8265
8277
  // 第二个参数,parent
8266
- let secondParam = args[1];
8278
+ const secondParam = args[1];
8267
8279
  // 第三个参数,timeout
8268
- let thirdParam = args[2];
8280
+ const thirdParam = args[2];
8269
8281
  if (typeof secondParam === "object" && secondParam instanceof Node) {
8270
8282
  parent = secondParam;
8271
8283
  if (typeof thirdParam === "number") {
@@ -8282,7 +8294,7 @@ class Utils {
8282
8294
  else {
8283
8295
  throw new TypeError("Utils.waitAnyNodeList 参数个数错误");
8284
8296
  }
8285
- let promiseList = selectorList.map((selector) => {
8297
+ const promiseList = selectorList.map((selector) => {
8286
8298
  return UtilsContext.waitNodeList(selector, parent, timeout);
8287
8299
  });
8288
8300
  return Promise.any(promiseList);
@@ -8311,13 +8323,13 @@ class Utils {
8311
8323
  });
8312
8324
  }
8313
8325
  waitPropertyByInterval(checkObj, checkPropertyName, intervalTimer = 250, maxTime = -1) {
8314
- let UtilsContext = this;
8326
+ const UtilsContext = this;
8315
8327
  if (checkObj == null) {
8316
8328
  throw new TypeError("checkObj 不能为空对象 ");
8317
8329
  }
8318
8330
  let isResolve = false;
8319
8331
  return new Promise((resolve, reject) => {
8320
- let interval = UtilsContext.workerSetInterval(() => {
8332
+ const interval = UtilsContext.workerSetInterval(() => {
8321
8333
  let obj = checkObj;
8322
8334
  if (typeof checkObj === "function") {
8323
8335
  obj = checkObj();
@@ -8350,7 +8362,7 @@ class Utils {
8350
8362
  throw new Error("Utils.waitVueByInterval 参数element 不能为空");
8351
8363
  }
8352
8364
  let flag = false;
8353
- let UtilsContext = this;
8365
+ const UtilsContext = this;
8354
8366
  try {
8355
8367
  await UtilsContext.waitPropertyByInterval(element, function (targetElement) {
8356
8368
  if (targetElement == null) {
@@ -8362,7 +8374,7 @@ class Utils {
8362
8374
  if (propertyName == null) {
8363
8375
  return true;
8364
8376
  }
8365
- let vueObject = targetElement[vueName];
8377
+ const vueObject = targetElement[vueName];
8366
8378
  if (typeof propertyName === "string") {
8367
8379
  if (propertyName in vueObject) {
8368
8380
  flag = true;
@@ -8378,6 +8390,7 @@ class Utils {
8378
8390
  }
8379
8391
  return false;
8380
8392
  }, timer, maxTime);
8393
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
8381
8394
  }
8382
8395
  catch (error) {
8383
8396
  return flag;
@@ -8436,7 +8449,7 @@ class Utils {
8436
8449
  if (target == null) {
8437
8450
  return;
8438
8451
  }
8439
- let handleResult = handler(target);
8452
+ const handleResult = handler(target);
8440
8453
  if (handleResult && typeof handleResult.isFind === "boolean" && handleResult.isFind) {
8441
8454
  return handleResult.data;
8442
8455
  }
@@ -8449,10 +8462,10 @@ class Utils {
8449
8462
  */
8450
8463
  async asyncQueryProperty(target, handler) {
8451
8464
  if (target == null) {
8452
- // @ts-ignore
8465
+ // @ts-expect-error 空返回
8453
8466
  return;
8454
8467
  }
8455
- let handleResult = await handler(target);
8468
+ const handleResult = await handler(target);
8456
8469
  if (handleResult && typeof handleResult.isFind === "boolean" && handleResult.isFind) {
8457
8470
  return handleResult.data;
8458
8471
  }
@@ -8560,6 +8573,7 @@ class Utils {
8560
8573
  workerSetTimeout(callback, timeout = 0) {
8561
8574
  try {
8562
8575
  return setTimeout$1(callback, timeout);
8576
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
8563
8577
  }
8564
8578
  catch (error) {
8565
8579
  return this.windowApi.setTimeout(callback, timeout);
@@ -8574,8 +8588,10 @@ class Utils {
8574
8588
  if (timeId != null) {
8575
8589
  clearTimeout$1(timeId);
8576
8590
  }
8591
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
8577
8592
  }
8578
8593
  catch (error) {
8594
+ // console.log(error);
8579
8595
  }
8580
8596
  finally {
8581
8597
  this.windowApi.clearTimeout(timeId);
@@ -8589,6 +8605,7 @@ class Utils {
8589
8605
  workerSetInterval(callback, timeout = 0) {
8590
8606
  try {
8591
8607
  return setInterval(callback, timeout);
8608
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
8592
8609
  }
8593
8610
  catch (error) {
8594
8611
  return this.windowApi.setInterval(callback, timeout);
@@ -8603,8 +8620,10 @@ class Utils {
8603
8620
  if (timeId != null) {
8604
8621
  clearInterval(timeId);
8605
8622
  }
8623
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
8606
8624
  }
8607
8625
  catch (error) {
8626
+ // console.log(error);
8608
8627
  }
8609
8628
  finally {
8610
8629
  this.windowApi.clearInterval(timeId);
@@ -8638,10 +8657,10 @@ class Utils {
8638
8657
  .query({
8639
8658
  name: "clipboard-read",
8640
8659
  })
8641
- .then((permissionStatus) => {
8660
+ .then(() => {
8642
8661
  readClipboardText();
8643
8662
  })
8644
- .catch((error) => {
8663
+ .catch(() => {
8645
8664
  /* 该权限申请Api可能在该环境下不生效,尝试直接读取剪贴板 */
8646
8665
  readClipboardText();
8647
8666
  });
@@ -8678,7 +8697,7 @@ class Utils {
8678
8697
  });
8679
8698
  }
8680
8699
  }
8681
- let utils = new Utils();
8700
+ const utils = new Utils();
8682
8701
 
8683
8702
  export { utils as default };
8684
8703
  //# sourceMappingURL=index.esm.js.map