whatsapp-ui-react 0.0.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 (148) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +133 -0
  3. package/dist/components/Chat/Chat.d.ts +48 -0
  4. package/dist/components/Chat/Chat.d.ts.map +1 -0
  5. package/dist/components/Chat/ChatReplyContext.d.ts +22 -0
  6. package/dist/components/Chat/ChatReplyContext.d.ts.map +1 -0
  7. package/dist/components/Chat/DayDivider.d.ts +11 -0
  8. package/dist/components/Chat/DayDivider.d.ts.map +1 -0
  9. package/dist/components/Chat/Header.d.ts +16 -0
  10. package/dist/components/Chat/Header.d.ts.map +1 -0
  11. package/dist/components/Chat/Inputfield.d.ts +31 -0
  12. package/dist/components/Chat/Inputfield.d.ts.map +1 -0
  13. package/dist/components/Chat/InputfieldActions.d.ts +26 -0
  14. package/dist/components/Chat/InputfieldActions.d.ts.map +1 -0
  15. package/dist/components/Chat/MessageList.d.ts +11 -0
  16. package/dist/components/Chat/MessageList.d.ts.map +1 -0
  17. package/dist/components/Chat/index.d.ts +11 -0
  18. package/dist/components/Chat/index.d.ts.map +1 -0
  19. package/dist/components/Chat/index.parts.d.ts +13 -0
  20. package/dist/components/Chat/index.parts.d.ts.map +1 -0
  21. package/dist/components/Message/Audio/Audio.d.ts +13 -0
  22. package/dist/components/Message/Audio/Audio.d.ts.map +1 -0
  23. package/dist/components/Message/Audio/index.d.ts +3 -0
  24. package/dist/components/Message/Audio/index.d.ts.map +1 -0
  25. package/dist/components/Message/Contact/Contact.d.ts +9 -0
  26. package/dist/components/Message/Contact/Contact.d.ts.map +1 -0
  27. package/dist/components/Message/Contact/index.d.ts +3 -0
  28. package/dist/components/Message/Contact/index.d.ts.map +1 -0
  29. package/dist/components/Message/Emoji/Emoji.d.ts +16 -0
  30. package/dist/components/Message/Emoji/Emoji.d.ts.map +1 -0
  31. package/dist/components/Message/Emoji/index.d.ts +3 -0
  32. package/dist/components/Message/Emoji/index.d.ts.map +1 -0
  33. package/dist/components/Message/Event/Event.d.ts +9 -0
  34. package/dist/components/Message/Event/Event.d.ts.map +1 -0
  35. package/dist/components/Message/Event/index.d.ts +3 -0
  36. package/dist/components/Message/Event/index.d.ts.map +1 -0
  37. package/dist/components/Message/File/File.d.ts +9 -0
  38. package/dist/components/Message/File/File.d.ts.map +1 -0
  39. package/dist/components/Message/File/index.d.ts +3 -0
  40. package/dist/components/Message/File/index.d.ts.map +1 -0
  41. package/dist/components/Message/Gif/Gif.d.ts +9 -0
  42. package/dist/components/Message/Gif/Gif.d.ts.map +1 -0
  43. package/dist/components/Message/Gif/index.d.ts +3 -0
  44. package/dist/components/Message/Gif/index.d.ts.map +1 -0
  45. package/dist/components/Message/Image/Image.d.ts +15 -0
  46. package/dist/components/Message/Image/Image.d.ts.map +1 -0
  47. package/dist/components/Message/Image/index.d.ts +3 -0
  48. package/dist/components/Message/Image/index.d.ts.map +1 -0
  49. package/dist/components/Message/Location/Location.d.ts +9 -0
  50. package/dist/components/Message/Location/Location.d.ts.map +1 -0
  51. package/dist/components/Message/Location/index.d.ts +3 -0
  52. package/dist/components/Message/Location/index.d.ts.map +1 -0
  53. package/dist/components/Message/Message.d.ts +34 -0
  54. package/dist/components/Message/Message.d.ts.map +1 -0
  55. package/dist/components/Message/MessageContext.d.ts +32 -0
  56. package/dist/components/Message/MessageContext.d.ts.map +1 -0
  57. package/dist/components/Message/Poll/Poll.d.ts +9 -0
  58. package/dist/components/Message/Poll/Poll.d.ts.map +1 -0
  59. package/dist/components/Message/Poll/index.d.ts +3 -0
  60. package/dist/components/Message/Poll/index.d.ts.map +1 -0
  61. package/dist/components/Message/StatusIcon.d.ts +12 -0
  62. package/dist/components/Message/StatusIcon.d.ts.map +1 -0
  63. package/dist/components/Message/Sticker/Sticker.d.ts +13 -0
  64. package/dist/components/Message/Sticker/Sticker.d.ts.map +1 -0
  65. package/dist/components/Message/Sticker/index.d.ts +3 -0
  66. package/dist/components/Message/Sticker/index.d.ts.map +1 -0
  67. package/dist/components/Message/Text/Text.d.ts +11 -0
  68. package/dist/components/Message/Text/Text.d.ts.map +1 -0
  69. package/dist/components/Message/Text/index.d.ts +3 -0
  70. package/dist/components/Message/Text/index.d.ts.map +1 -0
  71. package/dist/components/Message/Video/Video.d.ts +9 -0
  72. package/dist/components/Message/Video/Video.d.ts.map +1 -0
  73. package/dist/components/Message/Video/index.d.ts +3 -0
  74. package/dist/components/Message/Video/index.d.ts.map +1 -0
  75. package/dist/components/Message/Voice/Voice.d.ts +13 -0
  76. package/dist/components/Message/Voice/Voice.d.ts.map +1 -0
  77. package/dist/components/Message/Voice/Waveform.d.ts +18 -0
  78. package/dist/components/Message/Voice/Waveform.d.ts.map +1 -0
  79. package/dist/components/Message/Voice/index.d.ts +3 -0
  80. package/dist/components/Message/Voice/index.d.ts.map +1 -0
  81. package/dist/components/Message/index.d.ts +31 -0
  82. package/dist/components/Message/index.d.ts.map +1 -0
  83. package/dist/components/Message/index.parts.d.ts +33 -0
  84. package/dist/components/Message/index.parts.d.ts.map +1 -0
  85. package/dist/components/Reply/Reply.d.ts +14 -0
  86. package/dist/components/Reply/Reply.d.ts.map +1 -0
  87. package/dist/components/Reply/index.d.ts +3 -0
  88. package/dist/components/Reply/index.d.ts.map +1 -0
  89. package/dist/hooks/useAudioPlayer.d.ts +26 -0
  90. package/dist/hooks/useAudioPlayer.d.ts.map +1 -0
  91. package/dist/hooks/useMessages.d.ts +13 -0
  92. package/dist/hooks/useMessages.d.ts.map +1 -0
  93. package/dist/hooks/useReply.d.ts +22 -0
  94. package/dist/hooks/useReply.d.ts.map +1 -0
  95. package/dist/icons/AttachIcon.d.ts +7 -0
  96. package/dist/icons/AttachIcon.d.ts.map +1 -0
  97. package/dist/icons/AudioFileIcon.d.ts +8 -0
  98. package/dist/icons/AudioFileIcon.d.ts.map +1 -0
  99. package/dist/icons/AvatarPlaceholderIcon.d.ts +7 -0
  100. package/dist/icons/AvatarPlaceholderIcon.d.ts.map +1 -0
  101. package/dist/icons/BubbleTailIcon.d.ts +4 -0
  102. package/dist/icons/BubbleTailIcon.d.ts.map +1 -0
  103. package/dist/icons/MicFillIcon.d.ts +7 -0
  104. package/dist/icons/MicFillIcon.d.ts.map +1 -0
  105. package/dist/icons/MicOutlineIcon.d.ts +7 -0
  106. package/dist/icons/MicOutlineIcon.d.ts.map +1 -0
  107. package/dist/icons/PauseIcon.d.ts +7 -0
  108. package/dist/icons/PauseIcon.d.ts.map +1 -0
  109. package/dist/icons/PlayIcon.d.ts +7 -0
  110. package/dist/icons/PlayIcon.d.ts.map +1 -0
  111. package/dist/icons/SendIcon.d.ts +7 -0
  112. package/dist/icons/SendIcon.d.ts.map +1 -0
  113. package/dist/icons/StatusDoubleCheckIcon.d.ts +7 -0
  114. package/dist/icons/StatusDoubleCheckIcon.d.ts.map +1 -0
  115. package/dist/icons/StatusSendingIcon.d.ts +7 -0
  116. package/dist/icons/StatusSendingIcon.d.ts.map +1 -0
  117. package/dist/icons/StatusSentIcon.d.ts +7 -0
  118. package/dist/icons/StatusSentIcon.d.ts.map +1 -0
  119. package/dist/icons/StickerIcon.d.ts +7 -0
  120. package/dist/icons/StickerIcon.d.ts.map +1 -0
  121. package/dist/icons/index.d.ts +14 -0
  122. package/dist/icons/index.d.ts.map +1 -0
  123. package/dist/index.cjs +4316 -0
  124. package/dist/index.cjs.map +1 -0
  125. package/dist/index.d.ts +11 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/dist/index.js +4315 -0
  128. package/dist/index.js.map +1 -0
  129. package/dist/tailwind.css +49 -0
  130. package/dist/utils/audio.d.ts +14 -0
  131. package/dist/utils/audio.d.ts.map +1 -0
  132. package/dist/utils/cn.d.ts +4 -0
  133. package/dist/utils/cn.d.ts.map +1 -0
  134. package/dist/utils/color.d.ts +3 -0
  135. package/dist/utils/color.d.ts.map +1 -0
  136. package/dist/utils/date.d.ts +5 -0
  137. package/dist/utils/date.d.ts.map +1 -0
  138. package/dist/utils/extractText.d.ts +7 -0
  139. package/dist/utils/extractText.d.ts.map +1 -0
  140. package/dist/utils/groupMessages.d.ts +24 -0
  141. package/dist/utils/groupMessages.d.ts.map +1 -0
  142. package/dist/utils/message.d.ts +5 -0
  143. package/dist/utils/message.d.ts.map +1 -0
  144. package/dist/utils/string.d.ts +3 -0
  145. package/dist/utils/string.d.ts.map +1 -0
  146. package/dist/utils/time.d.ts +8 -0
  147. package/dist/utils/time.d.ts.map +1 -0
  148. package/package.json +96 -0
package/dist/index.cjs ADDED
@@ -0,0 +1,4316 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const React = require("react");
5
+ var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
6
+ function AttachIcon({ className }) {
7
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", className, children: /* @__PURE__ */ jsxRuntime.jsx(
8
+ "path",
9
+ {
10
+ d: "M11 13H5.5C4.94772 13 4.5 12.5523 4.5 12C4.5 11.4477 4.94772 11 5.5 11H11V5.5C11 4.94772 11.4477 4.5 12 4.5C12.5523 4.5 13 4.94772 13 5.5V11H18.5C19.0523 11 19.5 11.4477 19.5 12C19.5 12.5523 19.0523 13 18.5 13H13V18.5C13 19.0523 12.5523 19.5 12 19.5C11.4477 19.5 11 19.0523 11 18.5V13Z",
11
+ fill: "currentColor"
12
+ }
13
+ ) });
14
+ }
15
+ function AudioFileIcon({ className, title }) {
16
+ return /* @__PURE__ */ jsxRuntime.jsxs(
17
+ "svg",
18
+ {
19
+ viewBox: "0 0 55 55",
20
+ height: "40",
21
+ width: "40",
22
+ preserveAspectRatio: "xMidYMid meet",
23
+ "aria-hidden": "true",
24
+ className,
25
+ children: [
26
+ title && /* @__PURE__ */ jsxRuntime.jsx("title", { children: title }),
27
+ /* @__PURE__ */ jsxRuntime.jsx("path", { fill: "#FFAD1F", d: "M0,0h55v55H0V0z" }),
28
+ /* @__PURE__ */ jsxRuntime.jsx(
29
+ "path",
30
+ {
31
+ fill: "#FFFFFF",
32
+ d: "M27.5,16c-5.6,0-10,4.4-10,10v7.8c0,1.9,1.4,3.3,3.3,3.3h3.3v-8.9h-4.4V26\n c0-4.3,3.4-7.8,7.8-7.8s7.8,3.4,7.8,7.8v2.2h-4.4v8.9h3.3c1.9,0,3.3-1.4,3.3-3.3V26\n C37.5,20.4,33.1,16,27.5,16z"
33
+ }
34
+ )
35
+ ]
36
+ }
37
+ );
38
+ }
39
+ function AvatarPlaceholderIcon({ className }) {
40
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", className, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8V21h19.2v-1.8c0-3.2-6.4-4.8-9.6-4.8z" }) });
41
+ }
42
+ function BubbleTailIcon() {
43
+ return /* @__PURE__ */ jsxRuntime.jsxs(
44
+ "svg",
45
+ {
46
+ viewBox: "0 0 8 13",
47
+ height: "13",
48
+ width: "8",
49
+ preserveAspectRatio: "xMidYMid meet",
50
+ "aria-hidden": "true",
51
+ children: [
52
+ /* @__PURE__ */ jsxRuntime.jsx("path", { opacity: "0.13", d: "M5.188,1H0v11.193l6.467-8.625C7.526,2.156,6.958,1,5.188,1z" }),
53
+ /* @__PURE__ */ jsxRuntime.jsx("path", { fill: "currentColor", d: "M5.188,0H0v11.193l6.467-8.625C7.526,1.156,6.958,0,5.188,0z" })
54
+ ]
55
+ }
56
+ );
57
+ }
58
+ function MicFillIcon({ className }) {
59
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", className, children: /* @__PURE__ */ jsxRuntime.jsx(
60
+ "path",
61
+ {
62
+ d: "M12 14a2.9 2.9 0 0 1-2.125-.875A2.9 2.9 0 0 1 9 11V5q0-1.25.875-2.125A2.9 2.9 0 0 1 12 2q1.25 0 2.125.875T15 5v6q0 1.25-.875 2.125A2.9 2.9 0 0 1 12 14m0 7a1 1 0 0 1-1-1v-2.075q-2.6-.35-4.3-2.325-1.37-1.59-1.636-3.603C4.992 11.45 5.448 11 6 11s.988.452 1.09.995q.274 1.443 1.373 2.543Q9.926 16 12 16q2.075 0 3.537-1.463 1.099-1.098 1.373-2.543c.102-.542.538-.994 1.09-.994s1.008.45.936.997Q18.669 14.01 17.3 15.6q-1.7 1.975-4.3 2.325V20a1 1 0 0 1-1 1",
63
+ fill: "currentColor"
64
+ }
65
+ ) });
66
+ }
67
+ function MicOutlineIcon({ className }) {
68
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", className, children: /* @__PURE__ */ jsxRuntime.jsx(
69
+ "path",
70
+ {
71
+ d: "M12 14C11.1667 14 10.4583 13.7083 9.875 13.125C9.29167 12.5417 9 11.8333 9 11V5C9 4.16667 9.29167 3.45833 9.875 2.875C10.4583 2.29167 11.1667 2 12 2C12.8333 2 13.5417 2.29167 14.125 2.875C14.7083 3.45833 15 4.16667 15 5V11C15 11.8333 14.7083 12.5417 14.125 13.125C13.5417 13.7083 12.8333 14 12 14ZM12 21C11.4477 21 11 20.5523 11 20V17.925C9.26667 17.6917 7.83333 16.9167 6.7 15.6C5.78727 14.5396 5.24207 13.3387 5.06441 11.9973C4.9919 11.4498 5.44772 11 6 11C6.55228 11 6.98782 11.4518 7.0905 11.9945C7.27271 12.9574 7.73004 13.805 8.4625 14.5375C9.4375 15.5125 10.6167 16 12 16C13.3833 16 14.5625 15.5125 15.5375 14.5375C16.27 13.805 16.7273 12.9574 16.9095 11.9945C17.0122 11.4518 17.4477 11 18 11C18.5523 11 19.0081 11.4498 18.9356 11.9973C18.7579 13.3387 18.2127 14.5396 17.3 15.6C16.1667 16.9167 14.7333 17.6917 13 17.925V20C13 20.5523 12.5523 21 12 21ZM12 12C12.2833 12 12.5208 11.9042 12.7125 11.7125C12.9042 11.5208 13 11.2833 13 11V5C13 4.71667 12.9042 4.47917 12.7125 4.2875C12.5208 4.09583 12.2833 4 12 4C11.7167 4 11.4792 4.09583 11.2875 4.2875C11.0958 4.47917 11 4.71667 11 5V11C11 11.2833 11.0958 11.5208 11.2875 11.7125C11.4792 11.9042 11.7167 12 12 12Z",
72
+ fill: "currentColor"
73
+ }
74
+ ) });
75
+ }
76
+ function PauseIcon({ className }) {
77
+ return /* @__PURE__ */ jsxRuntime.jsx(
78
+ "svg",
79
+ {
80
+ viewBox: "0 0 34 34",
81
+ height: "24",
82
+ width: "24",
83
+ preserveAspectRatio: "xMidYMid meet",
84
+ fill: "currentColor",
85
+ "aria-hidden": "true",
86
+ className,
87
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9.2,25c0,0.5,0.4,1,0.9,1h3.6c0.5,0,0.9-0.4,0.9-1V9c0-0.5-0.4-0.9-0.9-0.9h-3.6C9.7,8,9.2,8.4,9.2,9V25z M20.2,8c-0.5,0-1,0.4-1,0.9V25c0,0.5,0.4,1,1,1h3.6c0.5,0,1-0.4,1-1V9c0-0.5-0.4-0.9-1-0.9C23.8,8,20.2,8,20.2,8z" })
88
+ }
89
+ );
90
+ }
91
+ function PlayIcon({ className }) {
92
+ return /* @__PURE__ */ jsxRuntime.jsx(
93
+ "svg",
94
+ {
95
+ viewBox: "0 0 34 34",
96
+ height: "24",
97
+ width: "24",
98
+ preserveAspectRatio: "xMidYMid meet",
99
+ fill: "currentColor",
100
+ "aria-hidden": "true",
101
+ className,
102
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8.5,8.7c0-1.7,1.2-2.4,2.6-1.5l14.4,8.3c1.4,0.8,1.4,2.2,0,3l-14.4,8.3c-1.4,0.8-2.6,0.2-2.6-1.5V8.7z" })
103
+ }
104
+ );
105
+ }
106
+ function SendIcon({ className }) {
107
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", className, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3.4 20.5l17.8-8.5a.5.5 0 000-.9L3.4 2.5a.5.5 0 00-.7.6l2.2 7.1c.1.2.2.4.5.4h7.4a.75.75 0 010 1.5H5.4a.5.5 0 00-.5.4l-2.2 7.1a.5.5 0 00.7.6z" }) });
108
+ }
109
+ function StatusDoubleCheckIcon({ className }) {
110
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 16 11", fill: "none", "aria-hidden": "true", className, children: /* @__PURE__ */ jsxRuntime.jsx(
111
+ "path",
112
+ {
113
+ d: "M11.0714 0.652832C10.991 0.585124 10.8894 0.55127 10.7667 0.55127C10.6186 0.55127 10.4916 0.610514 10.3858 0.729004L4.19688 8.36523L1.79112 6.09277C1.7488 6.04622 1.69802 6.01025 1.63877 5.98486C1.57953 5.95947 1.51817 5.94678 1.45469 5.94678C1.32351 5.94678 1.20925 5.99544 1.11192 6.09277L0.800883 6.40381C0.707784 6.49268 0.661235 6.60482 0.661235 6.74023C0.661235 6.87565 0.707784 6.98991 0.800883 7.08301L3.79698 10.0791C3.94509 10.2145 4.11224 10.2822 4.29844 10.2822C4.40424 10.2822 4.5058 10.259 4.60313 10.2124C4.70046 10.1659 4.78086 10.1003 4.84434 10.0156L11.4903 1.59863C11.5623 1.5013 11.5982 1.40186 11.5982 1.30029C11.5982 1.14372 11.5348 1.01888 11.4078 0.925781L11.0714 0.652832ZM8.6212 8.32715C8.43077 8.20866 8.2488 8.09017 8.0753 7.97168C7.99489 7.89128 7.8891 7.85107 7.75791 7.85107C7.6098 7.85107 7.4892 7.90397 7.3961 8.00977L7.10411 8.33984C7.01947 8.43717 6.97715 8.54508 6.97715 8.66357C6.97715 8.79476 7.0237 8.90902 7.1168 9.00635L8.1959 10.0791C8.33132 10.2145 8.49636 10.2822 8.69102 10.2822C8.79681 10.2822 8.89838 10.259 8.99571 10.2124C9.09304 10.1659 9.17556 10.1003 9.24327 10.0156L15.8639 1.62402C15.9358 1.53939 15.9718 1.43994 15.9718 1.32568C15.9718 1.1818 15.9125 1.05697 15.794 0.951172L15.4386 0.678223C15.3582 0.610514 15.2587 0.57666 15.1402 0.57666C14.9964 0.57666 14.8715 0.635905 14.7657 0.754395L8.6212 8.32715Z",
114
+ fill: "currentColor"
115
+ }
116
+ ) });
117
+ }
118
+ function StatusSendingIcon({ className }) {
119
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", className, children: /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "6", cy: "6", r: "5", stroke: "currentColor", strokeWidth: "1.5" }) });
120
+ }
121
+ function StatusSentIcon({ className }) {
122
+ return /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 16 11", fill: "none", "aria-hidden": "true", className, children: /* @__PURE__ */ jsxRuntime.jsx(
123
+ "path",
124
+ {
125
+ d: "M11.0714 0.652832C10.991 0.585124 10.8894 0.55127 10.7667 0.55127C10.6186 0.55127 10.4916 0.610514 10.3858 0.729004L4.19688 8.36523L1.79112 6.09277C1.7488 6.04622 1.69802 6.01025 1.63877 5.98486C1.57953 5.95947 1.51817 5.94678 1.45469 5.94678C1.32351 5.94678 1.20925 5.99544 1.11192 6.09277L0.800883 6.40381C0.707784 6.49268 0.661235 6.60482 0.661235 6.74023C0.661235 6.87565 0.707784 6.98991 0.800883 7.08301L3.79698 10.0791C3.94509 10.2145 4.11224 10.2822 4.29844 10.2822C4.40424 10.2822 4.5058 10.259 4.60313 10.2124C4.70046 10.1659 4.78086 10.1003 4.84434 10.0156L11.4903 1.59863C11.5623 1.5013 11.5982 1.40186 11.5982 1.30029C11.5982 1.14372 11.5348 1.01888 11.4078 0.925781L11.0714 0.652832Z",
126
+ fill: "currentColor"
127
+ }
128
+ ) });
129
+ }
130
+ function StickerIcon({ className }) {
131
+ return /* @__PURE__ */ jsxRuntime.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", className, children: [
132
+ /* @__PURE__ */ jsxRuntime.jsx(
133
+ "path",
134
+ {
135
+ d: "M8.49893 10.2521C9.32736 10.2521 9.99893 9.5805 9.99893 8.75208C9.99893 7.92365 9.32736 7.25208 8.49893 7.25208C7.6705 7.25208 6.99893 7.92365 6.99893 8.75208C6.99893 9.5805 7.6705 10.2521 8.49893 10.2521Z",
136
+ fill: "currentColor"
137
+ }
138
+ ),
139
+ /* @__PURE__ */ jsxRuntime.jsx(
140
+ "path",
141
+ {
142
+ d: "M17.0011 8.75208C17.0011 9.5805 16.3295 10.2521 15.5011 10.2521C14.6726 10.2521 14.0011 9.5805 14.0011 8.75208C14.0011 7.92365 14.6726 7.25208 15.5011 7.25208C16.3295 7.25208 17.0011 7.92365 17.0011 8.75208Z",
143
+ fill: "currentColor"
144
+ }
145
+ ),
146
+ /* @__PURE__ */ jsxRuntime.jsx(
147
+ "path",
148
+ {
149
+ fillRule: "evenodd",
150
+ clipRule: "evenodd",
151
+ d: "M16.8221 19.9799C15.5379 21.2537 13.8087 21.9781 12 22H9.27273C5.25611 22 2 18.7439 2 14.7273V9.27273C2 5.25611 5.25611 2 9.27273 2H14.7273C18.7439 2 22 5.25611 22 9.27273V11.8141C22 13.7532 21.2256 15.612 19.8489 16.9776L16.8221 19.9799ZM14.7273 4H9.27273C6.36068 4 4 6.36068 4 9.27273V14.7273C4 17.6393 6.36068 20 9.27273 20H11.3331C11.722 19.8971 12.0081 19.5417 12.0058 19.1204L11.9935 16.8564C11.9933 16.8201 11.9935 16.784 11.9941 16.7479C11.0454 16.7473 10.159 16.514 9.33502 16.0479C8.51002 15.5812 7.84752 14.9479 7.34752 14.1479C7.24752 13.9479 7.25585 13.7479 7.37252 13.5479C7.48919 13.3479 7.66419 13.2479 7.89752 13.2479L13.5939 13.2479C14.4494 12.481 15.5811 12.016 16.8216 12.0208L19.0806 12.0296C19.5817 12.0315 19.9889 11.6259 19.9889 11.1248V9.07648H19.9964C19.8932 6.25535 17.5736 4 14.7273 4ZM14.0057 19.1095C14.0066 19.2605 13.9959 19.4089 13.9744 19.5537C14.5044 19.3124 14.9926 18.9776 15.4136 18.5599L18.4405 15.5576C18.8989 15.1029 19.2653 14.5726 19.5274 13.996C19.3793 14.0187 19.2275 14.0301 19.0729 14.0295L16.8138 14.0208C15.252 14.0147 13.985 15.2837 13.9935 16.8455L14.0057 19.1095Z",
152
+ fill: "currentColor"
153
+ }
154
+ )
155
+ ] });
156
+ }
157
+ function r(e) {
158
+ var t, f, n = "";
159
+ if ("string" == typeof e || "number" == typeof e) n += e;
160
+ else if ("object" == typeof e) if (Array.isArray(e)) {
161
+ var o = e.length;
162
+ for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
163
+ } else for (f in e) e[f] && (n && (n += " "), n += f);
164
+ return n;
165
+ }
166
+ function clsx() {
167
+ for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
168
+ return n;
169
+ }
170
+ const concatArrays = (array1, array2) => {
171
+ const combinedArray = new Array(array1.length + array2.length);
172
+ for (let i = 0; i < array1.length; i++) {
173
+ combinedArray[i] = array1[i];
174
+ }
175
+ for (let i = 0; i < array2.length; i++) {
176
+ combinedArray[array1.length + i] = array2[i];
177
+ }
178
+ return combinedArray;
179
+ };
180
+ const createClassValidatorObject = (classGroupId, validator) => ({
181
+ classGroupId,
182
+ validator
183
+ });
184
+ const createClassPartObject = (nextPart = /* @__PURE__ */ new Map(), validators = null, classGroupId) => ({
185
+ nextPart,
186
+ validators,
187
+ classGroupId
188
+ });
189
+ const CLASS_PART_SEPARATOR = "-";
190
+ const EMPTY_CONFLICTS = [];
191
+ const ARBITRARY_PROPERTY_PREFIX = "arbitrary..";
192
+ const createClassGroupUtils = (config) => {
193
+ const classMap = createClassMap(config);
194
+ const {
195
+ conflictingClassGroups,
196
+ conflictingClassGroupModifiers
197
+ } = config;
198
+ const getClassGroupId = (className) => {
199
+ if (className.startsWith("[") && className.endsWith("]")) {
200
+ return getGroupIdForArbitraryProperty(className);
201
+ }
202
+ const classParts = className.split(CLASS_PART_SEPARATOR);
203
+ const startIndex = classParts[0] === "" && classParts.length > 1 ? 1 : 0;
204
+ return getGroupRecursive(classParts, startIndex, classMap);
205
+ };
206
+ const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {
207
+ if (hasPostfixModifier) {
208
+ const modifierConflicts = conflictingClassGroupModifiers[classGroupId];
209
+ const baseConflicts = conflictingClassGroups[classGroupId];
210
+ if (modifierConflicts) {
211
+ if (baseConflicts) {
212
+ return concatArrays(baseConflicts, modifierConflicts);
213
+ }
214
+ return modifierConflicts;
215
+ }
216
+ return baseConflicts || EMPTY_CONFLICTS;
217
+ }
218
+ return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;
219
+ };
220
+ return {
221
+ getClassGroupId,
222
+ getConflictingClassGroupIds
223
+ };
224
+ };
225
+ const getGroupRecursive = (classParts, startIndex, classPartObject) => {
226
+ const classPathsLength = classParts.length - startIndex;
227
+ if (classPathsLength === 0) {
228
+ return classPartObject.classGroupId;
229
+ }
230
+ const currentClassPart = classParts[startIndex];
231
+ const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);
232
+ if (nextClassPartObject) {
233
+ const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);
234
+ if (result) return result;
235
+ }
236
+ const validators = classPartObject.validators;
237
+ if (validators === null) {
238
+ return void 0;
239
+ }
240
+ const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);
241
+ const validatorsLength = validators.length;
242
+ for (let i = 0; i < validatorsLength; i++) {
243
+ const validatorObj = validators[i];
244
+ if (validatorObj.validator(classRest)) {
245
+ return validatorObj.classGroupId;
246
+ }
247
+ }
248
+ return void 0;
249
+ };
250
+ const getGroupIdForArbitraryProperty = (className) => className.slice(1, -1).indexOf(":") === -1 ? void 0 : (() => {
251
+ const content = className.slice(1, -1);
252
+ const colonIndex = content.indexOf(":");
253
+ const property = content.slice(0, colonIndex);
254
+ return property ? ARBITRARY_PROPERTY_PREFIX + property : void 0;
255
+ })();
256
+ const createClassMap = (config) => {
257
+ const {
258
+ theme,
259
+ classGroups
260
+ } = config;
261
+ return processClassGroups(classGroups, theme);
262
+ };
263
+ const processClassGroups = (classGroups, theme) => {
264
+ const classMap = createClassPartObject();
265
+ for (const classGroupId in classGroups) {
266
+ const group = classGroups[classGroupId];
267
+ processClassesRecursively(group, classMap, classGroupId, theme);
268
+ }
269
+ return classMap;
270
+ };
271
+ const processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {
272
+ const len = classGroup.length;
273
+ for (let i = 0; i < len; i++) {
274
+ const classDefinition = classGroup[i];
275
+ processClassDefinition(classDefinition, classPartObject, classGroupId, theme);
276
+ }
277
+ };
278
+ const processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
279
+ if (typeof classDefinition === "string") {
280
+ processStringDefinition(classDefinition, classPartObject, classGroupId);
281
+ return;
282
+ }
283
+ if (typeof classDefinition === "function") {
284
+ processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);
285
+ return;
286
+ }
287
+ processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);
288
+ };
289
+ const processStringDefinition = (classDefinition, classPartObject, classGroupId) => {
290
+ const classPartObjectToEdit = classDefinition === "" ? classPartObject : getPart(classPartObject, classDefinition);
291
+ classPartObjectToEdit.classGroupId = classGroupId;
292
+ };
293
+ const processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
294
+ if (isThemeGetter(classDefinition)) {
295
+ processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);
296
+ return;
297
+ }
298
+ if (classPartObject.validators === null) {
299
+ classPartObject.validators = [];
300
+ }
301
+ classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));
302
+ };
303
+ const processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
304
+ const entries = Object.entries(classDefinition);
305
+ const len = entries.length;
306
+ for (let i = 0; i < len; i++) {
307
+ const [key, value] = entries[i];
308
+ processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);
309
+ }
310
+ };
311
+ const getPart = (classPartObject, path) => {
312
+ let current = classPartObject;
313
+ const parts = path.split(CLASS_PART_SEPARATOR);
314
+ const len = parts.length;
315
+ for (let i = 0; i < len; i++) {
316
+ const part = parts[i];
317
+ let next = current.nextPart.get(part);
318
+ if (!next) {
319
+ next = createClassPartObject();
320
+ current.nextPart.set(part, next);
321
+ }
322
+ current = next;
323
+ }
324
+ return current;
325
+ };
326
+ const isThemeGetter = (func) => "isThemeGetter" in func && func.isThemeGetter === true;
327
+ const createLruCache = (maxCacheSize) => {
328
+ if (maxCacheSize < 1) {
329
+ return {
330
+ get: () => void 0,
331
+ set: () => {
332
+ }
333
+ };
334
+ }
335
+ let cacheSize = 0;
336
+ let cache = /* @__PURE__ */ Object.create(null);
337
+ let previousCache = /* @__PURE__ */ Object.create(null);
338
+ const update = (key, value) => {
339
+ cache[key] = value;
340
+ cacheSize++;
341
+ if (cacheSize > maxCacheSize) {
342
+ cacheSize = 0;
343
+ previousCache = cache;
344
+ cache = /* @__PURE__ */ Object.create(null);
345
+ }
346
+ };
347
+ return {
348
+ get(key) {
349
+ let value = cache[key];
350
+ if (value !== void 0) {
351
+ return value;
352
+ }
353
+ if ((value = previousCache[key]) !== void 0) {
354
+ update(key, value);
355
+ return value;
356
+ }
357
+ },
358
+ set(key, value) {
359
+ if (key in cache) {
360
+ cache[key] = value;
361
+ } else {
362
+ update(key, value);
363
+ }
364
+ }
365
+ };
366
+ };
367
+ const IMPORTANT_MODIFIER = "!";
368
+ const MODIFIER_SEPARATOR = ":";
369
+ const EMPTY_MODIFIERS = [];
370
+ const createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({
371
+ modifiers,
372
+ hasImportantModifier,
373
+ baseClassName,
374
+ maybePostfixModifierPosition,
375
+ isExternal
376
+ });
377
+ const createParseClassName = (config) => {
378
+ const {
379
+ prefix,
380
+ experimentalParseClassName
381
+ } = config;
382
+ let parseClassName = (className) => {
383
+ const modifiers = [];
384
+ let bracketDepth = 0;
385
+ let parenDepth = 0;
386
+ let modifierStart = 0;
387
+ let postfixModifierPosition;
388
+ const len = className.length;
389
+ for (let index = 0; index < len; index++) {
390
+ const currentCharacter = className[index];
391
+ if (bracketDepth === 0 && parenDepth === 0) {
392
+ if (currentCharacter === MODIFIER_SEPARATOR) {
393
+ modifiers.push(className.slice(modifierStart, index));
394
+ modifierStart = index + 1;
395
+ continue;
396
+ }
397
+ if (currentCharacter === "/") {
398
+ postfixModifierPosition = index;
399
+ continue;
400
+ }
401
+ }
402
+ if (currentCharacter === "[") bracketDepth++;
403
+ else if (currentCharacter === "]") bracketDepth--;
404
+ else if (currentCharacter === "(") parenDepth++;
405
+ else if (currentCharacter === ")") parenDepth--;
406
+ }
407
+ const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);
408
+ let baseClassName = baseClassNameWithImportantModifier;
409
+ let hasImportantModifier = false;
410
+ if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {
411
+ baseClassName = baseClassNameWithImportantModifier.slice(0, -1);
412
+ hasImportantModifier = true;
413
+ } else if (
414
+ /**
415
+ * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.
416
+ * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864
417
+ */
418
+ baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)
419
+ ) {
420
+ baseClassName = baseClassNameWithImportantModifier.slice(1);
421
+ hasImportantModifier = true;
422
+ }
423
+ const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : void 0;
424
+ return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);
425
+ };
426
+ if (prefix) {
427
+ const fullPrefix = prefix + MODIFIER_SEPARATOR;
428
+ const parseClassNameOriginal = parseClassName;
429
+ parseClassName = (className) => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, void 0, true);
430
+ }
431
+ if (experimentalParseClassName) {
432
+ const parseClassNameOriginal = parseClassName;
433
+ parseClassName = (className) => experimentalParseClassName({
434
+ className,
435
+ parseClassName: parseClassNameOriginal
436
+ });
437
+ }
438
+ return parseClassName;
439
+ };
440
+ const createSortModifiers = (config) => {
441
+ const modifierWeights = /* @__PURE__ */ new Map();
442
+ config.orderSensitiveModifiers.forEach((mod, index) => {
443
+ modifierWeights.set(mod, 1e6 + index);
444
+ });
445
+ return (modifiers) => {
446
+ const result = [];
447
+ let currentSegment = [];
448
+ for (let i = 0; i < modifiers.length; i++) {
449
+ const modifier = modifiers[i];
450
+ const isArbitrary = modifier[0] === "[";
451
+ const isOrderSensitive = modifierWeights.has(modifier);
452
+ if (isArbitrary || isOrderSensitive) {
453
+ if (currentSegment.length > 0) {
454
+ currentSegment.sort();
455
+ result.push(...currentSegment);
456
+ currentSegment = [];
457
+ }
458
+ result.push(modifier);
459
+ } else {
460
+ currentSegment.push(modifier);
461
+ }
462
+ }
463
+ if (currentSegment.length > 0) {
464
+ currentSegment.sort();
465
+ result.push(...currentSegment);
466
+ }
467
+ return result;
468
+ };
469
+ };
470
+ const createConfigUtils = (config) => ({
471
+ cache: createLruCache(config.cacheSize),
472
+ parseClassName: createParseClassName(config),
473
+ sortModifiers: createSortModifiers(config),
474
+ ...createClassGroupUtils(config)
475
+ });
476
+ const SPLIT_CLASSES_REGEX = /\s+/;
477
+ const mergeClassList = (classList, configUtils) => {
478
+ const {
479
+ parseClassName,
480
+ getClassGroupId,
481
+ getConflictingClassGroupIds,
482
+ sortModifiers
483
+ } = configUtils;
484
+ const classGroupsInConflict = [];
485
+ const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);
486
+ let result = "";
487
+ for (let index = classNames.length - 1; index >= 0; index -= 1) {
488
+ const originalClassName = classNames[index];
489
+ const {
490
+ isExternal,
491
+ modifiers,
492
+ hasImportantModifier,
493
+ baseClassName,
494
+ maybePostfixModifierPosition
495
+ } = parseClassName(originalClassName);
496
+ if (isExternal) {
497
+ result = originalClassName + (result.length > 0 ? " " + result : result);
498
+ continue;
499
+ }
500
+ let hasPostfixModifier = !!maybePostfixModifierPosition;
501
+ let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);
502
+ if (!classGroupId) {
503
+ if (!hasPostfixModifier) {
504
+ result = originalClassName + (result.length > 0 ? " " + result : result);
505
+ continue;
506
+ }
507
+ classGroupId = getClassGroupId(baseClassName);
508
+ if (!classGroupId) {
509
+ result = originalClassName + (result.length > 0 ? " " + result : result);
510
+ continue;
511
+ }
512
+ hasPostfixModifier = false;
513
+ }
514
+ const variantModifier = modifiers.length === 0 ? "" : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(":");
515
+ const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;
516
+ const classId = modifierId + classGroupId;
517
+ if (classGroupsInConflict.indexOf(classId) > -1) {
518
+ continue;
519
+ }
520
+ classGroupsInConflict.push(classId);
521
+ const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);
522
+ for (let i = 0; i < conflictGroups.length; ++i) {
523
+ const group = conflictGroups[i];
524
+ classGroupsInConflict.push(modifierId + group);
525
+ }
526
+ result = originalClassName + (result.length > 0 ? " " + result : result);
527
+ }
528
+ return result;
529
+ };
530
+ const twJoin = (...classLists) => {
531
+ let index = 0;
532
+ let argument;
533
+ let resolvedValue;
534
+ let string = "";
535
+ while (index < classLists.length) {
536
+ if (argument = classLists[index++]) {
537
+ if (resolvedValue = toValue(argument)) {
538
+ string && (string += " ");
539
+ string += resolvedValue;
540
+ }
541
+ }
542
+ }
543
+ return string;
544
+ };
545
+ const toValue = (mix) => {
546
+ if (typeof mix === "string") {
547
+ return mix;
548
+ }
549
+ let resolvedValue;
550
+ let string = "";
551
+ for (let k = 0; k < mix.length; k++) {
552
+ if (mix[k]) {
553
+ if (resolvedValue = toValue(mix[k])) {
554
+ string && (string += " ");
555
+ string += resolvedValue;
556
+ }
557
+ }
558
+ }
559
+ return string;
560
+ };
561
+ const createTailwindMerge = (createConfigFirst, ...createConfigRest) => {
562
+ let configUtils;
563
+ let cacheGet;
564
+ let cacheSet;
565
+ let functionToCall;
566
+ const initTailwindMerge = (classList) => {
567
+ const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());
568
+ configUtils = createConfigUtils(config);
569
+ cacheGet = configUtils.cache.get;
570
+ cacheSet = configUtils.cache.set;
571
+ functionToCall = tailwindMerge;
572
+ return tailwindMerge(classList);
573
+ };
574
+ const tailwindMerge = (classList) => {
575
+ const cachedResult = cacheGet(classList);
576
+ if (cachedResult) {
577
+ return cachedResult;
578
+ }
579
+ const result = mergeClassList(classList, configUtils);
580
+ cacheSet(classList, result);
581
+ return result;
582
+ };
583
+ functionToCall = initTailwindMerge;
584
+ return (...args) => functionToCall(twJoin(...args));
585
+ };
586
+ const fallbackThemeArr = [];
587
+ const fromTheme = (key) => {
588
+ const themeGetter = (theme) => theme[key] || fallbackThemeArr;
589
+ themeGetter.isThemeGetter = true;
590
+ return themeGetter;
591
+ };
592
+ const arbitraryValueRegex = /^\[(?:(\w[\w-]*):)?(.+)\]$/i;
593
+ const arbitraryVariableRegex = /^\((?:(\w[\w-]*):)?(.+)\)$/i;
594
+ const fractionRegex = /^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/;
595
+ const tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
596
+ const lengthUnitRegex = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/;
597
+ const colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/;
598
+ const shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
599
+ const imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
600
+ const isFraction = (value) => fractionRegex.test(value);
601
+ const isNumber = (value) => !!value && !Number.isNaN(Number(value));
602
+ const isInteger = (value) => !!value && Number.isInteger(Number(value));
603
+ const isPercent = (value) => value.endsWith("%") && isNumber(value.slice(0, -1));
604
+ const isTshirtSize = (value) => tshirtUnitRegex.test(value);
605
+ const isAny = () => true;
606
+ const isLengthOnly = (value) => (
607
+ // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.
608
+ // For example, `hsl(0 0% 0%)` would be classified as a length without this check.
609
+ // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.
610
+ lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)
611
+ );
612
+ const isNever = () => false;
613
+ const isShadow = (value) => shadowRegex.test(value);
614
+ const isImage = (value) => imageRegex.test(value);
615
+ const isAnyNonArbitrary = (value) => !isArbitraryValue(value) && !isArbitraryVariable(value);
616
+ const isArbitrarySize = (value) => getIsArbitraryValue(value, isLabelSize, isNever);
617
+ const isArbitraryValue = (value) => arbitraryValueRegex.test(value);
618
+ const isArbitraryLength = (value) => getIsArbitraryValue(value, isLabelLength, isLengthOnly);
619
+ const isArbitraryNumber = (value) => getIsArbitraryValue(value, isLabelNumber, isNumber);
620
+ const isArbitraryWeight = (value) => getIsArbitraryValue(value, isLabelWeight, isAny);
621
+ const isArbitraryFamilyName = (value) => getIsArbitraryValue(value, isLabelFamilyName, isNever);
622
+ const isArbitraryPosition = (value) => getIsArbitraryValue(value, isLabelPosition, isNever);
623
+ const isArbitraryImage = (value) => getIsArbitraryValue(value, isLabelImage, isImage);
624
+ const isArbitraryShadow = (value) => getIsArbitraryValue(value, isLabelShadow, isShadow);
625
+ const isArbitraryVariable = (value) => arbitraryVariableRegex.test(value);
626
+ const isArbitraryVariableLength = (value) => getIsArbitraryVariable(value, isLabelLength);
627
+ const isArbitraryVariableFamilyName = (value) => getIsArbitraryVariable(value, isLabelFamilyName);
628
+ const isArbitraryVariablePosition = (value) => getIsArbitraryVariable(value, isLabelPosition);
629
+ const isArbitraryVariableSize = (value) => getIsArbitraryVariable(value, isLabelSize);
630
+ const isArbitraryVariableImage = (value) => getIsArbitraryVariable(value, isLabelImage);
631
+ const isArbitraryVariableShadow = (value) => getIsArbitraryVariable(value, isLabelShadow, true);
632
+ const isArbitraryVariableWeight = (value) => getIsArbitraryVariable(value, isLabelWeight, true);
633
+ const getIsArbitraryValue = (value, testLabel, testValue) => {
634
+ const result = arbitraryValueRegex.exec(value);
635
+ if (result) {
636
+ if (result[1]) {
637
+ return testLabel(result[1]);
638
+ }
639
+ return testValue(result[2]);
640
+ }
641
+ return false;
642
+ };
643
+ const getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {
644
+ const result = arbitraryVariableRegex.exec(value);
645
+ if (result) {
646
+ if (result[1]) {
647
+ return testLabel(result[1]);
648
+ }
649
+ return shouldMatchNoLabel;
650
+ }
651
+ return false;
652
+ };
653
+ const isLabelPosition = (label) => label === "position" || label === "percentage";
654
+ const isLabelImage = (label) => label === "image" || label === "url";
655
+ const isLabelSize = (label) => label === "length" || label === "size" || label === "bg-size";
656
+ const isLabelLength = (label) => label === "length";
657
+ const isLabelNumber = (label) => label === "number";
658
+ const isLabelFamilyName = (label) => label === "family-name";
659
+ const isLabelWeight = (label) => label === "number" || label === "weight";
660
+ const isLabelShadow = (label) => label === "shadow";
661
+ const getDefaultConfig = () => {
662
+ const themeColor = fromTheme("color");
663
+ const themeFont = fromTheme("font");
664
+ const themeText = fromTheme("text");
665
+ const themeFontWeight = fromTheme("font-weight");
666
+ const themeTracking = fromTheme("tracking");
667
+ const themeLeading = fromTheme("leading");
668
+ const themeBreakpoint = fromTheme("breakpoint");
669
+ const themeContainer = fromTheme("container");
670
+ const themeSpacing = fromTheme("spacing");
671
+ const themeRadius = fromTheme("radius");
672
+ const themeShadow = fromTheme("shadow");
673
+ const themeInsetShadow = fromTheme("inset-shadow");
674
+ const themeTextShadow = fromTheme("text-shadow");
675
+ const themeDropShadow = fromTheme("drop-shadow");
676
+ const themeBlur = fromTheme("blur");
677
+ const themePerspective = fromTheme("perspective");
678
+ const themeAspect = fromTheme("aspect");
679
+ const themeEase = fromTheme("ease");
680
+ const themeAnimate = fromTheme("animate");
681
+ const scaleBreak = () => ["auto", "avoid", "all", "avoid-page", "page", "left", "right", "column"];
682
+ const scalePosition = () => [
683
+ "center",
684
+ "top",
685
+ "bottom",
686
+ "left",
687
+ "right",
688
+ "top-left",
689
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
690
+ "left-top",
691
+ "top-right",
692
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
693
+ "right-top",
694
+ "bottom-right",
695
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
696
+ "right-bottom",
697
+ "bottom-left",
698
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
699
+ "left-bottom"
700
+ ];
701
+ const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];
702
+ const scaleOverflow = () => ["auto", "hidden", "clip", "visible", "scroll"];
703
+ const scaleOverscroll = () => ["auto", "contain", "none"];
704
+ const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];
705
+ const scaleInset = () => [isFraction, "full", "auto", ...scaleUnambiguousSpacing()];
706
+ const scaleGridTemplateColsRows = () => [isInteger, "none", "subgrid", isArbitraryVariable, isArbitraryValue];
707
+ const scaleGridColRowStartAndEnd = () => ["auto", {
708
+ span: ["full", isInteger, isArbitraryVariable, isArbitraryValue]
709
+ }, isInteger, isArbitraryVariable, isArbitraryValue];
710
+ const scaleGridColRowStartOrEnd = () => [isInteger, "auto", isArbitraryVariable, isArbitraryValue];
711
+ const scaleGridAutoColsRows = () => ["auto", "min", "max", "fr", isArbitraryVariable, isArbitraryValue];
712
+ const scaleAlignPrimaryAxis = () => ["start", "end", "center", "between", "around", "evenly", "stretch", "baseline", "center-safe", "end-safe"];
713
+ const scaleAlignSecondaryAxis = () => ["start", "end", "center", "stretch", "center-safe", "end-safe"];
714
+ const scaleMargin = () => ["auto", ...scaleUnambiguousSpacing()];
715
+ const scaleSizing = () => [isFraction, "auto", "full", "dvw", "dvh", "lvw", "lvh", "svw", "svh", "min", "max", "fit", ...scaleUnambiguousSpacing()];
716
+ const scaleSizingInline = () => [isFraction, "screen", "full", "dvw", "lvw", "svw", "min", "max", "fit", ...scaleUnambiguousSpacing()];
717
+ const scaleSizingBlock = () => [isFraction, "screen", "full", "lh", "dvh", "lvh", "svh", "min", "max", "fit", ...scaleUnambiguousSpacing()];
718
+ const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];
719
+ const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {
720
+ position: [isArbitraryVariable, isArbitraryValue]
721
+ }];
722
+ const scaleBgRepeat = () => ["no-repeat", {
723
+ repeat: ["", "x", "y", "space", "round"]
724
+ }];
725
+ const scaleBgSize = () => ["auto", "cover", "contain", isArbitraryVariableSize, isArbitrarySize, {
726
+ size: [isArbitraryVariable, isArbitraryValue]
727
+ }];
728
+ const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];
729
+ const scaleRadius = () => [
730
+ // Deprecated since Tailwind CSS v4.0.0
731
+ "",
732
+ "none",
733
+ "full",
734
+ themeRadius,
735
+ isArbitraryVariable,
736
+ isArbitraryValue
737
+ ];
738
+ const scaleBorderWidth = () => ["", isNumber, isArbitraryVariableLength, isArbitraryLength];
739
+ const scaleLineStyle = () => ["solid", "dashed", "dotted", "double"];
740
+ const scaleBlendMode = () => ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"];
741
+ const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];
742
+ const scaleBlur = () => [
743
+ // Deprecated since Tailwind CSS v4.0.0
744
+ "",
745
+ "none",
746
+ themeBlur,
747
+ isArbitraryVariable,
748
+ isArbitraryValue
749
+ ];
750
+ const scaleRotate = () => ["none", isNumber, isArbitraryVariable, isArbitraryValue];
751
+ const scaleScale = () => ["none", isNumber, isArbitraryVariable, isArbitraryValue];
752
+ const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];
753
+ const scaleTranslate = () => [isFraction, "full", ...scaleUnambiguousSpacing()];
754
+ return {
755
+ cacheSize: 500,
756
+ theme: {
757
+ animate: ["spin", "ping", "pulse", "bounce"],
758
+ aspect: ["video"],
759
+ blur: [isTshirtSize],
760
+ breakpoint: [isTshirtSize],
761
+ color: [isAny],
762
+ container: [isTshirtSize],
763
+ "drop-shadow": [isTshirtSize],
764
+ ease: ["in", "out", "in-out"],
765
+ font: [isAnyNonArbitrary],
766
+ "font-weight": ["thin", "extralight", "light", "normal", "medium", "semibold", "bold", "extrabold", "black"],
767
+ "inset-shadow": [isTshirtSize],
768
+ leading: ["none", "tight", "snug", "normal", "relaxed", "loose"],
769
+ perspective: ["dramatic", "near", "normal", "midrange", "distant", "none"],
770
+ radius: [isTshirtSize],
771
+ shadow: [isTshirtSize],
772
+ spacing: ["px", isNumber],
773
+ text: [isTshirtSize],
774
+ "text-shadow": [isTshirtSize],
775
+ tracking: ["tighter", "tight", "normal", "wide", "wider", "widest"]
776
+ },
777
+ classGroups: {
778
+ // --------------
779
+ // --- Layout ---
780
+ // --------------
781
+ /**
782
+ * Aspect Ratio
783
+ * @see https://tailwindcss.com/docs/aspect-ratio
784
+ */
785
+ aspect: [{
786
+ aspect: ["auto", "square", isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]
787
+ }],
788
+ /**
789
+ * Container
790
+ * @see https://tailwindcss.com/docs/container
791
+ * @deprecated since Tailwind CSS v4.0.0
792
+ */
793
+ container: ["container"],
794
+ /**
795
+ * Columns
796
+ * @see https://tailwindcss.com/docs/columns
797
+ */
798
+ columns: [{
799
+ columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]
800
+ }],
801
+ /**
802
+ * Break After
803
+ * @see https://tailwindcss.com/docs/break-after
804
+ */
805
+ "break-after": [{
806
+ "break-after": scaleBreak()
807
+ }],
808
+ /**
809
+ * Break Before
810
+ * @see https://tailwindcss.com/docs/break-before
811
+ */
812
+ "break-before": [{
813
+ "break-before": scaleBreak()
814
+ }],
815
+ /**
816
+ * Break Inside
817
+ * @see https://tailwindcss.com/docs/break-inside
818
+ */
819
+ "break-inside": [{
820
+ "break-inside": ["auto", "avoid", "avoid-page", "avoid-column"]
821
+ }],
822
+ /**
823
+ * Box Decoration Break
824
+ * @see https://tailwindcss.com/docs/box-decoration-break
825
+ */
826
+ "box-decoration": [{
827
+ "box-decoration": ["slice", "clone"]
828
+ }],
829
+ /**
830
+ * Box Sizing
831
+ * @see https://tailwindcss.com/docs/box-sizing
832
+ */
833
+ box: [{
834
+ box: ["border", "content"]
835
+ }],
836
+ /**
837
+ * Display
838
+ * @see https://tailwindcss.com/docs/display
839
+ */
840
+ display: ["block", "inline-block", "inline", "flex", "inline-flex", "table", "inline-table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row-group", "table-row", "flow-root", "grid", "inline-grid", "contents", "list-item", "hidden"],
841
+ /**
842
+ * Screen Reader Only
843
+ * @see https://tailwindcss.com/docs/display#screen-reader-only
844
+ */
845
+ sr: ["sr-only", "not-sr-only"],
846
+ /**
847
+ * Floats
848
+ * @see https://tailwindcss.com/docs/float
849
+ */
850
+ float: [{
851
+ float: ["right", "left", "none", "start", "end"]
852
+ }],
853
+ /**
854
+ * Clear
855
+ * @see https://tailwindcss.com/docs/clear
856
+ */
857
+ clear: [{
858
+ clear: ["left", "right", "both", "none", "start", "end"]
859
+ }],
860
+ /**
861
+ * Isolation
862
+ * @see https://tailwindcss.com/docs/isolation
863
+ */
864
+ isolation: ["isolate", "isolation-auto"],
865
+ /**
866
+ * Object Fit
867
+ * @see https://tailwindcss.com/docs/object-fit
868
+ */
869
+ "object-fit": [{
870
+ object: ["contain", "cover", "fill", "none", "scale-down"]
871
+ }],
872
+ /**
873
+ * Object Position
874
+ * @see https://tailwindcss.com/docs/object-position
875
+ */
876
+ "object-position": [{
877
+ object: scalePositionWithArbitrary()
878
+ }],
879
+ /**
880
+ * Overflow
881
+ * @see https://tailwindcss.com/docs/overflow
882
+ */
883
+ overflow: [{
884
+ overflow: scaleOverflow()
885
+ }],
886
+ /**
887
+ * Overflow X
888
+ * @see https://tailwindcss.com/docs/overflow
889
+ */
890
+ "overflow-x": [{
891
+ "overflow-x": scaleOverflow()
892
+ }],
893
+ /**
894
+ * Overflow Y
895
+ * @see https://tailwindcss.com/docs/overflow
896
+ */
897
+ "overflow-y": [{
898
+ "overflow-y": scaleOverflow()
899
+ }],
900
+ /**
901
+ * Overscroll Behavior
902
+ * @see https://tailwindcss.com/docs/overscroll-behavior
903
+ */
904
+ overscroll: [{
905
+ overscroll: scaleOverscroll()
906
+ }],
907
+ /**
908
+ * Overscroll Behavior X
909
+ * @see https://tailwindcss.com/docs/overscroll-behavior
910
+ */
911
+ "overscroll-x": [{
912
+ "overscroll-x": scaleOverscroll()
913
+ }],
914
+ /**
915
+ * Overscroll Behavior Y
916
+ * @see https://tailwindcss.com/docs/overscroll-behavior
917
+ */
918
+ "overscroll-y": [{
919
+ "overscroll-y": scaleOverscroll()
920
+ }],
921
+ /**
922
+ * Position
923
+ * @see https://tailwindcss.com/docs/position
924
+ */
925
+ position: ["static", "fixed", "absolute", "relative", "sticky"],
926
+ /**
927
+ * Inset
928
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
929
+ */
930
+ inset: [{
931
+ inset: scaleInset()
932
+ }],
933
+ /**
934
+ * Inset Inline
935
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
936
+ */
937
+ "inset-x": [{
938
+ "inset-x": scaleInset()
939
+ }],
940
+ /**
941
+ * Inset Block
942
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
943
+ */
944
+ "inset-y": [{
945
+ "inset-y": scaleInset()
946
+ }],
947
+ /**
948
+ * Inset Inline Start
949
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
950
+ * @todo class group will be renamed to `inset-s` in next major release
951
+ */
952
+ start: [{
953
+ "inset-s": scaleInset(),
954
+ /**
955
+ * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.
956
+ * @see https://github.com/tailwindlabs/tailwindcss/pull/19613
957
+ */
958
+ start: scaleInset()
959
+ }],
960
+ /**
961
+ * Inset Inline End
962
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
963
+ * @todo class group will be renamed to `inset-e` in next major release
964
+ */
965
+ end: [{
966
+ "inset-e": scaleInset(),
967
+ /**
968
+ * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.
969
+ * @see https://github.com/tailwindlabs/tailwindcss/pull/19613
970
+ */
971
+ end: scaleInset()
972
+ }],
973
+ /**
974
+ * Inset Block Start
975
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
976
+ */
977
+ "inset-bs": [{
978
+ "inset-bs": scaleInset()
979
+ }],
980
+ /**
981
+ * Inset Block End
982
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
983
+ */
984
+ "inset-be": [{
985
+ "inset-be": scaleInset()
986
+ }],
987
+ /**
988
+ * Top
989
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
990
+ */
991
+ top: [{
992
+ top: scaleInset()
993
+ }],
994
+ /**
995
+ * Right
996
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
997
+ */
998
+ right: [{
999
+ right: scaleInset()
1000
+ }],
1001
+ /**
1002
+ * Bottom
1003
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1004
+ */
1005
+ bottom: [{
1006
+ bottom: scaleInset()
1007
+ }],
1008
+ /**
1009
+ * Left
1010
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1011
+ */
1012
+ left: [{
1013
+ left: scaleInset()
1014
+ }],
1015
+ /**
1016
+ * Visibility
1017
+ * @see https://tailwindcss.com/docs/visibility
1018
+ */
1019
+ visibility: ["visible", "invisible", "collapse"],
1020
+ /**
1021
+ * Z-Index
1022
+ * @see https://tailwindcss.com/docs/z-index
1023
+ */
1024
+ z: [{
1025
+ z: [isInteger, "auto", isArbitraryVariable, isArbitraryValue]
1026
+ }],
1027
+ // ------------------------
1028
+ // --- Flexbox and Grid ---
1029
+ // ------------------------
1030
+ /**
1031
+ * Flex Basis
1032
+ * @see https://tailwindcss.com/docs/flex-basis
1033
+ */
1034
+ basis: [{
1035
+ basis: [isFraction, "full", "auto", themeContainer, ...scaleUnambiguousSpacing()]
1036
+ }],
1037
+ /**
1038
+ * Flex Direction
1039
+ * @see https://tailwindcss.com/docs/flex-direction
1040
+ */
1041
+ "flex-direction": [{
1042
+ flex: ["row", "row-reverse", "col", "col-reverse"]
1043
+ }],
1044
+ /**
1045
+ * Flex Wrap
1046
+ * @see https://tailwindcss.com/docs/flex-wrap
1047
+ */
1048
+ "flex-wrap": [{
1049
+ flex: ["nowrap", "wrap", "wrap-reverse"]
1050
+ }],
1051
+ /**
1052
+ * Flex
1053
+ * @see https://tailwindcss.com/docs/flex
1054
+ */
1055
+ flex: [{
1056
+ flex: [isNumber, isFraction, "auto", "initial", "none", isArbitraryValue]
1057
+ }],
1058
+ /**
1059
+ * Flex Grow
1060
+ * @see https://tailwindcss.com/docs/flex-grow
1061
+ */
1062
+ grow: [{
1063
+ grow: ["", isNumber, isArbitraryVariable, isArbitraryValue]
1064
+ }],
1065
+ /**
1066
+ * Flex Shrink
1067
+ * @see https://tailwindcss.com/docs/flex-shrink
1068
+ */
1069
+ shrink: [{
1070
+ shrink: ["", isNumber, isArbitraryVariable, isArbitraryValue]
1071
+ }],
1072
+ /**
1073
+ * Order
1074
+ * @see https://tailwindcss.com/docs/order
1075
+ */
1076
+ order: [{
1077
+ order: [isInteger, "first", "last", "none", isArbitraryVariable, isArbitraryValue]
1078
+ }],
1079
+ /**
1080
+ * Grid Template Columns
1081
+ * @see https://tailwindcss.com/docs/grid-template-columns
1082
+ */
1083
+ "grid-cols": [{
1084
+ "grid-cols": scaleGridTemplateColsRows()
1085
+ }],
1086
+ /**
1087
+ * Grid Column Start / End
1088
+ * @see https://tailwindcss.com/docs/grid-column
1089
+ */
1090
+ "col-start-end": [{
1091
+ col: scaleGridColRowStartAndEnd()
1092
+ }],
1093
+ /**
1094
+ * Grid Column Start
1095
+ * @see https://tailwindcss.com/docs/grid-column
1096
+ */
1097
+ "col-start": [{
1098
+ "col-start": scaleGridColRowStartOrEnd()
1099
+ }],
1100
+ /**
1101
+ * Grid Column End
1102
+ * @see https://tailwindcss.com/docs/grid-column
1103
+ */
1104
+ "col-end": [{
1105
+ "col-end": scaleGridColRowStartOrEnd()
1106
+ }],
1107
+ /**
1108
+ * Grid Template Rows
1109
+ * @see https://tailwindcss.com/docs/grid-template-rows
1110
+ */
1111
+ "grid-rows": [{
1112
+ "grid-rows": scaleGridTemplateColsRows()
1113
+ }],
1114
+ /**
1115
+ * Grid Row Start / End
1116
+ * @see https://tailwindcss.com/docs/grid-row
1117
+ */
1118
+ "row-start-end": [{
1119
+ row: scaleGridColRowStartAndEnd()
1120
+ }],
1121
+ /**
1122
+ * Grid Row Start
1123
+ * @see https://tailwindcss.com/docs/grid-row
1124
+ */
1125
+ "row-start": [{
1126
+ "row-start": scaleGridColRowStartOrEnd()
1127
+ }],
1128
+ /**
1129
+ * Grid Row End
1130
+ * @see https://tailwindcss.com/docs/grid-row
1131
+ */
1132
+ "row-end": [{
1133
+ "row-end": scaleGridColRowStartOrEnd()
1134
+ }],
1135
+ /**
1136
+ * Grid Auto Flow
1137
+ * @see https://tailwindcss.com/docs/grid-auto-flow
1138
+ */
1139
+ "grid-flow": [{
1140
+ "grid-flow": ["row", "col", "dense", "row-dense", "col-dense"]
1141
+ }],
1142
+ /**
1143
+ * Grid Auto Columns
1144
+ * @see https://tailwindcss.com/docs/grid-auto-columns
1145
+ */
1146
+ "auto-cols": [{
1147
+ "auto-cols": scaleGridAutoColsRows()
1148
+ }],
1149
+ /**
1150
+ * Grid Auto Rows
1151
+ * @see https://tailwindcss.com/docs/grid-auto-rows
1152
+ */
1153
+ "auto-rows": [{
1154
+ "auto-rows": scaleGridAutoColsRows()
1155
+ }],
1156
+ /**
1157
+ * Gap
1158
+ * @see https://tailwindcss.com/docs/gap
1159
+ */
1160
+ gap: [{
1161
+ gap: scaleUnambiguousSpacing()
1162
+ }],
1163
+ /**
1164
+ * Gap X
1165
+ * @see https://tailwindcss.com/docs/gap
1166
+ */
1167
+ "gap-x": [{
1168
+ "gap-x": scaleUnambiguousSpacing()
1169
+ }],
1170
+ /**
1171
+ * Gap Y
1172
+ * @see https://tailwindcss.com/docs/gap
1173
+ */
1174
+ "gap-y": [{
1175
+ "gap-y": scaleUnambiguousSpacing()
1176
+ }],
1177
+ /**
1178
+ * Justify Content
1179
+ * @see https://tailwindcss.com/docs/justify-content
1180
+ */
1181
+ "justify-content": [{
1182
+ justify: [...scaleAlignPrimaryAxis(), "normal"]
1183
+ }],
1184
+ /**
1185
+ * Justify Items
1186
+ * @see https://tailwindcss.com/docs/justify-items
1187
+ */
1188
+ "justify-items": [{
1189
+ "justify-items": [...scaleAlignSecondaryAxis(), "normal"]
1190
+ }],
1191
+ /**
1192
+ * Justify Self
1193
+ * @see https://tailwindcss.com/docs/justify-self
1194
+ */
1195
+ "justify-self": [{
1196
+ "justify-self": ["auto", ...scaleAlignSecondaryAxis()]
1197
+ }],
1198
+ /**
1199
+ * Align Content
1200
+ * @see https://tailwindcss.com/docs/align-content
1201
+ */
1202
+ "align-content": [{
1203
+ content: ["normal", ...scaleAlignPrimaryAxis()]
1204
+ }],
1205
+ /**
1206
+ * Align Items
1207
+ * @see https://tailwindcss.com/docs/align-items
1208
+ */
1209
+ "align-items": [{
1210
+ items: [...scaleAlignSecondaryAxis(), {
1211
+ baseline: ["", "last"]
1212
+ }]
1213
+ }],
1214
+ /**
1215
+ * Align Self
1216
+ * @see https://tailwindcss.com/docs/align-self
1217
+ */
1218
+ "align-self": [{
1219
+ self: ["auto", ...scaleAlignSecondaryAxis(), {
1220
+ baseline: ["", "last"]
1221
+ }]
1222
+ }],
1223
+ /**
1224
+ * Place Content
1225
+ * @see https://tailwindcss.com/docs/place-content
1226
+ */
1227
+ "place-content": [{
1228
+ "place-content": scaleAlignPrimaryAxis()
1229
+ }],
1230
+ /**
1231
+ * Place Items
1232
+ * @see https://tailwindcss.com/docs/place-items
1233
+ */
1234
+ "place-items": [{
1235
+ "place-items": [...scaleAlignSecondaryAxis(), "baseline"]
1236
+ }],
1237
+ /**
1238
+ * Place Self
1239
+ * @see https://tailwindcss.com/docs/place-self
1240
+ */
1241
+ "place-self": [{
1242
+ "place-self": ["auto", ...scaleAlignSecondaryAxis()]
1243
+ }],
1244
+ // Spacing
1245
+ /**
1246
+ * Padding
1247
+ * @see https://tailwindcss.com/docs/padding
1248
+ */
1249
+ p: [{
1250
+ p: scaleUnambiguousSpacing()
1251
+ }],
1252
+ /**
1253
+ * Padding Inline
1254
+ * @see https://tailwindcss.com/docs/padding
1255
+ */
1256
+ px: [{
1257
+ px: scaleUnambiguousSpacing()
1258
+ }],
1259
+ /**
1260
+ * Padding Block
1261
+ * @see https://tailwindcss.com/docs/padding
1262
+ */
1263
+ py: [{
1264
+ py: scaleUnambiguousSpacing()
1265
+ }],
1266
+ /**
1267
+ * Padding Inline Start
1268
+ * @see https://tailwindcss.com/docs/padding
1269
+ */
1270
+ ps: [{
1271
+ ps: scaleUnambiguousSpacing()
1272
+ }],
1273
+ /**
1274
+ * Padding Inline End
1275
+ * @see https://tailwindcss.com/docs/padding
1276
+ */
1277
+ pe: [{
1278
+ pe: scaleUnambiguousSpacing()
1279
+ }],
1280
+ /**
1281
+ * Padding Block Start
1282
+ * @see https://tailwindcss.com/docs/padding
1283
+ */
1284
+ pbs: [{
1285
+ pbs: scaleUnambiguousSpacing()
1286
+ }],
1287
+ /**
1288
+ * Padding Block End
1289
+ * @see https://tailwindcss.com/docs/padding
1290
+ */
1291
+ pbe: [{
1292
+ pbe: scaleUnambiguousSpacing()
1293
+ }],
1294
+ /**
1295
+ * Padding Top
1296
+ * @see https://tailwindcss.com/docs/padding
1297
+ */
1298
+ pt: [{
1299
+ pt: scaleUnambiguousSpacing()
1300
+ }],
1301
+ /**
1302
+ * Padding Right
1303
+ * @see https://tailwindcss.com/docs/padding
1304
+ */
1305
+ pr: [{
1306
+ pr: scaleUnambiguousSpacing()
1307
+ }],
1308
+ /**
1309
+ * Padding Bottom
1310
+ * @see https://tailwindcss.com/docs/padding
1311
+ */
1312
+ pb: [{
1313
+ pb: scaleUnambiguousSpacing()
1314
+ }],
1315
+ /**
1316
+ * Padding Left
1317
+ * @see https://tailwindcss.com/docs/padding
1318
+ */
1319
+ pl: [{
1320
+ pl: scaleUnambiguousSpacing()
1321
+ }],
1322
+ /**
1323
+ * Margin
1324
+ * @see https://tailwindcss.com/docs/margin
1325
+ */
1326
+ m: [{
1327
+ m: scaleMargin()
1328
+ }],
1329
+ /**
1330
+ * Margin Inline
1331
+ * @see https://tailwindcss.com/docs/margin
1332
+ */
1333
+ mx: [{
1334
+ mx: scaleMargin()
1335
+ }],
1336
+ /**
1337
+ * Margin Block
1338
+ * @see https://tailwindcss.com/docs/margin
1339
+ */
1340
+ my: [{
1341
+ my: scaleMargin()
1342
+ }],
1343
+ /**
1344
+ * Margin Inline Start
1345
+ * @see https://tailwindcss.com/docs/margin
1346
+ */
1347
+ ms: [{
1348
+ ms: scaleMargin()
1349
+ }],
1350
+ /**
1351
+ * Margin Inline End
1352
+ * @see https://tailwindcss.com/docs/margin
1353
+ */
1354
+ me: [{
1355
+ me: scaleMargin()
1356
+ }],
1357
+ /**
1358
+ * Margin Block Start
1359
+ * @see https://tailwindcss.com/docs/margin
1360
+ */
1361
+ mbs: [{
1362
+ mbs: scaleMargin()
1363
+ }],
1364
+ /**
1365
+ * Margin Block End
1366
+ * @see https://tailwindcss.com/docs/margin
1367
+ */
1368
+ mbe: [{
1369
+ mbe: scaleMargin()
1370
+ }],
1371
+ /**
1372
+ * Margin Top
1373
+ * @see https://tailwindcss.com/docs/margin
1374
+ */
1375
+ mt: [{
1376
+ mt: scaleMargin()
1377
+ }],
1378
+ /**
1379
+ * Margin Right
1380
+ * @see https://tailwindcss.com/docs/margin
1381
+ */
1382
+ mr: [{
1383
+ mr: scaleMargin()
1384
+ }],
1385
+ /**
1386
+ * Margin Bottom
1387
+ * @see https://tailwindcss.com/docs/margin
1388
+ */
1389
+ mb: [{
1390
+ mb: scaleMargin()
1391
+ }],
1392
+ /**
1393
+ * Margin Left
1394
+ * @see https://tailwindcss.com/docs/margin
1395
+ */
1396
+ ml: [{
1397
+ ml: scaleMargin()
1398
+ }],
1399
+ /**
1400
+ * Space Between X
1401
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1402
+ */
1403
+ "space-x": [{
1404
+ "space-x": scaleUnambiguousSpacing()
1405
+ }],
1406
+ /**
1407
+ * Space Between X Reverse
1408
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1409
+ */
1410
+ "space-x-reverse": ["space-x-reverse"],
1411
+ /**
1412
+ * Space Between Y
1413
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1414
+ */
1415
+ "space-y": [{
1416
+ "space-y": scaleUnambiguousSpacing()
1417
+ }],
1418
+ /**
1419
+ * Space Between Y Reverse
1420
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1421
+ */
1422
+ "space-y-reverse": ["space-y-reverse"],
1423
+ // --------------
1424
+ // --- Sizing ---
1425
+ // --------------
1426
+ /**
1427
+ * Size
1428
+ * @see https://tailwindcss.com/docs/width#setting-both-width-and-height
1429
+ */
1430
+ size: [{
1431
+ size: scaleSizing()
1432
+ }],
1433
+ /**
1434
+ * Inline Size
1435
+ * @see https://tailwindcss.com/docs/width
1436
+ */
1437
+ "inline-size": [{
1438
+ inline: ["auto", ...scaleSizingInline()]
1439
+ }],
1440
+ /**
1441
+ * Min-Inline Size
1442
+ * @see https://tailwindcss.com/docs/min-width
1443
+ */
1444
+ "min-inline-size": [{
1445
+ "min-inline": ["auto", ...scaleSizingInline()]
1446
+ }],
1447
+ /**
1448
+ * Max-Inline Size
1449
+ * @see https://tailwindcss.com/docs/max-width
1450
+ */
1451
+ "max-inline-size": [{
1452
+ "max-inline": ["none", ...scaleSizingInline()]
1453
+ }],
1454
+ /**
1455
+ * Block Size
1456
+ * @see https://tailwindcss.com/docs/height
1457
+ */
1458
+ "block-size": [{
1459
+ block: ["auto", ...scaleSizingBlock()]
1460
+ }],
1461
+ /**
1462
+ * Min-Block Size
1463
+ * @see https://tailwindcss.com/docs/min-height
1464
+ */
1465
+ "min-block-size": [{
1466
+ "min-block": ["auto", ...scaleSizingBlock()]
1467
+ }],
1468
+ /**
1469
+ * Max-Block Size
1470
+ * @see https://tailwindcss.com/docs/max-height
1471
+ */
1472
+ "max-block-size": [{
1473
+ "max-block": ["none", ...scaleSizingBlock()]
1474
+ }],
1475
+ /**
1476
+ * Width
1477
+ * @see https://tailwindcss.com/docs/width
1478
+ */
1479
+ w: [{
1480
+ w: [themeContainer, "screen", ...scaleSizing()]
1481
+ }],
1482
+ /**
1483
+ * Min-Width
1484
+ * @see https://tailwindcss.com/docs/min-width
1485
+ */
1486
+ "min-w": [{
1487
+ "min-w": [
1488
+ themeContainer,
1489
+ "screen",
1490
+ /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1491
+ "none",
1492
+ ...scaleSizing()
1493
+ ]
1494
+ }],
1495
+ /**
1496
+ * Max-Width
1497
+ * @see https://tailwindcss.com/docs/max-width
1498
+ */
1499
+ "max-w": [{
1500
+ "max-w": [
1501
+ themeContainer,
1502
+ "screen",
1503
+ "none",
1504
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1505
+ "prose",
1506
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1507
+ {
1508
+ screen: [themeBreakpoint]
1509
+ },
1510
+ ...scaleSizing()
1511
+ ]
1512
+ }],
1513
+ /**
1514
+ * Height
1515
+ * @see https://tailwindcss.com/docs/height
1516
+ */
1517
+ h: [{
1518
+ h: ["screen", "lh", ...scaleSizing()]
1519
+ }],
1520
+ /**
1521
+ * Min-Height
1522
+ * @see https://tailwindcss.com/docs/min-height
1523
+ */
1524
+ "min-h": [{
1525
+ "min-h": ["screen", "lh", "none", ...scaleSizing()]
1526
+ }],
1527
+ /**
1528
+ * Max-Height
1529
+ * @see https://tailwindcss.com/docs/max-height
1530
+ */
1531
+ "max-h": [{
1532
+ "max-h": ["screen", "lh", ...scaleSizing()]
1533
+ }],
1534
+ // ------------------
1535
+ // --- Typography ---
1536
+ // ------------------
1537
+ /**
1538
+ * Font Size
1539
+ * @see https://tailwindcss.com/docs/font-size
1540
+ */
1541
+ "font-size": [{
1542
+ text: ["base", themeText, isArbitraryVariableLength, isArbitraryLength]
1543
+ }],
1544
+ /**
1545
+ * Font Smoothing
1546
+ * @see https://tailwindcss.com/docs/font-smoothing
1547
+ */
1548
+ "font-smoothing": ["antialiased", "subpixel-antialiased"],
1549
+ /**
1550
+ * Font Style
1551
+ * @see https://tailwindcss.com/docs/font-style
1552
+ */
1553
+ "font-style": ["italic", "not-italic"],
1554
+ /**
1555
+ * Font Weight
1556
+ * @see https://tailwindcss.com/docs/font-weight
1557
+ */
1558
+ "font-weight": [{
1559
+ font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight]
1560
+ }],
1561
+ /**
1562
+ * Font Stretch
1563
+ * @see https://tailwindcss.com/docs/font-stretch
1564
+ */
1565
+ "font-stretch": [{
1566
+ "font-stretch": ["ultra-condensed", "extra-condensed", "condensed", "semi-condensed", "normal", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded", isPercent, isArbitraryValue]
1567
+ }],
1568
+ /**
1569
+ * Font Family
1570
+ * @see https://tailwindcss.com/docs/font-family
1571
+ */
1572
+ "font-family": [{
1573
+ font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont]
1574
+ }],
1575
+ /**
1576
+ * Font Feature Settings
1577
+ * @see https://tailwindcss.com/docs/font-feature-settings
1578
+ */
1579
+ "font-features": [{
1580
+ "font-features": [isArbitraryValue]
1581
+ }],
1582
+ /**
1583
+ * Font Variant Numeric
1584
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1585
+ */
1586
+ "fvn-normal": ["normal-nums"],
1587
+ /**
1588
+ * Font Variant Numeric
1589
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1590
+ */
1591
+ "fvn-ordinal": ["ordinal"],
1592
+ /**
1593
+ * Font Variant Numeric
1594
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1595
+ */
1596
+ "fvn-slashed-zero": ["slashed-zero"],
1597
+ /**
1598
+ * Font Variant Numeric
1599
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1600
+ */
1601
+ "fvn-figure": ["lining-nums", "oldstyle-nums"],
1602
+ /**
1603
+ * Font Variant Numeric
1604
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1605
+ */
1606
+ "fvn-spacing": ["proportional-nums", "tabular-nums"],
1607
+ /**
1608
+ * Font Variant Numeric
1609
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1610
+ */
1611
+ "fvn-fraction": ["diagonal-fractions", "stacked-fractions"],
1612
+ /**
1613
+ * Letter Spacing
1614
+ * @see https://tailwindcss.com/docs/letter-spacing
1615
+ */
1616
+ tracking: [{
1617
+ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]
1618
+ }],
1619
+ /**
1620
+ * Line Clamp
1621
+ * @see https://tailwindcss.com/docs/line-clamp
1622
+ */
1623
+ "line-clamp": [{
1624
+ "line-clamp": [isNumber, "none", isArbitraryVariable, isArbitraryNumber]
1625
+ }],
1626
+ /**
1627
+ * Line Height
1628
+ * @see https://tailwindcss.com/docs/line-height
1629
+ */
1630
+ leading: [{
1631
+ leading: [
1632
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1633
+ themeLeading,
1634
+ ...scaleUnambiguousSpacing()
1635
+ ]
1636
+ }],
1637
+ /**
1638
+ * List Style Image
1639
+ * @see https://tailwindcss.com/docs/list-style-image
1640
+ */
1641
+ "list-image": [{
1642
+ "list-image": ["none", isArbitraryVariable, isArbitraryValue]
1643
+ }],
1644
+ /**
1645
+ * List Style Position
1646
+ * @see https://tailwindcss.com/docs/list-style-position
1647
+ */
1648
+ "list-style-position": [{
1649
+ list: ["inside", "outside"]
1650
+ }],
1651
+ /**
1652
+ * List Style Type
1653
+ * @see https://tailwindcss.com/docs/list-style-type
1654
+ */
1655
+ "list-style-type": [{
1656
+ list: ["disc", "decimal", "none", isArbitraryVariable, isArbitraryValue]
1657
+ }],
1658
+ /**
1659
+ * Text Alignment
1660
+ * @see https://tailwindcss.com/docs/text-align
1661
+ */
1662
+ "text-alignment": [{
1663
+ text: ["left", "center", "right", "justify", "start", "end"]
1664
+ }],
1665
+ /**
1666
+ * Placeholder Color
1667
+ * @deprecated since Tailwind CSS v3.0.0
1668
+ * @see https://v3.tailwindcss.com/docs/placeholder-color
1669
+ */
1670
+ "placeholder-color": [{
1671
+ placeholder: scaleColor()
1672
+ }],
1673
+ /**
1674
+ * Text Color
1675
+ * @see https://tailwindcss.com/docs/text-color
1676
+ */
1677
+ "text-color": [{
1678
+ text: scaleColor()
1679
+ }],
1680
+ /**
1681
+ * Text Decoration
1682
+ * @see https://tailwindcss.com/docs/text-decoration
1683
+ */
1684
+ "text-decoration": ["underline", "overline", "line-through", "no-underline"],
1685
+ /**
1686
+ * Text Decoration Style
1687
+ * @see https://tailwindcss.com/docs/text-decoration-style
1688
+ */
1689
+ "text-decoration-style": [{
1690
+ decoration: [...scaleLineStyle(), "wavy"]
1691
+ }],
1692
+ /**
1693
+ * Text Decoration Thickness
1694
+ * @see https://tailwindcss.com/docs/text-decoration-thickness
1695
+ */
1696
+ "text-decoration-thickness": [{
1697
+ decoration: [isNumber, "from-font", "auto", isArbitraryVariable, isArbitraryLength]
1698
+ }],
1699
+ /**
1700
+ * Text Decoration Color
1701
+ * @see https://tailwindcss.com/docs/text-decoration-color
1702
+ */
1703
+ "text-decoration-color": [{
1704
+ decoration: scaleColor()
1705
+ }],
1706
+ /**
1707
+ * Text Underline Offset
1708
+ * @see https://tailwindcss.com/docs/text-underline-offset
1709
+ */
1710
+ "underline-offset": [{
1711
+ "underline-offset": [isNumber, "auto", isArbitraryVariable, isArbitraryValue]
1712
+ }],
1713
+ /**
1714
+ * Text Transform
1715
+ * @see https://tailwindcss.com/docs/text-transform
1716
+ */
1717
+ "text-transform": ["uppercase", "lowercase", "capitalize", "normal-case"],
1718
+ /**
1719
+ * Text Overflow
1720
+ * @see https://tailwindcss.com/docs/text-overflow
1721
+ */
1722
+ "text-overflow": ["truncate", "text-ellipsis", "text-clip"],
1723
+ /**
1724
+ * Text Wrap
1725
+ * @see https://tailwindcss.com/docs/text-wrap
1726
+ */
1727
+ "text-wrap": [{
1728
+ text: ["wrap", "nowrap", "balance", "pretty"]
1729
+ }],
1730
+ /**
1731
+ * Text Indent
1732
+ * @see https://tailwindcss.com/docs/text-indent
1733
+ */
1734
+ indent: [{
1735
+ indent: scaleUnambiguousSpacing()
1736
+ }],
1737
+ /**
1738
+ * Vertical Alignment
1739
+ * @see https://tailwindcss.com/docs/vertical-align
1740
+ */
1741
+ "vertical-align": [{
1742
+ align: ["baseline", "top", "middle", "bottom", "text-top", "text-bottom", "sub", "super", isArbitraryVariable, isArbitraryValue]
1743
+ }],
1744
+ /**
1745
+ * Whitespace
1746
+ * @see https://tailwindcss.com/docs/whitespace
1747
+ */
1748
+ whitespace: [{
1749
+ whitespace: ["normal", "nowrap", "pre", "pre-line", "pre-wrap", "break-spaces"]
1750
+ }],
1751
+ /**
1752
+ * Word Break
1753
+ * @see https://tailwindcss.com/docs/word-break
1754
+ */
1755
+ break: [{
1756
+ break: ["normal", "words", "all", "keep"]
1757
+ }],
1758
+ /**
1759
+ * Overflow Wrap
1760
+ * @see https://tailwindcss.com/docs/overflow-wrap
1761
+ */
1762
+ wrap: [{
1763
+ wrap: ["break-word", "anywhere", "normal"]
1764
+ }],
1765
+ /**
1766
+ * Hyphens
1767
+ * @see https://tailwindcss.com/docs/hyphens
1768
+ */
1769
+ hyphens: [{
1770
+ hyphens: ["none", "manual", "auto"]
1771
+ }],
1772
+ /**
1773
+ * Content
1774
+ * @see https://tailwindcss.com/docs/content
1775
+ */
1776
+ content: [{
1777
+ content: ["none", isArbitraryVariable, isArbitraryValue]
1778
+ }],
1779
+ // -------------------
1780
+ // --- Backgrounds ---
1781
+ // -------------------
1782
+ /**
1783
+ * Background Attachment
1784
+ * @see https://tailwindcss.com/docs/background-attachment
1785
+ */
1786
+ "bg-attachment": [{
1787
+ bg: ["fixed", "local", "scroll"]
1788
+ }],
1789
+ /**
1790
+ * Background Clip
1791
+ * @see https://tailwindcss.com/docs/background-clip
1792
+ */
1793
+ "bg-clip": [{
1794
+ "bg-clip": ["border", "padding", "content", "text"]
1795
+ }],
1796
+ /**
1797
+ * Background Origin
1798
+ * @see https://tailwindcss.com/docs/background-origin
1799
+ */
1800
+ "bg-origin": [{
1801
+ "bg-origin": ["border", "padding", "content"]
1802
+ }],
1803
+ /**
1804
+ * Background Position
1805
+ * @see https://tailwindcss.com/docs/background-position
1806
+ */
1807
+ "bg-position": [{
1808
+ bg: scaleBgPosition()
1809
+ }],
1810
+ /**
1811
+ * Background Repeat
1812
+ * @see https://tailwindcss.com/docs/background-repeat
1813
+ */
1814
+ "bg-repeat": [{
1815
+ bg: scaleBgRepeat()
1816
+ }],
1817
+ /**
1818
+ * Background Size
1819
+ * @see https://tailwindcss.com/docs/background-size
1820
+ */
1821
+ "bg-size": [{
1822
+ bg: scaleBgSize()
1823
+ }],
1824
+ /**
1825
+ * Background Image
1826
+ * @see https://tailwindcss.com/docs/background-image
1827
+ */
1828
+ "bg-image": [{
1829
+ bg: ["none", {
1830
+ linear: [{
1831
+ to: ["t", "tr", "r", "br", "b", "bl", "l", "tl"]
1832
+ }, isInteger, isArbitraryVariable, isArbitraryValue],
1833
+ radial: ["", isArbitraryVariable, isArbitraryValue],
1834
+ conic: [isInteger, isArbitraryVariable, isArbitraryValue]
1835
+ }, isArbitraryVariableImage, isArbitraryImage]
1836
+ }],
1837
+ /**
1838
+ * Background Color
1839
+ * @see https://tailwindcss.com/docs/background-color
1840
+ */
1841
+ "bg-color": [{
1842
+ bg: scaleColor()
1843
+ }],
1844
+ /**
1845
+ * Gradient Color Stops From Position
1846
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1847
+ */
1848
+ "gradient-from-pos": [{
1849
+ from: scaleGradientStopPosition()
1850
+ }],
1851
+ /**
1852
+ * Gradient Color Stops Via Position
1853
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1854
+ */
1855
+ "gradient-via-pos": [{
1856
+ via: scaleGradientStopPosition()
1857
+ }],
1858
+ /**
1859
+ * Gradient Color Stops To Position
1860
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1861
+ */
1862
+ "gradient-to-pos": [{
1863
+ to: scaleGradientStopPosition()
1864
+ }],
1865
+ /**
1866
+ * Gradient Color Stops From
1867
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1868
+ */
1869
+ "gradient-from": [{
1870
+ from: scaleColor()
1871
+ }],
1872
+ /**
1873
+ * Gradient Color Stops Via
1874
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1875
+ */
1876
+ "gradient-via": [{
1877
+ via: scaleColor()
1878
+ }],
1879
+ /**
1880
+ * Gradient Color Stops To
1881
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1882
+ */
1883
+ "gradient-to": [{
1884
+ to: scaleColor()
1885
+ }],
1886
+ // ---------------
1887
+ // --- Borders ---
1888
+ // ---------------
1889
+ /**
1890
+ * Border Radius
1891
+ * @see https://tailwindcss.com/docs/border-radius
1892
+ */
1893
+ rounded: [{
1894
+ rounded: scaleRadius()
1895
+ }],
1896
+ /**
1897
+ * Border Radius Start
1898
+ * @see https://tailwindcss.com/docs/border-radius
1899
+ */
1900
+ "rounded-s": [{
1901
+ "rounded-s": scaleRadius()
1902
+ }],
1903
+ /**
1904
+ * Border Radius End
1905
+ * @see https://tailwindcss.com/docs/border-radius
1906
+ */
1907
+ "rounded-e": [{
1908
+ "rounded-e": scaleRadius()
1909
+ }],
1910
+ /**
1911
+ * Border Radius Top
1912
+ * @see https://tailwindcss.com/docs/border-radius
1913
+ */
1914
+ "rounded-t": [{
1915
+ "rounded-t": scaleRadius()
1916
+ }],
1917
+ /**
1918
+ * Border Radius Right
1919
+ * @see https://tailwindcss.com/docs/border-radius
1920
+ */
1921
+ "rounded-r": [{
1922
+ "rounded-r": scaleRadius()
1923
+ }],
1924
+ /**
1925
+ * Border Radius Bottom
1926
+ * @see https://tailwindcss.com/docs/border-radius
1927
+ */
1928
+ "rounded-b": [{
1929
+ "rounded-b": scaleRadius()
1930
+ }],
1931
+ /**
1932
+ * Border Radius Left
1933
+ * @see https://tailwindcss.com/docs/border-radius
1934
+ */
1935
+ "rounded-l": [{
1936
+ "rounded-l": scaleRadius()
1937
+ }],
1938
+ /**
1939
+ * Border Radius Start Start
1940
+ * @see https://tailwindcss.com/docs/border-radius
1941
+ */
1942
+ "rounded-ss": [{
1943
+ "rounded-ss": scaleRadius()
1944
+ }],
1945
+ /**
1946
+ * Border Radius Start End
1947
+ * @see https://tailwindcss.com/docs/border-radius
1948
+ */
1949
+ "rounded-se": [{
1950
+ "rounded-se": scaleRadius()
1951
+ }],
1952
+ /**
1953
+ * Border Radius End End
1954
+ * @see https://tailwindcss.com/docs/border-radius
1955
+ */
1956
+ "rounded-ee": [{
1957
+ "rounded-ee": scaleRadius()
1958
+ }],
1959
+ /**
1960
+ * Border Radius End Start
1961
+ * @see https://tailwindcss.com/docs/border-radius
1962
+ */
1963
+ "rounded-es": [{
1964
+ "rounded-es": scaleRadius()
1965
+ }],
1966
+ /**
1967
+ * Border Radius Top Left
1968
+ * @see https://tailwindcss.com/docs/border-radius
1969
+ */
1970
+ "rounded-tl": [{
1971
+ "rounded-tl": scaleRadius()
1972
+ }],
1973
+ /**
1974
+ * Border Radius Top Right
1975
+ * @see https://tailwindcss.com/docs/border-radius
1976
+ */
1977
+ "rounded-tr": [{
1978
+ "rounded-tr": scaleRadius()
1979
+ }],
1980
+ /**
1981
+ * Border Radius Bottom Right
1982
+ * @see https://tailwindcss.com/docs/border-radius
1983
+ */
1984
+ "rounded-br": [{
1985
+ "rounded-br": scaleRadius()
1986
+ }],
1987
+ /**
1988
+ * Border Radius Bottom Left
1989
+ * @see https://tailwindcss.com/docs/border-radius
1990
+ */
1991
+ "rounded-bl": [{
1992
+ "rounded-bl": scaleRadius()
1993
+ }],
1994
+ /**
1995
+ * Border Width
1996
+ * @see https://tailwindcss.com/docs/border-width
1997
+ */
1998
+ "border-w": [{
1999
+ border: scaleBorderWidth()
2000
+ }],
2001
+ /**
2002
+ * Border Width Inline
2003
+ * @see https://tailwindcss.com/docs/border-width
2004
+ */
2005
+ "border-w-x": [{
2006
+ "border-x": scaleBorderWidth()
2007
+ }],
2008
+ /**
2009
+ * Border Width Block
2010
+ * @see https://tailwindcss.com/docs/border-width
2011
+ */
2012
+ "border-w-y": [{
2013
+ "border-y": scaleBorderWidth()
2014
+ }],
2015
+ /**
2016
+ * Border Width Inline Start
2017
+ * @see https://tailwindcss.com/docs/border-width
2018
+ */
2019
+ "border-w-s": [{
2020
+ "border-s": scaleBorderWidth()
2021
+ }],
2022
+ /**
2023
+ * Border Width Inline End
2024
+ * @see https://tailwindcss.com/docs/border-width
2025
+ */
2026
+ "border-w-e": [{
2027
+ "border-e": scaleBorderWidth()
2028
+ }],
2029
+ /**
2030
+ * Border Width Block Start
2031
+ * @see https://tailwindcss.com/docs/border-width
2032
+ */
2033
+ "border-w-bs": [{
2034
+ "border-bs": scaleBorderWidth()
2035
+ }],
2036
+ /**
2037
+ * Border Width Block End
2038
+ * @see https://tailwindcss.com/docs/border-width
2039
+ */
2040
+ "border-w-be": [{
2041
+ "border-be": scaleBorderWidth()
2042
+ }],
2043
+ /**
2044
+ * Border Width Top
2045
+ * @see https://tailwindcss.com/docs/border-width
2046
+ */
2047
+ "border-w-t": [{
2048
+ "border-t": scaleBorderWidth()
2049
+ }],
2050
+ /**
2051
+ * Border Width Right
2052
+ * @see https://tailwindcss.com/docs/border-width
2053
+ */
2054
+ "border-w-r": [{
2055
+ "border-r": scaleBorderWidth()
2056
+ }],
2057
+ /**
2058
+ * Border Width Bottom
2059
+ * @see https://tailwindcss.com/docs/border-width
2060
+ */
2061
+ "border-w-b": [{
2062
+ "border-b": scaleBorderWidth()
2063
+ }],
2064
+ /**
2065
+ * Border Width Left
2066
+ * @see https://tailwindcss.com/docs/border-width
2067
+ */
2068
+ "border-w-l": [{
2069
+ "border-l": scaleBorderWidth()
2070
+ }],
2071
+ /**
2072
+ * Divide Width X
2073
+ * @see https://tailwindcss.com/docs/border-width#between-children
2074
+ */
2075
+ "divide-x": [{
2076
+ "divide-x": scaleBorderWidth()
2077
+ }],
2078
+ /**
2079
+ * Divide Width X Reverse
2080
+ * @see https://tailwindcss.com/docs/border-width#between-children
2081
+ */
2082
+ "divide-x-reverse": ["divide-x-reverse"],
2083
+ /**
2084
+ * Divide Width Y
2085
+ * @see https://tailwindcss.com/docs/border-width#between-children
2086
+ */
2087
+ "divide-y": [{
2088
+ "divide-y": scaleBorderWidth()
2089
+ }],
2090
+ /**
2091
+ * Divide Width Y Reverse
2092
+ * @see https://tailwindcss.com/docs/border-width#between-children
2093
+ */
2094
+ "divide-y-reverse": ["divide-y-reverse"],
2095
+ /**
2096
+ * Border Style
2097
+ * @see https://tailwindcss.com/docs/border-style
2098
+ */
2099
+ "border-style": [{
2100
+ border: [...scaleLineStyle(), "hidden", "none"]
2101
+ }],
2102
+ /**
2103
+ * Divide Style
2104
+ * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style
2105
+ */
2106
+ "divide-style": [{
2107
+ divide: [...scaleLineStyle(), "hidden", "none"]
2108
+ }],
2109
+ /**
2110
+ * Border Color
2111
+ * @see https://tailwindcss.com/docs/border-color
2112
+ */
2113
+ "border-color": [{
2114
+ border: scaleColor()
2115
+ }],
2116
+ /**
2117
+ * Border Color Inline
2118
+ * @see https://tailwindcss.com/docs/border-color
2119
+ */
2120
+ "border-color-x": [{
2121
+ "border-x": scaleColor()
2122
+ }],
2123
+ /**
2124
+ * Border Color Block
2125
+ * @see https://tailwindcss.com/docs/border-color
2126
+ */
2127
+ "border-color-y": [{
2128
+ "border-y": scaleColor()
2129
+ }],
2130
+ /**
2131
+ * Border Color Inline Start
2132
+ * @see https://tailwindcss.com/docs/border-color
2133
+ */
2134
+ "border-color-s": [{
2135
+ "border-s": scaleColor()
2136
+ }],
2137
+ /**
2138
+ * Border Color Inline End
2139
+ * @see https://tailwindcss.com/docs/border-color
2140
+ */
2141
+ "border-color-e": [{
2142
+ "border-e": scaleColor()
2143
+ }],
2144
+ /**
2145
+ * Border Color Block Start
2146
+ * @see https://tailwindcss.com/docs/border-color
2147
+ */
2148
+ "border-color-bs": [{
2149
+ "border-bs": scaleColor()
2150
+ }],
2151
+ /**
2152
+ * Border Color Block End
2153
+ * @see https://tailwindcss.com/docs/border-color
2154
+ */
2155
+ "border-color-be": [{
2156
+ "border-be": scaleColor()
2157
+ }],
2158
+ /**
2159
+ * Border Color Top
2160
+ * @see https://tailwindcss.com/docs/border-color
2161
+ */
2162
+ "border-color-t": [{
2163
+ "border-t": scaleColor()
2164
+ }],
2165
+ /**
2166
+ * Border Color Right
2167
+ * @see https://tailwindcss.com/docs/border-color
2168
+ */
2169
+ "border-color-r": [{
2170
+ "border-r": scaleColor()
2171
+ }],
2172
+ /**
2173
+ * Border Color Bottom
2174
+ * @see https://tailwindcss.com/docs/border-color
2175
+ */
2176
+ "border-color-b": [{
2177
+ "border-b": scaleColor()
2178
+ }],
2179
+ /**
2180
+ * Border Color Left
2181
+ * @see https://tailwindcss.com/docs/border-color
2182
+ */
2183
+ "border-color-l": [{
2184
+ "border-l": scaleColor()
2185
+ }],
2186
+ /**
2187
+ * Divide Color
2188
+ * @see https://tailwindcss.com/docs/divide-color
2189
+ */
2190
+ "divide-color": [{
2191
+ divide: scaleColor()
2192
+ }],
2193
+ /**
2194
+ * Outline Style
2195
+ * @see https://tailwindcss.com/docs/outline-style
2196
+ */
2197
+ "outline-style": [{
2198
+ outline: [...scaleLineStyle(), "none", "hidden"]
2199
+ }],
2200
+ /**
2201
+ * Outline Offset
2202
+ * @see https://tailwindcss.com/docs/outline-offset
2203
+ */
2204
+ "outline-offset": [{
2205
+ "outline-offset": [isNumber, isArbitraryVariable, isArbitraryValue]
2206
+ }],
2207
+ /**
2208
+ * Outline Width
2209
+ * @see https://tailwindcss.com/docs/outline-width
2210
+ */
2211
+ "outline-w": [{
2212
+ outline: ["", isNumber, isArbitraryVariableLength, isArbitraryLength]
2213
+ }],
2214
+ /**
2215
+ * Outline Color
2216
+ * @see https://tailwindcss.com/docs/outline-color
2217
+ */
2218
+ "outline-color": [{
2219
+ outline: scaleColor()
2220
+ }],
2221
+ // ---------------
2222
+ // --- Effects ---
2223
+ // ---------------
2224
+ /**
2225
+ * Box Shadow
2226
+ * @see https://tailwindcss.com/docs/box-shadow
2227
+ */
2228
+ shadow: [{
2229
+ shadow: [
2230
+ // Deprecated since Tailwind CSS v4.0.0
2231
+ "",
2232
+ "none",
2233
+ themeShadow,
2234
+ isArbitraryVariableShadow,
2235
+ isArbitraryShadow
2236
+ ]
2237
+ }],
2238
+ /**
2239
+ * Box Shadow Color
2240
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color
2241
+ */
2242
+ "shadow-color": [{
2243
+ shadow: scaleColor()
2244
+ }],
2245
+ /**
2246
+ * Inset Box Shadow
2247
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow
2248
+ */
2249
+ "inset-shadow": [{
2250
+ "inset-shadow": ["none", themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]
2251
+ }],
2252
+ /**
2253
+ * Inset Box Shadow Color
2254
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color
2255
+ */
2256
+ "inset-shadow-color": [{
2257
+ "inset-shadow": scaleColor()
2258
+ }],
2259
+ /**
2260
+ * Ring Width
2261
+ * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring
2262
+ */
2263
+ "ring-w": [{
2264
+ ring: scaleBorderWidth()
2265
+ }],
2266
+ /**
2267
+ * Ring Width Inset
2268
+ * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings
2269
+ * @deprecated since Tailwind CSS v4.0.0
2270
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2271
+ */
2272
+ "ring-w-inset": ["ring-inset"],
2273
+ /**
2274
+ * Ring Color
2275
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color
2276
+ */
2277
+ "ring-color": [{
2278
+ ring: scaleColor()
2279
+ }],
2280
+ /**
2281
+ * Ring Offset Width
2282
+ * @see https://v3.tailwindcss.com/docs/ring-offset-width
2283
+ * @deprecated since Tailwind CSS v4.0.0
2284
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2285
+ */
2286
+ "ring-offset-w": [{
2287
+ "ring-offset": [isNumber, isArbitraryLength]
2288
+ }],
2289
+ /**
2290
+ * Ring Offset Color
2291
+ * @see https://v3.tailwindcss.com/docs/ring-offset-color
2292
+ * @deprecated since Tailwind CSS v4.0.0
2293
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2294
+ */
2295
+ "ring-offset-color": [{
2296
+ "ring-offset": scaleColor()
2297
+ }],
2298
+ /**
2299
+ * Inset Ring Width
2300
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring
2301
+ */
2302
+ "inset-ring-w": [{
2303
+ "inset-ring": scaleBorderWidth()
2304
+ }],
2305
+ /**
2306
+ * Inset Ring Color
2307
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color
2308
+ */
2309
+ "inset-ring-color": [{
2310
+ "inset-ring": scaleColor()
2311
+ }],
2312
+ /**
2313
+ * Text Shadow
2314
+ * @see https://tailwindcss.com/docs/text-shadow
2315
+ */
2316
+ "text-shadow": [{
2317
+ "text-shadow": ["none", themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]
2318
+ }],
2319
+ /**
2320
+ * Text Shadow Color
2321
+ * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color
2322
+ */
2323
+ "text-shadow-color": [{
2324
+ "text-shadow": scaleColor()
2325
+ }],
2326
+ /**
2327
+ * Opacity
2328
+ * @see https://tailwindcss.com/docs/opacity
2329
+ */
2330
+ opacity: [{
2331
+ opacity: [isNumber, isArbitraryVariable, isArbitraryValue]
2332
+ }],
2333
+ /**
2334
+ * Mix Blend Mode
2335
+ * @see https://tailwindcss.com/docs/mix-blend-mode
2336
+ */
2337
+ "mix-blend": [{
2338
+ "mix-blend": [...scaleBlendMode(), "plus-darker", "plus-lighter"]
2339
+ }],
2340
+ /**
2341
+ * Background Blend Mode
2342
+ * @see https://tailwindcss.com/docs/background-blend-mode
2343
+ */
2344
+ "bg-blend": [{
2345
+ "bg-blend": scaleBlendMode()
2346
+ }],
2347
+ /**
2348
+ * Mask Clip
2349
+ * @see https://tailwindcss.com/docs/mask-clip
2350
+ */
2351
+ "mask-clip": [{
2352
+ "mask-clip": ["border", "padding", "content", "fill", "stroke", "view"]
2353
+ }, "mask-no-clip"],
2354
+ /**
2355
+ * Mask Composite
2356
+ * @see https://tailwindcss.com/docs/mask-composite
2357
+ */
2358
+ "mask-composite": [{
2359
+ mask: ["add", "subtract", "intersect", "exclude"]
2360
+ }],
2361
+ /**
2362
+ * Mask Image
2363
+ * @see https://tailwindcss.com/docs/mask-image
2364
+ */
2365
+ "mask-image-linear-pos": [{
2366
+ "mask-linear": [isNumber]
2367
+ }],
2368
+ "mask-image-linear-from-pos": [{
2369
+ "mask-linear-from": scaleMaskImagePosition()
2370
+ }],
2371
+ "mask-image-linear-to-pos": [{
2372
+ "mask-linear-to": scaleMaskImagePosition()
2373
+ }],
2374
+ "mask-image-linear-from-color": [{
2375
+ "mask-linear-from": scaleColor()
2376
+ }],
2377
+ "mask-image-linear-to-color": [{
2378
+ "mask-linear-to": scaleColor()
2379
+ }],
2380
+ "mask-image-t-from-pos": [{
2381
+ "mask-t-from": scaleMaskImagePosition()
2382
+ }],
2383
+ "mask-image-t-to-pos": [{
2384
+ "mask-t-to": scaleMaskImagePosition()
2385
+ }],
2386
+ "mask-image-t-from-color": [{
2387
+ "mask-t-from": scaleColor()
2388
+ }],
2389
+ "mask-image-t-to-color": [{
2390
+ "mask-t-to": scaleColor()
2391
+ }],
2392
+ "mask-image-r-from-pos": [{
2393
+ "mask-r-from": scaleMaskImagePosition()
2394
+ }],
2395
+ "mask-image-r-to-pos": [{
2396
+ "mask-r-to": scaleMaskImagePosition()
2397
+ }],
2398
+ "mask-image-r-from-color": [{
2399
+ "mask-r-from": scaleColor()
2400
+ }],
2401
+ "mask-image-r-to-color": [{
2402
+ "mask-r-to": scaleColor()
2403
+ }],
2404
+ "mask-image-b-from-pos": [{
2405
+ "mask-b-from": scaleMaskImagePosition()
2406
+ }],
2407
+ "mask-image-b-to-pos": [{
2408
+ "mask-b-to": scaleMaskImagePosition()
2409
+ }],
2410
+ "mask-image-b-from-color": [{
2411
+ "mask-b-from": scaleColor()
2412
+ }],
2413
+ "mask-image-b-to-color": [{
2414
+ "mask-b-to": scaleColor()
2415
+ }],
2416
+ "mask-image-l-from-pos": [{
2417
+ "mask-l-from": scaleMaskImagePosition()
2418
+ }],
2419
+ "mask-image-l-to-pos": [{
2420
+ "mask-l-to": scaleMaskImagePosition()
2421
+ }],
2422
+ "mask-image-l-from-color": [{
2423
+ "mask-l-from": scaleColor()
2424
+ }],
2425
+ "mask-image-l-to-color": [{
2426
+ "mask-l-to": scaleColor()
2427
+ }],
2428
+ "mask-image-x-from-pos": [{
2429
+ "mask-x-from": scaleMaskImagePosition()
2430
+ }],
2431
+ "mask-image-x-to-pos": [{
2432
+ "mask-x-to": scaleMaskImagePosition()
2433
+ }],
2434
+ "mask-image-x-from-color": [{
2435
+ "mask-x-from": scaleColor()
2436
+ }],
2437
+ "mask-image-x-to-color": [{
2438
+ "mask-x-to": scaleColor()
2439
+ }],
2440
+ "mask-image-y-from-pos": [{
2441
+ "mask-y-from": scaleMaskImagePosition()
2442
+ }],
2443
+ "mask-image-y-to-pos": [{
2444
+ "mask-y-to": scaleMaskImagePosition()
2445
+ }],
2446
+ "mask-image-y-from-color": [{
2447
+ "mask-y-from": scaleColor()
2448
+ }],
2449
+ "mask-image-y-to-color": [{
2450
+ "mask-y-to": scaleColor()
2451
+ }],
2452
+ "mask-image-radial": [{
2453
+ "mask-radial": [isArbitraryVariable, isArbitraryValue]
2454
+ }],
2455
+ "mask-image-radial-from-pos": [{
2456
+ "mask-radial-from": scaleMaskImagePosition()
2457
+ }],
2458
+ "mask-image-radial-to-pos": [{
2459
+ "mask-radial-to": scaleMaskImagePosition()
2460
+ }],
2461
+ "mask-image-radial-from-color": [{
2462
+ "mask-radial-from": scaleColor()
2463
+ }],
2464
+ "mask-image-radial-to-color": [{
2465
+ "mask-radial-to": scaleColor()
2466
+ }],
2467
+ "mask-image-radial-shape": [{
2468
+ "mask-radial": ["circle", "ellipse"]
2469
+ }],
2470
+ "mask-image-radial-size": [{
2471
+ "mask-radial": [{
2472
+ closest: ["side", "corner"],
2473
+ farthest: ["side", "corner"]
2474
+ }]
2475
+ }],
2476
+ "mask-image-radial-pos": [{
2477
+ "mask-radial-at": scalePosition()
2478
+ }],
2479
+ "mask-image-conic-pos": [{
2480
+ "mask-conic": [isNumber]
2481
+ }],
2482
+ "mask-image-conic-from-pos": [{
2483
+ "mask-conic-from": scaleMaskImagePosition()
2484
+ }],
2485
+ "mask-image-conic-to-pos": [{
2486
+ "mask-conic-to": scaleMaskImagePosition()
2487
+ }],
2488
+ "mask-image-conic-from-color": [{
2489
+ "mask-conic-from": scaleColor()
2490
+ }],
2491
+ "mask-image-conic-to-color": [{
2492
+ "mask-conic-to": scaleColor()
2493
+ }],
2494
+ /**
2495
+ * Mask Mode
2496
+ * @see https://tailwindcss.com/docs/mask-mode
2497
+ */
2498
+ "mask-mode": [{
2499
+ mask: ["alpha", "luminance", "match"]
2500
+ }],
2501
+ /**
2502
+ * Mask Origin
2503
+ * @see https://tailwindcss.com/docs/mask-origin
2504
+ */
2505
+ "mask-origin": [{
2506
+ "mask-origin": ["border", "padding", "content", "fill", "stroke", "view"]
2507
+ }],
2508
+ /**
2509
+ * Mask Position
2510
+ * @see https://tailwindcss.com/docs/mask-position
2511
+ */
2512
+ "mask-position": [{
2513
+ mask: scaleBgPosition()
2514
+ }],
2515
+ /**
2516
+ * Mask Repeat
2517
+ * @see https://tailwindcss.com/docs/mask-repeat
2518
+ */
2519
+ "mask-repeat": [{
2520
+ mask: scaleBgRepeat()
2521
+ }],
2522
+ /**
2523
+ * Mask Size
2524
+ * @see https://tailwindcss.com/docs/mask-size
2525
+ */
2526
+ "mask-size": [{
2527
+ mask: scaleBgSize()
2528
+ }],
2529
+ /**
2530
+ * Mask Type
2531
+ * @see https://tailwindcss.com/docs/mask-type
2532
+ */
2533
+ "mask-type": [{
2534
+ "mask-type": ["alpha", "luminance"]
2535
+ }],
2536
+ /**
2537
+ * Mask Image
2538
+ * @see https://tailwindcss.com/docs/mask-image
2539
+ */
2540
+ "mask-image": [{
2541
+ mask: ["none", isArbitraryVariable, isArbitraryValue]
2542
+ }],
2543
+ // ---------------
2544
+ // --- Filters ---
2545
+ // ---------------
2546
+ /**
2547
+ * Filter
2548
+ * @see https://tailwindcss.com/docs/filter
2549
+ */
2550
+ filter: [{
2551
+ filter: [
2552
+ // Deprecated since Tailwind CSS v3.0.0
2553
+ "",
2554
+ "none",
2555
+ isArbitraryVariable,
2556
+ isArbitraryValue
2557
+ ]
2558
+ }],
2559
+ /**
2560
+ * Blur
2561
+ * @see https://tailwindcss.com/docs/blur
2562
+ */
2563
+ blur: [{
2564
+ blur: scaleBlur()
2565
+ }],
2566
+ /**
2567
+ * Brightness
2568
+ * @see https://tailwindcss.com/docs/brightness
2569
+ */
2570
+ brightness: [{
2571
+ brightness: [isNumber, isArbitraryVariable, isArbitraryValue]
2572
+ }],
2573
+ /**
2574
+ * Contrast
2575
+ * @see https://tailwindcss.com/docs/contrast
2576
+ */
2577
+ contrast: [{
2578
+ contrast: [isNumber, isArbitraryVariable, isArbitraryValue]
2579
+ }],
2580
+ /**
2581
+ * Drop Shadow
2582
+ * @see https://tailwindcss.com/docs/drop-shadow
2583
+ */
2584
+ "drop-shadow": [{
2585
+ "drop-shadow": [
2586
+ // Deprecated since Tailwind CSS v4.0.0
2587
+ "",
2588
+ "none",
2589
+ themeDropShadow,
2590
+ isArbitraryVariableShadow,
2591
+ isArbitraryShadow
2592
+ ]
2593
+ }],
2594
+ /**
2595
+ * Drop Shadow Color
2596
+ * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color
2597
+ */
2598
+ "drop-shadow-color": [{
2599
+ "drop-shadow": scaleColor()
2600
+ }],
2601
+ /**
2602
+ * Grayscale
2603
+ * @see https://tailwindcss.com/docs/grayscale
2604
+ */
2605
+ grayscale: [{
2606
+ grayscale: ["", isNumber, isArbitraryVariable, isArbitraryValue]
2607
+ }],
2608
+ /**
2609
+ * Hue Rotate
2610
+ * @see https://tailwindcss.com/docs/hue-rotate
2611
+ */
2612
+ "hue-rotate": [{
2613
+ "hue-rotate": [isNumber, isArbitraryVariable, isArbitraryValue]
2614
+ }],
2615
+ /**
2616
+ * Invert
2617
+ * @see https://tailwindcss.com/docs/invert
2618
+ */
2619
+ invert: [{
2620
+ invert: ["", isNumber, isArbitraryVariable, isArbitraryValue]
2621
+ }],
2622
+ /**
2623
+ * Saturate
2624
+ * @see https://tailwindcss.com/docs/saturate
2625
+ */
2626
+ saturate: [{
2627
+ saturate: [isNumber, isArbitraryVariable, isArbitraryValue]
2628
+ }],
2629
+ /**
2630
+ * Sepia
2631
+ * @see https://tailwindcss.com/docs/sepia
2632
+ */
2633
+ sepia: [{
2634
+ sepia: ["", isNumber, isArbitraryVariable, isArbitraryValue]
2635
+ }],
2636
+ /**
2637
+ * Backdrop Filter
2638
+ * @see https://tailwindcss.com/docs/backdrop-filter
2639
+ */
2640
+ "backdrop-filter": [{
2641
+ "backdrop-filter": [
2642
+ // Deprecated since Tailwind CSS v3.0.0
2643
+ "",
2644
+ "none",
2645
+ isArbitraryVariable,
2646
+ isArbitraryValue
2647
+ ]
2648
+ }],
2649
+ /**
2650
+ * Backdrop Blur
2651
+ * @see https://tailwindcss.com/docs/backdrop-blur
2652
+ */
2653
+ "backdrop-blur": [{
2654
+ "backdrop-blur": scaleBlur()
2655
+ }],
2656
+ /**
2657
+ * Backdrop Brightness
2658
+ * @see https://tailwindcss.com/docs/backdrop-brightness
2659
+ */
2660
+ "backdrop-brightness": [{
2661
+ "backdrop-brightness": [isNumber, isArbitraryVariable, isArbitraryValue]
2662
+ }],
2663
+ /**
2664
+ * Backdrop Contrast
2665
+ * @see https://tailwindcss.com/docs/backdrop-contrast
2666
+ */
2667
+ "backdrop-contrast": [{
2668
+ "backdrop-contrast": [isNumber, isArbitraryVariable, isArbitraryValue]
2669
+ }],
2670
+ /**
2671
+ * Backdrop Grayscale
2672
+ * @see https://tailwindcss.com/docs/backdrop-grayscale
2673
+ */
2674
+ "backdrop-grayscale": [{
2675
+ "backdrop-grayscale": ["", isNumber, isArbitraryVariable, isArbitraryValue]
2676
+ }],
2677
+ /**
2678
+ * Backdrop Hue Rotate
2679
+ * @see https://tailwindcss.com/docs/backdrop-hue-rotate
2680
+ */
2681
+ "backdrop-hue-rotate": [{
2682
+ "backdrop-hue-rotate": [isNumber, isArbitraryVariable, isArbitraryValue]
2683
+ }],
2684
+ /**
2685
+ * Backdrop Invert
2686
+ * @see https://tailwindcss.com/docs/backdrop-invert
2687
+ */
2688
+ "backdrop-invert": [{
2689
+ "backdrop-invert": ["", isNumber, isArbitraryVariable, isArbitraryValue]
2690
+ }],
2691
+ /**
2692
+ * Backdrop Opacity
2693
+ * @see https://tailwindcss.com/docs/backdrop-opacity
2694
+ */
2695
+ "backdrop-opacity": [{
2696
+ "backdrop-opacity": [isNumber, isArbitraryVariable, isArbitraryValue]
2697
+ }],
2698
+ /**
2699
+ * Backdrop Saturate
2700
+ * @see https://tailwindcss.com/docs/backdrop-saturate
2701
+ */
2702
+ "backdrop-saturate": [{
2703
+ "backdrop-saturate": [isNumber, isArbitraryVariable, isArbitraryValue]
2704
+ }],
2705
+ /**
2706
+ * Backdrop Sepia
2707
+ * @see https://tailwindcss.com/docs/backdrop-sepia
2708
+ */
2709
+ "backdrop-sepia": [{
2710
+ "backdrop-sepia": ["", isNumber, isArbitraryVariable, isArbitraryValue]
2711
+ }],
2712
+ // --------------
2713
+ // --- Tables ---
2714
+ // --------------
2715
+ /**
2716
+ * Border Collapse
2717
+ * @see https://tailwindcss.com/docs/border-collapse
2718
+ */
2719
+ "border-collapse": [{
2720
+ border: ["collapse", "separate"]
2721
+ }],
2722
+ /**
2723
+ * Border Spacing
2724
+ * @see https://tailwindcss.com/docs/border-spacing
2725
+ */
2726
+ "border-spacing": [{
2727
+ "border-spacing": scaleUnambiguousSpacing()
2728
+ }],
2729
+ /**
2730
+ * Border Spacing X
2731
+ * @see https://tailwindcss.com/docs/border-spacing
2732
+ */
2733
+ "border-spacing-x": [{
2734
+ "border-spacing-x": scaleUnambiguousSpacing()
2735
+ }],
2736
+ /**
2737
+ * Border Spacing Y
2738
+ * @see https://tailwindcss.com/docs/border-spacing
2739
+ */
2740
+ "border-spacing-y": [{
2741
+ "border-spacing-y": scaleUnambiguousSpacing()
2742
+ }],
2743
+ /**
2744
+ * Table Layout
2745
+ * @see https://tailwindcss.com/docs/table-layout
2746
+ */
2747
+ "table-layout": [{
2748
+ table: ["auto", "fixed"]
2749
+ }],
2750
+ /**
2751
+ * Caption Side
2752
+ * @see https://tailwindcss.com/docs/caption-side
2753
+ */
2754
+ caption: [{
2755
+ caption: ["top", "bottom"]
2756
+ }],
2757
+ // ---------------------------------
2758
+ // --- Transitions and Animation ---
2759
+ // ---------------------------------
2760
+ /**
2761
+ * Transition Property
2762
+ * @see https://tailwindcss.com/docs/transition-property
2763
+ */
2764
+ transition: [{
2765
+ transition: ["", "all", "colors", "opacity", "shadow", "transform", "none", isArbitraryVariable, isArbitraryValue]
2766
+ }],
2767
+ /**
2768
+ * Transition Behavior
2769
+ * @see https://tailwindcss.com/docs/transition-behavior
2770
+ */
2771
+ "transition-behavior": [{
2772
+ transition: ["normal", "discrete"]
2773
+ }],
2774
+ /**
2775
+ * Transition Duration
2776
+ * @see https://tailwindcss.com/docs/transition-duration
2777
+ */
2778
+ duration: [{
2779
+ duration: [isNumber, "initial", isArbitraryVariable, isArbitraryValue]
2780
+ }],
2781
+ /**
2782
+ * Transition Timing Function
2783
+ * @see https://tailwindcss.com/docs/transition-timing-function
2784
+ */
2785
+ ease: [{
2786
+ ease: ["linear", "initial", themeEase, isArbitraryVariable, isArbitraryValue]
2787
+ }],
2788
+ /**
2789
+ * Transition Delay
2790
+ * @see https://tailwindcss.com/docs/transition-delay
2791
+ */
2792
+ delay: [{
2793
+ delay: [isNumber, isArbitraryVariable, isArbitraryValue]
2794
+ }],
2795
+ /**
2796
+ * Animation
2797
+ * @see https://tailwindcss.com/docs/animation
2798
+ */
2799
+ animate: [{
2800
+ animate: ["none", themeAnimate, isArbitraryVariable, isArbitraryValue]
2801
+ }],
2802
+ // ------------------
2803
+ // --- Transforms ---
2804
+ // ------------------
2805
+ /**
2806
+ * Backface Visibility
2807
+ * @see https://tailwindcss.com/docs/backface-visibility
2808
+ */
2809
+ backface: [{
2810
+ backface: ["hidden", "visible"]
2811
+ }],
2812
+ /**
2813
+ * Perspective
2814
+ * @see https://tailwindcss.com/docs/perspective
2815
+ */
2816
+ perspective: [{
2817
+ perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]
2818
+ }],
2819
+ /**
2820
+ * Perspective Origin
2821
+ * @see https://tailwindcss.com/docs/perspective-origin
2822
+ */
2823
+ "perspective-origin": [{
2824
+ "perspective-origin": scalePositionWithArbitrary()
2825
+ }],
2826
+ /**
2827
+ * Rotate
2828
+ * @see https://tailwindcss.com/docs/rotate
2829
+ */
2830
+ rotate: [{
2831
+ rotate: scaleRotate()
2832
+ }],
2833
+ /**
2834
+ * Rotate X
2835
+ * @see https://tailwindcss.com/docs/rotate
2836
+ */
2837
+ "rotate-x": [{
2838
+ "rotate-x": scaleRotate()
2839
+ }],
2840
+ /**
2841
+ * Rotate Y
2842
+ * @see https://tailwindcss.com/docs/rotate
2843
+ */
2844
+ "rotate-y": [{
2845
+ "rotate-y": scaleRotate()
2846
+ }],
2847
+ /**
2848
+ * Rotate Z
2849
+ * @see https://tailwindcss.com/docs/rotate
2850
+ */
2851
+ "rotate-z": [{
2852
+ "rotate-z": scaleRotate()
2853
+ }],
2854
+ /**
2855
+ * Scale
2856
+ * @see https://tailwindcss.com/docs/scale
2857
+ */
2858
+ scale: [{
2859
+ scale: scaleScale()
2860
+ }],
2861
+ /**
2862
+ * Scale X
2863
+ * @see https://tailwindcss.com/docs/scale
2864
+ */
2865
+ "scale-x": [{
2866
+ "scale-x": scaleScale()
2867
+ }],
2868
+ /**
2869
+ * Scale Y
2870
+ * @see https://tailwindcss.com/docs/scale
2871
+ */
2872
+ "scale-y": [{
2873
+ "scale-y": scaleScale()
2874
+ }],
2875
+ /**
2876
+ * Scale Z
2877
+ * @see https://tailwindcss.com/docs/scale
2878
+ */
2879
+ "scale-z": [{
2880
+ "scale-z": scaleScale()
2881
+ }],
2882
+ /**
2883
+ * Scale 3D
2884
+ * @see https://tailwindcss.com/docs/scale
2885
+ */
2886
+ "scale-3d": ["scale-3d"],
2887
+ /**
2888
+ * Skew
2889
+ * @see https://tailwindcss.com/docs/skew
2890
+ */
2891
+ skew: [{
2892
+ skew: scaleSkew()
2893
+ }],
2894
+ /**
2895
+ * Skew X
2896
+ * @see https://tailwindcss.com/docs/skew
2897
+ */
2898
+ "skew-x": [{
2899
+ "skew-x": scaleSkew()
2900
+ }],
2901
+ /**
2902
+ * Skew Y
2903
+ * @see https://tailwindcss.com/docs/skew
2904
+ */
2905
+ "skew-y": [{
2906
+ "skew-y": scaleSkew()
2907
+ }],
2908
+ /**
2909
+ * Transform
2910
+ * @see https://tailwindcss.com/docs/transform
2911
+ */
2912
+ transform: [{
2913
+ transform: [isArbitraryVariable, isArbitraryValue, "", "none", "gpu", "cpu"]
2914
+ }],
2915
+ /**
2916
+ * Transform Origin
2917
+ * @see https://tailwindcss.com/docs/transform-origin
2918
+ */
2919
+ "transform-origin": [{
2920
+ origin: scalePositionWithArbitrary()
2921
+ }],
2922
+ /**
2923
+ * Transform Style
2924
+ * @see https://tailwindcss.com/docs/transform-style
2925
+ */
2926
+ "transform-style": [{
2927
+ transform: ["3d", "flat"]
2928
+ }],
2929
+ /**
2930
+ * Translate
2931
+ * @see https://tailwindcss.com/docs/translate
2932
+ */
2933
+ translate: [{
2934
+ translate: scaleTranslate()
2935
+ }],
2936
+ /**
2937
+ * Translate X
2938
+ * @see https://tailwindcss.com/docs/translate
2939
+ */
2940
+ "translate-x": [{
2941
+ "translate-x": scaleTranslate()
2942
+ }],
2943
+ /**
2944
+ * Translate Y
2945
+ * @see https://tailwindcss.com/docs/translate
2946
+ */
2947
+ "translate-y": [{
2948
+ "translate-y": scaleTranslate()
2949
+ }],
2950
+ /**
2951
+ * Translate Z
2952
+ * @see https://tailwindcss.com/docs/translate
2953
+ */
2954
+ "translate-z": [{
2955
+ "translate-z": scaleTranslate()
2956
+ }],
2957
+ /**
2958
+ * Translate None
2959
+ * @see https://tailwindcss.com/docs/translate
2960
+ */
2961
+ "translate-none": ["translate-none"],
2962
+ // ---------------------
2963
+ // --- Interactivity ---
2964
+ // ---------------------
2965
+ /**
2966
+ * Accent Color
2967
+ * @see https://tailwindcss.com/docs/accent-color
2968
+ */
2969
+ accent: [{
2970
+ accent: scaleColor()
2971
+ }],
2972
+ /**
2973
+ * Appearance
2974
+ * @see https://tailwindcss.com/docs/appearance
2975
+ */
2976
+ appearance: [{
2977
+ appearance: ["none", "auto"]
2978
+ }],
2979
+ /**
2980
+ * Caret Color
2981
+ * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities
2982
+ */
2983
+ "caret-color": [{
2984
+ caret: scaleColor()
2985
+ }],
2986
+ /**
2987
+ * Color Scheme
2988
+ * @see https://tailwindcss.com/docs/color-scheme
2989
+ */
2990
+ "color-scheme": [{
2991
+ scheme: ["normal", "dark", "light", "light-dark", "only-dark", "only-light"]
2992
+ }],
2993
+ /**
2994
+ * Cursor
2995
+ * @see https://tailwindcss.com/docs/cursor
2996
+ */
2997
+ cursor: [{
2998
+ cursor: ["auto", "default", "pointer", "wait", "text", "move", "help", "not-allowed", "none", "context-menu", "progress", "cell", "crosshair", "vertical-text", "alias", "copy", "no-drop", "grab", "grabbing", "all-scroll", "col-resize", "row-resize", "n-resize", "e-resize", "s-resize", "w-resize", "ne-resize", "nw-resize", "se-resize", "sw-resize", "ew-resize", "ns-resize", "nesw-resize", "nwse-resize", "zoom-in", "zoom-out", isArbitraryVariable, isArbitraryValue]
2999
+ }],
3000
+ /**
3001
+ * Field Sizing
3002
+ * @see https://tailwindcss.com/docs/field-sizing
3003
+ */
3004
+ "field-sizing": [{
3005
+ "field-sizing": ["fixed", "content"]
3006
+ }],
3007
+ /**
3008
+ * Pointer Events
3009
+ * @see https://tailwindcss.com/docs/pointer-events
3010
+ */
3011
+ "pointer-events": [{
3012
+ "pointer-events": ["auto", "none"]
3013
+ }],
3014
+ /**
3015
+ * Resize
3016
+ * @see https://tailwindcss.com/docs/resize
3017
+ */
3018
+ resize: [{
3019
+ resize: ["none", "", "y", "x"]
3020
+ }],
3021
+ /**
3022
+ * Scroll Behavior
3023
+ * @see https://tailwindcss.com/docs/scroll-behavior
3024
+ */
3025
+ "scroll-behavior": [{
3026
+ scroll: ["auto", "smooth"]
3027
+ }],
3028
+ /**
3029
+ * Scroll Margin
3030
+ * @see https://tailwindcss.com/docs/scroll-margin
3031
+ */
3032
+ "scroll-m": [{
3033
+ "scroll-m": scaleUnambiguousSpacing()
3034
+ }],
3035
+ /**
3036
+ * Scroll Margin Inline
3037
+ * @see https://tailwindcss.com/docs/scroll-margin
3038
+ */
3039
+ "scroll-mx": [{
3040
+ "scroll-mx": scaleUnambiguousSpacing()
3041
+ }],
3042
+ /**
3043
+ * Scroll Margin Block
3044
+ * @see https://tailwindcss.com/docs/scroll-margin
3045
+ */
3046
+ "scroll-my": [{
3047
+ "scroll-my": scaleUnambiguousSpacing()
3048
+ }],
3049
+ /**
3050
+ * Scroll Margin Inline Start
3051
+ * @see https://tailwindcss.com/docs/scroll-margin
3052
+ */
3053
+ "scroll-ms": [{
3054
+ "scroll-ms": scaleUnambiguousSpacing()
3055
+ }],
3056
+ /**
3057
+ * Scroll Margin Inline End
3058
+ * @see https://tailwindcss.com/docs/scroll-margin
3059
+ */
3060
+ "scroll-me": [{
3061
+ "scroll-me": scaleUnambiguousSpacing()
3062
+ }],
3063
+ /**
3064
+ * Scroll Margin Block Start
3065
+ * @see https://tailwindcss.com/docs/scroll-margin
3066
+ */
3067
+ "scroll-mbs": [{
3068
+ "scroll-mbs": scaleUnambiguousSpacing()
3069
+ }],
3070
+ /**
3071
+ * Scroll Margin Block End
3072
+ * @see https://tailwindcss.com/docs/scroll-margin
3073
+ */
3074
+ "scroll-mbe": [{
3075
+ "scroll-mbe": scaleUnambiguousSpacing()
3076
+ }],
3077
+ /**
3078
+ * Scroll Margin Top
3079
+ * @see https://tailwindcss.com/docs/scroll-margin
3080
+ */
3081
+ "scroll-mt": [{
3082
+ "scroll-mt": scaleUnambiguousSpacing()
3083
+ }],
3084
+ /**
3085
+ * Scroll Margin Right
3086
+ * @see https://tailwindcss.com/docs/scroll-margin
3087
+ */
3088
+ "scroll-mr": [{
3089
+ "scroll-mr": scaleUnambiguousSpacing()
3090
+ }],
3091
+ /**
3092
+ * Scroll Margin Bottom
3093
+ * @see https://tailwindcss.com/docs/scroll-margin
3094
+ */
3095
+ "scroll-mb": [{
3096
+ "scroll-mb": scaleUnambiguousSpacing()
3097
+ }],
3098
+ /**
3099
+ * Scroll Margin Left
3100
+ * @see https://tailwindcss.com/docs/scroll-margin
3101
+ */
3102
+ "scroll-ml": [{
3103
+ "scroll-ml": scaleUnambiguousSpacing()
3104
+ }],
3105
+ /**
3106
+ * Scroll Padding
3107
+ * @see https://tailwindcss.com/docs/scroll-padding
3108
+ */
3109
+ "scroll-p": [{
3110
+ "scroll-p": scaleUnambiguousSpacing()
3111
+ }],
3112
+ /**
3113
+ * Scroll Padding Inline
3114
+ * @see https://tailwindcss.com/docs/scroll-padding
3115
+ */
3116
+ "scroll-px": [{
3117
+ "scroll-px": scaleUnambiguousSpacing()
3118
+ }],
3119
+ /**
3120
+ * Scroll Padding Block
3121
+ * @see https://tailwindcss.com/docs/scroll-padding
3122
+ */
3123
+ "scroll-py": [{
3124
+ "scroll-py": scaleUnambiguousSpacing()
3125
+ }],
3126
+ /**
3127
+ * Scroll Padding Inline Start
3128
+ * @see https://tailwindcss.com/docs/scroll-padding
3129
+ */
3130
+ "scroll-ps": [{
3131
+ "scroll-ps": scaleUnambiguousSpacing()
3132
+ }],
3133
+ /**
3134
+ * Scroll Padding Inline End
3135
+ * @see https://tailwindcss.com/docs/scroll-padding
3136
+ */
3137
+ "scroll-pe": [{
3138
+ "scroll-pe": scaleUnambiguousSpacing()
3139
+ }],
3140
+ /**
3141
+ * Scroll Padding Block Start
3142
+ * @see https://tailwindcss.com/docs/scroll-padding
3143
+ */
3144
+ "scroll-pbs": [{
3145
+ "scroll-pbs": scaleUnambiguousSpacing()
3146
+ }],
3147
+ /**
3148
+ * Scroll Padding Block End
3149
+ * @see https://tailwindcss.com/docs/scroll-padding
3150
+ */
3151
+ "scroll-pbe": [{
3152
+ "scroll-pbe": scaleUnambiguousSpacing()
3153
+ }],
3154
+ /**
3155
+ * Scroll Padding Top
3156
+ * @see https://tailwindcss.com/docs/scroll-padding
3157
+ */
3158
+ "scroll-pt": [{
3159
+ "scroll-pt": scaleUnambiguousSpacing()
3160
+ }],
3161
+ /**
3162
+ * Scroll Padding Right
3163
+ * @see https://tailwindcss.com/docs/scroll-padding
3164
+ */
3165
+ "scroll-pr": [{
3166
+ "scroll-pr": scaleUnambiguousSpacing()
3167
+ }],
3168
+ /**
3169
+ * Scroll Padding Bottom
3170
+ * @see https://tailwindcss.com/docs/scroll-padding
3171
+ */
3172
+ "scroll-pb": [{
3173
+ "scroll-pb": scaleUnambiguousSpacing()
3174
+ }],
3175
+ /**
3176
+ * Scroll Padding Left
3177
+ * @see https://tailwindcss.com/docs/scroll-padding
3178
+ */
3179
+ "scroll-pl": [{
3180
+ "scroll-pl": scaleUnambiguousSpacing()
3181
+ }],
3182
+ /**
3183
+ * Scroll Snap Align
3184
+ * @see https://tailwindcss.com/docs/scroll-snap-align
3185
+ */
3186
+ "snap-align": [{
3187
+ snap: ["start", "end", "center", "align-none"]
3188
+ }],
3189
+ /**
3190
+ * Scroll Snap Stop
3191
+ * @see https://tailwindcss.com/docs/scroll-snap-stop
3192
+ */
3193
+ "snap-stop": [{
3194
+ snap: ["normal", "always"]
3195
+ }],
3196
+ /**
3197
+ * Scroll Snap Type
3198
+ * @see https://tailwindcss.com/docs/scroll-snap-type
3199
+ */
3200
+ "snap-type": [{
3201
+ snap: ["none", "x", "y", "both"]
3202
+ }],
3203
+ /**
3204
+ * Scroll Snap Type Strictness
3205
+ * @see https://tailwindcss.com/docs/scroll-snap-type
3206
+ */
3207
+ "snap-strictness": [{
3208
+ snap: ["mandatory", "proximity"]
3209
+ }],
3210
+ /**
3211
+ * Touch Action
3212
+ * @see https://tailwindcss.com/docs/touch-action
3213
+ */
3214
+ touch: [{
3215
+ touch: ["auto", "none", "manipulation"]
3216
+ }],
3217
+ /**
3218
+ * Touch Action X
3219
+ * @see https://tailwindcss.com/docs/touch-action
3220
+ */
3221
+ "touch-x": [{
3222
+ "touch-pan": ["x", "left", "right"]
3223
+ }],
3224
+ /**
3225
+ * Touch Action Y
3226
+ * @see https://tailwindcss.com/docs/touch-action
3227
+ */
3228
+ "touch-y": [{
3229
+ "touch-pan": ["y", "up", "down"]
3230
+ }],
3231
+ /**
3232
+ * Touch Action Pinch Zoom
3233
+ * @see https://tailwindcss.com/docs/touch-action
3234
+ */
3235
+ "touch-pz": ["touch-pinch-zoom"],
3236
+ /**
3237
+ * User Select
3238
+ * @see https://tailwindcss.com/docs/user-select
3239
+ */
3240
+ select: [{
3241
+ select: ["none", "text", "all", "auto"]
3242
+ }],
3243
+ /**
3244
+ * Will Change
3245
+ * @see https://tailwindcss.com/docs/will-change
3246
+ */
3247
+ "will-change": [{
3248
+ "will-change": ["auto", "scroll", "contents", "transform", isArbitraryVariable, isArbitraryValue]
3249
+ }],
3250
+ // -----------
3251
+ // --- SVG ---
3252
+ // -----------
3253
+ /**
3254
+ * Fill
3255
+ * @see https://tailwindcss.com/docs/fill
3256
+ */
3257
+ fill: [{
3258
+ fill: ["none", ...scaleColor()]
3259
+ }],
3260
+ /**
3261
+ * Stroke Width
3262
+ * @see https://tailwindcss.com/docs/stroke-width
3263
+ */
3264
+ "stroke-w": [{
3265
+ stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]
3266
+ }],
3267
+ /**
3268
+ * Stroke
3269
+ * @see https://tailwindcss.com/docs/stroke
3270
+ */
3271
+ stroke: [{
3272
+ stroke: ["none", ...scaleColor()]
3273
+ }],
3274
+ // ---------------------
3275
+ // --- Accessibility ---
3276
+ // ---------------------
3277
+ /**
3278
+ * Forced Color Adjust
3279
+ * @see https://tailwindcss.com/docs/forced-color-adjust
3280
+ */
3281
+ "forced-color-adjust": [{
3282
+ "forced-color-adjust": ["auto", "none"]
3283
+ }]
3284
+ },
3285
+ conflictingClassGroups: {
3286
+ overflow: ["overflow-x", "overflow-y"],
3287
+ overscroll: ["overscroll-x", "overscroll-y"],
3288
+ inset: ["inset-x", "inset-y", "inset-bs", "inset-be", "start", "end", "top", "right", "bottom", "left"],
3289
+ "inset-x": ["right", "left"],
3290
+ "inset-y": ["top", "bottom"],
3291
+ flex: ["basis", "grow", "shrink"],
3292
+ gap: ["gap-x", "gap-y"],
3293
+ p: ["px", "py", "ps", "pe", "pbs", "pbe", "pt", "pr", "pb", "pl"],
3294
+ px: ["pr", "pl"],
3295
+ py: ["pt", "pb"],
3296
+ m: ["mx", "my", "ms", "me", "mbs", "mbe", "mt", "mr", "mb", "ml"],
3297
+ mx: ["mr", "ml"],
3298
+ my: ["mt", "mb"],
3299
+ size: ["w", "h"],
3300
+ "font-size": ["leading"],
3301
+ "fvn-normal": ["fvn-ordinal", "fvn-slashed-zero", "fvn-figure", "fvn-spacing", "fvn-fraction"],
3302
+ "fvn-ordinal": ["fvn-normal"],
3303
+ "fvn-slashed-zero": ["fvn-normal"],
3304
+ "fvn-figure": ["fvn-normal"],
3305
+ "fvn-spacing": ["fvn-normal"],
3306
+ "fvn-fraction": ["fvn-normal"],
3307
+ "line-clamp": ["display", "overflow"],
3308
+ rounded: ["rounded-s", "rounded-e", "rounded-t", "rounded-r", "rounded-b", "rounded-l", "rounded-ss", "rounded-se", "rounded-ee", "rounded-es", "rounded-tl", "rounded-tr", "rounded-br", "rounded-bl"],
3309
+ "rounded-s": ["rounded-ss", "rounded-es"],
3310
+ "rounded-e": ["rounded-se", "rounded-ee"],
3311
+ "rounded-t": ["rounded-tl", "rounded-tr"],
3312
+ "rounded-r": ["rounded-tr", "rounded-br"],
3313
+ "rounded-b": ["rounded-br", "rounded-bl"],
3314
+ "rounded-l": ["rounded-tl", "rounded-bl"],
3315
+ "border-spacing": ["border-spacing-x", "border-spacing-y"],
3316
+ "border-w": ["border-w-x", "border-w-y", "border-w-s", "border-w-e", "border-w-bs", "border-w-be", "border-w-t", "border-w-r", "border-w-b", "border-w-l"],
3317
+ "border-w-x": ["border-w-r", "border-w-l"],
3318
+ "border-w-y": ["border-w-t", "border-w-b"],
3319
+ "border-color": ["border-color-x", "border-color-y", "border-color-s", "border-color-e", "border-color-bs", "border-color-be", "border-color-t", "border-color-r", "border-color-b", "border-color-l"],
3320
+ "border-color-x": ["border-color-r", "border-color-l"],
3321
+ "border-color-y": ["border-color-t", "border-color-b"],
3322
+ translate: ["translate-x", "translate-y", "translate-none"],
3323
+ "translate-none": ["translate", "translate-x", "translate-y", "translate-z"],
3324
+ "scroll-m": ["scroll-mx", "scroll-my", "scroll-ms", "scroll-me", "scroll-mbs", "scroll-mbe", "scroll-mt", "scroll-mr", "scroll-mb", "scroll-ml"],
3325
+ "scroll-mx": ["scroll-mr", "scroll-ml"],
3326
+ "scroll-my": ["scroll-mt", "scroll-mb"],
3327
+ "scroll-p": ["scroll-px", "scroll-py", "scroll-ps", "scroll-pe", "scroll-pbs", "scroll-pbe", "scroll-pt", "scroll-pr", "scroll-pb", "scroll-pl"],
3328
+ "scroll-px": ["scroll-pr", "scroll-pl"],
3329
+ "scroll-py": ["scroll-pt", "scroll-pb"],
3330
+ touch: ["touch-x", "touch-y", "touch-pz"],
3331
+ "touch-x": ["touch"],
3332
+ "touch-y": ["touch"],
3333
+ "touch-pz": ["touch"]
3334
+ },
3335
+ conflictingClassGroupModifiers: {
3336
+ "font-size": ["leading"]
3337
+ },
3338
+ orderSensitiveModifiers: ["*", "**", "after", "backdrop", "before", "details-content", "file", "first-letter", "first-line", "marker", "placeholder", "selection"]
3339
+ };
3340
+ };
3341
+ const twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
3342
+ function cn(...inputs) {
3343
+ return twMerge(clsx(inputs));
3344
+ }
3345
+ const MessageContext = React.createContext({
3346
+ direction: "in",
3347
+ top: false,
3348
+ group: false
3349
+ });
3350
+ function useMessage() {
3351
+ return React.useContext(MessageContext);
3352
+ }
3353
+ function StatusIcon({ status, className }) {
3354
+ if (status === "sending") {
3355
+ return /* @__PURE__ */ jsxRuntime.jsx(StatusSendingIcon, { className: cn("size-3.5", className) });
3356
+ }
3357
+ if (status === "sent") {
3358
+ return /* @__PURE__ */ jsxRuntime.jsx(StatusSentIcon, { className: cn("size-4", className) });
3359
+ }
3360
+ return /* @__PURE__ */ jsxRuntime.jsx(
3361
+ StatusDoubleCheckIcon,
3362
+ {
3363
+ className: cn("size-4", status === "read" && "text-wa-read", className)
3364
+ }
3365
+ );
3366
+ }
3367
+ function Message({
3368
+ direction,
3369
+ top = false,
3370
+ group = false,
3371
+ avatarUrl,
3372
+ senderName,
3373
+ children,
3374
+ className,
3375
+ mode = "custom",
3376
+ time,
3377
+ status
3378
+ }) {
3379
+ const isOut = direction === "out";
3380
+ const TimeRow = () => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center gap-0.5 text-xs font-medium text-wa-text-secondary", children: [
3381
+ time,
3382
+ isOut && status !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(StatusIcon, { status })
3383
+ ] });
3384
+ const Tail = () => top ? /* @__PURE__ */ jsxRuntime.jsx(
3385
+ "span",
3386
+ {
3387
+ "aria-hidden": "true",
3388
+ className: cn(
3389
+ "pointer-events-none absolute top-0",
3390
+ isOut ? "-right-2 text-wa-bubble-out" : "-left-2 scale-x-[-1] text-wa-bubble-in"
3391
+ ),
3392
+ children: /* @__PURE__ */ jsxRuntime.jsx(BubbleTailIcon, {})
3393
+ }
3394
+ ) : null;
3395
+ const renderNeutral = () => /* @__PURE__ */ jsxRuntime.jsxs(
3396
+ "div",
3397
+ {
3398
+ className: cn(
3399
+ "relative w-fit rounded-wa-bubble px-3 py-1.5 shadow-md",
3400
+ isOut ? "bg-wa-bubble-out text-wa-text-primary" : "bg-wa-bubble-in text-wa-text-primary",
3401
+ top && isOut && "rounded-tr-none",
3402
+ top && !isOut && "rounded-tl-none"
3403
+ ),
3404
+ children: [
3405
+ /* @__PURE__ */ jsxRuntime.jsx(Tail, {}),
3406
+ children,
3407
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute bottom-1 right-2", children: /* @__PURE__ */ jsxRuntime.jsx(TimeRow, {}) })
3408
+ ]
3409
+ }
3410
+ );
3411
+ const renderFree = () => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
3412
+ children,
3413
+ /* @__PURE__ */ jsxRuntime.jsx(
3414
+ "div",
3415
+ {
3416
+ className: cn(
3417
+ "mt-[5px] self-end rounded-full px-1.5 py-0.5",
3418
+ isOut ? "bg-wa-bubble-out" : "bg-wa-bubble-in"
3419
+ ),
3420
+ children: /* @__PURE__ */ jsxRuntime.jsx(TimeRow, {})
3421
+ }
3422
+ )
3423
+ ] });
3424
+ return /* @__PURE__ */ jsxRuntime.jsx(
3425
+ MessageContext.Provider,
3426
+ {
3427
+ value: {
3428
+ direction,
3429
+ top,
3430
+ group,
3431
+ ...senderName !== void 0 ? { senderName } : {},
3432
+ ...avatarUrl !== void 0 ? { avatarUrl } : {},
3433
+ ...time !== void 0 ? { time } : {},
3434
+ ...status !== void 0 ? { status } : {}
3435
+ },
3436
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
3437
+ "div",
3438
+ {
3439
+ className: cn(
3440
+ "@container relative flex px-2",
3441
+ top ? "pt-[10px] pb-0.5" : "pt-[1px] pb-0.5",
3442
+ isOut ? "justify-end" : "justify-start",
3443
+ className
3444
+ ),
3445
+ children: [
3446
+ top && group && !isOut && /* @__PURE__ */ jsxRuntime.jsx(
3447
+ "span",
3448
+ {
3449
+ className: "absolute -left-10 top-2 flex size-8 shrink-0 items-center justify-center overflow-hidden rounded-full bg-wa-avatar",
3450
+ "aria-hidden": "true",
3451
+ children: avatarUrl ? /* @__PURE__ */ jsxRuntime.jsx("img", { src: avatarUrl, alt: "", className: "size-full object-cover" }) : /* @__PURE__ */ jsxRuntime.jsx(AvatarPlaceholderIcon, { className: "size-5 text-wa-text-secondary" })
3452
+ }
3453
+ ),
3454
+ mode === "neutral" && renderNeutral(),
3455
+ mode === "free" && renderFree(),
3456
+ mode === "custom" && children
3457
+ ]
3458
+ }
3459
+ )
3460
+ }
3461
+ );
3462
+ }
3463
+ const SENDER_COLORS = [
3464
+ "#e91e8c",
3465
+ "#9c27b0",
3466
+ "#673ab7",
3467
+ "#2196f3",
3468
+ "#009688",
3469
+ "#4caf50",
3470
+ "#ff9800",
3471
+ "#ff5722",
3472
+ "#00bcd4",
3473
+ "#f06292",
3474
+ "#ef5350",
3475
+ "#26c6da"
3476
+ ];
3477
+ function senderColor(name) {
3478
+ let hash = 0;
3479
+ for (let i = 0; i < name.length; i++) {
3480
+ hash = hash * 31 + name.charCodeAt(i) & 65535;
3481
+ }
3482
+ return SENDER_COLORS[hash % SENDER_COLORS.length] ?? "#2196f3";
3483
+ }
3484
+ function Text({ content, className }) {
3485
+ const { direction, top, group, senderName, time, status } = useMessage();
3486
+ const isOut = direction === "out";
3487
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("max-w-[65cqw] text-sm", className), children: [
3488
+ top && group && !isOut && senderName && /* @__PURE__ */ jsxRuntime.jsx(
3489
+ "p",
3490
+ {
3491
+ className: "mb-0.5 text-xs font-semibold leading-tight",
3492
+ style: { color: senderColor(senderName) },
3493
+ children: senderName
3494
+ }
3495
+ ),
3496
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "whitespace-pre-wrap break-words leading-relaxed", children: [
3497
+ content,
3498
+ /* @__PURE__ */ jsxRuntime.jsxs(
3499
+ "span",
3500
+ {
3501
+ className: "pointer-events-none invisible inline-flex select-none items-end gap-0.5 pl-1 text-xs",
3502
+ "aria-hidden": "true",
3503
+ children: [
3504
+ time,
3505
+ isOut && status && /* @__PURE__ */ jsxRuntime.jsx(StatusIcon, { status })
3506
+ ]
3507
+ }
3508
+ )
3509
+ ] })
3510
+ ] });
3511
+ }
3512
+ function Emoji({ content, time, status, className }) {
3513
+ const { direction } = useMessage();
3514
+ const isOut = direction === "out";
3515
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative inline-block", className), children: [
3516
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "select-none text-5xl leading-none [text-shadow:0_1px_3px_rgba(0,0,0,0.25)]", children: content }),
3517
+ /* @__PURE__ */ jsxRuntime.jsxs(
3518
+ "span",
3519
+ {
3520
+ className: cn(
3521
+ "absolute bottom-0 right-0 flex items-center gap-0.5 rounded-full px-1.5 py-0.5",
3522
+ "bg-black/40 text-[10px] leading-none text-white backdrop-blur-sm font-medium"
3523
+ ),
3524
+ children: [
3525
+ time,
3526
+ isOut && status && /* @__PURE__ */ jsxRuntime.jsx(StatusIcon, { status, className: "text-white" })
3527
+ ]
3528
+ }
3529
+ )
3530
+ ] });
3531
+ }
3532
+ function useAudioPlayer(src) {
3533
+ const audioRef = React.useRef(null);
3534
+ const rafRef = React.useRef(0);
3535
+ const [playing, setPlaying] = React.useState(false);
3536
+ const [currentTime, setCurrentTime] = React.useState(0);
3537
+ const [totalDuration, setTotalDuration] = React.useState(0);
3538
+ React.useEffect(() => {
3539
+ if (!playing) {
3540
+ cancelAnimationFrame(rafRef.current);
3541
+ return;
3542
+ }
3543
+ const tick = () => {
3544
+ const el = audioRef.current;
3545
+ if (el) setCurrentTime(el.currentTime);
3546
+ rafRef.current = requestAnimationFrame(tick);
3547
+ };
3548
+ rafRef.current = requestAnimationFrame(tick);
3549
+ return () => {
3550
+ cancelAnimationFrame(rafRef.current);
3551
+ };
3552
+ }, [playing]);
3553
+ React.useEffect(() => {
3554
+ const el = audioRef.current;
3555
+ if (!el) return;
3556
+ const onMeta = () => {
3557
+ setTotalDuration(el.duration);
3558
+ };
3559
+ const onEnded = () => {
3560
+ setPlaying(false);
3561
+ cancelAnimationFrame(rafRef.current);
3562
+ setCurrentTime(0);
3563
+ el.currentTime = 0;
3564
+ };
3565
+ el.addEventListener("loadedmetadata", onMeta);
3566
+ el.addEventListener("ended", onEnded);
3567
+ return () => {
3568
+ el.removeEventListener("loadedmetadata", onMeta);
3569
+ el.removeEventListener("ended", onEnded);
3570
+ };
3571
+ }, [src]);
3572
+ const toggle = React.useCallback(() => {
3573
+ const el = audioRef.current;
3574
+ if (!el) return;
3575
+ if (playing) {
3576
+ el.pause();
3577
+ setPlaying(false);
3578
+ } else {
3579
+ void el.play().then(() => {
3580
+ setPlaying(true);
3581
+ }).catch(() => {
3582
+ });
3583
+ }
3584
+ }, [playing]);
3585
+ const seek = React.useCallback(
3586
+ (fraction) => {
3587
+ const el = audioRef.current;
3588
+ if (!el || !totalDuration) return;
3589
+ const t = Math.max(0, Math.min(fraction, 1)) * totalDuration;
3590
+ el.currentTime = t;
3591
+ setCurrentTime(t);
3592
+ },
3593
+ [totalDuration]
3594
+ );
3595
+ const progress = totalDuration > 0 ? Math.min(currentTime / totalDuration, 1) : 0;
3596
+ const remaining = totalDuration > 0 ? totalDuration - currentTime : 0;
3597
+ return { audioRef, playing, currentTime, totalDuration, progress, remaining, toggle, seek };
3598
+ }
3599
+ const BAR_COUNT = 44;
3600
+ async function analyzeAudio(url, count = BAR_COUNT) {
3601
+ const ZEROS = () => Array(count).fill(0);
3602
+ if (!url || typeof AudioContext === "undefined") return ZEROS();
3603
+ try {
3604
+ const response = await fetch(url);
3605
+ const arrayBuffer = await response.arrayBuffer();
3606
+ const ctx = new AudioContext();
3607
+ const audioBuffer = await ctx.decodeAudioData(arrayBuffer);
3608
+ await ctx.close();
3609
+ const data = audioBuffer.getChannelData(0);
3610
+ const chunkSize = Math.floor(data.length / count);
3611
+ const rmsValues = [];
3612
+ for (let i = 0; i < count; i++) {
3613
+ const start = i * chunkSize;
3614
+ const end = Math.min(start + chunkSize, data.length);
3615
+ let sum = 0;
3616
+ for (let j = start; j < end; j++) {
3617
+ sum += (data[j] ?? 0) ** 2;
3618
+ }
3619
+ rmsValues.push(Math.sqrt(sum / (end - start)));
3620
+ }
3621
+ const max = Math.max(...rmsValues, 1e-4);
3622
+ return rmsValues.map((v) => Math.round(v / max * 10));
3623
+ } catch {
3624
+ return ZEROS();
3625
+ }
3626
+ }
3627
+ function fmtTime(seconds) {
3628
+ const m = Math.floor(seconds / 60);
3629
+ const s = Math.floor(seconds % 60);
3630
+ return `${String(m)}:${String(s).padStart(2, "0")}`;
3631
+ }
3632
+ function roundRect(ctx, x, y, w, h, r2) {
3633
+ const rr = Math.min(r2, w / 2, h / 2);
3634
+ ctx.beginPath();
3635
+ ctx.moveTo(x + rr, y);
3636
+ ctx.lineTo(x + w - rr, y);
3637
+ ctx.arcTo(x + w, y, x + w, y + rr, rr);
3638
+ ctx.lineTo(x + w, y + h - rr);
3639
+ ctx.arcTo(x + w, y + h, x + w - rr, y + h, rr);
3640
+ ctx.lineTo(x + rr, y + h);
3641
+ ctx.arcTo(x, y + h, x, y + h - rr, rr);
3642
+ ctx.lineTo(x, y + rr);
3643
+ ctx.arcTo(x, y, x + rr, y, rr);
3644
+ ctx.closePath();
3645
+ }
3646
+ function Audio({ src, duration, fileName }) {
3647
+ const { direction } = useMessage();
3648
+ const isOut = direction === "out";
3649
+ const { audioRef, playing, progress, remaining, totalDuration, toggle, seek } = useAudioPlayer(src);
3650
+ const [hasPlayed, setHasPlayed] = React.useState(false);
3651
+ React.useEffect(() => {
3652
+ if (progress > 0) setHasPlayed(true);
3653
+ }, [progress]);
3654
+ const displayDuration = totalDuration > 0 ? fmtTime(remaining) : duration ?? "0:00";
3655
+ const trackColor = isOut ? "bg-wa-waveform-out" : "bg-wa-waveform-in";
3656
+ const trackColorFaint = isOut ? "bg-wa-waveform-out/40" : "bg-wa-waveform-in/40";
3657
+ const dotColor = hasPlayed || isOut ? "bg-wa-waveform-out" : "bg-wa-waveform-in";
3658
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3659
+ /* @__PURE__ */ jsxRuntime.jsx("audio", { ref: audioRef, src, preload: "metadata" }),
3660
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-13.75 w-84 min-w-84 shrink-0 items-center", children: [
3661
+ /* @__PURE__ */ jsxRuntime.jsx(
3662
+ "span",
3663
+ {
3664
+ "aria-hidden": "true",
3665
+ className: "flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-full",
3666
+ children: /* @__PURE__ */ jsxRuntime.jsx(AudioFileIcon, { title: fileName })
3667
+ }
3668
+ ),
3669
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-5.5 shrink-0" }),
3670
+ /* @__PURE__ */ jsxRuntime.jsx(
3671
+ "button",
3672
+ {
3673
+ type: "button",
3674
+ onClick: toggle,
3675
+ "aria-label": playing ? "Pause" : "Play",
3676
+ className: "shrink-0 text-wa-text-secondary transition-opacity hover:opacity-70",
3677
+ children: playing ? /* @__PURE__ */ jsxRuntime.jsx(PauseIcon, {}) : /* @__PURE__ */ jsxRuntime.jsx(PlayIcon, {})
3678
+ }
3679
+ ),
3680
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-6.25 shrink-0" }),
3681
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative h-6 flex-1", children: [
3682
+ /* @__PURE__ */ jsxRuntime.jsx(
3683
+ "div",
3684
+ {
3685
+ className: cn(
3686
+ "pointer-events-none absolute left-0 right-0 top-1/2 h-0.5 -translate-y-1/2 rounded-full",
3687
+ trackColorFaint
3688
+ )
3689
+ }
3690
+ ),
3691
+ /* @__PURE__ */ jsxRuntime.jsx(
3692
+ "div",
3693
+ {
3694
+ className: cn(
3695
+ "pointer-events-none absolute left-0 top-1/2 h-0.5 -translate-y-1/2 rounded-full",
3696
+ trackColor
3697
+ ),
3698
+ style: { width: `${progress * 100}%` }
3699
+ }
3700
+ ),
3701
+ /* @__PURE__ */ jsxRuntime.jsx(
3702
+ "span",
3703
+ {
3704
+ "aria-hidden": "true",
3705
+ className: cn(
3706
+ "pointer-events-none absolute top-1/2 size-3 -translate-x-1/2 -translate-y-1/2 rounded-full",
3707
+ dotColor
3708
+ ),
3709
+ style: { left: `${progress * 100}%` }
3710
+ }
3711
+ ),
3712
+ /* @__PURE__ */ jsxRuntime.jsx(
3713
+ "input",
3714
+ {
3715
+ type: "range",
3716
+ min: 0,
3717
+ max: 1e3,
3718
+ step: 1,
3719
+ value: Math.round(progress * 1e3),
3720
+ onChange: (e) => {
3721
+ seek(Number(e.target.value) / 1e3);
3722
+ },
3723
+ className: "absolute inset-0 h-full w-full cursor-pointer opacity-0",
3724
+ "aria-label": "Seek"
3725
+ }
3726
+ )
3727
+ ] })
3728
+ ] }),
3729
+ /* @__PURE__ */ jsxRuntime.jsx(
3730
+ "span",
3731
+ {
3732
+ className: "pointer-events-none absolute bottom-1 left-28 text-xs font-medium text-wa-text-secondary",
3733
+ "aria-hidden": "true",
3734
+ children: displayDuration
3735
+ }
3736
+ )
3737
+ ] });
3738
+ }
3739
+ const CANVAS_WIDTH = 200;
3740
+ const CANVAS_HEIGHT = 30;
3741
+ const BAR_MAX_HEIGHT = 26;
3742
+ const BAR_WIDTH = 3;
3743
+ const SLOT_WIDTH = CANVAS_WIDTH / BAR_COUNT;
3744
+ function readCssVar(name) {
3745
+ return getComputedStyle(document.documentElement).getPropertyValue(name).trim();
3746
+ }
3747
+ function Waveform({ bars, progress, isOut, hasPlayed, seek }) {
3748
+ const canvasRef = React.useRef(null);
3749
+ React.useEffect(() => {
3750
+ const canvas = canvasRef.current;
3751
+ if (!canvas) return;
3752
+ const ctx = canvas.getContext("2d");
3753
+ if (!ctx) return;
3754
+ ctx.clearRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT);
3755
+ const colorPlayed = isOut ? readCssVar("--color-wa-waveform-out") : readCssVar("--color-wa-waveform-in");
3756
+ const colorUnplayed = isOut ? readCssVar("--color-wa-waveform-out-faint") : readCssVar("--color-wa-waveform-in-faint");
3757
+ bars.forEach((amplitude, i) => {
3758
+ const level = Math.max(1, amplitude);
3759
+ const barHeight = Math.round(level / 10 * BAR_MAX_HEIGHT);
3760
+ const x = i * SLOT_WIDTH + (SLOT_WIDTH - BAR_WIDTH) / 2;
3761
+ const y = (CANVAS_HEIGHT - barHeight) / 2;
3762
+ ctx.fillStyle = i / BAR_COUNT < progress ? colorPlayed : colorUnplayed;
3763
+ roundRect(ctx, x, y, BAR_WIDTH, barHeight, BAR_WIDTH / 2);
3764
+ ctx.fill();
3765
+ });
3766
+ }, [bars, progress, isOut]);
3767
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative h-7.5 w-50 shrink-0", children: [
3768
+ /* @__PURE__ */ jsxRuntime.jsx(
3769
+ "canvas",
3770
+ {
3771
+ ref: canvasRef,
3772
+ width: CANVAS_WIDTH,
3773
+ height: CANVAS_HEIGHT,
3774
+ "aria-hidden": "true",
3775
+ className: "h-7.5 w-50"
3776
+ }
3777
+ ),
3778
+ /* @__PURE__ */ jsxRuntime.jsx(
3779
+ "span",
3780
+ {
3781
+ "aria-hidden": "true",
3782
+ className: cn(
3783
+ "pointer-events-none absolute top-1/2 size-3 -translate-x-1/2 -translate-y-1/2 rounded-full",
3784
+ hasPlayed || isOut ? "bg-wa-waveform-out" : "bg-wa-waveform-in"
3785
+ ),
3786
+ style: { left: `${progress * 100}%` }
3787
+ }
3788
+ ),
3789
+ /* @__PURE__ */ jsxRuntime.jsx(
3790
+ "input",
3791
+ {
3792
+ type: "range",
3793
+ min: 0,
3794
+ max: 1e3,
3795
+ step: 1,
3796
+ value: Math.round(progress * 1e3),
3797
+ onChange: (e) => {
3798
+ seek(Number(e.target.value) / 1e3);
3799
+ },
3800
+ className: "absolute inset-0 h-full w-full cursor-pointer opacity-0",
3801
+ "aria-label": "Seek"
3802
+ }
3803
+ )
3804
+ ] });
3805
+ }
3806
+ function Voice({ src, duration, avatarUrl: avatarProp }) {
3807
+ const { direction, avatarUrl: ctxAvatar } = useMessage();
3808
+ const isOut = direction === "out";
3809
+ const avatar = avatarProp ?? ctxAvatar;
3810
+ const { audioRef, playing, progress, remaining, totalDuration, toggle, seek } = useAudioPlayer(src);
3811
+ const [bars, setBars] = React.useState(Array(BAR_COUNT).fill(0));
3812
+ const [hasPlayed, setHasPlayed] = React.useState(false);
3813
+ React.useEffect(() => {
3814
+ if (progress > 0) setHasPlayed(true);
3815
+ }, [progress]);
3816
+ React.useEffect(() => {
3817
+ setBars(Array(BAR_COUNT).fill(0));
3818
+ if (!src) return;
3819
+ analyzeAudio(src, BAR_COUNT).then((result) => {
3820
+ setBars(result);
3821
+ }).catch(() => {
3822
+ });
3823
+ }, [src]);
3824
+ const displayDuration = totalDuration > 0 ? fmtTime(remaining) : duration ?? "0:00";
3825
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3826
+ /* @__PURE__ */ jsxRuntime.jsx("audio", { ref: audioRef, src, preload: "metadata" }),
3827
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-13.75 w-[336px] min-w-[336px] shrink-0 items-center", children: [
3828
+ /* @__PURE__ */ jsxRuntime.jsx(
3829
+ "span",
3830
+ {
3831
+ "aria-hidden": "true",
3832
+ className: "flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-full bg-wa-avatar",
3833
+ children: avatar ? /* @__PURE__ */ jsxRuntime.jsx("img", { src: avatar, alt: "", className: "size-full object-cover" }) : /* @__PURE__ */ jsxRuntime.jsx(AvatarPlaceholderIcon, { className: "size-6 text-wa-text-secondary" })
3834
+ }
3835
+ ),
3836
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-5.5 shrink-0" }),
3837
+ /* @__PURE__ */ jsxRuntime.jsx(
3838
+ "button",
3839
+ {
3840
+ type: "button",
3841
+ onClick: toggle,
3842
+ "aria-label": playing ? "Pause" : "Play",
3843
+ className: "shrink-0 text-wa-text-secondary transition-opacity hover:opacity-70",
3844
+ children: playing ? /* @__PURE__ */ jsxRuntime.jsx(PauseIcon, {}) : /* @__PURE__ */ jsxRuntime.jsx(PlayIcon, {})
3845
+ }
3846
+ ),
3847
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-6.25 shrink-0" }),
3848
+ src ? /* @__PURE__ */ jsxRuntime.jsx(
3849
+ Waveform,
3850
+ {
3851
+ bars,
3852
+ progress,
3853
+ isOut,
3854
+ hasPlayed,
3855
+ seek
3856
+ }
3857
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1 text-xs text-wa-text-secondary", children: "No audio source" })
3858
+ ] }),
3859
+ /* @__PURE__ */ jsxRuntime.jsx(
3860
+ "span",
3861
+ {
3862
+ className: "pointer-events-none absolute bottom-1 left-28 text-xs font-medium text-wa-text-secondary",
3863
+ "aria-hidden": "true",
3864
+ children: displayDuration
3865
+ }
3866
+ )
3867
+ ] });
3868
+ }
3869
+ function Sticker({ src, alt = "", className }) {
3870
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("relative inline-block", className), children: /* @__PURE__ */ jsxRuntime.jsx(
3871
+ "img",
3872
+ {
3873
+ src,
3874
+ alt,
3875
+ className: "size-48 select-none object-contain drop-shadow-sm",
3876
+ draggable: false
3877
+ }
3878
+ ) });
3879
+ }
3880
+ function Video({ className }) {
3881
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-[336px]", className) });
3882
+ }
3883
+ function File({ className }) {
3884
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-[336px]", className) });
3885
+ }
3886
+ function Location({ className }) {
3887
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-[336px]", className), children: "Location" });
3888
+ }
3889
+ function Contact({ className }) {
3890
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-[336px]", className) });
3891
+ }
3892
+ function Poll({ className }) {
3893
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-[336px]", className) });
3894
+ }
3895
+ function Event({ className }) {
3896
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-[336px]", className) });
3897
+ }
3898
+ function Gif({ className }) {
3899
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-[336px]", className) });
3900
+ }
3901
+ function Image({ src, alt = "", className }) {
3902
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-[336px]", className), children: /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt, className: "w-full rounded-wa-bubble object-cover" }) });
3903
+ }
3904
+ let _counter = 0;
3905
+ function uid() {
3906
+ return `chat-${++_counter}`;
3907
+ }
3908
+ function nowTime() {
3909
+ const d = /* @__PURE__ */ new Date();
3910
+ return `${d.getHours().toString().padStart(2, "0")}:${d.getMinutes().toString().padStart(2, "0")}`;
3911
+ }
3912
+ const ChatReplyContext = React.createContext({
3913
+ messages: [],
3914
+ sendMessage: () => {
3915
+ },
3916
+ addMessage: () => {
3917
+ },
3918
+ provided: false
3919
+ });
3920
+ function getInitials(name) {
3921
+ return name.split(" ").slice(0, 2).map((w) => {
3922
+ var _a;
3923
+ return ((_a = w[0]) == null ? void 0 : _a.toUpperCase()) ?? "";
3924
+ }).join("");
3925
+ }
3926
+ function ChatHeader({ className, name, avatarUrl, subtitle }) {
3927
+ const initials = getInitials(name);
3928
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3929
+ "div",
3930
+ {
3931
+ className: cn(
3932
+ "flex items-center gap-3 bg-wa-header px-4 py-3 shadow-[0_1px_4px_rgba(0,0,0,0.15)]",
3933
+ className
3934
+ ),
3935
+ children: [
3936
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0", children: avatarUrl ? /* @__PURE__ */ jsxRuntime.jsx("img", { src: avatarUrl, alt: name, className: "size-10 rounded-full object-cover" }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex size-10 items-center justify-center rounded-full bg-wa-avatar text-sm font-medium text-wa-text-primary", children: initials }) }),
3937
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-1 flex-col", children: [
3938
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-[15px] font-medium text-wa-text-primary", children: name }),
3939
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-xs text-wa-text-secondary", children: subtitle })
3940
+ ] })
3941
+ ]
3942
+ }
3943
+ );
3944
+ }
3945
+ function ActionButton({
3946
+ label,
3947
+ onClick,
3948
+ children
3949
+ }) {
3950
+ return /* @__PURE__ */ jsxRuntime.jsx(
3951
+ "button",
3952
+ {
3953
+ type: "button",
3954
+ onClick,
3955
+ "aria-label": label,
3956
+ className: "inline-flex size-8 shrink-0 items-center justify-center rounded-full text-wa-icon transition-colors hover:text-wa-text-primary",
3957
+ children
3958
+ }
3959
+ );
3960
+ }
3961
+ function InputfieldActions({
3962
+ className,
3963
+ hasValue = false,
3964
+ textareaSlot,
3965
+ onEmojiClick,
3966
+ onAttachClick,
3967
+ onCameraClick: _onCameraClick,
3968
+ onMicClick,
3969
+ onSendClick,
3970
+ sendDisabled = false
3971
+ }) {
3972
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex w-full items-end", className), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-10.5 flex-1 items-center gap-1 rounded-full bg-wa-input px-3", children: [
3973
+ /* @__PURE__ */ jsxRuntime.jsx(ActionButton, { label: "Attachments", ...onAttachClick ? { onClick: onAttachClick } : {}, children: /* @__PURE__ */ jsxRuntime.jsx(AttachIcon, { className: "size-6" }) }),
3974
+ /* @__PURE__ */ jsxRuntime.jsx(ActionButton, { label: "Sticker", ...onEmojiClick ? { onClick: onEmojiClick } : {}, children: /* @__PURE__ */ jsxRuntime.jsx(StickerIcon, { className: "size-6" }) }),
3975
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-1 items-center px-2", children: textareaSlot }),
3976
+ hasValue ? /* @__PURE__ */ jsxRuntime.jsx(
3977
+ "button",
3978
+ {
3979
+ type: "button",
3980
+ onClick: onSendClick,
3981
+ disabled: sendDisabled,
3982
+ "aria-label": "Send message",
3983
+ className: "inline-flex size-8 shrink-0 items-center justify-center rounded-full bg-wa-send text-white transition-colors hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-50",
3984
+ children: /* @__PURE__ */ jsxRuntime.jsx(SendIcon, { className: "ml-0.5 size-4" })
3985
+ }
3986
+ ) : /* @__PURE__ */ jsxRuntime.jsxs(
3987
+ "button",
3988
+ {
3989
+ type: "button",
3990
+ onClick: onMicClick,
3991
+ "aria-label": "Record voice message",
3992
+ className: "group inline-flex size-8 shrink-0 items-center justify-center rounded-full text-wa-icon transition-colors hover:bg-wa-teal hover:text-black",
3993
+ children: [
3994
+ /* @__PURE__ */ jsxRuntime.jsx(MicOutlineIcon, { className: "size-5 group-hover:hidden" }),
3995
+ /* @__PURE__ */ jsxRuntime.jsx(MicFillIcon, { className: "hidden size-5 group-hover:block" })
3996
+ ]
3997
+ }
3998
+ )
3999
+ ] }) });
4000
+ }
4001
+ function Inputfield({
4002
+ className,
4003
+ textareaClassName,
4004
+ actionsClassName,
4005
+ value,
4006
+ defaultValue,
4007
+ locked = false,
4008
+ onValueChange,
4009
+ onSend,
4010
+ onEmojiClick,
4011
+ onAttachClick,
4012
+ onCameraClick,
4013
+ onMicClick,
4014
+ onChange,
4015
+ onKeyDown,
4016
+ placeholder = "Enter a message.",
4017
+ ...props
4018
+ }) {
4019
+ const [internalValue, setInternalValue] = React.useState(defaultValue ?? "");
4020
+ const isControlled = typeof value === "string";
4021
+ const currentValue = isControlled ? value : internalValue;
4022
+ const hasValue = currentValue.trim().length > 0;
4023
+ function updateValue(next) {
4024
+ if (!isControlled) {
4025
+ setInternalValue(next);
4026
+ }
4027
+ onValueChange == null ? void 0 : onValueChange(next);
4028
+ }
4029
+ function handleChange(event) {
4030
+ updateValue(event.target.value);
4031
+ onChange == null ? void 0 : onChange(event);
4032
+ }
4033
+ function sendCurrentValue() {
4034
+ if (locked) return;
4035
+ const trimmedValue = currentValue.trim();
4036
+ if (!trimmedValue) {
4037
+ return;
4038
+ }
4039
+ onSend == null ? void 0 : onSend(trimmedValue);
4040
+ updateValue("");
4041
+ }
4042
+ function handleKeyDown(event) {
4043
+ if (event.key === "Enter" && !event.shiftKey) {
4044
+ event.preventDefault();
4045
+ if (!locked) sendCurrentValue();
4046
+ }
4047
+ onKeyDown == null ? void 0 : onKeyDown(event);
4048
+ }
4049
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("px-3 pb-3 pt-1", className), children: /* @__PURE__ */ jsxRuntime.jsx(
4050
+ InputfieldActions,
4051
+ {
4052
+ hasValue,
4053
+ onSendClick: sendCurrentValue,
4054
+ ...onEmojiClick ? { onEmojiClick } : {},
4055
+ ...onAttachClick ? { onAttachClick } : {},
4056
+ ...onCameraClick ? { onCameraClick } : {},
4057
+ ...onMicClick ? { onMicClick } : {},
4058
+ sendDisabled: locked,
4059
+ ...actionsClassName ? { className: actionsClassName } : {},
4060
+ textareaSlot: /* @__PURE__ */ jsxRuntime.jsx(
4061
+ "textarea",
4062
+ {
4063
+ ...props,
4064
+ value: currentValue,
4065
+ onChange: handleChange,
4066
+ onKeyDown: handleKeyDown,
4067
+ placeholder,
4068
+ rows: 1,
4069
+ className: cn(
4070
+ "min-h-5 w-full resize-none bg-transparent px-1 py-0 text-sm text-wa-text-body outline-none placeholder:font-medium placeholder:text-wa-icon/70",
4071
+ textareaClassName
4072
+ )
4073
+ }
4074
+ )
4075
+ }
4076
+ ) });
4077
+ }
4078
+ function toDate(value) {
4079
+ if (!value) return null;
4080
+ const parsed = value instanceof Date ? value : new Date(value);
4081
+ if (Number.isNaN(parsed.getTime())) return null;
4082
+ return parsed;
4083
+ }
4084
+ function isSameCalendarDay(a, b) {
4085
+ return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
4086
+ }
4087
+ function groupMessagesByDay(messages) {
4088
+ return messages.reduce((groups, message) => {
4089
+ const lastGroup = groups[groups.length - 1];
4090
+ const currentDate = toDate(message.timestamp);
4091
+ const lastMessage = lastGroup == null ? void 0 : lastGroup.messages[lastGroup.messages.length - 1];
4092
+ const lastDate = toDate(lastMessage == null ? void 0 : lastMessage.timestamp);
4093
+ const isSameDayAsLast = currentDate && lastDate ? isSameCalendarDay(currentDate, lastDate) : true;
4094
+ if (lastGroup && lastGroup.senderId === message.senderId && isSameDayAsLast) {
4095
+ lastGroup.messages.push(message);
4096
+ return groups;
4097
+ }
4098
+ groups.push({ senderId: message.senderId, dayDate: currentDate, messages: [message] });
4099
+ return groups;
4100
+ }, []);
4101
+ }
4102
+ function getDisplayDate(date) {
4103
+ if (!date) return (/* @__PURE__ */ new Date()).toLocaleDateString();
4104
+ const d = new Date(date);
4105
+ const now = /* @__PURE__ */ new Date();
4106
+ const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
4107
+ const msgDay = new Date(d.getFullYear(), d.getMonth(), d.getDate());
4108
+ const diffDays = Math.round((today.getTime() - msgDay.getTime()) / 864e5);
4109
+ if (diffDays === 0) return "Today";
4110
+ if (diffDays === 1) return "Yesterday";
4111
+ if (diffDays < 7) return d.toLocaleDateString("en-US", { weekday: "long" });
4112
+ const yy = d.getFullYear() % 100;
4113
+ return `${d.getDate()}.${d.getMonth() + 1}.${yy}`;
4114
+ }
4115
+ function DayDivider({ className, date }) {
4116
+ const displayDate = getDisplayDate(date.toISOString());
4117
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex justify-center py-3", className), children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-wa-divider bg-wa-divider px-3 py-1 text-[13px] font-medium text-wa-text-secondary shadow-sm", children: displayDate }) });
4118
+ }
4119
+ function MessageList({ className, messages }) {
4120
+ const dayGroups = groupMessagesByDay(messages);
4121
+ const content = dayGroups.map((group, index) => {
4122
+ const previousGroup = dayGroups[index - 1];
4123
+ const dayDate = group.dayDate;
4124
+ const shouldRenderDivider = dayDate !== null && (!(previousGroup == null ? void 0 : previousGroup.dayDate) || !isSameCalendarDay(dayDate, previousGroup.dayDate));
4125
+ return /* @__PURE__ */ jsxRuntime.jsxs(React.Fragment, { children: [
4126
+ shouldRenderDivider && dayDate !== null && /* @__PURE__ */ jsxRuntime.jsx(DayDivider, { date: dayDate }),
4127
+ group.messages.map((message, msgIndex) => {
4128
+ const node = msgIndex === 0 ? React.cloneElement(message.node, {
4129
+ top: true
4130
+ }) : message.node;
4131
+ return /* @__PURE__ */ jsxRuntime.jsx(React.Fragment, { children: node }, message.id ?? `${message.senderId}-${msgIndex}`);
4132
+ })
4133
+ ] }, `${group.senderId}-${index}`);
4134
+ });
4135
+ if (className) {
4136
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(className), children: content });
4137
+ }
4138
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: content });
4139
+ }
4140
+ const backgroundUrl = new URL("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhwAAAPACAMAAABJq1CuAAAASFBMVEUAAAD////////////////////////////////////////////////////////////////////////////////////////////neHiwAAAAGHRSTlMAb+//v0Agz5/fYI9QoBCAcJCvMMB/sF+uI/OfAAFcAUlEQVR4AcRa4ZKlrq9k0xAIIiBcd9//TW+tR0pFdcbd/9avv8wpdRCSppME1bfwg6CNOoAtjHqEgdueFmH1T+AFw8PQotfHEJQaKapLpLaWQEhxWzVldcC0X3O00pkEbvuZ3qwBQ/s/PxQCIC6H01w55CIApEzhpTWL/J5w9YNeR98GiMiqWPWnMAJ9JkIUieoRCS42bhCrf4Q4Qfw9QX2by+IEvhmDFreyhq7tWrUo/LBmI7R/bTe8FvWIM+ma56zL5syLRpp28yUSohoAkJ587QYQpyb6U+MPEHNt+PTllIRXblT178AC17ux91GGUcrJrXcobkrRVh3OtnDI7T5s/85xZ+KMNz6MQgSQ7T23bne73HS5xvsRssusbhFQFf3ftd4Uud01psavZGNqT0Rj9k7WX/ItCEowM0lV/xTpRjw82uUoKPaezYzEGpr7VZ9Cabt6dX+UL8gRmW8VrvjTvWiys227f8UuCB4iN8Mrq+9kKzJ8l0ZY7ZJXAMjqIQVzOfRONmaNRdh4o6O5WKa2ftlZy3OcBGjy/A/B+ko8WGT7PVrt1S00dbJhrjKv7eqIzl0dIRxdWAYA3Wic2KOzQ3YCgMrkWT2jCSOTVregqQnbCR719+09CooWQJmQpmIJAPLTVmGBzsGEcXsuXv0HWQ2jlEabqnkRJDnnP+VRpk483mXBBjru9G6KV9Ks423G1cXZKO4ckWTyeRQM17rv4mNO+gytO+XqYbXK4HtV+XlcyTLJ7fGaYE+rJQqboc36q2DeUpkeHvx7Ih4543Us+XGiqHGD/1PxqE+ZTpyd5968bX22XseudU6+2a+HpjbkAN5E4OOddWGcYON1ZBz8Q076hLUO0/Yh5SVlEO5VRR7KMhWHs0nmXc4lwirOWjuj1AhzS46JFo2zshDyHRglsqW4nwER5m+LB2TmzfuQ+pTDCiR2wtzVrx0C8sdQMM1+HZjErMZMu4HnhS1+u3CpHVV31cQbGNjs4J9swxH5QVXifSlqBOmsg2PcBCGoSrBaMKso+pocq7RFOPiX5Ggp9cbvlS1qAn+bXSPI+crM3hHcg5GdsKq0X3JcwuAhK70ShiqYVsPRdMU5PSRHB2NOmBUj9V2Vp3z1PbyAsrpHRbhyV6uyDEz/fHmQDT7k9qJbBE/IbZedzNO0VwBu73sBA7Nlue3CO5LxKFhA0+Pb5eeyY/pWwEk2+u20ZKoVblG1q3l5DUj37oShSOw6c/9zcDfZTgqQVZEXqpLbFX2u8fjQ4mFk5cCtgF2HOo3YGkEj9CcJfoco4rPInr5ZKf8VyaJP+wK+Bu99/U4CJz+P5nP2i7qqWirxEylYY3xRacP1tcVfIs5a9A9+SjLiqdWF+KWqxGC6BOqsN1Wkdnta68394trVDmZAUGqCPxdznUMHKyK2JHNU5aOqa3IDiXrEjN+YX6owStJdgla6ttcDNED5VQe0xEMIm/6+76edfupsFKQu3p+367mB/oPQBmXSalBKnYSjknAv+OL63xnxwlHCKqPu92WcS/F9xU/WOVdsa5ysqNwnEdD8BTcmVnV8y44s6LvfnOL3yZXjuyYdbOyE66+gyXxKyNtpWBAfFty3unpVWZM840m3FFDBnKO6IeGT8JRVCRzimmxoe6KgY09WxcB6p6QWVnbOYw0AejAfGSvY7r1Gy/RuJZODTynlYKL6DzGKh+XDNv4rGPjD3zMiJrJ9tn8nWKWpSgIrNaHpnRKJfXj41RZy0EHz8SGTU3WZE2Pqnlqum09gmQoaA5Gb89ZaMZmQNCCeV3kQ/vPGOd825KJ3BDRYZ9R/hFjIDCTct0zeo/9/creVn/Fw32mgx+o1lttrLHBod5TBEGA6bsQTtyiqES6EmYTX3LQPYQ4ftSD3EZWM1MqAXREytPAbvYbktQ6T+sd78q4hZwYCuWx4MYDJmiADf69P6/l/R4xcGkPF81fKEWcr1vG3ySHu4Yw+Qcyh1dUfvnJr0qe18mRYM+85laEPkhwuuPGp3pJgSQEC0sWpdMaUBbNimtZcWS8J8yI5sazvmJEOKcXfHtu29cYub2J9rmaXCPYNt8uiM+G8w7wP5pJN/i5qmUIQl70xn28xHD/mHJVIu/KJwfx8lPL82YhfbniBlBzaO1sD/fBpR0nL/bWBHk4lAeQwPxsvpzO3cxJD0nSqrw5ZQES8BsMWrkYQIfXcWDWD8ptjEK7B58EVK+ukDfLaeTeHDQjq08vGRn/ybE6+O2uouRDyYf9rrNCnAfRdudQztI6guQvIXYeV18aIpvMZXd+xU6uEn2FaieeLAGjbqCIoFcN61tua9NXsvzcwXUmwnz8ThsdTcePWjMR17ix24ZCb6ior2272bmpMd6deW0tl9CMj0uC0EBaQ2CJtbE1+4Ya7Pi/swbJfXzTDZ8zSnVIeFTvOBD0FZq5hkp5fQonN2JmtZVfxxM4SVbnxqW4mLaDJjw/BNkMCG410HZsgvPFTm9aCiNCfM739Wa9b4t23PkDRUjDfNWhhLbUtefKzxy+1CRf7qxL5qvQakVtH7hppZYR2U/Khcjx0d9lCNEHHgzibp3jd0m3jlqykxmPdVaT1/VbU45dw5thf8PBt2L7I1vHKrdael9ol1eziQ6XavAHKX32BU4nyruKcmlxs8JiMhjiP8J0aacJ8c3MqxeWobhQNcEnkcCX1/PF9r21WSuOjNfcfeIZj+6Mzmy/6UIj8oucQFUj4owZ0KWjiNv1YxzO9Z2izZCNWhvA57J/hcVN/nnvB5slh5ibRyQANocWBjbHxej5a1n4SsnpCaxek58ZDb88GCEFz1x3phKPfKyPmdgJo7mZ3Frz4lKHULqGuA59bfEED2sSr7z74kzU62RJ0vghOv3pyqAFS94/o25BgL706gPh8mP4anCZNa+g7LEx+XlrLt0Mp6KAeofWaEKlH9BnHdVnlwaeJ9EjIyiB1KfzjME1repw9HQdzeXBUW3C8/Pp5BOwQmin5MkGPlmp3iPEDo9BKmU5ZO1y3vYcWDM7S+x5Gw/VKPcqlH/+fue/fchT3naVVtmwZYhv4Zub93/SeTUiEQRA6n91zrv/ZH9OTJliWpVKplPP9UaPhtIum7A0uiJ+q6+1jm5YpwQasmuUoLzdKQT6s5DfrfuwB28OSEP5JYPm4F8BMo+fqCBj2n2debDNifjqsjgOq/Taa5WFYR0IxL/mv1rKFTmwP3F4Ad7xS7Id58Cfj6ApcPjUiMXGX8wjDuQMOu4c/uWFnDNbO2uu+/mF29bgXwLINXcuVo4V547n1muDFYf1gtL1k3uQ3lMy736LAfm8dleLxIVP/JpFvQPSLxznOoCf5cDGevLIKPv9qNB5FRBSPIiYDUGGh4XIoZC9lOvlzZjxLPGHmaYTrH7YxI9g7wW1eMbb3mPFyUqjpTv9bQ4dDe6oY1XpdCf5JBHfpVeuM8xH0pi6Zf7cFWU+03ceEchRvTuEEC86oFjZyjBTYa0jGwf8xHLwd78xslPw0PqW5DXcK2o9x1hk+fjmRAG2w+m7NgD+2vzzXPgh4ufyXO+UdmyYTepuajO/4Xrcd2TrZ9uceQH8ydzc5KxTs8cSxsUPrks5sV2GaWCdHTKe3p6YiAzClw4tgwqC2sTcOFlC234TNDvMYM+f/uRaMbH0ZLak4/Flf/slB+iY2ZZsdpqQO+1Kx1vC6ubKPIBTLOOx16jms/19sv6YtbaOYv0OXR2WxfJnttAY4AUVvXqN3FE1g9sYxi3j0H3xoeTlaLmWC5H+j5jds61C+7ZZN8G2s42/r2PSnw9/tTaXWIcInl4pPW2wINwFEBKCSd6BWPt6K4M7qz21TBc+plkiQ4yczU5/gtgefxF9gteqF7W8CiXNj7Fowiki7+0hp8COGc+PIC16Vw+Pt/Udto23PpcgOXljFphO6sNnDrPC5OkoLgXIA+m23bh5KjLH4bLXSHpZPGPXMeKbwMonpVV6RMBU7Qmi39TgcyzbP3MTf1HKHGyC53eIBt8VCjLAi3wlT3viVjGoCt9X7Kki7yq6LG8AofcldGgZunjF1ceejuAjCM/hQ56gXDxDScZ4XMS/HhQtKaxzWFafLHXULRLCmsvuQ4QY1ifgor5xGCLYl3sFtpEOo10k1eivlgKG57phC3tlGT4gp1T4AzutBs5PzliHnd5c1ufaaSQAQet/QCb4gvDmxUwuNTZ1sEgE3JgfIfGAdPyjq612wX6VdKiiwcwOPccP06wHRhGTEqUnY4XiBN28c7cWQP5eNQ58uO7UCie/QY8C0oY4QAJArbGTgR0xf9kbDcpC84W3ciH11gFR+QHaTQFfo+TLDMh3iuMk98iukNv/0jz6zUfBXqwhtV9oqunbOfpU2x9rDiZGEziS5jdfvGNMEf51UZx3IQHzUNusF4yUiZ0F7TygGqrZYMZsYu/zhvL3y7xo3X14o27CrIi9MOsSeluiSc5Iw++KAeM08ovAJLEShmzvJ2xw14ZY7ft2ROeCv9ZIL7r5HOiuC7Nq6nXuwbdgkH3ikBnqmaH/uecec3Xnj1QFqD31Fti938xsxavuZ7+4dkkjC5qb2FB72EGPPKjPD+tW4nz6ddHEtO0ijuRwBmlJuTZmLNBfmnSge5RUVfFKej13cwQQiTVUxB9yt4zgCGK1X2eR67IfkfdYIyDtAe5j9Eq+1iDyNTXbxuT3KzFBY4P55c9k7yNzSHazHTSAn8EelQop6yTYxLzuZ2DzxjDiNj1co+PO6zF3fg9WAwyd2dYUan94rXceRnt9vJ/vA08o6ekw3kmwHesc36yQdo8E5Cvz7hWi7dNamkL6pXAx8XiFjEJZFU+p4SA/Qer4JQG6KUyANwH5W++BoXoMpVxsrCwxGDBGaEuyE4O2PFZf1SOzZ3VPYAD8RH68DXZxfl7kD4rq2zZ/q8smJ423COEdAhqNE3lFW2Nou4LFEo5mwbXHstsXq9zmd4PT/3zWht5cZhJOU5Gf2vt4IWPHx5jq6IGEa35bPNG0ScneMntnLCiJ8HUelPmkPvWEcHoPeNUZT4QgIt0HFleg4+5z0tRj35zcdTh6gSYA+22EVozR7gmKm/ceFvYhdPJJwA4/UdYNUFuWeLPSfH4yf8UQT2swRNKWZ2eQRGYhKKt7+3OvGYSzfYBsefo9pFFi1V5V30fWJV+eckhxzzpszpD+T1ciurkQYHy54Za65CcBdWNdD7vBWKGPTq7Qgt6ffPQIgQQgokMY6BkwfU0m7Ru+VaWtYx2e1QZQvrhVdrQacaRw5DZNY4MwK580Wa+FzBJSKz930NgCfVudggJQA311freahJ6exxWCekwoJuJmUxCxw/hB40gtWAZ4fpK4HgJTQWMdkpGsGzm0Yx8+6EFIMYPKv1s0vFlc4iksneKatpVo2R39uJIUopnkH4c9H5JH7x+Z/0r+p3iGhIROmYJPzrGXcjFpFTygH1Jk0TdWqnZ6Qv7IVj0yod1AVjMHN3Yi1s5/Oo2ozd631+RpvuRXvutvO/rpxsFAUVDuVNZcPcHzkaBgT+zoRQJi80bCzX38Pr1gDhpvo/WROTeNb4U/HTUus5ccyxgvNtgb5S4+NyI5+N64QXHEP3IYVjfi0zLT5B7dWSoRvkOjf/tx9UjMwQrYRrNjuhcCVHcRbJZvWquZ0C1ow0mjcso3weR/fd+UY1/W78+VLX/xZ7axYN3lCat/5qQnqu7PJX+K6AWkXhfCQBu4SvwrzfANcjAGHXUI2LNDqBw0BCDHN68ow3BTjJABk/hxpZiP0LPgU82hPEpV87I+aHtJc4D9axw9CPmYBWjCcTZu3hFtBx6/Ek3iznDjJR/6afYws8ldCUutp7+A8PzLWGXHph3Mi08UaMkWLiHuHq3USrB3GMLogEmL9jPfODtsfKWArIpzIjA4IYz615OBOuUVl43bYbThCA7hLYkus+LZyNXwQGwk+dzlpzWJrk/zs2U3J81oKlmKjXPhJTDw2P7Alf6naX3sHe0cAMHQ/JPmbtua8j3tfpbo5TWSxm3mUM/P4AQXcSObcCPZOtHdTvREkpqOQfASbRBMjcU6iWGT2+3uQIZOEIx03t+QWvQOlD/j/TTsfTNMpk+KKivK+Hcj4+Gc0TND3ou37eQNhtLGpR9p3niTwHWGshcg7uC9sY49lJlTG1PFdq31WeFzkiBWaJ9xyhSMlEix6xJM3St6jgWz4o5qF/dQD/EEv6BRj1H7Qpg1GAmRwwYpKR+eG54aHT2CeSNMpbelbSSxBngL5b8xEv8E8cZcnFKthaooToVfY1CzU/9PBEq1KfsYo08Liodp9tcjtcJMo/Cg75zd+PWWz/Z3tAKx2+cEjSGpB5vJEdaScve6tt0xRL1a7JjPiIFB0QUSmUfHWRr+XBVT3DeAOTUW7lFLS4Of8KWQryLs0Ba5m7wBXual8q3Fo3dhsmOJXP9JkJ9B+AqJHsSr5E+CfGtOXYZk5peTnQxZFBHukR2zLVBUyMe3W2Ecv5JWA13LtLEVdD8GbCuJP8yARkyP0BZodwQ1knX0qcQqC5+LV5usi1w9sp+JmWv5DiL7zbuu3RuKmhvjXaiJXEKQgNXQe45CC2ApocwD/Tu6Q3mU1ttwhL11XhMiRON+f4nAV5nOFJvLQxoGVjwtyKKz0OBtMVAZ/Q+yM93jYcUWjEY9eX86tIUAfCYAEuJIG+cM0NRdWAvM8YBod6T2p97pxQauQAjvIWqhOpStG6M/x+UFw7SWyW1xnfZBG4minVPtJ7nBgZl9vAkyDstdXZ2peEmJC7RIcOatkZQ/GmJekIGE+iQf09lEKY0G1TcPuuBL3ubP9XPBWCyUTaPT82lyJaxAtyGIAz1xgrgGS2mjH9hyzUD0SpKmI3Il7pezVLrFaUJQ/zBPFLanPsYbn7Mj42y1rTDVr3rRDzGvHsRBYPeRRt5agyP956ufj61IY6ZOA5yzkm1SaDkzDbnOucNXnzxj8eesbY+xmoZJ1cx9QSlkqIfOE9PIOKG/cNmaTnh9loykxywHUVECEtCjM8Kc0QQ3wuLstYfA1CtBlnuzjONCRuoyRbWkikoWq7sCr3BKxSGIM59d6EshUSj+ttvcmpwGBNthodu6Oy0AW9yAFAEsQ4MJvM7SIqfouO/DyIGpjEt/p7BKvJnBzdTUzFG40a6N6I+64nvXCqY/9yt/zGP3TNPxnKoWHNwGONqmldz5kH0cWyWfNvJP+xjY54AA35H+8EuIbX5LScU/LGeKza324BYAkpmxV4keybUNLCgaqdaEwkn1xBMjkTtPNXIft4waACBBCYloXKhWEzWlyLtYV/Uyi2SmZRfyrTaEVaevhsl4GJASpDYphmEYevOGRdlnQKjbNS4HJjUN+hRWT2F2iramZMgiGeQxvAhZ4XaL3AKWsPv3zMgyi4JQKsjThNIWB64URX6cg9cQyHEAtbB7h6uMgOAgHfRCzwdMwDo3SdOJRqg6B119PKe/sIOXBOVd/z/d9C1GrVO0oHwDrGpvOj4tEqxw+utjhbl6zel5Rjv2y+Ysid76MY30eCWUUcxJIPnccn8RbCo4bd/Nd8HirXuQDRp27L1aAK5uIeIUpJGogW+fOjMO5jcarGqAAcLUh0ecA7SOqDaSUh14AV/cSdIzgB3HtfAw7H80pPHPO6rO+JHLU3eBnpF8ahz/h/RSi+7oqnALgFvvwdbmvPi872I5ykJNydYAbkkCojbEtyPW3YcV9XrKS9gpu2PczUUttOTaOtm+XqXnDmXPbl7y2jcY3pV4AcjV3WaJRIdfcpD7DQS9wJtGF3GaUXMLYdfnxda0m1Yr5KLUz9tdAOyNp6izAQqHXnofry7kT7YcC7x9vyT0CWE4xDnxD4MOy5y/B37knIOQFv7yRIcJgDMqg8cw4bmJXpEy+3s421MVI9QaRXiPihFmrvQLIuH+B8z5a0RKmRDPoyBSOAtIsiMOHsUH31uLm22P7UuoVwbu8Ev4eswlnweP4sHG7mSTS2ZrlcH6bpAoJEN608UXhw9oBynXj8KgnjUc9qvJDVtGPKz78OZ7uw5jm9f3qSyzeEvQyTXOxCEaySToJUmx1mR4CSOTzeVo73cQxAKCRvxkgMXQdpwmW08neW0DfCK2kvgK3BnQKCIJ6sRtmnlzJW6SF4uFrZqQz4yg4UVNrzeaOsskP+U4IZQ2X3MGW6ze6Tw3rmMIxi42El6+S+zDxtrFXYZW2W9bfzqXnkhkUMn+rHUC4rkyg+TpcX71n9k+5Ejc09eIPY5Nt1TZHVixkN/nbxmE1QBwLFSFqDvAmbvkG1mFbu4KNtmrDOgqyPTTL187x6wwIOUE1YyOrW5bPi6Q8d//eusOV9PsPfIAXy5JYc/tOLjZaeji7PdzDHyKRA+YT49Dfe97SN6O+orulL4S1LKDG8UtooLQ27Y9b/pUZ7JGO1La4xr6yMt3O2JW+jzGW4erjXvIFPcbu28Xep+TnbKqfReTPdknRlqBhJNs41DWIxM1yahyfya9R3vvOFB5leyp5+9fS12qlpzPFZs+a9wzwttoWO4AImHjLtrrBW8iLCACJVwpYg2Vf1pzKf31locmhXJ0EZfULodjXipZJb7JbIRtOx94fhkNZJSo/G74jIy1m8z8tFz5DCR7eVNviZzGJk1DdmGkO0gKG7qUZPdeJ3nejvWzvY9Z4UvcfLL7JERya4pRsj99kGs4d9s1Mclks4hjuT6oiNIG1l6mxKc1vv1z62H4+ZAbPSK3Au9qs4hdexOwWVMBQl78RJOWPauv92Y/k+DbWrHcVF/533UgIbTYmqBpimAfN+LOCq4whRjIbftrloKpj1Rp5O9Hsjez+y4FxA+yDmicSYLDGhkZww6RkW6nVrrckZ6W87SpqjHZTwV4ynAVi5bTJf2wXu2c7G0Jj8YppZ5F6J2/jtZtDW9AApJe7ihXJ9NGp1TAgryeKPRybz/2d37AutZEWN57WR89HegDrLXXG6jbjW90l4h2nE+na+fZRaUaAnu1Kl6xfiQiFvGyYKQZtlZ+uaNJnoRHc5HZKtuHQ6JB4ET6asHqjKZaavJ8/yiqgWNdMAgWE3ewNFgiKna7vPPMciSzptc8dTs49L3leWZzXWVOGRLCHiOv5DNqOGCzAUA3qfLKaR71B9j/BW4aCc8v4uYDZoAtF8lz0Lve1DIYh/p+RgAfM6wgxwTe4Us43evP7W+NqrWMiISxrOUS8Xfl9WJlnP6RUSx+jQ3zNKtLm/Qh5Xy/wVztpQfEGZzaEpvOgA+OziB7x1idWXqIpETxA4lnb0UgM0HwqO86ngFmUpwFNiVc3xN0Bzu9nKk9d16NaXDKMKz/HDmYvnUSettbRozZBQBaKEbHl7y3TJl2yuSQaaGT2Pr2Y0AO2i17eUheJQOorElEikCC9WxLcZUBoyisCPb9bVXjCJggeHJxX1vuCdxRMiMvXmjuTdagUcb/Iph+FjQlOvODORlzfmsdwlGbHFyUJ4mIp5dkk6Wo20oSKeEcxAz4a9fpkoZRbJTC9JAviDvBlpBb8L7kV/Y4EUgKSaR1zoCfAo6lqwk9q1oTXFVkevP3FlaC8XoU+CUOWrUO4KuHBmJo5QFkAV4ahOhDJduOKYF5enfqPAuJnGnLHIQo1KuH+bDCwB+qzo9bEy+1KmI04znVyAkBkGod8IL9RgNHOBm6owwTfdAuQswq8BX1L3/4oHuRA2q9iW0cKAAkA5zViSTjo7HfOHnMz6WziAXEJOG6Xh/I44Va03iM8fWhhjLtAI1PUxHsKa4EqFpwgjwlzk4J7MX3MAPescwV8sO5i3y1BfpePp3qQKuYbQFUrWWbdYApbBZkg/Nk42L7y1TrYwS2qoII+V+Rz45iCWXkrQo7b0UURtxYW+ZAh574BqhzlPM/cMIvVHp3TZIn+2E3g9lduT7YNrWcRvqrNxA6RvxlGNKSUvPc9eGX3JUYXWhhr9o3wtKXYMdJmFk9CuiY7dmodzckpCDfqzo3jJhZjxbDjO276NS5IYMyCcRPu2xw6R/wOE2ekTRmRRS5NSguSj9HMCcMvJP8qyWCEox9WwrIkr+vRIm6aEE71pypmMzDPL8V3lnDx6Y2VZ+2V5faBwwfjGMlGXbdHewaK8qYO1zC5qc6dC/tJlupEtyZN4X3/UGwM8BB2NYS6JxvrbqmkhnVnC4u4n5cuTOOYmL33PhsteumglYQt3S51rkyTMiFy43Svr0rM3msv1boR5oNxFBgOzWicFXGUu0/xKINcAIQIgY0w3rxh+eZG1h8a0fQBnduGKXx0w2DbhtkMJMWKc+P5kMmjMcHGYtM2dO53npAMaJIdd11RwkWC8fQXa3cApO6TeHd8rZhvq8BWSUoYPIpNps+pj865WH33uHA5OQCzwQX+7BsrZudeTTGOAH/RNjR+Uz1Dg4JeYLeCnXJN+FoYnkj4vOXOIA+GAFSrd/ERo2dxr4BKnHV0P6+ZhYr3NwjY7DEzuBLRtpoENmul4h6Zkhy0SYhzjgAit8IbzdCl7WK2OKE0vrtWmip4nlM/BYHYczT0OmmSwxxRzo3f3vr1HI7piuPQcs9Pfes16mPai9M0FbabYAp44XM4Wfz3F0Kxw6uDfoQNulhVfXHGJWzeyRiXR8u3iQ3CuCvzqx65KnDyDSHvYo7s/bz4yuO4bhngNK9pw3x/GF+Y4tL7kI2XXtBn5chYOhCGcRyx8Opgtbq3y/YSE+VXOa/rRObv5GUW10GxY6QnoJMxfvNRUS3AOPfGDPaEZDr5GYPxnAa3V3vulVw1CQGgODfxjpLJqgMAcqcwK5dYfd4yUgE3Dqy+LQfMZ6VTcYvtklmvPhf6+X5uqsf4yMueTaHPWG3+lvdUKD/owAn8OFrbeDT7GoMIQOKmPs1n1TNNg+2bvje/MCOdU8EiHTacz0RVq9agEMcyAlhwpAnN5wBwdfDDTXDtKPLL5qvram4uvqMEYBDcNeo1pEML7J2w13XuYzNuzolW4+zxspdkyzLKw3InWYCWSJvrHOJiLGWMLhBAva0IOh0egSk08Zr2mxnWYIJEEk/bxnVEmM/LDKVUCRK3kxBEncwwDdfKM7x8ttv6tgnpvHqWwKZkTsF1BpoWNS4tfSEemLw1Xvb68ihLqExj+LPQSCWuBWmkNFnzbNMUBwhm08abbR3f/K0klI6sgUarqOCcmYjlNy4QeX1OBgBoBQtzqJ8pvIZZ+q3MXhYpDqU7l0cIoAMRkXw+AcXotGrj78fkQLvz+X1YODeA+RXr4Nn/s1gDoWUslhOUVzLr12dx8/4O30kW6v3gAJNZ17y2GCeCmw8JHRItLR7nzExSgdkNnEljAY4r4FbKM+xt3j8geEOOT04Nzd8CKNglqAQ2Zyddy5dzTyARAE6PbSNQcTjN/3T9CN4rTNWr63igrKmbMShW5t/kojz0gfJxTUlTx7bcae09pymIhNGfWEP4YzUAW6wV8PZ2Ub2cELoKkU9q4dqbH5CsKTwKwX+/PtsBI12yjVlQ/KJdC8D1vvkQGYZUSryv8S8R55wD8gf+ckiD/2elMoWnTO5E/Kik+QfDwS9boeO9su8dQK4u/28+rcjNxvn+XCnLFM+KKyIHwCk3dHRlZ2oYnNCnj7F6vj9FCY39oWjgR8Za78ZX0tZ6l9oBplnmyX50gKSdCJ80SowxOufc6kr1NcbYD3wwQ1khgbJgNRnwmkO8x3tVgF7uK8kFWW+K19M0vb3Siee4Y7ap74ooO2LNLjaq3wPbCsj6ngSuZvPwZhK6BD453SLfH983Z1XZAxbHDwmfzsb3awXpOfmZ8+ubsBX+5vu7Yab9hdktccm8bFdSqqnAq6fusVzhvvhsKNweL5QrAdi5DA/GbdpuNlwyer132pen15CjbEsZ6HsCAh88++AmvooBSvU83B3My/2zk5gA6Y2dd7m9Yc1wwryjevT7COfnPQvP3wQxG4zHCdLPb/N4GMwE/yoCcNi6CL7ThdBuLmXEVLbLoZRid/Z6ZzSTewymwIW4g8BOgvXynFvysSORjPvynnIiyRr6fNkolwIAwBklXF9iPxyFWGrLfIMKNtjaseLsYDMZF/kdDvfGOBQx1DjDAPBymgCpi995WMcIvxSdB4L0dfALC2pOOkr6fN1wsrw5zJdKPkd8JvBRtufClj6XxbWX05KPzTSZM2feaRnKcTfV5aFp7NOc93VBv6iBpNNW/pmw0ENdn7z3Q437RJiRLrXpefgHNlJwby71WSi1fnPToTAsCQcnB7jhBenliOifR2yeXMB6kav5Ijvt+h/l18G1pUw1vsz8SklQTO/sxJzCjqIRT9m3qi4XJ6coAI1GyPtVo5yTXXYpPj9s8X7CSfAELNoc7t3sPuTPSbDJ1PHwA6Yn6rgyKK/xywIVegHvALx5SSvDuABIE0EAEvblVX/0qT7Eya839J+wqkf60GphjwT7eSfeibfVKUbdHieJxuVEcV+FzQ5j7pbC61TFHT+/jQmQY2vb9nUpRsitHLmxx7lHKOBVu7stCD/JtZ5Bj9dNeUN8/9mMwE19zoTtkyBaM1MqggPla3oOhT8+o52dqqyGuRo+yETTWFMqkwAueSQjCapgqyOzgpusxbc0q6l3BEhMrH8xo1zVwBiF2OzSg7cyqtapzJh440PHfEUAg+K1NMBrJ9YNqA2avKxA81HvaRGExLtAp16VhLkDBj8ko3wO0G0h9o+cPK4CETGMQy9cCdYpq8ibR5sJAMKK1U/uN2MAJO6E7SLZAFdG3LcW5KcK8Mwd81CXnqQLxuExXDOOvE7aJjZe7B3pbGZKeD5g7jrmAb7jnruOQvln1WH+1BGSuxuy8dY+NdLnu0COQ5gzXkoSoO6Ng6I6U+uUJWy1mKcHdGNUNuo1fiTK7rtKtPfPwxuOVf6vOryWFH+RuDsin73e89W4OqZ4PqaYVw8IfuophlUQmvgcAGYDbQ4fEGNbd1qXP7YN7TFSoLE9NZGytSse/qOKO6MqVPtxhUVOsQXqMmd915ZxZJS1V5uHVFOa83VOenDHRPvPvj5ZCeExMusdAAlTvCF13ZCVszUPY9Car415JvjjsNOsUvtofGb7PIHPHasMDdDYnsdoEvk9vJrnh/dewG3YPA33ybmpzuupGR4SIM1w9BCf3DF27jAMmzFYLuCycTDqF4oz1qRdRrTg6CYM0s41CVkTBdVzOWzbFKmV5Fq9MfPsHdUSTwd7zM+8vvvFkti8fo/BLNcMmM2ChmHWTVbj7w4AEJwjQPpO4Wa+tUMgI0CxpjoBtNl3csZxHeAt4/g2GfxM3WORIyTJmUq95PyajuGZ+/edPvB52yY7U1pxwGAk8MsSd2Aa2VdHZl5/ZapzRjWOY9oqkjHS5xevWY2/C+BqDxleoFAHHB1dcV4r02XjM//uj2tG/cI4ohiKc3XWM32VScaIZh5pw6gsJAAwLgy3+S1bWo9q9DlfcnxZQk3PapC58tA7AGG8IX85YJGs4RAiTSD0ucUTad215p696zMASM+Zh3TrJFxgj7FEs9jZaplI/MI4nNsjrwQQgT7WgcuhqTi3dxtpGe2en2n/0HkKueOF/jCPsuD8fMPEv5DFuRpHKzjpHnebR/pywKIL2zy6/TSJn9+9nuWZnAJWIp79Dc/1bdnFQUqqrVDOTT4YR74HCpFPcsH7E3nlNMaPpT4R+4OMmCNHuFcN3vEy9Xv5BH7HGf4mkJhVFu3zMqKbTFINjFXByfcbISswujIfvyDvXq6TFhz43GGL8qoRg18don4JeQUyc/f1Sg6AlGxXE0zjYIEbtxrVITT34C13tmRz5l2pIBlSDuZ5zgFlnVXO8rS8QM/H0jq/vwnb2IO17BMxyO7U+buCk4Yc9rWl4aNH3b5vj7S9qUd8jG4fluGelb4Z/aO7iZsJUl8vzsd8HyuYj+SfLz4f5YIiBwNdBgdIn09uOgkmcKlyAgo4/NCSlTm8tSi26PoZXeYjTTbzRG2SpODk+Z17UbjVue2rE2mCrysVVxF6FhgT+O2VElHkt6gkd//eovHMOGZUoxHOYzBO/x23DbRf6w2SD/saPJL5oeoGApx/Qx0vySvu5vRoT7pJmztwgP/1qCDTcmeB8/mDdvD1NeLv60VNwaTERPAlVYl3iTiB1SvxDXCJnyIckrt/a/2F2ycUBqjVXtNO8jZzYYebgWfM0FduCNWY+bFOKkwv06AHj8hz1zkMTxBoBHdpIiC4vqSUUi0TKH9Lj1yLg6oowmkwfn2Ff6xDJDdzaGRq3sylrqCEfuXBNKn1eF6Bf6k7vVt4SI+6g78mZBf4jKhQkc16JUJuY8qdHqvbywg4OVMPj2ROKszPcbM9+OnlBEV7I5chb4TnknDtWGfUPQtQ5pXP42tXUr5fI+jl8OCz9Ov36NQYs0jWy+V0jfD68tSTZRr5cVKgB3e7coqE93KFP0LZt3wk+NUY6FakM0HS6mrwAY5tExvgDTcqsjsmwbVSACpQWB8tTMtHAe6BH7cgMv+zfoda6mJZC8vlaCF5do1KEATDtZtFuODe3cRQB3aY947DB4gly+TacGCkrC3OcxqP2xoIABVe6g5Oh2vby3oNLJMxqq8H7/QSaKqzF8mdjxBvvf/2ZYo0sRgjHiBTDCl9jIGeLTFvUDPKw2fhMcfsq+vfLr0V+CZwqVe9TsKsKtsfVhI4wn0knbahEENd38T6Em7GowxIepb0/Q4fAJIecGOZRHmArPNHrdXrw5wEjZL8YDWQDTd5unK7m87RZijqHYP1i4yQIwlAIlPUyYdRFtJBBaM8zss3aaWmW3G1Aqb4Wg6QGGM5Xi+kQwk622m3pfLRNBQsMfMPpp329EyhFYu1JQ+crDyGHhFxp4MK4PiVQgofyUX6vsxmCczwdqpATfUgvBmdc2PKpvvtVfPASGMZ0frO9tIGSOe0N9KfnnFf0skx/rBwsnQXCu0m/P4QAJhBi8TkALjc5R63/M6ZxRttQYbh6b2m/1DoNWE48QKYVt991fAPyNxyo+56e9n6Fe2a/dx9sQqkpgnCdnt+pE10On5KL5w84zBtqxanPxFd5DbUBkL33y4miQ61zd997ji1gJwGX3wjUCCMGgjHrL3FzesbVLnWqqDS1IJOjvJhNNxW7pe2IO4JcRD8NbhRCbPdDv4vLL0dSrYVgwaUS4Ve/VPG+AxC1XXovTITOTTPLlOu8P+1dTiRavARrB6UGf17WrBMZRn+P/l3rYC3WypEfJwvFWp1U2eajmxjRNpEx/d3Lw4H/FXrfWVBE11kRn6/MtsNcsYtch7WjbSYj7hXW3Ud1sGuk7zhS9K4Zrrm6jT2/++WOKvCqOrj/J5KAYBCTHk3hURXiiOfzFphlDYdrLjbGEvasXYKwvvc5oBBq4/Lp7nwX9vGWYOcc+ew1P6nJ3mn2SPmTeaAqAG8Wt9IWSdfj9N/7kgG+DP5rEpvcY70LOcxMw+9DjG4DmrrPTJjeEM1ZrxRd8Cdd8D/5W6rKBioVhKb7c1C/5VtsMg50Bgpfyqjcl6yYQWNFK9wbjuNM8E/PMv8gEoKa/Hmv1ulxZZN+YdQ/ePp6k0Uj8oXxyvyrIPTX024jJR9JJALckC8w7idtlTXJ4UpNNwoQ6Tak8zftVF99jc9+LQwyohXzsodvkmFNFMYIJGIt0UQEnnPcsg/SF+ats9XM+RPbV8jHAARkueYqrTi7mrBz35OH+kp8zJizQVgOAK5lLub2KeS0XYXukHPVzvZLWd1fHPbzfSl37CZFB9SkZvBFjynMTSuoeDe7kYK4uYd0FLeljFEgvsy6ATk7/VuQ7vyqzBwHkqMIx8Fj64Wwf2gmTsN1SFU8MqBzsBSfSywT6WGZlrlbuPXibKhW82KrY5LfOJ/ayMeTRZmfIgRyxRcdBxqHE1t5oa/7W4Ymgnz20dX2k22+gnBmJz1MxuoYPEO/tqbqGed5p+rrj2SuoSNhUpa1JQgmN8pjpZbtm9DX6yHNzouKgaboKdXoOtLiQI4VhBn99LmlPzpKyG36zTr7WYENQ67lH+fpmQbR/sxOTzL4HxkGeSGpdw0/GNWfrcNbkK40HOREa8j9Y7YoDVdVgbPiLZlDUR1+eeYboB/Cyg+HlqTWgvuXmyWI7UEGEcKxFnlbB4dATJV7VmZhoq+NQ2HU0mzBG7B1oTRj6infiGBLccREATVNA6PuPHA1TKOZ3AWfX5LUDqjzs6IZj2iwpu1FBqvKygqPL47YyifuMhmZ80dgVf/LBiqA2j0N1EExUr5JL7mUQ4OVHgLeCZe/ElFvRhStY82QCrzcDwFX2RzaTnX9oaKLUtndkpU6wLsaNzDSnnCfcfL2lrGIhgl0eznRLEpfc1yMucew1XtVcSUqoPLFoiNfG2u8YiWTDvOQ42BFtB9wsMyNHIbwctrsr6lyJCs+lcmAH1PmPw1mspNNo+mm3KDP7gnB0Vk1DdPwbhUjPfQ/N0CO86XaGEwI7bUL36HFlzdUtKl0bCCjP6f4z2Y151RXCq/mJkNwCVTz7mFhbPPRzQzcY2LfCwRhLfAsW/C+kzRJCJFerm+AjbC5zSPoJGNeMVcCffs1+cs/4DfKv29672diTSIZ0Hlv4jvd9IYxbALzUS44ZJE5P3pNTGYCvB27uVbktEVXq4FC2IrcG4dc8w/hy34eai/Qs+Y89FgPIqtI7nvzH3enaeZJI5pzsvxYIfyNrKCFlFH3kdQjyghwkYWGclEIe01AtDNyusEcAQFQr/bt7Xlqa27rI7HGtmBohFKMwHUGSW4G2xmOZf9QJClCyzrPW6ygpMLpek9E1aqx3+wWECEYRVHjMNtuyNZEFM13oAGl0JJIWIVYylGASuj5DtBMDmMNi9Sa7mXoipfU15hpisCNg/tlEb1ADtA0FffSDAYpGKJ6rXvK69MUqwaHl/MqhX1UuyhsdzkKFhgtX8FVfk/sg2qmHwL+u7HOeUbAVSPeoxzD2ENjfS8OzFalT3cI3cthoDt4CAkAdI8z/VlDzkYYWrFHHSuTxhMsFONI4INwtO3a55izc14yEgN5SK2bTi6dNLqf7FmoTkKX1HRt+mOWURlVzWrorHZhjb/GgDn1YY2M+VTxzeHZKOSn9eA9JGce6MzUnZEPaIPOqcHwmHu/vW1EFnCn/WpuKNs23B0peBfs7b6OthgYApAcNfrZKrhuvH5Iw3dD+r1b8PsEPxW5EdaBy6uqwYbWGOdDRYm7lvjiGSjlRYMLtG0jWKyidQ4WEQLaf/q8hi9uI5R1/YsUbkV9uIIkOCxKLhYkp/zmsxTxsnRr2Y/5B4ud5vvmAW4DugzpnvD7y/w6jF0+wd0xHss6UamaWgIu4Gsh/IxPHXuc8/HiHwkCczBAGUF4/rDA7FWfv6lpbFGgk+YH85WE2imuwVQK2uo+EWmsIzOER5L3NTXwc+YltAA83UzFYxWRj8Uf/2cogGutSUBZTNmqiO3Nw4Pb5hGU30dqU0ozo6rEbhno0aWf1AOPIe35iNPQF2d4R61gXK/X3adQ2QS9YDPlzQAfuurePCzjqhsF/uhlsmFlTOpfsB4vW4nXpu7vlsMOG8SuB3lxoOzXuUv41BOIccdc4Tim8q6BkC64VP2UsAtBMIdt4z1n7fMTdkcJZ4Q2FI/hFfjuKNfbeW/ttTePBCfOYEaRwJJ3szqGp/7bqC5uhZnMjl5Wkn0V0w0gopm9N/H2QbQ3/jcgtcJBqV9g2mhbMsj3mjxJ3DtjXGTj+3h6jP8chFv6bSKUKiXzNvn0HBwhIYuj/ocnwW0fhKZZuttpYGvjHcaMTwvQj1LBQ/DGBtrfux7WdL+OSC4aPYXqDO5yUf61nx/vQYD31XVm8TfOZP6OgOqVJkcdd5qBZoR7S2p4KcSL/1pbozPAl71yXocSCYHYa6lZmOmlw65CVNf+rjrZFHc520EjHrHbZkzdgTf3kFxMoo63pn0fwtu9Jp8L7+l4FHkzhIOBNmySJkc6a3L974Ocz4esGgObnS0IC62OoSq3rTRBNsAqy0Fq7ynhLk6Ao22Wqw/2JJuhgNFbtSOEmLqkT5HdQiO4KZgKGXlbSfKUFwgkEyjP+i9VMaaxxO1Y0F/BN8mjNkq6vxAKs9J4Ls8m2+9AeDENSySmzwNYzDla7XsM6Mqtvnq6PClJK/BqzsuQ0gYUzZVS1u98QZg4Z5glGbMFcK6ezYBkNHbOtPJgcyQX6+apgm2AFdiKq6Ti/6TbNzcO/fJOeYJZXUNJmh9ILAN34qYVw4vY104kAMg6byAnkn9//gwjiXEccRmNTCT1IG7jKoF5OyHCfmxBVAae2NfeY2MeHhbtdT4HmplPSjWlIqDDJdqpMoH82LkPhX+TQx0lE3ToGjIvGXTe/F5gmt3F/yA3MdRc4K6zstH1HawucRDuK0im4wZBpUhncybnBFftN7p0aN4k8XUHmPByNl8ikEA97CU2YV7l1Bffxgk59nfcN9RzHMEgGiMGb0f3T5BcsPKygFjViz/ImGVq4EYtMUVt4zJM0eFhD9KMzpfTLiOIVPUVn0dU2otHbs2koGhzBSyYRyMZBqH3qRDVr/6WGw3RHCa5BFLT2H5zR6u6yrqAQMpB9d5eCaZUHMAqD4cpUyKQDXOMwuK9yNJ3jy71x23ASNFKiPSeoimv0B1X8rP+ThjU1jjRrxD0JeNuDaJYcRkG6395VqxJ3/UtZ2VoXoTqwg4IFooGo2GsiU7lAMWxA9B7tt7aXidZnb0eBPhj+8FcAa6UqBI6pPgNj9i1KGgPP6wwMXCatqM1AzYmCk2lX/vIP6K2PNIm9blrH5F97MMzcPeA+Aqnxci/S73VCxMT6m4K9gA4tUCVBTe8jXMpv75vprO6pyp7VgQTeLN/PzZsUUws43kJrh0Q904DlGxUuR/flJ0bA/TdECJfxqDx93Ln+WGezi96gSUuxGNcSiUMq4YCf4ezsSQC9r/ENlm4gbpKOR11Phx+lBj/hW1NQ19eT/wVzQYC4S1D/toqcPwJNshx3duJPkaIXHn7JafrUHqgOD5TpLPm/LcqgjlXOs4ElKVR47dk3vcXbdxYRHOOxTdOb3RHvDQDRB+2vKCF6cpYO7Kxjgy6nagG9Hh5hmXZYG3ewJ1RfFdXVkMn1uGMZd/gkPw3FO7I1sFhJx8PiiqDUL1SPJ19nktjcRz3WvE+wmYakoplRg2LyhXcQca6cN8NCAYUz5vFWKM+pmTbByHeySgUyA41sssV0cYNCjccBo8/BKbpNz8d0IIRQsL76QE42bHx2mtTMG9uHSmS+hCQT4fKUbxG9bFCK/bBxkFm1mGNG7yNiYA0VvEziWyHEnSWXdPxnNJOaJRApBJqUJLXxHJRY10xSLzyXHK61bP8hA4jo1E0R1za/wv5BI0hh2KTuOq6TW41iZF23HfA4QGzG3mFuSA6RMF1ZBSUE91kw8TocXp9XV5LW9HyyGZ/i9vgdY7auuh/E0gic3nSQ4I++ZeR9WHdzzvh3QMYfubADKVwfNjDbUPyqU35lx8J+Y1YCo9UXpnDAThNa2OKe6S414W5vGMfqNTj6Kn9sF4dxLfvWQoapwsoqd7xUQ4wBUTLJWeivvqsrzJB8XTgpgc0hcaIrxuSN6Ju813jPvzlxwQB5N6PT8Ov/jdm82XC2RzmgJ0kSteo7BJun/DOCIFkNMDlmLNDa0uYqdf6PWiG9f0UjUONQaRCe6ZBi7fPIGC6/O73Z/01ckUCeUArzI7q2+I/EbJRvo0S360CITXe2mSA6Zh22QxyQ9uZi2ebwLp2RzrN9cA9Hlb6UH51YP59FgzNzEDf12/vlFegyflXGV9QNlem2tryCJFpLlWdDcZycMveYkLD2zXl3ILFDC+NU6CfvYk4vxR7OlXL9f3QSRMdX4kHDEKZFakwaZaKW75nXU8YY0CUBv5Mwi3vLPkgR7TfNO0gvKdO2NVOvHcf0/o0+NwOEUu+1Ri7KvPH6PvQYQwnrfXZpGdp24OJDu42cJ8p9B5+Iw4iCwvxsPfsayygDxXFWuzYHqLFPYgF+MUAEl+DCJTzVZPhMR/k/gO96Qw5aGJJgUYDTcncgNC7zNXgUQ26ekDcDe6e75fjHQIuXhHAEQA4LBUM6LnJykzjv4c3K8Ou5jKHxlmGwoVxEDcFYCGZaMqWKYuz34odTnn1zeQb8ENL9tY8EBOjdiQIpgKq/ka+7OaVU6l+ku/HvrhrFyDPIGqBcvTuMzWC/1Qb4BL2Qgobk0Xy5D435BaT0gWBxc0DrzMRDoWuymAcwSXLxyXapQKC07p9u9wRIaVMoeEeZIO41aM5vdnJW1oDuI1cgy5KQuxA4hOVH8GAi6KAiVZYRtF4KpnfyeL9lDwNnpfHAEgAOTgjVjXQsS+X85ptfV4JtNZqYZH58Yr5yUb7CXpyZ2WBALbWwqU7oYH3/iBy3FTHrm+djgonJv6gZ8YSqO+/sSCeTwCrAcE3+WqNnW6HveDfzmtAOBg8n9FU+iah3EKBBAsO0oGIvb9KsiG4/hLNBhHv+/+zdXKcNsrHZgkP1gcoxOsZUZ78Fl3WKn+RButTi72gDgXAEj03UBLduAdgs7TOqIYimQLZ3/8ZfO7TQCCm2J87LZV41dMxygCmyBKqgYi9u3KiHp4PijRl/Ok5j/rWnRm24rCcgOburuGbsXO1JyslCSdgPiV9xMk+RtA7kGk0yz8iJvvkcw0AqHIUdrgy+REJExj4rN5IzRem/vJAXeNYa4uJWhdINdppv3/gXV0XmC3rZyBj7qUrJa7nAR3e1J6RGq+4AI7+RrdNPrcEiyc2Imf0Y70001Zm1C/TShRjLLb4XYWiP9N898JLYT36q3TsSXdf7WvfayTU0bmdwtxYZpHF9q2Fd6cmuG4HWHKynMz+EuM/gX5e8+rOKta+GgF2yPjd2f6jiVUdL8RPaNwb/J9S50K5SgqlvybCCCLDEnk+k/n07qRubySG5SrCBDIgX6lR5vvU2SLTKRM83FyG2cypwlkPZqKNCnPbd5pEuhgdNIQpkGWEthwElZvAGPcj8GomK9fpDRO6NdIoYe/Pod+pqj3wUWt1gHz5S7QM8txB0cTgAyNI6cw5m7grroyYdraDh8FEQGBmm9en55ie6G0zsRmali6jCyoa7QyNXs/joNPQnMjW7+1B/tdVvTcDILNDkW34HpyzQ3yzEgGL+xkOyvqIbEx15J4++uuT8proPQ8sBV2GUSPkjsv8Hr8WxR4VGKM9hPe7XdTuxxaoauHDain2F0oFbf55ErdRHM84b6VBWw3j0W2svWMeoKkK+QjkFmtMG0/MN/pOFy01ZQYaaILike6HP4eiBT0wPa9Z3I8K1Pi+ohqJoi/0LBbMbduJQtks0ddRWlaZvwN6YCna8Omsx+0wa1xJhnlJBL1xpud8jrVlJRRzQqshuFOsjWaMOcW8tFSIwt5RUnm9z0zfmi2G/C3raqhGO98ktMhZVWdXmMbI3fzRmGjYsGd7XUyUe7hnbLvXWqKVpsVtnwycz6CTG2sbQfcFXx4NM0LhYIT8KdI1E7R1DzIHeuTFsSGwzWB9fMR+ODqfzt+vdcY5fMUbQdHqB+Mw7nztpPI27HgmoKPyK3jTflqv3NqPFyeEAikN4Z1SlHaA2dv+wRvSKUY8XDvLsHgGp1O/jwSNWN63rTs5aOxqYt8UlnuA3a6c0KlimS7QQruZUBjE0Z+pFmktjWJRufMssfJKvSw5UoybBUYPj/AVSblA/kffZ4xnNisxDZK+ttsrpV2jEh8Rzo47f9SgeBun2prDtOm327abPgIiVwA1/cOlJqT5JHMX50X/di1uEGmSRXjry6J7Vm7tL/87KVgAe/52iin2WLgA2HpKZiE7Ag+wW1H4jUpj5tNmb1h7VkA3FoIUxxfpC1dtY3xfHDEfOCn84RqSIRGfwsgV3LjYMyCTo/b0ijmu8YIK0gD5MvGQePvB3Ez6rbcNJJebqeQtORGWNpZetI/FIw23AS2qW85Iu1Eo3N4YdYbZdkh+fYjKMq1IzWBr/Hx4ic8Yba0kvluXEYFs9HGnylw3g8RyC8FJYeITb3Rj1F3yxh4ZvenJDMyO1spgJ92zjsp+DvOGpopPR5fscEEv6O0zEGDuQR/SjifBSEQ6j7iSEhJINNEQPnQdZPpEl3XwV3FC65bxzI4+dlfxRZUpAV9XRUGpYaD4q64fbZhcueIlQPYzOmOl38W1fPGzh2lRwIXz5JVL+Ioq2vUKFONY15jWgX+3KNxmqaRWw+tDYrDFEI8fKSfcGdGuUzkIsFfk7Y2sMG9NJbddFPo7ggUmkaf9kvzDlniUvze5tL7yNTPpi6sI6TNNcGZZTd75XlIPRB9nne6QRwg59ybhHLH4JEaYWn1HOYYcAmfsTnTlDK5T7NIIRARvkpl9RgczXb96K8RRFy1jhkIo88PB3FnG5DME+4XRCzfkoXzlYji07PeUC+W3XKdBLqMgkJSkQZziTweiGIjLG30EUn0VjPgZ1XuTLJv+uPDaxKFb6CkUe/5isgsiPPua3kfKF/2HNoy/lovpqxhHtoe/KmheiCgqmTh8bI73GzjGEzwwOxjijV5Zmbv6/gO9y6vhPTAim9kCktrvXmY1qVcBU5GMuZp2Yhp4tfMk1ngUI/njbOD1IuOY+y6PALk+rkzE4fPAHPTMt4s2zwY0WioNgHZwA6zKd1orwHSC/jUEdcrZbeBqMxco1au+6oUhWui8CKK3n/AOfKTYPnjpr708Nt8JjtA7scTO+9PGD9LyJ1Imp2amoFGegeUS/Ky+TX5HbV9Xe07Y9SDj/DHb942D5PpY2fPC3tjIHXpvu+H07xCW32usmisq12EvQNkGss/66HOKskso2uhJfS8QUBvcsy39EgbnzdDAgHT7p1HFD/BH32GxziP8E/gOfE8zyTJNg5t+h4+6kS6/MIinN9fK3wh6JBoD3M6Ng9G/PyxWqFnIgTWPSDCvft+VdCFshuj/Gzn+wyCeIzVy/+NpSWOR8rdSCcYG7lW8vbJmMyGDO/hPK0Kfn0BISHgUYQeGhaqWcdIQh9e09t8Auo+IKV0/gbvsxpHGjqDh2ObRwR/ziK1Qs8Bo7KqMWaVSryycl+3bGr/uezGAG7ZSIOPjSMCbhgFPa/qahX5uMejoLnJfQTvrwztZKdoF1YXbMTHOJbHPmR7kl7jwgaS83hjCstNdjdMe0h5K7JkUoBdbZxB0o8yzSPWttRTcAgtpp0asJfOa872YemwUr8xDve57DaDIL1vK2oOdGwcU5hHwV3hmzvSe5pUPBM7VZS7HNG1HfncIx0ZR35nArlGPgykZgF3d9Hq5Yflbwg5Wzb5GQyYMaqdsCWoYqtO9KefuqnQ/0B4pa6lKOJVxmyc21qeh0Nuo6YWgV+wu5Tcoi5aylNgFFLs6EFzjIK4jCXlHpiXq8NOlbenm+uweQWh7bgbj4PaiD/vWYeUHkYiwvsA0z+RbnXGn9VYrxGrKvyh6kjhgzmdtvdg4xY026PzpM59IJRs557n9JMZfQvsoGxS1rrxNTSNSF3Hw7gwGUimMbH9uHotLBF5HgEAAfkdDsRjudCLdY2h+kOtYh/g5udRcJ4FbjKA6Rzh8vNO/0vkrQZD41dUCHWflxkQ5RoLn3SDeyeODe8RWXF+u0LPCopq4++5SVnSsHl/QJEcrY8TNWmAJ0ze93an8nJL2Iumt+MskJR5eL6hh2NNn5EhS1vq83L0VmYbEPwCpkybtErpnLV2nXmlsADov62udON61+eFgqOTqPKct1VKBkXB3JnmoT9rVehfflDbSevqbAuvzNP1/vj16t1ukUhnB8cV3CAr3oHG4A4gwxPSR37n5sXtGmCOcLKQv7ANXbPyfUWytkJS3BnR+dES8bns/8RDr8SrE6kJlDomGZ6fyKlzhGHrOpxko/6n5mGLpve4vUBRfrsNzaeSwK37psURehvfs+52Rn3jB3fQ0CRMd4Ty1MFLlo84xl7V0J1Yk6lux9YhbKVYH4IC5nnm3HWJEHNLSsF0/9kj2gXOnxnHjGQHR+e97GZUz2n0XRQOyJ1zXQWr6rdv645TOApN5bE3ZoW+CZoe1VBHWSuka3tvR/PpErFvRJTHsdKxYS6obYDgBkVs8vKAkj70eWkoXsFtZ6D4baHgZ23eg9Gt7eXYb2Tfa8lH4HYOIQmikZ7rmTKNI2E+QZ2+CEkpPpzJJJo3tcrHE/HxaeMSF39oVej9u7/YB0z5TShp6xsJQ1OOsBPB9jijPIw29xDfFsD+Apj8uhzMSBoAezkNdZbAd157KZKaRt4UCu5wo6iZ8dR8p1N51zw4AkIsKQ1DqoWCxXXMtg5IEkQ2jSMPPtKCp3y1DHwBxcN3LH9a4oH+10ziiPh3YyZTw0nUPSzw7LrWnlw49JRODsoYEjv583YbmvoM76kcumkOU/lnwZUYIP6KtuG82g6ysjiJXUsrSAKKaX6go0Mv7WNsE6nR50Z4zUanTdJoLg/zmDEYsSj1A2u8/cUq2DbPCSYi7hLYxIX59rtpgvOTbZjdsnPrPcxCoIOLLqPYnGHu5231RGJHsYc0V3C+E0LNWxAo4L1kJ7uaj7ob59hKb/Yx8cq7oexwMX8TlZdLx6bh/K7G/LdpKXvDdeOBtwbiDiUK4hetEozXdivPqZ9EwpRafteyfJy7Qsy3MM1dJ6GrKVt5zfWlLPZZqL7cBvnVuzEnMdkpZkZdJMHzhlIlkYHVR2UKQ6/v/eqaHbDtW54fof1MNAVpdhAg907LQ2CDRz0PtZSS5sN3Y/dvOdRWQ8EFAlw6hSHZpFf7Ogk++Q4eau8EACTGSSC8dx0BNLwxnBzhOwG8kdcYi88q9E/oan69jzcGkQiODxMoJ9kyjjumAWXjOUYIwtwW1Gicfy1mIfW27pHX6QyhkZqLQ84idXRBW04oQC4fH6syqiu79c0yTJApVj598uL3pE0N+ejQWSy6zKAQ68CvG1F45zpqzU+QKqZ0p2e8NrJRMmoXp95KPLVC/7C0KSvsFSRrjmIdnDt33qFarSge5ZFYtwFrvk1l+72v71RTMS3Ixmv23NbqEEge0ZQ2lE/l+m/8RJFssuRR5ZkvrxEfuNZ5WBIkmca0eVdM7ijq4BsZ+krmvTKnPhBALiIcV+i1MfuHqC558XwSvt8AW8B0om6S14aJ+zoI94caTnsWzwjj54Yy/bNfTubuy6W+1Fxl5VMlXJjOd1Z3jGTq2YVYkn2EEryZsCR+EaCGfNIIkucan3bxqE9E+OMK/V8S/3IbvIQVEXTWGVJLyjZkF/4s1ckfpO9j8HDA1Ll3WcSqTa4AA9ZxaRLmi3Vkt1WSv3+gSKo2VcT8SH7ue5p08v7gATAavbjmHExzUbQKiQNKazJ2f+GgdmHhwk2F/gWKahNA7u3M7vNyJOGJ7szkvk/QcHASRxBhMM7gHUN3B/JjpF16d0tXQOKQP8cyCDFA+Fo7meLEsaZeUJagM7AenonwWsF4Ao/hjJiRPuH4NzHEaJZz45Lynk2UoTT9xwPGwwo9B4wKe71c2sRf65+hnytNPyT8lXVNif/56sX++2kcZ8NB/wX83wfFNwBgBYg5TWSOF2rWk6owkPtdlSW55n6vr6p2etKkh5nZ+1Qc7WOSinzS+5fFfTw+hspyHlkhpHE4/I3Zoc8rzPCwQu8XKoJiED7o9/3OOh7LfeV5MgBEF67MVFbj+IHAIWRx3ewQu9xMgvBjAOQkZByQ9CY3beMzwVlbzH4IrvBuqIMkCw6w+X4n1Jl71dD8QKsK5aC2bUo0iPBRhf4OYYW9zmHk04qU98zLexWApm/Mi1OeMcw3wF2dKL7ERy47uPyM3CfxTpPotQOZEh9Uvttq0HXbMKBmsY9Wko0vv7MZnNo0zuxXfTd3r9xDi6FS2D52Yzv4v2rl0qzQL6Coug2OJ/IA7PN5RQoUpkLxSkdFrsZXiJBH+z5T6a4PghmX6e3PbqM0OIDS0UyW0PuTC5zicm5u3/pNHB+t1GTGIyBTnTVWNB5IV0L+Bxtmlxy5/aiR8/jOJBqzWy4jiWaFfgFFle2V79tpd5zXudWO6cT9uyLlfUplnALAFwiFM1mSWTQJ8EDy7ZYue3lMPq8uNYopH7omB9CU2LiOtSuBKXxrG/bcTq0b9esRIpMA5MrQwx8YxwKUzzxgcPT4fABpv6cJ/cd+GMAb6j8G0TuivHodle31s8WK5wBM/M6tkq9t33bfVKR07G49vuL1osv7dhSUrFjN9VJ2AfTB5w/YWh72DiSjV46g8l2+ulU+pejt2RtGB6ActW1IzPf5oT8IoC4OB/KzPzkF909Y7869DELJ6P4cUJZexwX2enEht2B1qio+ueXfZuOYeBJ+JEcTQcxk9EwdCOW7ASDZ3+C662uuTweS1XVEz35h6J/zR67LpXzmoJlIsbbuuxREHlPwCi1O+46AyVHWsMS2Dms89yzIO0fX71OlhJkDisJeZhyaML/R2Ui8jaMjkjEHml95+3A7LkUxilXx1wQup34SiOuHfNV7mPty7kDU31R5Q779VxX0qx4nwV2dEjMLAPgXH+pxnYxjh1ER94vW8Qgpf0CoBqA071R+BCCvbsOOQyvyAoQbI5E7D5qqn9uEYMwrwIWNmcA62y8J8QE5gfsHdhwnR6DIV4fu/Hb5G/SF+uTz94nKZ49zPTpQVGwCIOnpiYWXSMmVxfkPF6W52WHM7DBlwxUPQjtGKY+FF2kbKw5VcCWLNASfGUlhNlmUEJ1zQgCNvOUsJkFg+4GNykUm4Yf/0SBCN/Dz67y+7LlhCox+s/qL5jni70VRix4Bo5PHuOKKz6ehGLKTiwMYiKoR4SsJ0LgDBjMObSI9GppD/YN5JQ+R/VDi5JxzcUyzqbp41CSf2R6FnoYACJflryks/fl1frO8kG+95ZfTPNJl63TnHkYTtVtVC2B7hPDHARE5wvFLAPsmvg78kcyhsJfGocby5YU7Mz0+3lO8piIqNNun8zO+Sgnx8dde5yCRfsB8+Drl20ihfcsfpnn44Vgy5soyBtqfwXLHlmpiSV5k2O2yCmA7fB7DpWi5PWXHXAkSi4PwB+P4cUPXqkspN+XiyNqEuc37tAvpQSSeQ7ZbFL9aOVBrceX4IjOBOUPA7rpq1PdicO7A1O/bSFQFsANKnm/AOXw9PN0GT6B6/X4mSDlCIXha4ixAXpwPx5r/X7WOiPntBBLctrTECLEXOSgdfJ1l5E3LHiR91j8+663h65Txo1z/SznKUc8vO9yyCmDn/pk+chX0Z4hImHdxqPLS+liMq6k7hXgdMC/WOTakfH3/l2/u8GcX2Y/wLwaMkE3CoS8jSTU93efBvluOReEqeEPUuX92Hd/H197Wx26DvL+vSFTR21f6qE12Vvj6MA2M2WrQAAmAMwzL6FqpkJfnbzvsvHaXXJ1liLLWLNIadl5oi14o232jX64RfjtVoZC1venopYprKGQubRTy8jwfN0BLqGz0ah2TSgU0fErBcr+KRLXLNQnkh7vgjhy348fF4uY9C18nrQZg+xOn4XLecsL5PZ58tuKn49o5o+7fUYVXsRuGo2S0vlf531uDGFFHsBq2+/m2YZq2u/uXAOEDQx4QAJdsb6Yr+/Qmldb8aahrbCLRx7nKL4GYhRNhywfY1GEv0AfyApf0Xrja/68rYfn+T+JLanG405SDkfYSzpnGFZDgLFL8DYT69XzRvXTa/uvfURZK7ga5jbQNJpuz4xGGROHgYEXpuFLYQ1pZGxPeDPSSrsyX5xFIq0jUC+Abj27H1TMKO6Om3SO8vSu/cphiXO+G6oPhQG6Ab7gUiBdH4TXGodezA4oZ7+gap0sgZb4Hb1zxhqB4gdSNKhVNYynRERCHgxzmRluQSiRvDEIPVs707m0eXOL1L49JncV4EgbaTK51JBoqQtMocThiDEYcOmF8509eBaXZVlpuYNAatAbuRV7ZS21LXSgNApaPyUqMZHj8CjH0Wa/qsqR5HS06PuSCJ8xHCGoWOG9yu1rpIfZP4xjaXvomYp5EkeK3/gwL1vcL38hsTNCV3HFgOBNu70gUhHDNtJJxYz2u8wRWzSdFV23r0Gv1hvBCVv6CGiOwM02OBMhh03lGMeotCck+qSe6LBoeuz/qIZ037xU7HdG7ZUfgV9KtPUxxK6opcY/KCJUalxI3geZ5JGoYdue9E246TgNZEP0SiVbNPb6pC9T3TaiT7RQjykcN7ouP59sjdf6LkA/C7Eh5PToyVcH9iDVL0fD4mvnrSf2svOHhW8pmbxmvbm/GuOuDhqSDilyBO9LfMyzUle3vawLZNNasX/7Kkng+WqQIZHpGotx9vX5QFhduVJ6ySNe3mHri18v5+woAeIR4CvmA+cmIjYy+PcG1wIDXHO0KTRF8dtnO+6i5gk/JoYx0WLHgR8/CjGgPsWxCoKsMA0aygdBrSnFWb7ixcprCG+aYvtORZb3X763IH6dSBo+uxQE0LXM0v1/NQBA2GnTa7dRjnykeQOAjWSmzbmtTep6TzycIshO91U7m1zDqiQ9IhCiSD29W535LHMioOifaFKi/sMjp27TX1aLApWGaBRDdlbsAAIg6uDWGmWdyym9539c9lgxneOZ7Ic6GPqaGfFM4cO4DvJEySzSI+z5gp0+eR8h21mNGPXc5KCeRLkOs4iEP/gfpC+PQ3zdusSRy12+ABAmXu4MKtJ5xfTXXFuFB4fFD6mXpBfI3dILcJGojVsy4AX5dXvBLvjc6BKt6kcCWGCr3j/NrYMdONhM4xKk1SWK/k/6aBZK4CVkkGnX9PLRu/nieY+YtYlgdAQBC+mAc9i9EMSdYZGnBA+7dydjLYXIlt02qZTi0pNnErThtU2SuyXT5d/iXogkpDOcX+1FwL2IVXRYU3fRVTMeIVt2NUQxEgRP4ve1OjLrFTfYYtki2w5fkgNAPnlmC5o4eQ2tDsil02Td4D97XNiBjmn26CeQ+hYszDQfwxjgmOSu3slC4THhgBwCQdAhor1gyuuOAzOsB3Uxr8UuhyM12Zu9nPuoJ95j8HXEdroEaBTiJanSbUWMaqLST2zK5Ald8j6x3QRukqLcSaaM3G6zlKngufueqFdnsotdsReIFGk8SUOE12VA0gbiIxKLoGz+u4VWwPbTdWEyPh/LO/vEBfmFONb4GN54l6IBuGpywBn0eDnAp63ae48tV0NLRCtCv3T6N+r2tYU8siLWnDZoBEQDojc2mce2Z7vB7dMLZQ+N9Sh7lvfsFR7OcIx1vbtgc7l3pYdBupYmuiZXPGFbh011C5E1UrvExr8kPKQ38gd5cUE0aUGPqpqZFgQ+EuqoGFGROAoqzYcZmhrVJDzwIod7pjwb+mrF6B0NNWbAfJtJ12Y8B877C6sLqcDOiEb6441Kpc+9ooGDdclN3P2rrpXM+dyQ6GU19nr0y4iYFq0BIEW56FrV/7rOnaZe+1WcIldPJxXGHJYSvJVVhS/e+Ng71Jp0H5k7+ZM8aoD+cI8F/Q+5mlCQAiF+3iY4vOBq+nFuVEAffoOW+2YBRixUt/59Rzp4uwat7oVHfwkNIO1tV1UkuUINOxpSdTztIGLY+j5MDytIYzFCYoLF+FoAECHXmOQn6bFPUbEYSBzhvk7QYwVdyq5KVoEsQAH59WHKiE/UilDPG7NClAEjvmXvIs/u29z1dU/nIE8AKK+2MP4HfwV5Ey2Ouhw0jOUUiAgByU6nyAOh8nlMvoHE7/i4rSeVj3m9zDflz/4xA5v3x5fSqOSYMyduEsBGYqjfmXlmhMMbNI/sGc+f2SoTjlR9x0gmo3DA01yxjvGkO+AvjyE+hzTHguaTvl005BwzNyotTMXOjcLXx6TkgRAdj0ObgAApxfA4DC9CleZiB33r470jmTNNHCuAdSy+1pUsLuBTkeMsrXIPMnrl2iaYKUJ7Z95D2CbOfm22osWLMLNJue8L8zAGn4apxKOyE6NfTMIRQ/UXLaCPQGf3WdWSUxcUxuX1hUvbeKcm22539Q1SyVMv2J2F9kMuXik39S4e5xYy4RCdWpzmPAownDRcV/QlRLGNs35dhNxMAGnPFfLoNc1Xwgcbmal/YW2zDy6fs45gUEpX4jRCvvmWPsn1Fk3gRvpbwu98MHftBukg2zCL8yb5H3M94zDfUIyrqXPiMqDueTs12ro21jL3jIQ351Ds62oAPEncfP0xb3pq/wKa/yfN6L6XXFobLriPkdjj0jXhD3xjx8VOVWJtJSrr2DDMmEy421gR/3mpyPKvBE1CXz/h01GzQI4s7VRGrR95N3CeStEau87t2qW/eR+doaiEkiS0a83nNaXQCgBTVvbo8Qm40cJni5r3XC80HKuCeAJQv+p9vJy4nGptqZPujoah2hyzwVBYXPxm57bEr/EmD37T8KO/ocAOcX29sPexlorK0Dq3efJ5Azm0I5/4GuJQ1xftvV4Jw0y9Y4FvTHDBfuiMedJT7VelsvyldnTi9iHJtHyuhvZe94JZfPsUD5Ru50iYgghC1JpgnSE2pJ5rNECwsHc3OPGIqZN7c6An+aXS43dp2iwUb02P8ny1VqdLIP4trwe0Z6eodMctF01DamyYuJHw8VfVk0dhQeKc0v4SxCAL/boTPJPm7gSpqKTNoHGVjBilAu9nbtbQ0x9G+alVAcnOj59c8JpR907K/ESR10Ef8auXZz/lKy/u8ikkH1CbezqgXu9eUdv1heYfbFv/kmYSvaV3bmYWiwBARAsj5HIjfRViKXw5UuckabTFyt8z85cGE8+bvdAiarabtm8kpoMP/dKvwAnsE15fB83m/hddqq6O2TEXjNWrKcE3mMnsHGYyWNhb0vHW6kPmXff7zUGKMY/V5FdlUXkz9m8bam7TdlyO6f2Fpw7TxO31DeTDODXdI3ffrTjQOfqjj9KJAuHhkJEUQEi+PpG1yEu3Ch4HkX2x4zyka+O1igHlswy/W7sCTRTSf/T7I/HlyqU0mabM2hdUjFEv6es0Oko41cp1kffeGbGHqxGrru84ycKX6OS/3Sy2nRpIC4MomJg1OD87ZisJXxmLl5Ag0+mOolm9A6P2cO56ruxTcZuDIOh4fQYQ7P9LF+Ms8LqpvapNTUUnGb1eO1hEZUDetdzexhYlYOtZmiN8iGELRBSwljr4OS+wx+1QmJ2ok3WstOLx7QR76aCN9MsQFXUUcvPepj7YCqgPEsoymXs7J4bXEX2vlFBpsF4Uw+sw3wAWQ/E4fRgctJqQG5UoY/fR1NGhqixoI7AivL2ZHrJqgBYQwJHU5doOS2UXKfiijC+/Yow5+bSSEloOS/YhhJWJc8Bls0R/IN8JjOYMC5AAphy90orY7tZTk2kcb4mE3tnKbVcE3rHVReXRTyZ3XsupF6xC/DMVv6E4imt5+eeEj8lnDmtYUPZIFEt9Rm/Jou0XJ4VA00Oj3yY/YI2yuFVvkP6tEUjoDOsxUz3vaHWO+P644Pv8Ee95ui9baf1VFSfQucXW2t5u76ys9G1BAeuBe/2B8bRx8pnF/I25RQorqIbLaRrHkBbVlv6ZyQmQrOMptVwFqn7sfjFabOZNTE/tI30WxuBPKpbenJ9hYxVETlMTTX14fkYXeJcdz9fLu/vEn5jGJlBu9zo3+I9mBzrVuWn+WQk9rJuuwKjolONZhxOvYiJWVq5ZjM9OUrG4vvVYwRew+4Vk6q0iXgQ6P4UAzy/cENIMmr9JWSrVmSJ8oUvAEae4Se82bO48jABmuDCdnRAV/JHxOfoZSvFk1uJpCs6AfkNaienPOXlB28oKzwYNw5A1y41WJ6hG4YbDhH0d5MQvduitXmEdgtQxyKf8raqYJ8zHLVu8SfwH6rJvAcPaf1LEcpacGnM6HQvqkmsQCYB/kuGPbMEa+jA0NhJ0Zp3PVlzxHwvzeF+MJGmwi1+OzVOA9vEEQfmPpNFqyX/k+RT7SjEsE15cSyTjFX0txdZEOQ47nXSLjRexhIlbTQOQtm2SIhc3mA3lEiDMeKrEg50x7bei5uSCwpVF0nn1tfnXU+QPjB5LfDyhWTZcHnke4Yz/tIA8CIfcxGaqbFdnMpxb/JtEAt1gQiOaj+IYLAFD8tFnXmQnHQFz2IFy3wqZvZxAElO2nRxDI77U/i+9YMEWSCYEwjg63c1c36PDg07q9/fqbSgqCizEGAsJp3X0w5HIr0hHPzaM+wmsWEsTHxL1prVo54hC2CJL/+QkfkPZRCYuzPUeuNtD1tXEck57y1bvkp1oiZhOGJTlgjGs6Igc5qkIFGXOXpugvK5rOIrNNHDvXX2lNc3Ii9gzdZolcUen08IrbMOojER7B3YSgN6xEK0NUUljfTSSgZMUzI7VE5M9A1/cxh90Ez3TpLjE6xOvbhTwCrHXMMVLzhb5Hw0fS0KO2X5Tb422ns98sW5DzJkcxYiZJAc+u6wF+Rl2dE5TDJlX/8BABMCLKkbjrglrVgMEGuv494xhhUxw/LT0hQ3xLe4vTM1BQHWRu8byI/HvFBCkBfmeCOdDscG869HvM2r57UWrZWANfi9qdO4SjBwHVRzdlFXnsQqZR00OKB5G2i+4oC51JikNq7rD5I9B1PZW9mHyly/WNjPLY9ZvTe2XJy7K0HT6ZpMYvAK4RvFHBcKjL3dVNGHRjiACvbc9fSi3n1AGRP+svG3DdSNvOsfKcae+oD2C9e1AOZa9c4RMXWpurTtSQro91vC6vn1HOih+na3iETsvdmjd3btrd8LOAPleCbVxpCtt2vDvKBtoYEHygGIHcdX24KBhppE/dPJLks2sl3G1cxdK75BdWlNTQjBzyi1WuWIbqJ4TZmFbwTcBqzbLI23/1SA9fIX9eL0/fvZNsdBt8U44fcM8ecfta1rahiCHfQDdM8x1Bw2X7bJuLhcqDo7eDkdflqPv/q+4PtxvHdaZh1EGBIEHJJCW+nr7/Oz3rxI4swaRMd2aevT7+2Kv3pNuRJQgACoUCoGtruOhKQ890u+u/PGnsBip0iVHxz7ks8+k8ud3dJvYhyf6PEr+7Ew7u+4ZTOL46DnlzHb88C/ByMet3tetRW980A1DUi+CflwQior4Tqm8akXtwDicuhZHj6luUc4dbeu8K1XTz/ptj1sTfsKZPa1n2/UFHea156/bH70yDvn1FhLtcyWRkV7oXcf/Ccdm9Siy+Lgti3gkUJYUCbCcz3iXoFHpJRoaGPBEIZ6sX8oPHccYhZX7Pbk8lrJP8O7ax2JVMw1G291PBgmxv3DfeKlO6UNgMhP2WlR5is9A6wJH9ze65G/JJ9iRLyAV838svqNY4bF/Q/LQgNabciJ3ZuWRPzcsP2cevG4/DoCNf70rIqlD/G9qT7QfNuL4ndAyv7YiohzomyuVK37bkHn5C/3kYyCMrtSOzGcW82uMnlRzf2cYX8lvApijYU3Qe8wMEeaaCXwBUepO86i8fH8PjYN8kGgs8vPmy7uULuu8k9vfvVlCxKmVDz/+UbRTomI7gHj1W3QLJcjeQ+shKZzHFUWKAO08+5xxCiKedNZ/6ewnrN57d6RGlGJ1dlYXpsdBlRn0qAEXldmGfhs36/KRqiMbRzR7g1N5WbXUPmH59AQj7Taj2GIxgdFWY3yqQ7a6lRyB5/PFuIFtW2oBN2uxcIQCAqsJ1zd1dCvJZn19IUxvLdmRdgovpCYLQE+hrvBszwve9NL/816e6snFIKdtt1Zap6P8ZyZ7HuycRpbWa33Brh1EQQdnlIxq/3Yi/R4/HHxPyZb6HmOQbxtG3x/quYUzhtSFoSlZVadNShLyT+EopD2FWzev3UzeSaibvXC/95eO/N5J5Tq93OiG3EsHfV7wF6R6GJwLg4yfLGyviScdl1c2EDKbx/UdetlTUGP1YF7jPkVQ+U4NPqllJOgFygfRkk1cClV1tWl0js6hXf/m/PAn5pfup/DvPYWiLEybQEufS0p4V4k+JPgvt7rdJRR9//IZgltl8MVre34wkItW5lfr2HiKjnglS1FZNbgTTzDENjWyiz//qMOWoJA2QP6n+nb2JpJ1xCPAzoxS1MXaM8CHRx/O+m29T0WUrkE3jemD612E7fAoXfJipY9kQ4X3IkknhYzMzl7nntH9lMinO8uGaaDt7mJRiujj/N1HFBQUAWuNPWAm7MXdpWEdGSG0Xf+LrNvdmU9Hv3/r8HXMxruj0FOQSY5ydezzO3z4fE54L/lwu6YeUVolCZvg0oI7mSmBmnuIFHP9+JQN9PJeVpE2EpPlvRoQplBjLY3nOjCo/tiHVORdBMjY5IChnt3prsu5T0bY9jdOxVv31ZtRz5gGDA6FspcCmL8V8PgwFKDMz4VIU6v4y48Ra69u5rCrvUeEc0+fDfvvlSgwWwb0T7iYmPI62TCrI6wSlO73VDm6jeP1kpVJ/RWfejOv3/YVevV688pOQtZUmgnI6DLVpAVazkn7kmEBN/I1x2Li1o4f//ru/X+IflQox1IWHYdDVuTmXdqzn4tIDm5kYIEUX/jei78vlcvXv082gMswvCXTw6CG7X6HE5cxNzXBne1/Ev87JLQiv3mXl2Nivx9E2wReaPNAazUg3BnH8NzA2NykB0G10yZN7ydwJAGiJVep8Vah0TNpFDwCqBACcXd/RYnlFLUTeyiFF5HPhCuYV8wPE9LwjsUAV4658uOyi8AyTgU769PMIp8XDK8oreYvBhkbrQJznWqMB+uSH5vVrkC3d6L7KI68/a1qnRpwuBGhJZn1zeyoiuZJDWFRrOlsS7TC3G/oRaVy10h5H5BmQ+2IDIO/k8NLlkuLJasbhTKb/PfSfIQk1q3VowMSVku3xP2notQSC21f0Sdlk47JZ7V8fK/QkUcHSfjNFAf9cC5sWhDfsaYQmAJdE3BxLnjzShlSP00vSmwkm1nTf2+SwVIlbsQmfnsv30uWvDtHk0skSRDZFtn2+zeM1vQBKEdJIoZTTPDEBtNKyd7l2DhvuBJkeP38OXjaJY6hqFxYA4EOsPa3oG+pr/zKjOhdjziGwV8V2NJjkYzAdmltNtvlJkyqRke+3yG2WtHtvZwB6G7cPO/1eajN1MkCuOfG0iWOfbEBqJMILAPglyo9r0WBSdEMrYP6kOLaZy9f3+5Rkjjmw/mSb0m9j6rISQJxdumTcml19kwryZgzqOYScY3RVZCEzQDR0XCtwy343s+gD2koKgOrrGFpaSln/FrZ0iwc0zPL6KGa4E1aTDpKvk9LKxpLS+sgxgks7WJ5R2ywT9mc7pm3m+g0EO7CaYSzQtHrC8ZRTxYt4qfHqAfjVNjwDSaPbhjXOTiSd3RLWNCjCpdJyzHLJmO1S2RRzTMZSDcvrr47EVQGenGF4BDLiSINTlAXJLE7RciixFMBsugYZB3gXudkBIgN+NeR4OC+KW1JNFcUu2fbrUuIK6DJLEn6zHl0e+inJlVUB33cczi4VPZv8cQjvLeOm7TnThPI2+WJup5GW8TCKO7rCAK1RnnZ37xa6z2G7iniKhGoojhabYMockyndGzs754mJuCP7R+C8rb8We5Okpp8Wk9suRd7L5WzXd7i/c5OIu6C7PYvXKJut397K1HUp8hTeirEwv+URqOb//xnWg0rzVQEN+s/2jM2XHZ2iRD6h7c5pe5W+EAc/QnnbKcnLitSGyDbMJxFyBzAUpfggJvHArRHFbWBoUfkNCUiurM/3dMGt7zIYoGVOfVA7RA85H83vkp6N40/EH0UYAji7R4Xh+fNZYmOmbV8squsKP2pfC6Xn26/+5YbaaegFFnQwRZZ45DgCm6Sl7V5W34C4BeW8V7g+Z1hafZnC1CgQqpgLetM+ih7l3JmIrr2pdvej6SDTJJ0Uldboff/LZqRx47C+eMtEchr9CIfZxHeTgs6pVTGxdobCq9Isg639mVTeuO4CGWqgFkw73RvjtycFtOEyJuDPecfRmj8Hd94rDpBOdvwHhAd/ljqSqXLffDEdSvnkSs6xmjGkceMYGAh3OXY+gkJ7V3ea2tGZuL1pL+imc8+jnZpKfDINnkrI3jcu7RwhlBUa3CGWrEWaGdziB4vf/iJ+Qewk0w75YBs+VVL5hjjFU8/Wa2FArfo0oEGMUx3MOc6V/pKTSwRQ2sZxpXaZ4JFTx7U1B0wo3G+B7PQPx8WXGiVZJdDzqs9673b1n7ve6dOr3yJ5J4InT+lDbnR/55ypGGS7RRuyWumx0Oj096bZPasMWma5XOp8BabUNA7zu1ON0VVbh50w54vnzQiscUTMc3ldaxtRetdQbGq2sZlu8MnY2Kh8jYFEH+MQEXWIs2VdbpoXZvWrjSX2knsyB1ImGckGq51HYU1Ns8mQh8GrnH4hY3lr2u8tYH3TznOT4n44SidSpznOdfO3Myvzdp+tcSQCgGx/wv68nHNwL7fuhuu4trj1vdbOC7bGaqc6kvoDp7MqgL9iy7ZkDv4oQH5AsCwAlOz3afrh+VFFVbarm0/OhGyJU6fdIFlBXOYqbl4YCNJYDOIYAODl5ymvPiMllDbZTqJLq7eryTS8WUFCwSY937ZxmfpfexQ54M06EZ6munXawsqqBAunf07VYjYNqy0EFClIrVFN2QepiCVDndWha7JFrriZ9OXzHEf0JLMU+INWtlyh80vM/QLlKvWnp0z/XDw7zBflfhdlIQvbK5+8cI1VfTMYud8ZGgN9t9HEB1IzY7m7BtDTGEg9r2HJ5RtO/x0VvrZ814zaLI8WuKSAhvm4/6NUl4wOnQG6jXUM2UYrPDtMJyEILD0kKW9F3zV9C6In/yMhiiXRclnobO98NXXsyZpGpkbdW4FiWRLnJ6WOs04eXsFbA1eV1xBy+e60pctvj01ir9SYOJLGiGFSKNx8VdRd5Z8Y2LvwbMiPxjpGbaO9XpmQuhlHAz29ohxdh+odvy73eX4HVzFf2H8nelICaWoWZEHbHWB7tvhjylCXPuRaZko90C+u4aHnL3L5746ov1xSAVvX6BlgeTWmK8KurA76SJyj26/0it/weUkNubCNzyGDjsOe3DMrMTORdkIsIz3M+YYQme6RuiDNqJeClHAneDSLCfOfT4dWE8FPTrxvj3+N5hkZk30//oMjJcvJjHNagZdJDO20X1xAfT41QX5wfu7IlgxvwbQLl8aRq0T+u6PBqhz2a1CUYn8L2ZYLlAfHLOAOJ616ybhIwHxhClm5LZSeoTIM1V7BABAHRA7N0Xmz56QAT4x8+S/Pn5MG6YRZlLJcnKEgrL7T2aR8V4CVZ8bpMW+5xoBtjFtHm0tY/Lf0nw+BCVsMSND6RnPuSuk7tayId9SI/bcDWGnjw37bzNoCzCS18s7+TKPL7iy9tEfu7DrcZ9OgU1HAe+J4srbg9yeRT3JF6u0c4/tNFcpvpbhmhJgeLZi4uf2AYpO0c9uQH+tIf6nVHMAuPRyZbBeXzhZ1b35uhpLKdx0tWOOEfFkpFPnBksO2tmzM+Y/PJXY4Q/P0/b+PUgZrLKpuBdgdUc/bJ9OgrkxFxkbLuvMpq6aKeEm1zAbSayZOCx1X7wcc9Xpm1IEgccOt7WJHwXA/5GrNE9lcR+S13s064On8kyvpAviczisii2cMp0oNg/qq20VdAqi4QoDiPlecjCVVXGUmHt5bRzBDk27y6sPcAK4602oIl0SkABYT4Jv/oPw06SYUmbxC5VB2OLj3N/MGj9tO0Pdj47BF1DhUIMg7Jya4zpIwXdI88beVMI+rn/bjijMQaCNal7QDs+Cr3AACwAuSSDMGZdj/ckYcz+kiGf5w12gNq9qWrNdSVLvzbnUJinwsqCNrU2Ed/oEw5i+iu3YvskX9T6653h3Nd0VbSf9Kr3ccRTIObetUSPGoP8pKGQQQL46WLSwOBpaWjk+9EbSeObGt/SLA7ZImfB9eVVzdXap1xAvSqHFMqC93anrM7c+GQiTeFKUWpRfkY281QAMtvQI+AutDB1FW/L/zWGtnkSbkO94xDySkGkb5xYPSrQ5TnOgeS9aHp5wfa3dX3T0Nhzz8uZZJGtM7J+agckkBVwDIWOfoHj8RlE6322F1b8OKuW2sBnIs62Pp9AhHQ3lXlCHv7kyTK7hSWPW+6VobXcO37UZRPH7JAngZnnwaoIlKCbxmedeuZ4CCIj/2BkoM/PXsjk+onW7ogLpyij0RdJuOJAWghHxfT6L/7LwuLT3tlIz398zYVIZ5MvdmiR8Fz+VuHK4EBT+70bGJWTCRlh0GuHnI4VXGTtryY+MpX25iHyug7IEg5+SxVd3dK8wIcVKAeENQFVh6AGiKtm9lqjMXCNqFk3TZ7R9jIo8YFncINQkluRLAXZxN3OlIfOoax9bkmr5tpKCOrqlPc2EA0PXpb1a04+aVXlMlDWczUpfkfoftj6l/673dJrnNq/OH26360NOgtdT9E3DV1hVGLbHX53HT+V6dG8IO+ealFhy3e6Uap0fTjGx1OHRmAkKyDm31+0RcGMQnygp1nuur5oiGMqdDNK/1fCQ3QvbGcXNSb0SxGUjaq0vtcaty7OJX5+iCXDZTbul3CvLOUd/jkvtZXORuCO+7oQFttcQMH+ebglZ3ro3EJ9SHGQqAiIpLF2M2c5zHNAt8XDCZURWHsmtROaJ496HIbZkJ4FDLuE3kYSwLYxITTL4zKAWaOa+bVsSrnWtrnRkUbIFkI5U1Druu3KC0re5dQtllIFJWstfdfn76T6eZEhVvE41Kyr5ZCWxPNke5LHSUv5pLIAA0nB4sW8Wu3884ku4u/waVewqdUFob40OsNTKCZcNaIkb3CJbNSnZ3fkZT1eYGgm5TB35yZ+BpMkmgBdn7GOMEk2D0KSEV82O/QopBAV1iGpG1Ue72zGpNbydn5UpndRgtT2+cUFItkycAui7RplincoFp5689bWZfEVPANT2Gfirml0uknKyOhb2VQjy4ulJI5zsDO3fBL8GalGU319bauDyzBmEy676NdZx2J3w40yq64WqKT8YaPEChyOi2tIIQ10+xt+TcHCcCi8GbbR3GvDE240QEgHgpNY1rbTncjkyRGNbF7fL6H6/M3KDpTHvvmTFblO98Wi7NOTBzKBNkNwnOHsgmBTEIfN55jOQWD5sSOPhVgdKdvaiKm5zyKNLJ5gDHuFpkIi1e365KFIX7hVriNslP7Fpg6oJ0fO9lzlB6JIBiA9DQ7+qy+Vci3cmBGTQq7bsRt3Bh7bGbl4Ycy8wA1DMTsDdOD39vzjoCrVGaRYIrjF1OGuFe44msCNIlScn1OWaRBibFNeyRByqD43J2ZJRMLfs5xUqu8LURsM17kOqKLYocy4U5Bx2kqs+5n/gQWHb+UINdfntXtl+ZPfL+HtkhLk/1Va0ou/QzD+cODz8DHDw0XnXnIsxQa5rvOel+VNoki4U09mktch+zYFZU2xVrY+6S8xQUZlp8yDiSmzxAi/xKrsWSQERVXoOfxLwqAPKhuHS4iBI8AcCa6++XdOS9I3KYX+pVQFU9e0xHX8VseYDF7NR2RzHW7UZ/D10vrGu5b0k3ciwOzmot+En/afdJRNGgtZgxC1DuzALb51/vKIb7cNHRtuq92vD0+THqFFW1HgGm4G0UeYzcTOujtI2127ieg+e1BR0Ev8rZPJf+E9SmdOZVRe42yxI/YUbnwc42g3XNOT8kk+KJHMuCxiAbzT1Nsgy4QarQ9cw64p24mBVBzkuQpvyA/1nPe/ul6qrtElbCbQ9ZgdYl1nSIIiX8+JE53SsQLB2BMVq5ITUoRKv54gZKu9I+Tv0hFRuRBeWE1ZiBMFeRwi25wO8YAfJLdFeFBmnJsQSzPHSD1pINKr0U8Mt789E7x7xA67hPt6GuHUt0v+rd3Ri/chyWib7SXsunIB+jyL54lc2upDPlKKSuLYweSC7JvBd28BpymE9t9FXrGa1Rrgq0FzqY467ArfFflao0NB4xnTXfk+e9msYK3xX0iexGp5Dfs4LdFkv2agTx8tuzOWZhUChxdqkx8v8TRdj4kUvF3FGb0l0m0+otyBUI0i7fZgRjG0YWR5Tt+KI9LsZYB1NybeqU3FBfVNSMUqj3veI/IdgSf3RN1zn4npHOYkmKRo3g1yehiFJpKPTK/Eg6/ZZ22H/ZJnBEzD1KVkbdnsqt2cYOEGMbJuauEDu++Iszq9bmcv3DN70DLRmvyKBBvndgG7K5I7/v2wmmTiw5VyOwBdzxUJDHD+gl0aG10awm/1A2X/qvYFKOeYI7JTJosOVEEDPsN8M1GYyVfCPIh1dE5jflUnsk4YpwzKDyK8rG5Ky33D/WL8zmjgyffldzQTmJJUOK3R5LPp7rvd3nEa5q3bAC0shEPP2/WfqiIXJjPI6fyjzH/NWkXa9qk3Zs5qGorx1EFZvf79/NxMiNSZBfHNsKNaI+ycUbqTMP50cyb49zx/0/Vw/fllAZP42bnzw459/EEofS/m8zSmszNkqHWW+7HEZUO88iF3H54WNW4y2aBIYb5BlREi32DZmRuy3NCHGti50x/XJr3dTl5Nx98LOlzaimomjSyCJzTiY7Gz5nbPgreUAbsWT0ZHRg2YwWtZFDn01qsXHbB9uKmSqp5S1sNSMaHhElPsK2KVZU+yrQ6idTBKZaN9T8F2eBaxNsxINdjStBY0tT2yluNqgMy8SlcZKnSUk/jiWm4Gt2qyNcQ4oxnbFJNTQVYtc0yI9ziC1oQBgaZcJsotANc5elHQEjVfSHABWLmu+OhDTIKGsuznZE80Z8KFtss9WODSqDg5EaRmcSrMH8pi5JqtEdT1SS+w/eSTHajY1UphBCnmXfDnrjJFOjlLXON9K2yEBD4+deX5NsFksgmiOxTU/sQxmuGu0j+HowYmfZFa6yc4Wb2cxYPp6ajUfVGOnn9ZZSGCdutOxHjyjs0frzA3XjNa5jAkhVAfh1ymFVQHN6D+CoewiU1w6mGJFj3b+mJjVEfjEN10oMMh76fm50KLxtzcm2pN308I8O8PwzAj8TSauvlkaIJLYOyLZmGpg8E0Y7loyf6o5HjG7n0CECLQ+X4crqCepDcYP7OfwavEkRBMQ+yDO5MMbBkOZzdZM1jf0eX+kK5kbEv8tJPUsArj8WXVYObod3mDPnODAFYE7ECpKdbbw4v3ULwaSTbb//j0+aoL+wz8iqa7E4BXhV/DHPTcP2FPZP/s+mdN7hRjuE6lSfgrlR7GDfBznpbPSXFoQHErfsTH752x5Feu3DAbxdKVVr3pucmNJy/bgeqyW4y392omL5ly30hu+E+FuuSNWWBumIbiUFTzmwVTrv7/GdPeDXHO9JVgmEYcdhctoIsNxFNNMNPj0hdPebatkGWNKH/YVvDyt7trDzyDtizYL0iWGsBOCf/8hpNPz4r8+2h8EhHguqGWtNs9ryJPp7+zSdKY4fflrz6ncbfgZTb7t4Ld0eLpNJPLZXJLVrtGHPdHuhDa8+Q2OdLw9cAF7BxTkXJ4W648Km+olhUIhy1ct/cRxAvzONNjTyMzqBLLratXH/mjHKPcl6r6ZqjjyAfbe5TCFftoza6QALc57aU2OWxfEH13vaOyuAHzABWRYFABDHtGPfnsHvtj8LXQqKKYT/xZOiS39nVaE3hlsZLI9JAof5BlOUzmN57m/R5/OTAe8J6nbB4KdInkY4GAxCF49bwPLkS6cfBLTO9VCgJeecGLPyhDxoGDE9MnyLr/6vzwxiaGo1Au/QSEZ5pGLh8t8f5b/YvMRhPkKndy0MP5KAReRHRtXL4oJLFymKZWt9j6BicT1NLpO7MQG7AOz/sfhqitM0X/6XRzW1+zqbo76CFFTjf2/UY13ykt6lqSpCeqOhNe/szzUc5UrAPoBSGDKOAcM4QqVsZ0pnwgNM/p8do7DdKoljCDmZ5s9/c9JAHRvfVohCys1Zyb7uDfOp989Rek1JDb82jLZxCLy7XKL+wjqkBPW/SWKIG50b1yiJ/w+MI42s2lC87dgVaLH6IOctpYxah0uYZI1jvJ5kAPzTtz83Dq/JLoH45Lh7BeTfUKgNCd0T+MBiWCcz/pdW+O0jUwnMk/vEOGTi9a/M/TD9J90G5bu9MmlF7F5abKls1clMew/35K3PERk0jLZxODg7dmZmXgeNkB5TOyeu2M6s3FmlWQ+ophJXq7tAYX4GPmaCSsY4+MAK17bN/N0RzLNL54r0XwSdOxmrnKtniT/Zc/JaQrDehZNmP8QhMBmpU29goQb/fJ48QC+GEQOvW7/FVisO81957Dh5PMNWRBywCwVAGwn9CjmBvTiWq/50tfmHkR5GS/AA2fjEdqvX1hEEXiQI3S64RYSikM6G1wo+6xD1E9EV1dK7UtjQXKaxQByeLG4FDrIJVIpqahhGfn0bIpT9Zkyy4RzGBgN9htvtf1fHcaQS1sld0mNoRVczKptPYK+fGu7PxeG66xnL6ztae/7RQH1uJdDuGuqcmUAheFXl8G2zz7vqvfrORapuq+Xa5+skv7+hJBRrytkNCRPajFQJIC7Jkxx4MA7xxDAs8yNF1fT85SsZgv6nqGDeBgT662UmQD2BNg0dczR03YZsT572/ts1jMOBO/uI08HbRm514SIBuoZwb8XE2/OmQgHiiKXbss2dAbTE4NTPFpbNW7fYmWko94sAM/MlLLEaDYmK+UnLFwWIvXZlvhzyjlkVyFCoHLz0BEbF7MEwwIzsKXzbMQqQURG7EtONc6M92pxI9xGLIa+2D9esJMO+7HC+JYX4ReC8OZLin8E6zXAXd1VAp7bjsG0P6/fske9TVU06aYdKFkojwNDKzNyqrRN5ST9N+4rgjP7cTMD377tNsqnRRLj2WGAkqEJrUw3++e3FrJqQDARpbweRGqcV+VwZZWqF8+pNkyoDcio+HaiZGgoru13psIO2S1iZOeRZwW4PBQYCwLPceTGlfod08i3H0R1eddzGNhT3o/Ka3hWkof0C9u+02awRAPKWmxhvdAO7b78SQfTncpHH1soN/TOtOokhlNaAEccnHUBUbZ4jV2h6iUjp5gkAoCfM1ORKc7h8fultJ8J510P/qVjf3EtF3ikjgjzfRTfcQYuDlJkVgFcty496AoWm42hbh+OO1smMHL9PMhDWTmkslWgVqTonaBOS3WCn4o5+6ErpCdQ/gAxl+cYfqoIfJDWv5zvz7dDegrR7LA6lUW4HOo4F81JmqYjNMLqlpz6ODYIw0v4dqw3t1nIuYvoFrU/NjUd9NRNy2gUdzW7zLB7ztgZYMaUTktgCdXsdX+owIRM0WljC4hQBiDbIvBGgnx9rE6yDNumMQ95epU0hLD72ecnCizy/mSCOYtoz6l6vDNmW2zZ3WKladvyW4chcVr2np73cWc4Z8Wtj37F85zXr/iOtONb9J7swIgfnP0FdIwcw4hvtwiwqNJQYy+RP5fVEoWLYjcbmGcgmFzvvGn9dKG1+pyNdxbwXYRSUn0WjcPZXqTZzhD5atgELpbmggoKZRxZEg5/cjUPmaaWWXZhfec7+F8C9FIY/shQAuZM9i4mfGca8zxnTamH6AvcivrFG6bBLIxO+T1et1aTwCaW5h0B4Ta93IaVu15gumL6zCJN2mHdrfxOJH4HD2ar1UXIOVq0zfAn7MbI8kSZbbpu75eBeUAwBPYaqXRoWhG/F9aTGONKEvNfikaZtWMpNWg9/c319Voqj1Jf8yDuldkROIuk9Hy9l0K09csTU8Z/CwCrtdDThsmJlMMLJygPV/WxfgboJ8ceHZOyCbzaO452pUzbVymsDSNWmAJYZG+BDqWkkzWmHzccb5xQT3PEC82YEbVJzxGJhKaco1ve0hDo0zMkumofHNH7tTd2G2AqeDq79f5RyJm6now6XlL3PlwwWK8xhkIwNlIn6IMezulrIG6GmOq48kN57l2DcrPq0OR6x3YqxpZH2MAAOwUPd/r4lBhbZHnGTUyPkfwq4tDkbXwd0GCSudmTwEWFojXLe7TgvnNaVzicQdj2CGbPJwneOv2DXAY6PBQgtwUU5OGBXnyNKbPYSGufjZvmVYBu8NVQtP+ocWlyNjKsBsN13zXKzot8nGfeyeFUu6TDjk9gD4Hi2qEZVjoKtVbGk0S0mLvOLLch8tUo947C3dXct6CtNWI6pp4Oz6ajVvRe9m8cVtT13Zctu8+i/vm3DrBQX316gOHzyKq/vxkNasjJw0DidQCFfFeFey4ZXamCBSld5vFFn1aIIyT5iq24w4/qsat1H00tpbkWYBWVk9126yRt/bB1Ycky4HjVX0gpppaMJweQAa5nRUitCaIiFGYWZ9OrkA7lqxj1/c6wqtjhXX/D0SwYeuWlEaKb0bYfSLsIzuI0qbrC+/Ei5iJkRGER8TIRpr2/Uf1pte03jw0tR3ESgbKpqImSTjraxRXf1AFqAYHnmGy1zjYTFTGF9HwRDSPzPjsSAbKDeBuBjNOFM58AYx/bDBelk6beqmALWqOwNHJcVoDXWjilUxEbbPoI/Gc4BvfKB3bK4totSbamOdzYH356iyGK824b+/DEpAi2P//lPjtUTtDsLGix4qwlnvx1imz5wAiTe4H4y0XaVMMCC9IrH+Y4wEbED3xmpy5O2fkurLg1leeli0gPjgmrLOta03VyfXXo2Me6msSXtxpmNb6QcP5bhw0sUCkazqjWPZTThjHW0jSMR/ukBiZuJiMcyvCjZLmshDt+tkXIfjFNogz9uDlF6zFR0jrNzTEOnALf9QGwz/zwVnI78kHUm4Nk1SCuur3AP/pul4TJP6yM1ncVKI2RsX+QMELDfrgf8F+T++MmqYqZVx/dFpeKtNNKjhuEGVNz0JWvPN00g/EW2p3xFKNPJsJJDaNfQt907m0MIS5nT7sel5czSfzD5wQ2o3HqOVKPCncRgjSZV5Zzb92SRTl/78b8pgKU7MNI9N+p0S6SYJbYOczNiWbWno4SZeP18/Ctesp6PgBaUgffNNJP9/9WU2wRdSk19iFg1eMUbOZjZPACJ/iM3tyA9ypGqKENL4+27xu4MrvDSGRWotx2U1WEiZwzNXbY1e9LQ0rHGJWtsmwbly//RicjnYgI3QH0osb7Hi7jaVvFoVHP+MYNxJoCAPCIyklwJrKrqeSpud3W3Jnb+BWjmpzI8uNeAHuVLj2+wbdijAUPCnIwsguEZ/LeH9Wxc3ELdA53Mj43jkXPFdAmoHUbnuZCjbEhqikyAcvhe27KfmJArvLyuFZrA0UPLeUqUSMv08eRvhnws6mHAEAL8mkuMMebgAeI5Xf7vDoXuwIpOedogwKGzwR7jspzC4FJdYWhUJUJ8OxtkTyVyT0nnZU5H+FwfWFIkrRY7Zyw9dR6rb4Ul/Scj3ucSmu6pRaKrHWP5Px5Sl/k5sBKZPhbwkAUIYlSKzbEAw3zZ95bss2kze+32vU1t7nU9tNtKbVGaDXbuSQZtMKW/SUfHztuBPBGRy//gZNTn2gQ7mDB6LOwhhr7RP7SzhSvymZNd/altVAXLBtnZS3IP+OTPBpjagD8OtSUXc3FpLB0dOUI+Gez0EzQ7hxDClOf/YkydJhcnT3aJ16/MI2RT3A9VcmmD68c5GKIq+y5dhvRxg+SpVsTTdSfnwhHbyhogyPDSsrG0w4ryDhy5EQC9g2T1BbgLxzPNb38wzfZZPras/HuY2tUEJMcEH8cE+FKP0I3lRCh3wppORvPScv95UrpB2ss3rWxury6ixckluavi9ut01KocbqK8Q+PMEkBcpEPMu4H0eAjTux8QJusm/+OAdgMtma3Ea29zd2zjHNX+5710ekA21mZPgU+NFStqC+fz/sRe+0cs5+K889s9NvkpkDHpuJkop240lIbwXUbs/OBOOr6my+/a/vO6fhh8Kq6pj5tnuLYzGckFIrKlNvS2I8e7dTjwSX82MfK52hyJ7SGNKw6dpx37FtIIHekGL6bx9Dax1vAwPnto+8Fv2v4C9QB8iB8Chdu0Trv3ZBcVjbXdVK1t9PmhBavNaR7VdtqtVy9vdCpVz61jnHvSWxiSsFan+t42rqe3J/ZtIDV+sDx+8AvjkEnhLsllJoRxKKVly31iaNu1rdSagHJ3B9r+1zYi4PZtjN4kOMk/zNOR1nPbqJdKxjp+n44mmcu0PhPK0tvqbaLG+Q6NRKs0yXYJof0Dh/B2McT57Qnh8ql+DC02MLxZ0JWUG7PA3JuOUJU2/9cEaLfAWa23Ag0EsCG9d23DbsBt5R3DQwPiYn6wT0jXRZ5o02uDNZn2l/G3jUS8AHo8D0QzN36QHz8gLH8v0Cu7zGA092D+yfXS4B6U2Xp3x2jKKzjLLO2Nvn+Th5Lqy9xJZGUXMW0Fz7ltjFrHaTqaaixh1QfuGUqs6b34LzCdpjTX130MORzP4n6gys4PqmWy9U59M+Q2r94W+50T7/fPSuSc1SdMydaPKB10V/ntfjNhLM8I5lrc1ptNRdu2MWgdEXM3fngCAPUhx+Fhgoh1XpDPoHmh/15j8hQLMg47uUVHWLlXhHm+NS6+OmMLzQL3i7CkRkyqiDbYtgc1nVLcflF7kHMFxUHbuNwAax1D6egWP8os6fPm//5D54bxVdXp/4jnoSgjfVGHMtaQA17yI9FtexCt3ZzUMbg2c+wF0t7zaxosN6gckt/SkJlY6j7r5nhmG/m47fSK0hqasrnFZSR+nLUOAjVkHSycifR/4TgQhubqkYcnIOxRjU4pNSuMpLpFlNgpVjwbpKKZkibe91PZm+StnXUrSt82lsvF4WgdrpGO2tzidx2wcnEU3opwzSv++9giqo2+UaDPBwvPFW+2Z+s1tQrcSFhSZ6Y/IRuUupWSVqXy4lSY32kmMHVt47pBal0ZZfVlWvWT3CKV85VdDECljRbbi/+vzwopcAM8vflztNWKpXUYL0xSNyGG1kiG6z/nGew5zDstGGtR6SRDUuMkG7ZhrMMkRPNnucXGVzj7y3OO9vf1mgz/7RFGaRSYre2zC/6+H0xaZYV0wA4hApXul94AvaVJzdGVFVoD1tSR/T2Xr1711DasdZhCbP40t0iLXAr4X1gjwiT/6bQbg6IRnzH5qLnXf3mqAihtsGOLKP2OyUKdlEMeNNSoQGkwma2ZNwQ/PErLNr422zDWMbZF5y19IQ7Pw6QTjf//rGRhAiinZo2WrOv/xQCeRQIt8PWIKNvJr4s0r9rxAV7FdrNsia7hlHHgeW7Zxh+sRqRvfy3nJ7kL1ArWaZC/etMyzjd2suFH1H9nwnrZD/cuhh2/IMxy5kzs2XTy1+w+Iculyer8sS9WYYG5DcdURFsQ2yu22VPvWNvwVo4uDBqHMHCZrwjHNvGqKpYI+blxWC5jXJmWS9uMf8/jkv00ynzw5IDuUXNb3Lo7pYzjfo2wMvvTFQN2PH9WLI3OQZofek4H42g0keQkSxLEB27wa9u4JELoUhjNx+T5wac4sIqEcrvLPmgcyR3BPm6Xuhm/dx1b8fcj9sgAFruU49Gxr6/D48IgXnK+bjYliju6lKIVtG1ngo9Pcb2iqBYGiEvdjGPJ+XsOgVl/FPRPURjkoTAwYhseK8LIDpVA8ho4kK0LE0yzG/LvtD11jfvhndoOUOy9pn8L5KD0kJNutdYeHXsQB2/4mJTTgbSZlJzhYtljk4V0A62YUh9hSfPVA7p6/VEAVlXP/D2sknPeQVLpF8ZhbGNu2Ua8ZIT3QsaCqTHu6/221GhzsoBNTLrVth2MEwWnTg5EYcN0f3W2XT838JmTq/PCys50fgymHFA/WadVSZmwpKOsTbqtSv+8SLQo1CQ9r3lzhGuHFeYPbaOStmzjcreOoFuCVaRHYrM47wxdd7esKtZY63yFT+PGkQpBf64H2yNbyLYB428Wj1uEMX48z68qJr+0NJ4F7m3Cg/nheYJsqZwPoXbGawWlPyQkithOSJk/tg1p2ca3dUwR8ckbx59+TyodOvkz6yKWRV8vpfGSu8A8yatxCO1WCCS3sNhadwNwZ4WfDADjVjbncddn+4Pdb3e4qf5yTWMiZj3pebRPfPiMlIEwb6Gq1zduT+x53OTejN1szGQvGv4N29jEnvzPP/HSWiqaHheZAuRsIZGTS8XtEl96lBOIGVpfal4J7u10YApwu7nTeiB+sznQdG9Vtn7wOESjGH1fICEDcUhhw6rt101elAJ5OduO1Yaf0vW+V9jLJVv1qIyXRDW59AvbuFSobOGjkX9sqjBnozwJ4Q4aEdhF7ErPbV5ZlGQIEDE7Iz3ybmo8JMs0NJE9v06AG81THmeIdnO/ZA1sjHAvz3mQ+XpKYEGwxfR2CnhdnCnNHzZs8dYJwO3MNqRrG5ti1ME45laviqeLnS21Ds1hvVxYFVa8QsOWCr4zDlvDp21ZrhE+6TURPG9+p9dYW8YdR/83eW60hVJnXrhIA2lJZzZaQU2jtHyHqLgZ0bkC2b+W7op4Yhvasw1b4SbVOLfjcfS42GPLsQBU0ZBm0tS8tasOGIexJyA7Kw1+hmAqd6zmmS5JvPzeOGJsCKjBT9IIuIBWo+XwvkEG11vCp8HOyh7qF/bmjdB/PrINsrZh6Usjx6o/3bAoFPIC7Do4k4f6fwa1x9PCCmhsS4OrOjHne6Yr9X7wt2dI6q8il4Yqe0Q22yGzYnVvJOJWpaX9i207blf8sFqHpOH1VVSonNlGHxkb20ScbCsfIML1IlcfXxP3imIchoaxYnfrpHK6JA2NCG7OI57V5g/aJ7L6IKMpkD22VJCoCOlInH7pF0hWaAg4HYe5c3qUzylreyhRXmmnC8VkhjUiguI2YBtf+Cto6YssM7suK3KXgso/s+Lx1Dhc7PVtC/zjS5szR3Nq7wfSZSH5wOdjNoP92YxktZs34taLIcQVMNsyjHdwyKad25eWE0WQh2QIq9VoZPvP04q5aRuG3fFXsGNZ4qJUu5Q66zEraRS5wTeiZvKc4+xiCQrtkrAipqD/jaJc2TD1z/Wj2ilq1X1ortA4oWFcbuu0tQkvDzI5ychAfiFixEbQmYt7tfPkKb23jV/1KGqKUyjVXrPtwG1ufk2tltGieJyS+vTNBTQ+2P257Jkgj7TNxkKPue2zojdpVfetesvWv7sOIR7Kf2SF2lKmLz7mUDZL+HdtY7sDCiJAo6kGWnWEi1E6/USHuXpOGWdyXon+EwXbGXVABjS5DB5YS97T1JF04rl4JcCHOb0UJFeSBmdtQZcZeyLHZF2ystL8n9jGlgg8MrDJpJBvEzhrHJfVW47H6gdoZr8+EWJ+XU8WG27MB52L6LXnrGtZ6bGba5/CV7BZKGwAlsaSMNUxEh4DADj2JxR+dWTbhMSYTRKdkIeMY7OkEixUnJFOtIHlX5Kec4j98c9agv+RP06q6W1Hvj0/PcZ6coUB8OQew7MaJALTC6NRUE5s4wY3xJYQgJe4KEJqTzb9Ky+dJyYQWI7EJA1vw7MtBTwPQwtp/c3invYCpWi65hMTQGuZk9Hxbh/7AYl4kExrtczBAbqUK3SlBX+sdUTUvp7F3HvjrUeuVLYVMb+3jd7ccVSwu0RFuTCb4n7UODJi6+4uJ4E6u/UX3DBTSFUXsBxsjx7rFeweme6ZrekMUiYTWF4mdLE8ytN/Lg/YIWOVk1nBtD7+CenAY7MQnbWN6Ze2sZVEP1PBsuJW4Ox7P2YcSe8Q2rAYOP1ycY8tpIzg9oKmwNzStw4hTX83LRcBP82pVTY7lO2hFdJ+/HOKYoqk8Z2oC6WjbYRz26ix5BCmXFx9Yxx+3RLRjImWc6/aL2ZiWFwfI238amM8vzp1ntNZLnyuR9B9Kp7HUrfC9J1rvNb5FJ6PTRTqDIxh9gzYqxjTWE8ow7bhbkwAoEqAqcFf/dMC9cTPHWBpTIuw7VfGjYNpTr9f3DMeI+yWobaS7Mf0DptrZHd0qxr2Sl5RoTEVSHPPgIXezozDeugx20g3D/ASZdutdFWAY1eKcgbzVkVkIO9Fm8Y9R9f4zoYvr+f4vsafP5mj740q963DmkFfUClCPmjgJLfcmefukZ9vwFxiTOnHPEBU98vqnnsGvqyFjnaJWEdsIzU3vtSs0NjRM3J2LbMYDYq/72PJaeI9F3daOnD2KI8/mePxC+uoilt72eVp83SFDyvozSuR5sUDRCTHEZUMdTvEHZ7XENjTbk1fWu1VDL+XHqhPKkfuvm3B9bZJaG2ugQyQ3qbePjAwlkwGyO+WJbDa9Ms2rsatw9Innqf6rhHTYho4nmRgiPLqofNx46/bsUVlzit7VV53WfMXURkFdiwu+hSzTh6xu/yhf+l3FPS1UwySrti3s/MZNkU+O6nr34ZdZ0bHRWVchqxjZPHKF9H8Ni4KLBPu/IiClA5Gl08EylJUsIymN7YBzVjLVame2MYfOvd5KUMvL+4jZ1XpzsgvAPE0dwdhzhXR835NG60DuZbhQ6/acVHej2sLdgwHk9jVwScZ6Qz3obZrXGz5JleAY2pVEAR2HyTbdLQOcY9eUNc2bu9Nb9aLUm0UcbW7P4HBTFDrQPqIktQ55rAet8oF8GJ02gde+8iIjz+Zw4hjwTmejtxG4zbaGalp4Oiv1CMUZkpP5mm7V4MnwinVhkP5smMwg30Wub8mF2laB262DDyU/+5qN2XbOcgk3ybhFXhICRV5aRpc4bpELuL4+m5v+LA9o9H5NAbICrVuo5t2V5SGhGKKpXwI8rrFA1Bevxd5eQLIVhADzRxpWQfsCO8Qli4TARTSA2SVxhiFzkfRSwMOVeTOBjhetwXLpGtgzFXaiF4PVROGDwtDnZGm2rXPzfmsPdA9UWkeNS9+beCkaayutie5ez6q6tel7B6yHQhXz9m1jKOJllVQ/QvbUFpivEJTe/fP1l7pWUeVqQMkzwt75bCUeEU3U6yYTzAleTwhp1vO/ZtjU4ZfHv9Pt4EjiuxSmv14uBw+lQFdw9pUhsh4wVKT1Fk7tuGwdox017WsmE56k1Hho7StA3jfKcwDxpFxNrglRPOiWj/Xwuc1jgrZ2jOO8Ypt4GwXnv91DbQ/Gy6Wor4k/g4+hHCF5pxDWFkVaEvVW2dgowlHh3hsMpY2uPlIll5R5mSGTT41joR8QqtV2UPYm60Mn5mIFSrnSN3vjcM2cCJiW+v69ycBq5xU5NHrwyCg6jmEXOJcPwKbZqJQskJhk3fuYFt18QA8h5zz/n4nT/IL47hcqW7M9bOWRiWfbE7UPladP6rKeUb6e+Po43Du33Yd85Vws0H+787cTDjkMeKb4W3DxrUzlA28UwDQ7foaDNmyrnHcOERpcnOAP7GNTYBEaP1wVmnjtG2nOrFPcPCMQ7FYTtHi34tbhXFliJPT5hwGFZuyI4/6QTvha7osAV5Rzo3Dwj+NNdbupdEUwcOqZFustAYvDOBmYNxfJqTnrVEdM464cvxIMNq2MT4/EfG09yHVJIa7O+lylJH13okWu21kpXRiHPYkV9Nr2uXl9cuECPms6Lc7uFaKboV7r3AmcVqZec2zDI/mNyPWWPS6QdviAEnerKV0mP4Vx5GcE2PZjRk8JjMf3D5p6wdcyT6QGbVtHOMpuW8ja0if0WDNXqqEslnzCZcr3RQgZWYPS+Vq756yz67dCbN7/zXuX9cGaTl6QG/plDGzoP6KfL3Vx0CQpqtTNpMPZj64FxCCGBZthLNrjT43jlvLNvZ82eEWpXEdCfn5MlM44zbIkakzuTS+tNmhnMb15AKBQl5x20qnVrv9Bi6lBUEnZMPKSwRaP6q/AqWDXN7siqo0wm1ENNTfhc6ViDcBmyC3o4YThRVLC1IIo8bRHrn5PDlPWOzTYpplgjt7uk4RnMW1NyqXGWQxx24xSWtDE24OBFrcIZ0k3hE8DDs4YuplNRLST698gTfCq0Ns01TrE+4SYvvF7FoFVjsf3D+SFQhmo/MDDjK0sYrwO9v4XJiF2f5JFEA+I5B/QV2byuUfVK4BQkpawcXNN7KhK0W+W4bh4haQIncmeDOljnFExC0DobBJvQxHFccANM5PuEteuqYTxOYfFRpvI49TYhwY39ApkMqgbSzDAk0rT8Wl03LF5lQuprONGjes6Q2Vay11e6vPEnYAXF8sA961ljrVJcReXjujdnrKjPLTKxcspxT6Vpb5BcrzvILIUGVUdi9Lfv3Ns6J5n0Sck/Rp1cSkeewfnY5VGOp+ghIAv+a5ni/wsFrRvf/2hesAlQu6Kr19a45FWCoM0OKuZMiYn68t3exaAH7IGAYi2aQqB5drCdbUhLviM7JWcPPtfDEBKUFxP8RTdJf/4LyjiDGbjLPOefX4NpHipP23rVH1txQOZbwSrwpoiOeu0FqGZmeftEWJ2kVPQGpvipnBcI8dBlzbOFWqTjoozarJDmsgb9kCrcU1ui8aut9vXWJ0LuaFzSv7f2QbFywm091pEt+NNjWlFa40wmZ8MxpiZYihYZZhy9jy/VHX4XBrdEPTE5xd8PrP5ViE3QjAKk2gbvubKb0W3vNVAZC237d2ebed7ZUlE/f/I9swEdAw9X5mLRaFNG99gXRm4G3RNn5qtPIKHcsgVGOSY64jw5e4HkvZG+oGzrK32aPNsyeER4naiKlduGsLoctaG+HIPpMekTG5MuhE2vYmrdqtfyoR3KsVzxBrL+bW26Su7YJVP2dXFN7JK5gjNwY4S4SzANZY1hH1pbWg4Ec2creRjNDY4GFGZYlbTWnldqC1Z9bUbzcmfkNkFPfjRMK4EwkI2UQ05bdj0ZX4tQ0QyNiLacymsipoJ4Hdhp6tfu/nE22H820ZRWyNZcE36zrO4fMZAbefd17Dxsg0DUFbDEMaxpEhQ57TIfaMwy6wPN1FQACUpwEnkjCZhvYp6XfT273qa7nhudvKqODvAbmQF7ZkMtvTXH6x9PYx0Rb3xs8lWZO1cSUVJiyfEdiu+EP7TSmi0NjWfdDQm3USROu0LCLeNmdm+7p+QoIsz+IhvePnWg0g977hwt78/aoBuV+eFijY7XrJBv2T/mx0+sRWHsuYXDNEZiT7Im6Z6uL9Z7he8gA/wopZXGKzSg32zh5uf8QqI4Nmq7fG0R8jHnci1HciiThdbpjHZmw33UxBMK9Iuio0SNe+GLxfmZ5abLO2qtwKjh9+d4RW8mPab8SHGuaqH4K+iYGylWCbebjdczc9pYDUBHkKNL4jG5tQouFcfmDciVx/ktVGrR1Betj1o2oQ2RZ06UleViAVrCi9vZQRjNsl3dYwf5v6+sJFjD3EVBZvxSLfDvLF1ttmot1CtTDgszO3/hNNnbSr1I1KOvIuqMq3z106CJso9PECmL/UNA7T8mtVQXWO7jRkjFW8skeMRcGr4s95wyUx4quHW+iS7Dah7ai/ZKwKT7i10j/ZiCmB2otqobZY7RzxKLbMbrRwJQDgLA1H7aaeKVqbS6/NhAXTC9coQteJwX2qUvx+AeZayb8jRFrXPNl76Z4g6RoHbpmteIP0ahe3qS93bcMpRWP85u56brEuCrA87KIhN5WBUM2/talEP8DYQQpDJrEAQr3tNrtbvYEvEJ1yTi2YdyV5JYgJ4rEPyrH/QZu+DFTeWKR1zRXZQhMUylzFuXJVk/0PORHVdJIQJ6Xanb3ZNG5siuL/aQOomztI+M7YKLSduFwBXc+mCNxAgHGk9uqsSpS7KcAlZaTmtlBdk2XRncJUFsBYSczLPfpBNS7yjhBp62TVMyjMXcdF/0wvrEtQUJI2cOoYVGz36flvo9gnsvMqguiu8w8s0DC/FFcPc08HAozJl+Wkf6z8YxmGki7QQwVhM59zLbKCYEbMTWk08EGDf9W6uYh4DoXZ4tCe8XER5X4CHJAdv5KQM57Zv0O0OOg+uSbefvWMLQVr+JjTk+KVugHGn3aonAeauIco4PbQj6X8nIGYfLvkA7ieKRkoceyDvk4NMqKaP1pNAdGmqcXxObTT4qfg1vkbKYAZGlM3EhbQo97OaHvEAl9upLK5gCDjZHITYNpy94LSpRG6iQCE9Ip7pC/SXehewHwKiRnPpwh1puUAoYzhvMbBMA+uDdC9m7NiDO2Zxd/bxmVGxzqSB6DzaSSMIadOV+hKz5E9MRoL7ZbEiEAgoKX5dpmb/7AM4niUuRIQTzkHAsv+yUTv84g6yeMoAUA5pm6qw4vtxhYDOMTGHxfI+VPtpwkf/tU0wS+4NWC35AHKZ2nK6dv/tXldSabqDGlc5a4RYMq7oBRRfywj2REoIfIA1FOyqeHpMX2S1UvM8SiAeRtuEDGloe6fqvEhti4MqGfuII3d0u6w9zcadt1ZR3q/eKw+KEfp5O2f+qQ/qxxoc3wp44+sSSYSMIFCTLYG3M2QOsRxn2UeZDP15D6QeMpYiCjnyt42B00oA7308bma5DsWNkHdnrN9cfBps41+IHqhHDnMJ/QQqQfiXlWVE+OYAV/kN3k2UXCp5ZzrExAhHt0/bpXZ2rOrPFwgGMYCN95bC5wmNWCY8Sy/4IT3RKmqx7LtZ/izAXv1Dnp589GGKndkCd5QO3TU+hDnhYbZhMre45XI4/YRUd8RzcjHb9t0YecLl4/jyiaDZDXaPm+EVUxNKNyMKDd56AXpBe2T1U/nSVL3hLZtCKnb2c9mHSBP8Cdz3cyNRl9btcYxwEuc3VxWfY6QVfI2JA3bx8CE03Hsuz4UjgiUjT+xlc5YeLYgWF/JNt28KsfW++Wa+K7pdhoWnkn9lZ+fsGI6LYvsOY9MhraZ/KbMR2FdnPFJbt0JBZON8skpt6aO0nR8Hk8hq4jJ1v3D9jFAuy2Y9vhpqooQ1PiTpRNXagmrqnoO5bVu3hg2+6a7MDi1FWg5BI9Gl8yr7LGKAxvKyilW8ib1N+EyqDwpMenGX+Nw2+o7mUNsFsarfy3AJ1BYCX9sRtTufapueUtOHRW8Bc5GgXH7eE9TytC4VWNyv5EF1RCmzbu1ISPkQwgrb0rGptiSuwFuv+LWUbL9etTwsy0VrTrkZYF+yb6NBio9FAL5Ze2Yhh0KqfAIPRRlFGNibVa7osH+q0eYEI/aSiCtvdwwN7hKZn1GUrYZ44l91LFGhRGHXkPweKRVxCZ8fWF+tS3HII5y6PxpfO0WuoelayiRgZDaqfJqGzG7M4OtGmp2VaTGSQ/+Vmz6Pr+UtE6ebN6Isnn9AYYd8lCWn74HPp2HGH+zEx4MDeaGtRfR0PpSdug2wtnKvW8fbsAtmpOIvCr9v/T0Tsy7ZAD+xfGktSFXEtVqUsiVvpG0khVW4cRKO53oAhSsyVBY7seoXJJKMwG3z3Un/CKIfXL3CMYUNNmyNioA2g1vWmO9aoNmbu0lQk4nURbMNtOIcL9SY+8PJrHuvFOB21HTk/3NMx2e8zxbMs9eAeqxH2UtbsRjN7djZWt1yc0xmnEcd1Exldjx7a7mVZ3r5VLhBuXX2tYjCI25lDnHtH0fL9YvLOgEskAv6WUfL/SULHBse2fDx2E+3VhbIE9cI6nG9DO08IIf3I7PKgJucxV/JdOC/Ca0z+85wl+4JFsqHp9KU1WnjmrzLdT1ealEGyD3RqVFWsKDtJwVtxWxrZOQ4jRvAJKpYCvGJcf6KYeLznYwEvIu6xXFoUUr/mlbt0dykuZNYD62lwWNHix947D5efsI49pO/a1xDBjoOSpRq3UcAZj7HRzZSG5Mu5X59bxYKZDN+Mz4GfhAvmVvW8O/ko5zCsAnk3EzH7Jet3ONhUHRQDPpRj9t2yW32RvDx/OLXklLpbr7brerIOQh44hy5jnsg6sKqBxJUArE/dZle1LaTCdWd4Pv6CdUzPZxabAFf67MB0GXgmTz1F+8nTd4JxG5H1fC6xStGJipbrTWJnJiz3CL/6ubGM4KjR3TaF2LINqcI7ZdxkhPM20LDmNUPtQfAT9t6tsbtEQYAJbUgN2svdDykgukFez2BqNs/9W2xHP4mEx2xjWZuqcRV+x8tQmqf0hdazBXdnn0+ElbnVEpnA5eanA2BDPA7rzIxGK89msuNsONSILOqLsyKMLtVkvJhGV80+Pqz2DahGItKD2o4fvnZH2eneQYPKxPTMnE9kZccZtl2AFKVemK5SUC/50isoO6uw8477u4K0CcZyciInOZPEBZ3vUZlY3Rv8qOLRhazRwhu7JDeevGbWsQfyECunobYfYWFMAGDImQVqGu0Jj+Ts+TVV7x4gIxceVQqtjPcZttpH1BmQBv9xyNr9ZV9gSW9yN7Htshzm4gxVwo9a5LHhkE81BjKiGIeN2Qc3nYxmwpou0zzPRxcOaqIhheDsNfDq7ZFokKrKWOt8HUWEmAvNYrZXubtvlq+znrnhxTb3RYkhKDWORn+MSV18UNmpKL//9T5U0KaW51S1JI7+xNQRnLmTMAmjeAS8ndkx4/vnTGJp/WXtrPXfVSoHJJGsxnaGh4WA/QGs8NxI72iGpzrJIp/dipmzYGeqfrHyA/jnR11VMjviyX//Exo+v8AxzNlvs7f9O2Jsjgiy6lpB0vuF5kMgMPQ2fG4qRtL03jcIj3vb03iPlLtJxIO7WXMhtigKE7BBW71EQuGclNZCzDssE3w7o9HKmDO6eJSOAgl//7s9CLhEQ6LpcRD5Lv767hL8DzRFgib8KLH52MlwnLGdUmTMxH8FSUEKwFIb+TdooyYhuCsBsEM0luWICGZURWlj0CEvQRfXs8AjP0osRK/wPriHAvtMW0PLO1eiOKqnIpYMhfgeeKgVSjtl6O1SdXjpP8C16YO1c1+YiDWjJTxTwk7SSd4jqbbQPJw/zdR5Os4TMiOCjJs3UpmJ627aSt7KL/HCh48n8WZ1zgSVrU9bJfyxPyFBRAvQhpupzLj5wVM/V9VBciVqqN5NPIgah/Id8UyK60tUypVW0R3jm1rPQqgW7Aw4i47U8fhdK8f26jZX4WUIm8Kwy2HLsXl776zT/+92cGMTQdUEbLP3ULK0jXUsnfpe74vGH1u+tfVS5iWV8J+XWS/5+XcRVB2YU1ZxYva7B2e3JcsRLobiKwGAL/DauTeoUbR1aZd3/2TxCeV7imenGE7OHPiv/Ac0icpTXTt8XMAnfOP40Il8tcRMPft7THOP+rvm2DJgMu1L1ROiwTGXgrYjZ595j2l1+nPAVPx2QpIu5olqTqBxJFVvmZPq2I++Q4uXoP5oJ8ksAlhUL7PYe/PMKthYvIe5dN/GZWLYPlIh7y+6Hd7lkpXZL+85bs7WCboTv7rg2qnepJUyilvoF4Aum6uGTktDb8OzE0jAwJOKgnle3yE4qBfI+Q6EyazCBiDDkdQ93Kk0T/bm1pqqezZ1lqhqaXckqwmCLFkFoNIt9cZ1t7XY8US6wfor+BjPn1mT5G/Tf9JCKzdHDNAOnt2pXL+LlBnswij3jH0rN7u/GKl/RM2a0KJfKRvciAO++AJw/PALgURjgrHwHidSqzkwbqLa2pmAI/EcnmtPzR1wR51TlSm4RvBE43WxbOw19B5498nLJ7m8NYe9nG7m/dMb0dm9CwtSmUcqXRtHIrYyPirn/4x05Pn56tsWC95v67FqgY42hp4MgV5c3a0hlrDuwfszy85rJH6kOb3xs9ce2NshVFcGYJ/5KaoOE1XW4ItvgSpVxTHd/8cI7entoLawPVNQOJTcGD+Egz5e1WVEtaUr974b7ALhWsvzEOh9IackZ+t++RKZ2WARs5JlVX7msdKb101TLelKDOLt/RUFwVcXHSjutNjPwwkO0tNnmLTefHz9BYwp7p5VvWkTxmwxQzLmW7xeOO4wbZ5zK+zSyI3MxVHVwjAWJvh5ztt7fR0G1B6vThWiq6I0o2Q3xXyCUlsT0csvTk7QTZhDwSI9uu2z6+e/0VGgPXVgxKN/W3vQbShupa9C326McRVntyyHFs/vGGeavuGhBbAAcrjLeTZV0aFJWMNMJY/UO0/PhkB5diDDifuN1TXXy92G5JUh4U1LD0ZCed8e+q5O4G8uKmNLzVo/0aUVDvjyV4hBXhuFQzLVAx2JW6Lv2Y/efwjIaHHWxJzA3Olp129sYcWlp1NbEBdfpw873pfP+yBSsAnALr1+1jZkJ+FdJJAXVUbmXgRJTLTCp3A9mOVzm4K+saZXri4/iZia7n5W3bXhzibqrbwW81Fce0S5RC2p7UKVHkqqPk880ObpBnuGrUH6HXWmXemmqW5LfqgD4VqzxiOm4XBeUq8VRXJ6km6za236rrSigjgitxfPx7gpe7gZia0b5FyHt8nEh+/kqdM7/b1MHcZvqYrC5iTZt5wK9hCkwAO7NLzhiH+dAhR7Y9cP1n35iNHmttxcOrNputDqUxom6MQ7m/kDJ55CsIKiZ/6itnZJQWZ0GXOia9OlryJ8VVaIUXm/lYzyEo+4aVUDh4TNNVswdLm2DgMB0ymwIvO/BKSX2Iye4ZbDykk/VOt1dK1ZW2JCeh7BqnAX6fX5wah0NsmX1GWJHfzeVWBTT+SBlERR6Z01owWwzg85OHeZW1XC4LrqklPW+my+rhVb2qyY9NVy3PdYTpcwV75MPATuwixMs7vZuI2FLZzkqp5chEfza1B93C7KNotilu4+0nbv7KhSg3sl8ry+FEEeSnq7sijAwFeJLf7/QXho5LxLuGmo9BXEW9wce5Fy9mZLPM5WwsIfIaG+LVY8MYpsdYSdvK94LSjHISefUqD3vfGMy0GHihnQlnuO0vtM5XqK+wXazPvDBDA2TPk7avUbOe/X1T1zHAbV7luJrPxiQTT3LAxz2c0dwwnPLk4hZnYsAIYcSIV/d3RKWbV46HATDpsbVl64/1ZGRI1xXLFjtMoBLV6OaAa0/rS4h72A70Bbb7AqWnLxHdoKwKwpQsxtesZzttU3Fu/HHL4s0WlaF0xb7Ha3TzRAe64czErgvvrH5kaVjGSf/isGarFjOMIQre2mSb2rWizdYmnx4zd7b63f6196rpnsq/VizC6MkjZriTqbakWC1sVwHwvZI2CmoBkqHvFwOvZIlrO+VU6Af9JdltURlBOGciZ2+A4qSn5eAGZhAq68sehtW/U6YGMbNXAJrr67TIfGhBlxCK6zFeFL6RkFrWaLoRILZutftmbW15MhErMZmwI6pEKBP4pzZxTnH7MSGn72drkzYq1jSBluhcPO8v/Wbln3Dz3auuppOacGwGwdQzLvl/3l51YGYOOUqbDZnhBj1oKG+lWzIAsEOx9n16HIIRwTTHDAV6EloYYGh8WPldcNypSgdKtccB9iGmp4KfLPCpy96c5KMtKkYz6Bec5pPKJCG/7PuB/9sNt6uedyz+TmNeSnFbTfIWSzOD3K6dRduFOTfEhCKE77Q7OcQN09GzWsW+rB1lv/PpXLdxBj91IlI+HlLqFyv1rRpGnQMUAPFgRmRyGuuifnfdJpk+T4jaclSyAOucngnAvG25O+5pcZjvLi9DmbYfYJVWlB7Hudu9V8sZtISPk72h4DWXGHNYCeCc/p1O/IKe5qc1IffMiIZMxIBep1VfijmXOnI/TUIunxnHpuIsVwU8hxA8gVis7uNDEC+iPmCA+syE3E+csZvdClN/G5JVs05yqnyN3JoHs8fsCwfIjy55b3dWh2k9X0GsCY1nRBZETl7TOaXyjHjHJO/kO6y1xbYB5y1Rc2VlVV2XOf2kiZwMnyrQhq3enpWKfstGJkEwpaIPeX1Hja8bi15vJzKitHEGh0+S3wzYWHDLIB/WXoBsb/9+JRQGTSQjOIkec3+dLWWXLjWqJXaNrY6wePc2wDC1Pq10QF2nyC8UEs8/3/4GLorbRnLO0GPLVFTdo1Av71WKBBxXuP46iQKe/rtxqupSO0QP03qyl5MmyOpHl+0XBaCuL4jFabtA48cGpJNa3a8J7MRd25WArA0X5dhcYaDniPIM57B8P3eWL/ifze5iRzxsr751MrYRK+KNjmuP5Qz+/shtF3C8WV3dBivaaqMjJuT5tYXXMxF3wnkW8pYh0zppbVcYlpy/1+svyHJktmf3FFJJz7z/Rrb0E+QdMYnCwwCj0mbKnk1fb0yMPGPLxDKSeQb/3REifVY/WG1XzeIBb9VG0xl4hnzewhs9gcRSfj9pT85KsTNeeyMALAc1sQds5a4E+DXkHIKnhrxOUNlF0wWItpckyD2vfKW3YcWhbAHl24OszCdD5b8/rPKcmKqYLV5iKqP3MwhauibU7tyueWyVuqXnWNpEN7TYh+gYXNu2kRhhdlF5+8/q0qWANzeyegUeGak5gmmPr8xPJEsJGhvU6avaO3heFSg/A0rGdPHM/W2gyZ2lob1fdFA71S2FMvhFcqWHy5+qjWowJjSEj9Txktc6pX71ZihnRijQDAXsW5IRvMY7uyRt1K9B0upGd5WtUqmI35XKxpCxxvG+tGbePM0M99hDtm0/m9tN2dwt9KjdpIqKbapuW8Ou//QuMGWwrULPZxC0r7xuP79rj70uz/QYaCyQISHr/Zz5VGIsk2+KcchjC9XDNkShHryFmsEAr+FICgErbts2gAx1qtKNz6u+WRO26RER3xi0up1z/POabNHSa/BVoiUuCvfaBuAo4p7LRQt89pDuTV5gl+ukc7VR/4/9TxZbuOkqGyP9FU+r146DnUBrYOBmXPAAc9AtTH1JLXncqOmh0KhavxuxWDafkMZJq/GZYH1XKj+79J1CpdtzEIR3iwEfN9AZHSJDXdp2UliLNk1N8ZReQqtdARcV3pkHa56nXa6DNbrUQg1mHyZE29swzdwbVmKPdUXpM0+btrGkuxu9WTjW8xjc03nECr+7OfK4eQCPPDgTWQPSvlqLpITgnEvN1VkL3PlOJjNJWhCooSYoxHYvUD+JiXA2U7PfsiL3zFNW8rWHdyVXlEyc2ZCyykqcTurdfL+GAsS73ZnPNybqsmvsDVoQkW0J+YszQf3z5oiqGEmZAOkaXDIWatXNIh5Hg3KLd3WTu1eZ32OR6aYAu9RhnZjFkBlvGqkaum3slTqOUZQWpXSGd5k4Y5Gy03o3Qh5t8Ku2P3/zbh4Ap5eJq0TMml4Gpu25rWsc62nljPIDSG2g+6xizLKZ9IEPsjoO877bFBUUyuycK6u2aDrpCjAT1L2VtfVswonlw5v3PkLOjYNCt58QUTvSeSRbmniKd+1KDCWX3geH8pj3eHwqc2dMbn7OHxfkVytdyGGy/tAefhCLm8foNCQFKZY79FrOwFS7HiAWxby7UwvSDv087pJ311bZKQtzeK+x+kVQ0zft0fODtuO6CSuWO0DBvMYNm0oIm+X03n9LEbg7kSO06pvNuQcpaJVHh6ggdesX/8/jf+xvjZAFt9a2UYN9XCmNFqBhfUg0vBhar1kh6tM9G0zbZe++tYDI1szVQ8tfhj5259lwaczjpw63TRpZTkU8bagxPwwqqb7Du+ylvaCd6NS7Gp6PuPn5C/ZDE8rm2h9XsDzS6HRDZ+vTKcO54XbIp2dQSbvHMvdH8K2W/678uAFeTBQiAPx3tpH3s9nMUboapA7uVY5BjjMTIRrKsLlXGe16NJGPHmXuj7FRM14YaDUjtj9/+1q62s83sS9jmidEKwP7gASigph1p7Yxe1BIe+c5IY3vGY9Q9iiPvp7Y+u7lXI+xO+Pg30RxtQkKLW79XOrY7gf9Q+oZKr3+aITYhQIpoBh2N7iewN7sO8lEAQCP1AMrfMNeMEJFM8lnFPv5tpm7AMjPZyGmOIkLcyhpJ+GRr+BnORe4R22QoBxfdwVdf3R3BLw9luXy1jiWzXM8Ezkz6PDYlNrKbcfSov1sdtqgCFMJ2rc+g0J0cSJYcpCkU44OLb1kIklSKl2mD4bsZaFdPSPnGg3dZq64tG/EynGKXOK0qgKkvOY5qT+MGsqVNHeJHkFRXr+Nw3ycU6/wJ80wt2+tRsjuwfzB1UxGLsk0kwePrTsWSHNtJmsj7MuVANBSmT9ZHlURx4rPoeZZk/yzUdEeLZPb+TYW+yvtcaSxitxI5UewnL57pEtgDwDFfsfTRe6sW91svltSkh2sbo9J7ET1+W8zmv/wC+psDjh67LvH3H65I1zznla3yZQMy1lH1IFkIreLiQEmIYXXOANDFRnDR8zoEVi+B+WJixwXk5QHstMGQm2/K8O+MI/NhuLPFpiZxC5vam2Jlu1DRc3a0XvPP4wv7enru66+bRyJlpMV74ifbMRbaExDYah51gVDDHuDDXuj2cyhswGuWKqbo4JLard3GABY3iehXhsRMRIAcqe2YQSyF9n8+nZzwt7knFI5z22HXmqTQUfMPaiDfaPakSHwv28J8MWlwe069v0fDQ51Pgxg+3Y86hwpTECLPihBcU8mY8ixmGytNcRIiK1rl5K/zW4GvCJ+to3SPT7tBk27TFTrr2zDirnel4oqdf/a/HLdomF8j1I7Nhv2Rn+yzR5+B4bYsw0sgF/skZaTsXG/lBjhUyPDXKIMsH+20Vl2xglbqkJeFaAPiFaJ+J46CrBnki2prTwyfATRJLcUG1sREy092v1pAe02MoDJy89d//lk23swtHfMYJznPNe3usr3WnAnWGX5ecPsH1uRSj+KXRXgOOw65u8bpsg7lQx3GbCN6twHk0MR+c4EC+0vLaRie/FvPt3BtfOPnusHM2J6v+c5tcHQsVPdVvJmd9ALTjHvfnvAknpllm0hfbTQQojPlW/G9Vk9VeSn1GsNzwnD6cw2ZsWp8DVrqzWZcUFovxGV1BmR0bN013r6c95Rn7jXFjjvk38Gz1NzjJG2bjagr0DljPrOOFL4BIeMzcHT89lD6XHileWecCS3Gz6V0+fzBR/drCjvEBUTZ/IlI7TvgmzKxdJWxLEfltHPHMYHbxe8uXb7eqcSeIrjv8zvKAqVFvNWtDvRC9VdwkxAuYwL69vw/bYOlIk6rN4CkJJcJAYC5WTrlY5JrZZD380m7AVlhM7keFaA2TfJoo26MkI6H5Ti3E8fDUuwlV+cgVsToEx7Dmyao4zOQV/VBLP2BJ4o2D9656ShSDtrIXjpT0qfl5JGd/YKbnZ4AehK2G/2kBVeBvBPQennRaljrStCz6fPC+/bC+c5R0I2wcHHn/4htI67fksQ525xu6UK7uk0RceWJq2034MDZ52SJUWsAeU0F50QejXugul8euPIwpVO0haRZwIO1ik3qy03yswSBoJpPJi7cdPdXJXax9BWXXtxeeyPFY6of95mwVWc+nGVGFtiUBMMMakC/9g1q6sjmiwOawyIL+9K6sUMwXKaClOwHYntdKVZRObC+1+4VR0FqZnayhVYo+xUL0Ia1D8xwUNpuRLvRA2tcaTLHgu8DaAyK8KryytI+wpHPMkTa8swZP8PSwzXB0OSBruuMKEM5qt591oklE72mWSOOaxKAPjUOLAYt2OmF4Lst+kwqxIAPOg5tqHG2tAdpfjdHNaHnBUBmoeHcCKiHZXcuBAZyfyLVBiXZBRkRgQTZrgmOFEVwX1Lw9Vdb7wgNV+E4TgD/zKIhPySHyy0XcpoMSOpZRELuaNNAOrDUuKCcvYCMc3CEPsr9gp299kWJoCYQ1hyiTXZGV3zJM3yG6d6ubiyMPO6DCRXG3BTVV9TkYq50b2akSeC5mPFk4ag1sb7saD+3IFNGu72sEqBd8UW+8MnuSu8gVa375TxmncxxXnFp6PgG0NL5gw8bAKkHPL2/JIHaR9PEIWdfP5SwMfNXTB1pUxMt6XXe8/AqAtuKyea4coV0sCN4pbwPqf4rmmkgze12Nhpy8TcjzScQ9hcaq/eSWOqSC/Q6rx5w9durnj7jEZOJZ12jmINOc6vGncxhPnszYnJTniVoridz7YYcWGz9cMc8e+/Wqqump6R19f4k0GE3IIL6jqnowKld6Oq19oIPw4+2bu9kxOozdR2e69OD/uXklfxiklkpLYIyNgRJvXrUuyy/zePIZ3iF/mzHUQTZvOHv1QWBvT2/h7EJbh3y/LlRp9sD4/tcY0IlSP9RN7qHHPJA9ixLVbqvBC/NmKUL//X5+scAlrIKpIOLsiPyL+ZoMqzi9s86q9aQIUBno07ZPIfb9KvuilKp5nB6e23iBY77iNsPXu5UrWV1v/dieBYSN9Mrg+L0FesW1b6C9tYTPry9y2gdAHn9PpKL6vSn08d8wLomvO0AZZDEhgvF+VWH2RQ5icpxQerYekqQuTQwjR/f7xvrNpsCCAsxOcXYKaLFZ5D/Ut7zfZpj56CYB4DXVwDo41Wxn7wSAEB5Bf3AcNkoZc2EUPTIPNUFDrlQFj6nh9KQEhWeeTX5zGYTsmFICejX5WZzrIrk4xOgOe/XKXpD4Ics4vz4EM0QJ37TjW6adRFKP+SUzTGTbPGoevWhx0ae4pM0ND+vYnBUdJdgSQdqztNl9+cLcsRKIhs7WzTIIldgWITFh9k4fx5TppuB7A1EQYojQaom+sl2S0CluA7HipH+FmpTLVL6lFuqEZrGF81fHLu7ZAkztV68LKs5dOkr7LdLpLhHgMjbR8uinS4OVrT23jw56fs4+a4u0zKruckjRjtNTipcTA/2ERygeY8tSkPV/+3kuL2KAi3zp7CG2JLCDWOrxo+b59Mq+L7EOSwgY71Qz9B3q5+UH/5IiypjWiKkjsG8X1HMN2O6178DwLg01NJLsjrZ64K13Y9a9NHfJYfuJjLCe7qGjs/R4/n3hDugtXmvYoQ4+vQWIEGUjkdS1gGEIg4rY/1ITk6FzM/Payonb8fI1pKvB7qagcPdnaq2AxI74I4x3X7pQre0W+8moGqG3xxJhY+3tyk/G6icZy2NnpMB/kGd9I6nULIr8mOxrYvqq2+pFypiWVG1kXerxo+NQv9MQu5HML+bfcEGq4jbW9NKkXsl9h1/AyD01YtxiXWm+IhKkdhx+BmNXvltqz0dn9nqn2uCzr+OWkYX0sxfCjIK5Ic3WyIZ3ahD6niPAO35IuqNL92rP8mjZl7ZivGLBrF9n2oqNohcbP06PEnEzHtrkulnBooknlactuLoiyUtq/1RP9VN4M6wmFXncWK8YuGbmXUTxQ+Pze6XMHtya8Oq+EOp6Y7guChcXihioyXZ+NjLAaNt2ZhTySdt1RgwR+LNFRRlbtvMSiSBsOGsvdcaH19Wqk8LMM6QofbRdSbtf8IxxDxRTbx8CCojHuHU+NIZ7dqwtq2OWmvgUsvcKpT3Maf75Z4/C6NWX3baHkA6vraeYTkD9Zh7UIOSQNpqZuojSHYt3SzVjWWYfiIVxD9wLtBt0LxAJVO4LkuxzmAGHIaX/5iaZb2YWI+BynPF02acNLq7YUhtqbFWUYPlv7Yk50yf3uejO1NTu3lYYuqqryQLmcFdN3PC6eDq7A7SkgZ4Cz2FurzKS9i+HsZB6g0IA9Dnf29UJsKrMU/4bNoOGU9pzG5j9TtzuUzfqQte6pqCGHKcbRx2ls1bPdfqBuBYewmqbTsrDXDSjAYTcF4VS/WVViPtvNQ1jJuBCKVzvaNLRQFyFFtJ0OG8jpzovTG0dz0eJjW4Vg1UQyAQSkyoDsJ5/ls7OL0YYpXVavnenJmzO/tpd7p1xLdUPPfoII3O8cl6WEk5wCBqSnTXjpJsDpjGfeCRVT7ugJJVbbE44Y8OsLebPEIcJNLct7+RBS0urcOpyoupY6FkxOhQK/p07aquHL1gIZ3Ia28LnGbUZstqwl4E7VK4+eyIj3LNLGrdt5YbtnPzy+tO2QLlkprvyATRQhw989ePmpKMIm9KVcAgL5Oy5c0JDkQ34cTvXugAmeg78Gx4n5Sk+ZrSzvTOGMzGLeNPdmNMxMWifa97PqJ7TiPdLHWMWIbj6bblsyw6yw62VlGe1tpxhHArvvEo8pbcraZX3U+zPO3rIeUnN2pamRfLX8snHBML5QVpqFUecDw5xUIcoSvVE4H47wJDg8ECeFgp/eVslMUA7wdC6bIoGLpa5uC86gzlwBtNAFsKdvbrZdhiZi7ZeS0DNKYRBGcyMy4v0sy8jzaVe5oDprTcSrKqHvNm9ifOePCHnIFwlzCnUWs61KUzwfjTPLtdReYkX8uHcrMBPBsnoRP+w3JMTUIvsMKSgvke5LntYgjeVhGo75Lp+uLF6xBEbbLiAhlWv1D6P/8RgKgnFJ3xbN9zbtamXJObJ8Jq+uMvydaH34lvYQZeyKWy8C30nUpswz4ujpLK9dPFLb/43R76LXYVnlEeM4dxjb5e5hJlUizYpWWl/eAz21523PXmr16uJ+KJRDu4mT8djoguRjdyKzf+5Cv375QuvwC76yn3MeteY96MJ0RnAZcYk1tGsTgy/sYV3az6mP90XHzYj2+ueXnG0p/2+OgdVTtMB+ETcHS/34JudMhuCEXDWWWX1NLLXj7rhCiVREuOndsYzkppVMAaHEjaUWAfHzt8a8WQy8AVJ7rj5I4MQ99n0bOuHY2gaY0bh3jefhJXGFqyNTLhnScleK/FIhLKF1sKuOimNJYA1iQn2kqaep5ldt+2FwQPu8K/+VCa3H1eemOaZuvEiWxaeQr4BBR7WTRYsurMtlm9HgefhZXSqOEV8LSwml+f5gPd6+WQHR7bVFIG9IWrD0MSabvNDWjdsqjCSErpYPjmIcWNI5DPikZiM2yqIVBS3TlSpheEWhPyex/3OWFSYlUGsbhGAANN6OtcZzFTX4tjWQJFpAef9HG4VRWJkDDimQmFbrNs6DSE4DJtLhTqANh60ps0HnKjE1teHxr54leqBdrS/t/Lpuaidyrk3L4W1eUiNJGCpKnWu9/OvibyqDs0k8z2v3GyG1cMb+qc9zHYU7eb4gX5iUmo+K+B+bETsAIcr8GSudQhzym3E2JIyib2nAc2DJwnm3nnRDGy1IlU4cWTBaKKQBpcyRS7vsbq37/yR26N/uNEK/vU5Kmkpmb6llcGc9+HUPlUyTCJsv9lF9Dt80fFeVNEllTA+poSTOpl8sXopUm/UlYwIuMKd26Mkt3S7xD3EVNU7tMqKb3c5wFnTsXUYlo299IiIep12QWIN0sFQCATof3xd0UFIcejqjW4XbyICa2xKwo71br2ALGptOPhej9nni6eeQG1NHKgB2gWC0b4wtzu2zr7jS49VolFfM+cHm29I+E8NJKT8gDHl+WpZo/fR9nczA7ASu0xpzzuv/g0qdxZ6TzvfjWB7zV4RA7obJSNSvsz/Ihr6cNsUIa2/VNmjcImHgP1RyuH7RLpaI1mRl7faUv0oc4jfoobRN2WFJVbm8jk92g/5VsB3iGs4/CGPyHlNvUaNkkr8nwbg3NOOH/pTf1inFGq3QGo9mNDE/fjHvtD+ra/+oQz0ncok2FKDftQPTc5xRtEbrJe1JNO0hMedX7d4kKBNcy4QVdNdMIEPIudTJeZaFGS/yqli40fm6Q8yb5F2Kjc85syA1vcL4HmGtdNuV3I+kBWqReEU1d3h8wWckUIKnlwc08XN2M43ltS6sda+QbcroQ9wekEsq+ZlPeVv+uWBUaxSjsPOzw1h6Skry4PZho/OVVG3XDVS1vauTYG5Wqa0BXQsH2aR/7lgnyvl4xbabjreU5vc8u8svzjFaV5SzHEIQ3XEypc0beG8cznFgYxhLEbJJjLzEh751dwRoL6Q8jIjKwRnNNFd7dKIzgIsV4DvPozX803kacDK2C3gi/Wl44GxW55aATKLvTj2zPnPGUYyzTeq6MYdSETSSoyNZuTYqYXAnRFAENxrKEVRUAQG6XqUrDoRW4Nt/YxFFrv/6fw/0sBLDsiOkLQd2WQVg9oPNDi3ESBcn6r82s7XOdAEyjmNEX1tmtmF+skvegn63vkxsDQezmc7+cL/zcamz5uTpnyT/97gUDQMvl2PdH6SFzJMfgkU4zGcs3tg6s5dzcpk+W5eDfI3gR25F9vtO1rIo748ed89NpeU2vgtobsAXOiMVllEH2vIbD99zdi7bsSoEktxLS28aLPSKDdeufDQ6stNoUMhbfLQ5jcenxxkTM3YzghjjOc18omXBivYr9DQdni/xwzms62qe3xBfjoDQsOefAMNQxW66wGnN5RNSK2DIOzwOjt8wHV7HgFThaKTVa0Alsb5N1XZtC99/pcdzgk2WxHVY0uoGJItY2mtTORjLSSfx9hJOYus0+6z0Fmp639waOV/A+mxSULqkxErikk7XLBclYqMPN0KiNe92MQ3mgn7X6w/YG9q/YrJDnNQSrNMlY3FsdDWGA8M/f2cbV2sb5isaGZ9+9N2lSfzvgGQa4fYdUkbfhpJG+m3xgffyKxLizqzcmZbAbRG3ltW3krjHLE+13venIRHwUG0+MebdKyBCgMop8oXRgcGuwV8RLmhAbSeXM7NXo07czPeusv4iyzIh/ZxtNbvTwqYj7ZpZSWFG2R9fR0mI9H18Z7kMy7ROe6Z4uymaYN2STNzBbjkXZ+u/xwbg1aKKg2GGS5z7pooiveVmgp+kAbFRdQg+YSx4Arv0nP/iWfWE1Uuer/l/bxmYBgrCvtK60w4IQ3pTBlm/8OiCxJsPqsPbCvJuwu+rmtQSrBYWwmDKtfre5aBPrvYHEtDZoMfJJ2z5pT+CN49HGoFw0PaKyKuDDnFqPeM7ZmQ8ZSlfMbNN1t8n4+jkqZ3XfK9GI0FaeirwOD0bIPsgUpCenX+UNvGqrE/Ztrlcb6nh4+V0GstAWCwrEuFmH2fYq5cj69/f5zgXFlCuWox+vzOviHin9OVpsgJxamAB2Nl6Ofkj/LZObAuxeSJTIv7ANIQB6O77HgScxClgg4GaT+Z2NJ0y7lHohvcxnRYkdX2mv9QknLYOIsnnxRMvPX0qqu8Q34mpnfjcGeDWBvBCLaXxdqY0KdXW7g74fzXVZydrB6IeYbLg122SAeQ3nIyJxTn3bUHApK8JBAYr80RI8crrIFcWqxyIexLOpbl8a550hO76y9ypJXicPKLQmsSrCHgpjhElRd0kKa9NVT3DtaGqaYTb4y6FH4V50u2fkEfrWqmc5mPQ/xPqx9gTLZhTmd/UUEW/WNsyccEY8JvGyYt6/pM11TTHs7b7mkgZqHWXbebNeJYOjXSm6auvukMredtKVwHXfOtTQekUFyxkJxiH3nlPKABcnIvOk0HmMD289F4WzLirruCp9iXaCxaLoZ9orNwQn7vjOf2F5Ih2mi1KV4ss1rmru8C9phiac2GArUaExRbuG2h6Hn7oxoNqsvR6/xKqGq9ixDWGWjXrUAiqkeHwf4vgqqy0jCWRFNGB0nyKfTsZFUlEAbDsRZhqsP8cpWF7eeQGbiuUxrPPE083gKLOhY/yWvp6i8YS2KIkMJT6Y1Ikq+mRf8Bnh+M/mo+OI3SmFDISdw5gxtyd8Ym3wMBAHSk8TrIRWm0sc4h92iRfrS+O956EzXsd0qzR2n5vHGlTMBIkwNCg4PaQqbZBetY3bj54v3Q9YMu3CiZu8gnyIyQCojoHg3rTCq2pslWvq0+HKk6opgvS1Nl6nb3tD2RcRPKw467RrGwZPY29K3KOrrwe9ccmIW6m9jszZ2pfJKYKrtTC0JctiWjnFtHIew3sFBG4u3ipwfzlGtPW+diToCFrcM/flkAMT9CZmV4FeFRybZb3JEJXbyd+WXK2oBxJFIxJ/Paidbj4E6op1DBEMUHfea2gn1yawCBab/PBPP+Ca7EzMOXx9EFcEvJK9phevFvRFaI7lWfdtNyUc4J9oNEQ+OeofkxoG6hCPTUvX3ZFr1kPojVvS1+VfZEIIiM3OpMO1sfRaGjqywrhOcA2eY3kvTSbzzbJ0XVA+hAD20mNcCGlq0waDPtN0UW0nsEO0DjfPcvHc/jtfcHanwAxnxxOrVS3ZS7YoPrQNOdDDNdiixKBvoviz+aitgRS5tG6o7RE6i7TtXo0UkG37A4sJCVRmLE0qW8aU+mbxmOE39cINFBh79ecC+Mkl23w0m6cMu93/8/SDAWKvzOh8RzOS+p7pwfSdZyKY4Lc5nptVqW8PO8xmTGrANEAhbRzZimzKNyEVm9DNiZZmYRT0zSz9kU5M4RlUnSXRZ9jk6QYV0R7bL0Nd3yyIl+JSYxzYqD+7wgA4Oxsh997JgPEatuwvIp8xN0VBWE22+Xa2WBSeFWzkeDaDvOHcNvpHSvAKAMrTnF7RlUv80VB2UI/9Jyo3f0fyJAv9GNQnuJBED/if5oT8hJkCcQx1NtQeG3mJsaTL80nepnSsnJ2C5wGzsA81UXihYgEEjWIzEpSWut+Wbawz6WnyFdSZbQhWyaUN0EXmNbbqbY/gnpISUznMZw1oNkHXkHPOKwPg44t+//8V0+PVPrrdjGTsOM1r+b45D4+REC1U/NZWGcC3ghM/nKFkoDGxc9WjceTj3s4IZFs5RwXxVGI+Nwsb7xslVpqJ9JVXxPjTeF/mh0fJuzkbUtcmKts2YcRkoP+B7DAcgjXJtiLCcgf7JwWj2+oWhcbXLQ4LpU7RLwhmSGH+vgv1YfCz3cs1cNJD5AvwzKoAaCuGT4yD/UFELQPLK6wyXz2MWQxsA0Jb5K7GFf/YkFoaY60Zk5kwvgGtZVXs00tOkbFKgxA6SppNzvOPbWTDDztF5BsDDzM/L9r7N9o/TBnSGFJIyA2u2EdVUnUlh5U5hBxrDwIQxIPncLuEIy05tWGV9Pb2miDIvgt4MNuQCtDcuNYdkPNIHmNjEtE9FkJYicNJ7s+ZxxnVlqeWdlSK6d0SWOn9olkxbeXJuXFEEJuZtw1zspYghufx61Mgx1fEAyrDXNfxPcNfzZYr9SR3irShNQ3l525N8Km9MnRmXaWVqSuzp9F1uBqMjJVs2J4xE3ts86W/y4sWw4uyJxGy6bxt7SlWQxDrf7FUghk1H4UAWPsrfT+earzxLVnkIla5wXfHmGaML1R9jBMwK7Akm2yeH4nrxj0ZOMbVZQDf42g15Byj72Asg8nqTNu+kfM1Lgvmy8W/5gQRUuCO05xyNIcoh/ptcF+CQUEK3FsG5OiZ4MFhErNBAwgtF0wcxb41bz6eAV1WZg/3yz0n2z1MY/tTpOSY7uOU9+NbExyjRW5VlR+OdmbwqUJvLmmf/3D4No5Ey76jL6Yw3+3XW8ldUob7XP3p5N1z8yYVd3JMj3sBkd5C3DujzgOICvig/AEta9XVxCJ7fePH3sNxYVepc8zrpm5jz7mG5n6TWIbmCzQPaZ5thlC+jeNe4qTCILaXGuCeO4YE0a6VPjmRNciT4tCzqQjkD1QH5UZY06VoqgCN2WktTDQaDQVBECPkkAkV9BdCpng+Hh20bpCkPWlgSjT23quA+l5v/ru56TE6hvowhNX9FH8O0e3TVIsnr3ow8yv1tERN829VTRs+lDodrAL8M6o66KYdbVMQGw2gX58AcXAV8xF4l0xae44BKOez25Yc28dVB/9OqnPMWPvGMbzqwDTSNkP4eTccAZRdlzGjvPMchh1xQycJ0f+3KzHztwPy7X2xLBfVEVfkQevOgNN4Gnt+7Ktct66CWfVVm7ZBTrYB29N7aM9oqmtiT3KT4ue0U5LTVQfyihtdaZdX1KdDuZlwYt//tfD2WiPbCOWwVKs4Y5p/W+8zdpc73Q6fUJugl/A26H0Ll4v7fQHc55irVvX2F9je6M5kzudeCkJkxO5Pb+OaIj8SkGuJVaS6eWFAv+SDBR3CgP5p0u8DaHUHJ2rCiT1FQeVYlScsO49nm4/tnbIOobEGw7lHYFxeLt4eRxSfRMxLRLrUUxHcJO8wZ39rpA+q33kcCPLCz6+Y2vXAGxZq1jPY43puHYcm7kWCpXqmyMB08mWNVwuU3WpizYNiNR8NQUDZjYscrt4Ol8woncWkEcq03510u1xmpdsxF310iw/fpbhXauj8TNkrWC6sdwfG1CG0swG97VmxrCjWOT3o/Il8RX7FzjKlNs4AHr6HLeuY+jbsCsOnPVSeWk1yjYNEk4TQmmVyCH/TDDZNElucewBLp1rhJe0zo9v9a9zk+Z8QLJCTUBrUWSG/yzXuMymC2F+aFpCjkpzn5zYosRa3BXmm9PLeOZS2oEbG9CsGePPZ1jh5Anx+erseJi96cgHEptPUytWy9V/iUT/msdvNHjG7UdX7kO6LvnW9u0HxXi5fpGKemnlfW01ilx45XjtkJ0yPj7LHrRwfugkN43BJfl42h+mV5kLBCmrYezt+DGQf5eAvgr93Hee0f1zl5NF46UttmC85odVUOnQDnMXlR3mSFfEXL4jE1R+GdpJ5QlUm1AF9fZd/ajUpc4uDhdyo+4mh8l2dJ+vyCgD/sK3H6oY4K1txGdsw/b113OWy/Jqjc/FuF7ouUdr79PtY+UixIwogP9PbdX38nrxz6o6h9S+3B/xlBSlq1unU6bWPU7eLH1vMkVQjgFucjatJG0XVJF5RMVFooJOq88MNLli/Lhn349rShTdcTebg0i/MQx6KRwBxbn2Sp/quz5KGFvPNxe1I3t5D69Y1vHNodFxG1/6aX1SQUaFhrk+S8JIaJJEoZymVPQ7QtABQN0vTxOyrnxYgGvKHkUxa/Pq9ukGqBxuZ686ikgWAn+ax7tzkqSF9lcS53lzM1I8pbfldiWUKYcpz1dCNBNe0X0QhmQmAriUN9ItWXg+XT0u7XXS6W/ZAaZxXws/hkgazlVM8HVQvEXEGQG7XwWpvzi33ilAuF0+q2OWCq3b62a4xaO9eTS+5zNRootjyYyWAeJO+GgjRA9t7zECOCwSAfla7Rrm00H9Vu29kkEPjGCDPHo9QZJUEDV6n8/BCnjrnnMd3FZ85KjcxsMpd5g9rfdv2SbvFAVdew5I93Lnc7fX5vFXf7mKckU8dBgANZbt9aWRtg/nV/bOSbLI8Idb0uN2LBy6KIL1W+JX67NSt+222Tsh+wGX/cgnixiMlEBdxHu5Ed/V3R//pSxPtvM+crBmdrxy1rS/ki6ylvK7IeJSJB0BnRpGb/9MOXCcOI8/p/ILax6oEnmHxXwR2Fgm5SCbcOplqxmlDWWxXXKMZcPmJJ1t4SfOkgC53D5B6Ly3j98YROpych5aE3D7hk8kV/gChLM+YmRSYn4MpxcWbYl7gXie1VgCEPwNrRJKbmGAlqA6L1sPbW8CDBaEzAjl212qzGbv6k8VtYp7sl9064eEOE8mshbG1wU5ma1NA0d+2Tlv+PoXtHiTVi1AdfcHEI2/j2XnykL0SQ0p7JQ0A7L4nOF6qk4uLkl4qiPqKyDABO7zCnDEMbcY82Db0RPPbNd5mLrliOQvoV21t/nLTuhZ5DLikjaKaYiCAs3tv284j/7I71g6J6SnZmoD522o1joxhy4buLI+Hb0RRtpHdRMHVH03SwvYO2k5tW0GUQcv77OqduO4VbN3OOBZmr88IJ6Vbn2u4UrJPVjXdq0HyCkw7frdgujFAhvbWkMd1OU8rQZ2dRvz8tPif+20o8wPspNAcw3bZ3I/6oJ85lMYsy+6lelq1WMawbUAYON30QoZTyd6R4jFkHxVlFAzZKn6cbbzWzIgv5YUjdY/VPj8YbIorjMvYqerZpwfyYU626hs+Kea5zXlojQ0W99gtUVBeii59AeJvoNZSWI9QN0GxfUv2T5dtIMpP2zBee5uYH00l/wX78PwRGHKZcznFXT20GMbnnrxQ7rx1sLcuY7/9371mWSqboXzOWK8EQOuWZw0sj3OU7C8TBuUZ0eDqExjOfOwjHQHKRkdJxEam7pQifANI7ATv6Blh5sqib+1joVEw5Bd7bAPkuPmewcU8Y6OdZk7cfGxSch8j7eoubjNQT2KT6IFVTBLuMDDrviN3nwZRbnWuM+YHEcr79NMwcWz9hlXk3vSpydvl7mPHrlJLJbve1uxz+4iQsRmf4dOofj0bmtDmY2efnvx1gu8GVSF/svSsujdMzu03vwoEUBiiPgXkZDvtGUoojzd11e4YiYOWyIByj6ljxshu+G7XTOPL3fu9UyH0JkDY147/GNWCkt8QbyPEdDSR9wowcZUn4XBxA48pzRkWVmZAQ/MflxDTT9xAtmn2Zr4D1KcMeSVDxTXUx5sqNumIVsizxJXXkgZ2zk4g3DY+b9u9DRNFvcplQe2FjQRVYI3p7/Y8Z8i/axyWFuBuI7uHmLaNdqrVtArctclQYSiU1XIDRKmcQ9fG023gZyclLiAyDtaRP2TUYajQwPJwUiumXVAT5I+j+f6GC2LXhphSXTr2gTwyY3Z2XMnZnRqHBmuMDmWfguqchoZkb4/tzy3/vUBaMsmiIDHbtLcFCwNr3TZI72cRe1Lf+J7LInYwXXbParWAYuewSmLkB8jgMPUdRyqrgnh+V2dQ6ON5yj+kPnelhn0gj0ew/nZKaOxNJtqN9rLBZVsKuurYLvtbc0xcUNoAhqh/9BuC2JZdVPA8YhwLHQrEdKP3d0wYrAiHBmy2RVE/R4xbDp4x9zD/L4KGvCjcmzqjYA2kvXe3/NC2BPkKYx8JZTiCGRWrHL9xYC3pksyebpPuCa1WyS6jJscEzmlL0s95tAneZOwz+6nevZPRljIC2xm4qbboIO6tcRTIrkC8Ua/ZYDTK7vopnnllVtLhsk9Kkc22USi02XJpfVxH8vyuzsheFzmrNgohVAfnkK8KrHE8IW2RtVIACMD0tb3L+WwBdnlwCp8cz0RMwP9zPQLO1+uQNeCNV/IMaPG+XXUI9ko3jRd3XgFoH3I1OhSJvPZMwzQa5ZE6r8yeOSzOSg0PHWGYya/teBRjvMOpZINsLVeAEL8zFXdVUJgf312DG5rtN53z9L0CFus3jyfELYs35xE2C4FDILA8AcTFrb7nviI4WiV/mJQvULpIZPSiSlA5+GtOzZWLiKNus4DdyOz0ms5VYcbP7Npg1A2lLylgXpUhkFPi1c8/4mabfSy4krWPd+yptFULK+QiCqVNVbo3XykLqwa3m7xeti/dIFmwvtrkNTab7zKnZlSJKEMjxMSDnmN8TVLnrNT460pBBqc4rE888xHDK54KwgHyl8vTPr6FEFec20eEtAcO3ffSFHeHxZkvSeRstN9MXm+5hjBNIUxFjr5q1Q+EXIkMlKM6Bgafi3182un7wvWT3G3CeiVNHxpHgDSMw/FqsdZmaWnu0yFTzgofN/t4yP+d2od12RrMVMf9Vb/SnYYinbb25jQ2iHxGKeHBk1YlwMdd29lZ13hqsffdL9LEoM6FirzKeEg9P+d62glLayTGIX5oHCs39J4ZVFqGaPJYAFqsdaSj7OfPI9xQg8Rk7MP8JvP/XOA1Pi0343IFLbFcXxJJ2ao6u4ljAkA+LHGWxzKOn+tMCkDlHOjRmGyrUaXbURTks6TsfHHFeBcnfUJRrJhH0ATr81LaJkW8/2GWaXy/YpCR06WuKGe8DWk8QoRvq9FQ3xhHxn1IgRW3DTlUfylrenz2rVE1rlMO3qydZW9XW+QNGY/5HZ18PsB6lvpMy7CDmI0Z2nLYnlr/sg+1+laH7AvzsE6+vTjiu8xnwJLet9sjiu0AmLbmZh7hdTS/oKyATvVymaoNK3tHK1jTI9nMuCWZEE+pSPHqCcpZrLu0ZwZ/4MSvCtT2u8kUu60Oe2arHXvWz5+pS4//QrENwTfft0A9eGDNaztGLEmwKtUJeaTdvmpndqcqzSdcQ9Hw+ESJDOjlbiNbdmNYmBGyAesLfmZ+UizVWubQWpFUVuZJPqUIGNDc9E+wyll+aiOfjImoVfgYFW3plXDuKhovQ1zXPAg02bPetZtFlJDPFp8PrGUyrW4j4hMgmy8SZboskTf7WMgC7hnpmZrWEtOPMA8m09YecZeiUGbgNmpZ1nsmH2ZrKg/Y3FZYnZNNJt3W30kTAaE4q77V64AwnxvH6OFejKgIj+6IPYlU2mGtjXwuYOmwySLys0sR4HCRHx9SzKoPQfnJQsQwAheRvG2gGR+XFb2TCFeUM8tyrCxtJDCCQGGuyh2pCUF4P2RgMph0I60vQhx3DW6iOAJy0TIOPnza3fK8JcA1nfN/h9YyFdLaLOGF9PkmT8gBW2XDgEd55e9QrFFVdnvKvG5Ur3NwwD7aQDuqRHfsKMIHpdrsfKz6XZaDpK1EMsSHkKsCPM1OkogrTAip2eKrc161tRdS2i3B7byB6i1hMsgJK/qiazKKE2+tI6nO/bVMovTHwEi70CrKlxS90b2XyJCX5yErAI2TAqA1Pvu7EfJG4tflIvs3SzDt6c495+vVEI92UQXBSBmb2DJKS3YL4+doljO850rpbdZo4r4D4nhRTF6pnrRHs6V6D1iHKNQTlu4Qzp+Xjqx7fMgKr4B39j1rp8F1disolFiuCnU//OsJ6bzvEwBo3RUXDu4Ar2X0R9WYW347ntliUXjoJ9r8sZhNz6akbyd8Qd8tp844h/WsXQn90xvkMUo340IKcT2Ry05769Dw0GuXH22lkN27IWzmQ/ttG9G8V7APWBP5bMJblHcZUsRxtjqjx4N5TR2YQn0Xy2VZc2qMKnx+kmqeq43J/azG2ALzQh+JYq3+L0H88b361joOL6p7Ja8I+SEG2j4BSFeUywpSqJwbx5V2tfFCR3+MpS+SUDfROLtZwH/a7hSLvw4eeWxtmebqXndaanxVmjR37iTcNnJH0WDu+menxhXuU/PfoqWqgoKcT2j24u4N0YKDMYQHrIl8mngHHFiEvIFI7qTUkSs3SCsSmT8dnlB1tkk7+O/KnFkBa1sbsGJ8nb1ziZbhpwTd01Kvn80ApHliwugujmbJxfTKhu5nwHZ3aTgZs+obR4WWG5Z9Oh9xe+Q+4eNuxt872wz3d5OUEaG0xAUDKYL0fXrQR1XYOrIGMZEvLGJv79CpJSgAv4xNxI7v4rdLgVzO0g6tDq7f2xbE05bIkg6XkqHFxRUqDxz/10fm2NN02eBd5Y/3AKWfwOjAjXdOrkBwPUxW//kiHHfjVecel7gSsLrTX34bdxhr+VtJsXbGl6TGyc7c3ABgbqojFzRKubFhEElWjDPqtuzvYX2/OCnu1KB8cD3XGTE7+0MXz2pwTFtgXGA99qpyx0o0uFYzp4LAB4Qv3S+T76u+pOipbNOC23/kMEzY73DIia0m8ZrEk20fdCwM+Q3VpEqrifxQn3Niuxmfn71MkXx/aFkJGtuTSu6FNZ8YOLHNPwA4yvcDTkrSLgziet9zqd6++lSONWnC1bl5UUyPhDMqNI1LV1uHoeHvHcZJN/cLtMS5plZdHyG2fdB+/sjnvJovcDM9nk0347emYXxFZGh8nZ5zDMpuVriDyJ6Ubrok8HlRgIkvr4FF1ey5JGkBqAulF3Q9Y3KYN97lWf9HGhJQQQHiXzqMfvM6ttcG3re+BKT9Xe1GjoRyRiZIAUTpvCFquxnmNsScc55P9USa3dVZLRDOxI8olrwa1R/2pw3gmvn+PRaUk5t6Q2nSwGbUV8howYTaUoMwJ+rB8iX+OIya/q1c3WTMZ1O6jJWxtIlOxN2qXlAaNlA6LbUMcI6xBN8fGnS3Ha59k57fJ3VD79z0MA1TU3g+axraHzA8r2HKMTpnb6EgNEsdu/Y0bcnHPW5dk5xFBsn6HTycm8uqRrL61ydFNvfptCuVFq+bLRunl+F6fjWiNh+b19T+yg9wyQCZRprByR3Z4d7Q+K0nU2TBmxuW1KrdMm5uQhxUExOF94rHiW19dRtpBbExw3+XnauAB9o7T0y2bUQmf3m2189IB43XB8ZVWlr5DbHfmr4j9O5EKFIk9bckg0syvVY5I37Xn8fORVq0HQ0diHkB+iiLhnb1IuJcnE91q5I4/acRjddHhhXxz10rgZc4F4aeFibinBsLJJGJeKBRIFaYbVyiw8oj2ftthWeSsTZhLPdJsOvnGEb1jVEi18hbK3irvB63fPUAx5eQKIg92EecDNOx+tJsFctzJWNYlQBgaYzBJKX4k9yJgt1m/T5dfn8CeFnGlEmB9uJB70dto5FL1p/ncTXZh110nALWlD7GrL+sJq+tamw+lKY9w1OedDCH0E6JRrtTyIOE4qTIU/iJOOrXJUfH9FrHpeIB4pBXzKL7L1p+Yx3miV1PQac9b6fI363oTQG5pYgK4tUu1GY1j7du2sNmgujz2ULhdLAFmziJx/LKcDJJEvOWJHcRYxdUOXaqsfMe5YQVpBxymauY6k7/2Sdi8CGvTABmT9Wu6fzt0WBKhwH7iDKYjlox1uYnXtnz4lJviDdN3493JnJmv2CDBbjKW2/FSA+bptWinhY2sV7Gazq4tgWgnuv4AoWgmN7MJs/ITVJC40vSaireG9htgdBjHl7TaY68E20aJgqInQzb7MucWI8b8+ZPlqlao9ooI31OlgOtFnWMWF7/VnuMkTX1tAa3NQ8O5cCdyYDvNJsE12SSCkFsgx8DwMCmr3ko6a575Z/yoWTObr8jKMiZcVgwe1yE8guuZUKXrSm90YEGjtEQeziMxFhSU0HVPF2h8OY2K9jUzoZoXNqXxPvRxs11xEU6raD14WSY2sbR75ZascJDGynAGWWZbRJttD1qIQJaYrwqbn3mjYX1xu1DKDS3IV5q3IqRjCV9KAO2Bx6q7jMSoXWEBdgOeBHYYrbzqOaviq4/Bdwq90jlv1+q8mM7ztDueukEhVfEhpaROew+TqKekdtfTuJge7Sz51KW1ltxvYfTL3tFo/YRqAHXK2XZvW+2jTKsyb9iST8JqQXP2p5Dwzn+oorlKQs620m3CHkUcFfFn8sNFNb7MgL2R1cd4U4lFZFfmwQLyfn3fQOAZ1A8jeafIwyqyagemqopuDmA/24TGLcEgW5wG7o7fJmmjt3aiGkCJ3PJvqOMvRLJqeO44Z42pJkBTS8Vl/L2eMTT9gfZroq1+UhXSKc3OSHZ4HQmtphW5DOSlWH+/9Y4Zjjz4a8kSlDrB5Mqx1+tq5lRx/VLWnc9Y7VVTn9qSVYN8mYmfXEgrwpQzhA7A1ARd5ouBP/M7BItmw+0NuwaET/jz+uAY9ynXiIi6YiapEIog3Nr5e09zRjmXvRXQ6UmlDoTheD/CkpBNi0SGQ9axl8XoLzZeT0+PVxVU1rCGkJxBslaaJuoqZhNLbj6La7McPZJOW6ORXsEV+1+iFmx5hwCK+FxSBXKawhTYALXcyZZ/eDRr36Mov75qKXQt5GXz6AUk3ht3exxVqfl3rkWI1XOr8p270Jqkls1vCiR0j5LqOv+ti1kzNzh9jCN2Nl4BIClMRRHymHJMa4AdA0Mz16V1C9uXDo2YxTCGjQO5g+Hz8fnHRovdpoQjcsaQTTl7cTmILd3we6WNnKX9eXOrH7n5c0rmGEfzwJd/QkxL7n5TKfPMXhmQEllwNCTqU4L0icjJ+JqAzUkuL8RmWG2xfn4cd8U+0DIdrvROMZhmuXn4MCtnr4WSnG+2WguN4UPYozDgMVmjM70RyJ/npRtninezUryuvRtwxpygTtn2RqtxF3VDuhst9JQJjZv5dDRMGYc8mwPVyebnRNfNNjRv3Fw9FzjwvKmbuBT47gCANeXNn5gaNobx1V3bsnsQlxoM47fnRn141kyQbGoZzp7000dP0OLi4fR7Qhit1HSR7exmHc9nhuoqOZH046Bbcharv50WvwzAS1RrSc56QyPIjKXwBzmhnEUmBGDlCLWtL8u9s8YmlTTK8zKftSRpoH5BNOQHXlnLODKOhqfRX2yebyUtK30rzIzrmZ/9H3bbu04v1sP5zcv9cPLBCzOUxqmJI/r8tn+uvWqXpMHACizYjJPYVe2uMkrx8uXB6APu4qbIW3blYyWCUOekKd7n+wsOlJhphuNV4KCxX7t0/60qaEjpP+KRgUAKkeO9fP41o7RBcE5M5jVakg9fN0N+QzPyEjjzOUh9gXivmJ1MdZktKhmuEP5NIE4MAAu9++VbqTN9K4gPDUSUTbMaSg+8rvdinq//5yHreMRV01coTAYnxc6rV/qHOuh2wJ+3Exx89LWiMxqI3X7kSUPeaCKAemzPYED7Ui7adgChFa7e0Eyhd89JNQJy5PzHQGvBC/mjbR8YqeI+4ww0HvvB0rnqf63aTiDiXWO5QxeaWiNjUNuQF0jfVp3v6gkrso2Tk0v9pGcO9fx/LGN+EhnznjxzOOR1er/W12Qe17QKfgF0fxOVzyYgLDF4ioTyhoWWnr97Vkp3klhG4zXBl3Luhpvh+s5CuP9xi2bz6tYk1paK060jr1mDs4Wt2+6LZUfMWV9bGucrwSN8qkUw4p4+YP1XJh5iMElWOx4GMr+15UDv9AaxzaH4eXwOwPuM3603tGO5VIBZAO/MDWqMHp2k2v79q7wimJIEA/ovHMIWk2qfXpEexvlSvf3rJDXsCSqg5FdlJbo5phXD9Aa5TF2QEGGbSN+3/pyqeTTOwHQRDxks3aSMu15ALcN2sfrSojIBBAvWTXtonLEki53sJdY8W2AP0H2qq9vZKpbpvYaVIMmU5YWu+kiol74ZOpOoHKcxnl3n0k60m/d32MHokSx5nXITbEa9zRftw1/cgXGzOPHNvJ9WeLDQn6xqvSG+QUOcIiNWc8JKM8bI5jcGuQGv8R69LwZsl/kvPCaXa/vpPyy6TS9VZzNeGkrrnruEAKJ8VDn3O4VsVmmGVV4mU+Z3FcPzWlUXcN0aGvxQHBn5iFTiPv8oPzYhqpY5zfuOkxQMTfBwZlJYPl2+G6PRiwAAciv8FCi1WboMiXzbE3DL632aaVbtUnR4R9NSNZ+2pq17c54xipneVg+kYISD45VJDJQR7cLD7T5V6qvPSGNe3lFW5oowvGab8Y2Tk/BfK6Wlex/iFHV3kgo4OV+X+ZnPJIyt5rPGW6lJGHesz54E65e1ZCFNlxob6WK2CMDJ9WwYnlNqtMCrLEOQcAF3XuXuCU7nV5gClD+eQDCvwFx2R8W4th58puYibBdaM8I1jaSp7oxcNvH3v3mmRrb9xpKiJJD+TYjR+QM1N8o95J6h3UCH7SfOEgDmqsIT3PQyaVvZz0R2PUrbbkSZTONtOu/Qjmcj0RaaWj7g/hWw63OMcp3Cyo4F1ei8pv934sJWPvjrtDbQ92vcccf1nHbbOOyYv5OTutIBT2duLPcl+MwpxJvU632GVvkwyEXBeauxG1b+iaueBxiZ4m/w9KMMjPAA7s05QqW5h5AN74ZSq6AHVYdPxY3FP/6tLagIles8oqnZ4SDbUwoNmk6HKkHfGo+qcvHT4HHkmxe2WZ0riTJobzHVYy4SXIl57zXMglvUQLLGEkTKF6GmkyFNL5m6CoDUtUGmBo8Sd4xwzK0NjUqvLyGwvxjHZtt/JjJhNzfTqjSJd2bQnz8LChnZMmE4EpMT96mhvPxTGsdg9G/sY1TDha/mfDZihsXy7QqgGDLmCX9Uhu0b8UK6C2dt8BcI6vegkpVrS3reNjGsnMhfWXFuE80pbONbML8YWzs8wFTLQEAoGnLg1satGnCtdVQ6oSy93jEzUR7UXIjSxcBkA95Pryp6XYyBUb86xlYLuUK/850M9CQMrkHFVFqWEcsjxWGD0j0hmzIHTsTN3buwAOv8F/zEmsJHgCty5y2hitTemFNSVwt+cdUKubBQ91b2U/8YM1n2mSg1wIhPfPS9OSa9hUlfquIF5HbeZ6De80xjHls9ZVoK7L82MYMvovJ7O7HsqLsm2OW5htbq3uxPu1E/ZT+ZptIjZOnTdpqn/pVTEfd34kAdHEIfTGPtMHoZyevvM0V9ieIBXDdOJ8WaEx3oLpLP5QV/Mv5edaONH9BargJCtJk59kh8IzbZht3SNTBH2M/6w738pJWSHPPZDPWTOAV/LFkqMfeLmzqt2A+eIl5ybHat8ZuIU/P0WCzYFzCGkLORVpXclUEOdkW6IB8shlBGGACx0tss1NdwC9KVUP3nlFbdiqsk90jM7fUARyytY6HsxBVMbVbRjoCSxF4uRkZnHp9JUH+TGQhzbeVgA05bzKhkqqGk9SrvYWcmJk9AWQ44XwffIG2ryhDZY+SW0tQPt2p4hZ+/D7HZntlctNenvf3UdjBtVrnAUB5FRJzr5wA63oy1hX8MDsTdxym5Cgcu+7uDBA0n+DghinNyZX1QWKyYzeWzeXMkxxQFXAlMDOvS6kdZa8IeceOa5yMgjS6GNwRwDnOzsWY73qQAe5DCTfXp08ENKfRtCFdNV9h7MP/02DpZKX88IaNnGRkl4BTjW2Kl2DahinP7SIoHpqqLY6ZxPVwHSuQztbcpBotqvGWep1xMvJjh2f38vQow1uJaV08HkfX7FLTJF05KUvQUK2dcbtzIpbmNFoBSDpCczzN9f4INHz739pppGlQEnudMQ0tpJhSk/63gP1p2yjVh12sxSVbfm2UDgsUJoJrOnOZy7R6wnZ8/JVxbB40ovZSZ+VhJ4b8UHcTORllwokq7lUiLQ3/5Utc4TsqwXOpp3uoSPXhBFYA3My+GMZuxk+GxiY1NDL31yXE6V6oljm1Xjx5iLpb8e72OlFSvkclQihzTXeP1EoDzUFuPiZj4+iqTS6UBgeerbBDe2axotvYykjtMceo5v0Zn1Gqc15CyO6ykUyB2+X3x8oOu/f0E+MPeJmlxTFLc7knpiHWwdFAJk8UqxjX43xD5zaVEqNzropsxnE2WpoIvlsoOMRBTTVBHGBbzph7fMEC6Y3MJmn/vvHTXz/9+1MUg/zayKZQNQULvOKdRvNVG/3HhR5m8k4gXLE/4dtKVj3t/nDfF1B4C6nbHtFZUzejS6RKpCW0P/3UGFP6NBCMlNduUujopeSxBmKEiRPNxHRkksjSdCJqq6JzZIMxchJxzs0x5ky4n9O3RXMnG5lfZkOlELH0Byet52kM0yfVKbrURP0pfzxXd7ny4Jav2Tmx71fnVAatZvXp7499RQ9IuY5tjUlWuCypbjejIcI+nbhb/X/fVrJl3o9hqUlGW+J7hmacCNCglM6Nw2Yhtqb06BSK6XPtjBbUlLjRo1UAoGrHQzqYP8X021U4Ax1qeSDl66CmuxSG5VVMkH3hkU5UGq1xIL80Y2kNJi07c2CJlp1YeCip18mPkH6gsddTZ8L8e93RDqVzAUCv686rc8gjIkI3cBofmR4/DlMjMY0yKteuABNnBCuYu2Uir1i66rBxJI+c7mnZbVAVgvUiZT2Ihes/bVPq+xJrL19Ev57xZt+r7q4AkBo36YY4MOslWJtF++/Pgm/q4jxkF6Zl5vGtiX+lXb81bctOC6QNQznE7iNB7oj/LXBjYjsTFNAlJstsNCej60vs0L6Y1Xq/3cC1mpGYCMDba4mbfhrC0NTJVftK/QP57Lrm1tgu1HRQRo5jgCn83NRZoes0BQ+w24rIToxl3zMOQexMKyTiEdUTURAX6T/1E+PIaDsjyyU5W3BPZnFdkyWY/J4Vt8ol8tJwHH+wjggGRMSzienKwDt8KTHIeyCItSZZwsfLhNx9ldKqzycar55I96wLWjpivxFuzDhmVDuma49powRyqa9fdo54XbUVCtwJ+2PLmH2YL8KAX3JeuE0JMLpFUX6W1bj2A/8Dn8wM1WlN4eDaxNvi5vOonO5StJKht1pvCkDH5qvkFkJ8zRJzej4wCqdB1iS9xgtESDcnzPhE2xG5I4E1obaD0Ns2jOfpDRNJGLSGVeHpiYrGVw6gKUlnfohatHsKqpcv+DTE1aJwxmFTlXdRWTzqnkbN39akMrI0A0rHv1mVctq/2R3IakHqiFdmVPvQO/P41ouc6xs20otaVkI4Hz7vS3vjXRdflEq628OazsE+8+VqWZlDcR30icDp3QyVKcDjjuAfTX7X1mp3wTOvRHG/8TdtUwgvp1ZzmWv6pvGn/c6veowCBekUZmI+kZUvSF3jiHBvw4pdlumMYUAXWs6Noy9zu6x1VNyjO0dhhkJHTvQa3Eb86h8TiTOC/LDxqrm7zM3cYGX2i3TVfS3oBy+vZac872+FTyatcJhPbbrA9eGVjGbSZiVU2nc2STq6oC2wSwkEaIjJxgsbVkwHcfyIc7d+w6Tx6s2ffH7fNuYwSTtNy8Ca84XWBc74ZWscLhCovEF0LakwRuJGKreqXUG5+5UJy6kcVdqDBBb8yJgfTbdGYpHxx+QNpp0A8LHhzj49DUNOnM5Cf6nPu8sacMa6LNZwzguPUwq/2Z0J/DFzdLuZbuyZRhW5NSwdFUQkh8XIq1dVXqdZNiGG15qvQF7dfEZzjn2hplna+8/UfwxV8XNUzW7breiTFbmRCYYSi6IclMdABGCNcp6uGCe10aVHH1wAF+dOUWTWBlNpwPqi+1GrXC7tBUPiqRsfTZ+caX5h6zsFu4Rw2O8JXUMI7AH4ODMBgP8SgxrOqMa37JxwbE48LdRJZktjY4oFwlJ9NN1yCC8IQbqCOPhXD1h/igNh+OzkIl5zCNMsSygO2XrIMWGCZRSC9vYjx1p7DjxSAkAVALuuJF6EnCQHe75fUvAUiOre9eiuCfWQUHO7TI0BrNHNhaFlD6ZLPaDbXtOe7m3fhtpVevshldV2lZWGkzN3ZTUrbY30cuSd64HG79VTlvQ7pmkyugKxCT64kot782sj3vmOP1jnHMIS04lE+4RkErO+0kn02G/fkMe0a0RxD83Y4BqTwbfHH6YDT5XqwdS1XlIklSZjJSG/9jOTu/3s6a7qX9G7emMFKP2KzqRidqVHhJ/l58IGxWHfF4Ifl7I43/U7690+3WWSk5Z3hMq5bbyxnkSaJwSTmI2VUNuEv9zHiyg42xmwy4H3bTPJJTW+M0vHhek/lgv25YEnSaRA9uhguvdw0OYCjJ+A2q2NMpT+mVdgnU3yM1I8eJ3i30hB38AuXVJUrJj7eLzdjGXP9F4hUzzoCL7wwTrq5dw26ncfcZmlzlf0K5aoNL/lGqWYs+smP1c9trbSBC4uvZQ7TI9AQ7zEit+ODpG2qD5byEF8zIPcbBHULx62zIws1DwykxuxPJdHyymoK9cu6Oo8ltFhZpO2p6cYwUXOdFzrtyFLf2uGESAdL+GwtBvfBfLDUQ5Pw1jrFndn0I5sqPxbokFsqp6bFzsyEJxB5S3qZXfyp5fKV6Y+8cOGKEeAf4f4R20mm46fVjOzAdZPT1ruc4Sp3hR8niv9tPhrvFTycq5a+McC3FtiUPu8S1sQVvCj5b/7pCuWp9QR6ZwOGJhMf89NKagn/IwJ+ai2JVvI6aJeaWaCZmkVN4x6VoaYjLzO7v3WlqjQyR3zNNpR1m/gJTPCJzzk+2F3nittLf6C6a3SnKe6wVXGvdIH1Dr6oYLoPn+RRypqu28O7gu/mP5fkZqgirsFXgnZqG0h9G4zk2xw4eLaYKwD4juIZKG325wkWREwwK85x1hy8ATwnMykfh68RZsgTnnD3mOVu9uVSWz7p68lt5C5bi6tabcI6YTfp5q5tuzJOKcEj6u31zZ+GNJ4ErMHlD2/FmYKir2qJ7lps4wmd3JVWt5RAJi76/g2LMGGieQye3wfNaRM1gZ4+PszIz4qR1HIbaAwq5iO3a8AyrVtCRFy3qIQv6VjLkfZ6hR7/zzypZJRpxg/itgwGHBMfTfeE/IBKLjUd5CCYHkAiZYzKkgRa0OiWGJuK9eJpDZz1d7v3x/WrcCWuU8ws2BQhFh7t6Bzp/26kGlgI/4QxaD7iFXgzMooWfGX9LtW1kXIA1vH7ImvFmVauxFy1dMejLkxDvM+OOyUR69wo0T1AZqC1Fi+UeWco0uDkzOP19m5GlQGtwJmmMfdTvFLP9Js0BQtj52OSQ4RK9HyuqMkKv78Vc4BGcClrIMb6n+kyNBjxDABtrHyP2GyKt07YxBLqhhd8BqoO+v+M4OsqgA2EfWzUyA/Xo4xmvIVOPavTlUQB8KKIB6hKfaTPvJuh7wl8gcVc/aGhSTSH+2Rlh+gvQKWrMwKv4Z44lHdyNxOKkwAjEyN+dotYtWCP68yW0n16ABWP1qN3azSxa596gGoxzqL/DAqXLkqsLo3HNvNRpLjwYiVyGNpRFTkkTXMtBxz7JmIy45hIih7d2tnBZL6+wPh2OLgtTWkIpYreMehZfYATnqq2iHZRrhjjaaLS5SP8EkL16D6gkOJabPvlgzJqHFsPifMMbwKPEgA6BtlDBCzX0kWxSrvV6Mm5IHVp9tGkgxIw9XScknzNKWecdgBU9XmILq+chw1bJMyd7C9xEVfZ6yFtEi1O5ce9psxmad8tnYAS5vXmWjZW0Z2Vs5roV1YkBNd5AVgtu1j/WffthQdBi5ye1JfKbtnFBXll7y7vG8SX0kG9rF7YDHuaz9w4lUBwmI/vyN37Tph6Ep7U9nE1DY03W2q6Nwqy02E34pN49oz7u8Ouy4pLUNje+QvFd4PQSWaLpd4l3Jj3nzoF/kDl8AUW5KZ15JaN4dJNuR29FRJJ6TEAGktJJUVk4HXXxPGAJX3XH4G4g6ssMBW5VCc0GLcpEmNGKmTPVnyUELehmv1gaafqXAnlD5rZjW7Uq76k+FqbI/Ut9ctOOj0bRliPJ4QEL7z620JIw4lbV37xbPBSEURYvG/gP3Mlj5B6DiiDH/x6Yx6NSGQKr+fc43NtIx7kwOyp+jEuzQwYTaJhPnHFfFACIu8tW3PK0RLQ7PAtyjFzbok7pDp2HOpmRDqa6vdUmy/s44ZnnRGeZTjAYt9uBIVCO7UODaJ/y6yPX6C7rtHHUdUcOltAt7EokU/WAySkXr/V/mlNJEfs/ChzFvfIqF00AXar+YUBmfXQ6RmA0Qan2Ta1LLeazhrkh4ape1S5WpEJdoMn5XidPMsCsz3+zoht+J0verZAFAgA5//6jDvcSJBuLQKvXgpmLphhREtxts9aZpk7x5s9jAjHh7XGjzuoh1biamhm48oHwrXRJxO2QwGByB+yePMVjqZ86qv+gWOzRNTf9RXBsjz9GMjGe5V6AggpOQfxhGRe5DUvALeGKMpy96dVFr7Zfu5f9k5DuVBvReHstE8J8ibmCJbILUPlkIbJKoA1iXWZPGltnF82bGWTCvq21fDlPvJQ9pK+UE6ObpdiWUnCMSVZfX3AlqeeESqZfIP4bOaGJgfracM1ZMmq0QPrHM7SRg4SaHQNLzI/KJ8f2V8cLYMONlPx/ocYA3vLojS9/Q/vz7YhYLH2pC2qLkBoKOzev0GNmbjcH5VNofO0JWJYi8YItSHnZRGE3v78dSJsMll/rYhh8mVoDjoDAhheZRKBRDbem1s4rLpTFIdTDTnSz16zRpd6hLmI9zd2y8K0Ldvda12qjmVvHw7H/euVy/4DqfCLK/GIarrFbPNedpU4mhmIg2RdZusaLdTz3vh7ur9ImckBr0jEy0UXrKCpxwIyykRQnP4aY3K8Wr4UXZH/PMewnJXHHOd8y1KNlX0bMA/vfVAGdUtnGRAb/KamgZMTVwLq4v8vle/gF8fiikkk4b3A+uC2KDOfRHNrzjZQiNzn+NHosI9aSmtPgk0uHfai1ibTIiVHqE6Yu725e2v42jX17W1TXbWvJAcEitRKuKuKG0dJoe4OeqA+Qr9vvd1H9eU4LqUILJfdkjxzQ7GRNSBx0fLi30JY21VPFc9v7sDCVy1uDUlQ0cfP3bquZ3f8yWVRkaU0qXtrWjNsUwKdV3TIIAPSPBKJJa/vFJq0iOD3r3HhnfclweqP/xF5Z5uuQdAnOc6LjrTcnaNX0ChnUQHPbqN8ny5GXHAc6RvKJ3emQYBLI0OaWPz7viJSn3ZsIzUkFtNXb6Bu97vfjwxjSAIx820a7VVSQviJn4YxCMPne/qa/4KnRD3JbTl1rctZBqwEOb2NlLEtiXYJNoaDbz8XAQBVGz8smeD0pd3JRb5GIlb0FnEL6zDEWKvG+EQn8aR5ud619LPN0Uup6ZhsjxzkPfx2mpXTJDnuyiPmkjuaLfQvF3qO9a4iwsDAE/xNO62xRtA2vQnLe8b4Y6s7jRPjN00s4lKdgKKQqkDMr8F8jI8U+Fd6o8LDUpY0dxlx9CyGYcotk13l/MnfGYabfKRzesaH58of2MngmAapQJCkAmy+ZyCPKKnvTykqopLp1djTllrF0y1wCbrkXt3dwRz6qBCpikb5XwDRnOYdzvzI7zPSn/FO5ygWU6oU+x/jEMUfqN5GL8/cGQiBHm7kcbB3dsTiPLqpQtmg1oWd89TMhGFJ87OZqgwlZUn6Siu3y2kNWs2rGDZ7tonFDHrxNZQXAfHMZHEQOmrvlPGTPXVmztP6QfamD+fnlvSWfG0JUoaGPTPkz3kPqNIS3g24QXl1D3eKS5AY00P1MKih8xUftya4Eherwrlk4Gt5PJ6VybOszSwmjSpb/zjVF09VXLVECB9AzJf/Dvi2KZst24yxw7zGu0EueoD9Rw+N+Q3wV8ef8ETCi27ApjiR7+Hchp6HRcQlDGLuLKSSXsZucWOqPfMVJXSo8wNkD0vRVTd5SIWWH+Xqibe+qoUVkzWJpkA6NdJLbsqgu1Fdk4F6z2SnPfe7LHDvP2RebfoOG/5lBJluXCMsFcEdPEzdWsUGXKQomC3he8UFTdbnAWkzuiBzN9EnHsAF2RTHps0tWshj4IrMFHZPvsVwf5DtMwurlDpJq8LIKNbvIj6Q9TjHNxz7QTJiml8h/iAcXzJdy4u7YR5mNvlw5zepVaOaD7cQ7kimOJMwylb+g6SzQdL8Gam4O2pcWHVZa+bZG+W/EiERfKmlu2tLD3HmdmPV9Xjx+qOpQwvgwDYOZd/ZyVSh5amyIMaTj7Mr8KGcOf+8QYv9j5lhIPrmDv//B4J5LLtEXXIxkGatCCV0M5R2z3dgNQmps39PTkppHMsZDCp+JWCt9cGP/bfMw77hzPNb1qX/BCrtSmcUz5TRkwB1/R6D/M+siw4z9rDJTwLLTUvnVm/56GgMVfCYI9s8VrzzmeMz+K367TP3fyoaZvQXYY8jpxdq7UJ5XcwBhfZ9+K0NjycKWQb12yi94J5F0ERTnHCS91SjBnumJQlVdMOllHJg8Jr7L7nBWlsRK9iPifI949E230fP0x5d0rMBA0lxhi//0N8ObNzzkVMbneq7E7DOJazfO7rlYRY7dRWIu4WsjOpa+f9ab9p7hzdivj++8GkYslTkYvzcBY4WHAZP+f60uePfiDn6bw1G9a+SkthOzYlSM17/l8e0u9D339oPtu0took8ZgtAh5RO8WutF+wFLDXvD1lTCnvg0dGOnRkabZdXls5jR/rOYba6gsGkwoLlWqbLFcJZBsnN/9mFWmS53m0O+yp7vXM8XGyOUvYnfk8JNi2sZh6LGh7cwFjas9yK4pDMFSeM4a6ciMvqCXPye6+zOu7NGooQ1j1BOEeLzgiarvpNqduqilGXFg8uMRiWSv/yyNKrpcEsHk7NHSkwvZDlQr4IPdoQ24vNHPagva6WchABj3rX27vNwmYIJ8DOOYvDsgmJzc9mm6nSejL+F76eRBxc7b/23POJykWHTCBZico70k2Ad6cV0JIz+KWUhc8MBUE69/Qp+S2cpCP9D6C+fZvi9EINwBJSpzUNN16h4KRZ55Q7bj7//ikF9tI8dkIN65D6h59Js9TnsDyFA93P7ikZChjSa/fNeMEB3OI74u/FIuY/iO8bb4MrLeuqd5IZcAzjHiWq7qykmm6nV9CyAqxhKNtsPJ/d4z0ZbopfPy504BagU5zhGjJdxr8c7RnfbiKLd8ql5ZIuEX5LFWsN7+8uWwAe8NJd8pvWj6qFqMCOHQrmIcFXLsKAqbpdn4ywTd2O5nKSNb/WQLyhfxDRmX49G0bQaJqOi3fVcUq3F0KPK47gy89L1BaCRfrIc9IO3qYkZlQzOJ5bxvRjB2OHRdLTMNxo4+DSAxqlgyOntTVi0G0EXBbbaa3kXGiKf4+4bi7MgbA3yiEAMBuNwRzl0azmdb2WVbL0HfyB1HcpOE45KKyCRTmxsUC3iVB2ScIAetIYKhB1Yd4nqUO/9CCGMWld1sKmXMdwlFMF7dgbzSk+Yr8/rGC4H8dVEjudSHgvznrGYBuL3KvJ+BQ7w+ZD4mp60K4Gl6mKqK8OI5wmVKNk+/oTgat37aqvMtNImhDmFi7VNk/oBVv9glGlLMBnSZzGDrgMIQBzx4IMlDvmFuXsYOc8yb+cHrYVsmfny1TnDF7vbO0Foqh7vpQEbWPJAeIabv1pJOYG/crRDlgHIILYdO2aHY+C9IdAKOt2uCLu2p5LThWLFk1bQzeG1Fwjq15jC2VEeVPQIz2mgyJqvX0kaaGuP2qmdIz6zVf87xK/tVhPaQEBak8jEH5tKGg/nuFthZX08M2lrM1XatvTtrBr1OJzjlFLNnjEnKUsx3k3/HM4SmvEdDZTlNRdsXPgh8ZfafYRH3Gl8oESIM5/DFWINo1v73YTArY58k7vaaCMjKNSOu2oqw/4jyktb2ttkjqL4l82kZ0+7zpGRrdF74PeQ4BuetfTlKXsno8j/r3uCaF7yhIEFND2IutmHe5jgfK+ayPTf5s2m6Zw+MnqFhYsV9fz5dLch75wF3euQ4PPayfL9KpkqPHqTg8QdOYakbBJBfHdwKw5sK4vsEpZwWgl+TmsqxM0HNE2evcRS3k0TYcoEWFy5UmBZQRHrx96RhHonW32geId6Ky+jU6Jdd9PGtqLQthwxweP6ZXmSFv6msF1Gw632faMSzVtL/anFSaz+01Ig+W7hkAaNNh1XJ5C2LXmf45GQIwaCcAul1+eQoIj7XdWQGOF4UG126qF9BW8gime0TRsCrUihu8KbO/AE8fghjWHEZxX5dDdpYq3sPEHAHdEHlal/1zzl2yhXXZMVzTGIkB+ZRaEkG8TmV234NQ1V0xXX554o4Z4LIHIayAlvb62yW4vUuZoe5nEth34dRqBbaEW8zh8WPSLQ2f9wg7RfoEj/D3raXzAV72IymrnBtHt+Ct5Bd+CNISne+WHofs4tFWUC9pvpa3XD3kbTlociso9begywJwrM+JWPosktiRZP/PEO/jHP1ouA5hLDPm0Ssx/jFEPn0aCXlgoC5e/s44vqDymA4pAet4K+18UdiZHnPy/mQwMkAejDcK8VsvtXbHBBSAqipaqpmjhnxPUSx4QuFz6knLdTiluCWN58cFsoaQCVTeOay+NvkUWAk0n4+i9l7ZNIGTLQTHb8zwErntjUpuUoBOeFoaflaPboKUPqZuQpVDCCHHsSxDmsTVUq526PvzFySj2Ym7QeWSBqKKuxFoeQ0h8hknMomLZQpeH/wxDm8CrecuC9Yj20LQ5u3Ncza2I8Y2NjTj4goTwKV0zX0hQflG6tyuJ0OgIP9Cf4rwEqQmlOecBABwKC7ZN3I4ZTGuI90b3hHu3aUxiF16m0GkeXZWG1y+bWKOOaw/2YGuIce5JvNvXRuUsuDelkXPh2mwHzxbzhUA6ZJVz/ECe5hjIMAvM8pJoIyYEQ1SJ6rzFeA42qebpTftFm2/IyE0h77XFelzHUbrOpxSse2C5hFwSe/VZYRfOwuVwEoP/GkNOTpJbX9OgMpZXJox7T0F7f7vTIDnkCdFeTf5e/ZmJYRG/54ACjE9/BhzP79CuSG/AKISTwU3D98CuHXRItaTkG0tZKQkNtWNOEyStnSuWm/yJq1c6JwKmGuNRvZcFg5LiVXe2Z93rvVKE2+3jnDbD7DsWYO+5JXV9NJ6D99hHoyCtTCBuNSdH8tI3RdQFcvrcPtDEY3ndzWDd1KvCG3Hb9nH/QuROTO1hl57lELkFKe7W39gcIxrGl14xGyvx57koqpc/rqajKjtDlyG25puGRrr5SI3QnkqRqYVS/oASax7TnOqtfMypkcscen4875pZSzQ1FE9laK2S2yOajrePvMhTtkazMmR+Eq/I1BotPEERCBeSnQu5uu2YWOwKs54Y0c3AhAHOAunYNkM11oUme7Z0X2z7G7Jo6imgfEsu1gGFI+r3INYbDy5yW+xxM4q09I1vWV1/T7stqv1fF4tUVt0GFAZnpxs91gc0JBZcAxanFX2C9KDpd00VdM9O525YQQndTd7kj4f9fbVqTZWzBaE3Z5qiTkj7NLQB/e4dVzJ2dnQh0tMu3GHMs9XpT/7ytnGEovWr/oZ4ifEx12t6ewF7CU1MZc0ri3Z8fMRwS2K/dxhWqEltSRGY2+5OBnG1aPFURHniUmT/fvleAkmwI6cCECrNWn+njpYSWvzrhSYZfOGiIPXJHfeZ6flpyh22+M1saQBFxXIEHm8vfg9+k5yGiFjntyEwMaVGqqXHSuuxeNnca/TDgInjJAa8Lfgmh5ljakoEwHEK+Jpjp9yLPoxUinzMRzKtoH6Ci/t75z6Crvp+1unqNR/lPlFS/lqYkmLuygo75QuzFnpcP3t2laMEN7oRJ3VozovZ5ZHBvSQoH0UJV3yPGITandwjd8j0aXNxk8J/tdf7vWcibIZhbV0my3atLivHrXFrzIhwt7G8u6qKZzlVFfUEaORqNDafm5OVT5qtjUVy/pfZlOzTvFKwHr2Jii0bXERrqcao9xxiL/XmTGMQMOeMjj6F2ntwYlEy5mvN2oHCctlDGC90llBf0U4X/y+nfnVoyWGrn54TNH/01Qsc7KXWzXHqFnfcD135i23q1pupL3XLCKOMOo9/6o1ek0HZ7Gmxk4lTh3D2hcNCWsDdjTuW8NgzyrCnYxCXdHxPExpYPIxrn4d7cEl5L78srQzW+OHHda3DHPf6tTaPK+gWjux3/P3IkS9Kiwp7RzJ6m1r5XytrQJY5VxJnpbNM7x/Jn0E/Uq0Dl3T77m5Dq6vWLYY19jkm8rJwLlFpc+VyxNycrO0EyYmeZEnFvwirBip5hXzTBr3VvdFiIMzhc7V2Arkyi+l+kCfic8Q9Ktm9EREzQWM35/zfLTEOgD3umlyu5aGppGFi+OIJhMAbn+m6PeTc3GLU/0O2HAnyMhdygot9e755UaA7+eMb12R3UAVNI0SUBYcEHQ3hbg3jl7BYqEt5//y/piEIulDYPmUXnsD7cd8HXgTKjs/g0txZClzRmrPc4qCWAGdApEixJsin4n8h+yG+WM35A1gJOYVANj1Uxrkd4CQHe++obyJhhZBj885JkLYGYfJyJo0TymBQL8cJfT82mtzqS31krCmgzeOCBfVwfD1NS482UHQ54VDiUy6iFyJbAfM1hKKflZu5KP+YH2WgAuDfCjpTFmNlkE9JVGa6iU5Rj6zojMEXTntPdBVbe5pXUeKQQ0wf3bqLCOvwGObH+Cl5X4dnEkHMlYMWicDylOxDItmDjfUOJF0UqR+G06KSvVMp7tHzULeMXDOKwPjY/vbd8p5otdG0LfWQzpSGWuH45xJ5kkBWu0cyDkHYh6WK04uB2m9JPVVij5Dh6HrdX2sfOQ1z+6k8T9j3B2e45KnyfLWjr8Z2xDE02doN4hLTrbEMm/cT7iuMZbScTwWWiqQZ4ZSEQ98u05OKoDt2JyfdAPl6mlIAeo8H2UqRdWi2vZU6bu8VOccWAGUPirHevndeV5jPcuI7rx+x7gmWzW91cjJUJeSW+fvbua3Cuz03qY9AKS2Gdm2/4aVrQjTrhLKONEkY7gPiYFL6mqX2u9/HkjF7kZqVWUR/9heja3uI52wIwp+4ThM0Xj+GNIVxAQq7bI5qX8vmgLvQSt0DYQ8AEeL958i6OkKsBimbsXaS2WHj1NwbbM2BgVpF5xhE4FeHIbDYkzbOClh8Jm/cu63I0Owt7J33MKhtDZ8aqyzvnmCLheX4rpmucjV6+qGsBUs4wh6avusNlre1rdi7Qk+Voa6U9ZGIv6VMKHnzl9MRKk5a5luw+p5UgLzNP81dmONY/xUhZn0/HeOwwo3sic7wvW8QEZ/q7G1KFEKvmlFaQKVd6Oi5VyI413uhNyDaiW1V1gqljScRiszneqUvHWHgf7yMc7VGkwsedhQnXRXCacRffmE0mPaZJxJoTpEiwIzNUXAc3q/RCUD3NNdOi/nDMyt4X2LT/gMnLCLRHJ6UBP43JxcKdJBCuVX3QUj4gVQGpTIAqa22QLTEIKuofdCZ2zBj99ht1dtOs9ZwTKkdy0LE2TkLTzPfzS80RJjfyMqo3n0ziLK+dbJGwCqDdB6FNsfWWSsS3REdfDaL3PuYKgEuHMEfdg4LqVlgVc1N+IFnHb2DV0wknSm22TZHIHONxS4N0Rl97TKFQhpuGXqDxF4OvNeSxJPhipbHiy+6beWMQcCZffdtq2DicXS43pe1f8/JbEZ2pf6+cUB9IQBMuyejz77JimYMNs9d/GTQXTmn2dtAfSKcGYaCtdKhUwPaetkuk9UZAyBaeKQuoCR9YzyXVwyaPSBtk6qcWJsrOkA98n+aOamcVxJVOsRQb/BK5LN3ptNBBMlrridw5py5dUdH9qOz/nntpF3z31Yun03K5J7AOhrnmu9QVPfNNgJot22Yo7ySN3jJq+626opmF6mIXwn+ynNaZR59eqzSNs6qpN+w44V2+HFWdS1fUzBENuI2FUdnChu8nyGjgGsiC91v/J5od62joTpfOOI2GH/hPJm0uJGCM7yfUwcsKZhPrflnSLi+xmIyiAOYRtkaDzrq84FS6ca17mQ9llotdlOuHV3H/vwvaNBgf2EkNfXPRPBqzbr1Qt6+cL3NugFGrDcoxaDSgGMW1K/ST2dGsfXyxep/XajSTb+ALEFnJVQ5FjW0yKv82XzuWmYQrfhOkS1WfbauuQOREkmrd+jIEyvsClY+qAEy2XcOlaKbm3c+njoOVas2+CNga0efU9o2waK9rqCM1zBn0c3zjMrQDmJqunT3jDfkAd0jLBa3zGhaNPyhaHz/rYD2kLJPQwzOY1pvljTMN5ixctjgLwVXprh0+5JRgYAfbkjX2cUZjllsC4vGEKLm+w8OKrKIdWXK+hmrj4Vvks01i6L8KwX/8Dm52VlDsXdqUueDUF1xXUA/1WVy3KII6JhmxayKy9zOtoGYmM4OSKesOnHTcPu0UtG3S4FlDckdts4FYWWZCbtjXX/9iSUBvnxBnWXALFwidwnWhKFp2VodnePtxlM9YNcf0qiKta1HaCrNJkWf9c4Jrij5ORNCWIFwYy4xJZvkLZywevf7xVLBPgdKcMhGi3wvfoCyvuCKUBeWbIF/R7O7w/TLNMurGyD0hGlweyKpPI9Zixytwx5XRlWkIelluUwCTOT1gvrLpMhQHM66xyZHHlWjQ8DZ0b56RqXE83zCj8jNhcdUtq0Oz895UDKSKbR851quQdydGxOCNahddTMNn0xvYjfH1EAuQGMKCZnWvdb2pIYAGl2P8/0aPmj4OmV6nf0j1uO6OWhH/dUp5enn9Y1NYzDJHTCWKvITOFJxJb1mJhmrFH29F/W5jysg5bwix06T1IGiJBeiU+q9KJQNgFzn21kow9ru+j5l85sGHSPbRaZsTWM5caEf/ZJrYtRdpsG61H5A/mDnUFRAV7DSqD8zUxO88RWIjQVBhilZxxMYgkEy57mHBV/zD5uLvVhG+IQ213+WUH58utTXVkY+ZX4FMJSnH1bgyfpOkmLyDuTZdmh/n/3PEGJFO/R2jHgl1jbK8K+bBsgojLJ2E0jlTtZQPXOVK0KelWnd0zwOb02PiOkMVk+I8f7NTxjo3hKRiYG0OC+L4G1m879e+nddeym3CBNufaMNvNswW1vG2H5to/0Xy3yMcLdDC2pN3YgL1P3SfkipIPWoRQNMNXQFHY/yKyGNvtKEGwL9HGVK0m3oyZxJUBl1zJd6fKfnURDbGCExmiTBAWk3ctbEGRDfBVBamEsl//gCHGyMxCxNYlq3Iap2CtpHOUiaNyUJa2lWYodcyMQN9ixtDyucvdEJqQmSUl2UzTjU4NJqnOuCxuMDfD212UtZje0UlgwdxpHRcFTzoHAcsmEW3Vvym+pMefPuUEBxkJTFntbZOOb38Dy8rDzTxk+jQBGj5Qj56nPVkl2E6h5G1dIi3bFJD9aHSkGhIH9oQPD6BKnVbEd8mueZbQyrO+DSmxtiSGePEKvRSjxnqO5Z6IrXaMI29WrfJg5YfH6nhdMyM0WS911OSPjjABbo3u+vawA+cW9lWbUhub9SsgNYuEWWBBvfCpaXDBbbLJz0r2E8mEp39vl55iX+7R9mNNoAn5uG7k5UV1AzMdXoD+WILNLL23TMq1KAKA+LN8Cm9vOv9ET9K1n1f8X83rnPapar4GcDgihtJBDP90bbNPHXMeMRo9E2bX+/hZYFODszp9ZGiDspMKdBV/3snudB5AdlXPbULGTRNtJB3sR1dEskgl4mPQsybR4xo9geiuLpuFnysEhWonjp8KSoybnUiYCw4OyZJRP15sUiMSJb+8fwvxU+CnvJ05ofTt951aAs/R/5XVA+3QGqTsrFP2z0ni9PTO8GCWPgRPAy4bU/kZ3oEB6/8J8IvtW3SdxBRXzRUzLeZELc7STEmObyB0IIIUMNAW2lOSGNJoqrr6/TIDyOxtzV+DcPBYS2wg06ZoUBcLcXk4XoXGrS+r4TFvv2K87LndwTrIukDaZXVbcLhdR3zRVyukE83s/yxtDqZfQf9r2nVD4gNUKN8bX24R6QqRwtprvHXljHv5OUZjbfbpHd6p++yDXmlCUO5/Dm4B9djyf3dXTeqwx3cY88FKesbMWzLZJZMuC0cKxLWarYVS/64bgdUkvwo23TtrRfMtSAI0HwCu0nIsDRQXHRgt3lYMP0ltEeC0YPFTZpO4jIxHjU3zfsvleAbDYR3DVoYlQCl1iMJMgdNTmT5QiR4dCIuqApzEu1YgjuOa8b7NY+TLt/RHzkHOCetRDeSOFAXKvRG6CtTPWAhkZEMjz++Lc3Elx8acRhO9NCkVJjCUtZDzqrTkRuvpDVExxz5H07afuVXojafV1gr125keVB+f8bEJvxRFs2mHNzvSbh09U3E656+Kx3jVEQ2AlQHMj/5LobQfTIbJ/XRg6FXnZ8o3wXna5Yjbgh3LI0YmFwrf3bYLs+05qGpqBnk9rQ8ldOKySZOiYi8uQzljrDcCajk4mJUOMMMeQR5MnaUa2drLDYLKXbbU1x53HKn24Rr6pPq4E9oBflyi98F/Ly1A8BUsdhBLgo3kJM2YDDTVTBMc/4EeOs3QY8dsH3UCy65s4+yJ4v+sDiSKUWBgExL2B/9PUMCbuDaYnWs2bv7gDLSTBK1AsSto9GR2lDUaYSJuT5PwyfmgkZcdPgUor5bBczQXug0nViGjteoavd53VIMe0kEIn6fzOKO5PkRS6xFlS3wHvjeMLS9rRWU0U3TUBM7YN1OCyHp2Cn39QDe/Xy2ZbVkjDqXZmtVa13ytyKF7vUMyu7pD+WPhSO2oCw4HiBk5vpP3ESa+jWBshbbMNi79ljKlpBKQ2dbCQ1v2gn2DZ0IkNOa8P0vXq7x/jsQ5LjlxVaN1x52QXRad01GsO2MQMUwrIHbb0uuoTzkkUDHZQLX1sbxyBGl4uQJ4tQbJl4b96psf9NVxqOtbA0LVloqL405BJs4QHh8m+o/1D3pJCAqTxC5fd7uoZdfOkCD9+JUK2JunghO9VA3Z883RktR00UQSwy9/6+9uYdrdnDyulnmBlxK3OaDXoNWzvjPumf7jLf3ReLN4xgdbiLHSubWl1b62D2drGFljGjCOr+T1C4cDguz29I82H55sxS7onp7TsuCDjRWIGglnR2NpErSRJoTvR9Lk/qWdSi/zIsNXAShauW1rjF4IY4Q7vTFK+/DfnhmyRCOrgC7Uo9EteV7bMVt67kor9W5oM22T8mPLqupljMgnI3fiu+mCZJoc4RFXXsIdnawMgsaMqoupBvNHDvbzRJ3VwO5MzpP3HsdCIRNcyZPWGSFsg/xe2ERuXbFovWnqq5xsgbG3j4aJNuTZ+1NuO+Z/O862YfxKbFQSgnEgKJHGvb2xFbGPbxu1VIoflARH1ITgsL4MYAh9vzfs8tLuAgWjKYvffxJWvfb4xpJYhV1vamBiSMZNKhzFQMf9O0suao5mtFKzB30c1yhpKrPaBb+fLKwB5FR+npb2EwSJPKTnMm5DWGaxvl2zMCqyu33c9P7JE65aankN+600EfAjtQwq3s3dnOvdMHR/LtDEVx47RgW6bo5GhICiH0pWjn3NY749JNeSM+TV+rNRIMpomFpBS0fP3KeNPwylIOmnKj5+FpKcGLTzGcpL4OLOc3+P0V9vNLSuD4FOPmvlXxiEIA7LiCyxR+hsl94dXTAD1HlvajPIaMGY4s7ahp/ui3IoO5nhMVcplCFZglQ/Jruq+7WBu9X6L7Wj+mS7mJMbzTO3hst+fJ/PTwac+YyCh/IUauwwQVeMe6HAPoIM90hZzjvXtVXchpGJuEqQTcn+OKqK3d9ECTsDgw/5UPaQqyLKfNy9nw7Eo3KsJyePUBaHNgfj92SYi0gmRkEmQP0+Zy4Ce9DnQcdVdlHaPgdIaMwUTdyyGeaW+ipoOygvKHEcf+ecDy3EJJbVhPRsHA4i7ehgWuxXVf5POH0b+UmuYQMqJemRi5KFNM/JTtUZJni3QQc+0Nc2Ij/cemhtN3USsPm3Z1F1F0IyLJrlE6L9fQBY82ELzb+dDvKQAOUZnC92vaif+//2gYu2ufwoQGsvUqcezTSeKcky23XkCdGxlCX4WFac4SydklJ0qRyEAnpl1f+VJ/5FW3ZlE5HdVgjygIwT5pS4vgGyicyI+IxpR+Ghrj8xlCiHkcj59MQ7TMUJrYXbbstJNT/pDEe4d0KEA8gHoKOtSnoKiUucmNMkopPG5WmRlPggbJw993WvjmLY5Dg55dumvZMdKvXjEDI2/c+Vm97Eg2zfYCtgiWmC3f9ykAEhVAYCLjKMR3SP0T7N+Qz4X/mgcm9t67gMdrSLppgSgtpiEQr76/tMRD4+XK66gpcQYY8nL+pgq52l01qfO21DFPwHlO31c/03P7tUk23bVQ/IkZ8/SvLUUyoPNLW5prURP9Md2HsyRVdmdQjMJuVXhu4C2adhQYIEONUCHqTq+H4G/e6wlFgt07JYKRQW5TqiLE5bW3mXzuFcPPNpUpmvZXH3hv90a/9idUWv63YmIjeCfoVO+n4kOjuMNy4tN2SHLqzqMJzl1HUK0vusZrghFSV5Z8DJEoLUT2MkwOvTQPBGQDx4//zyhtCeMv1fXOwqvwzEKsPyBf72c5iRjLVcP0EUBX8T2vjcltvSkkKzIDSbmb49qc5C54Hmc8eYG+3oHo2fF7UQ6lrkFUSTlt0CAr1ajfQCPu2ob6HAPoEMAXdkCHbkDdETrB7y8KqmK6ppdmwCj/8wKvUkrc7s+GLQcj+PZumn/aTDNLsMh+eWJmJt1gyDu3q3kSs7lIHZ1g4ySBuV6YDiYbX8FrkUYvOrbaW279SOn8W2OBocoR6BjRj0Ykm4E64y5TLRHx0wRpdGhNFBDYSydFGjmM90QKfpwLhsXQ1aUAwf2huXorn+bmBrF90TcM44toVaE7kDYnzNhiQyV3jr9RKEB/g+UMX/HWfT/9ICOR8TRsLmEBds/ShI3oIN86bLXRRGILZBvq2s7VSLFA747UhwV4bjFlmnvBv/g2rgMuYyflJp8LjGQQ8M4QItLl0udr6DSKQnnc9X5mTR11Dgabph0JbhPdvXdcE1/tzobeeN+XPUH8XIoh+bJFfgZfJ9rMpZmTlGgHJ7TXbtXToZjNjEAP821/XblR3FlkN3uve9WtXJCb7BGbR6YNY5tMsUkO973O6ytU8lb8KufksrVr67VMbz1t9MMh1F3wuhIG+KVD900F0qs0tsobY5khYZYt3Cn3RLKfIDLTADxtlcgf8sVuLmsWA7+umLerLceXryWcpARACoNH4F83p3KcC/G4TxYGmMnFfFNM9yeiKnnOoiHRLAoX9F5Gcb1ElibS4MT+AfoiOtigI7PRybnKx3AnnQS5MypcWG6l6jTBc9TDp4jwv3YiJDK8IhQBJcV8+vI8IJ6OoGZiI1xyAp1zZm1BWJSrg9Xjed3ixJaPAELUtjgeH7s47ZAxxrK6LjkgOhtnXMIISznMDFyX0PP0+XyLZHkaprhDrdN9efriKqMzxeyNiaERbWxsMmrbXQc7uJub4I1SM+fN2q9JtuvGeerrXa9iAmOg8ervJOaG5Zh+Gty6+C0fHvpFsVvQOdh47T2bSPJXBSYxH6h1Td4hg5Tr/cqa5RD3SCYFCw9g4QzWMn+uFs874iatnZCHoTq9J/RrbaprKo8OVvTxMZo0ugU/mMy0vjXXxyjjjIC3YkCuzWlCpKGUcQpeAIAqAK3YyHoEFpiWkv3mRYAXHbRoQLqBgdeI6LZJ4F6TqYw7sLzGFRXEft5hO2w+BDYqDEIcYvDMIqY3ScjPRmY4vz8XiXPvBUuL48cxq59uhuFAgDpGspdAleuR7lNNaFmxrKNkFn8S9b4nTVLYQDBbOLZToquHc2s45ig5dp8G42SEpW3eZ2V+ApIXSK/6XEt6WHF9KeVf4+9/CbmUEgmzzC/euQkV8L2sJIfgSP6Rugxb7IQOwWAKttzsT5BYih2LNCwNjf8ywUg/1im/EyCuZfe3qxoly22OgxY0oV5AJ1MbzchWN8gFMbunJLb2Uk1+bc5WPrQa4S8vL4R0q42hqUW982qtTnzNbghOsAH3ikAVOMSnM3v2jy7RskwYSoMuu6oYfesQ9hGlMpgF5WKxWjFcu8n5JM8rkD+Ki8TLM/HIiWEImfv/m37uDTvvWXQN9pfUu6xurYvbPU2DlmQP5WQpUm4KJMnAD4UdxA4WBAVGtxfVEWVAQCcozvZ4mZNuE2nNIFFHhX4t1FulWlGvRHlxtbhRmHkFFM6OI6I3E/ybY99PK+L2KzQMbbOU+dfC8Iet3Uo3Rhg2rRXkK7Lgtj+6IXMl7AjkyaiP04MCoB4iTVtEun7x+6uBFoNZfQt2DZDi7iiKucWdWocFaE1DhCo1m3UUHmrMF8WskXCktqoSlqgTvklxWX+sDREfqGFgHg6LnKKcGm9N+XlitLddh1xXGDC3Es97WjSQjZMIb/ebVp6tU6Ge016Z1Aos5hpQfMB7qqArsWdYmUW+DtnFzsUY+Kn6GF6BhZB3q7u2ZoVhnfdbW8N51EVDSA8Q86z/3OjmQmc88KAxgdt4e44qlJOr9PKzP3XjHUbUHdwb1x2hJinr+EV1dB/ekAHcyO7rqT18CGhXSxJXPUn8Gw3VESkzhNyv353cK9CzGk30JIsuNMEL2f4Io/A4nV3Q1Q3KeDSiigmD+02eBZYtRlzMgaMQ+BlW0yxyk9mdcMEbWYDGbWb9mY8Hnm3EI77G2RlE9mbsQ6DIQmixW7Yv3ZIb+Zd7X2AzA/snNepzO6C+6E1NRye3fVTYwmr0rNHKKqxSlHMA3seMhhQxrSHJirmG+JWadguzZLakKz57uaxlOftcPMA4sTcGQwupHJ/F0UBTm0FReK+cejz7abljQaLIBr/dtXXsmihXpPXQTMjNkDDkOyX6wPo6Rs7B4CLizGuKKnvhLdPcD9CzHGWhPyNhPHDttzZUKCE/DB5iQzA7aCJRB7L48mVl4hSR/o5GcU4gG2TRZoAN2wcjRdclObvnwZg6QFfBbcuETBtccP0cFrsNmTz9DNSQ2U2be6bEex6onLKZ7EG2kdKUnUN+Nle2Xa/BIts1/rwHwpwdEVRemLzd0L28zokqpadpyl4OC3PNqLEwX7OlZKNDhnwa2DgijhqHM0YKv7bKgQHETSzevmKYm+bzUF67GiTYpiKO0JsXig3LJu+oA/us9U5nt/nmuerx+y27VXlbiNlD17kWGXLfa9wzXalcxNhoWUfph0QTmgwm3pEGtWLdIgvqYNEVuWc3OeeozRkXgLyARy3f2d3PRX5mQtulW0/rmgwT2pGbcScVKMns1xh/MjjChf6UEVbtYveBvlunPNDIDW8tpqDIdsdrY7uhGzkA/i8QM6BxsPiH9mfXRErL4Fz1TddsYx0bhxbkm3H+OftIdUbNcLdFbdX0C/leKAk+n/eAR1qkkRBTN/DIZ6wzQFIuowfE1oiZKiAG9hZmAHdwaP+H1uBVcz9XyL0QzSxuGXt6+s/EgXe+a/9WQ4ImHm/CuQMvzHvTU2tl/d8kZUURofjDhZLPbIQYAt/MSnG4zXZmpvA0yhq+h2Xm3RuEdbHHYc5EygED5IXA4iQQ4DOONEDQt545qeKIRsx0PO+0x5jjPT/vv837P471B3L5YR8zrVgbufpWCzQODUMwN3Y0qqsuqk1L2FkE9/fAh0yk382N5cS+0aRBkKLqetoOaUMjDuOH+HTSN4awONtTci2Ijcthi3Yvp+O9whO4jcxkNkmiBrMK+4QFZMcML8ryemmaCz2C7RbZ5EBsCHbeoCWdJb0qezNK8bCoGKyqn7gExdXqGlunp6Z8NF4WVqwKo/zhc4fmoZDxhchNkVgTSaNa9GzmC83xIFrx8MdDBmHu2ToGghXyzPuYMUmOTWIlnknFwZwoBis1G9h2nASmQBoTk1ysVv5K+22szXkzUeO+npF+ozAAe7BLOOOw9xM/cd+0MM/1bszdaqvY1aHzBZhXDFk1Di+eeK6OrMvae/5VrMHzejEn789M60N2cra9x0H2xRJndfwBmX4zQ6NvPnwEcSPJfkkywdNR9W33cjtYQmiDaDpC2C207t2IDVdrUM+P8PG8XLiDk1P4TgAmBDa5KYFp9D/TXfjFrMRPx6entn5Tl0PKZj7vPyQEuXi4E5Tht/vfEEcGbJgfinUr7QRBYm9faEGosiwcexP0zhM1uWLkyQxNLZxW2zE/jYbGLe+44zbc+j/BICBT2+704JoHsrYsWs5vlDvw6K/so8+iTle9ER9NtG0+zrmg5Y7UbAQudeddw7L5V8zjpBzzuS//7dlHOZEj+9Di52u94eokkyEbMC7TzuvgOsRuoznkt7y97QfwHS/eXtWFbkCSJcrBf1wCe0wRKqXaBepqLx0LURVvomC5Pd/V/YEZiEen/L598OKlfYpsTa16uyE7D4fdVMo8vIFBZDvxEBlZGDAbR3y/ihvAQfqh/NBMrhc12/F47UU4uZdmGX0s9p2bhepSDz8oiu4xInwwzOnPZ20HsD6jHTYiv4/NI7TDMJEzA07E/+geBmEJNxTRyXyqes5LJpgjpUZj16X39yhuO33EekgkF9kiq3eudJJNmqxugUNnQy6F1gFezrpMZ+ZUQ0q+L83jn5w9Wp+WVLaxAX2DSV5oLIrVqgYoaGedIdGO6hwHmXTjTnUT6xDd79DinJjKUapM8rfz65ExFcjCjgiP1ku9fqojutrGU6LNY7mBNj/3jiiGcU1PfOIuh9u2e6N4mfBhToFhzCgpj0r9FY3kbK3gsF/CJ4Jt8/AcMxP9EUaLJHByYWkCDJQxjqsriDYomNLPk4nhYK2l8L/3jhIVfXxv6fGMT7CvMDy/5mPhHrVH6QE9eFCY4oe1IwHEl8hVmIOqydQ2zQs9ax1j1ND785oLjPW2G1jsh/dtzu/x78yjBVq6KHjljF8Q27F9t8bRwr7M/+tcQhi52EqH/W34u7eCIWMnzJEv6OLO5nSNow7Vr8uMb2X0N8UUexLbeBxU/zIKmbI0zy5hVwJanrIRs30se+N1lLf4F/iapullHHSCo5uZlwNMfD3xnF+xo3j3GQd4v43OrhdTqIqBenR/4OzQ3vbWfGLtUMUOjO3AfMVQXpIvSiCWZxuWvERgK5K6VVXfpWXbf8Ar3l2VUTmgDj8urWN4041eGSsGz6zXv6HxvE51hP0MOLvddc5uiH+PLKKmXhbz2OPp7/Nwe12Gsu/zdDaHq9Pnq5wZg5vG3kkpMsllTk9I+U235prjVvsN+zix6Fl2KhNxE6y45/oJq9rEo7fGUeqc4xxdvUvjCPVl38WccZy3cQFZEV8fvjXTm1UEO/Fem51qrDwm9UBqd9OU24O5AlxrzS+OJTkMSflBrlLCNBQOvOaE+rZbGd1c4yxpg+0wWeUH6MInk6oBhPc5dfHFcXz+LXUAeMwJb5vqIb0G+abiCKVZ7L/B+vTi1XMCXmn82GuRVSt0VgRaXcRNxt7391kUW7SYdK1UY14APEb1Rf1L6m3S32vqcHQnf/6JKWSLukG7IwiGKP4d/dduNvd8KMTkepiXhXQ4IaNYwLPLirVbjrawdTn56KHRFoYnJ5qAA7uYSYOuRWaRE3dYNYTzkR4HPNtkqJUiUbzdsK8G5Bwr9uJ3WMXI81nmKfMhQ/QsFnl85sjK4CdUZx/oKj/rWkwiG2CL3EFNMpFngIQ3iPXE40WUR1JR2vHaqo+06jviBGQfkDglVJzOKcoQLymjhr6FTnOVaorV0UQU0wCWruvmWhfqy6mE96hEGAU2rAYAtpvjstLn5Q0vChwHPhrk85TZIAeHKmc87IyoTkeHrSRZWivuxS6t0gOopo3PJtl1nX82VpObgFUbIwL9SWlKKRilpY5K49oUFf3CdwncVp9+s6oXLJBJ9latXt+qTX7b/bpnT+FEuUajt20GlvK3f6f10gyH5LIZPpvQzARpycczGT6Jrsl8kfbrh5cW05KiIdeM1GtI+pDFh4BFK7ZcHYI8n3V0QhD0mSd+CX73zVCjIDP3x4jyzF8Ilvz8Hao3VLQJxooYuxJGxRo0p2oWNL2cnjjNvZfKR1uz4Jm3mZnXzLM2vtBKlBNCaWNCTy4ldnsaVuumAxuaxP5z8/vF2zZkemP/Y0edQjE6j8KljYF7NPvvpCdIZwB/IydCVa7zOuaets0FgD+S/ov/+3nqYlFyM6PxUhbjtBrcK+cvwXJrD41//4XZ4Xnvz4EkH50nr8MgDsuCvvW4w5tRZ8Z81+r8UWILQNdzEx387Tg6YLSH6FZdS4MLV07NF5oNH80v+429s8yXuoX9qa8/tVZ+F87YeCs/DwHLNgR1sDwqb2UedVGEZNu60jLvGJultFR8cdwuxpVzUI2+olx5WYGKY7uG0sxT5NFgzJC0EHdbYfbJbEe/3m9KNGBr62Aj5f/7x3jNjl3ylVBaKBDHl7xZ6R715ZAE081w45FYOpLkj0+IWMaYg0FyAkZBAARoGJ5JWtJo25fCcVEtks4tKADOGdvLthNdunX/7dOgdj/Y9LRiHJJnsbbIOxfCaemnghYMube/FBFsf3cvnLCaTfTKfh7cZnEhn0PnxiCO6ch3JBf2Ru3u1XeLv8fPUaahRvp6JUGIUMNvQzAAf/YW2k6phXxQx3G+FBOqMR9+MC7nf/6D19i/ce+GI8cvJYV5fI/PDXPf10IYWk/IEHcu5NAgxVAG7u/IhuA007gJZTGvL+Gc+WEtcSwDxipPLS75P57rrZX9x8dQdm9GMYZsl7+R+crzJXw1x09B2ejio3jSXVi5EEn1Jb0FZpfy/oZU3t+iL29533QeL87Lk0EDTlnBoK84JwZ6b8zjvhqHIFONKCT/LsXI7Wp8gHV9JctPXPDmNvysLaqlDmWnKNL1jj673tqpTkZpfkLKZjqeGyZnOjWUZIMFQvinZraH/5VakDrKzbkucu/SYHwIfx+Op9VX+dzaphYE+BOVYbT8GAGlvfoaIor4ef4IMY4zqc9bGazwhlk/xjd9KOJJNV6cE/GnZ9SioVGfldKJxIZdvNDQu4vm6MlFo/P7LFfsCfVGFUtxQp0AV/8mXF4HhzpcgZT7zXYQ/keYBVXGGB5NY4rDe65Tkqy/9fGX0QEpfrBLk3D6vmndSeStKB5VnHvNgK7tU9pSx4hRsb6GrFvrw8nUD0pxuKqHNMnzbkZ7mXindVdKWksAPoWALixSeG0ypuX7IvMDmvZr0llHgruC1Jr+u+qL4apOjwe2HgJIhabFqsLCgB6S40bn5YT5+EmAi0nuWVWgPJrxJ5w7aWviRr98MTQlaHywVajCLF1gKyP+f05uwXdToSd7RoJww7z4NY6eeIN7MU5J+lNqsDcFGa4qjXMG2qTPTS62eL6QvQBKJQ4lxUqrRvfdR5fClrdm26KGH6d740mzKh9zbGAaGdmG0hfYdoF9YRV0pGEpxQeP5Ybad+LZ4Rxrmm/WSFKpaPUOH/LPhHuR9tRzmpfbqHDsLQd5n0fm2m8YHhzCrvtmjW1qDZpaV86fEmncwZ9lcyC0jaOdnImyI39N1YNUuGXvGIz5QIY8VGERwKbAPjJdfX5M6Zx4+hVX7Lle81dvoAPJTrnYl49zhZRuGPXLD++YUbMORcngX5SRFNf/9Y4zCvTjOa39g2hYNKh8VaT0NITDk0a+oi1hrYv31ZfH/Y8SSm2sQnQ5SI5ZXgG9CadHDdDowxuYDOuf2ABafSgMKdX6mLXlnR+tY6I7Xj5Ls6Ksd/PFyZJda3s0zikhPAusF/JvPPDfYlbK+VbqfZ6Qhn2EdgntU0qn/cXGORu6qAFyyXNKzR2Rn6jAp7D8IY95mHbiIpWbp2idswjkDsu+7/iz1Y8J1c4K5ihnuTFONL3QIb0EGzTcqNHve3OX4tE6t5QOWe4vkjY2RoWwVLbI7hlUuSTqWXjcDIMkH1O1ksrUCuQNt0QWcHyMhn4+ENhQP/aOBi1R1Fj18cvvbQ3jeQDsY3x55IYm73I4jWnRIt9WW/4OZoboTAdud+8xNnNeSVoPY1CopjSabWYaNn9qzTebem4mrT0NmEn4i0b7xhHRjqJ/1tSQjMBCTk19D6tLMpsKZzjxtHXjfgy6lF9pW3T0HM7jrkoaGp8kGejXRexiFS3Us7EL/OFG/HT7nG/RMV0Zhw/xioIbybNE25x8tA62m1xuH2ITRaoExeQuyXCVd/RnETJicI7EKLR+zS1p6VwDhjH6ocmbiawvGMfr2I7fWYXjKjOa+uDmE20UN5ujv/nhbSx6/ze7Mdl+NQt1jfnoSrvmA0MEOez8tpUJCvq51MGAJV+GLzqWb9o+6WpXi5uiUbRcSfTqmVbGXRNH2xtvqodBWicdN6Os77M1kfyyJEC6sm4aXyVy2U+5vJfBC5zFUmbbSyPUDoFXqc5fYtJvZkdz8e3rIdbzXWMeb3Q30/AuBjTSb5dkCySPeDnTa+zMm/tHdV0Um+d4xydNyr5oeKxqtaOOUaFd4J88jyS6gtywHxoA93AtUH0d4EAUvYATWLhhj+vEURCGcJfB3rwqdat6+b/deJNwnRaXclJD2lBPSzPAKfLjDgODlinO8GN20Y7APYCWVQQ5AS4mPY/fcxja9jD/hVLQ3bHMWiJ8lBQgNbLAjHDtO+OC9Ns/Pcrs9IFha7xRf8b2fQhfnvK8yksD1Kb3RA3oAGTiM2n+hRoRIU1mex8I7uFxvGI45rzrjti6bF2v4ePK/LxgzjkTMveqFdNrw24L1BJB/us+6rvXsK0TN6S/G6NdmEgOSxHyKuCZZ/olThnMa75N8c81uRxu0tj20/veZN+khIx+ZF9oQ6u5TmLtg4Qx7+X3/VWyY8uQ4oKKi/saAB5f88RXlG/m82wREkWSubTy3m5kQ9NQgoyFzE3f8KSHhOc6Tldf0y54r/mOsqOHg3Pxr5Pgc3+AoIFWAb4HAlleNrtNk4vMiq9M9R1On+p5LnNlrKpmYPrBcaKWBuNUGKHaPNpd15uHPxFBgBKh8AYkS0cb9LrFDev8qtjsSZZmMOc+lX3sPRPUpR3/XPjRhLx722jDbDO28YWEx9FAYShJsqJcRTYjubXGr+RYlrsbeFzAuXhHUmxuAh34Nx4te3ERnpdtjL6lyeNkVveZDkLzop6iwu3JVnz2WtVx8aBTIW9Hab7dtZ85Kayukt+H62M5D0W6wuti1ju8mDq//lIHMtTmEhtAWVra5OTtKgTM/JfirGszJM7OODYYxRwbfaYRqAtN9SuinAnruN3At1xB1LSPzIvrATiYpNjDSPGUZB6bpL5O+dK084aM6WLA/l2V/1MPkBe3krWpnEllNbV/I1OUHLT6tV7wDMfGpjiEZpQJmelOmLxn6XInjvJSkH5vdJIezgWufk1KJhJlb7pZ3SzI/6H/eWwsfLRqCNoZ8fd+Fm9IDbvc0Kxkx5mSGvwuIkAXfmHVj8fWGEZWpoCTELLgHFInBiTjM/Gp2Yf2w4dWc2lzw+TEc+38TkjREZ97zmmqt6YatoZh//nwJWJoId1cp+2Mny3VkjzZXJwnSdj3GG6rZ67z0cYtLh0XGylVPf+TGvLARo50JaIoieAPI+zth3mTgYipOnfSEZf14itdAC1trM0egpys0QDK/UlClbavdwaLhcJSdavB1D8Qwzxrk2eGD/OrN5+vllBT9izzHus368M2wm03dGDc650gBHVxhZW2bDABq4pc14VAK1LlDfqAPU4b0Lcw88qfPptMmpe+aMNJsWUzmtXIRB8OpX6koOE0UKP9/QKb1AkQG89z5Fm9/nskEM4tjOY35SPt3sjUix103RHI+KB9A5QOMQW008jD5XXLDLVODEB0FBmOZX73+pF/dOLK/kIbsNL49+v4S8P/XgpvwlFvnNxXqWX/Vgk6nHiT3dW5mRDs7sitB/aF2HI27YX5qYJV1s6Gb9vgZGM0hrvTHZEJQXQMrv5CtwOf/MoqrfmdCSSpLkEBUC8xJoGGZWqs/OUDPmmwyya6eWGOX0cMoIyhNb/Mac8TH373O4U9HgFY8JcImh3ecpWoZukR7C6SJouLsrHKn6swGIzVDdLI3R7PYQkux5CxWL1VX+IKbLuqSFFqQtdUZxWAqDrMsu5sb7gh7YUZm9USS4jMo43YzfJo473LetmJ1d9O2Yo5xWnNZ0raKd6mBw/JepNQRbwz95jVjADH87ES1x5zcmUL+IB/DFkEAuMOBtSEGy4+7NfbXVgxsu1h7zeAPKhuDQmZ26NQ1AsDtaDN+TabA44xZpsj/at3zKfG+aanPIbvx2yf7MXulrhU8j2bYEnWp9xHD+7gfTQjspAqVf8+f2wfYBzTMn2KBxc7x7dcH12QT03F2p6TUaCor2DxP0tUV/VCUNMp+qEd+bU0trTTcHurH8fBsK3uxLwPtBnevNlV3pppj4NIObiLpdLlEcty7juFH9zQdrlyqLkTJdw+Jjs3v8jtCBaQLtvHIJ19yCwmPquzV5jW7bYLnX7OFXpz2O/bA11p9zGmQEN5b5OIk7+lRorar5pGGQ8lZj+5R0SEVfB0tSmZGXOd+/uWUFl5zQzbo60nhPtx+XwWVea4CxWJt2wwirP2iChNElWpm1iedqnksNb9eLpjAI7vzwQ5feBlfA4xCW9lufVsk3+b06ay4tivrUXCdB0vLULNJR0yAGugMpv13duz9MBwHq4HdaSg7400h3y3qkEyPGrMkj60mjn+YTsqpf0GQBRRhD/OcbzVfK2CPhPj8zTHdpRG/VNQS4+J+MgE7G9kzdwMl3CvzmVNN4BRM7pNWOecWuuZaqIOxKfIFr/6xgA59eO6wKWNy2BDexY8756+RrAuU1Z9ctj+Kpx5fD7j+592++c/JgkCabLZW6GNbWk7f2dnA8UkDhasrTFdKbdNh+zMHO5dzbS7YjQKeLD8aTNOOadMTM0u2Qq8TaDOyNZzLxdveg/o8j2+i8KUe0nTz3D/5thpN6/LRBiTS23d8UaCHDty7Kp3YLU7LK8+r4UpykO3Ei+U0j1R4reUvkywGElXNMxiV5+tkxuOESEGD6OKSbtNMqW8KV7i+2AmTdHIcdO+UX91uc+JwSjuz982p2j7dtWzGbTwXayV97ul0X9bakwo1pEua23UhXUz+RME9BjWQmgNQSFulchWA3OQDU/vrsgPErZnecIqIZmfDaqWqCr/8HM00l29HHL9PfHqxwfAXLHCRzr4xJCkfP0QtcyS6MfOrVCv5z9Bwe3u0JTGaTwcsnyPU7rlOT9Zgy5l/U1Xr2OCeFGiEPegJ0HFJkoN3I4r2/5NfXqDWbeOAHuL1qm4ydq7NyfPRg/I/ZYCyyHN1Mb8v/y7Bw5q6NvRRwuad772ni4KpWm0AEtLz1o8a1tUzKgVumwPORKPjued5NxGWtKqvL8T+HY7citX7x+vDAhf1Sx2CTOhqrGjiVpRPbl8Aw4kDZ3fdAyMzQdFCdkhTtE+XsytZSazkbyHgoTKepBUAoa08MpqWmRP5vW7I3GUJuLh9AlgKQnVVU1XW7Q+rlO5d51ZahUxbpB+Z7fFg8F82Dln3POwfDWUwxeiZSn3jPPtmJut1XO14zbIjB6XVLDrHxJl4gV8xEKSN7v+1DEnWTKArlR8X3Yzpz6NawKsCuYa5zYBzmKGS9kNIaqdkfytyTRSOISF7mkCYBzipfvOzhWK1vgm0lLAHnV67fVa2ggeuawppEtcPejIabjf6Y1LEtgAjh2eHy3XlvFEl89aHGnJPNzj+MeK++QTZQokCfu4D5YnOtKLrYAXSizVx9KvU9AA36FxhiI5hbdNuO2yRJ0dJ4XHMA1aMglLwyEFbmSeSMHdSozTFokBGC5ZKToAUIwX0v+BqpyDMouNf+zbJaXteP5rtZVVIZGaewetSCptY03prEl9si91cKC9WMdnxmuD6zLBOQ7nYUWaXc4MgCfekCQ5VAR5brjIn+3j43LN/dt6vXYLbn8qon9N4YatAS1pKVV0nkXId14tcr97Td9grpT2QxrHcYT+ZDjLqKVzSd9bhuzgt0zcd15jtW0WO8ZYLrImoa7ztHuJd6jPPLTGixEpUdtmLM1uUOx43b94a9LSMbN1gl8kljwFeFcgE08pp827uovtNzhPFu+ZgC30+0XHt6MKoVmuEu+9Z8zvAxZx0UKE4CRZTzvbKMy2O0S+51xZMix+KZwB5u7bY5Vu8ax1TjRTnNvz1EGJHytWZNi+4zEeL2lOKsAgopJ61JNNn967AkRCgnlki4zWF4bcBUA3IloaEQxZPGpeWk297brOc3JWFshVwZAEButTxfViWra+/SkGr/fTLePM3IFyshAsKGmrgCgsR4nqY+eM31IQJcYwhZMpbUYMgN/3syhLXCH8Dy95E+zIsQAuXz/ruR2DZvtCFqUJArdvWPpC9x6uz3q+QjaOVI/fibri8w55vEBcgz4ogCB4nGOTSy94FR2Jv04ZWRXFBrE2IbJtT9eLGndkDkMqifrbI9QW8Q6L8gvmLhcG09ejgO3DGDuCpU/4lDAHlICNO6DQehpvNgRNIsT3/5qtenyxm2oM1uqzfDVvCwlGZDLq7v6ce3lBbcqbkV+qHIgiLWNvXaq/KVGQqV2Qi8nWtGrmp0vqz7ZlAXEa57rzwi9dWZ2HiEt+OcsI02qKyNvBGWPWp95JgN6hauhGWq6GpYmJI+fLzpHBeux/Bes1p+2Qa65fjQvnK7ALvLLVcHO2Ibl929VquW6+SCdL9u9P9zNOhKCeSVX/xTDS1AmAPDfJtKcppEMupnqqatlIVfV8hyE8bzjuwuCXBKR9cmnQ+bWSsePY7Cc2446057qhYbxZaDsm5mBRz7q9nPs8P6E4aXZuRalNa9QaftATt3XbSfdnaprke0WzNtogqPw/C7JzQt7ANQI+BZ3EkwnjHI7CIP8sKjnW8VUUhNqUOVpToYeaC/jJuMRRa3bOL+dE2ZbXgwo84+NMn7h+mLpiGdKmFdt91btnuhd4yVJN7HYTHM+DMKs+kLvYAAqtteaXFm0h5bUJ0K1QN7fsLRi2dlNwDah0ZWoBAcmYI0O8YwcPjRv67aB3/YxfSw72DMOco0J2MwN9kicXy86Pr/mitRZ3OIwN+Kn649TRAjz1sico6qNKvsW55xjssy0dpvZOnX7Lyzr0NRU95b75qcixKpvGZfurgqonAsQBPcG7yxt0zAueu4tbr/q+GjFEL++kqYhgUNMz9IRrueTaHmNn2kjf7iWcRSkzXSf9hvhzp69xbny6cZU3OT17zjkPoohinViqOxSeQqna5JcfPNYrwo19mH3efmSPs3s2S5nGga5zoPsMG/ciNZmlF7Hl0I7fiZSJxekRpPEYX5WyDOc/TL2N9qRlH42aFKPpNxndNgSTa6edHuLlX+Cy6/myucrAZxdask8mObbIDJ2Q7EJ9l9mpJ7/yjY2mKHrowrqq29Kt52TrApc6ssYB/vt3ySs1anaqGLVBTrupMC9zfLCDrmorywk18ckF7so2LwV48ctHg+RphxjzDmsngDi7AZQU3g50UE8K7RnuPGM1KrSjWvztXxUIk5W5NP24t2dAiwv1TXybj2OjSonykgLynjGFRUM4KGt5gK0vq23za0VFDetHOQ3xvHIoNk/9zCtSxzis9hpvo1ePSJAJAMZqTT0LIfPgtrzUREaXfGIu4LLuz1npkmtcHA7g5fnfBBrm9DadydvCd+Rc1UAgOI17xPGmt6oTSqBPBNu/9LiXRH5UCQu9cV12zDH7NPAnk+XXm1rRbRFzIDoa/syZgUOm86xNM2SKUo9FgzIDTtfXv3W7Sxh+rJDhc2TFmDNYYnphRdB5e2Q4II5fWcwbkzBNN1WzvLv0dCNZ7OTPAsa/wZipo+bnNL5BducUMx0yujoYtNHVSf9VkpF2YljzoeIiTxQdJuJecti/QNWgOchjCnU1wWnQd5umk4BYpPfhHKSPcJ7/Hotfz89FOJ3u8IAk1LYOU/Qndpl8tkb8sA0hiXNnPso80XsZGue6uXi4nzwioJ4rhprsTCrpPQADUUxtLLaXQFdy/e2MpG5rLRxmfrH3Y3PJL+nc7ECL4bk+5uz//aSZcNYTmrRmTTAvG/b4NaPSk0zf7oh2wcxrpW3+hHbMP8tXEDlVSfEwZ1HlbOkNILvqe/951lHzEPiqtiOLi41+Fpf9ptzqVb1zvhya+DGz/zimH6wgopZkrUH6cQ5kVoYXjJeQK6gHZWagmRB84RleATbObg+EH++T0ReYYIJYhOY0yZBpbVFmCCo24zS7MlLN/UhteeYS86xNatygy6Z4dPbpeRSVvI7myIf7SZ7m72Pn/5uJ4d8RfjC0rlp68Pqyzd4ZBxL8qHM6bT/MoMN73hsBBvlJA+z+0Q4jux0WzDWIezgoAvU7V3WUb5/xbris1f3IQNfbCpkCtgUgwL6TNgEuijmN/T7S4q5yF8kHIcaJV0KQD0MVDx8nMX0M5gHloWaquisGLMzUhHYtvq9N/KCPK2qHKKcdQqZR2D+rpdzoGQC2pXM6sSPov6qZtNzy0gnD9BaZPdqBpXDl6GlpZzuFABu6Va6IyyNUZhAYvok2wrGJiHjur0fxOMKshpsUrDQyQj2I5/dJgUZwSY/fSNXgHwITECQvt786wPvLJKftbWwJgHBpDsFaZeFbcF48FB4uxA3MbjYwo35mNQtJC8CbGmFdxdZQWh/uiiIXnr2sSk6lqHS6zEzVTPSPbD9+ao2YbzqyTyPnZFakNs+yuIy6VsM6BHb6hWYmqMB7Uau5+4a79TkC7mjdbAe5CVun9EaR0SvBWUfGzdjEOX9lcSUnJIcNnA+SH6z6RHvxxirh5ka98344RSls9ohERszGXhHCpIBza/UmwTe8lnTmjf+RlID7Ed+GHgSy5UzTyEjtWNfSZsG+2knaIHqsSWAuCevefS9nKS+KFZAOk+X7JSEgonkiDIAWu3m0ZmwpMvcAkAskmJxUNNOEdXeG5Uhtpv4tvKY4QxoXpDG2MjtLMspENLL/DRjJb3HFp02ybXUKL2YW0sKHiPlK9sXq7bWb9jNZXsBXjOrZNdvE9sIH3G7X0V416UyXSBZ2OAlLmdnFwoLP4Dk1cA2dozRWkNAkN2tt3aC2PBt7hZYgT/9pq35NyviebvuLELRcvRRQj4uWF/0q5SU5S6ndtXNym1fpSP6As/+7lIancLaSLKZZExDy67fjuXqXzKiK9Y5TudjIxGuAXq8mUCSLbI08E07xmjfN4GH3tLl4n1Lu2OBvDwpYUCZPYVejDCHyLiz9perE+Jp0x/L03tlJOMBb3D7ifp5SpeLw4WSGThrtxJnj3/u+UKgNuXCvG5Cq7Xgd7wIyqk74FwUoJDOy748WCJu7IV5F1keiUeXrxVRra0nlO8r3bmIiNhHajXsvuTgSAkjnwtPyn08F1juw9Z5tu5076MWw668f7u0ZeiRHj3bdLlcLyiX6p5R0YQvy6/KICyX99ZxpUO1Kgz3Fm5kOVUnrXWAGmNQ44EJpF1774v2hAY78a1qHMfDqwgDkEae+spfVYWXYZKx6eNZmsymKrd8ETiK/8cFAky/IkIOeazDbZ8WOcxHw49wGyXPXfSfXaq1epvyWHZnDOZi29ZRIGl3CXZgcYBSfSlknMdgI8GEgPMJJOfBspmj5Qnv5JCEMRvHsYWcORTjpTt8WMCnUZJxcmVKzTiXiJ8aerx43KdNGaBlFlMwVZixtwUAVUNvYN1tupWULpfrcv/vAXJ89xYaW/NqrcNktg75nLJjpY+bE1tDx5pEomXEbaQJNO9y07akjBi5pp0JWGNyyCd3LEHTCMl4WxUhD6TN/JSxqcptUAYTOKYtQ3M7jNIC8bkki3vvblfEzhF6IJvew+r7yfCoddDyw7NNq12PO7xSrZCWE2fjt1FRaxItsN/AXpuJ7EvaziRDXEJJ5kVpGofqqcZxectplDitm0peI4+/GVW57clcF9dm7/p/znyU/vNC95DyLOf2r0S14Pm4PLT1f+wf0p9Vm1c1JhgpK7z0k5RVNZlfeg4GWNjLbZ9FZSiTNS8KLeaS5oFV/BbkasnSdgysbj89b2xEOGt97UEIM9BrbtTlml74PLT8hdznQvZLpxsh3zoTuf037lSExThkQTG/tJsMtmGvbXmGnHOiOy+Khk7ofYsBW9SiUmvjkP4zDh93fGhBOoHdkfuNM8Gl2qTTOqARZto6ZfVWGZDAV4DTSLIQT2cY5i72p6HzOb331sJeW+IxtKXaYt4aGmwRqwY+1HZNOUrvN40Uaeasth7pOFPkfsiZcdFYTXbk4D50HEnxIp2RfXAXO3I5tl7anLmdmBK/3j0K5x0IMbDXA052H7GTA8QYR3L2Jo1vVWgbkYXEx322tYSEcoKsIvdfpUQXAOQ2I+uYmK5WB2czbmnmo+NnINK319AWqLfp/5VO0aU27OWBco4/2iTOPlmFxj3EMb6OxWb/4+NZ57VCtAbccQ+0nLxK5QIXf7oPgTpTehGu58k81d9bR6/wNGtozZlXzqknKSYob2GvR+JR4GFlIc5joCkFvpAZypC9W5fh2ZL0S+NoAtqoQxmp/+cEF5ouwVq7zYK2z7f9xZnipmf3O+s4e1tTjG5QUMO07Ydgr/tg1IIpGbXLoafJ/JNe1CvycBg2j/GXxpGwnH1qQeobx5X6xajoRYwramVBC1UpX5aaIN/DA57tqPnvjcNIgkLlMXt9GXT5tTCRmTrfYK+4L2kf/2gnPcg8nv8xN9MLUf1E+PmXxmHfA5MazHD9gBkh+w06/C2XLXc8ZoWp0NrRWhSAfxln8gQQopVK+Pxg6b9X7CQqVduN6ydnKQYC/OLM43rAXmEPe23/aLdeNsINS8cyG57xeDZqY+p4G35kODjQywV/wZ00K+8LI2fF94l2l+0NrlsZybwi2n2XVVmW4PbA4+0yfMbKeYWTJ8JWFereja4C9KoxWyAG9iIqx6lbpXmkmp3hjsahejKyICVM87i207hXsW7i5I5SMGMCrd+eHq+2KznHZGU9RYO5oHOgIze0APPnvuO8iRoBgOWy0KCWV1o5u87LNW9o+T3xMK+PKG4DLd2FjqXGDbXfhvoClKBy/uXHFeNG9aMi5mM9lG6kckqCSSuC2H0U1hUGyAC+bfaor+U09U4xh5CLS5+qY6k6VxR/dsG3GPMYO1eSFWpgr+0w7z2fwzwKOV1VEPrjY1/f1hhJ00glOv7W9COdXZD+eOoKsLyDe4uCY/0msTPU2X5iv0BX3xuS2Ar9bi0tgQBVAODORIT3Jy0X8XSAEBaMmkdKu2EJ5CdajjW1/HLGmmz2f5o8X5VVuhOiScN2b89mj+KJT8h/AaR9kYpt47m+be5ioOJ+uKRGfj3uOKrb+a8CggZXWwxdUbp7+uQW33muDuUkliVCNKgH3WRo94be0k/2WZ8l7QKYjVdxL26sYdSFX/FyYwLmFwqB/+ds9oiW3+60XPUoYsZi23ij283qnPPL8N0KOXUcejD3Z4VcQXLHF+La2cytWGX3XNtRobFdPcWA3Pj1o0KRN3Au6x1DXXGAvRI8qbRie1WtZ8WsqeWU8stvza8BY9Wz2SPPZ7Y4jWakm8Q/cfBbG+9X281Mfh30zHHE+mw/3CfVBfDycLbJtdR4E6CY9tPo1Chq0msd7AGAgli/NWgeDssmp/vjnrd+G/NWnBj4WBSFeTB9vCG2bcN6Dt4DLmb26JxkvMANtnYlTgoAGw+od5KpoOZzqH/aOFtt9866v9+M+7Pj+12HRvlCPPl68QhQyBUsDeswoqA1Y3ZX4GYdx5h5rLrvpF1x6LdlJPG4tfoD4kHczl0sRBZx4je2otgY94Iwy4kzaotcnB8BrwTA8oB6sKKpoPKJgJIwGsx8C0pvq/4FdL8e3L6njKoC4LOWLYkZIm3uLch2ZZLyw5IQux0XCnKOnfzMcRH/wF5bkrFgarbbFgQ7aPm0Zgo2TztZ+VGwyiV9kR69+Hlv5GP9QIkTYLdLdk/8zr6iavt5mDMTxdZ1WKA+PXrbAUjf3IUrVO/L66N7Kw2SofJmqY0wsM4vCFCGP5eZlZMMfvPtESuBj0mGxcw7leFKS1ZNxooMtbG9qzUDRGBppxFjunqiZH9ulYCAtdQ0umi9UQe5DqWKwfJGxzDjgY4jfjPVsJbvFCGujDSqjuQUxfynjmasbF8jPoAw90aFuDaT8GP5xeAVf/Zxfv/GZKRDBLeMG4do3/Ib4pnG9YaQLq6dRgzzvcQjSGd5tV3KPA6Ysbcx+iVNcRcqTY6wKYVdIYoX8vONNGVA3VsKlx2ZlHULLWde6rqtdhT+TlXUn3f0ZdHWMkhnJijFXZK34xlVG19k1dfbWRFNb9smHNWOX4ymEQPamJn2L4DMZVWgXacON4HtL3UKhJ2VyY2xzcq6fs89eeAeqQCsaW92FEb3/sSogIpB8ZohdHMfUaGMOtc3dztqw+4zfIkTVA7pTz0mGaIo5ouITTloTRsjNELaqcPXEFfWpnbDuzVA3ymFe6BaIL/8HUeiGs9hN9f6dco5h5UA3txGeHpY7qsSiktHs7vS2O0oANg51bm5Rskct7mPyDz0PkZ+GJT5spRTO7tjPnYLr9RtqRYQIZsmuqqYlRp/JS08KOS0ULonnVsZbHzv+CHui09G3VR6t95lmvebATzceJM4wg0tRwOtbmtu9WKvdR9f8skrcX2VtUzSzf0z0qGQ2wYC3SttRJbFGZhjwnwki+TPWj1w4xlpcoV/rMJV6UfmUUV0eQgs9GQdn7X2FI4vWALWAfHTVg2YSijSlmSc0yVx/t5CNdnRm86ZGZ+12KSY6NKTHDZJRobK9oBEdUE5fytswnGDjrwiRgL7lGRs0gs1qNZvrCOfd4pTXOlHCP5CumZ3rIMhY8ZhakBRaPuXztAoD+G2DE6DbkeuZJzBQHR5t0HFgU2ScSf6MP+AMhbLt/1bk3A4//lu9y1P7kqd2dm3/p7g8dOvoMypZWEloLVOnniM8GySqQWuB6PN+uS4L08DevuLrEpl75hqeDqX8Qg2WxKlPxnpUbGd6c8zG91OsxPyr9IOC308mmbkg0Evfmcdvz8zopU0bxuH1cg26mzmyBOBijDowvlpViLttW6PIBRXgOMZp/tm3ZZ4MObLF1Hd/EfPODbdTqPaYI6LdbwZuuDW1zH+P7SONCCumbHKKGV6p99AqUd6q6p3uY6v+ZIhqvUDmMTx+xasKPGquD0dDoKcWYfl2y7AymB5E82Z95IZzoNrryUBTOdX7NOhd7BOYRue/8Xahl+cGxkv2N59UxRc6nuxAyOKoYURe8uMPMk3hrDQw3v3aOfjKLmZE9nXP+5qqw67z575BekuVt6/BcpvkdNx/14GzJJPTd/Eknr1Jr0YPBFt69gckRu2DYTSB08cw8tzeSk0nUApG7YPt4sAzTbAHQQQpSlALivVzTqaaXqNLn1oHg7KkxyTGLn2J/QzWDKS1Qd7/0Zq+Ek4HJ+ttKXwXg1uaTfcfmsdps4ZL7I19IVNZgKVvaGcoNaCr/gQ1z5sNU5na75lBeAvDNx+rKPxK5wHQLfPvAeTZ7wsUI39gBwVe3XdGkBzM281x/N3wpHim52Rug7MyHuSf986bJ0zbhzI/aq6EJ49itv5dxc8frlcBnTgdg8BKPr/rggiSrUF01VoFHfFNBpcttxFrpiYbUA+i1RanKRU51vzSZfWNWQgf+uzvQFuM4pr6vvVnJ2F0X9vHeG1znFpSHTMiAT0iTm1/OAU07vSPcaxFnFaD946wBOWO3VDVRrEa9Vk0NMBfo/qT1IZbeKcT8p9j8fhnHp5qzlJwTywgCpdgdbv/gMAN7Pp6tenIPTqHNYPclso/GnhSNUAgL850Wzi0iCKepf7cuTVd6eUKZxtHG2zGBPp60hCOgWmYym+m9C1oFK5ep+Htv62+qVJfdoZ/vbHX500F+qQA5PxXudHllDe1bLJDCKMnrYahp2gSfLUuMbcBVCYux9qzCMowFFsZTysqHAi5uPx5/L7Y6s8QbQw+vhpjDb0IrzMN5OO/voIprFu2ki2Uaz7Pwb9fBk2ji/VdVPv3peQyXusHri1XSjT2ArFthk+QLHfnz1kWDF3F2yOH7GzB62clN3IB83yQWOG9d+xMi+n0y+p9gd7BVaKjYNqag5Fqj6yEcS/mkXOkJ5A1CtUmn5XYDCVYuib5eMwUkvYjTaYMz6wsomZYvwVSDSoSjOQ/A4Ki5k430AoNRx1F7MiyCFNiQT9u1nkRLkbEu2FfJ1Pvo7pu4uF0c+PeZx2tME+6/7AinEtP3hsrfTP+FqkfwecwTIoLGZZZz4wUe3X4CYzrY+Ss4BH5kjtaWetN6L4CpWmAC7E915OGE/12q5nOO0w3fs8SyMnNdj7ud8x7d4Pdng7lrNLzFMudRRT+QtFk8iq+cXp+GRVZYQfUlCPDFUJ7vQyxidSnUdIDaxkRXmUx07R/nVSArdFF85h9NGtbambk65vUSeZ86qwriX9O/sQ3aQAQGO7YpV/oWhiz2zV4fapR1Swu6Fo/DysWDDAduFlhTfOcIGboLUFcKYJUKaGgNkwjN7fQpyGjaZx3PZXZzHW4i3f/vOTbh7E90uskd9//7x1bvvDdOOnrpxTV2YwKrCetwjTpBz7FabRlTOypY9D/kdYc0ktgDM9eD9RR+92P+2wqNZ4Tto67uEu7LwuNKyoCeV3pkHHuXyn7zCARD5Z5ft//Wy7yGb3Rt5NKfR1qYibbsMCNfM9AlTv2nSUDXISb9OYATa6ySDa5ECTk46eVdMuMwj74CKIBnLcFqn9/wCsGsURyltp9gAAAABJRU5ErkJggg==", typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("index.cjs", document.baseURI).href).href;
4141
+ function Chat$1({
4142
+ name,
4143
+ avatarUrl,
4144
+ subtitle,
4145
+ children,
4146
+ className,
4147
+ messageHistory,
4148
+ showInputfield = true,
4149
+ locked = false,
4150
+ inputPlaceholder,
4151
+ inputValue,
4152
+ defaultInputValue,
4153
+ onInputValueChange,
4154
+ onSendMessage,
4155
+ onReply,
4156
+ onEmojiClick,
4157
+ onAttachClick,
4158
+ onCameraClick,
4159
+ onMicClick
4160
+ }) {
4161
+ const [messages, setMessages] = React.useState(messageHistory ?? []);
4162
+ const scrollRef = React.useRef(null);
4163
+ React.useEffect(() => {
4164
+ if (scrollRef.current) {
4165
+ scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
4166
+ }
4167
+ }, [messages]);
4168
+ function sendMessage(text) {
4169
+ const trimmed = text.trim();
4170
+ if (!trimmed) return;
4171
+ const time = nowTime();
4172
+ setMessages((prev) => [
4173
+ ...prev,
4174
+ {
4175
+ id: uid(),
4176
+ senderId: "me",
4177
+ timestamp: /* @__PURE__ */ new Date(),
4178
+ node: /* @__PURE__ */ jsxRuntime.jsx(Message, { direction: "out", mode: "neutral", time, status: "sent", children: /* @__PURE__ */ jsxRuntime.jsx(Text, { content: trimmed }) })
4179
+ }
4180
+ ]);
4181
+ onSendMessage == null ? void 0 : onSendMessage(trimmed);
4182
+ }
4183
+ function addMessage({
4184
+ node,
4185
+ senderId = "me"
4186
+ }) {
4187
+ setMessages((prev) => [
4188
+ ...prev,
4189
+ {
4190
+ id: uid(),
4191
+ senderId,
4192
+ timestamp: /* @__PURE__ */ new Date(),
4193
+ node
4194
+ }
4195
+ ]);
4196
+ }
4197
+ return /* @__PURE__ */ jsxRuntime.jsx(ChatReplyContext.Provider, { value: { messages, sendMessage, addMessage, provided: true }, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex h-full min-h-0 flex-col bg-wa-bg", className), children: [
4198
+ /* @__PURE__ */ jsxRuntime.jsx(
4199
+ ChatHeader,
4200
+ {
4201
+ name,
4202
+ ...avatarUrl ? { avatarUrl } : {},
4203
+ ...subtitle ? { subtitle } : {}
4204
+ }
4205
+ ),
4206
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative isolate flex min-h-0 flex-1 flex-col", children: [
4207
+ /* @__PURE__ */ jsxRuntime.jsx(
4208
+ "div",
4209
+ {
4210
+ className: "pointer-events-none absolute inset-0 -z-10 bg-repeat opacity-[0.06]",
4211
+ style: { backgroundImage: `url(${backgroundUrl})` }
4212
+ }
4213
+ ),
4214
+ /* @__PURE__ */ jsxRuntime.jsx("div", { ref: scrollRef, className: "scrollbar-wa flex-1 overflow-y-auto py-2 px-12", children: messages.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(MessageList, { messages }) : children }),
4215
+ showInputfield && /* @__PURE__ */ jsxRuntime.jsx(
4216
+ Inputfield,
4217
+ {
4218
+ placeholder: inputPlaceholder,
4219
+ locked,
4220
+ ...typeof inputValue === "string" ? { value: inputValue } : {},
4221
+ ...typeof defaultInputValue === "string" ? { defaultValue: defaultInputValue } : {},
4222
+ ...onInputValueChange ? { onValueChange: onInputValueChange } : {},
4223
+ onSend: sendMessage,
4224
+ ...onEmojiClick ? { onEmojiClick } : {},
4225
+ ...onAttachClick ? { onAttachClick } : {},
4226
+ ...onCameraClick ? { onCameraClick } : {},
4227
+ ...onMicClick ? { onMicClick } : {}
4228
+ }
4229
+ )
4230
+ ] }),
4231
+ onReply
4232
+ ] }) });
4233
+ }
4234
+ const ChatParts = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4235
+ __proto__: null,
4236
+ Actions: InputfieldActions,
4237
+ DayDivider,
4238
+ Header: ChatHeader,
4239
+ Input: Inputfield,
4240
+ List: MessageList,
4241
+ Root: Chat$1
4242
+ }, Symbol.toStringTag, { value: "Module" }));
4243
+ const Chat = Object.assign(Chat$1, ChatParts);
4244
+ function extractTextFromNode(node) {
4245
+ if (node === null || node === void 0) return "";
4246
+ if (typeof node === "string") return node;
4247
+ if (typeof node === "number" || typeof node === "boolean") return String(node);
4248
+ if (Array.isArray(node)) return node.map(extractTextFromNode).join("");
4249
+ if (!React.isValidElement(node)) return "";
4250
+ const el = node;
4251
+ if (typeof el.props["content"] === "string") return el.props["content"];
4252
+ return extractTextFromNode(el.props["children"]);
4253
+ }
4254
+ function useReply({ onMessage, replyMessage, from, once = false }) {
4255
+ const { messages, addMessage } = React.useContext(ChatReplyContext);
4256
+ const firedRef = React.useRef(false);
4257
+ const seenIdsRef = React.useRef(new Set(messages.map((m) => m.id)));
4258
+ React.useEffect(() => {
4259
+ if (once && firedRef.current) return;
4260
+ const newMessages = messages.filter((m) => !seenIdsRef.current.has(m.id));
4261
+ for (const m of newMessages) seenIdsRef.current.add(m.id);
4262
+ if (newMessages.length === 0) return;
4263
+ const triggerText = extractTextFromNode(onMessage).trim().toLowerCase();
4264
+ if (!triggerText) return;
4265
+ for (const msg of newMessages) {
4266
+ if (once && firedRef.current) break;
4267
+ if (from !== void 0 && msg.senderId !== from) continue;
4268
+ const msgText = extractTextFromNode(msg.node).trim().toLowerCase();
4269
+ if (msgText === triggerText) {
4270
+ if (once) firedRef.current = true;
4271
+ addMessage({ node: replyMessage });
4272
+ }
4273
+ }
4274
+ }, [messages]);
4275
+ }
4276
+ function Reply({ onMessage, replyMessage, from = "me", once }) {
4277
+ useReply({
4278
+ onMessage,
4279
+ replyMessage,
4280
+ from,
4281
+ ...once !== void 0 ? { once } : {}
4282
+ });
4283
+ return null;
4284
+ }
4285
+ function useMessages(callback) {
4286
+ const { messages } = React.useContext(ChatReplyContext);
4287
+ const seenIdsRef = React.useRef(new Set(messages.map((m) => m.id)));
4288
+ const callbackRef = React.useRef(callback);
4289
+ callbackRef.current = callback;
4290
+ React.useEffect(() => {
4291
+ const newMessages = messages.filter((m) => !seenIdsRef.current.has(m.id));
4292
+ for (const m of newMessages) seenIdsRef.current.add(m.id);
4293
+ for (const m of newMessages) callbackRef.current(m);
4294
+ }, [messages]);
4295
+ }
4296
+ exports.Audio = Audio;
4297
+ exports.Chat = Chat;
4298
+ exports.Contact = Contact;
4299
+ exports.Emoji = Emoji;
4300
+ exports.Event = Event;
4301
+ exports.File = File;
4302
+ exports.Gif = Gif;
4303
+ exports.Image = Image;
4304
+ exports.Location = Location;
4305
+ exports.Message = Message;
4306
+ exports.Poll = Poll;
4307
+ exports.Reply = Reply;
4308
+ exports.Sticker = Sticker;
4309
+ exports.Text = Text;
4310
+ exports.Video = Video;
4311
+ exports.Voice = Voice;
4312
+ exports.cn = cn;
4313
+ exports.useMessage = useMessage;
4314
+ exports.useMessages = useMessages;
4315
+ exports.useReply = useReply;
4316
+ //# sourceMappingURL=index.cjs.map