@oneuptime/common 7.0.4255 → 7.0.4260
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.
- package/Server/Utils/VM/VMRunner.ts +2 -0
- package/UI/Components/MasterPage/MasterPage.tsx +24 -12
- package/UI/Components/Offline/OfflineIndicator.tsx +54 -0
- package/build/dist/Server/Utils/VM/VMRunner.js +2 -1
- package/build/dist/Server/Utils/VM/VMRunner.js.map +1 -1
- package/build/dist/UI/Components/MasterPage/MasterPage.js +7 -2
- package/build/dist/UI/Components/MasterPage/MasterPage.js.map +1 -1
- package/build/dist/UI/Components/Offline/OfflineIndicator.js +27 -0
- package/build/dist/UI/Components/Offline/OfflineIndicator.js.map +1 -0
- package/package.json +1 -1
|
@@ -5,6 +5,7 @@ import { JSONObject, JSONValue } from "../../../Types/JSON";
|
|
|
5
5
|
import axios from "axios";
|
|
6
6
|
import http from "http";
|
|
7
7
|
import https from "https";
|
|
8
|
+
import crypto from "crypto";
|
|
8
9
|
import vm, { Context } from "node:vm";
|
|
9
10
|
import CaptureSpan from "../Telemetry/CaptureSpan";
|
|
10
11
|
|
|
@@ -31,6 +32,7 @@ export default class VMRunner {
|
|
|
31
32
|
http: http,
|
|
32
33
|
https: https,
|
|
33
34
|
axios: axios,
|
|
35
|
+
crypto: crypto,
|
|
34
36
|
setTimeout: setTimeout,
|
|
35
37
|
clearTimeout: clearTimeout,
|
|
36
38
|
setInterval: setInterval,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import PageError from "../Error/PageError";
|
|
2
2
|
import PageLoader from "../Loader/PageLoader";
|
|
3
|
+
import OfflineIndicator from "../Offline/OfflineIndicator";
|
|
3
4
|
import TopSection from "../TopSection/TopSection";
|
|
4
5
|
import React, { FunctionComponent, ReactElement } from "react";
|
|
5
6
|
|
|
@@ -19,6 +20,8 @@ export interface ComponentProps {
|
|
|
19
20
|
const MasterPage: FunctionComponent<ComponentProps> = (
|
|
20
21
|
props: ComponentProps,
|
|
21
22
|
): ReactElement => {
|
|
23
|
+
const [isOnline, setIsOnline] = React.useState(true);
|
|
24
|
+
|
|
22
25
|
if (props.isLoading) {
|
|
23
26
|
return (
|
|
24
27
|
<React.Fragment>
|
|
@@ -37,20 +40,29 @@ const MasterPage: FunctionComponent<ComponentProps> = (
|
|
|
37
40
|
|
|
38
41
|
return (
|
|
39
42
|
<React.Fragment>
|
|
40
|
-
|
|
41
|
-
<div className={props.
|
|
42
|
-
<
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
{isOnline && (
|
|
44
|
+
<div className={props.className}>
|
|
45
|
+
<div
|
|
46
|
+
className={props.makeTopSectionUnstick ? "" : "sticky top-0 z-10"}
|
|
47
|
+
>
|
|
48
|
+
<TopSection
|
|
49
|
+
hideHeader={props.hideHeader}
|
|
50
|
+
className={props.topSectionClassName}
|
|
51
|
+
header={props.header}
|
|
52
|
+
navbar={props.navBar}
|
|
53
|
+
/>
|
|
54
|
+
</div>
|
|
49
55
|
|
|
50
|
-
|
|
56
|
+
{props.children}
|
|
51
57
|
|
|
52
|
-
|
|
53
|
-
|
|
58
|
+
{props.footer && props.footer}
|
|
59
|
+
</div>
|
|
60
|
+
)}
|
|
61
|
+
<OfflineIndicator
|
|
62
|
+
onOnlineOfflineChange={(isOnline: boolean) => {
|
|
63
|
+
return setIsOnline(isOnline);
|
|
64
|
+
}}
|
|
65
|
+
/>
|
|
54
66
|
</React.Fragment>
|
|
55
67
|
);
|
|
56
68
|
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React, { useState, useEffect, ReactElement } from "react";
|
|
2
|
+
import EmptyState from "../EmptyState/EmptyState";
|
|
3
|
+
import IconProp from "../../../Types/Icon/IconProp";
|
|
4
|
+
import { VoidFunction } from "../../../Types/FunctionTypes";
|
|
5
|
+
|
|
6
|
+
interface OfflineIndicatorProps {
|
|
7
|
+
onOnlineOfflineChange?: (isOnline: boolean) => void;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
type OfflineIndicatorComponent = React.FC<OfflineIndicatorProps>;
|
|
11
|
+
|
|
12
|
+
const OfflineIndicator: OfflineIndicatorComponent = ({
|
|
13
|
+
onOnlineOfflineChange,
|
|
14
|
+
}: OfflineIndicatorProps): ReactElement => {
|
|
15
|
+
const [isOnline, setIsOnline] = useState(navigator.onLine);
|
|
16
|
+
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
const handleOnline: VoidFunction = () => {
|
|
19
|
+
setIsOnline(true);
|
|
20
|
+
onOnlineOfflineChange?.(true);
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const handleOffline: VoidFunction = () => {
|
|
24
|
+
setIsOnline(false);
|
|
25
|
+
onOnlineOfflineChange?.(false);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
window.addEventListener("online", handleOnline);
|
|
29
|
+
window.addEventListener("offline", handleOffline);
|
|
30
|
+
|
|
31
|
+
// Call with initial state
|
|
32
|
+
onOnlineOfflineChange?.(navigator.onLine);
|
|
33
|
+
|
|
34
|
+
return () => {
|
|
35
|
+
window.removeEventListener("online", handleOnline);
|
|
36
|
+
window.removeEventListener("offline", handleOffline);
|
|
37
|
+
};
|
|
38
|
+
}, [onOnlineOfflineChange]);
|
|
39
|
+
|
|
40
|
+
return (
|
|
41
|
+
<div>
|
|
42
|
+
{!isOnline && (
|
|
43
|
+
<EmptyState
|
|
44
|
+
id="offline-indicator"
|
|
45
|
+
title="You are offline"
|
|
46
|
+
description="Please check your internet connection."
|
|
47
|
+
icon={IconProp.NoSignal}
|
|
48
|
+
/>
|
|
49
|
+
)}
|
|
50
|
+
</div>
|
|
51
|
+
);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export default OfflineIndicator;
|
|
@@ -10,6 +10,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
import axios from "axios";
|
|
11
11
|
import http from "http";
|
|
12
12
|
import https from "https";
|
|
13
|
+
import crypto from "crypto";
|
|
13
14
|
import vm from "node:vm";
|
|
14
15
|
import CaptureSpan from "../Telemetry/CaptureSpan";
|
|
15
16
|
export default class VMRunner {
|
|
@@ -20,7 +21,7 @@ export default class VMRunner {
|
|
|
20
21
|
log: (...args) => {
|
|
21
22
|
logMessages.push(args.join(" "));
|
|
22
23
|
},
|
|
23
|
-
}, http: http, https: https, axios: axios, setTimeout: setTimeout, clearTimeout: clearTimeout, setInterval: setInterval }, options.context);
|
|
24
|
+
}, http: http, https: https, axios: axios, crypto: crypto, setTimeout: setTimeout, clearTimeout: clearTimeout, setInterval: setInterval }, options.context);
|
|
24
25
|
if (options.args) {
|
|
25
26
|
sandbox = Object.assign(Object.assign({}, sandbox), { args: options.args });
|
|
26
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VMRunner.js","sourceRoot":"","sources":["../../../../../Server/Utils/VM/VMRunner.ts"],"names":[],"mappings":";;;;;;;;;AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAe,MAAM,SAAS,CAAC;AACtC,OAAO,WAAW,MAAM,0BAA0B,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,QAAQ;IAEP,AAAb,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAOpC;QACC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAE/B,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,IAAI,OAAO,mBACT,OAAO,EAAE;gBACP,GAAG,EAAE,CAAC,GAAG,IAAiB,EAAE,EAAE;oBAC5B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnC,CAAC;aACF,EACD,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,IACrB,OAAO,CAAC,OAAO,CACnB,CAAC;QAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,mCACF,OAAO,KACV,IAAI,EAAE,OAAO,CAAC,IAAI,GACnB,CAAC;QACJ,CAAC;QAED,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB;QAEpD,MAAM,MAAM,GACV;cACQ,IAAI;aACL,IAAI,EAAE,CAAC;QAEhB,MAAM,SAAS,GAAQ,MAAM,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE;YAC5D,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;SACjC,CAAC,CAAC,CAAC,iBAAiB;QAErB,OAAO;YACL,WAAW,EAAE,SAAS;YACtB,WAAW;SACZ,CAAC;IACJ,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"VMRunner.js","sourceRoot":"","sources":["../../../../../Server/Utils/VM/VMRunner.ts"],"names":[],"mappings":";;;;;;;;;AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAe,MAAM,SAAS,CAAC;AACtC,OAAO,WAAW,MAAM,0BAA0B,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,QAAQ;IAEP,AAAb,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAOpC;QACC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAE/B,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,IAAI,OAAO,mBACT,OAAO,EAAE;gBACP,GAAG,EAAE,CAAC,GAAG,IAAiB,EAAE,EAAE;oBAC5B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnC,CAAC;aACF,EACD,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,IACrB,OAAO,CAAC,OAAO,CACnB,CAAC;QAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,mCACF,OAAO,KACV,IAAI,EAAE,OAAO,CAAC,IAAI,GACnB,CAAC;QACJ,CAAC;QAED,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB;QAEpD,MAAM,MAAM,GACV;cACQ,IAAI;aACL,IAAI,EAAE,CAAC;QAEhB,MAAM,SAAS,GAAQ,MAAM,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE;YAC5D,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;SACjC,CAAC,CAAC,CAAC,iBAAiB;QAErB,OAAO;YACL,WAAW,EAAE,SAAS;YACtB,WAAW;SACZ,CAAC;IACJ,CAAC;CACF;AAnDqB;IADnB,WAAW,EAAE;;;;sCAmDb"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import PageError from "../Error/PageError";
|
|
2
2
|
import PageLoader from "../Loader/PageLoader";
|
|
3
|
+
import OfflineIndicator from "../Offline/OfflineIndicator";
|
|
3
4
|
import TopSection from "../TopSection/TopSection";
|
|
4
5
|
import React from "react";
|
|
5
6
|
const MasterPage = (props) => {
|
|
7
|
+
const [isOnline, setIsOnline] = React.useState(true);
|
|
6
8
|
if (props.isLoading) {
|
|
7
9
|
return (React.createElement(React.Fragment, null,
|
|
8
10
|
React.createElement(PageLoader, { isVisible: true })));
|
|
@@ -12,11 +14,14 @@ const MasterPage = (props) => {
|
|
|
12
14
|
React.createElement(PageError, { message: props.error })));
|
|
13
15
|
}
|
|
14
16
|
return (React.createElement(React.Fragment, null,
|
|
15
|
-
React.createElement("div", { className: props.className },
|
|
17
|
+
isOnline && (React.createElement("div", { className: props.className },
|
|
16
18
|
React.createElement("div", { className: props.makeTopSectionUnstick ? "" : "sticky top-0 z-10" },
|
|
17
19
|
React.createElement(TopSection, { hideHeader: props.hideHeader, className: props.topSectionClassName, header: props.header, navbar: props.navBar })),
|
|
18
20
|
props.children,
|
|
19
|
-
props.footer && props.footer))
|
|
21
|
+
props.footer && props.footer)),
|
|
22
|
+
React.createElement(OfflineIndicator, { onOnlineOfflineChange: (isOnline) => {
|
|
23
|
+
return setIsOnline(isOnline);
|
|
24
|
+
} })));
|
|
20
25
|
};
|
|
21
26
|
export default MasterPage;
|
|
22
27
|
//# sourceMappingURL=MasterPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MasterPage.js","sourceRoot":"","sources":["../../../../../UI/Components/MasterPage/MasterPage.tsx"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAC9C,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,KAA0C,MAAM,OAAO,CAAC;AAe/D,MAAM,UAAU,GAAsC,CACpD,KAAqB,EACP,EAAE;IAChB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CACL,oBAAC,KAAK,CAAC,QAAQ;YACb,oBAAC,UAAU,IAAC,SAAS,EAAE,IAAI,GAAI,CAChB,CAClB,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CACL,oBAAC,KAAK,CAAC,QAAQ;YACb,oBAAC,SAAS,IAAC,OAAO,EAAE,KAAK,CAAC,KAAK,GAAI,CACpB,CAClB,CAAC;IACJ,CAAC;IAED,OAAO,CACL,oBAAC,KAAK,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"MasterPage.js","sourceRoot":"","sources":["../../../../../UI/Components/MasterPage/MasterPage.tsx"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAC3C,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAC9C,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,KAA0C,MAAM,OAAO,CAAC;AAe/D,MAAM,UAAU,GAAsC,CACpD,KAAqB,EACP,EAAE;IAChB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAErD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CACL,oBAAC,KAAK,CAAC,QAAQ;YACb,oBAAC,UAAU,IAAC,SAAS,EAAE,IAAI,GAAI,CAChB,CAClB,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CACL,oBAAC,KAAK,CAAC,QAAQ;YACb,oBAAC,SAAS,IAAC,OAAO,EAAE,KAAK,CAAC,KAAK,GAAI,CACpB,CAClB,CAAC;IACJ,CAAC;IAED,OAAO,CACL,oBAAC,KAAK,CAAC,QAAQ;QACZ,QAAQ,IAAI,CACX,6BAAK,SAAS,EAAE,KAAK,CAAC,SAAS;YAC7B,6BACE,SAAS,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB;gBAEjE,oBAAC,UAAU,IACT,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,SAAS,EAAE,KAAK,CAAC,mBAAmB,EACpC,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,MAAM,EAAE,KAAK,CAAC,MAAM,GACpB,CACE;YAEL,KAAK,CAAC,QAAQ;YAEd,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CACzB,CACP;QACD,oBAAC,gBAAgB,IACf,qBAAqB,EAAE,CAAC,QAAiB,EAAE,EAAE;gBAC3C,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC,GACD,CACa,CAClB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React, { useState, useEffect } from "react";
|
|
2
|
+
import EmptyState from "../EmptyState/EmptyState";
|
|
3
|
+
import IconProp from "../../../Types/Icon/IconProp";
|
|
4
|
+
const OfflineIndicator = ({ onOnlineOfflineChange, }) => {
|
|
5
|
+
const [isOnline, setIsOnline] = useState(navigator.onLine);
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
const handleOnline = () => {
|
|
8
|
+
setIsOnline(true);
|
|
9
|
+
onOnlineOfflineChange === null || onOnlineOfflineChange === void 0 ? void 0 : onOnlineOfflineChange(true);
|
|
10
|
+
};
|
|
11
|
+
const handleOffline = () => {
|
|
12
|
+
setIsOnline(false);
|
|
13
|
+
onOnlineOfflineChange === null || onOnlineOfflineChange === void 0 ? void 0 : onOnlineOfflineChange(false);
|
|
14
|
+
};
|
|
15
|
+
window.addEventListener("online", handleOnline);
|
|
16
|
+
window.addEventListener("offline", handleOffline);
|
|
17
|
+
// Call with initial state
|
|
18
|
+
onOnlineOfflineChange === null || onOnlineOfflineChange === void 0 ? void 0 : onOnlineOfflineChange(navigator.onLine);
|
|
19
|
+
return () => {
|
|
20
|
+
window.removeEventListener("online", handleOnline);
|
|
21
|
+
window.removeEventListener("offline", handleOffline);
|
|
22
|
+
};
|
|
23
|
+
}, [onOnlineOfflineChange]);
|
|
24
|
+
return (React.createElement("div", null, !isOnline && (React.createElement(EmptyState, { id: "offline-indicator", title: "You are offline", description: "Please check your internet connection.", icon: IconProp.NoSignal }))));
|
|
25
|
+
};
|
|
26
|
+
export default OfflineIndicator;
|
|
27
|
+
//# sourceMappingURL=OfflineIndicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OfflineIndicator.js","sourceRoot":"","sources":["../../../../../UI/Components/Offline/OfflineIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAgB,MAAM,OAAO,CAAC;AACjE,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,QAAQ,MAAM,8BAA8B,CAAC;AASpD,MAAM,gBAAgB,GAA8B,CAAC,EACnD,qBAAqB,GACC,EAAgB,EAAE;IACxC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAE3D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAiB,GAAG,EAAE;YACtC,WAAW,CAAC,IAAI,CAAC,CAAC;YAClB,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAG,IAAI,CAAC,CAAC;QAChC,CAAC,CAAC;QAEF,MAAM,aAAa,GAAiB,GAAG,EAAE;YACvC,WAAW,CAAC,KAAK,CAAC,CAAC;YACnB,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAG,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAElD,0BAA0B;QAC1B,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAE1C,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACvD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE5B,OAAO,CACL,iCACG,CAAC,QAAQ,IAAI,CACZ,oBAAC,UAAU,IACT,EAAE,EAAC,mBAAmB,EACtB,KAAK,EAAC,iBAAiB,EACvB,WAAW,EAAC,wCAAwC,EACpD,IAAI,EAAE,QAAQ,CAAC,QAAQ,GACvB,CACH,CACG,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|