@yimou6/common-ui 1.10.14 → 1.10.16

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 (37) hide show
  1. package/cdn/index.cdn.js +21 -11
  2. package/cdn/index.cdn.js.map +1 -1
  3. package/cdn/index.cdn.mjs +21 -11
  4. package/cdn/index.cdn.mjs.map +1 -1
  5. package/es/components/tzj-player/index.d.ts +4764 -212
  6. package/es/components/tzj-player/src/ctyun-player.d.ts +6 -0
  7. package/es/components/tzj-player/src/ctyun-player.mjs +184 -0
  8. package/es/components/tzj-player/src/ctyun-player.mjs.map +1 -0
  9. package/es/components/tzj-player/src/ctyun-player.vue.d.ts +1519 -0
  10. package/es/components/tzj-player/src/ctyun-player.vue.mjs +6 -0
  11. package/es/components/tzj-player/src/ctyun-player.vue.mjs.map +1 -0
  12. package/es/components/tzj-player/src/ctyun-player.vue2.mjs +588 -0
  13. package/es/components/tzj-player/src/ctyun-player.vue2.mjs.map +1 -0
  14. package/es/components/tzj-player/src/easyPlayer.vue2.mjs +0 -1
  15. package/es/components/tzj-player/src/easyPlayer.vue2.mjs.map +1 -1
  16. package/es/components/tzj-player/src/tzj-player.vue.d.ts +4764 -212
  17. package/es/components/tzj-player/src/tzj-player.vue2.mjs +8 -5
  18. package/es/components/tzj-player/src/tzj-player.vue2.mjs.map +1 -1
  19. package/es/components/tzj-player/src/yunzhiyanPlayer.vue2.mjs +3 -3
  20. package/es/components/tzj-player/src/yunzhiyanPlayer.vue2.mjs.map +1 -1
  21. package/lib/components/tzj-player/index.d.ts +4764 -212
  22. package/lib/components/tzj-player/src/ctyun-player.d.ts +6 -0
  23. package/lib/components/tzj-player/src/ctyun-player.js +188 -0
  24. package/lib/components/tzj-player/src/ctyun-player.js.map +1 -0
  25. package/lib/components/tzj-player/src/ctyun-player.vue.d.ts +1519 -0
  26. package/lib/components/tzj-player/src/ctyun-player.vue.js +10 -0
  27. package/lib/components/tzj-player/src/ctyun-player.vue.js.map +1 -0
  28. package/lib/components/tzj-player/src/ctyun-player.vue2.js +592 -0
  29. package/lib/components/tzj-player/src/ctyun-player.vue2.js.map +1 -0
  30. package/lib/components/tzj-player/src/easyPlayer.vue2.js +0 -1
  31. package/lib/components/tzj-player/src/easyPlayer.vue2.js.map +1 -1
  32. package/lib/components/tzj-player/src/tzj-player.vue.d.ts +4764 -212
  33. package/lib/components/tzj-player/src/tzj-player.vue2.js +5 -2
  34. package/lib/components/tzj-player/src/tzj-player.vue2.js.map +1 -1
  35. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue2.js +3 -3
  36. package/lib/components/tzj-player/src/yunzhiyanPlayer.vue2.js.map +1 -1
  37. package/package.json +1 -1
@@ -0,0 +1,6 @@
1
+ export declare function ctyunRequest(method: "GET" | "POST", url: string, params?: {
2
+ query?: Record<string, any> | null;
3
+ body?: Record<string, any> | null;
4
+ }): Promise<any>;
5
+ export declare function GetCtyunDeviceVideoUrl(deviceId: string): Promise<string>;
6
+ export declare function GetCtyunDeviceAudioUrl(deviceId: string): Promise<any>;
@@ -0,0 +1,188 @@
1
+ 'use strict';
2
+
3
+ var axios = require('axios');
4
+ var CryptoJS = require('crypto-js');
5
+
6
+ var __defProp = Object.defineProperty;
7
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
+ function getAccessKey() {
9
+ if (typeof localStorage !== "undefined") {
10
+ return localStorage.getItem("CTYUNAK") || "9XCW5FIP7RX85ZZ9FJDD";
11
+ }
12
+ return "9XCW5FIP7RX85ZZ9FJDD";
13
+ }
14
+ __name(getAccessKey, "getAccessKey");
15
+ function getSecretKey() {
16
+ if (typeof localStorage !== "undefined") {
17
+ return localStorage.getItem("CTYUNSK") || "qTBbJjIo8RZmDMqAN7OQlg1O13j6R5OjYx40nLrK";
18
+ }
19
+ return "qTBbJjIo8RZmDMqAN7OQlg1O13j6R5OjYx40nLrK";
20
+ }
21
+ __name(getSecretKey, "getSecretKey");
22
+ const AK = getAccessKey();
23
+ const SK = getSecretKey();
24
+ function getUnixTimestamp() {
25
+ return Math.floor(Date.now() / 1e3);
26
+ }
27
+ __name(getUnixTimestamp, "getUnixTimestamp");
28
+ function formatTimestamp(timestamp) {
29
+ const date = new Date(timestamp * 1e3);
30
+ const year = date.getFullYear();
31
+ const month = String(date.getMonth() + 1).padStart(2, "0");
32
+ const day = String(date.getDate()).padStart(2, "0");
33
+ return `${year}-${month}-${day}`;
34
+ }
35
+ __name(formatTimestamp, "formatTimestamp");
36
+ function sign(HTTPRequestMethod, CanonicalURI, CanonicalQueryString = "", CanonicalHeaders = "", SignedHeaders = "", body, timestamp) {
37
+ const HashedRequestPayload = CryptoJS.SHA256(
38
+ body ? JSON.stringify(body) : ""
39
+ ).toString(CryptoJS.enc.Hex);
40
+ const CanonicalRequest = `${HTTPRequestMethod}
41
+ ${CanonicalURI}
42
+ ${CanonicalQueryString}
43
+ ${CanonicalHeaders}
44
+
45
+ ${SignedHeaders}
46
+ ${HashedRequestPayload}`;
47
+ const Algorithm = "CT-HMAC-SHA256";
48
+ const RequestTimestamp = timestamp;
49
+ const CredentialScope = `${formatTimestamp(timestamp)}/vss`;
50
+ const HashedCanonicalRequest = CryptoJS.SHA256(CanonicalRequest).toString(
51
+ CryptoJS.enc.Hex
52
+ );
53
+ const StringToSign = `${Algorithm}
54
+ ${RequestTimestamp}
55
+ ${CredentialScope}
56
+ ${HashedCanonicalRequest}`;
57
+ const dateString = formatTimestamp(timestamp);
58
+ const secretKey = `CT${SK}`;
59
+ const SecretDate = CryptoJS.HmacSHA256(dateString, secretKey);
60
+ const SigningKey = CryptoJS.HmacSHA256("vss", SecretDate);
61
+ const Signature = CryptoJS.HmacSHA256(StringToSign, SigningKey).toString(
62
+ CryptoJS.enc.Hex
63
+ );
64
+ return `${Algorithm} Credential=${AK}/${CredentialScope}, SignedHeaders=${SignedHeaders}, Signature=${Signature}`;
65
+ }
66
+ __name(sign, "sign");
67
+ async function ctyunRequest(method, url, params) {
68
+ const timestamp = getUnixTimestamp();
69
+ let queryString = "";
70
+ let uri = url;
71
+ if (params && (params == null ? void 0 : params.query)) {
72
+ const temp = params.query;
73
+ queryString = Object.keys(temp).map((key) => `${key}=${temp[key]}`).join("&");
74
+ uri = `${uri}?${queryString}`;
75
+ }
76
+ const Authorization = sign(
77
+ method,
78
+ url,
79
+ queryString,
80
+ `host:vssapi.ctyun.cn
81
+ timestamp:${timestamp}`,
82
+ "host;timestamp",
83
+ (params == null ? void 0 : params.body) || null,
84
+ timestamp
85
+ );
86
+ return new Promise((resolve, reject) => {
87
+ axios({
88
+ method,
89
+ url: `/ctyun${uri}`,
90
+ headers: {
91
+ Authorization,
92
+ Version: "2021-11-25",
93
+ Timestamp: timestamp
94
+ },
95
+ data: params == null ? void 0 : params.body
96
+ }).then((res) => {
97
+ resolve(res.data);
98
+ }).catch((err) => {
99
+ var _a, _b;
100
+ if (err.status === 403) {
101
+ resolve((_a = err.response) == null ? void 0 : _a.data);
102
+ } else {
103
+ reject((_b = err.response) == null ? void 0 : _b.data);
104
+ }
105
+ });
106
+ });
107
+ }
108
+ __name(ctyunRequest, "ctyunRequest");
109
+ async function GetCtyunDeviceVideoUrl(deviceId) {
110
+ var _a, _b, _c;
111
+ try {
112
+ if (!deviceId) {
113
+ console.warn("Device ID is required");
114
+ return "";
115
+ }
116
+ const result = await ctyunRequest(
117
+ "GET",
118
+ `/devices/${deviceId}/live/stream`,
119
+ {
120
+ query: {
121
+ StreamNum: 1
122
+ }
123
+ }
124
+ );
125
+ console.log(result);
126
+ if (!result || result.statusCode !== 200) {
127
+ console.error("Failed to get device video stream", result);
128
+ return "";
129
+ }
130
+ const liveStream = (_b = (_a = result.returnObj) == null ? void 0 : _a.LiveStreams) == null ? void 0 : _b[0];
131
+ const flvUrl = (_c = liveStream == null ? void 0 : liveStream.PlayUrl) == null ? void 0 : _c.FlvUrl;
132
+ console.log(flvUrl);
133
+ if (flvUrl) {
134
+ return flvUrl;
135
+ }
136
+ console.warn("No FLV URL found in response", result);
137
+ return "";
138
+ } catch (error) {
139
+ console.error("Error getting device video URL:", error);
140
+ return "";
141
+ }
142
+ }
143
+ __name(GetCtyunDeviceVideoUrl, "GetCtyunDeviceVideoUrl");
144
+ async function GetCtyunDeviceAudioUrl(deviceId) {
145
+ try {
146
+ if (!deviceId) {
147
+ console.warn("Device ID is required");
148
+ return {};
149
+ }
150
+ const result = await ctyunRequest(
151
+ "POST",
152
+ `/devices/${deviceId}/startTalk`,
153
+ {
154
+ body: {
155
+ // 传输优先级 tcp/udp
156
+ TransPriority: "tcp",
157
+ // 接入协议
158
+ InProtocol: "gb28181"
159
+ }
160
+ }
161
+ );
162
+ console.log(result);
163
+ if (!result || result.statusCode !== 200) {
164
+ console.error("Failed to get device audio stream", result);
165
+ return {};
166
+ }
167
+ if (result == null ? void 0 : result.returnObj) {
168
+ return result == null ? void 0 : result.returnObj;
169
+ }
170
+ console.warn("No FLV URL found in response", result);
171
+ return {
172
+ audioUrl: "",
173
+ audioKey: ""
174
+ };
175
+ } catch (error) {
176
+ console.error("Error getting device audio URL:", error);
177
+ return {
178
+ audioUrl: "",
179
+ audioKey: ""
180
+ };
181
+ }
182
+ }
183
+ __name(GetCtyunDeviceAudioUrl, "GetCtyunDeviceAudioUrl");
184
+
185
+ exports.GetCtyunDeviceAudioUrl = GetCtyunDeviceAudioUrl;
186
+ exports.GetCtyunDeviceVideoUrl = GetCtyunDeviceVideoUrl;
187
+ exports.ctyunRequest = ctyunRequest;
188
+ //# sourceMappingURL=ctyun-player.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctyun-player.js","sources":["../../../../../../../packages/components/tzj-player/src/ctyun-player.ts"],"sourcesContent":["import axios from \"axios\";\nimport CryptoJS from \"crypto-js\";\n\n/**\n * 获取访问密钥,支持 SSR 环境\n */\nfunction getAccessKey(): string {\n if (typeof localStorage !== \"undefined\") {\n return localStorage.getItem(\"CTYUNAK\") || \"9XCW5FIP7RX85ZZ9FJDD\";\n }\n return \"9XCW5FIP7RX85ZZ9FJDD\";\n}\n\n/**\n * 获取签名密钥,支持 SSR 环境\n */\nfunction getSecretKey(): string {\n if (typeof localStorage !== \"undefined\") {\n return (\n localStorage.getItem(\"CTYUNSK\") ||\n \"qTBbJjIo8RZmDMqAN7OQlg1O13j6R5OjYx40nLrK\"\n );\n }\n return \"qTBbJjIo8RZmDMqAN7OQlg1O13j6R5OjYx40nLrK\";\n}\n\nconst AK = getAccessKey();\nconst SK = getSecretKey();\n\n/**\n * 获取UNIX时间戳,精确到秒\n */\nfunction getUnixTimestamp() {\n return Math.floor(Date.now() / 1000);\n}\n\n/**\n * 将UNIX时间戳转成YYYY-MM-DD格式\n */\nfunction formatTimestamp(timestamp: number) {\n const date = new Date(timestamp * 1000);\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\n/**\n * 拼接规范请求串\n * @param HTTPRequestMethod 请求方法\n * @param CanonicalURI 请求 URI\n * @param CanonicalQueryString 请求参数\n * @param CanonicalHeaders\n * @param SignedHeaders\n * @param body 请求体\n * @param timestamp 时间戳\n */\nfunction sign(\n HTTPRequestMethod: \"GET\" | \"POST\",\n CanonicalURI: string,\n CanonicalQueryString: string = \"\",\n CanonicalHeaders: string | Record<string, any> = \"\",\n SignedHeaders: string | number = \"\",\n body: Record<string, any> | null,\n timestamp: number,\n) {\n // 拼接规范请求串\n const HashedRequestPayload = CryptoJS.SHA256(\n body ? JSON.stringify(body) : \"\",\n ).toString(CryptoJS.enc.Hex);\n const CanonicalRequest = `${HTTPRequestMethod}\\n${CanonicalURI}\\n${CanonicalQueryString}\\n${CanonicalHeaders}\\n\\n${SignedHeaders}\\n${\n HashedRequestPayload\n }`;\n // console.log(\"\\n--- CanonicalRequest ---\");\n // console.log(CanonicalRequest);\n\n // 拼接待签名字符串\n const Algorithm = \"CT-HMAC-SHA256\";\n const RequestTimestamp = timestamp;\n const CredentialScope = `${formatTimestamp(timestamp)}/vss`;\n const HashedCanonicalRequest = CryptoJS.SHA256(CanonicalRequest).toString(\n CryptoJS.enc.Hex,\n );\n const StringToSign = `${Algorithm}\\n${RequestTimestamp}\\n${CredentialScope}\\n${HashedCanonicalRequest}`;\n // console.log(\"\\n--- StringToSign ---\");\n // console.log(StringToSign);\n\n // 计算签名\n // 第一步:计算SecretDate\n const dateString = formatTimestamp(timestamp);\n const secretKey = `CT${SK}`;\n const SecretDate = CryptoJS.HmacSHA256(dateString, secretKey);\n // console.log(\"\\n--- SecretDate ---\");\n // console.log(SecretDate.toString(CryptoJS.enc.Hex));\n\n // 第二步:计算SigningKey\n const SigningKey = CryptoJS.HmacSHA256(\"vss\", SecretDate);\n // console.log(\"\\n--- SigningKey ---\");\n // console.log(SigningKey.toString(CryptoJS.enc.Hex));\n\n // 第三步:计算最终签名\n const Signature = CryptoJS.HmacSHA256(StringToSign, SigningKey).toString(\n CryptoJS.enc.Hex,\n );\n // console.log(\"\\n--- Signature ---\");\n // console.log(Signature);\n\n // 构建Authorization头\n return `${Algorithm} Credential=${AK}/${CredentialScope}, SignedHeaders=${SignedHeaders}, Signature=${Signature}`;\n}\n\nexport async function ctyunRequest(\n method: \"GET\" | \"POST\",\n url: string,\n params?: {\n query?: Record<string, any> | null;\n body?: Record<string, any> | null;\n },\n): Promise<any> {\n const timestamp = getUnixTimestamp();\n // const timestamp = 1756374060;\n let queryString = \"\";\n let uri = url;\n if (params && params?.query) {\n const temp = params.query;\n queryString = Object.keys(temp)\n .map((key) => `${key}=${temp[key]}`)\n .join(\"&\");\n uri = `${uri}?${queryString}`;\n }\n const Authorization = sign(\n method,\n url,\n queryString,\n `host:vssapi.ctyun.cn\\ntimestamp:${timestamp}`,\n \"host;timestamp\",\n params?.body || null,\n timestamp,\n );\n return new Promise((resolve, reject) => {\n axios({\n method,\n url: `/ctyun${uri}`,\n headers: {\n Authorization,\n Version: \"2021-11-25\",\n Timestamp: timestamp,\n },\n data: params?.body,\n })\n .then((res) => {\n // console.log(res);\n resolve(res.data);\n })\n .catch((err) => {\n // console.log(err);\n if (err.status === 403) {\n resolve(err.response?.data);\n } else {\n reject(err.response?.data);\n }\n });\n });\n}\n\n/**\n * 通过设备ID获取播放流地址\n */\nexport async function GetCtyunDeviceVideoUrl(\n deviceId: string,\n): Promise<string> {\n try {\n // 参数校验\n if (!deviceId) {\n console.warn(\"Device ID is required\");\n return \"\";\n }\n\n const result = await ctyunRequest(\n \"GET\",\n `/devices/${deviceId}/live/stream`,\n {\n query: {\n StreamNum: 1,\n },\n },\n );\n console.log(result);\n // 检查响应状态\n if (!result || result.statusCode !== 200) {\n console.error(\"Failed to get device video stream\", result);\n return \"\";\n }\n\n // 安全地提取播放URL\n const liveStream = result.returnObj?.LiveStreams?.[0];\n const flvUrl = liveStream?.PlayUrl?.FlvUrl;\n\n console.log(flvUrl);\n if (flvUrl) {\n return flvUrl;\n }\n\n console.warn(\"No FLV URL found in response\", result);\n return \"\";\n } catch (error) {\n console.error(\"Error getting device video URL:\", error);\n return \"\";\n }\n}\n\n/**\n * 获取语音对讲WebSocket地址\n */\nexport async function GetCtyunDeviceAudioUrl(deviceId: string): Promise<any> {\n try {\n // 参数校验\n if (!deviceId) {\n console.warn(\"Device ID is required\");\n return {};\n }\n\n const result = await ctyunRequest(\n \"POST\",\n `/devices/${deviceId}/startTalk`,\n {\n body: {\n // 传输优先级 tcp/udp\n TransPriority: \"tcp\",\n // 接入协议\n InProtocol: \"gb28181\",\n },\n },\n );\n console.log(result);\n // 检查响应状态\n if (!result || result.statusCode !== 200) {\n console.error(\"Failed to get device audio stream\", result);\n return {};\n }\n if (result?.returnObj) {\n return result?.returnObj;\n }\n\n console.warn(\"No FLV URL found in response\", result);\n return {\n audioUrl: \"\",\n audioKey: \"\",\n };\n } catch (error) {\n console.error(\"Error getting device audio URL:\", error);\n return {\n audioUrl: \"\",\n audioKey: \"\",\n };\n }\n}\n"],"names":[],"mappings":";;;;;;;AAMA,SAAS,YAAuB,GAAA;AAC9B,EAAI,IAAA,OAAO,iBAAiB,WAAa,EAAA;AACvC,IAAO,OAAA,YAAA,CAAa,OAAQ,CAAA,SAAS,CAAK,IAAA,sBAAA;AAAA;AAE5C,EAAO,OAAA,sBAAA;AACT;AALS,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAUT,SAAS,YAAuB,GAAA;AAC9B,EAAI,IAAA,OAAO,iBAAiB,WAAa,EAAA;AACvC,IACE,OAAA,YAAA,CAAa,OAAQ,CAAA,SAAS,CAC9B,IAAA,0CAAA;AAAA;AAGJ,EAAO,OAAA,0CAAA;AACT;AARS,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAUT,MAAM,KAAK,YAAa,EAAA;AACxB,MAAM,KAAK,YAAa,EAAA;AAKxB,SAAS,gBAAmB,GAAA;AAC1B,EAAA,OAAO,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,GAAA,KAAQ,GAAI,CAAA;AACrC;AAFS,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAOT,SAAS,gBAAgB,SAAmB,EAAA;AAC1C,EAAA,MAAM,IAAO,GAAA,IAAI,IAAK,CAAA,SAAA,GAAY,GAAI,CAAA;AACtC,EAAM,MAAA,IAAA,GAAO,KAAK,WAAY,EAAA;AAC9B,EAAM,MAAA,KAAA,GAAQ,OAAO,IAAK,CAAA,QAAA,KAAa,CAAC,CAAA,CAAE,QAAS,CAAA,CAAA,EAAG,GAAG,CAAA;AACzD,EAAM,MAAA,GAAA,GAAM,OAAO,IAAK,CAAA,OAAA,EAAS,CAAE,CAAA,QAAA,CAAS,GAAG,GAAG,CAAA;AAClD,EAAA,OAAO,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,KAAK,IAAI,GAAG,CAAA,CAAA;AAChC;AANS,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AAkBT,SAAS,IAAA,CACP,iBACA,EAAA,YAAA,EACA,oBAA+B,GAAA,EAAA,EAC/B,mBAAiD,EACjD,EAAA,aAAA,GAAiC,EACjC,EAAA,IAAA,EACA,SACA,EAAA;AAEA,EAAA,MAAM,uBAAuB,QAAS,CAAA,MAAA;AAAA,IACpC,IAAO,GAAA,IAAA,CAAK,SAAU,CAAA,IAAI,CAAI,GAAA;AAAA,GAC9B,CAAA,QAAA,CAAS,QAAS,CAAA,GAAA,CAAI,GAAG,CAAA;AAC3B,EAAM,MAAA,gBAAA,GAAmB,GAAG,iBAAiB;AAAA,EAAK,YAAY;AAAA,EAAK,oBAAoB;AAAA,EAAK,gBAAgB;;AAAA,EAAO,aAAa;AAAA,EAC9H,oBACF,CAAA,CAAA;AAKA,EAAA,MAAM,SAAY,GAAA,gBAAA;AAClB,EAAA,MAAM,gBAAmB,GAAA,SAAA;AACzB,EAAA,MAAM,eAAkB,GAAA,CAAA,EAAG,eAAgB,CAAA,SAAS,CAAC,CAAA,IAAA,CAAA;AACrD,EAAA,MAAM,sBAAyB,GAAA,QAAA,CAAS,MAAO,CAAA,gBAAgB,CAAE,CAAA,QAAA;AAAA,IAC/D,SAAS,GAAI,CAAA;AAAA,GACf;AACA,EAAM,MAAA,YAAA,GAAe,GAAG,SAAS;AAAA,EAAK,gBAAgB;AAAA,EAAK,eAAe;AAAA,EAAK,sBAAsB,CAAA,CAAA;AAMrG,EAAM,MAAA,UAAA,GAAa,gBAAgB,SAAS,CAAA;AAC5C,EAAM,MAAA,SAAA,GAAY,KAAK,EAAE,CAAA,CAAA;AACzB,EAAA,MAAM,UAAa,GAAA,QAAA,CAAS,UAAW,CAAA,UAAA,EAAY,SAAS,CAAA;AAK5D,EAAA,MAAM,UAAa,GAAA,QAAA,CAAS,UAAW,CAAA,KAAA,EAAO,UAAU,CAAA;AAKxD,EAAA,MAAM,SAAY,GAAA,QAAA,CAAS,UAAW,CAAA,YAAA,EAAc,UAAU,CAAE,CAAA,QAAA;AAAA,IAC9D,SAAS,GAAI,CAAA;AAAA,GACf;AAKA,EAAO,OAAA,CAAA,EAAG,SAAS,CAAe,YAAA,EAAA,EAAE,IAAI,eAAe,CAAA,gBAAA,EAAmB,aAAa,CAAA,YAAA,EAAe,SAAS,CAAA,CAAA;AACjH;AApDS,MAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAsDa,eAAA,YAAA,CACpB,MACA,EAAA,GAAA,EACA,MAIc,EAAA;AACd,EAAA,MAAM,YAAY,gBAAiB,EAAA;AAEnC,EAAA,IAAI,WAAc,GAAA,EAAA;AAClB,EAAA,IAAI,GAAM,GAAA,GAAA;AACV,EAAI,IAAA,MAAA,KAAU,iCAAQ,KAAO,CAAA,EAAA;AAC3B,IAAA,MAAM,OAAO,MAAO,CAAA,KAAA;AACpB,IAAA,WAAA,GAAc,OAAO,IAAK,CAAA,IAAI,CAC3B,CAAA,GAAA,CAAI,CAAC,GAAQ,KAAA,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,GAAG,CAAC,CAAE,CAAA,CAAA,CAClC,KAAK,GAAG,CAAA;AACX,IAAM,GAAA,GAAA,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA;AAAA;AAE7B,EAAA,MAAM,aAAgB,GAAA,IAAA;AAAA,IACpB,MAAA;AAAA,IACA,GAAA;AAAA,IACA,WAAA;AAAA,IACA,CAAA;AAAA,UAAA,EAAmC,SAAS,CAAA,CAAA;AAAA,IAC5C,gBAAA;AAAA,IAAA,CACA,iCAAQ,IAAQ,KAAA,IAAA;AAAA,IAChB;AAAA,GACF;AACA,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,IAAM,KAAA,CAAA;AAAA,MACJ,MAAA;AAAA,MACA,GAAA,EAAK,SAAS,GAAG,CAAA,CAAA;AAAA,MACjB,OAAS,EAAA;AAAA,QACP,aAAA;AAAA,QACA,OAAS,EAAA,YAAA;AAAA,QACT,SAAW,EAAA;AAAA,OACb;AAAA,MACA,MAAM,MAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA;AAAA,KACf,CAAA,CACE,IAAK,CAAA,CAAC,GAAQ,KAAA;AAEb,MAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAAA,KACjB,CAAA,CACA,KAAM,CAAA,CAAC,GAAQ,KAAA;AA1JtB,MAAA,IAAA,EAAA,EAAA,EAAA;AA4JQ,MAAI,IAAA,GAAA,CAAI,WAAW,GAAK,EAAA;AACtB,QAAQ,OAAA,CAAA,CAAA,EAAA,GAAA,GAAA,CAAI,QAAJ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAc,IAAI,CAAA;AAAA,OACrB,MAAA;AACL,QAAO,MAAA,CAAA,CAAA,EAAA,GAAA,GAAA,CAAI,QAAJ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAc,IAAI,CAAA;AAAA;AAC3B,KACD,CAAA;AAAA,GACJ,CAAA;AACH;AApDsB,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAyDtB,eAAsB,uBACpB,QACiB,EAAA;AA1KnB,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA2KE,EAAI,IAAA;AAEF,IAAA,IAAI,CAAC,QAAU,EAAA;AACb,MAAA,OAAA,CAAQ,KAAK,uBAAuB,CAAA;AACpC,MAAO,OAAA,EAAA;AAAA;AAGT,IAAA,MAAM,SAAS,MAAM,YAAA;AAAA,MACnB,KAAA;AAAA,MACA,YAAY,QAAQ,CAAA,YAAA,CAAA;AAAA,MACpB;AAAA,QACE,KAAO,EAAA;AAAA,UACL,SAAW,EAAA;AAAA;AACb;AACF,KACF;AACA,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAElB,IAAA,IAAI,CAAC,MAAA,IAAU,MAAO,CAAA,UAAA,KAAe,GAAK,EAAA;AACxC,MAAQ,OAAA,CAAA,KAAA,CAAM,qCAAqC,MAAM,CAAA;AACzD,MAAO,OAAA,EAAA;AAAA;AAIT,IAAA,MAAM,UAAa,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,SAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,gBAAlB,IAAgC,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAA,CAAA;AACnD,IAAM,MAAA,MAAA,GAAA,CAAS,EAAY,GAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,OAAA,KAAZ,IAAqB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA;AAEpC,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAClB,IAAA,IAAI,MAAQ,EAAA;AACV,MAAO,OAAA,MAAA;AAAA;AAGT,IAAQ,OAAA,CAAA,IAAA,CAAK,gCAAgC,MAAM,CAAA;AACnD,IAAO,OAAA,EAAA;AAAA,WACA,KAAO,EAAA;AACd,IAAQ,OAAA,CAAA,KAAA,CAAM,mCAAmC,KAAK,CAAA;AACtD,IAAO,OAAA,EAAA;AAAA;AAEX;AAzCsB,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AA8CtB,eAAsB,uBAAuB,QAAgC,EAAA;AAC3E,EAAI,IAAA;AAEF,IAAA,IAAI,CAAC,QAAU,EAAA;AACb,MAAA,OAAA,CAAQ,KAAK,uBAAuB,CAAA;AACpC,MAAA,OAAO,EAAC;AAAA;AAGV,IAAA,MAAM,SAAS,MAAM,YAAA;AAAA,MACnB,MAAA;AAAA,MACA,YAAY,QAAQ,CAAA,UAAA,CAAA;AAAA,MACpB;AAAA,QACE,IAAM,EAAA;AAAA;AAAA,UAEJ,aAAe,EAAA,KAAA;AAAA;AAAA,UAEf,UAAY,EAAA;AAAA;AACd;AACF,KACF;AACA,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAElB,IAAA,IAAI,CAAC,MAAA,IAAU,MAAO,CAAA,UAAA,KAAe,GAAK,EAAA;AACxC,MAAQ,OAAA,CAAA,KAAA,CAAM,qCAAqC,MAAM,CAAA;AACzD,MAAA,OAAO,EAAC;AAAA;AAEV,IAAA,IAAI,iCAAQ,SAAW,EAAA;AACrB,MAAA,OAAO,MAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,SAAA;AAAA;AAGjB,IAAQ,OAAA,CAAA,IAAA,CAAK,gCAAgC,MAAM,CAAA;AACnD,IAAO,OAAA;AAAA,MACL,QAAU,EAAA,EAAA;AAAA,MACV,QAAU,EAAA;AAAA,KACZ;AAAA,WACO,KAAO,EAAA;AACd,IAAQ,OAAA,CAAA,KAAA,CAAM,mCAAmC,KAAK,CAAA;AACtD,IAAO,OAAA;AAAA,MACL,QAAU,EAAA,EAAA;AAAA,MACV,QAAU,EAAA;AAAA,KACZ;AAAA;AAEJ;AA1CsB,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;;;;;;"}