From a543cc2754a032d12c3db0f542ab7678ab841d0f Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Mon, 29 Jul 2024 03:19:02 +0900 Subject: [PATCH 001/116] =?UTF-8?q?[feat#14]=20=EC=8A=A4=EB=83=85=EC=83=B7?= =?UTF-8?q?=20=EA=B0=80=EC=9D=B4=EB=93=9C=EB=9D=BC=EC=9D=B8=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/PoseDetector.tsx | 70 +++++++++++- src/utils/calculator.ts | 67 +++++++++++ src/utils/drawer.ts | 42 ++++++- src/utils/guideLine.ts | 194 ++++++++++++++++++++++++++++++++ src/utils/index.ts | 1 + 5 files changed, 365 insertions(+), 9 deletions(-) create mode 100644 src/utils/guideLine.ts diff --git a/src/components/PoseDetector.tsx b/src/components/PoseDetector.tsx index fcca093..4b17fcf 100644 --- a/src/components/PoseDetector.tsx +++ b/src/components/PoseDetector.tsx @@ -13,7 +13,8 @@ const PoseDetector: React.FC = () => { const [isTextNeck, setIsTextNeck] = useState(null) const [isModelLoaded, setIsModelLoaded] = useState(false) const [mode, setMode] = useState("snapshot") - + const [canInit, setCanInit] = useState(false) + const [isSnapSaved, setIsSnapSaved] = useState(false); const modelRef = useRef(null) const snapRef = useRef(null) const resultRef = useRef(null) @@ -21,6 +22,10 @@ const PoseDetector: React.FC = () => { const timer = useRef(null) const canvasRef = useRef(null) + const dx = useRef(0) + const dy = useRef(0) + const scale = useRef(1) + const { requestNotificationPermission, showNotification } = usePushNotification() const requestApi = (delay: number): Promise => new Promise((resolve) => setTimeout(resolve, delay)) @@ -64,10 +69,23 @@ const PoseDetector: React.FC = () => { await window.ml5.setBackend("webgl") } + const canInitCallback = (canInit : boolean) => { + setCanInit(canInit) + } + const detect = useCallback( (results: pose[]): void => { resultRef.current = results - if (canvasRef.current) drawPose(results, canvasRef.current) + if (canvasRef.current) { + drawPose( + results, + canvasRef.current, + dx.current, + dy.current, + scale.current, + canInitCallback, + !!snapRef.current) + } if (snapRef.current) { const _slope = detectSlope(snapRef.current, results, mode === "snapshot") const _isTextNeck = detectTextNeck(snapRef.current, results, mode === "snapshot") @@ -108,7 +126,10 @@ const PoseDetector: React.FC = () => { ) const getInitSnap = (): void => { - if (modelRef && modelRef.current) snapRef.current = resultRef.current + if (modelRef && modelRef.current) { + snapRef.current = resultRef.current + setIsSnapSaved(true) + } } useEffect(() => { @@ -129,6 +150,8 @@ const PoseDetector: React.FC = () => { setIsTextNeck(null) setSlope(null) snapRef.current = null + setIsSnapSaved(false) + setCanInit(false) } const onChangeMode = (e: React.ChangeEvent) => { @@ -138,6 +161,25 @@ const PoseDetector: React.FC = () => { } } + const onChangeTranslation = (e: React.ChangeEvent) => { + const id = e.target.id ; + if(e.target.value){ + const value = Number.parseInt(e.target.value) + switch(id){ + case 'vertical' : + dy.current = value + return + case 'horizontal' : + dx.current = value + return + case 'scale' : + scale.current = value / 100 * 2 + return + default : + } + } + } + const onCancelAutoPoseMonitoring = () => { initializePoseMonitoring() } @@ -164,6 +206,14 @@ const PoseDetector: React.FC = () => { /> {isModelLoaded && ( <> +
+
좌우 이동
+ +
상하 이동
+ +
크기 변경
+ +
본 화면은 좌우가 반대로 보이고 있으니 주의하세요!
+
상하 이동
+ +
크기 변경
+ +
+ + ) +} diff --git a/src/components/PoseDetector.tsx b/src/components/PoseDetector.tsx index 4b17fcf..97a4a01 100644 --- a/src/components/PoseDetector.tsx +++ b/src/components/PoseDetector.tsx @@ -1,10 +1,11 @@ -import { useState, useEffect, useRef, useCallback } from "react" -import { Camera } from "." +import usePushNotification from "@/hooks/usePushNotification" import type { pose } from "@/utils/detector" import { detectSlope, detectTextNeck } from "@/utils/detector" import { drawPose } from "@/utils/drawer" -import usePushNotification from "@/hooks/usePushNotification" import { worker } from "@/utils/worker" +import { useCallback, useEffect, useRef, useState } from "react" +import CameraContianer from "./CameraContianer" +import TrackingResult from "./TrackingResult" const PoseDetector: React.FC = () => { const [isScriptLoaded, setIsScriptLoaded] = useState(false) @@ -14,7 +15,7 @@ const PoseDetector: React.FC = () => { const [isModelLoaded, setIsModelLoaded] = useState(false) const [mode, setMode] = useState("snapshot") const [canInit, setCanInit] = useState(false) - const [isSnapSaved, setIsSnapSaved] = useState(false); + const [isSnapSaved, setIsSnapSaved] = useState(false) const modelRef = useRef(null) const snapRef = useRef(null) const resultRef = useRef(null) @@ -69,7 +70,7 @@ const PoseDetector: React.FC = () => { await window.ml5.setBackend("webgl") } - const canInitCallback = (canInit : boolean) => { + const canInitCallback = (canInit: boolean) => { setCanInit(canInit) } @@ -77,14 +78,7 @@ const PoseDetector: React.FC = () => { (results: pose[]): void => { resultRef.current = results if (canvasRef.current) { - drawPose( - results, - canvasRef.current, - dx.current, - dy.current, - scale.current, - canInitCallback, - !!snapRef.current) + drawPose(results, canvasRef.current, dx.current, dy.current, scale.current, canInitCallback, !!snapRef.current) } if (snapRef.current) { const _slope = detectSlope(snapRef.current, results, mode === "snapshot") @@ -116,7 +110,7 @@ const PoseDetector: React.FC = () => { const detectStart = useCallback( async (video: HTMLVideoElement): Promise => { - worker.onmessage = ({ }: any) => { + worker.onmessage = ({}: any) => { if (modelRef.current) { modelRef.current.detect(video, detect) } @@ -162,21 +156,21 @@ const PoseDetector: React.FC = () => { } const onChangeTranslation = (e: React.ChangeEvent) => { - const id = e.target.id ; - if(e.target.value){ - const value = Number.parseInt(e.target.value) - switch(id){ - case 'vertical' : - dy.current = value - return - case 'horizontal' : - dx.current = value - return - case 'scale' : - scale.current = value / 100 * 2 - return - default : - } + const id = e.target.id + if (e.target.value) { + const value = Number.parseInt(e.target.value) + switch (id) { + case "vertical": + dy.current = value + return + case "horizontal": + dx.current = value + return + case "scale": + scale.current = (value / 100) * 2 + return + default: + } } } @@ -185,99 +179,95 @@ const PoseDetector: React.FC = () => { } return ( -
+ <> {isScriptError ? ( "스크립트 불러오기 실패" ) : !isScriptLoaded ? ( "스크립트 불러오는 중" ) : ( - <> - - + {isModelLoaded && ( - <> -
-
좌우 이동
- -
상하 이동
- -
크기 변경
- -
-
본 화면은 좌우가 반대로 보이고 있으니 주의하세요!
-
- -
- {mode === "snapshot" && ( - <> -
- 스냅샷 모드입니다. 올바른 자세를 하신 후에, 버튼을 눌러 촬영을 하면 해당 자세를 기준으로 부적절한 - 자세를 추적합니다! -
- { - canInit ? - isSnapSaved ? - : + + ) : ( : -
스냅샷을 찍을 수 없습니다. 가이드 라인에 맞게 자세를 잡아주세요.
- } - - )} - {mode === "skeleton" && ( - <> -
자동 모드입니다. 자동으로 부적절한 자세를 추적합니다.
-
- - + + ) + ) : ( +
+ 스냅샷을 찍을 수 없습니다. 가이드 라인에 맞게 자세를 잡아주세요. +
+ )}
- - )} - -
- 거북목 상태:  - {isTextNeck === null ? ( - "상태를 확인할 수 없습니다." - ) : isTextNeck ? ( - "거북목 상태 입니다" - ) : ( - "정상적인 자세 입니다" )} + {mode === "skeleton" && ( + <> +
자동 모드입니다. 자동으로 부적절한 자세를 추적합니다.
+
+ + +
+ + )} +
+
+
-
어깨 기울기: {slope === null ? "상태를 확인할 수 없습니다." : slope}
- +
)} - + )} - + ) } diff --git a/src/components/TrackingResult.tsx b/src/components/TrackingResult.tsx new file mode 100644 index 0000000..35812f8 --- /dev/null +++ b/src/components/TrackingResult.tsx @@ -0,0 +1,32 @@ +interface TrackingResultProps { + isTextNeck: boolean | null + slope: null | string +} + +export default function TrackingResult(props: TrackingResultProps) { + const { isTextNeck, slope } = props + return ( +
+
+ 거북목 상태:  + {isTextNeck === null ? ( + "상태를 확인할 수 없습니다." + ) : isTextNeck ? ( + 거북목 상태 입니다 + ) : ( + "정상적인 자세 입니다" + )} +
+
+ 어깨 기울기: {slope === null && 상태를 확인할 수 없습니다.} + {slope && {slope}} +
+
+ ) +} From d441630999a1e49abb77ed8847871b7f1ee2401a Mon Sep 17 00:00:00 2001 From: G-hoon Date: Sat, 3 Aug 2024 15:49:10 +0900 Subject: [PATCH 003/116] =?UTF-8?q?feat:=20lint=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/CameraContianer.tsx | 5 ++--- src/components/ControlPanel.tsx | 3 +-- src/components/PoseDetector.tsx | 1 - 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/components/CameraContianer.tsx b/src/components/CameraContianer.tsx index 96e71e1..fdca1f1 100644 --- a/src/components/CameraContianer.tsx +++ b/src/components/CameraContianer.tsx @@ -6,12 +6,11 @@ interface CameraContianerProps { detectStart: (video: HTMLVideoElement) => void canvasRef: React.LegacyRef | undefined isModelLoaded: boolean - onChangeMode: React.ChangeEventHandler onChangeTranslation: React.ChangeEventHandler } export default function CameraContianer(props: CameraContianerProps) { - const { detectStart, canvasRef, isModelLoaded, onChangeMode, onChangeTranslation } = props + const { detectStart, canvasRef, isModelLoaded, onChangeTranslation } = props return (
- {isModelLoaded && } + {isModelLoaded && }
) diff --git a/src/components/ControlPanel.tsx b/src/components/ControlPanel.tsx index 4303c22..7758d4e 100644 --- a/src/components/ControlPanel.tsx +++ b/src/components/ControlPanel.tsx @@ -2,11 +2,10 @@ import React from "react" interface ControlPanelProps { onChangeTranslation: React.ChangeEventHandler - onChangeMode: React.ChangeEventHandler } export default function ControlPanel(props: ControlPanelProps) { - const { onChangeTranslation, onChangeMode } = props + const { onChangeTranslation } = props return (
diff --git a/src/components/PoseDetector.tsx b/src/components/PoseDetector.tsx index 97a4a01..3f1bff2 100644 --- a/src/components/PoseDetector.tsx +++ b/src/components/PoseDetector.tsx @@ -190,7 +190,6 @@ const PoseDetector: React.FC = () => { detectStart={detectStart} canvasRef={canvasRef} isModelLoaded={isModelLoaded} - onChangeMode={onChangeMode} onChangeTranslation={onChangeTranslation} /> {isModelLoaded && ( From 9bc36edac2c5f082c641dcd231ce556f6ec4367f Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Sat, 3 Aug 2024 16:03:53 +0900 Subject: [PATCH 004/116] =?UTF-8?q?feat:=20=EC=8B=9C=EC=97=B0=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20guideline=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ControlPanel.tsx | 2 +- src/components/PoseDetector.tsx | 18 +++---------- src/utils/detector.ts | 2 +- src/utils/drawer.ts | 47 ++++++++++++++++----------------- 4 files changed, 29 insertions(+), 40 deletions(-) diff --git a/src/components/ControlPanel.tsx b/src/components/ControlPanel.tsx index 7758d4e..a682761 100644 --- a/src/components/ControlPanel.tsx +++ b/src/components/ControlPanel.tsx @@ -7,7 +7,7 @@ interface ControlPanelProps { export default function ControlPanel(props: ControlPanelProps) { const { onChangeTranslation } = props return ( -
+
좌우 이동
diff --git a/src/components/PoseDetector.tsx b/src/components/PoseDetector.tsx index 3f1bff2..0826c70 100644 --- a/src/components/PoseDetector.tsx +++ b/src/components/PoseDetector.tsx @@ -14,7 +14,7 @@ const PoseDetector: React.FC = () => { const [isTextNeck, setIsTextNeck] = useState(null) const [isModelLoaded, setIsModelLoaded] = useState(false) const [mode, setMode] = useState("snapshot") - const [canInit, setCanInit] = useState(false) + const [, setCanInit] = useState(false) const [isSnapSaved, setIsSnapSaved] = useState(false) const modelRef = useRef(null) const snapRef = useRef(null) @@ -70,15 +70,11 @@ const PoseDetector: React.FC = () => { await window.ml5.setBackend("webgl") } - const canInitCallback = (canInit: boolean) => { - setCanInit(canInit) - } - const detect = useCallback( (results: pose[]): void => { resultRef.current = results if (canvasRef.current) { - drawPose(results, canvasRef.current, dx.current, dy.current, scale.current, canInitCallback, !!snapRef.current) + drawPose(results, canvasRef.current, dx.current, dy.current, scale.current) } if (snapRef.current) { const _slope = detectSlope(snapRef.current, results, mode === "snapshot") @@ -212,8 +208,7 @@ const PoseDetector: React.FC = () => { paddingTop: "5px", }} > - {canInit ? ( - isSnapSaved ? ( + {isSnapSaved ? ( - ) - ) : ( -
- 스냅샷을 찍을 수 없습니다. 가이드 라인에 맞게 자세를 잡아주세요. -
- )} + )}
)} {mode === "skeleton" && ( diff --git a/src/utils/detector.ts b/src/utils/detector.ts index 0b8741e..e386e2e 100644 --- a/src/utils/detector.ts +++ b/src/utils/detector.ts @@ -130,7 +130,7 @@ export const detectTextNeck = (refer: pose[], comp: pose[], isSnapShotMode: bool const referEearsDistance = getDistance(referLeftEar, referRightEar) const compDistance = getDistanceFromLine(compLeftShoulder, compRightShoulder, getMidPoint(compLeftEar, compRightEar)) const compEearsDistance = getDistance(compLeftEar, compRightEar) - if (referDistance * 0.98 > compDistance && referEearsDistance < compEearsDistance) return true + if (referDistance * 0.95 > compDistance && referEearsDistance < compEearsDistance) return true else return false } diff --git a/src/utils/drawer.ts b/src/utils/drawer.ts index 2e89b1e..eb84c76 100644 --- a/src/utils/drawer.ts +++ b/src/utils/drawer.ts @@ -2,48 +2,47 @@ import type { pose } from "@/utils/detector" import { getSymmetricPointFromY, getTranslatedPoint, getScaledPoint } from "./calculator"; import { guideLinePoints } from "./guideLine"; -export const drawPose = (poses: pose[], canvas: HTMLCanvasElement, dx : number = 0, dy : number = 0, scale : number = 1, canInitCallback : (canInit : boolean) => void, isInit : boolean) : void => { +export const drawPose = (poses: pose[], canvas: HTMLCanvasElement, dx : number = 0, dy : number = 0, scale : number = 1) : void => { const ctx = canvas.getContext("2d") if (ctx) { ctx.clearRect(0, 0, canvas.width, canvas.height) - const guideLine = new Path2D() + // const guideLine = new Path2D() const origin = {x : canvas.width / 2, y : canvas.height} // canavs 좌표계 기준으로 가이드 라인 정렬 (가이드 라인의 기준은 (canvas.width / 2, canvas.height)) let _guideLinePoints = guideLinePoints.map(point => getSymmetricPointFromY(point,canvas.height / 2.)) if(dx!==0 || dy!==0) _guideLinePoints = _guideLinePoints.map(point => getTranslatedPoint(point,dx,dy)) if(scale!==1) _guideLinePoints = _guideLinePoints.map(point=>getScaledPoint(point, origin.x, origin.y, scale)) - guideLine.moveTo(_guideLinePoints[0].x, _guideLinePoints[0].y) - for (let i = 1; i < _guideLinePoints.length; i++) { - guideLine.lineTo(_guideLinePoints[i].x, _guideLinePoints[i].y) - } - guideLine.closePath() - ctx.strokeStyle = 'blue' - ctx.fillStyle = 'rgba(0, 0, 255, 0.3)'; - ctx.stroke(guideLine) - ctx.fill(guideLine) + // guideLine.moveTo(_guideLinePoints[0].x, _guideLinePoints[0].y) + // for (let i = 1; i < _guideLinePoints.length; i++) { + // guideLine.lineTo(_guideLinePoints[i].x, _guideLinePoints[i].y) + // } + // guideLine.closePath() + // ctx.strokeStyle = 'blue' + // ctx.fillStyle = 'rgba(0, 0, 255, 0.3)'; + // ctx.stroke(guideLine) + // ctx.fill(guideLine) poses.forEach((pose) => { + const leftShoulder = pose.keypoints.find((kp) => kp.name === "left_shoulder") const rightShoulder = pose.keypoints.find((kp) => kp.name === "right_shoulder") - const leftEar = pose.keypoints.find((kp) => kp.name === "left_ear") - const rightEar = pose.keypoints.find((kp) => kp.name === "right_ear") // - if(leftShoulder && rightShoulder && leftEar && rightEar){ - if(!isInit){ - if( - ctx.isPointInPath(guideLine,leftShoulder?.x, leftShoulder?.y) && - ctx.isPointInPath(guideLine,rightShoulder?.x, rightShoulder?.y) && - ctx.isPointInPath(guideLine,leftEar?.x, leftEar?.y) && - ctx.isPointInPath(guideLine,rightEar?.x, rightEar?.y) - ) canInitCallback(true) - else canInitCallback(false) - } - } + // if(leftShoulder && rightShoulder && leftEar && rightEar){ + // if(!isInit){ + // if( + // ctx.isPointInPath(guideLine,leftShoulder?.x, leftShoulder?.y) && + // ctx.isPointInPath(guideLine,rightShoulder?.x, rightShoulder?.y) && + // ctx.isPointInPath(guideLine,leftEar?.x, leftEar?.y) && + // ctx.isPointInPath(guideLine,rightEar?.x, rightEar?.y) + // ) canInitCallback(true) + // else canInitCallback(false) + // } + // } // 왼쪽과 오른쪽 어깨 이어주는 선 그리기 if (leftShoulder && rightShoulder && leftShoulder.confidence > 0.2 && rightShoulder.confidence > 0.2) { From 2f2f810eb6d07610514a7a3619f4c8ae7371d6b6 Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Sat, 3 Aug 2024 16:19:15 +0900 Subject: [PATCH 005/116] =?UTF-8?q?feat:=20=EC=B9=B4=EB=A9=94=EB=9D=BC=20r?= =?UTF-8?q?ate=20=EC=88=98=EC=A0=95,=20=EC=96=B4=EA=B9=A8=20=EA=B8=B0?= =?UTF-8?q?=EC=9A=B8=EA=B8=B0=20=EB=AF=BC=EA=B0=90=EB=8F=84=20=EC=A1=B0?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Camera.tsx | 2 +- src/utils/detector.ts | 30 +++++++++++++++++++++--------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/components/Camera.tsx b/src/components/Camera.tsx index fd6d99f..03f6708 100644 --- a/src/components/Camera.tsx +++ b/src/components/Camera.tsx @@ -13,7 +13,7 @@ const Camera: React.FC = ({ onStreamReady }) => { video: { facingMode: "user", frameRate: { - ideal: 5, + ideal: 60, }, }, }) diff --git a/src/utils/detector.ts b/src/utils/detector.ts index e386e2e..d926958 100644 --- a/src/utils/detector.ts +++ b/src/utils/detector.ts @@ -151,8 +151,10 @@ export const detectSlope = (refer: pose[], comp: pose[], isSnapShotMode: boolean const compLeftShoulder = getXYfromPose(comp, "left_shoulder") const compRightShoulder = getXYfromPose(comp, "right_shoulder") + const SHOULDER_DIFF_THRESHOLD = 60 + if (!isSnapShotMode && compLeftShoulder && compRightShoulder) { - const SHOULDER_DIFF_THRESHOLD = 40 + const shoulderSlope = compLeftShoulder.y - compRightShoulder.y if (Math.abs(shoulderSlope) < SHOULDER_DIFF_THRESHOLD) { @@ -172,14 +174,24 @@ export const detectSlope = (refer: pose[], comp: pose[], isSnapShotMode: boolean if (referSlope === Infinity || compSlope === Infinity) return null // referSlope를 기준으로 10% 오차 미만이면, 정상 자세인 것으로 간주 - const tenPercentOfReferSlope = Math.abs(referSlope) * 0.9 - const slopeDifference = Math.abs(referSlope - compSlope) - - if (slopeDifference <= tenPercentOfReferSlope) { - return "올바른 자세입니다" - } else if (referSlope < compSlope) { - return "왼쪽으로 치우쳐져 있습니다" + // const tenPercentOfReferSlope = Math.abs(referSlope) * 0.9 + // const slopeDifference = Math.abs(referSlope - compSlope) + + // if (shoulderSlope) { + // return "올바른 자세입니다" + // } else if (referSlope < compSlope) { + // return "왼쪽으로 치우쳐져 있습니다" + // } else { + // return "오른쪽으로 치우쳐져 있습니다" + // } + + const shoulderSlope = compLeftShoulder.y - compRightShoulder.y + + if (Math.abs(shoulderSlope) < SHOULDER_DIFF_THRESHOLD) { + return "적절한 자세입니다" + } else if (shoulderSlope > 0) { + return "오른쪽 어깨가 올라갔습니다" } else { - return "오른쪽으로 치우쳐져 있습니다" + return "왼쪽 어깨가 올라갔습니다" } } From d96bec94c9b048b5a0b2d54e6b036a7a7b419214 Mon Sep 17 00:00:00 2001 From: "lkh14011424@gmail.com" Date: Tue, 13 Aug 2024 01:19:37 +0900 Subject: [PATCH 006/116] =?UTF-8?q?[feat#16]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EB=B0=8F?= =?UTF-8?q?=20=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 43 +- src/App.tsx | 14 +- src/components/Camera.tsx | 12 +- src/components/CameraContianer.tsx | 46 +- src/components/ControlPanel.tsx | 21 - src/components/Login.tsx | 17 + src/components/PoseDetector.tsx | 123 +-- src/components/TrackingResult.tsx | 2 +- src/components/index.ts | 4 +- src/constants/routes.json | 5 + src/hooks/usePushNotification.ts | 22 +- src/index.tsx | 2 +- src/layouts/Layout.tsx | 37 + src/layouts/index.ts | 1 + src/pages/AuthPage.tsx | 75 ++ src/pages/MonitoringPage.tsx | 13 + src/pages/index.ts | 2 + src/routes/AuthRoute.tsx | 7 + src/routes/Router.tsx | 23 + src/routes/index.ts | 1 + src/utils/calculator.ts | 187 ++-- src/utils/detector.ts | 27 +- src/utils/drawer.ts | 38 +- src/utils/guideLine.ts | 194 ---- src/utils/index.ts | 1 - src/utils/worker.ts | 1 - tsconfig.json | 5 +- yarn.lock | 1594 +++++++++++++--------------- 28 files changed, 1164 insertions(+), 1353 deletions(-) delete mode 100644 src/components/ControlPanel.tsx create mode 100644 src/components/Login.tsx create mode 100644 src/constants/routes.json create mode 100644 src/layouts/Layout.tsx create mode 100644 src/layouts/index.ts create mode 100644 src/pages/AuthPage.tsx create mode 100644 src/pages/MonitoringPage.tsx create mode 100644 src/pages/index.ts create mode 100644 src/routes/AuthRoute.tsx create mode 100644 src/routes/Router.tsx create mode 100644 src/routes/index.ts delete mode 100644 src/utils/guideLine.ts diff --git a/package.json b/package.json index cb71905..51e2118 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "lint:fix": "eslint \"src/**/*.{js,jsx,ts,tsx}\" --fix" }, "dependencies": { + "axios": "1.7.3", "core-js": "^3.28.0", "p5": "^1.9.4", "react": "^18.2.0", @@ -20,28 +21,30 @@ "react-router-dom": "^6.8.1" }, "devDependencies": { - "@types/node": "^20.14.10", - "@types/react": "^18.0.28", - "@types/react-dom": "^18.0.11", - "@typescript-eslint/eslint-plugin": "^5.54.1", - "@typescript-eslint/parser": "^5.54.1", - "@vitejs/plugin-react": "^4.3.1", - "autoprefixer": "^10.4.19", - "eslint": "^8.57.0", - "eslint-config-prettier": "^8.7.0", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-import": "^2.29.1", + "@types/node": "^20.7.1", + "@types/qs": "^6.9.7", + "@types/react": "^18.0.26", + "@types/react-dom": "^18.0.10", + "@typescript-eslint/eslint-plugin": "^5.59.1", + "@typescript-eslint/parser": "^5.59.1", + "@vitejs/plugin-react": "^4.2.0", + "autoprefixer": "^10.4.14", + "eslint": "^8.43.0", + "eslint-config-prettier": "^8.6.0", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.27.5", "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-react": "^7.32.2", - "eslint-plugin-react-hooks": "^4.6.2", - "prettier": "^3.3.3", - "prettier-plugin-tailwindcss": "^0.6.5", - "react-refresh": "^0.14.2", - "tailwindcss": "^3.4.4", + "eslint-plugin-react": "^7.32.1", + "eslint-plugin-react-hooks": "^4.6.0", + "prettier": "^2.8.8", + "prettier-plugin-tailwindcss": "^0.2.5", + "qs": "^6.11.0", + "react-refresh": "^0.14.0", + "tailwindcss": "^3.3.1", "ts-node": "^10.9.1", - "typescript": "^5.5.3", - "vite": "^5.3.3", + "typescript": "^5.1.6", + "vite": "^4.3.9", "vite-plugin-svgr": "^4.2.0", - "vite-tsconfig-paths": "^4.3.2" + "vite-tsconfig-paths": "^4.2.0" } } diff --git a/src/App.tsx b/src/App.tsx index 3089403..479ab8f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,18 +1,8 @@ // dependencies -import { BrowserRouter, Navigate, Route, Routes } from "react-router-dom" - -// components -import { PoseDetector } from "./components" +import { Router } from "@/routes" const App: React.FC = () => { - return ( - - - } /> - } /> - - - ) + return } export default App diff --git a/src/components/Camera.tsx b/src/components/Camera.tsx index 03f6708..fd0c4d3 100644 --- a/src/components/Camera.tsx +++ b/src/components/Camera.tsx @@ -15,6 +15,8 @@ const Camera: React.FC = ({ onStreamReady }) => { frameRate: { ideal: 60, }, + width: 1280, + height: 720, }, }) .then((stream) => { @@ -36,18 +38,20 @@ const Camera: React.FC = ({ onStreamReady }) => { useEffect(() => { startVideo() - }, []) + }) return ( -
+
diff --git a/src/components/CameraContianer.tsx b/src/components/CameraContianer.tsx index fdca1f1..de9f860 100644 --- a/src/components/CameraContianer.tsx +++ b/src/components/CameraContianer.tsx @@ -1,49 +1,35 @@ import React from "react" import Camera from "./Camera" -import ControlPanel from "./ControlPanel" interface CameraContianerProps { detectStart: (video: HTMLVideoElement) => void canvasRef: React.LegacyRef | undefined isModelLoaded: boolean - onChangeTranslation: React.ChangeEventHandler } -export default function CameraContianer(props: CameraContianerProps) { - const { detectStart, canvasRef, isModelLoaded, onChangeTranslation } = props +export default function CameraContianer(props: CameraContianerProps): React.ReactElement { + const { detectStart, canvasRef } = props return (
-
+ - - -
-
- {isModelLoaded && } -
+ />
) } diff --git a/src/components/ControlPanel.tsx b/src/components/ControlPanel.tsx deleted file mode 100644 index a682761..0000000 --- a/src/components/ControlPanel.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from "react" - -interface ControlPanelProps { - onChangeTranslation: React.ChangeEventHandler -} - -export default function ControlPanel(props: ControlPanelProps) { - const { onChangeTranslation } = props - return ( -
-
-
좌우 이동
- -
상하 이동
- -
크기 변경
- -
-
- ) -} diff --git a/src/components/Login.tsx b/src/components/Login.tsx new file mode 100644 index 0000000..53acaa3 --- /dev/null +++ b/src/components/Login.tsx @@ -0,0 +1,17 @@ +const Login: React.FC = () => { + const REST_API_KEY = "84b401e74d5a879d3fedfa7ba4366c68" + const REDIRECT_URI = "http://localhost:3000/auth" + const link = `https://kauth.kakao.com/oauth/authorize?client_id=${REST_API_KEY}&redirect_uri=${REDIRECT_URI}&response_type=code` + + const loginHandler = (): void => { + window.location.href = link + } + + return ( + + ) +} + +export default Login diff --git a/src/components/PoseDetector.tsx b/src/components/PoseDetector.tsx index 0826c70..8161f1c 100644 --- a/src/components/PoseDetector.tsx +++ b/src/components/PoseDetector.tsx @@ -5,7 +5,6 @@ import { drawPose } from "@/utils/drawer" import { worker } from "@/utils/worker" import { useCallback, useEffect, useRef, useState } from "react" import CameraContianer from "./CameraContianer" -import TrackingResult from "./TrackingResult" const PoseDetector: React.FC = () => { const [isScriptLoaded, setIsScriptLoaded] = useState(false) @@ -13,8 +12,7 @@ const PoseDetector: React.FC = () => { const [slope, setSlope] = useState(null) const [isTextNeck, setIsTextNeck] = useState(null) const [isModelLoaded, setIsModelLoaded] = useState(false) - const [mode, setMode] = useState("snapshot") - const [, setCanInit] = useState(false) + const [mode] = useState("snapshot") const [isSnapSaved, setIsSnapSaved] = useState(false) const modelRef = useRef(null) const snapRef = useRef(null) @@ -23,22 +21,13 @@ const PoseDetector: React.FC = () => { const timer = useRef(null) const canvasRef = useRef(null) - const dx = useRef(0) - const dy = useRef(0) - const scale = useRef(1) - const { requestNotificationPermission, showNotification } = usePushNotification() const requestApi = (delay: number): Promise => new Promise((resolve) => setTimeout(resolve, delay)) - const setup = async (): Promise => { - window.ml5.bodyPose( - "MoveNet", - { - modelType: "SINGLEPOSE_THUNDER", - }, - setupCallback - ) + // webgl설정 + const initializeBackend = async (): Promise => { + await window.ml5.setBackend("webgl") } const setupCallback = async (bodypose: any, error: Error): Promise => { @@ -52,9 +41,19 @@ const PoseDetector: React.FC = () => { worker.postMessage({ type: "init", data: {} }) } + const setup = async (): Promise => { + window.ml5.bodyPose( + "MoveNet", + { + modelType: "SINGLEPOSE_THUNDER", + }, + setupCallback + ) + } + const getScript = (): void => { const script = document.createElement("script") - script.src = "https://unpkg.com/ml5@1/dist/ml5.min.js" + script.src = "https://unpkg.com/ml5@1.0.1/dist/ml5.min.js" script.onload = (): void => { setIsScriptLoaded(true) setup() @@ -65,19 +64,14 @@ const PoseDetector: React.FC = () => { document.body.appendChild(script) } - // webgl설정 - const initializeBackend = async (): Promise => { - await window.ml5.setBackend("webgl") - } - const detect = useCallback( (results: pose[]): void => { resultRef.current = results if (canvasRef.current) { - drawPose(results, canvasRef.current, dx.current, dy.current, scale.current) + drawPose(results, canvasRef.current) } if (snapRef.current) { - const _slope = detectSlope(snapRef.current, results, mode === "snapshot") + const _slope = detectSlope(snapRef.current, results, false) const _isTextNeck = detectTextNeck(snapRef.current, results, mode === "snapshot") if (_slope !== null) setSlope(_slope) if (_isTextNeck !== null) setIsTextNeck(_isTextNeck) @@ -122,6 +116,11 @@ const PoseDetector: React.FC = () => { } } + const getIsRight = (_slope: string | null, _isTextNeck: boolean | null): boolean => { + if (_slope === "적절한 자세입니다" && !_isTextNeck) return true + return false + } + useEffect(() => { requestNotificationPermission() getScript() @@ -136,43 +135,12 @@ const PoseDetector: React.FC = () => { } }, [isModelLoaded, detectStart]) - const initializePoseMonitoring = () => { - setIsTextNeck(null) - setSlope(null) - snapRef.current = null - setIsSnapSaved(false) - setCanInit(false) - } - - const onChangeMode = (e: React.ChangeEvent) => { - if (e.target.value) { - setMode(e.target.value) - initializePoseMonitoring() - } - } - - const onChangeTranslation = (e: React.ChangeEvent) => { - const id = e.target.id - if (e.target.value) { - const value = Number.parseInt(e.target.value) - switch (id) { - case "vertical": - dy.current = value - return - case "horizontal": - dx.current = value - return - case "scale": - scale.current = (value / 100) * 2 - return - default: - } - } - } - - const onCancelAutoPoseMonitoring = () => { - initializePoseMonitoring() - } + // const initializePoseMonitoring = () => { + // setIsTextNeck(null) + // setSlope(null) + // snapRef.current = null + // setIsSnapSaved(false) + // } return ( <> @@ -181,14 +149,33 @@ const PoseDetector: React.FC = () => { ) : !isScriptLoaded ? ( "스크립트 불러오는 중" ) : ( -
- +
+ {isModelLoaded && ( + <> +
+ {!isSnapSaved + ? "바른 자세를 취한 후, 하단의 버튼을 눌러주세요." + : getIsRight(slope, isTextNeck) + ? "올바른 자세입니다." + : "올바르지 않은 자세입니다."} +
+ {!isSnapSaved && ( +
+ + +
+ )} + + )} + {/* {isModelLoaded && (
{
- )} + )} */}
)} diff --git a/src/components/TrackingResult.tsx b/src/components/TrackingResult.tsx index 35812f8..7d3098c 100644 --- a/src/components/TrackingResult.tsx +++ b/src/components/TrackingResult.tsx @@ -3,7 +3,7 @@ interface TrackingResultProps { slope: null | string } -export default function TrackingResult(props: TrackingResultProps) { +export default function TrackingResult(props: TrackingResultProps): React.ReactElement { const { isTextNeck, slope } = props return (
{ const requestNotificationPermission = async (): Promise => { if ("Notification" in window) { try { - const permission = await Notification.requestPermission(); + const permission = await Notification.requestPermission() if (permission === "granted") { - console.log("Notification permission granted"); + console.log("Notification permission granted") } else { - console.log("Notification permission denied"); + console.log("Notification permission denied") } } catch (error) { - console.error("Notification permission request error:", error); + console.error("Notification permission request error:", error) } } else { - console.error("This browser does not support notifications."); + console.error("This browser does not support notifications.") } - }; + } const showNotification = (): void => { if (Notification.permission === "granted") { new Notification("Hello!", { body: "거북목 상태입니다. 자세를 바르게 하세요.", - }); + }) } - }; + } - return { requestNotificationPermission, showNotification }; -}; + return { requestNotificationPermission, showNotification } +} -export default usePushNotification; +export default usePushNotification diff --git a/src/index.tsx b/src/index.tsx index d5fbd99..040d5ba 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,6 +1,6 @@ import React from "react" import ReactDOM from "react-dom/client" -import App from "./App.tsx" +import App from "./App" import "@/style/tailwind.css" ReactDOM.createRoot(document.getElementById("root")!).render( diff --git a/src/layouts/Layout.tsx b/src/layouts/Layout.tsx new file mode 100644 index 0000000..fd00ec9 --- /dev/null +++ b/src/layouts/Layout.tsx @@ -0,0 +1,37 @@ +import React from "react" +import { Outlet } from "react-router-dom" + +const Layout: React.FC = () => { + return ( +
+
+ +
+ +
+
+
+ ) +} + +export default Layout diff --git a/src/layouts/index.ts b/src/layouts/index.ts new file mode 100644 index 0000000..306f58f --- /dev/null +++ b/src/layouts/index.ts @@ -0,0 +1 @@ +export { default as Layout } from "./Layout" diff --git a/src/pages/AuthPage.tsx b/src/pages/AuthPage.tsx new file mode 100644 index 0000000..7291526 --- /dev/null +++ b/src/pages/AuthPage.tsx @@ -0,0 +1,75 @@ +import { useEffect, useState } from "react" +import axios from "axios" +import { useNavigate } from "react-router-dom" +import qs from "qs" + +const REST_API_KEY = "84b401e74d5a879d3fedfa7ba4366c68" +const REDIRECT_URI = "http://localhost:3000/auth" +const KAKAO_CLIENT_SECRET = "KlMbFCPi0ZAP8lMJEO3IDAsSVN5BoA2x" + +const AuthPage: React.FC = () => { + const [accessToken, setAccessToken] = useState("") + + const navigate = useNavigate() + + const getToken = async (): Promise => { + const code = new URL(window.location.href).searchParams.get("code") + + const formData = { + grant_type: "authorization_code", + client_id: REST_API_KEY, + client_secret: KAKAO_CLIENT_SECRET, + redirect_uri: REDIRECT_URI, + code, + } + + const { + data: { access_token }, + } = await axios + .post(`https://kauth.kakao.com/oauth/token?${qs.stringify(formData)}`, null, { + headers: { "Content-type": "application/x-www-form-urlencoded" }, + }) + .then((res) => { + return res + }) + + setAccessToken(access_token) + return access_token + } + + const getServiceToken = async (_accessToken: string): Promise => { + const res = await axios.post("https://api.alignlab.site/api/v1/oauth/kakao/sign-in", { _accessToken }) + + return res + } + + const getIsSignUp = async (_accessToken: string): Promise => { + const res = await axios.get( + `https://api.alignlab.site/api/v1/oauth/kakao/sign-up/check?accessToken=${_accessToken}` + ) + + return res.data.isExistsUser + } + + useEffect(() => { + getToken() + .then((res) => { + if (res) { + // localStorage.setItem("token", JSON.stringify(res.data.access_token)) + navigate("/") + } + }) + .catch((err) => console.log(err)) + }, []) + + useEffect(() => { + if (accessToken) { + getIsSignUp(accessToken) + getServiceToken(accessToken) + } + }, [accessToken]) + + return
auth page
+} + +export default AuthPage diff --git a/src/pages/MonitoringPage.tsx b/src/pages/MonitoringPage.tsx new file mode 100644 index 0000000..131e4a5 --- /dev/null +++ b/src/pages/MonitoringPage.tsx @@ -0,0 +1,13 @@ +import { PoseDetector } from "@/components" + +const MonitoringPage: React.FC = () => { + return ( +
+
+ +
+
+ ) +} + +export default MonitoringPage diff --git a/src/pages/index.ts b/src/pages/index.ts new file mode 100644 index 0000000..4cfe834 --- /dev/null +++ b/src/pages/index.ts @@ -0,0 +1,2 @@ +export { default as AuthPage } from "./AuthPage" +export { default as MonitoringPage } from "./MonitoringPage" diff --git a/src/routes/AuthRoute.tsx b/src/routes/AuthRoute.tsx new file mode 100644 index 0000000..a28d097 --- /dev/null +++ b/src/routes/AuthRoute.tsx @@ -0,0 +1,7 @@ +import React from "react" + +const AuthRoute = (): React.ReactElement => { + return <> +} + +export default AuthRoute diff --git a/src/routes/Router.tsx b/src/routes/Router.tsx new file mode 100644 index 0000000..3f1a501 --- /dev/null +++ b/src/routes/Router.tsx @@ -0,0 +1,23 @@ +import React from "react" +import { BrowserRouter, Route, Routes, Navigate } from "react-router-dom" +import { AuthPage, MonitoringPage } from "@/pages" +import { Layout } from "@/layouts" +import routes from "@/constants/routes.json" + +const Router: React.FC = () => { + return ( + <> + + + } /> + }> + }> + } /> + + + + + ) +} + +export default Router diff --git a/src/routes/index.ts b/src/routes/index.ts new file mode 100644 index 0000000..66a25ec --- /dev/null +++ b/src/routes/index.ts @@ -0,0 +1 @@ +export { default as Router } from "./Router" diff --git a/src/utils/calculator.ts b/src/utils/calculator.ts index 807fb84..17733e8 100644 --- a/src/utils/calculator.ts +++ b/src/utils/calculator.ts @@ -1,6 +1,6 @@ export interface point { - x: number; - y: number; + x: number + y: number } /** * 두 점을 잇는 직선과 주어진 점 사이의 거리를 계산 @@ -17,21 +17,16 @@ export interface point { * const distance = getDistanceFromLine(point1, point2, point3); * console.log(distance); // 출력: 0 */ -export const getDistanceFromLine = ( - l1: point, - l2: point, - to: point -): number => { - const a = l2.y - l1.y; - const b = l1.x - l2.x; - const c = l2.x * l1.y - l1.x * l2.y; +export const getDistanceFromLine = (l1: point, l2: point, to: point): number => { + const a = l2.y - l1.y + const b = l1.x - l2.x + const c = l2.x * l1.y - l1.x * l2.y // 세 번째 점 C와 직선 사이의 거리를 구합니다. - const distance = - Math.abs(a * to.x + b * to.y + c) / Math.sqrt(a ** 2 + b ** 2); + const distance = Math.abs(a * to.x + b * to.y + c) / Math.sqrt(a ** 2 + b ** 2) - return distance; -}; + return distance +} /** * 3점 이상의 좌표들을 입력받아 다각형의 면적을 계산 @@ -49,20 +44,20 @@ export const getDistanceFromLine = ( * console.log(area); // 출력: 6 */ export const getAreaFromPoints = (points: point[]): number | null => { - const n = points.length; + const n = points.length - if (n <= 2) return null; + if (n <= 2) return null - let area = 0; + let area = 0 for (let i = 0; i < n; i++) { - const { x: x1, y: y1 } = points[i]; - const { x: x2, y: y2 } = points[(i + 1) % n]; - area += x1 * y2 - x2 * y1; + const { x: x1, y: y1 } = points[i] + const { x: x2, y: y2 } = points[(i + 1) % n] + area += x1 * y2 - x2 * y1 } - return Math.abs(area / 2); -}; + return Math.abs(area / 2) +} /** * 두 점을 잇는 직선의 기울기를 구하는 함수 @@ -84,11 +79,11 @@ export const getAreaFromPoints = (points: point[]): number | null => { export const getSlopeFromPoints = (p1: point, p2: point): number => { if (p1.x === p2.x) { // 수직선의 경우, 기울기를 무한대로 설정 - return Infinity; + return Infinity } - return (p2.y - p1.y) / (p2.x - p1.x); -}; + return (p2.y - p1.y) / (p2.x - p1.x) +} /** * 두 점 사이의 유클리드 거리를 계산 @@ -104,8 +99,8 @@ export const getSlopeFromPoints = (p1: point, p2: point): number => { * console.log(distance); // 출력: 5 */ export const getDistance = (p1: point, p2: point): number => { - return Math.sqrt((p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2); -}; + return Math.sqrt((p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2) +} /** * 두 점의 중간 지점을 계산 @@ -121,75 +116,75 @@ export const getDistance = (p1: point, p2: point): number => { * console.log(distance); // 출력: {x : 2, y : 4} */ export const getMidPoint = (p1: point, p2: point): point => { - const x = (p1.x + p2.x) * 0.5; - const y = (p1.y + p2.y) * 0.5; + const x = (p1.x + p2.x) * 0.5 + const y = (p1.y + p2.y) * 0.5 - return { x, y }; -}; - -/** - * x=axisX를 기준으로 point를 대칭 이동 시킴 - * - * @param {point} point - * @param {number} axisX - * - */ -export const getSymmetricPointFromX = (point : point, axisX : number) => { - return { - x: axisX + (axisX - point.x), - y: point.y - }; -} - -/** - * y=axisY를 기준으로 point를 대칭 이동 시킴 - * - * @param {point} point - * @param {number} axisY - * - */ -export const getSymmetricPointFromY = (point : point, axisY : number) => { - return { - x: point.x, - y: axisY + (axisY -point.y) - }; + return { x, y } } -/** - * dx, dy 만큼 point를 이동 시킴 - * - * @param {point} point - * @param {number} dx - * @param {number} dy - * - */ -export const getTranslatedPoint = (point : point, dx : number, dy : number) => { - return { - x: point.x + dx, - y: point.y + dy - } -} - -/** - * cx, cy를 기준으로 scaleFactor 만큼 point의 스케일을 변경 - * - * @param {point} point - * @param {number} cx - * @param {number} cy - * @param {number} scaleFactor - * - */ -export const getScaledPoint = (point : point, cx : number, cy : number, scaleFactor : number) => { - const x = point.x - const y = point.y - - // 기준점으로부터의 상대적인 거리 계산 - const dx = x - cx - const dy = y - cy - - // 스케일 팩터를 적용한 새로운 거리 계산 - const scaledX = cx + dx * scaleFactor - const scaledY = cy + dy * scaleFactor - - return { x: scaledX, y: scaledY } -} \ No newline at end of file +// /** +// * x=axisX를 기준으로 point를 대칭 이동 시킴 +// * +// * @param {point} point +// * @param {number} axisX +// * +// */ +// export const getSymmetricPointFromX = (point: point, axisX: number) : point => { +// return { +// x: axisX + (axisX - point.x), +// y: point.y, +// } +// } + +// /** +// * y=axisY를 기준으로 point를 대칭 이동 시킴 +// * +// * @param {point} point +// * @param {number} axisY +// * +// */ +// export const getSymmetricPointFromY = (point: point, axisY: number) : point => { +// return { +// x: point.x, +// y: axisY + (axisY - point.y), +// } +// } + +// /** +// * dx, dy 만큼 point를 이동 시킴 +// * +// * @param {point} point +// * @param {number} dx +// * @param {number} dy +// * +// */ +// export const getTranslatedPoint = (point: point, dx: number, dy: number) : point => { +// return { +// x: point.x + dx, +// y: point.y + dy, +// } +// } + +// /** +// * cx, cy를 기준으로 scaleFactor 만큼 point의 스케일을 변경 +// * +// * @param {point} point +// * @param {number} cx +// * @param {number} cy +// * @param {number} scaleFactor +// * +// */ +// export const getScaledPoint = (point: point, cx: number, cy: number, scaleFactor: number) => { +// const x = point.x +// const y = point.y + +// // 기준점으로부터의 상대적인 거리 계산 +// const dx = x - cx +// const dy = y - cy + +// // 스케일 팩터를 적용한 새로운 거리 계산 +// const scaledX = cx + dx * scaleFactor +// const scaledY = cy + dy * scaleFactor + +// return { x: scaledX, y: scaledY } +// } diff --git a/src/utils/detector.ts b/src/utils/detector.ts index d926958..12a67b4 100644 --- a/src/utils/detector.ts +++ b/src/utils/detector.ts @@ -72,7 +72,7 @@ export const getXYfromPose = (poses: pose[], name: string): point | null => { * @param isSnapShotMode 스냅샷 촬영후, 해당 기준으로 자세를 측정할 지 아니면 자동으로 측정할 지 * @returns 거북목 상태라고 판단되면 true, 판단되지 않으면 false, 비교할 수 없는 경우 null을 반환 */ -export const detectTextNeck = (refer: pose[], comp: pose[], isSnapShotMode: boolean = true): boolean | null => { +export const detectTextNeck = (refer: pose[], comp: pose[], isSnapShotMode = true): boolean | null => { if (!comp) return null const referLeftEar = getXYfromPose(refer, "left_ear") @@ -143,7 +143,7 @@ export const detectTextNeck = (refer: pose[], comp: pose[], isSnapShotMode: bool * @returns 기울기가 왼쪽으로 치우쳤으면 "left", 오른쪽으로 치우쳤으면 "right"를 반환하며, * 기울기를 계산할 수 없는 경우 null을 반환 */ -export const detectSlope = (refer: pose[], comp: pose[], isSnapShotMode: boolean = true): string | null => { +export const detectSlope = (refer: pose[], comp: pose[], isSnapShotMode = true): string | null => { if (!comp) return null const referLeftSoulder = getXYfromPose(refer, "left_shoulder") @@ -154,7 +154,6 @@ export const detectSlope = (refer: pose[], comp: pose[], isSnapShotMode: boolean const SHOULDER_DIFF_THRESHOLD = 60 if (!isSnapShotMode && compLeftShoulder && compRightShoulder) { - const shoulderSlope = compLeftShoulder.y - compRightShoulder.y if (Math.abs(shoulderSlope) < SHOULDER_DIFF_THRESHOLD) { @@ -174,24 +173,14 @@ export const detectSlope = (refer: pose[], comp: pose[], isSnapShotMode: boolean if (referSlope === Infinity || compSlope === Infinity) return null // referSlope를 기준으로 10% 오차 미만이면, 정상 자세인 것으로 간주 - // const tenPercentOfReferSlope = Math.abs(referSlope) * 0.9 - // const slopeDifference = Math.abs(referSlope - compSlope) - - // if (shoulderSlope) { - // return "올바른 자세입니다" - // } else if (referSlope < compSlope) { - // return "왼쪽으로 치우쳐져 있습니다" - // } else { - // return "오른쪽으로 치우쳐져 있습니다" - // } - - const shoulderSlope = compLeftShoulder.y - compRightShoulder.y + const tenPercentOfReferSlope = Math.abs(referSlope) * 0.9 + const slopeDifference = Math.abs(referSlope - compSlope) - if (Math.abs(shoulderSlope) < SHOULDER_DIFF_THRESHOLD) { + if (slopeDifference <= tenPercentOfReferSlope) { return "적절한 자세입니다" - } else if (shoulderSlope > 0) { - return "오른쪽 어깨가 올라갔습니다" + } else if (referSlope < compSlope) { + return "왼쪽으로 치우쳐져 있습니다" } else { - return "왼쪽 어깨가 올라갔습니다" + return "오른쪽으로 치우쳐져 있습니다" } } diff --git a/src/utils/drawer.ts b/src/utils/drawer.ts index eb84c76..fca7bf4 100644 --- a/src/utils/drawer.ts +++ b/src/utils/drawer.ts @@ -1,49 +1,15 @@ import type { pose } from "@/utils/detector" -import { getSymmetricPointFromY, getTranslatedPoint, getScaledPoint } from "./calculator"; -import { guideLinePoints } from "./guideLine"; - -export const drawPose = (poses: pose[], canvas: HTMLCanvasElement, dx : number = 0, dy : number = 0, scale : number = 1) : void => { +export const drawPose = (poses: pose[], canvas: HTMLCanvasElement): void => { const ctx = canvas.getContext("2d") if (ctx) { ctx.clearRect(0, 0, canvas.width, canvas.height) - // const guideLine = new Path2D() - const origin = {x : canvas.width / 2, y : canvas.height} - - // canavs 좌표계 기준으로 가이드 라인 정렬 (가이드 라인의 기준은 (canvas.width / 2, canvas.height)) - let _guideLinePoints = guideLinePoints.map(point => getSymmetricPointFromY(point,canvas.height / 2.)) - if(dx!==0 || dy!==0) _guideLinePoints = _guideLinePoints.map(point => getTranslatedPoint(point,dx,dy)) - if(scale!==1) _guideLinePoints = _guideLinePoints.map(point=>getScaledPoint(point, origin.x, origin.y, scale)) - // guideLine.moveTo(_guideLinePoints[0].x, _guideLinePoints[0].y) - // for (let i = 1; i < _guideLinePoints.length; i++) { - // guideLine.lineTo(_guideLinePoints[i].x, _guideLinePoints[i].y) - // } - // guideLine.closePath() - // ctx.strokeStyle = 'blue' - // ctx.fillStyle = 'rgba(0, 0, 255, 0.3)'; - // ctx.stroke(guideLine) - // ctx.fill(guideLine) - poses.forEach((pose) => { - const leftShoulder = pose.keypoints.find((kp) => kp.name === "left_shoulder") const rightShoulder = pose.keypoints.find((kp) => kp.name === "right_shoulder") - // - // if(leftShoulder && rightShoulder && leftEar && rightEar){ - // if(!isInit){ - // if( - // ctx.isPointInPath(guideLine,leftShoulder?.x, leftShoulder?.y) && - // ctx.isPointInPath(guideLine,rightShoulder?.x, rightShoulder?.y) && - // ctx.isPointInPath(guideLine,leftEar?.x, leftEar?.y) && - // ctx.isPointInPath(guideLine,rightEar?.x, rightEar?.y) - // ) canInitCallback(true) - // else canInitCallback(false) - // } - // } - // 왼쪽과 오른쪽 어깨 이어주는 선 그리기 if (leftShoulder && rightShoulder && leftShoulder.confidence > 0.2 && rightShoulder.confidence > 0.2) { ctx.beginPath() @@ -64,4 +30,4 @@ export const drawPose = (poses: pose[], canvas: HTMLCanvasElement, dx : number = }) }) } -} \ No newline at end of file +} diff --git a/src/utils/guideLine.ts b/src/utils/guideLine.ts deleted file mode 100644 index 7277ccb..0000000 --- a/src/utils/guideLine.ts +++ /dev/null @@ -1,194 +0,0 @@ -export const guideLinePoints = [ - { - "x": 187, - "y": 0 - }, - { - "x": 185, - "y": 23 - }, - { - "x": 187, - "y": 43 - }, - { - "x": 192, - "y": 60 - }, - { - "x": 200, - "y": 73 - }, - { - "x": 211, - "y": 81 - }, - { - "x": 230, - "y": 87 - }, - { - "x": 245, - "y": 96 - }, - { - "x": 262, - "y": 102 - }, - { - "x": 276, - "y": 110 - }, - { - "x": 286, - "y": 117 - }, - { - "x": 286, - "y": 132 - }, - { - "x": 286, - "y": 144 - }, - { - "x": 274, - "y": 155 - }, - { - "x": 267, - "y": 173 - }, - { - "x": 262, - "y": 188 - }, - { - "x": 265, - "y": 193 - }, - { - "x": 268, - "y": 208 - }, - { - "x": 269, - "y": 225 - }, - { - "x": 274, - "y": 238 - }, - { - "x": 280, - "y": 246 - }, - { - "x": 290, - "y": 253 - }, - { - "x": 301, - "y": 259 - }, - { - "x": 315, - "y": 260 - }, - { - "x": 325, - "y": 260 - }, - { - "x": 339, - "y": 259 - }, - { - "x": 350, - "y": 253 - }, - { - "x": 360, - "y": 246 - }, - { - "x": 366, - "y": 238 - }, - { - "x": 371, - "y": 225 - }, - { - "x": 372, - "y": 208 - }, - { - "x": 375, - "y": 193 - }, - { - "x": 378, - "y": 188 - }, - { - "x": 373, - "y": 173 - }, - { - "x": 366, - "y": 155 - }, - { - "x": 354, - "y": 144 - }, - { - "x": 354, - "y": 132 - }, - { - "x": 354, - "y": 117 - }, - { - "x": 364, - "y": 110 - }, - { - "x": 378, - "y": 102 - }, - { - "x": 395, - "y": 96 - }, - { - "x": 410, - "y": 87 - }, - { - "x": 429, - "y": 81 - }, - { - "x": 440, - "y": 73 - }, - { - "x": 448, - "y": 60 - }, - { - "x": 453, - "y": 43 - }, - { - "x": 455, - "y": 23 - }, - { - "x": 453, - "y": 0 - } -] \ No newline at end of file diff --git a/src/utils/index.ts b/src/utils/index.ts index 1964d1c..dd86d45 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -2,4 +2,3 @@ export * from "./calculator" export * from "./detector" export * from "./drawer" export * from "./worker" -export * from "./guideLine" \ No newline at end of file diff --git a/src/utils/worker.ts b/src/utils/worker.ts index 0d7b49d..022778a 100644 --- a/src/utils/worker.ts +++ b/src/utils/worker.ts @@ -1,2 +1 @@ export const worker = new Worker(new URL("../workers/worker.ts?worker", import.meta.url)) - diff --git a/tsconfig.json b/tsconfig.json index 2829cc7..63053fa 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -24,7 +24,10 @@ "baseUrl": ".", "paths": { "@/*": ["src/*"], - "@components/*": ["src/components/*"] + "@components/*": ["src/components/*"], + "@constants/*" : ["src/constants/*"], + "@pages/*" : ["src/pages/*"], + "@layouts/*" : ["src/layouts/*"] } }, "include": ["src", "svg.d.ts"], diff --git a/yarn.lock b/yarn.lock index b410f13..98de76e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,12 +4,12 @@ "@alloc/quick-lru@^5.2.0": version "5.2.0" - resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" + resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz" integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== "@ampproject/remapping@^2.2.0": version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz" integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: "@jridgewell/gen-mapping" "^0.3.5" @@ -17,146 +17,116 @@ "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.24.7": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz" integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== dependencies: "@babel/highlight" "^7.24.7" picocolors "^1.0.0" -"@babel/compat-data@^7.24.8": - version "7.24.9" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.9.tgz#53eee4e68f1c1d0282aa0eb05ddb02d033fc43a0" - integrity sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng== +"@babel/compat-data@^7.25.2": + version "7.25.2" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz" + integrity sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ== "@babel/core@^7.21.3", "@babel/core@^7.24.5": - version "7.24.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.9.tgz#dc07c9d307162c97fa9484ea997ade65841c7c82" - integrity sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg== + version "7.25.2" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz" + integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.24.9" - "@babel/helper-compilation-targets" "^7.24.8" - "@babel/helper-module-transforms" "^7.24.9" - "@babel/helpers" "^7.24.8" - "@babel/parser" "^7.24.8" - "@babel/template" "^7.24.7" - "@babel/traverse" "^7.24.8" - "@babel/types" "^7.24.9" + "@babel/generator" "^7.25.0" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-module-transforms" "^7.25.2" + "@babel/helpers" "^7.25.0" + "@babel/parser" "^7.25.0" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.2" + "@babel/types" "^7.25.2" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.24.8", "@babel/generator@^7.24.9": - version "7.24.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.9.tgz#5c2575a1070e661bbbc9df82a853989c9a656f12" - integrity sha512-G8v3jRg+z8IwY1jHFxvCNhOPYPterE4XljNgdGTYfSTtzzwjIswIzIaSPSLs3R7yFuqnqNeay5rjICfqVr+/6A== +"@babel/generator@^7.25.0": + version "7.25.0" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz" + integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== dependencies: - "@babel/types" "^7.24.9" + "@babel/types" "^7.25.0" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz#b607c3161cd9d1744977d4f97139572fe778c271" - integrity sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw== +"@babel/helper-compilation-targets@^7.25.2": + version "7.25.2" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz" + integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== dependencies: - "@babel/compat-data" "^7.24.8" + "@babel/compat-data" "^7.25.2" "@babel/helper-validator-option" "^7.24.8" browserslist "^4.23.1" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-environment-visitor@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" - integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-function-name@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" - integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== - dependencies: - "@babel/template" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-hoist-variables@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" - integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== - dependencies: - "@babel/types" "^7.24.7" - "@babel/helper-module-imports@^7.24.7": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz" integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== dependencies: "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-module-transforms@^7.24.9": - version "7.24.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz#e13d26306b89eea569180868e652e7f514de9d29" - integrity sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw== +"@babel/helper-module-transforms@^7.25.2": + version "7.25.2" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz" + integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== dependencies: - "@babel/helper-environment-visitor" "^7.24.7" "@babel/helper-module-imports" "^7.24.7" "@babel/helper-simple-access" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" "@babel/helper-validator-identifier" "^7.24.7" + "@babel/traverse" "^7.25.2" "@babel/helper-plugin-utils@^7.24.7": version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz" integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== "@babel/helper-simple-access@^7.24.7": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz" integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== dependencies: "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-split-export-declaration@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" - integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== - dependencies: - "@babel/types" "^7.24.7" - "@babel/helper-string-parser@^7.24.8": version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz" integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== "@babel/helper-validator-identifier@^7.24.7": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz" integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== "@babel/helper-validator-option@^7.24.8": version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz" integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== -"@babel/helpers@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.8.tgz#2820d64d5d6686cca8789dd15b074cd862795873" - integrity sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ== +"@babel/helpers@^7.25.0": + version "7.25.0" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz" + integrity sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw== dependencies: - "@babel/template" "^7.24.7" - "@babel/types" "^7.24.8" + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.0" "@babel/highlight@^7.24.7": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz" integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== dependencies: "@babel/helper-validator-identifier" "^7.24.7" @@ -164,54 +134,53 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.24.7", "@babel/parser@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.8.tgz#58a4dbbcad7eb1d48930524a3fd93d93e9084c6f" - integrity sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w== +"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.25.0", "@babel/parser@^7.25.3": + version "7.25.3" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz" + integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== + dependencies: + "@babel/types" "^7.25.2" "@babel/plugin-transform-react-jsx-self@^7.24.5": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz#66bff0248ea0b549972e733516ffad577477bdab" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz" integrity sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw== dependencies: "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-react-jsx-source@^7.24.1": version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz#1198aab2548ad19582013815c938d3ebd8291ee3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz" integrity sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ== dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/template@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315" - integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig== +"@babel/template@^7.25.0": + version "7.25.0" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz" + integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== dependencies: "@babel/code-frame" "^7.24.7" - "@babel/parser" "^7.24.7" - "@babel/types" "^7.24.7" + "@babel/parser" "^7.25.0" + "@babel/types" "^7.25.0" -"@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.8.tgz#6c14ed5232b7549df3371d820fbd9abfcd7dfab7" - integrity sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ== +"@babel/traverse@^7.24.7", "@babel/traverse@^7.25.2": + version "7.25.3" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz" + integrity sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ== dependencies: "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.24.8" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-hoist-variables" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" - "@babel/parser" "^7.24.8" - "@babel/types" "^7.24.8" + "@babel/generator" "^7.25.0" + "@babel/parser" "^7.25.3" + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.2" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.24.9": - version "7.24.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.9.tgz#228ce953d7b0d16646e755acf204f4cf3d08cc73" - integrity sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.2": + version "7.25.2" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz" + integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== dependencies: "@babel/helper-string-parser" "^7.24.8" "@babel/helper-validator-identifier" "^7.24.7" @@ -219,125 +188,120 @@ "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@esbuild/aix-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" - integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== - -"@esbuild/android-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" - integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== - -"@esbuild/android-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" - integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== - -"@esbuild/android-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" - integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== - -"@esbuild/darwin-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" - integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== - -"@esbuild/darwin-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" - integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== - -"@esbuild/freebsd-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" - integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== - -"@esbuild/freebsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" - integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== - -"@esbuild/linux-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" - integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== - -"@esbuild/linux-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" - integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== - -"@esbuild/linux-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" - integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== - -"@esbuild/linux-loong64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" - integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== - -"@esbuild/linux-mips64el@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" - integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== - -"@esbuild/linux-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" - integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== - -"@esbuild/linux-riscv64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" - integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== - -"@esbuild/linux-s390x@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" - integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== - -"@esbuild/linux-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" - integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== - -"@esbuild/netbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" - integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== - -"@esbuild/openbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" - integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== - -"@esbuild/sunos-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" - integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== - -"@esbuild/win32-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" - integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== - -"@esbuild/win32-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" - integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== - -"@esbuild/win32-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" - integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== +"@esbuild/android-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" + integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== + +"@esbuild/android-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" + integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== + +"@esbuild/android-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" + integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== + +"@esbuild/darwin-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" + integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== + +"@esbuild/darwin-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" + integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== + +"@esbuild/freebsd-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" + integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== + +"@esbuild/freebsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" + integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== + +"@esbuild/linux-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" + integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== + +"@esbuild/linux-arm@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" + integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== + +"@esbuild/linux-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" + integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== + +"@esbuild/linux-loong64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" + integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== + +"@esbuild/linux-mips64el@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" + integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== + +"@esbuild/linux-ppc64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" + integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== + +"@esbuild/linux-riscv64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" + integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== + +"@esbuild/linux-s390x@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" + integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== + +"@esbuild/linux-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" + integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== + +"@esbuild/netbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" + integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== + +"@esbuild/openbsd-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" + integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== + +"@esbuild/sunos-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" + integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== + +"@esbuild/win32-arm64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" + integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== + +"@esbuild/win32-ia32@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" + integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== + +"@esbuild/win32-x64@0.18.20": + version "0.18.20" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" + integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" @@ -382,7 +346,7 @@ "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^2.0.2": @@ -392,7 +356,7 @@ "@isaacs/cliui@^8.0.2": version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" @@ -404,7 +368,7 @@ "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: "@jridgewell/set-array" "^1.2.1" @@ -413,22 +377,22 @@ "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/set-array@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" @@ -436,7 +400,7 @@ "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" @@ -444,7 +408,7 @@ "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -452,12 +416,12 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -465,146 +429,66 @@ "@pkgjs/parseargs@^0.11.0": version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@remix-run/router@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.17.1.tgz#bf93997beb81863fde042ebd05013a2618471362" - integrity sha512-mCOMec4BKd6BRGBZeSnGiIgwsbLGp3yhVqAD8H+PxiRNEHgDpZb8J1TnrSDlg97t0ySKMQJTHCWBCmBpSmkF6Q== +"@remix-run/router@1.19.0": + version "1.19.0" + resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.19.0.tgz" + integrity sha512-zDICCLKEwbVYTS6TjYaWtHXxkdoUvD/QXvyVZjGCsWz5vyH7aFeONlPffPdW+Y/t6KT0MgXb2Mfjun9YpWN1dA== "@rollup/pluginutils@^5.0.5": version "5.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz" integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== dependencies: "@types/estree" "^1.0.0" estree-walker "^2.0.2" picomatch "^2.3.1" -"@rollup/rollup-android-arm-eabi@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz#f0da481244b7d9ea15296b35f7fe39cd81157396" - integrity sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA== - -"@rollup/rollup-android-arm64@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.1.tgz#82ab3c575f4235fb647abea5e08eec6cf325964e" - integrity sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg== - -"@rollup/rollup-darwin-arm64@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.1.tgz#6a530452e68a9152809ce58de1f89597632a085b" - integrity sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ== - -"@rollup/rollup-darwin-x64@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.1.tgz#47727479f5ca292cf434d7e75af2725b724ecbc7" - integrity sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA== - -"@rollup/rollup-linux-arm-gnueabihf@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.1.tgz#46193c498aa7902a8db89ac00128060320e84fef" - integrity sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g== - -"@rollup/rollup-linux-arm-musleabihf@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.1.tgz#22d831fe239643c1d05c98906420325cee439d85" - integrity sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ== - -"@rollup/rollup-linux-arm64-gnu@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.1.tgz#19abd33695ec9d588b4a858d122631433084e4a3" - integrity sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ== - -"@rollup/rollup-linux-arm64-musl@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.1.tgz#d60af8c0b9be424424ff96a0ba19fce65d26f6ab" - integrity sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ== - -"@rollup/rollup-linux-powerpc64le-gnu@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.1.tgz#b1194e5ed6d138fdde0842d126fccde74a90f457" - integrity sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ== - -"@rollup/rollup-linux-riscv64-gnu@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.1.tgz#f5a635c017b9bff8b856b0221fbd5c0e3373b7ec" - integrity sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg== - -"@rollup/rollup-linux-s390x-gnu@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.1.tgz#f1043d9f4026bf6995863cb3f8dd4732606e4baa" - integrity sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg== - -"@rollup/rollup-linux-x64-gnu@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.1.tgz#1e781730be445119f06c9df5f185e193bc82c610" - integrity sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g== - -"@rollup/rollup-linux-x64-musl@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.1.tgz#08f12e1965d6f27d6898ff932592121cca6abc4b" - integrity sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ== - -"@rollup/rollup-win32-arm64-msvc@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.1.tgz#4a5dcbbe7af7d41cac92b09798e7c1831da1f599" - integrity sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g== - -"@rollup/rollup-win32-ia32-msvc@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.1.tgz#075b0713de627843a73b4cf0e087c56b53e9d780" - integrity sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg== - -"@rollup/rollup-win32-x64-msvc@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz#0cb240c147c0dfd0e3eaff4cc060a772d39e155c" - integrity sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw== - "@svgr/babel-plugin-add-jsx-attribute@8.0.0": version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz" integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== "@svgr/babel-plugin-remove-jsx-attribute@8.0.0": version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz" integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== "@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz" integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== "@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz" integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== "@svgr/babel-plugin-svg-dynamic-title@8.0.0": version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz" integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== "@svgr/babel-plugin-svg-em-dimensions@8.0.0": version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz" integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== "@svgr/babel-plugin-transform-react-native-svg@8.1.0": version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz" integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== "@svgr/babel-plugin-transform-svg-component@8.0.0": version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e" + resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz" integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== "@svgr/babel-preset@8.1.0": version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece" + resolved "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz" integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== dependencies: "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" @@ -618,7 +502,7 @@ "@svgr/core@^8.1.0": version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88" + resolved "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz" integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== dependencies: "@babel/core" "^7.21.3" @@ -629,7 +513,7 @@ "@svgr/hast-util-to-babel-ast@8.0.0": version "8.0.0" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4" + resolved "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz" integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== dependencies: "@babel/types" "^7.21.3" @@ -637,7 +521,7 @@ "@svgr/plugin-jsx@^8.1.0": version "8.1.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928" + resolved "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz" integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== dependencies: "@babel/core" "^7.21.3" @@ -647,27 +531,27 @@ "@tsconfig/node10@^1.0.7": version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz" integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@types/babel__core@^7.20.5": version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz" integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: "@babel/parser" "^7.20.7" @@ -678,14 +562,14 @@ "@types/babel__generator@*": version "7.6.8" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz" integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": version "7.4.4" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz" integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" @@ -693,14 +577,14 @@ "@types/babel__traverse@*": version "7.20.6" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz" integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== dependencies: "@babel/types" "^7.20.7" -"@types/estree@1.0.5", "@types/estree@^1.0.0": +"@types/estree@^1.0.0": version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/json-schema@^7.0.9": @@ -710,29 +594,34 @@ "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/node@^20.14.10": - version "20.14.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.10.tgz#a1a218290f1b6428682e3af044785e5874db469a" - integrity sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ== +"@types/node@^20.7.1": + version "20.14.15" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.15.tgz#e59477ab7bc7db1f80c85540bfd192a0becc588b" + integrity sha512-Fz1xDMCF/B00/tYSVMlmK7hVeLh7jE5f3B7X1/hmV0MJBwE27KlS7EvD/Yp+z1lm8mVhwV5w+n8jOZG8AfTlKw== dependencies: undici-types "~5.26.4" "@types/prop-types@*": version "15.7.12" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz" integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== -"@types/react-dom@^18.0.11": +"@types/qs@^6.9.7": + version "6.9.15" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce" + integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== + +"@types/react-dom@^18.0.10": version "18.3.0" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.0.tgz#0cbc818755d87066ab6ca74fbedb2547d74a82b0" integrity sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg== dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^18.0.28": +"@types/react@*", "@types/react@^18.0.26": version "18.3.3" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== @@ -745,7 +634,7 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== -"@typescript-eslint/eslint-plugin@^5.54.1": +"@typescript-eslint/eslint-plugin@^5.59.1": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== @@ -761,7 +650,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.54.1": +"@typescript-eslint/parser@^5.59.1": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== @@ -773,7 +662,7 @@ "@typescript-eslint/scope-manager@5.62.0": version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz" integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== dependencies: "@typescript-eslint/types" "5.62.0" @@ -791,12 +680,12 @@ "@typescript-eslint/types@5.62.0": version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz" integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== dependencies: "@typescript-eslint/types" "5.62.0" @@ -823,7 +712,7 @@ "@typescript-eslint/visitor-keys@5.62.0": version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz" integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== dependencies: "@typescript-eslint/types" "5.62.0" @@ -834,7 +723,7 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@vitejs/plugin-react@^4.3.1": +"@vitejs/plugin-react@^4.2.0": version "4.3.1" resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz#d0be6594051ded8957df555ff07a991fb618b48e" integrity sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg== @@ -847,12 +736,12 @@ acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.1.1: version "8.3.3" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz" integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw== dependencies: acorn "^8.11.0" @@ -864,7 +753,7 @@ acorn@^8.11.0, acorn@^8.4.1, acorn@^8.9.0: ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -874,41 +763,41 @@ ajv@^6.12.4: ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^6.1.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== any-promise@^1.0.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -916,22 +805,22 @@ anymatch@~3.1.2: arg@^4.1.0: version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== arg@^5.0.2: version "5.0.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-buffer-byte-length@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz" integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== dependencies: call-bind "^1.0.5" @@ -939,7 +828,7 @@ array-buffer-byte-length@^1.0.1: array-includes@^3.1.6, array-includes@^3.1.7, array-includes@^3.1.8: version "3.1.8" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz" integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== dependencies: call-bind "^1.0.7" @@ -951,12 +840,12 @@ array-includes@^3.1.6, array-includes@^3.1.7, array-includes@^3.1.8: array-union@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array.prototype.findlast@^1.2.5: version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + resolved "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz" integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== dependencies: call-bind "^1.0.7" @@ -968,7 +857,7 @@ array.prototype.findlast@^1.2.5: array.prototype.findlastindex@^1.2.3: version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" + resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz" integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== dependencies: call-bind "^1.0.7" @@ -980,7 +869,7 @@ array.prototype.findlastindex@^1.2.3: array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz" integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== dependencies: call-bind "^1.0.2" @@ -990,7 +879,7 @@ array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: array.prototype.flatmap@^1.3.2: version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz" integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== dependencies: call-bind "^1.0.2" @@ -998,19 +887,9 @@ array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.toreversed@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" - integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - array.prototype.tosorted@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz" integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== dependencies: call-bind "^1.0.7" @@ -1021,7 +900,7 @@ array.prototype.tosorted@^1.1.4: arraybuffer.prototype.slice@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz" integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== dependencies: array-buffer-byte-length "^1.0.1" @@ -1033,38 +912,52 @@ arraybuffer.prototype.slice@^1.0.3: is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" -autoprefixer@^10.4.19: - version "10.4.19" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f" - integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +autoprefixer@^10.4.14: + version "10.4.20" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" + integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== dependencies: - browserslist "^4.23.0" - caniuse-lite "^1.0.30001599" + browserslist "^4.23.3" + caniuse-lite "^1.0.30001646" fraction.js "^4.3.7" normalize-range "^0.1.2" - picocolors "^1.0.0" + picocolors "^1.0.1" postcss-value-parser "^4.2.0" available-typed-arrays@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz" integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== dependencies: possible-typed-array-names "^1.0.0" +axios@1.7.3: + version "1.7.3" + resolved "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz" + integrity sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== binary-extensions@^2.0.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -1072,31 +965,31 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.3, braces@~3.0.2: version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" -browserslist@^4.23.0, browserslist@^4.23.1: - version "4.23.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.2.tgz#244fe803641f1c19c28c48c4b6ec9736eb3d32ed" - integrity sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA== +browserslist@^4.23.1, browserslist@^4.23.3: + version "4.23.3" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz" + integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== dependencies: - caniuse-lite "^1.0.30001640" - electron-to-chromium "^1.4.820" - node-releases "^2.0.14" + caniuse-lite "^1.0.30001646" + electron-to-chromium "^1.5.4" + node-releases "^2.0.18" update-browserslist-db "^1.1.0" call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz" integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: es-define-property "^1.0.0" @@ -1107,27 +1000,27 @@ call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase-css@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== camelcase@^6.2.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001599, caniuse-lite@^1.0.30001640: - version "1.0.30001642" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz#6aa6610eb24067c246d30c57f055a9d0a7f8d05f" - integrity sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA== +caniuse-lite@^1.0.30001646: + version "1.0.30001651" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz" + integrity sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg== chalk@^2.4.2: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -1136,7 +1029,7 @@ chalk@^2.4.2: chalk@^4.0.0: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -1144,7 +1037,7 @@ chalk@^4.0.0: chokidar@^3.5.3: version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" @@ -1159,51 +1052,58 @@ chokidar@^3.5.3: color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + commander@^4.0.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== convert-source-map@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== core-js@^3.28.0: - version "3.37.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.37.1.tgz#d21751ddb756518ac5a00e4d66499df981a62db9" - integrity sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw== + version "3.38.0" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.38.0.tgz" + integrity sha512-XPpwqEodRljce9KswjZShh95qJ1URisBeKCjUdq27YdenkslVe7OO0ZJhlYXAChW7OhXaRLl8AAba7IBfoIHug== cosmiconfig@^8.1.3: version "8.3.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz" integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== dependencies: import-fresh "^3.3.0" @@ -1213,12 +1113,12 @@ cosmiconfig@^8.1.3: create-require@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-spawn@^7.0.0, cross-spawn@^7.0.2: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -1227,17 +1127,17 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: cssesc@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== csstype@^3.0.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== data-view-buffer@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz" integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== dependencies: call-bind "^1.0.6" @@ -1246,7 +1146,7 @@ data-view-buffer@^1.0.1: data-view-byte-length@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + resolved "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz" integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== dependencies: call-bind "^1.0.7" @@ -1255,7 +1155,7 @@ data-view-byte-length@^1.0.1: data-view-byte-offset@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + resolved "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz" integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== dependencies: call-bind "^1.0.6" @@ -1264,26 +1164,26 @@ data-view-byte-offset@^1.0.0: debug@^3.2.7: version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" - integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== + version "4.3.6" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== dependencies: ms "2.1.2" deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: es-define-property "^1.0.0" @@ -1292,38 +1192,43 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: define-data-property "^1.0.1" has-property-descriptors "^1.0.0" object-keys "^1.1.1" +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + didyoumean@^1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== diff@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" dlv@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" @@ -1337,7 +1242,7 @@ doctrine@^3.0.0: dot-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== dependencies: no-case "^3.0.4" @@ -1345,47 +1250,47 @@ dot-case@^3.0.4: eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -electron-to-chromium@^1.4.820: - version "1.4.827" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.827.tgz#76068ed1c71dd3963e1befc8ae815004b2da6a02" - integrity sha512-VY+J0e4SFcNfQy19MEoMdaIcZLmDCprqvBtkii1WTCTQHpRvf5N8+3kTYCgL/PcntvwQvmMJWTuDPsq+IlhWKQ== +electron-to-chromium@^1.5.4: + version "1.5.6" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz" + integrity sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== enhanced-resolve@^5.12.0: - version "5.17.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz#d037603789dd9555b89aaec7eb78845c49089bc5" - integrity sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA== + version "5.17.1" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz" + integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" entities@^4.4.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: version "1.23.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz" integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== dependencies: array-buffer-byte-length "^1.0.1" @@ -1437,19 +1342,19 @@ es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23 es-define-property@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz" integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== dependencies: get-intrinsic "^1.2.4" es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-iterator-helpers@^1.0.19: version "1.0.19" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" + resolved "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz" integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== dependencies: call-bind "^1.0.7" @@ -1469,14 +1374,14 @@ es-iterator-helpers@^1.0.19: es-object-atoms@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz" integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== dependencies: es-errors "^1.3.0" es-set-tostringtag@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz" integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== dependencies: get-intrinsic "^1.2.4" @@ -1485,79 +1390,78 @@ es-set-tostringtag@^2.0.3: es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz" integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== dependencies: hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" is-date-object "^1.0.1" is-symbol "^1.0.2" -esbuild@^0.21.3: - version "0.21.5" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" - integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== +esbuild@^0.18.10: + version "0.18.20" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" + integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== optionalDependencies: - "@esbuild/aix-ppc64" "0.21.5" - "@esbuild/android-arm" "0.21.5" - "@esbuild/android-arm64" "0.21.5" - "@esbuild/android-x64" "0.21.5" - "@esbuild/darwin-arm64" "0.21.5" - "@esbuild/darwin-x64" "0.21.5" - "@esbuild/freebsd-arm64" "0.21.5" - "@esbuild/freebsd-x64" "0.21.5" - "@esbuild/linux-arm" "0.21.5" - "@esbuild/linux-arm64" "0.21.5" - "@esbuild/linux-ia32" "0.21.5" - "@esbuild/linux-loong64" "0.21.5" - "@esbuild/linux-mips64el" "0.21.5" - "@esbuild/linux-ppc64" "0.21.5" - "@esbuild/linux-riscv64" "0.21.5" - "@esbuild/linux-s390x" "0.21.5" - "@esbuild/linux-x64" "0.21.5" - "@esbuild/netbsd-x64" "0.21.5" - "@esbuild/openbsd-x64" "0.21.5" - "@esbuild/sunos-x64" "0.21.5" - "@esbuild/win32-arm64" "0.21.5" - "@esbuild/win32-ia32" "0.21.5" - "@esbuild/win32-x64" "0.21.5" + "@esbuild/android-arm" "0.18.20" + "@esbuild/android-arm64" "0.18.20" + "@esbuild/android-x64" "0.18.20" + "@esbuild/darwin-arm64" "0.18.20" + "@esbuild/darwin-x64" "0.18.20" + "@esbuild/freebsd-arm64" "0.18.20" + "@esbuild/freebsd-x64" "0.18.20" + "@esbuild/linux-arm" "0.18.20" + "@esbuild/linux-arm64" "0.18.20" + "@esbuild/linux-ia32" "0.18.20" + "@esbuild/linux-loong64" "0.18.20" + "@esbuild/linux-mips64el" "0.18.20" + "@esbuild/linux-ppc64" "0.18.20" + "@esbuild/linux-riscv64" "0.18.20" + "@esbuild/linux-s390x" "0.18.20" + "@esbuild/linux-x64" "0.18.20" + "@esbuild/netbsd-x64" "0.18.20" + "@esbuild/openbsd-x64" "0.18.20" + "@esbuild/sunos-x64" "0.18.20" + "@esbuild/win32-arm64" "0.18.20" + "@esbuild/win32-ia32" "0.18.20" + "@esbuild/win32-x64" "0.18.20" escalade@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz" integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-prettier@^8.7.0: +eslint-config-prettier@^8.6.0: version "8.10.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== eslint-import-resolver-node@^0.3.9: version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz" integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== dependencies: debug "^3.2.7" is-core-module "^2.13.0" resolve "^1.22.4" -eslint-import-resolver-typescript@^3.6.1: +eslint-import-resolver-typescript@^3.5.2: version "3.6.1" resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz#7b983680edd3f1c5bce1a5829ae0bc2d57fe9efa" integrity sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg== @@ -1572,12 +1476,12 @@ eslint-import-resolver-typescript@^3.6.1: eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: version "2.8.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz" integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== dependencies: debug "^3.2.7" -eslint-plugin-import@^2.29.1: +eslint-plugin-import@^2.27.5: version "2.29.1" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== @@ -1602,25 +1506,24 @@ eslint-plugin-import@^2.29.1: eslint-plugin-prettier@^4.2.1: version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz" integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-react-hooks@^4.6.2: +eslint-plugin-react-hooks@^4.6.0: version "4.6.2" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== -eslint-plugin-react@^7.32.2: - version "7.34.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.4.tgz#1f0dc313a0937db7ce15fd1f6c3d77e70f3e02fb" - integrity sha512-Np+jo9bUwJNxCsT12pXtrGhJgT3T44T1sHhn1Ssr42XFn8TES0267wPGo5nNrMHi8qkyimDAX2BUmkf9pSaVzA== +eslint-plugin-react@^7.32.1: + version "7.35.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz#00b1e4559896710e58af6358898f2ff917ea4c41" + integrity sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA== dependencies: array-includes "^3.1.8" array.prototype.findlast "^1.2.5" array.prototype.flatmap "^1.3.2" - array.prototype.toreversed "^1.1.2" array.prototype.tosorted "^1.1.4" doctrine "^2.1.0" es-iterator-helpers "^1.0.19" @@ -1655,10 +1558,10 @@ eslint-scope@^7.2.2: eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.57.0: +eslint@^8.43.0: version "8.57.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== @@ -1720,7 +1623,7 @@ esquery@^1.4.2: esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" @@ -1732,32 +1635,32 @@ estraverse@^4.1.1: estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== estree-walker@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -1768,17 +1671,17 @@ fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -1792,14 +1695,14 @@ file-entry-cache@^6.0.1: fill-range@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" find-up@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -1816,27 +1719,41 @@ flat-cache@^3.0.4: flatted@^3.2.9: version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== +follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + for-each@^0.3.3: version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: is-callable "^1.1.3" foreground-child@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" - integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== + version "3.3.0" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== dependencies: cross-spawn "^7.0.0" signal-exit "^4.0.1" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + fraction.js@^4.3.7: version "4.3.7" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz" integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== fs.realpath@^1.0.0: @@ -1844,19 +1761,19 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2, fsevents@~2.3.3: +fsevents@~2.3.2: version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: +function.prototype.name@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz" integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== dependencies: call-bind "^1.0.2" @@ -1866,17 +1783,17 @@ function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: functions-have-names@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: es-errors "^1.3.0" @@ -1887,7 +1804,7 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@ get-symbol-description@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz" integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== dependencies: call-bind "^1.0.5" @@ -1895,29 +1812,29 @@ get-symbol-description@^1.0.2: get-intrinsic "^1.2.4" get-tsconfig@^4.5.0: - version "4.7.5" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.5.tgz#5e012498579e9a6947511ed0cd403272c7acbbaf" - integrity sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw== + version "4.7.6" + resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz" + integrity sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA== dependencies: resolve-pkg-maps "^1.0.0" glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob@^10.3.10: version "10.4.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== dependencies: foreground-child "^3.1.0" @@ -1941,7 +1858,7 @@ glob@^7.1.3: globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: @@ -1953,7 +1870,7 @@ globals@^13.19.0: globalthis@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz" integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: define-properties "^1.2.1" @@ -1961,7 +1878,7 @@ globalthis@^1.0.3: globby@^11.1.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -1973,80 +1890,80 @@ globby@^11.1.0: globrex@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" + resolved "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz" integrity sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg== gopd@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" graceful-fs@^4.2.4: version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== graphemer@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: es-define-property "^1.0.0" has-proto@^1.0.1, has-proto@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz" integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: has-symbols "^1.0.3" hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" ignore@^5.2.0: version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -2054,7 +1971,7 @@ import-fresh@^3.2.1, import-fresh@^3.3.0: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflight@^1.0.4: @@ -2072,7 +1989,7 @@ inherits@2: internal-slot@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz" integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== dependencies: es-errors "^1.3.0" @@ -2081,7 +1998,7 @@ internal-slot@^1.0.7: is-array-buffer@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz" integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== dependencies: call-bind "^1.0.2" @@ -2089,33 +2006,33 @@ is-array-buffer@^3.0.4: is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-async-function@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz" integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== dependencies: has-tostringtag "^1.0.0" is-bigint@^1.0.1: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== dependencies: has-bigints "^1.0.1" is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" @@ -2123,91 +2040,91 @@ is-boolean-object@^1.1.0: is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.14.0.tgz#43b8ef9f46a6a08888db67b1ffd4ec9e3dfd59d1" - integrity sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A== + version "2.15.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz" + integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA== dependencies: hasown "^2.0.2" is-data-view@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + resolved "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz" integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== dependencies: is-typed-array "^1.1.13" is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: has-tostringtag "^1.0.0" is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-finalizationregistry@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" + resolved "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz" integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== dependencies: call-bind "^1.0.2" is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-function@^1.0.10: version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== dependencies: has-tostringtag "^1.0.0" is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-map@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== is-negative-zero@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz" integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-number-object@^1.0.4: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-regex@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" @@ -2215,52 +2132,52 @@ is-regex@^1.1.4: is-set@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz" integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz" integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== dependencies: call-bind "^1.0.7" is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" is-typed-array@^1.1.13: version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz" integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== dependencies: which-typed-array "^1.1.14" is-weakmap@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz" integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== is-weakref@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: call-bind "^1.0.2" is-weakset@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz" integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== dependencies: call-bind "^1.0.7" @@ -2268,17 +2185,17 @@ is-weakset@^2.0.3: isarray@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== iterator.prototype@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" + resolved "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz" integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== dependencies: define-properties "^1.2.1" @@ -2289,7 +2206,7 @@ iterator.prototype@^1.1.2: jackspeak@^3.1.2: version "3.4.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== dependencies: "@isaacs/cliui" "^8.0.2" @@ -2298,61 +2215,61 @@ jackspeak@^3.1.2: jiti@^1.21.0: version "1.21.6" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" + resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz" integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json5@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" json5@^2.2.3: version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== "jsx-ast-utils@^2.4.1 || ^3.0.0": version "3.3.5" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz" integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== dependencies: array-includes "^3.1.6" @@ -2369,7 +2286,7 @@ keyv@^4.5.3: levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -2377,112 +2294,124 @@ levn@^0.4.1: lilconfig@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz" integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== lilconfig@^3.0.0: version "3.1.2" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.2.tgz#e4a7c3cb549e3a606c8dcc32e5ae1005e62c05cb" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz" integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" lower-case@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: tslib "^2.0.3" lru-cache@^10.2.0: version "10.4.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" make-error@^1.1.1: version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.7" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz" integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== dependencies: braces "^3.0.3" picomatch "^2.3.1" +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^9.0.4: version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: version "7.1.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@^2.1.1: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mz@^2.7.0: version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== dependencies: any-promise "^1.0.0" @@ -2491,7 +2420,7 @@ mz@^2.7.0: nanoid@^3.3.7: version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== natural-compare-lite@^1.4.0: @@ -2501,55 +2430,55 @@ natural-compare-lite@^1.4.0: natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== no-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: lower-case "^2.0.2" tslib "^2.0.3" -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-range@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-hash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== object-inspect@^1.13.1: version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz" integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.4, object.assign@^4.1.5: version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz" integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: call-bind "^1.0.5" @@ -2559,7 +2488,7 @@ object.assign@^4.1.4, object.assign@^4.1.5: object.entries@^1.1.8: version "1.1.8" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz" integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== dependencies: call-bind "^1.0.7" @@ -2568,7 +2497,7 @@ object.entries@^1.1.8: object.fromentries@^2.0.7, object.fromentries@^2.0.8: version "2.0.8" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz" integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: call-bind "^1.0.7" @@ -2578,7 +2507,7 @@ object.fromentries@^2.0.7, object.fromentries@^2.0.8: object.groupby@^1.0.1: version "1.0.3" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz" integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: call-bind "^1.0.7" @@ -2587,7 +2516,7 @@ object.groupby@^1.0.1: object.values@^1.1.6, object.values@^1.1.7, object.values@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz" integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== dependencies: call-bind "^1.0.7" @@ -2603,7 +2532,7 @@ once@^1.3.0: optionator@^0.9.3: version "0.9.4" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: deep-is "^0.1.3" @@ -2615,38 +2544,38 @@ optionator@^0.9.3: p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p5@^1.9.4: - version "1.9.4" - resolved "https://registry.yarnpkg.com/p5/-/p5-1.9.4.tgz#948ec06c123105f516b0ef63db01c44b93c93b72" - integrity sha512-dhiZ9mvXx5pm8eRwml34xbeUwce4uS9Q2za0YOHg2p97N9iNAb5hTIHAt77CHKHXAh6A16u/oalz5egRfTyFWw== + version "1.10.0" + resolved "https://registry.npmjs.org/p5/-/p5-1.10.0.tgz" + integrity sha512-6cWYBFhnZz7jNC6p1VWvlt3QReMqrRSmO90bgECQIKB9oko2w/sKrOAVMyei5tjIzSYcSY0JHy+BRtSAWq24jQ== package-json-from-dist@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" + resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz" integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-json@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -2656,7 +2585,7 @@ parse-json@^5.2.0: path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: @@ -2666,17 +2595,17 @@ path-is-absolute@^1.0.0: path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-scurry@^1.11.1: version "1.11.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: lru-cache "^10.2.0" @@ -2684,37 +2613,37 @@ path-scurry@^1.11.1: path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== picocolors@^1.0.0, picocolors@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz" integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pirates@^4.0.1: version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== possible-typed-array-names@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz" integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== postcss-import@^15.1.0: version "15.1.0" - resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" + resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz" integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== dependencies: postcss-value-parser "^4.0.0" @@ -2723,29 +2652,29 @@ postcss-import@^15.1.0: postcss-js@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" + resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz" integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== dependencies: camelcase-css "^2.0.1" postcss-load-config@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" + resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz" integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== dependencies: lilconfig "^3.0.0" yaml "^2.3.4" postcss-nested@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" - integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== + version "6.2.0" + resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz" + integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== dependencies: - postcss-selector-parser "^6.0.11" + postcss-selector-parser "^6.1.1" -postcss-selector-parser@^6.0.11: +postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.1.1: version "6.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz#5be94b277b8955904476a2400260002ce6c56e38" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz" integrity sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg== dependencies: cssesc "^3.0.0" @@ -2753,13 +2682,13 @@ postcss-selector-parser@^6.0.11: postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.4.23, postcss@^8.4.39: - version "8.4.39" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.39.tgz#aa3c94998b61d3a9c259efa51db4b392e1bde0e3" - integrity sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw== +postcss@^8.4.23, postcss@^8.4.27: + version "8.4.41" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz" + integrity sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ== dependencies: nanoid "^3.3.7" picocolors "^1.0.1" @@ -2767,48 +2696,60 @@ postcss@^8.4.23, postcss@^8.4.39: prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier-linter-helpers@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: fast-diff "^1.1.2" -prettier-plugin-tailwindcss@^0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.5.tgz#e05202784a3f41889711ae38c75c5b8cad72f368" - integrity sha512-axfeOArc/RiGHjOIy9HytehlC0ZLeMaqY09mm8YCkMzznKiDkwFzOpBvtuhuv3xG5qB73+Mj7OCe2j/L1ryfuQ== +prettier-plugin-tailwindcss@^0.2.5: + version "0.2.8" + resolved "https://registry.yarnpkg.com/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.2.8.tgz#e9c0356680331f909a86fefe8fc2b247c21e23a2" + integrity sha512-KgPcEnJeIijlMjsA6WwYgRs5rh3/q76oInqtMXBA/EMcamrcYJpyhtRhyX1ayT9hnHlHTuO8sIifHF10WuSDKg== -prettier@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" - integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== +prettier@^2.8.8: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== prop-types@^15.8.1: version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" object-assign "^4.1.1" react-is "^16.13.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + punycode@^2.1.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== +qs@^6.11.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + dependencies: + side-channel "^1.0.6" + queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== react-dom@^18.2.0: version "18.3.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz" integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== dependencies: loose-envify "^1.1.0" @@ -2816,53 +2757,53 @@ react-dom@^18.2.0: react-is@^16.13.1: version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-refresh@^0.14.2: +react-refresh@^0.14.0, react-refresh@^0.14.2: version "0.14.2" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" + resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz" integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== react-router-dom@^6.8.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.24.1.tgz#b1a22f7d6c5a1bfce30732bd370713f991ab4de4" - integrity sha512-U19KtXqooqw967Vw0Qcn5cOvrX5Ejo9ORmOtJMzYWtCT4/WOfFLIZGGsVLxcd9UkBO0mSTZtXqhZBsWlHr7+Sg== + version "6.26.0" + resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.0.tgz" + integrity sha512-RRGUIiDtLrkX3uYcFiCIxKFWMcWQGMojpYZfcstc63A1+sSnVgILGIm9gNUA6na3Fm1QuPGSBQH2EMbAZOnMsQ== dependencies: - "@remix-run/router" "1.17.1" - react-router "6.24.1" + "@remix-run/router" "1.19.0" + react-router "6.26.0" -react-router@6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.24.1.tgz#5a3bbba0000afba68d42915456ca4c806f37a7de" - integrity sha512-PTXFXGK2pyXpHzVo3rR9H7ip4lSPZZc0bHG5CARmj65fTT6qG7sTngmb6lcYu1gf3y/8KxORoy9yn59pGpCnpg== +react-router@6.26.0: + version "6.26.0" + resolved "https://registry.npmjs.org/react-router/-/react-router-6.26.0.tgz" + integrity sha512-wVQq0/iFYd3iZ9H2l3N3k4PL8EEHcb0XlU2Na8nEwmiXgIUElEH6gaJDtUQxJ+JFzmIXaQjfdpcGWaM6IoQGxg== dependencies: - "@remix-run/router" "1.17.1" + "@remix-run/router" "1.19.0" react@^18.2.0: version "18.3.1" - resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz" integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== dependencies: loose-envify "^1.1.0" read-cache@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== dependencies: pify "^2.3.0" readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" reflect.getprototypeof@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" + resolved "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz" integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== dependencies: call-bind "^1.0.7" @@ -2875,7 +2816,7 @@ reflect.getprototypeof@^1.0.4: regexp.prototype.flags@^1.5.2: version "1.5.2" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz" integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== dependencies: call-bind "^1.0.6" @@ -2885,17 +2826,17 @@ regexp.prototype.flags@^1.5.2: resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-pkg-maps@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== resolve@^1.1.7, resolve@^1.22.2, resolve@^1.22.4: version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" @@ -2904,7 +2845,7 @@ resolve@^1.1.7, resolve@^1.22.2, resolve@^1.22.4: resolve@^2.0.0-next.5: version "2.0.0-next.5" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz" integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== dependencies: is-core-module "^2.13.0" @@ -2913,7 +2854,7 @@ resolve@^2.0.0-next.5: reusify@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@^3.0.2: @@ -2923,41 +2864,23 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rollup@^4.13.0: - version "4.18.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.18.1.tgz#18a606df5e76ca53b8a69f2d8eab256d69dda851" - integrity sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A== - dependencies: - "@types/estree" "1.0.5" +rollup@^3.27.1: + version "3.29.4" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.29.4.tgz#4d70c0f9834146df8705bfb69a9a19c9e1109981" + integrity sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw== optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.18.1" - "@rollup/rollup-android-arm64" "4.18.1" - "@rollup/rollup-darwin-arm64" "4.18.1" - "@rollup/rollup-darwin-x64" "4.18.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.18.1" - "@rollup/rollup-linux-arm-musleabihf" "4.18.1" - "@rollup/rollup-linux-arm64-gnu" "4.18.1" - "@rollup/rollup-linux-arm64-musl" "4.18.1" - "@rollup/rollup-linux-powerpc64le-gnu" "4.18.1" - "@rollup/rollup-linux-riscv64-gnu" "4.18.1" - "@rollup/rollup-linux-s390x-gnu" "4.18.1" - "@rollup/rollup-linux-x64-gnu" "4.18.1" - "@rollup/rollup-linux-x64-musl" "4.18.1" - "@rollup/rollup-win32-arm64-msvc" "4.18.1" - "@rollup/rollup-win32-ia32-msvc" "4.18.1" - "@rollup/rollup-win32-x64-msvc" "4.18.1" fsevents "~2.3.2" run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" safe-array-concat@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz" integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== dependencies: call-bind "^1.0.7" @@ -2967,7 +2890,7 @@ safe-array-concat@^1.1.2: safe-regex-test@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz" integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== dependencies: call-bind "^1.0.6" @@ -2976,24 +2899,24 @@ safe-regex-test@^1.0.3: scheduler@^0.23.2: version "0.23.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz" integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== dependencies: loose-envify "^1.1.0" semver@^6.3.1: version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.7: - version "7.6.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== set-function-length@^1.2.1: version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: define-data-property "^1.1.4" @@ -3005,7 +2928,7 @@ set-function-length@^1.2.1: set-function-name@^2.0.1, set-function-name@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz" integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: define-data-property "^1.1.4" @@ -3015,19 +2938,19 @@ set-function-name@^2.0.1, set-function-name@^2.0.2: shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel@^1.0.4, side-channel@^1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz" integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: call-bind "^1.0.7" @@ -3037,17 +2960,17 @@ side-channel@^1.0.4, side-channel@^1.0.6: signal-exit@^4.0.1: version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== snake-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz" integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== dependencies: dot-case "^3.0.4" @@ -3055,12 +2978,13 @@ snake-case@^3.0.4: source-map-js@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz" integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== "string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: + name string-width-cjs version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -3069,7 +2993,7 @@ source-map-js@^1.2.0: string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" @@ -3078,7 +3002,7 @@ string-width@^5.0.1, string-width@^5.1.2: string.prototype.matchall@^4.0.11: version "4.0.11" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" + resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz" integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== dependencies: call-bind "^1.0.7" @@ -3096,7 +3020,7 @@ string.prototype.matchall@^4.0.11: string.prototype.repeat@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + resolved "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz" integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== dependencies: define-properties "^1.1.3" @@ -3104,7 +3028,7 @@ string.prototype.repeat@^1.0.0: string.prototype.trim@^1.2.9: version "1.2.9" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz" integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== dependencies: call-bind "^1.0.7" @@ -3114,7 +3038,7 @@ string.prototype.trim@^1.2.9: string.prototype.trimend@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz" integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== dependencies: call-bind "^1.0.7" @@ -3123,7 +3047,7 @@ string.prototype.trimend@^1.0.8: string.prototype.trimstart@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz" integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== dependencies: call-bind "^1.0.7" @@ -3132,31 +3056,31 @@ string.prototype.trimstart@^1.0.8: "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^7.0.1: version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== sucrase@^3.32.0: version "3.35.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz" integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== dependencies: "@jridgewell/gen-mapping" "^0.3.2" @@ -3169,32 +3093,32 @@ sucrase@^3.32.0: supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== svg-parser@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + resolved "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== -tailwindcss@^3.4.4: - version "3.4.5" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.5.tgz#0de2e92ed4d00fb015feb962fa0781605761724d" - integrity sha512-DlTxttYcogpDfx3tf/8jfnma1nfAYi2cBUYV2YNoPPecwmO3YGiFlOX9D8tGAu+EDF38ryBzvrDKU/BLMsUwbw== +tailwindcss@^3.3.1: + version "3.4.9" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.9.tgz#9e04cddce1924d530df62af37d3520f0e2a9d85e" + integrity sha512-1SEOvRr6sSdV5IDf9iC+NU4dhwdqzF4zKKq3sAbasUWHEM6lsMhX+eNN5gkPx1BvLFEnZQEUFbXnGj8Qlp83Pg== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" @@ -3221,48 +3145,48 @@ tailwindcss@^3.4.4: tapable@^2.2.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== text-table@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== thenify-all@^1.0.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== dependencies: thenify ">= 3.1.0 < 4" "thenify@>= 3.1.0 < 4": version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== dependencies: any-promise "^1.0.0" to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" ts-interface-checker@^0.1.9: version "0.1.13" - resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== ts-node@^10.9.1: version "10.9.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -3281,12 +3205,12 @@ ts-node@^10.9.1: tsconfck@^3.0.3: version "3.1.1" - resolved "https://registry.yarnpkg.com/tsconfck/-/tsconfck-3.1.1.tgz#c7284913262c293b43b905b8b034f524de4a3162" + resolved "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.1.tgz" integrity sha512-00eoI6WY57SvZEVjm13stEVE90VkEdJAFGgpFLTsZbJyW/LwFQ7uQxJHWpZ2hzSWgCPKc9AnBnNP+0X7o3hAmQ== tsconfig-paths@^3.15.0: version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz" integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" @@ -3296,24 +3220,24 @@ tsconfig-paths@^3.15.0: tslib@^1.8.1: version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.3: version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz" integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" @@ -3325,7 +3249,7 @@ type-fest@^0.20.2: typed-array-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz" integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== dependencies: call-bind "^1.0.7" @@ -3334,7 +3258,7 @@ typed-array-buffer@^1.0.2: typed-array-byte-length@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz" integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== dependencies: call-bind "^1.0.7" @@ -3345,7 +3269,7 @@ typed-array-byte-length@^1.0.1: typed-array-byte-offset@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz" integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== dependencies: available-typed-arrays "^1.0.7" @@ -3357,7 +3281,7 @@ typed-array-byte-offset@^1.0.2: typed-array-length@^1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz" integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== dependencies: call-bind "^1.0.7" @@ -3367,14 +3291,14 @@ typed-array-length@^1.0.6: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" -typescript@^5.5.3: - version "5.5.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.3.tgz#e1b0a3c394190838a0b168e771b0ad56a0af0faa" - integrity sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ== +typescript@^5.1.6: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: call-bind "^1.0.2" @@ -3384,12 +3308,12 @@ unbox-primitive@^1.0.2: undici-types@~5.26.4: version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== update-browserslist-db@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz" integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== dependencies: escalade "^3.1.2" @@ -3397,31 +3321,31 @@ update-browserslist-db@^1.1.0: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" util-deprecate@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== vite-plugin-svgr@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz#9f3bf5206b0ec510287e56d16f1915e729bb4e6b" + resolved "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz" integrity sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA== dependencies: "@rollup/pluginutils" "^5.0.5" "@svgr/core" "^8.1.0" "@svgr/plugin-jsx" "^8.1.0" -vite-tsconfig-paths@^4.3.2: +vite-tsconfig-paths@^4.2.0: version "4.3.2" resolved "https://registry.yarnpkg.com/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.2.tgz#321f02e4b736a90ff62f9086467faf4e2da857a9" integrity sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA== @@ -3430,20 +3354,20 @@ vite-tsconfig-paths@^4.3.2: globrex "^0.1.2" tsconfck "^3.0.3" -vite@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.3.tgz#5265b1f0a825b3b6564c2d07524777c83e3c04c2" - integrity sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A== +vite@^4.3.9: + version "4.5.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.3.tgz#d88a4529ea58bae97294c7e2e6f0eab39a50fb1a" + integrity sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg== dependencies: - esbuild "^0.21.3" - postcss "^8.4.39" - rollup "^4.13.0" + esbuild "^0.18.10" + postcss "^8.4.27" + rollup "^3.27.1" optionalDependencies: - fsevents "~2.3.3" + fsevents "~2.3.2" which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" @@ -3453,12 +3377,12 @@ which-boxed-primitive@^1.0.2: is-symbol "^1.0.3" which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + version "1.1.4" + resolved "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz" + integrity sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w== dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" is-async-function "^2.0.0" is-date-object "^1.0.5" is-finalizationregistry "^1.0.2" @@ -3467,12 +3391,12 @@ which-builtin-type@^1.1.3: is-weakref "^1.0.2" isarray "^2.0.5" which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" + which-collection "^1.0.2" + which-typed-array "^1.1.15" -which-collection@^1.0.1: +which-collection@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz" integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== dependencies: is-map "^2.0.3" @@ -3480,9 +3404,9 @@ which-collection@^1.0.1: is-weakmap "^2.0.2" is-weakset "^2.0.3" -which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: +which-typed-array@^1.1.14, which-typed-array@^1.1.15: version "1.1.15" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== dependencies: available-typed-arrays "^1.0.7" @@ -3493,19 +3417,19 @@ which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" word-wrap@^1.2.5: version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -3514,7 +3438,7 @@ word-wrap@^1.2.5: wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" @@ -3528,20 +3452,20 @@ wrappy@1: yallist@^3.0.2: version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yaml@^2.3.4: - version "2.4.5" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.5.tgz#60630b206dd6d84df97003d33fc1ddf6296cca5e" - integrity sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg== + version "2.5.0" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz" + integrity sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw== yn@3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 25e9137f18b59d1eece7cf2b36fb53793dbde656 Mon Sep 17 00:00:00 2001 From: G-hoon Date: Sun, 18 Aug 2024 04:48:04 +0900 Subject: [PATCH 007/116] =?UTF-8?q?[feat/#19]=20=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83=20?= =?UTF-8?q?=EA=B5=AC=EC=84=B1=20=EB=B0=8F=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 메인화면 마크업 - 가이드 팝업 추가 - 카메라 좌우 반전 --- public/icons/more-icon.svg | 20 ++++ public/icons/posture-craft-side-nav-icon.svg | 13 +++ public/icons/side-nav-analysis-icon.svg | 12 +++ public/icons/side-nav-crew-icon.svg | 10 ++ public/icons/side-nav-monitor-icon.svg | 10 ++ public/images/posture-guide-2x.png | Bin 0 -> 108713 bytes src/components/Camera.tsx | 36 +++++-- src/components/CameraContianer.tsx | 35 ------- src/components/PoseDetector.tsx | 94 +++++-------------- src/components/Posture/GuidePopup.tsx | 27 ++++++ src/components/SideNav.tsx | 94 +++++++++++++++++++ src/constants/routes.json | 3 +- src/layouts/Layout.tsx | 27 +----- src/routes/Router.tsx | 6 +- 14 files changed, 247 insertions(+), 140 deletions(-) create mode 100644 public/icons/more-icon.svg create mode 100644 public/icons/posture-craft-side-nav-icon.svg create mode 100644 public/icons/side-nav-analysis-icon.svg create mode 100644 public/icons/side-nav-crew-icon.svg create mode 100644 public/icons/side-nav-monitor-icon.svg create mode 100644 public/images/posture-guide-2x.png delete mode 100644 src/components/CameraContianer.tsx create mode 100644 src/components/Posture/GuidePopup.tsx create mode 100644 src/components/SideNav.tsx diff --git a/public/icons/more-icon.svg b/public/icons/more-icon.svg new file mode 100644 index 0000000..ad4632f --- /dev/null +++ b/public/icons/more-icon.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/public/icons/posture-craft-side-nav-icon.svg b/public/icons/posture-craft-side-nav-icon.svg new file mode 100644 index 0000000..83fd5a5 --- /dev/null +++ b/public/icons/posture-craft-side-nav-icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/public/icons/side-nav-analysis-icon.svg b/public/icons/side-nav-analysis-icon.svg new file mode 100644 index 0000000..9aea821 --- /dev/null +++ b/public/icons/side-nav-analysis-icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/public/icons/side-nav-crew-icon.svg b/public/icons/side-nav-crew-icon.svg new file mode 100644 index 0000000..681225a --- /dev/null +++ b/public/icons/side-nav-crew-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/icons/side-nav-monitor-icon.svg b/public/icons/side-nav-monitor-icon.svg new file mode 100644 index 0000000..9ea3fc7 --- /dev/null +++ b/public/icons/side-nav-monitor-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/images/posture-guide-2x.png b/public/images/posture-guide-2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b9365a6f42072641256df5cde3642e1fb3399c0e GIT binary patch literal 108713 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
;_rq(hJ>h((RL*)Nj4K(puIE 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

-+zT55IZQ6cm zpdb#OcVcu9G|6UHIlZJ;%-?t4h`xB2TboDG>fQ81V=BVkGvot-K>9eC1U;WlcQc%` z^njw^{_EZ0{1K;}f$J+4$RJui1$-bC19=()0>Mi^$CM9u8m_2~j*&2f9~OIc(nhGK z(txm?j^>z?I&H0u3-@ZfyO9a$l$0Z~g``f?m>7;DMN(@^OZavEm1_PVKw| zi_T~}gak@}(5-o|mqzrADmhuKI)%!0U@D$ZHC#|6hnG(y0%8eaInu^iQbCXey>^Kx z!}J8^WWn_1LP27-)eyp9P(x>ZB=UL~h${G0)gOBju+6sTLT_U^8U-#c$YM$B?EOVo zC9Pn}t8k+B8|-(~Wi^CRO)eM{P$-Qf$&;NmK0iWm<)bPfH=a$`5|9gEiI7QJ!k&n?wZ?v15X`>1o7KAoHB%mBLuvGcc zL>HDH&Ey?6+WzLBxys4)x3Bj9=Fstj8rU}adW>zw5ZS+4r@FNtb5a%J#Ul#%ppV;C zPWNdxdT0jgnwzkeDEx4T*uO3~ydm4gSm1#^F!}lKIm{S?5c?!MHyoF}Qf)M7f_+5; zerir+Zxq2}BV?p=bx6g%!KnNoji{;Cvt{XO-;pMK&8EsWB2)0u2@BfK9b}#eGWqE9 zlKoc)hXKTIaeB^(Dq5OT7&N!b*`)9n&~zDQj1(_9Wpy$Y{Faiktk%I?Gj(Ou>)3lQ z>LZ4#)R~iUbpLaaCnj(;D=(?+M2UlI({ zE@-rJ5m!E;Fvlkbo&BOkduJmN^5GGp8ZsL~G3-}DghOe6&uKV><}d&7W1jN8;8k%E z^|mzsY0O8kpC#Z)uZZ;lDU|^QNSQ`4BH(f~EoDrcR}*YO8EnA{iPL2Pdl(C*YS-v` zbauom)ZhiHm=78Y>Uf`wwp1QjH*{nqQf?7OdHg1z?sPu%m@!k?PZS&rxKivYpKJR-iMDs^m&a zQs41zyPfiBSkC%RpU<3OUSKuXIFp0k~DdmzE&9&pN3w}Rvj5M23@uj zkpBm4TRAL+;o#-fNrF{Fo%HJEVBe$b+nPZ&evcdMvlClR{%=OS{nOsZY$V-F!C}rc za#A*2Q_I@k@w(wJY{ zDK+}RaOjBm0%ZQLwRA(QXi}0XP&wajw1xEnnvr<)%mY7S)64JdSMzl{a72x-b3MB& zp4KVa&~xUDsaJsRJ9r_@HLoWev8Y*uL+9f8z`A97${L?>hOA8`PQ_s<`GR-%Mi;)` zTBHaLjt3Z;>Hk_>_m3DM0VqktiD~gbfYbxU6K_WLeYi)3^~DkM+x{kgR9-28)4Rv- z{}fh-DJ#t#1dbp-ib1G}sX#wirTeUoc28`I*2Lk~5Pv@m{6_R4OBXffoF8p1##VAv zb+wT;bO|wr`d+ZBBF zoZQmeV)na#@EFbu~ZUeJdWx^M<5XR_Lr4|En@ij!)Nvv1XD~|U!c6I#3;K35|@vmER*k- z67%!SVbdWrc0C?)c=fbB_VQriRXV(q$6Qlb4$4^@RHVOYY&nF;y0X8K?$a9Mle{fG zKQ8q%hBkyq%LRfWXsy8E&p|cjKTH$cC};1kTP&L-+cpDCQIq;FRII?jF0(MD!t=!n zpdiu&^GqEbF1|-}L>7Yqz9d>CvDGL>>;stEtPP#%z0W)AJCnU^y^KeU#{Abc!QxL@ zhQeN$Dck)I9pKiV)}J%Lvn3{VhAejh#$@}_9tFxSz3`vVIZPf2*;!J2YYA}-t}?oY z+P(}GOf|xoz^yr6c0LS!{DP|m)1eKOwYNR4%R`SnLU{>1;_WoMLOd${>5`WCw57ZT z6hnqPMt5r=5PHyhemeBk5dzkL=SX8NDJS-3L<{HHXf|_x7nS4a02$5Jgzvq(aiIY@ z{&f{D$1Fncv>Gh<8&UJS&{JUVr2H?*1M2=)ZDhEYQNA&ayy}Pqd|M>R6tt$Rz7j6% zpnZ9x4PYJ-V$k55zo+!%jcwy4PxWz=D6sVkw_4C_m00L%ZSZ`HH%R85y!ivx%#OaE zrCMD1XYGPK;>86;xPC8Wi0NuKf_}K!-_z7(Mtc9pQXwAp?DEQQ&8dU*}t1* zvskHaT#terbmUKizm2TEo6-lqmp)C&VXrI7cbvMX-I!a1*p zhE|Z?W(n>R|D}_g`G&ZeE#S!x9+~*_$HwL5IMyIs*((9DB6tRR9p`VthNYAs?I0sO z-W&Fp>7iBIgY{@ICJju*8#MiCLlWHc4PZtB$HN|BUN7dC^{orPvy|z5Oc>-B@OSvEH|#HPB&}2D_{*N z%gmZRpR4-Lfb6Y?!OtFz`^wc@kgw1 zNyz=8^K(e|P*CR^_7eP#il4dCT3tGlw^lmbr9-j2NxxOR1$T`|{T0VVJvwkp)IUWx zhd`Vjl@&-`VLpE{b)Y<*xPA*s95{JAowQH)S{v4vJR+ z-EvGDWi4bV93!eKqReh}t3W*uvW5c8LlQAV&YE_O%ADIW!mz=gV)mc%cJkS1sGya{ z6d>^toJ$c!%`n4Dib=vlz>jVbNCek^XK5W(frlV^n<-M9%P4080~EUa@tpEH zlYpiwZ_ZpL?Ev6)Y+)xw)ZwS+)k5crvdGdf;NycV1k+UFl6))|!;ofhw0SVd(c@fK z)#IQy9lQxE-mhtbxu*jS%YNr0^*Z>}lQCZ(R5*+pi-8$<4n{0hmq>4h}L#=dsS zcra>A?=(%*hK?(6dY? zB!FuRc67abo7=v}=84Jc{*qAl+5R5U`%G3aRT@yIae&TYu|);XVf0u%|C?|Q#ZsS_?qe1dwgsd1BkKfO z6pB++IM`ryi#iJ6-iMAQI0>p0|Gcx$llLMpe?H>A7L_9sJ?|W>Yr3B`3X~DmDBOYL zZIWy261UH}3&#~Jg9gB${C3P3+5v$GbejeAy0bDz&rVt*cJ9?8q9ybyvy9&?b}3JG zi}8Rtv5|7>--U}8nh57D<$(qn|30~4uMJ?+rQwfnqJd)x&BmaUpj^+hm2cU&ikW<* zp|~jcbltqJC+e>k&@1uJ9n@FtKY|Z3ujsvKA&K%8Bf2!=>Y~$O`xF5~uO3*Gh=Oqgj|obD}46w&NJY>>PTmAY}AnDtO6F6~yULcaZILpY@&pt|Lj> z*(EpJ+^NP+Nzg-Fq}g>9%HOZ_I-oS*M4qyw`B9hX3-?(1ARj+IChZrdKbCAX@H<2E zVk3wE7U<(%*&Jsu6jJ^@?PP8Q@&9&;Cq-}0CU)krBVCRLEVtlyq-?^1yj9ktX+MWh zJahQ}o2i?cc1nZoY|=+cf2yQ#kecS@6eQ(G2)qI8AO`)R3eRr0{Q^YzfV4@EH?4+n z`C&S{d1jlA`Cq9+hub<80LS#Xn%=-J!-O@u> zezpM9l@~6b5M|XtbSiVyOz%gBM^P8avb;gJ_4__98_lfn8!_yY^6KYWh3ZS|HEONz z5IrUyyu^^C*v;o-(;s*dI))hLLxgjadp2S1IBS&s;ue>Ge+2P3u>(E>8I@@gQirPs z<#9ZkYeL|6P{#sT&vm|$Mv4*}nh{}wxoy6HM9yL>WxyKHcR12IVLt0X{i>VZC`HbDjv zgE?wSfP397i(D|QBaCjK;4pK}dNjq3<8c43cwEy&c4^$gLCA1(9c&)rN`;M0oxA-+ zI=ydcD@abIulm(eN5}O(;#l9|cOjn1VD@nfb<~-YM$F z=oWtPyrj7U?NrhYNrKp%zb6B)FVIb4EXul?+>nEZneKAcD^)M*>y@nNG46e}s<%TG za_r=*CYQlOSgdk>7M1oN@L}vH(g5J1rIZXOsXyJ2xgWh=?2P(E@C-;k`?BpNYv)@_ z)g}~zIc3J*M|?H}O3zs1#~Mbi69yKDKJs{6DNlUt4G4W7dwsRMbrh`$o6WnK^7lhu zrpP*5Yvzsw>A*DCQO=sfa>#}#VZv=Z#3NYpVl_*SyMm^*R467BzG4KR8kJw= zjW3*QkP~FFFb5y1aR`CxLv`3zKl~U@c^S1Rw&2he>UYjd6(|*f)pjd7uexhF@^d1e zH7g#DSV~O7Ifk4*X|dpCVP8;HlTLQbo+?gN8g3T;Dl%RT@Z!*w`X$8(<)vHtG!a%E zb2;oDPJj>6gW0pM8c+Ok@zGIp6LNhh$_Xar}2hj)*uWAMt;uU77N@z z^ec%5rD7AkT1&worpZF^N-q(URIKF;{w8T-$P!Ll z--m!lSj&T1*TTqH=rP&07Jq%jDC1NMI@JDYii(JuHsM4{|EC~}ZX#~mY3>*O1}$zP z9ggz63?k75!}Nui08ObqpecE+a9Bf$m-;#j)*5Vnea$>6g;g^XM5Z$kb(32CfTp8>_1^zZ?-nfPHih*`Zr|wArb(k1Rve70W)UQmPbhZ!HmADW?lR!rR>(p=&C}!}GjXNr43*o}E7GzV^BZf61W1hv%QON}V zU>?Bn>GFT?qMN2TMX=4GObE!$WrQ~egWG@;;5=A%{VM^kCI+EhEZD`VX#9a%ol(^Y z3mJ5Dt68+|P&nkK?3+XZTJ2wRCf4$DB!KiR5HddaA^y8^=8`SAGu=;w8>fJ%7A$chPJ`wn5^)ngC ziiQcvdUN%Wk+D80u~nw4X!s{SX>6gXAY>nzna-xRNS-|ye^0k7Ly$GvgopNVBq{@{70LUUcvza1iZ zi}=Ezf4Q<2B40+7J(v9TP|07hf(Jb}A1=e`6}@jZ7-~C8beVaI-=j5Wib!1cOB>Mu z199i*lHHH{-Sk~ySS0XZ4c~ibe?uJIG^?$s*}C>FpUb4VvXX~C?(e$GF{gg}tEAWS zy+XOSfFRtu0_9(eqf1ydR$W%Ot!PXrBUxT2r4CnHy<$1d1mhmS@m?Ul81euf3i;8P zA-9$_wFvW&y1C5Rp{SHbN_?ihS{Zht006Gn#22xGq0-WC(Rr{9V4;$l+^{AhVbvc3PCImU6O*1xVB(RUMMBXHSO&=^duABZ8f?PH=gbOLKxv}C$%H5Ab`JTv zldhGQr*}tf&5JOaVX66n&n>amJQEhjygO_=cU5csb<~E~>+kc^JWTsL;!DN*nu+Y* zE~zU`$a6^ZH~e|s_Rg_MiY9}NOGUDH$w}WcsgvLZuVh?ZJyW^Ib$OoK0!<0ygD#B& zq7HSZf8~P%etlf8<@#3V-Z9Tbn1#D$5o(#7nu)HsRx9W*9_MvXdb~0XAcG9sYiO)W zl%={^=kGr#I^1d4SG6*E@vBX3`k9?jLi;HS7=D){Wt&uV(Y=cLKQW(VHPh;W^?K8= zC{nG^bdVVW{1xWZ;xS_!Es97AZ$xT|)aD^4MoO<3jgilM{nZ%rc? zFEU6DprJ1_7Rm?*m4^?p^-d5kPbn zDRCWQtgG)G@-pbeV#q*GP`HHBy(CW|IHfBUdRO~d1`*E($q{FXdpH6ttkKr>WlQ;J z)CX%qv0i`Jil7YGU0c|g21`7L!B}0P*@0S%dxoiASu8tY^K>Tb1KpqMNeDZ#&o9vP zd3AUAP=K%z@*A6SD~mdrWqIw&YBSj`ikkV*%o!-OS@YpmShS3u4z7Z$Uz4{-ww)ti z$oaQ$>^}QJ7hQP#uK`Q;J5Q$8!8F}Ge@5_vlt$!OJZ1=2$XddLUyA(=-7uMf*^uDKmUyl&BE5!lgiR4I!Ko0FXP~TPdOs&&ggGi zv#=;ISB^TWC}k7;TIi)o71|7PD$|v9?=2lwA3M*k-X2d?6Ujql#@}BMyZ3E9ek3&)>@(`Zn5AP&xw zc>hguf5hsR(4d746*LC0$GUygbM(5jO#I8;dyPBZ3Rc zpEx$SOKkne6y#KTpau}<69dwC2oD@Af+@hSfP&0GPj3T-KAbx#Inlt_fJ8!vVns{) z;W*_(e+8_00Yv~3ok7rY-Y1mH9r2zSc2WQ{eM5;mswC3nM-_WKChSt2hNAQAMv~C+ z9nfl_OmjMHwO5s8QFJ7L{@$_(Me+k#|GcmiB5G1I2nXX3of%wzqwB*%4-UM|~HaCy!g+ zy%etbdu$6*^7>FirzRK2eP^Qa{fdqtH_JsjT!s6gReRUN{wcowt^hhvsTHu=o%DC8Yeww?1`-eF~OOM(2p# z80Z1X7>jr}6%QGhyQV!5!Fl+P40 z=3Ao`0gT3&7CQ7+O{fn>^<=XXvGd3w%F5Grf~8tW%8nwTsp?nTO%83uY1=BLd*MvwjpZ20qgw{>-gdOmtEfS6jXdYieZE?OCLAygVk~xS{6#o`rxcjq z^$7S6l^;>@~N3_GwV>jirXs@^U?cB5j{^z#dtDfeizJ8^~gG*A` zu(Z_4ppTi--FMuS_BHFe3Rdm_XrRi|@7SRwE97(>pZDIM_bs*RN2A60D~#RcMG4jn zWwzoz8{XAF4NQnanaXg@V_4xoS7S;FbTQUiAxsik4e=gH{S$yJz}@Uy4{OwmHd7{J zq-y@EpZ?|QCfYi6y-VA--G7K=o|D1jm{*ZdIA4eayXA!g9vYI0`h?Qu4-N6m3$(+# zq6F&4uF&H+A5jL{5V&E%=_F133j_AU2qh$LnD_3B=nD^qG4g{Q@)Ime2&UO7hPrB9 z9ZT0~<={2rMS|6tu%Ri(z9qsDNdHQe`;E2X?eCUK)cx{OxpZ|4kczC6%JPtxQo$A_ zTXAUzWkB^WXc8R8pkN7j4>Bw}{#c!3K0SsT%$bk)NnH-Y8ZEt`iK~)?%)FNZng%OP z%!k+&awyK#txGlcYkfXXW>&X4a9im5_2_BNxq2t9N=clyGQsk= z2#zR<+uK1l_y`jthP|K^JVJJlY|nD^L<{sBk{^Yl+EO&P71Ao9wwc?=@Yjez7{QhR z2FBXn!!vLK)3>K+c_dC5i>>iXbxV`2>b~DzsRjF-&&s{BassN^I2RmC!@e@Ux}fQ$ zGjygev&S;@IR#y$==ZLIj0!sqI4rl1$_OP1p@DBQ^{na%ru=4h?a$*CKin~wL~Fx` zt5lQ1l6;`*Dy7v_nJN5ghKuAhWVPEo^C9Wv%wEQ zo;qW!%n(e8UIap_6wFOFGsN*gcfdjLH?(Nm505IwqO1WFT9#&gOSJ`MLDQ4=>?KtEt1Jd?P zc^?(q_gP!OMQ}0r$-_@{ewI(aBc(Eu4H?onbIC{rAoSMCx4AF~Am>lGI-qe0L4r*<*nG0^1|M0uOqahP zGbu!@%~+NGOH(D-3iZQColFvUNMr>r@WPIh`oK&D zy7E_ntuBX6?s3E3rV@LUU^lyB08E-fo&^VvKFC|VUO~NLhs&~k54vR>|K1`D8fHR8 z*w0LAc;kLR8_yvqM(XrAXexrxy)rUkscut2&tFQ32f3-=c}rj;Rj(nlG=SsLu!&#qd{>y5AARKe?#JpzH71T@ zQiPs#>_ll6Z55r`8fuDeDbFyvkZ!~`vrUNTy^HmnKKOAnb*zEKw`y%gVu2{JZ$fM zw_DVyYn5r}EkVp@q-GQ{OpNMmmHk<3*e7s2aGSkeKh`kv@%R1j_3#NE?`*qvF$ymHlFJtOVg<(x*2DArNWOL^^tqs2i;qjgMXm>VRA%bK-N=s5FE2(Br+rJv zkBl%WA?VBHw}+nJ0>!U!I?)wXy;W{L?+JFA>%Yex-z=vP$v3wCtzb zRf-TANw~0v6hjZ5fKDJV5&Fg;TG-z%ORht&2q3nzaks4V4C}b4 zPlVm3pFozNA?fbG`VVK>JF&WK7q3j;V9Aog|A4<2=-Rw?8rTjo!!GQ~PLdjR!mG9Yl-L40|rm8@H?sl0E4r z&-3PGd_LRl&S=fnjW~N{JyLE8RC^qawZu)QjH0w*sAObdThZA1WylBxjw$fn>%(|@ z?MEUK5;!S%MHI>;N?)l^3psP6&vCawg@S4aSe~S;z=;@AvZ+~Fk*ijgG(+nbyC2jg zrE<{E<@~bIl2GXP_4uD740ugVI3l^v&)s+ufXrOjQ()2_+b_1AB9()G=@%|;99jlF zWaZgSp9yWaEbiPqiM(PYKaQlLsAl+j^RQog)s#It$;WWdv|R7*_Vgg6U|RwCtt*>e zXsx{#xzNw>4u=^NBSmQzC7zqvU5^G#ZSKEJtkcXt`OOBUL%lGLsnG=kt!xZ@w|I ztXDhZV_~xhh=I+#n$Kr9$|K`~eUZiNBiP*T#N;b!MUKva9nyLBC1Y&m%r7DYsq#9U z_nD#sZ-{^Zx-%6q7j3S(ntOg-VtA2w*8Y=mUvq*?5jy^r!VE)vwa&>2_h!xQsiq~mxWLy-{ zVyZK1eDVOeXqdL#`KdvCL~`OFe)|5SvfCT3*f3f;F~=n)(VuZW4?3!YNt*8Od#JHr zE)kSzD-N9u@5lU2gIk;$d}Fi;*|(y|#5PZh__k%7Zn#>!Hm$5??d>0yvW`D`AIk z<+-l_uQ$?Q;rlOP-bkjX^PC5T!Mkx0L0jBINK$NrVccIp{Zhn%P^w3eJyF&gNzv{;@h=JFBXURtrM_Jr> zzku1CYS=C*PJ)+`)FEj^XMkT9wh;&k+Ns7pdqr*i2Tg5^U|D7P?Ip*0mAgMlrp7uW z$92cW9OOt)IqugY6N&1ieLBB>XeTB#bXqC7556szJaQbEWku4FLjS?W_hRX^1+sI} zsOj={wjc<-oEbA^Nt@&8{lmv;&6KH4KDcs0fnjkQXv~9^Hz`K{8jUG4aYR}k{U=c~ zxPRI%WWUjBYGloE2f?iJmQT(c#&d}Gs3qaMk;td3v>4|rkHf1K_ls9VgsKNtqG|mG zILjuRM-M*i%+he2)-W)#F`S4wrZ0yqPmxrJfLNR^>Uj4uu!PJTA?e)VdMbu2=G}G@ zBNFVA$RNcY=$(-Ct3-|veFzPgcIt>{?{lu#W6gmapJKHbXVI^mL}?gA%KBN!7C9^N zw?HBBd@tN_+~{hHw;DjeEb5&&aId-za2lfbN*|EVdE7$s>)%hrNPM51T>-y|gZeX&Y~Y8mdH} zBDFY;TsbIp78OZd{h^-EH(d=;!QzvieJwr%Z|Y0k^3n^v116Sg1HaRr+z;eslYw^j z^^fN@Gtj&=9&BFYSTg_m*~Png056_P;aJ_5)-p%gFuMwL$&I6#qQ1bs|KNO0wj~7; zQj-qh%|*eu>XXFHwp@-FjXVdx3pNR|vdFQRXG-110SZH{7JsVQDoZd{js0)8CRmaU z^-~B@NXe2%>lp|FnQ;cSheG1NewidgqfF#p|H*E25XGo^k;!5iS3)8&WzsTf$4)jh zG*d^LoLXuwRzal!N2?+&>bbUwcz@OEj?qvaD=k$ZnYHpdx8BGRrIn3?kGQVr_fsXM zMBhb$$K^n!4oP4T@b7{m%+iWC-@7c3^yAV71Kk$)q`6gy>D zMvYnbciFOrl+<*R#uTKLnP4Sw2R3EHPcX&({@Pb;@AWv&d0%C&su8m)ARDlV7_-W+ zdxL-eOyrp|9$p!o`N%pn07oz_W;-~%=hkEM@3mX=3b^*_1m+vkR7X9}{umBSNkYJG z^oAO|mvmyjWkxne7Z;DRrBf772Dlx67s(_?klg5tz7e2;K(@O&Q2y>YKH0-~n2bSn z$|J)L-A=vLWdEM>UK5?DDmv6?kR)hF3M@s69i)cId7{)oK!$4F?{7LD4#wXS!?Zx~ z=GIhLjd`y-p5^oGqajiAngD%e8~e%4zZuv6wjMKfkRt@L|1NFkjpuE|_#hQnYTGo~ zz^RMF#v!T3%kP*W)j96p+vv94&u!Fr`Kv~rkT1S{x7^;7^twb=RcSi z^O0xD=jlzEF$wH(M{amh_#%lc0gO}ryNEVnp^e*obu6LAUr0llw>oGc1o#h|M-cMr zf!1;lwl8)EyfNq)r7?G6Xnc7&2}<+kd7!#rL+{O{l)^8#snbj3-}~@IbS;r>j4Qvr zLn9fPd$D)@)v`LIELd8xhH2BWYF%v$o2R`b(1@iJSSzT=3mxQ7 zgD^$iQC7m<4K-J7d6vH&y4}vE6OK5IR|Dy>281cWPdPcLT=U7NuubZ{ee&`6Ws?EI zXIx^AE>sY4%4-D2{T(*Xso#y`p}>4b zjYIE=12f8<-X4=+avgA^@-UtI=tMEf0|nsv z3_vf~`nDFQn-tZ9MRhPpa+QO(kW!(y)6Q~Bl32aEDc)0CTA{f%9P;+%rDaEbk&Q=P z%upDu4~w{0+Botk?J+^03fU3%dw5^2*yqYpxBQYf9^L=Gq&J1{Uy=F?IuaVA6lU{U z3$hal=F5IPDGJcA6Mb#_`0IW4L^S(^1UDC2OxEvB`SVPFqy|8Rfor^P-jE9A9Hy!P1SV)lxhzjEY)bI6W*wlF{H@Y!A zp7QYwVemskK8mOJ-*@~`a{b5(@)orwGe!SWyA$~6OUo^Wfq|BPrPU7czjl1Hv#gbPf$lOE_NzURa}8MNnbG+z?GW|HUDa zZebyHOX^E`jWS;kDK^_MB)7ivn42rh=Bo(zxFLsX+i5g=enA2hF2BSho@65A>fcRM2?xUrge{ajOzfq1q{EusXF zTBL(dg1B&KG0y-|9w6jRS?vr%+ZgEXUYYwG{z8GN+X9JpvFEHzSk$<;w>Q#jBYvw> zbiw>u^cuw9jJC-REom#X1i*(A!z{3n5P^qzGIg|p20X@!D;32fYdA>2x4j7Oi;K@g*)fb5eg-BBY(U?({hsEJQCP^thJLPJLsnLuA#ZvmU!IJI6wVIPr}aDO z&=GeZU`!6F`4~m<|Ht74aQ_67FT9}>@nk<(ZsLk$1?j0|XT?}bg4E(Bs%mSiU9Owk zcJ_m=M*AH*_;FF=CxRyP1CefIEI6|0n=9Nqq@#F#1@g#(E5_ZR4r#k}(qp8MibSO! zvxCFVZ}8vHDZD|pN89B{lm)cc|($rG1aFF)uwZRAo}-+ECR%vG{fTVZgG$`Z|lU& zCorUPttmc!Lgz)IWl4z~J;cGG#=A~*$a6Q=3|l-sJ3ID~qdzhb4^=jOYipRFEYMi6 zCSHIEO&SYIoM@+}Q`{4mm`a;^^2Yd2k#r^M3oLyxgkN}P1RQUoB#lvKftRuZ_MKv$ z5we}DI^@-Qp6N}~deXB>wvZ(7wEe#*dBzz);ll}*#V5gj0hI-OgP5L&lu?~Slapp& z)c-6kNndCWG}H4+F|v_RE?HCI1TR(I(57+|5fSlxmx15}i=q4Xx(gF)#w7)9+jbL2 zQegVsO4{H_Z1Od1M6z`P<4cUSuJVCTdS0oCIR-MB%fuW93Gx*haYYKS)0=t1c2(A< zT=z@sNXrWTF6djk%mNHB5H3XU?}Lf2%XnczK}sZv&x$8Fc(p+79c!fJr{>=7{QJE8 zLYNaFjJQKRV9>_k!GS%`oJ=aA0+@F!!bIt9M+q_N4{v#^^bu5&NX8TF+&Jk~5Q+K^ zH1l`*yfVZc-ru;QC^sg-$!1JhJWj06lS5Es80Bu-5y~u`^X>mHS9-$FabzuR?L20j zDov0xy^g+t0jv`T=1AWu`BJJDNAHb{K_F(rtxQSZt?uiP+tV+EoZX~8au)s^IO_d8 zh0B2{XHc#sU1BW_a0d8G4@zi0vDO)9+r*LNf?@dlD`LZxi9AUCfl#;QiO3}+_nmoT z@_)DDrk;_ZF5drN&3prf)`2%Jd(#6I0Z)%X?Yv})p;cqak%z|fg%lLr&yXnZ^}%Ie zwXW)V8GIhJ7dTnFSRJ+FAX~K`7D^)0E?dBW5D^A*v@J5?k0*^;2Z?&Q)~TKpc_w*N zNHA5UqQi6~F~gHAOSxh3{AcEkWJW(P@Uc5O)Bd+*UjaGL{POXyo${*Y=I2BHYdv2- zRg~CcGX9*H_Vn|60Y{S3?C^_R^3hZA-!NtyCX7vKI(B?|vz2xQG zfz~vLOk6r_%-5g$f3ZkR00@O{5`ccSPESvd4J6YOpc8TiV{=-c!brzKCgXV&QZyk6 z!>C@LyUHyq$fu>M2ks4K%xnm|$c_i2ZUpr&-(EF1j49h&ej zuURu=!VWl~1vtt`4$Qq1!#}s6*Ms=zk(P2d_#D}%lpI+TpTlV)szzCIbqeE3hmbPo zb)B`JfKfX%a>pcz$cA3a9;XekCfWGs_ZwI_E7QV(Bb1Y}&M9A(GYwiDXJ@N-+(dI0saIW-V#--Se!AwOKQhq8!BHIIf%6xp{$5)7Bmh*nUwD#9Cxfe9XelXU z3Tuc}sz}FBOd${mL$IYdx-;fDH(u7OvNgAR?+(d!_Zyhk8e;Or)4SIqT~3dGqSt$= zoM7eaZD$dxer9i*wSPc^u#_EZ4Efr)qJJjwW|Ka?{bmTQ-UQ*f-ex{+?m3#c<7bIp zS?tID*Czwk;ZHzDt-Wu zd1}y{>h^P=_Hfeth>_hQk)X`CWA-P!_Mpc8FZUzL(`vVsyzjXNs5XJWdy(2 zkuM)*%$wDsAP;qC8TN?e0jIDrm_CvEc$ugdCtx!+`(Mffvq=P+;80C`uMQ$onRTBf zCoxHKOZi$+0+%Y1CGLrxX+_xA{M6L>8wRFxSKWEc3$1)F95f0aMWKgOXCw}aZP z&zs8Kv4{248T2DFQYYMvQ{y=lqq%!easqI2a%((UI=%n6v$m!j<+D^PsX{$1YvhlU zO464jpHz8BI+W?}Z&q6D*nzXLYvfGy^u~$?lh5rOn&Q4<=?4*vsb>y9cDo$xVk4tN3W^Hw)UJ+ww_ zb&EhcMdk?hFHh>@C}rRGztz~tAt_Aw*sI#2&8i#ZU)|4HK#T9Kaj30 z=*@h#a3|JfqmN_+X;eS39mA~vuu_RCg+}Zb%1)k0R;jPBv=&`OzeXofNRnfLX@*m! zv-0$K9j3x4(1=ECEcD0{vmrqY6F8LrCLMWK{r#OxM^B1M7jmvTuu(%k`}WB&h`QK{ zEnP;}oSb~HTMv9Y(>3jf`2lBswJ&0#)%mw1=G&`lsJ6dqK>dN`!)Xl=pev+GU@)+% zvI?1FFFU%qExi|?fjbT*?I<$;bn{O-9A3k_JM{ebM;8~xdF?^$0CF`ENByKbw7otT z$bxgPWiGFH5NM}ZI$l7ya0`Kg@%rX z2G7myoNCpI5sP2lq8Kz77}pYXOgP6gm%oZ4OF2D;;NU=*?G<+k7Lvw|Aggi88b_)? zk-nuZ@=~E4-%>!8F5NnG@>Lbz?+n9tU95$nhq983{uJLL^9{b!f=disH#NLxt+Z>2 zbzh_8;r!|01Eq4k~OViWSp;AZV z@>Dywfrt2w8wSJA$tSd}`%`hx9AR3DvRsO1T zjlv9@Zz$!kQ{*A-vU5u#&a~)7x@LMN#G%DCuF0?#yNW~kIB1nK4FBL~13Sh1E5ZAD zg`3K!M(QCbCEC!JHP^1EIz4s)UI6AH5+7qL=FEOD0EvbY3qUvJGTNOt>s?q61XVoF z{b)Ez5X5HUZbD z_WW@y{hZJVK%V^gkFj%zKEoX)kKZdR6oF*2&n@z}KR_RWOr}%eo)EW#@!VRM3-W!( z(8K4w1$x#)Pwg20#)YBVlzqyG>sFF>C{PN~-uWfXBR3TKg>q#Qq%G0sy>*jsj02^L zVsGgHC>$B)s^!bwCe0Qcf6>{6&eRt;3jS$mv!<0j=0^~ z_8*s{7#25hmNwhW1VD5hej=!p%&UYB)Xo(lq3eP%(AE)Rz!c?D@)Br?w=yyM(8V0E4o%}v8mm5%V-n5cI zeH!+Ue7mME-2Fb!+i~F$5p8}fy_OMtv=wqaT93mpe%LRErUzUTZ0@rGHg6||bPrw~ ziEdpO{vv+obdRrEABX7zUjBZc)%Ua>aIck;mKITNe2enLEB@4%?dN;?Q1f(Knwu(W zAS6Fa7W0vBrfA!wY5ysLISZTM{&03Szo7Rc@zKd_Z*8E zg8g4aU0itqvL67l>{NhZbPP~Uc{?tE83eRbCMDHW_+FQ>RJS)l8FBl+Af*b*veZI* zW6dzRba%(iToxu{O;^`>M%HnR>-ogJg8PxHTZFSx2c!c-w!BmDU*IB)o}p>_G@8IZ z+*{~di%+EwxN{Nf_VzJLH&vzf^+Fisx}_DJs_g8m|9s6&Z>wIIWGAv1S@N6J^Im=W zl@TL*?01c~ekJj6uEup8uobfuM2(6dxc4CK=J{Tl47mPG^;nux)jij9Z~1fvR2)f? zht}?4hwR~^b@vlRoBOd3k4^$FIX@2Fa@_^0alIWCD{>ZBf{cw% z^OK!et9L5H`jZ4lnjLG+ExcJEHS8Q580N44^(%XI5c)~UO6`J%u&^bZ^1pPN;IGQO z%q>TG(BXXw2O*5X6(+)vn(>r`Eqr!C-a-m+KAJo5-sXgNDv?mmA#=Ria39vpCC9Gf zZPifpl#`>v__;jtFGsyu8l7hkPDdTt-`Dr`EhrsQ25zxyYvrkY1~ooW-CC3^j^vgS zuI4keO!bXIucx266X5#Poy^;3Wfd@uQje(2Q> z^&+#ne;m@9XDQ8tw-J%~t>V;);g@#nazI3Yx-b$0Lzm^U^7sH!VLeE@swDYqB?l@A zy8AP)?%j#6mh~168M{x<2+=LPW*oxp&a7Nrc}0PF1*aZ$7S+}Rs6EdwjdEFj%ySTH zvIJFa#&O0jN6Z!XODkTV12d?4x7`S`sTPt(P>CL&Dk)k$ePeSw0ykD`Y#VNmdS&5% zSH!4e4!8{MB(98;J5gdalWES&o@$?OJ2CxpU<_^Xy`JVD>%K|th+TOoM~7fe4-r9| zw)F#^+}|mVGWT94vVAWaaXRs*@x8 z-kn|KhX5!{GVm;$IZIUQ9(UdlBwNv}$!$wKQuPBqc0cg8j^xG1ogZ*pR4zQX zI%`W-R;kcc+@&U7&3)$gKSI^dt!h#Z`wgv4udo&bxi}#-!CKnMk&IXe3P2sRWo?5! z)djL8bD&2o=)B44I}n1XrX~MPnIL$*nr(@2kLpL}r-J1%_B@9ZR$j!S*Rx}Fru-(i zz^MEhu16WXw`(c9S(;28+>rU5ub8dq3aO^cuy$0>Q7r>we)8Z23a5 z)MR-sl+9?Oc~zqPX&xG64^u$tlYHz;H3xg8&&qW11>o` zvf$T-rwq4uy=#8p^KbVE^ISr(znTS*ha>93wDS|z>{z%DD`{}4K_boy5qVa;@P@WyCZba)n5+^_N%^k)%n=P}TOrj`nu7sw8=ECHdC;u+Bs8?j6%E}2b3up$ zq0LgZbI9t$YtH+&CYc2^D#lZ@zXx(a3P z8UdB*yFEqoh|xjYzY%r}9@rdT^1kij$%onv;oE$(z(gLJpmQ_;H$2$cDU;}(oMMDqF7pyPtwGwe0%ILn{A|skx%eJMXM2d9dLRp!5JC&uOoz= zp#ZG4^v_{&-}vv|k0H~zk+b>e!{!5z@`y*FwL8G4EQS8OTb}7d)|LPrYq;+#VSMrP zzBc3J@lPGVl&|K$Kqmkxe^$tb7s&2SNLNrpnz{F(jPkVU%XngXS=Y_m(B&riuHP31*395XTmr`x zPj$Htg*Df@(MhTt`|qSg1{MjT_nHr67>(%hVX>u99Q@g2smpc-I~RS*0oZ(`0^{pN zb%#_*#P@4_;i@+a(M~h;bJTC{mqPDlYuTE9)Q>V{x^V=U7Gug%K{COJcTi0GzA*ny z?WpB|)|)NgpQQ5S?ZN*{Ejd~q$DBAY#l3p%nnZZek zFK0YxW^@@DEq>U!Q5E(>kx^p!b$(bBq?CIIX08+M`Z006x==)_j~-HO;JpqtEpT30 zRJKkfUv1gCUbOsak!7ZWa)hR4Y>eae8R1W;s~GCo>dQzyKdTMWlU_E_FKhkwMwcT= z!M--1rkQB6olc7PXs64YIO_%Xq*KGAoDpNe&~tIUo50F(rptkT$UMSsAD>rm zP!DTAq@_zTTHLAsWibXOyY^H1!5`Z(oXu#@e zF!<4*+_8)}Gi5@TWk`NNR8LJlV)Vs_&gDQ|vjfFE3DWR|g3JElz#e||Cq|^|&Iy}it^M)T`JjneMx?^< zHBJS68NG~vCza2J#b-fp@f$kyu5RnAIzq$Xvz!G^xnGmkpV~bcg-$voU&$NHmK*5f zzGN0$SaN**M0VU-WTB~-Qk2%Ta54KGRY5JT;DjvuDS^EDCtbf5k^pk6S8G#k3}=nA z0~9w7GKGtngs2n$uB{*Kl`H8I_z*oda6!64nMUscc+Gvne{CQF*Ns>dd|H$Y^HeaIwp4Ay{+By z<7GAYr{(cY84VZx52kc9d*SESrDIIKJhsRz$`IA3 zrnU=hk>+O$(cw0OdIaQdPgaU;S2z(umI`a?W@c(F&%LnuYx(r?Q~)j0=N{=*y(cc77MW2<{li2$8X0vE zZ{oFu)RJvwcg}RYg&5!()%y&Og7ZsZ9qs{mlKWh4C``eK<59}~3@VKys@I6+Fi=t; zL9I<}=)MFocdkjP={$auU2DF5-)KK&=y%ga7c&N+Pc`X_;nOLR$)nr$$A}c&4|w(T z6(pmH{GS4~M&(eJxJu7cs~v`KyB!_3^4k8-+j{X zGu0VP@R}iO{+zOVIY{UINqxM%rvI$gr@=@mi5_3tpu6!1u*Klb{YF_$G^5D%{lKcr zO>z(xDBZin5)d5cJM36mHtzq2pjOHVMILoXCfYvo5T>CXuV=BQ(JxL`(?9 zQf_E;Prwff|C-E?|0^>_uFC94YQ6v214sGGlt=GWQ{sql0Q_juk+PF)5qfI8?ma_% z6ZniWbpaf!ZP7&Lxu#%8$^L#K_v>O(R8@k9F|Iy#X!9bws&b=J!E;Ra0PbzA9^wJ8 z^K|+rXCRYa=3SH;F^xw$<3n4Q{B*PKlr*U1pL6%nRV(8sN&233&CjiCtzLK8v7)uE zbu&5gxcqNY{yHMS$7*69b)NY|?>t$a9C+T2WaX zc<#!bSB8K^d*sFkPvr-D?!pfP%lTV3rvNv)h_F&6Rw^tiGCzR=1V={?ir2`eB2m6p zjwB}V_h2ua6+0(a^a$L8`{23Xczk-J5>NNz4%Y8MJAKXKSl- z&&+Mcly9=0_nYnd6`juTm$FTTklewmNQmR9e{q(<$th*S&?B*o_^70)c6FWF9lID+73reX}75l1BwcN5Y)#rb|^(CP_S9=4s&YME!`EL z+|9N&9xO>GvMB2t&Y*ff>~nJX+>O^^SkEgX8kZ&2#!K)FVnK1>@U?{=f9dJ(ADcTb zRj2f*-(r%S-jeyhE+gs#WwBOPmnl>hDDAMqa{2VUB-GDLerTt3@~+&Sw`mfGSB&UA zS}8Gqb=y^A!DQc@P$TZd*6*H7X5^a>A$0V#60<`Q)3j$8nxtQmDjLJ-Nxo2N)Wc1V( z?Lpe{y7C^Q<9C=p!XotVsr1@l`_(0$y$Bu%-3u_)fbgAaxu@5UwJr7;(bH*9T1P{ICS{_S0 zp7E8^c?1)oYA%2?K+Kjcf5>B<)BS+XUJ?Z3W1iB^f{+Sv_1syifjW6`&DUD%Gcnnw_P+|eLMV|;o!#gS9MhtT!E?+a+&yB&|PzAlS* zKAU!TWNPR)n-{Ds`f((!pS$Ij)E>as3Tw(9E-&)Q-3sc0+O%mcJH;N}>%`G?!N)Rc z7wjq8RpdWul&Z5vt4v6R$fwwVZk$$6;8o9&1xS|%lfQj^lHmZ4%R7G}LOH|Ump1Xe zAlnn1l~ps24p)n!U`Mv&B$Ae4Lsqf?wd3TceGc3S#pn*q7a5PFG|Ais|LjPtXSBffD?)y(v0k zBsMp@VXrSwsGz+c9y;!l1*CJ%D-C1IGYGWB2wo=dz7wIApVCckB?vg|MI_t@Z$s2m zk11;C&j{pq#>6Cj7E*7?N^F^aYIb^CvEm$ zCRe>8tLJtkcshbZG2c-`(sZ)of;->K%#1lEny_H95W;5l%J|hm-fWh{Cv)xT=u-zA zqN8GdLK$AaGYUWX{zl`)tX|rTq`UQ6zm)K^Vb^|j=V0$HfA^0&1p=qUgtM6w8%V{?yM@6t}E7r=p)!DRG4;JSaO&w3wF zQD3i#>8jl&tT4s8gcYPFAp|IO!_d3t-idES=IQDrRcOsol@R;Kh5&vs6H=I4GBuGe zKDl+gdFXMJ|I|T>SObjQ;v-jHVES{mZ!&Vhq{tB5ynGYpmPiaiMkx_l+PNsOT7#LK z*2&sw9Apd8!RFUSzBbE9)Ik$^A~n@~m@5)&1#FmmY*KV|qTtR%y_?5RzoZpcTE#`{ z2%J)W(Z0EEz{B{XLtAF!{xAUlRR1c|(U~2%4^LJ7nbKAr8F70i5pB&3M^*yJlOAnn zQKpSxa>J`eZ71JS*8n?#+&@C?uT2ee!60qN6O^+)y^YVPSR|p3o@xC zH=*)`G^u&#_U9ef!1`%9meEk*dd<2&kb(SX~)F(sP6ESFYu|x)bJuyA) zyOpCGe0;2)bj_(=RBOT{(p~#AQ=zYMsA`j120zjm*$AT4mvzDj`fPE@pT5KJL1w#1 z@9I2Qu(f>8hKjJgLirPQKsaB3OCOz=0lMPg##cTQWlL8sn!({M^w(7qvr$O2$DVv2 zEIkB<>;pl;V>-67`6}%qd&D~4v(4_;OA?{c#psal6$kihV!f1d>M?8_vp=Uv^`NRF zK`!!&UP$q1W;l(w0$)caW9+@6_1F*a;M!Vsm;3LfhW-E?dSfZZkZ1Egg6&kDt>3~F zFbfF;pY}8zN0(2yl6p0-Cx3;TYsb)0@eBCrL^g{6s3APXlbL+`m(VzZAgaSd$TK<$?!vIHBZGpw`-c zx2S3)(NCq*-iV}YX|8aXMKc#hdL6)1_#7yFr0RUNEWWr#=wl5NAaXbbnm+O{w%CnY z!TGJfV0d3Ikt4)dbGZM8Y~pY)mT08XN^J5s{~fA&F=Cr5WGo%JPEi(cNRy)6L` za-MXQ*eH3S@)%x_&zCj7E;0V43-rZ0Bx-k9sf&csQXR|{Lp=;p=l)cRjw4oUu8kZbPh-Ui!r_)WjQW zPM6uqZ7Pxc#0eE~nP&gGaYa=5%{)GpHCd5oh+$|yB(x_}77;6rf>4AaU*X{3$RYGO4EtBglRU&HzS66_ zjhElfFY5N(UF~(p@mg|u``<8&MHQK6o##N8gt6bqm|(DUBsM#>osAYwFDak45KWy(y05Kb6zH(W1;9A}-Nj5?B0Hu|o{ z9zzzc`ea}yN7~LQQwk}%f0I_T;z_1W>`Af5l=k^v|5J0?C;v2;2f@E{$JNPWO9y`3 z5Vkav(5A)-Vba3dD9cPG?`vu)ebNJ{b>vUIwT##i4R8$?`V@LgM$w8F4F~A*XR{3&#&MT_RTUYZ8_vXICs6MJ=;t=WUz>rQ*h;TYDRNX%QTPuXr2$6= z6Vsp8E70M4h9I7XPVo7}TRObM-X1bz>Y=csrsG!U+pT2n3K%d&2 zy)B<03R18$_sburtk-x|JV^Xf#bM_xa}=sws0T}IJ$+tUM2{#GXr z7tA5USIz>7bx*tVsqKQ6=clE`OI-YEX6GCR5N%z6gTT_+s76HDm=NT=5h2nG&Hg7Se zd0?T7v$+3VQ9$F)?fD?R)CJE zBJ^3TG&aI$he)cN6po>8F`nJmSF3PNjICMXD}kn58Is<|uF>oPuK!ch(Mg+-l> zQnQej{n;jt^mmn_)_2rn z8TRYDc}TezHZ=+*L%_qnaqQSa4R+|@vHx|GFK3k8{83CI6ux5FaN_%W`nS?to0sZ8 z`KgMkO5YO|tQfj9;{2(PdThr;1AFQ2|CsvfxTwA_S~>;{KMzoJLl|k_CD*Zwf2`#NXO*N zWeAf_eOyS@^iX(6wtz2YSRSoJV@8>~Ie@ereY+B!&N-uIHY-$Tt)<~67JtqyU_yWc zWBx&Xd>)Sc87E!-xNrn8<GMYai15k z^JXJ>?(n(nVHWr5X=LF50|>lrB;JG7mJ>&vAeUF5{wq;Y=Pm|!NY|1FnPIY7cm5GJ zG91;PAjJS5w)h5K_2u_*op%2K)6$6801ONr#9>-my(2jR2Lq>)dOjo1)PR50$p~D5 z!eoS>_{Hyj)-+X*8j-s5@L^wf?5AD!rC$C()qURpE4IK-_t)%jO*tS8y@;Z{>yD{) zm!%npwzoBA=T%TRX`m6H8}^WMnl@~ds|5I9!`AGmMvyPJ`Rw+B_V4$l(tUUq0|8&HD^K3Y^aCPw~(9`lfRXL?F*fz7WDA`%M z7i4DmPk~to(d~%n?&1;i{VMrx?KEueWll;Dhb17zfZL^8_x%D!6m?+shA!K@OFE+m zKdDh&WnD|O%=DxyE&W|PW`+4rrbs9CaRV(_WL)1t8oa)K{j1zv3!xrf=d)fh!4Lt& zT!B-#sVQ&!?k)=_5Bd1FVO}WBc9Vm;%%ZAoibPQCjEMetOpvqH0a#SfM;e%)Uf z`TX!IY;-uXNc|Hvco$cw(W|*P9q5vyIIo}ckX)|xwK3eBm_t)5YG9)o0Jja*@lqYG zuGg)XMpp>~ky@HVk?GUEc8vhlkETw)i9|>kN|PH8@G^tIth8YrU3XYfx4>X9^==ka z6j6H5wi2r?cG!(gvy>_NR4m|W+`wJ>CJ}U1p$@%(@smUo~eM2GVOuWp38-t?-l;4vv*> zw%CDKK)1%3#LLV3#*?wjj>2+r2!}Q<9>{^}F`T22Zv4Fjw%xRH(YoyPe1T)EeEc6` z6mYMP{;?}Vr~ch5Y|eg)s}xQk5*n

7DrX_-0Gf_ab6CaVp#ywR21dzP`9f+3$U7nMzq-EQ+RRLm|6~V@QwI)eF z4z~6&mY^R>?uYw?Ekgk3xa390g7rm$l8V?xMc=|!X|CAqrvOKEi0!0OAsCwm7b*fm)FTtB0nO7w7bZ&6f5cDFh%3{-D6;6<#TyARC__f4mwYU={;%K$CbddWr6V+ks=0tcbtmr2#|zW-2xLacu|!Zc`15^; z^x94uVDUQKc$kl04T~=JWz;&7DM$xHO@$nlB6JgE66_OHy%^nG91aL_z$CF}rN5uq zHElWq;&|Zs6AC-bVD309)OGcP5P8y2kr=Km`5p@`DK@ORORm;Ee?Z_kv}nWc_%sov zoaa-}Mbv_)gB2kr+{cEF65_e_Lji7E1fKDH|8Xu$>aV1!#q#!qkeITJPFvVKFE6-%5C!;FUsI4o z{r&C|13;5EQ74B6`EX=`b8koATgM#W+16n>^OT3&OC5=$_ODN~9do7w3l$jzQK5)+ zOtCk7^y*BKP(Y_py95nHM)yUR)#umS@MIIaf0B|9Kut2fuwZB#StesaHzDwN3KBO@gxxQP#1fHAx_p5IiB^ETCg%IYCq6&9w+#w9GYEWa7~1x` zC%s2B>SWjQy?9xc8?=eup+0gH!N#l*>{~V@Hm68VDSDvEK=0&p#nd5znYD3b9cl0zqqfWr8&hgGUc; z3cV_z23lH<iqZJmDu zFU^Y`AnYF3N_; zI4ICkKIW|sU;n#d_58>{wLYQPkdSYv10zwP{|32*jt>`1rG@pv$fv)>8foGnoY@fd z_1j2rNv4li>RpV}OiizQTd@KUPkHZtGHP!>y-I-W)pSA5WB64nirAhm86?yv6t?t0 zp?2D0>+hG+>XB${o0Mh4)+gm%BNnjd+3g^u1te>PqzAN9$H&t}qeA3f%)cVzs2iS_ z$dL3?Lv{2S#{};s2!qMT9%!tlSW7?fF1tdpuzzPh9#uLdqfxuLtT?)jt--3UGn!(v6PK+yKme4_Ib~* zcaCcshq7z;qQMmKnf!pa^R@S|UcGKtf&UJx8HkGEfa~J<*yYj*Fvc<#Qa=9bG?``# z5oqVA4?R1>|5NvG?mi;b{OyjtqIsq{pIB)39o*9#@kRP%g1GJN*a(99gcurpc8(72 zy_weOnHUt1RG7e{v=lY}a4FuaCp&ict*S6e0btJCLPW&xL`G$ph=*^!@bcp0<>UKr zA^y5I`Sd+6PhL`&MS@wBZZ1mqBv0F`F$+5{DS=o5V*d~P4N_o)}j=U;mC5gDDGxI^}vgPU}HjTA-!w-{~~QJON~ zPB7Lm$a%8F9$@`OGQd;W={ODQ&^QcAr?r#F*EUH;oKO?h>x_Z2oPFL6pxWMu;tD5Bz(#B_Ts z8+oDOAN59japmBKzmp*GFCH<(tMi`GA+%7FQ@E6&kSIoz{U`=2<5stgPBqZ@6@3rr zVzWK5+O0Mt`QP_i)wPKv3uDhPJBE7@r02UAA+k zwG|J>L~*Hp`(GzkF!MZXv}~Mup4*Gw4ozi1%?QVp&0YZV zoDOcH7jhp~Q)-?cfl#S47TScFh`JA2(nn_n(;;~|#`mLr({Hc1+8^Msp{JvMQ&mbm z)%&}AO5AT|&xuO-dym2;(>eyn=Y(Ozi3)8~9NB!zESHPoq6OAEdwKEg{D^ek;1$@c z5N1yV=u*`874FvaqqJf=-X5>sHS)6{C!PM^C-wnmD0cPQ`j#E|HP+VFMQQn6dGUd~ zSp*}euow5IY*D%S47Y!(aNQ{}d+Pl%)Lwc^^60oKNNVdryiNTZ$s|#Nbh*Bo5}cO} zi2hT(1*&5cHK}w{5$gl299}z?`p;H>Q;hg)QzZ#{zsq}AWD0HHQK;Y1-i9N$hNU=|SYi zDxjLfE#7}DpxX8$=4@ZJDTPkc_wPE*X@Ad#zxFub$JTvQhbYwBNoH>q_=Dpwp(-eHJ1=u`3^GkK|j}E75>=f>M{Mr9kNR*@wT#6K+&am+8 zgy!@|s5Nl~B9xmhvM|LJ*6G+`zJeHyRIaq27(P01JP|k;p@mOL3)6GSZ%hUiWNFUU z9!hv!7ihoh`}Qw@Xffr0pmQ(bQQj_Y#GQ^itn=(zXtD`YJrgBdkO=9oID32wk-gy2 z8a-*SZ#1t{`LJu>e!rkhg0Q9vIeU9wfKcT(`+Zoxe*dR`-`97<)~u{VDVG*6kI?{e zw3;N0JaJkIn7K0UeIum)@L3a}=#pQLt<^II$Dh_=WvG?XS=pP|5pn%Ocfn}#+Ihv} z{hCAzfiuia>|r)nD-GT*JyZuxTu|@ooEKuo@8Wp(0?lM)JC%1Uar@m%o@g(go=<*a z_6k*o!U5s(ms;ccSejA6drU1tIX~;mu)d7n577KX^B(>0kqEz(tOy{9Tf`R=4C-Q^ z0yvp*K?mVS5=(I+z8M_xXK$^mtE~Zd?-~pp_y)>seg$ANww8T#QU(BC{;6A%QcR4$ zWW_ERy(nJ01x?gI_z^E0-Rzz)DUU;~Xww!lYyzi2NlWcMH&zfwW(vVr+UrAizi57; zAJ!XPGZ`&p>EC4YZAvBKP4nkaxY`eyV6#@pFy}kKk{_X^9=g6#Fc-Cs>4FKP*j?io z5Pq>;Pouh=sjq_oucp4Vnf1+G^D=h3{NgHF4*`Ic2snL!c0(OE}>ggyw?dZ&0q-whs8Kw%_3q<#wnQjK_Bx%@;R9E`4e-MNEH;4B;$m zSE1BMdx-<-)6G|e8gh;!TkJXn$m+k3&|(-!Nhz;T@A3a;u8j4caj25CrGsG+sL=#X zs2n3Ys6I34yqVPpfi{xf%yvh>2Q=;Kt3B3R4}YPNofLWkcdHo_b5!8(N&~?T;b<6b z!V}b`>kMp=7!VeA89UuXa9LCcpJv|Yxx$DLIvfa|XK*L2(w*aoQHdWjbKyVa2b1Kq ziSC+R&fiQYGdSM19xIN{>$h5)p*}>XiVDmQ=rL?VN=bTY0@s|N2*1RTtM$zgp0AajXnRc_e^X7qi-1R4rq>muLiExGnNYOr_q0P z3vk#-I&ZT0?(mbgpCv*E7R6@?moJ*O?@ODv8daY9`^h2ChHbHdeH-~O7W7~cZfOxY z>2x@FCZvsNSv93D>8k*;%k->EihA@O5*#)_j z==yu=n@MyUS(FW0-*w{w>=USaoJoJyo^0BL&@R-O%I)SH`kzZeIxxCGlUgT**-1MY zB8)hv+fBWbpQ1fgCX>nj=EE}rN(}(wbe>3G!m)gV6NCEg3e)54gL9I!Dm<4GODtGbRW|UDObZDB1NAg3W7+r#)IMv

XlnNBu_+ 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 z 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 literal 0 HcmV?d00001 diff --git a/src/components/Camera.tsx b/src/components/Camera.tsx index fd0c4d3..18799e2 100644 --- a/src/components/Camera.tsx +++ b/src/components/Camera.tsx @@ -1,10 +1,12 @@ import React, { useRef, useEffect } from "react" -type WebcamProps = { - onStreamReady: (video: HTMLVideoElement) => void +interface CameraProps { + detectStart: (video: HTMLVideoElement) => void + canvasRef: React.LegacyRef | undefined } -const Camera: React.FC = ({ onStreamReady }) => { +export default function Camera(props: CameraProps): React.ReactElement { + const { detectStart, canvasRef } = props const videoRef = useRef(null) const startVideo = (): void => { @@ -26,7 +28,7 @@ const Camera: React.FC = ({ onStreamReady }) => { videoRef.current.onloadedmetadata = () => { if (videoRef.current) { videoRef.current.play() - onStreamReady(videoRef.current) + detectStart(videoRef.current) } } } @@ -41,6 +43,13 @@ const Camera: React.FC = ({ onStreamReady }) => { }) return ( +
+
) -} - -export default Camera +} \ No newline at end of file diff --git a/src/components/CameraContianer.tsx b/src/components/CameraContianer.tsx deleted file mode 100644 index de9f860..0000000 --- a/src/components/CameraContianer.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import React from "react" -import Camera from "./Camera" - -interface CameraContianerProps { - detectStart: (video: HTMLVideoElement) => void - canvasRef: React.LegacyRef | undefined - isModelLoaded: boolean -} - -export default function CameraContianer(props: CameraContianerProps): React.ReactElement { - const { detectStart, canvasRef } = props - return ( -
- - -
- ) -} diff --git a/src/components/PoseDetector.tsx b/src/components/PoseDetector.tsx index 8161f1c..eecee31 100644 --- a/src/components/PoseDetector.tsx +++ b/src/components/PoseDetector.tsx @@ -4,7 +4,8 @@ import { detectSlope, detectTextNeck } from "@/utils/detector" import { drawPose } from "@/utils/drawer" import { worker } from "@/utils/worker" import { useCallback, useEffect, useRef, useState } from "react" -import CameraContianer from "./CameraContianer" +import Camera from "./Camera" +import GuidePopup from "./Posture/GuidePopup" const PoseDetector: React.FC = () => { const [isScriptLoaded, setIsScriptLoaded] = useState(false) @@ -14,6 +15,7 @@ const PoseDetector: React.FC = () => { const [isModelLoaded, setIsModelLoaded] = useState(false) const [mode] = useState("snapshot") const [isSnapSaved, setIsSnapSaved] = useState(false) + const [isPopupVisible, setIsPopupVisible] = useState(false) const modelRef = useRef(null) const snapRef = useRef(null) const resultRef = useRef(null) @@ -142,18 +144,28 @@ const PoseDetector: React.FC = () => { // setIsSnapSaved(false) // } + // 팝업 열기 + const handleShowPopup = () => { + setIsPopupVisible(true) + } + + // 팝업 닫기 + const handleClosePopup = () => { + setIsPopupVisible(false) + } + return ( <> {isScriptError ? ( - "스크립트 불러오기 실패" + "자세를 트래킹 하기 위한 모델을 불러오는 것에 실패 했습니다. 잠시 후 다시 시도해 주시기 바랍니다." ) : !isScriptLoaded ? ( "스크립트 불러오는 중" ) : (
- + {isModelLoaded && ( <> -
+
{!isSnapSaved ? "바른 자세를 취한 후, 하단의 버튼을 눌러주세요." : getIsRight(slope, isTextNeck) @@ -161,8 +173,11 @@ const PoseDetector: React.FC = () => { : "올바르지 않은 자세입니다."}
{!isSnapSaved && ( -
- - ) : ( - - )} -
- )} - {mode === "skeleton" && ( - <> -
자동 모드입니다. 자동으로 부적절한 자세를 추적합니다.
-
- - -
- - )} -
-
- -
-
- )} */} + {isPopupVisible && } {/* 팝업 표시 */}

)} diff --git a/src/components/Posture/GuidePopup.tsx b/src/components/Posture/GuidePopup.tsx new file mode 100644 index 0000000..918baf6 --- /dev/null +++ b/src/components/Posture/GuidePopup.tsx @@ -0,0 +1,27 @@ +import GuideImage from "public/images/posture-guide-2x.png" + +const GuidePopup = ({ onClose }: { onClose: () => void }) => { + return ( +
+ {/* blur 처리 */} +
+ {/* 이미지로 대체된 가이드 부분 */} +
+ 바른자세 가이드 +
+ +
+ +
+
+
+ ) +} + +export default GuidePopup diff --git a/src/components/SideNav.tsx b/src/components/SideNav.tsx new file mode 100644 index 0000000..486d125 --- /dev/null +++ b/src/components/SideNav.tsx @@ -0,0 +1,94 @@ +import MainCraftIcon from "public/icons/posture-craft-side-nav-icon.svg?react" +import MonitoringIcon from "public/icons/side-nav-monitor-icon.svg?react" +import AnalysisIcon from "public/icons/side-nav-analysis-icon.svg?react" +import CrewIcon from "public/icons/side-nav-crew-icon.svg?react" + +const navItems = [ + { + icon: MonitoringIcon, + label: "모니터링", + link: "/monitoring", + className: "bg-gray-700", // 선택 됐을 때 + }, + { + icon: AnalysisIcon, + label: "내 자세 분석", + link: "/analysis", + }, + { + icon: CrewIcon, + label: "공작소 크루", + link: "/crew", + }, +] + +const footerLinks = ["이용약관", "의견보내기", "로그아웃"] + +export default function SideNav() { + return ( +
+ ) +} diff --git a/src/constants/routes.json b/src/constants/routes.json index 0e59b50..4734272 100644 --- a/src/constants/routes.json +++ b/src/constants/routes.json @@ -1,5 +1,6 @@ { "MONITORING": "/monitoring", "LOGIN": "/login", - "AUTH" : "/auth" + "AUTH" : "/auth", + "SOCKET": "/socket" } \ No newline at end of file diff --git a/src/layouts/Layout.tsx b/src/layouts/Layout.tsx index fd00ec9..e833c1d 100644 --- a/src/layouts/Layout.tsx +++ b/src/layouts/Layout.tsx @@ -1,32 +1,15 @@ import React from "react" import { Outlet } from "react-router-dom" +import SideNav from "@/components/SideNav" const Layout: React.FC = () => { return (
- -
+ + + {/* Main Content */} +
diff --git a/src/routes/Router.tsx b/src/routes/Router.tsx index 3f1a501..67dde87 100644 --- a/src/routes/Router.tsx +++ b/src/routes/Router.tsx @@ -2,16 +2,16 @@ import React from "react" import { BrowserRouter, Route, Routes, Navigate } from "react-router-dom" import { AuthPage, MonitoringPage } from "@/pages" import { Layout } from "@/layouts" -import routes from "@/constants/routes.json" +import RoutePath from "@/constants/routes.json" const Router: React.FC = () => { return ( <> - } /> + } /> }> - }> + } /> } /> From 9981dec11798eabcb665d6489b0d298566130295 Mon Sep 17 00:00:00 2001 From: G-hoon Date: Sun, 18 Aug 2024 05:05:59 +0900 Subject: [PATCH 008/116] =?UTF-8?q?[cicd]=20discord=20=EC=97=90=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC=EC=9D=B4=20=EC=98=A4=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/discord-pr.yaml | 19 ++++++++++++++++++ .github/workflows/main.yml | 32 ++++++++++++++++++++++++++----- 2 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/discord-pr.yaml diff --git a/.github/workflows/discord-pr.yaml b/.github/workflows/discord-pr.yaml new file mode 100644 index 0000000..8e04ea0 --- /dev/null +++ b/.github/workflows/discord-pr.yaml @@ -0,0 +1,19 @@ +name: Discord PR Notification + +on: + pull_request: + types: [opened, reopened] + +jobs: + notify_discord: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Discord Notification + env: + DISCORD_WEBHOOK: ${{ secrets.DISCORD_PR_WEBHOOK }} + uses: Ilshidur/action-discord@master + with: + args: '새로운 PR이 열렸습니다! @이광훈 @배지훈 \nPR: ${{ github.event.pull_request.html_url }}\n작성자: ${{ github.event.pull_request.user.login }}\n제목: ${{ github.event.pull_request.title }}' diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 582e3dd..51376ad 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -7,18 +7,40 @@ jobs: build: runs-on: ubuntu-20.04 steps: - - name: Checkout source code. + - name: Checkout source code uses: actions/checkout@v3 - + - name: Install dependencies run: yarn install - + - name: Generate build run: yarn build - - - name: Deploy + + - name: Deploy to S3 + id: deploy env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} run: | aws s3 sync --region ap-northeast-2 dist s3://alignlab-client --delete + continue-on-error: true + + - name: Discord notification - Success + if: steps.deploy.outcome == 'success' + env: + DISCORD_WEBHOOK: ${{ secrets.DISCORD_DEPLOY_WEBHOOK }} + uses: Ilshidur/action-discord@master + with: + args: "🎉 배포가 성공적으로 완료되었습니다! 브랜치: develop" + + - name: Discord notification - Failure + if: steps.deploy.outcome == 'failure' + env: + DISCORD_WEBHOOK: ${{ secrets.DISCORD_DEPLOY_WEBHOOK }} + uses: Ilshidur/action-discord@master + with: + args: "❌ 배포 중 오류가 발생했습니다. 브랜치: develop" + + - name: Check deploy result + if: steps.deploy.outcome == 'failure' + run: exit 1 From 39bedc882206f8748fdf2303adbea5607cf0d346 Mon Sep 17 00:00:00 2001 From: G-hoon Date: Sun, 18 Aug 2024 05:31:07 +0900 Subject: [PATCH 009/116] =?UTF-8?q?[feat/cicd]=20discord=20=EC=B1=84?= =?UTF-8?q?=EB=84=90=EC=97=90=20=ED=95=B4=EB=8B=B9=20=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80=EA=B0=80=20=EC=A0=81=EC=A0=88=ED=95=98=EA=B2=8C=20?= =?UTF-8?q?=EB=B3=B4=EC=9D=B4=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/discord-pr.yaml | 8 +++++++- .github/workflows/main.yml | 26 ++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/.github/workflows/discord-pr.yaml b/.github/workflows/discord-pr.yaml index 8e04ea0..a7b8377 100644 --- a/.github/workflows/discord-pr.yaml +++ b/.github/workflows/discord-pr.yaml @@ -14,6 +14,12 @@ jobs: - name: Discord Notification env: DISCORD_WEBHOOK: ${{ secrets.DISCORD_PR_WEBHOOK }} + DISCORD_USERNAME: GitHub + DISCORD_AVATAR: https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png uses: Ilshidur/action-discord@master with: - args: '새로운 PR이 열렸습니다! @이광훈 @배지훈 \nPR: ${{ github.event.pull_request.html_url }}\n작성자: ${{ github.event.pull_request.user.login }}\n제목: ${{ github.event.pull_request.title }}' + args: | + 새로운 PR이 열렸습니다! <@lkhoony> <@baezzy1789> + PR: ${{ github.event.pull_request.html_url }} + 작성자: ${{ github.event.pull_request.user.login }} + 제목: ${{ github.event.pull_request.title }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 51376ad..2974e9b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,6 +9,15 @@ jobs: steps: - name: Checkout source code uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Get commit message and author + id: get_commit_info + run: | + echo "::set-output name=message::$(git log --format=%s -n 1)" + echo "::set-output name=author::$(git log --format=%an -n 1)" + echo "::set-output name=author_username::$(git log --format=%ae -n 1 | cut -d@ -f1)" - name: Install dependencies run: yarn install @@ -29,17 +38,30 @@ jobs: if: steps.deploy.outcome == 'success' env: DISCORD_WEBHOOK: ${{ secrets.DISCORD_DEPLOY_WEBHOOK }} + DISCORD_USERNAME: GitHub + DISCORD_AVATAR: https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png uses: Ilshidur/action-discord@master with: - args: "🎉 배포가 성공적으로 완료되었습니다! 브랜치: develop" + args: | + 🎉 배포가 성공적으로 완료되었습니다! + 브랜치: develop + 커밋: ${{ steps.get_commit_info.outputs.message }} + 작성자: ${{ steps.get_commit_info.outputs.author }} - name: Discord notification - Failure if: steps.deploy.outcome == 'failure' env: DISCORD_WEBHOOK: ${{ secrets.DISCORD_DEPLOY_WEBHOOK }} + DISCORD_USERNAME: GitHub + DISCORD_AVATAR: https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png uses: Ilshidur/action-discord@master with: - args: "❌ 배포 중 오류가 발생했습니다. 브랜치: develop" + args: | + ❌ 배포 중 오류가 발생했습니다. + 브랜치: develop + 커밋: ${{ steps.get_commit_info.outputs.message }} + 작성자: <@${{ steps.get_commit_info.outputs.author_username }}> + 실패한 워크플로우: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} - name: Check deploy result if: steps.deploy.outcome == 'failure' From 8f209dcac05ea3913d044954b9d6f0cb65e8bd37 Mon Sep 17 00:00:00 2001 From: G-hoon Date: Sun, 18 Aug 2024 05:34:37 +0900 Subject: [PATCH 010/116] =?UTF-8?q?[feat/cicd]=20discord=20=EC=B1=84?= =?UTF-8?q?=EB=84=90=EC=97=90=EC=84=9C=20=EA=B4=80=EB=A0=A8=EC=9E=90?= =?UTF-8?q?=EB=93=A4=EC=9D=B4=20=ED=83=9C=EA=B7=B8=20=EB=90=98=EB=8A=94?= =?UTF-8?q?=EC=A7=80=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/discord-pr.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/discord-pr.yaml b/.github/workflows/discord-pr.yaml index a7b8377..1dcd94e 100644 --- a/.github/workflows/discord-pr.yaml +++ b/.github/workflows/discord-pr.yaml @@ -19,7 +19,7 @@ jobs: uses: Ilshidur/action-discord@master with: args: | - 새로운 PR이 열렸습니다! <@lkhoony> <@baezzy1789> + 새로운 PR이 열렸습니다! @lkhoony @baezzy1789 @이광훈 @배지훈 PR: ${{ github.event.pull_request.html_url }} 작성자: ${{ github.event.pull_request.user.login }} 제목: ${{ github.event.pull_request.title }} From cb00b9f30603750b96885ba53152f1d02b46f1e0 Mon Sep 17 00:00:00 2001 From: G-hoon Date: Sun, 18 Aug 2024 05:46:50 +0900 Subject: [PATCH 011/116] =?UTF-8?q?[feat/cicd]=20PR=EC=9D=B4=20=EC=97=B4?= =?UTF-8?q?=EB=A0=B8=EC=9D=84=20=EB=95=8C,=20discord=20=EC=B1=84=EB=84=90?= =?UTF-8?q?=EC=97=90=20user=20id=20=EA=B0=80=20=ED=83=9C=EA=B7=B8=20?= =?UTF-8?q?=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/discord-pr.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/discord-pr.yaml b/.github/workflows/discord-pr.yaml index 1dcd94e..4b40806 100644 --- a/.github/workflows/discord-pr.yaml +++ b/.github/workflows/discord-pr.yaml @@ -19,7 +19,7 @@ jobs: uses: Ilshidur/action-discord@master with: args: | - 새로운 PR이 열렸습니다! @lkhoony @baezzy1789 @이광훈 @배지훈 + 새로운 PR이 열렸습니다!<@${{ secrets.DISCORD_ID_1 }}> <@${{ secrets.DISCORD_ID_2 }}> PR: ${{ github.event.pull_request.html_url }} 작성자: ${{ github.event.pull_request.user.login }} 제목: ${{ github.event.pull_request.title }} From be27b4bcd29f4619e60e3215e1453a761027c201 Mon Sep 17 00:00:00 2001 From: G-hoon Date: Mon, 19 Aug 2024 22:43:19 +0900 Subject: [PATCH 012/116] =?UTF-8?q?[feat/#19]=20=EB=B9=8C=EB=93=9C=20?= =?UTF-8?q?=EC=8B=A4=ED=8C=A8=20=EC=9D=B4=EC=8A=88=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/SideNav.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/SideNav.tsx b/src/components/SideNav.tsx index 486d125..7e0bc50 100644 --- a/src/components/SideNav.tsx +++ b/src/components/SideNav.tsx @@ -48,7 +48,7 @@ export default function SideNav() { {/* Navigation Links */}
+
) -} \ No newline at end of file +} diff --git a/src/components/SideNav.tsx b/src/components/SideNav.tsx index 486d125..ea8a786 100644 --- a/src/components/SideNav.tsx +++ b/src/components/SideNav.tsx @@ -2,6 +2,8 @@ import MainCraftIcon from "public/icons/posture-craft-side-nav-icon.svg?react" import MonitoringIcon from "public/icons/side-nav-monitor-icon.svg?react" import AnalysisIcon from "public/icons/side-nav-analysis-icon.svg?react" import CrewIcon from "public/icons/side-nav-crew-icon.svg?react" +import { useAuthStore } from "@/store/AuthStore" +import { useEffect } from "react" const navItems = [ { @@ -25,6 +27,8 @@ const navItems = [ const footerLinks = ["이용약관", "의견보내기", "로그아웃"] export default function SideNav() { + const nickname = useAuthStore((state) => state.user?.nickname) + return (