From 349c48e168b9f2580334422228acde7d1b21bede Mon Sep 17 00:00:00 2001
From: 李凌 <344137771@qq.com>
Date: Fri, 05 Jun 2026 11:19:15 +0800
Subject: [PATCH] 1

---
 src/views/cryptos/AssetsCenter/index.vue                    |  105 
 src/components/Transform/deliveryContract/hold.vue          |    8 
 src/i18n/th.js                                              |    4 
 src/views/my/assets.vue                                     |   92 
 src/i18n/Italy.js                                           |    4 
 src/i18n/Japanese.js                                        |    4 
 src/components/fx-footer/index.vue                          |   24 
 src/i18n/en.js                                              |   16 
 src/views/quotes/List.vue                                   |    2 
 src/components/Transform/assetsCenter/contract.vue          |  281 
 src/components/Transform/assetsCenter/financialList.vue     |  172 
 index.html                                                  |    2 
 vite.config.js                                              |    2 
 src/views/cryptos/financialManagement/machineConfirm.vue    |  298 +
 src/i18n/Spanish.js                                         |    3 
 src/views/cryptos/Funds/index.vue                           |  160 
 src/i18n/fa.js                                              |    4 
 src/views/morePage/index.vue                                |    7 
 src/views/trade/index.vue                                   |  103 
 public/img/App.png                                          |    0 
 src/components/Transform/list-quotation/index.vue           |    4 
 src/views/cryptos/loan/loanHistory.vue                      |  256 +
 yarn.lock                                                   | 4587 +++++++++++++++--------------
 public/desk/manifest.json                                   |    4 
 src/components/Transform/contract-futrue/index.vue          |   15 
 src/components/Transform/contract-header/index.vue          |   36 
 src/components/Transform/cry-nav/index.vue                  |   24 
 src/utils/index.js                                          |    5 
 src/components/Transform/assetsCenter/financial.vue         |  293 +
 src/components/Transform/perpetual-open/index.vue           |   18 
 src/views/cryptos/financialManagement/machineBuy.vue        |  434 ++
 src/i18n/Deutsch.js                                         |    4 
 package-lock.json                                           |   21 
 src/views/login/index.vue                                   |    6 
 src/views/cryptos/PerpetualContract/index.vue               |   28 
 src/views/cryptos/financialManagement/index.vue             |   20 
 src/i18n/vi.js                                              |    4 
 src/views/cryptos/financialManagement/miningMachineHome.vue |   20 
 src/i18n/zhcn.js                                            |   15 
 src/views/cryptos/order/MiningMachineOrder/index.vue        |  314 +
 src/config/index.js                                         |    4 
 src/assets/imgs/logo.png                                    |    0 
 src/i18n/korean.js                                          |    1 
 src/views/cryptos/FinancialHistory/index.vue                |  150 
 public/relicon.png                                          |    0 
 .env                                                        |    2 
 src/service/fund.api.js                                     |    8 
 src/views/homePage/index.vue                                |   48 
 src/i18n/cn.js                                              |   16 
 src/components/Transform/assetsCenter/overview.vue          |  414 +-
 src/assets/image/assets-center/logo.png                     |    0 
 src/views/cryptos/loan/index.vue                            |  610 ++-
 src/components/Transform/assetsCenter/assets.vue            |  593 ++-
 53 files changed, 5,376 insertions(+), 3,869 deletions(-)

diff --git a/.env b/.env
index 2530958..86cdb8c 100644
--- a/.env
+++ b/.env
@@ -1,2 +1,2 @@
-VITE_APP__TITLE = "FracTionxEX"
+VITE_APP__TITLE = "Coinvesx"
 VUE_APP_THEME = "theme"
\ No newline at end of file
diff --git a/index.html b/index.html
index 775bb4c..a6ed2e1 100644
--- a/index.html
+++ b/index.html
@@ -11,7 +11,7 @@
   <meta name="theme-color" content="#131a2e">
   <meta name="apple-mobile-web-app-status-bar-style" content="#131a2e" />
   <link rel="apple-touch-icon" href="./public/img/App.png">
-  <title>FracTionxEX</title>
+  <title>Coinvesx</title>
 </head>
 
 <body>
diff --git a/package-lock.json b/package-lock.json
index 38edbe2..fff9402 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5983,8 +5983,7 @@
     "@vant/use": {
       "version": "1.5.1",
       "resolved": "https://registry.npmjs.org/@vant/use/-/use-1.5.1.tgz",
-      "integrity": "sha512-Zxd7lDz/LliVYEQi3PR9a8CQa/kGCVzF0u9hqDMaTlgXlbG0wHMFPllrcG0ThR6bfs8xrYVuSFM9pJn6HSoUGQ==",
-      "requires": {}
+      "integrity": "sha512-Zxd7lDz/LliVYEQi3PR9a8CQa/kGCVzF0u9hqDMaTlgXlbG0wHMFPllrcG0ThR6bfs8xrYVuSFM9pJn6HSoUGQ=="
     },
     "@vitejs/plugin-legacy": {
       "version": "3.0.2",
@@ -6014,8 +6013,7 @@
       "version": "3.2.0",
       "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz",
       "integrity": "sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==",
-      "dev": true,
-      "requires": {}
+      "dev": true
     },
     "@vue-macros/common": {
       "version": "1.3.3",
@@ -6177,8 +6175,7 @@
       "version": "5.3.2",
       "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
       "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
-      "dev": true,
-      "requires": {}
+      "dev": true
     },
     "acorn-node": {
       "version": "1.8.2",
@@ -7035,8 +7032,7 @@
       "version": "8.8.0",
       "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz",
       "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==",
-      "dev": true,
-      "requires": {}
+      "dev": true
     },
     "eslint-plugin-prettier": {
       "version": "4.2.1",
@@ -7999,8 +7995,7 @@
     "pinia-plugin-persistedstate": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.1.0.tgz",
-      "integrity": "sha512-8UN+vYMEPBdgNLwceY08mi5olI0wkYaEb8b6hD6xW7SnBRuPydWHlEhZvUWgNb/ibuf4PvufpvtS+dmhYjJQOw==",
-      "requires": {}
+      "integrity": "sha512-8UN+vYMEPBdgNLwceY08mi5olI0wkYaEb8b6hD6xW7SnBRuPydWHlEhZvUWgNb/ibuf4PvufpvtS+dmhYjJQOw=="
     },
     "pngjs": {
       "version": "5.0.0",
@@ -9034,8 +9029,7 @@
     "vue-demi": {
       "version": "0.14.5",
       "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz",
-      "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==",
-      "requires": {}
+      "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA=="
     },
     "vue-eslint-parser": {
       "version": "9.3.0",
@@ -9074,8 +9068,7 @@
     "vue-property-decorator": {
       "version": "9.1.2",
       "resolved": "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-9.1.2.tgz",
-      "integrity": "sha512-xYA8MkZynPBGd/w5QFJ2d/NM0z/YeegMqYTphy7NJQXbZcuU6FC6AOdUAcy4SXP+YnkerC6AfH+ldg7PDk9ESQ==",
-      "requires": {}
+      "integrity": "sha512-xYA8MkZynPBGd/w5QFJ2d/NM0z/YeegMqYTphy7NJQXbZcuU6FC6AOdUAcy4SXP+YnkerC6AfH+ldg7PDk9ESQ=="
     },
     "vue-router": {
       "version": "4.2.2",
diff --git a/public/desk/manifest.json b/public/desk/manifest.json
index acb6baf..af5bb27 100644
--- a/public/desk/manifest.json
+++ b/public/desk/manifest.json
@@ -1,6 +1,6 @@
 {
-    "name": "TMGM",
-    "short_name": "TMGM",
+    "name": "Coinvesx",
+    "short_name": "Coinvesx",
     "icon": [
         {
             "src": "../img/App.png",
diff --git a/public/img/App.png b/public/img/App.png
index 7e194a9..ea11505 100644
--- a/public/img/App.png
+++ b/public/img/App.png
Binary files differ
diff --git a/public/relicon.png b/public/relicon.png
new file mode 100644
index 0000000..ea11505
--- /dev/null
+++ b/public/relicon.png
Binary files differ
diff --git a/src/assets/image/assets-center/logo.png b/src/assets/image/assets-center/logo.png
index cc70b8d..ea11505 100644
--- a/src/assets/image/assets-center/logo.png
+++ b/src/assets/image/assets-center/logo.png
Binary files differ
diff --git a/src/assets/imgs/logo.png b/src/assets/imgs/logo.png
index 1e13a7c..ea11505 100644
--- a/src/assets/imgs/logo.png
+++ b/src/assets/imgs/logo.png
Binary files differ
diff --git a/src/components/Transform/assetsCenter/assets.vue b/src/components/Transform/assetsCenter/assets.vue
index 7c80dfc..2bb5fc0 100644
--- a/src/components/Transform/assetsCenter/assets.vue
+++ b/src/components/Transform/assetsCenter/assets.vue
@@ -1,171 +1,113 @@
 <template>
-  <div class="box-border">
-    <div class="pl-33 pr-33 total_wrap">
-      <div class="flex justify-between text-grey relative">
-        <div class="flex">
-          <span class="text-grey font-30">{{ $t('总资产') }}(USDT)</span>
-          <div @click.stop="changeEyes">
-            <img :src="handImg('../../../assets/image/assets-center/eye-open.png')" class="w-32 h-18" v-show="!eyetel" />
-            <img :src="handImg('../../../assets/image/assets-center/eye-close.png')" class="w-32 h-18" v-show="eyetel" />
+  <div class="funds-spot">
+    <!-- 总资产卡片 -->
+    <div class="balance-hero">
+      <div class="balance-hero-top">
+        <div class="balance-label">
+          <span>{{ $t('总资产') }}(USDT)</span>
+          <div class="eye-btn" @click.stop="changeEyes">
+            <img :src="handImg('../../../assets/image/assets-center/eye-open.png')" v-show="!eyetel" />
+            <img :src="handImg('../../../assets/image/assets-center/eye-close.png')" v-show="eyetel" />
           </div>
         </div>
-        <div class="right-clock" @click="goRouter('/cryptos/exchangeHistory')">
-          <img :src="handImg('../../../assets/image/assets-center/Subtract.png')" class="w-34 h-40" />
+        <div class="history-btn" @click="goRouter('/cryptos/exchangeHistory')">
+          <img :src="handImg('../../../assets/image/assets-center/Subtract.png')" />
         </div>
       </div>
-      <div class="font-700 font-66 mt-18 textColor" v-if="!eyetel">
-        {{ funds.money_all_coin || '--' }}
-        <span class="font-40 text-grey">≈{{ currency.currency_symbol
-        }}{{
-  funds.money_all_coin
-  ? Number(funds.money_all_coin * currency.rate).toFixed(2)
-  : ' --'
-}}</span>
+      <div class="balance-amount" v-if="!eyetel">{{ funds.money_all_coin || '--' }}</div>
+      <div class="balance-amount" v-else>********</div>
+      <div class="balance-fiat" v-if="!eyetel">
+        ≈{{ currency.currency_symbol }}{{
+          funds.money_all_coin ? Number(funds.money_all_coin * currency.rate).toFixed(2) : ' --'
+        }}
       </div>
-      <div class="font-70 font-66 mt-18 textColor" v-else>********</div>
+      <div class="balance-fiat" v-else>≈{{ currency.currency_symbol }} ********</div>
     </div>
-    <div class="pl-33 pr-33 btn-box flex justify-between">
-      <div class="text-white font-25 textColor tabBackground" @click="goRouter('/cryptos/recharge/rechargeList')">
-        <div class="word-wrap">
+
+    <!-- 快捷操作 -->
+    <div class="quick-actions">
+      <div class="action-item" @click="goRouter('/cryptos/recharge/rechargeList')">
+        <div class="action-icon deposit">
           <img :src="handImg(`../../../assets/theme/${THEME}/image/assets/up.png`)" alt="" />
-          <span> {{ $t('充币') }}</span>
         </div>
+        <span>{{ $t('充币') }}</span>
       </div>
-      <div class="text-white font-25 textColor tabBackground" @click="withdrawBtn">
-        <div class="word-wrap">
+      <div class="action-item" @click="withdrawBtn">
+        <div class="action-icon withdraw">
           <img :src="handImg(`../../../assets/theme/${THEME}/image/assets/down.png`)" alt="" />
-          <span>{{ $t('提币') }}</span>
         </div>
+        <span>{{ $t('提币') }}</span>
       </div>
-      <div class="text-white font-25 textColor tabBackground" @click="goRouter('/cryptos/exchangePage')">
-        <div class="word-wrap">
+      <div class="action-item" @click="goRouter('/cryptos/exchangePage')">
+        <div class="action-icon swap">
           <img :src="handImg(`../../../assets/theme/${THEME}/image/assets/l_r.png`)" alt="" />
-          <span>{{ $t('闪兑') }}</span>
         </div>
+        <span>{{ $t('闪兑') }}</span>
+      </div>
+      <div class="action-item" @click="goRouter('/my/transfer')">
+        <div class="action-icon transfer">
+          <img :src="handImg('../../../assets/imgs/assets/huazhuan.png')" alt="" />
+        </div>
+        <span>{{ $t('划转') }}</span>
       </div>
     </div>
-    <!--       <div class="divider-line"></div>-->
-    <div class="pl-30 pr-30">
-      <div class="assets-content-title font-35 titleColor">
-        {{ $t('投资组合') }}
-      </div>
-      <div class="assets-list font-30" v-for="(item, index) in list" :key="index">
-        <div class="flex justify-between">
-          <div class="flex items-center">
-            <img :src="item.symbol
-              ? `${HOST_URL}/symbol/${item.symbol_data}.png`
-              : handImg('../../../assets/loading-default.png')
-              " class="w-72 h-72 rounded-full" />
-            <div class="text-grey symbol-name font-30 textColor2">
-              {{ item.symbol.toUpperCase() }}/USDT
+
+    <!-- 币种列表 -->
+    <div class="section-header">
+      <span class="section-title">{{ $t('投资组合') }}</span>
+      <span class="section-count">{{ list.length }}</span>
+    </div>
+    <div class="coin-list">
+      <div class="coin-card" v-for="(item, index) in list" :key="index">
+        <div class="coin-card-head">
+          <div class="coin-info">
+            <img
+              :src="item.symbol ? `${HOST_URL}/symbol/${item.symbol_data}.png` : handImg('../../../assets/loading-default.png')"
+              class="coin-icon"
+            />
+            <div>
+              <div class="coin-symbol">{{ item.symbol.toUpperCase() }}</div>
+              <div class="coin-pair">/ USDT</div>
             </div>
           </div>
-          <div class="flex-col font-30 text-right" v-if="!eyetel">
-            <div class="textColor" v-if="item.symbol == 'btc'">
-              {{ item.volume ? Number(item.volume).toFixed(8) : '0.0' }}
-            </div>
-            <div class="textColor" v-else-if="item.symbol == 'eth'">
-              {{ item.volume ? Number(item.volume).toFixed(8) : '0.0' }}
-            </div>
-            <div class="textColor" v-else-if="item.symbol == 'usdt'">
-              {{ item.volume ? Number(item.volume).toFixed(2) : '0.0' }}
-            </div>
-            <div class="textColor" v-else>
-              {{ item.volume ? Number(item.volume).toFixed(8) : '0.0' }}
-            </div>
-            <div class="text-grey font-30 font-400 mb-0">
-              ≈{{ currency.currency_symbol }}
-              {{ item.usdt ? Number(item.usdt).toFixed(2) : '0.0' }}
-            </div>
+          <div class="coin-total" v-if="!eyetel">
+            <div class="coin-total-val">{{ formatAmount(item.symbol, item.volume) }}</div>
+            <div class="coin-total-fiat">≈{{ currency.currency_symbol }} {{ item.usdt ? Number(item.usdt).toFixed(2) : '0.00' }}</div>
           </div>
-          <div class="flex-col font-30 text-right" v-else>
-            <div class="textColor">******** USDT</div>
-            <div class="text-grey">
-              ≈{{ currency.currency_symbol }} ********
-            </div>
+          <div class="coin-total" v-else>
+            <div class="coin-total-val">********</div>
+            <div class="coin-total-fiat">≈{{ currency.currency_symbol }} ********</div>
           </div>
         </div>
-        <div class="flex justify-between mt-40 pl-94">
-          <template>
-            <div class="flex-col font-30" v-if="!eyetel">
-              <div class="text-grey">{{ $t('可用') }}</div>
-              <div class="textColor" v-if="item.symbol == 'btc'">
-                {{ item.usable ? Number(item.usable).toFixed(8) : '0.0' }}
-              </div>
-              <div class="textColor" v-else-if="item.symbol == 'eth'">
-                {{ item.usable ? Number(item.usable).toFixed(8) : '0.0' }}
-              </div>
-              <div class="textColor" v-else-if="item.symbol == 'usdt'">
-                {{ item.usable ? Number(item.usable).toFixed(2) : '0.0' }}
-              </div>
-              <div class="textColor" v-else>
-                {{ item.usable ? Number(item.usable).toFixed(8) : '0.0' }}
-              </div>
-            </div>
-            <div class="flex-col font-30" v-else>
-              <div class="text-grey">{{ $t('可用') }}</div>
-              <div class="textColor">
-                {{ currency.currency_symbol }} ********
-              </div>
-            </div>
-          </template>
-          <template>
-            <div class="flex-col font-30" v-if="!eyetel">
-              <div class="text-grey">{{ $t('锁仓') }}</div>
-              <div class="textColor" v-if="item.symbol === 'btc'">
-                {{ item.lock_amount ? Number(item.lock_amount).toFixed(8) : '0.0' }}
-              </div>
-              <div class="textColor" v-else-if="item.symbol === 'eth'">
-                {{ item.lock_amount ? Number(item.lock_amount).toFixed(8) : '0.0' }}
-              </div>
-              <div class="textColor" v-else-if="item.symbol == 'usdt'">
-                {{ item.lock_amount ? Number(item.lock_amount).toFixed(2) : '0.0' }}
-              </div>
-              <div class="textColor" v-else>
-                {{ item.lock_amount ? Number(item.lock_amount).toFixed(8) : '0.0' }}
-              </div>
-            </div>
-            <div class="flex-col font-30" v-else>
-              <div class="text-grey">{{ $t('锁仓') }}</div>
-              <div class="textColor">
-                {{ currency.currency_symbol }} ********
-              </div>
-            </div>
-          </template>
-          <template>
-            <div class="flex-col font-30 text-right" v-if="!eyetel">
-              <div class="text-grey">{{ $t('冻结') }}</div>
-              <div class="textColor" v-if="item.symbol == 'btc'">
-                {{ Number(item.frozenAmount + item.freeze_amount).toFixed(8) || '0.0' }}
-              </div>
-              <div class="textColor" v-else-if="item.symbol == 'eth'">
-                {{ Number(item.frozenAmount + item.freeze_amount).toFixed(8) || '0.0' }}
-              </div>
-              <div class="textColor" v-else-if="item.symbol == 'usdt'">
-                {{ Number(item.frozenAmount + item.freeze_amount).toFixed(2) || '0.0' }}
-              </div>
-              <div class="textColor" v-else>
-                {{ Number(item.frozenAmount + item.freeze_amount).toFixed(8) || '0.0' }}
-              </div>
-            </div>
-            <div class="flex-col font-30 text-right" v-else>
-              <div class="text-grey">{{ $t('冻结') }}</div>
-              <div class="textColor">
-                {{ currency.currency_symbol }} ********
-              </div>
-            </div>
-          </template>
+        <div class="coin-stats">
+          <div class="stat-item">
+            <span class="stat-label">{{ $t('可用') }}</span>
+            <span class="stat-value" v-if="!eyetel">{{ formatAmount(item.symbol, item.usable) }}</span>
+            <span class="stat-value" v-else>********</span>
+          </div>
+          <div class="stat-item">
+            <span class="stat-label">{{ $t('锁仓') }}</span>
+            <span class="stat-value" v-if="!eyetel">{{ formatAmount(item.symbol, item.lock_amount) }}</span>
+            <span class="stat-value" v-else>********</span>
+          </div>
+          <div class="stat-item">
+            <span class="stat-label">{{ $t('冻结') }}</span>
+            <span class="stat-value" v-if="!eyetel">{{ formatAmount(item.symbol, Number(item.frozenAmount || 0) + Number(item.freeze_amount || 0)) }}</span>
+            <span class="stat-value" v-else>********</span>
+          </div>
         </div>
       </div>
     </div>
   </div>
 </template>
+
 <script>
-import { _getAllWallet } from '@/service/fund.api';
-import { Dialog } from 'vant';
-import { mapGetters } from 'vuex';
-import { HOST_URL } from '@/config';
-import { THEME } from '@/config/theme';
+import { _getAllWallet } from '@/service/fund.api'
+import { Dialog } from 'vant'
+import { mapGetters } from 'vuex'
+import { HOST_URL } from '@/config'
+import { THEME } from '@/config/theme'
+
 export default {
   name: 'Assets',
   components: {
@@ -180,178 +122,281 @@
       THEME,
       HOST_URL,
       list: [],
-      total: '',
-      status: '', //身份认证状态 0已申请未审核,1审核中,2审核通过,3审核未通过
-      eyetel: false,
-      active: 0
-    };
+      eyetel: false
+    }
   },
   mounted() {
-    this.getList();
+    this.getList()
   },
   methods: {
     handImg(url) {
       return new URL(url, import.meta.url).href
     },
-    onClickLeft() {
-      this.$router.go(-1);
-    },
     goRouter(parmas) {
       if (parmas === '/cryptos/exchangeHistory') {
-        this.$router.push({ path: parmas, query: { type: 1 } });
+        this.$router.push({ path: parmas, query: { type: 1 } })
       } else {
-        this.$router.push(parmas);
+        this.$router.push(parmas)
       }
     },
     compare(p, type) {
-      //这是比较函数
       return function (m, n) {
-        var a = m[p];
-        var b = n[p];
-        if (a == b) {
-          return;
-        }
-        if (type == 'up') {
-          return b - a; //升序
-        } else if (type == 'down') {
-          return a - b; //降序
-        } else {
-          return a - b;
-        }
-      };
-    },
-    getList() {
-      _getAllWallet({
-        symbolType: 'cryptos'
-      }).then((res) => {
-        let list = res.extends;
-        this.list = [...list].sort(this.compare('usdt', 'up'));
-      });
-    },
-    changeEyes() {
-      this.eyetel = !this.eyetel;
-    },
-    beforeClose(action, done) {
-      if (action === 'confirm') {
-        setTimeout(done, 1000);
-      } else {
-        done();
+        var a = m[p]
+        var b = n[p]
+        if (a == b) return 0
+        if (type == 'up') return b - a
+        return a - b
       }
     },
-    //跳转提币页面
+    getList() {
+      _getAllWallet({ symbolType: 'cryptos' }).then((res) => {
+        let list = res.extends
+        this.list = [...list].sort(this.compare('usdt', 'up'))
+      })
+    },
+    formatAmount(symbol, val) {
+      const num = Number(val) || 0
+      if (symbol === 'usdt') return num.toFixed(2)
+      if (symbol === 'btc' || symbol === 'eth') return num.toFixed(8)
+      return num.toFixed(8)
+    },
+    changeEyes() {
+      this.eyetel = !this.eyetel
+    },
     withdrawBtn() {
-      //身份已认证,直接跳转,未认证则提示跳身份认证页
-      // if(this.funds.status==2) {
-      //   this.$router.push({
-      //     path:'/cryptos/withdraw/withdrawPage'
-      //   });
-      // }else{
-      //   Dialog.confirm({
-      //     confirmButtonText:this.$t('确定'),
-      //     cancelButtonText:this.$t('取消'),
-      //     title: this.$t('提示'),
-      //     message: this.$t('请进行身份KYC认证'),
-      //     beforeClose: (action, done) => {
-      //       if (action === 'confirm') {
-      //         done();
-      //         this.$router.push({
-      //           path:'/authentication'
-      //         });
-      //       } else {
-      //         done();
-      //       }
-      //     },
-      //   });
-      // }
-      this.$router.push({
-        path: '/cryptos/withdraw/withdrawPage'
-      });
+      this.$router.push({ path: '/cryptos/withdraw/withdrawPage' })
     }
   }
-};
+}
 </script>
 
 <style lang="scss" scoped>
-@import "@/assets/init.scss";
+@import '@/assets/init.scss';
 
-#cryptos {
-  .right-clock {
-    position: absolute;
-    top: 0;
-    right: -3px;
+.funds-spot {
+  padding-top: 16px;
+  padding-bottom: 40px;
+}
+
+.balance-hero {
+  padding: 36px 32px;
+  border-radius: 24px;
+  background: linear-gradient(135deg, #1a6dff 0%, #004aee 55%, #0035b8 100%);
+  color: #fff;
+  box-shadow: 0 16px 40px rgba(0, 74, 238, 0.28);
+  margin-bottom: 28px;
+}
+
+.balance-hero-top {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 16px;
+}
+
+.balance-label {
+  display: flex;
+  align-items: center;
+  gap: 16px;
+  font-size: 26px;
+  opacity: 0.9;
+}
+
+.eye-btn img {
+  width: 36px;
+  height: 22px;
+}
+
+.history-btn img {
+  width: 36px;
+  height: 42px;
+  opacity: 0.85;
+}
+
+.balance-amount {
+  font-size: 64px;
+  font-weight: 700;
+  line-height: 1.15;
+  word-break: break-all;
+}
+
+.balance-fiat {
+  margin-top: 10px;
+  font-size: 28px;
+  opacity: 0.85;
+}
+
+.quick-actions {
+  display: grid;
+  grid-template-columns: repeat(4, 1fr);
+  gap: 16px;
+  margin-bottom: 36px;
+}
+
+.action-item {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  gap: 10px;
+  padding: 20px 8px;
+  border-radius: 20px;
+  @include themify() {
+    background: themed('cont_background');
   }
+  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.04);
 
-  .total_wrap {
-    margin-top: 44px;
-  }
-
-  .asset-title-box {
-    margin: 40px 0;
-  }
-
-  .btn-box {
-    margin-top: 44px;
-  }
-
-  .btn-box>div {
-    width: 234px;
-    padding: 20px 15px;
-    box-sizing: border-box;
-    text-align: center;
-    border-radius: 8.8px;
-    font-size: 26.5px;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-
-    .word-wrap {
-      display: flex;
-      align-items: center;
-      justify-content: center;
-
-      img {
-        width: 40px;
-        height: 40px;
-        margin-right: 22px;
-      }
-
-      span {
-        font-size: 26.5px;
-      }
+  span {
+    font-size: 24px;
+    @include themify() {
+      color: themed('text_color');
     }
   }
+}
 
-  .mr60 {
-    margin-right: 60px;
+.action-icon {
+  width: 80px;
+  height: 80px;
+  border-radius: 50%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+
+  img {
+    width: 40px;
+    height: 40px;
   }
 
-  .divider-line {
-    border-bottom: 1px solid $border-grey;
-    padding-bottom: 80px;
-  }
+  &.deposit { background: rgba(26, 109, 255, 0.12); }
+  &.withdraw { background: rgba(230, 84, 97, 0.12); }
+  &.swap { background: rgba(46, 189, 133, 0.12); }
+  &.transfer { background: rgba(255, 152, 0, 0.12); }
+}
 
-  .assets-content-title {
-    margin-top: 60px;
-    margin-bottom: 55px;
-  }
+.section-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 20px;
+}
 
-  .assets-list {
-    margin-bottom: 70px;
+.section-title {
+  font-size: 32px;
+  font-weight: 600;
+  @include themify() {
+    color: themed('text_color');
   }
+}
 
-  .assets-list>div {
-    display: flex;
+.section-count {
+  font-size: 24px;
+  @include themify() {
+    color: themed('text_color1');
   }
+}
 
-  .assets-list>div:nth-child(2) div:nth-child(1) {
-    margin-bottom: 16px;
-    font-size: 30px;
-    font-weight: 700;
+.coin-list {
+  display: flex;
+  flex-direction: column;
+  gap: 16px;
+}
+
+.coin-card {
+  padding: 28px 24px;
+  border-radius: 20px;
+  @include themify() {
+    background: themed('cont_background');
   }
+  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.04);
+}
 
-  .symbol-name {
-    margin-left: 22px;
-    //margin-top:10px;
+.coin-card-head {
+  display: flex;
+  justify-content: space-between;
+  align-items: flex-start;
+  padding-bottom: 24px;
+  margin-bottom: 24px;
+  border-bottom: 1px solid rgba(128, 128, 128, 0.12);
+}
+
+.coin-info {
+  display: flex;
+  align-items: center;
+  gap: 20px;
+}
+
+.coin-icon {
+  width: 72px;
+  height: 72px;
+  border-radius: 50%;
+}
+
+.coin-symbol {
+  font-size: 32px;
+  font-weight: 700;
+  @include themify() {
+    color: themed('text_color');
+  }
+}
+
+.coin-pair {
+  font-size: 24px;
+  margin-top: 4px;
+  @include themify() {
+    color: themed('text_color1');
+  }
+}
+
+.coin-total {
+  text-align: right;
+}
+
+.coin-total-val {
+  font-size: 30px;
+  font-weight: 600;
+  @include themify() {
+    color: themed('text_color');
+  }
+}
+
+.coin-total-fiat {
+  margin-top: 6px;
+  font-size: 24px;
+  @include themify() {
+    color: themed('text_color1');
+  }
+}
+
+.coin-stats {
+  display: flex;
+  gap: 12px;
+}
+
+.stat-item {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  gap: 8px;
+  padding: 16px 12px;
+  border-radius: 12px;
+  @include themify() {
+    background: themed('main_background');
+  }
+}
+
+.stat-label {
+  font-size: 22px;
+  @include themify() {
+    color: themed('text_color1');
+  }
+}
+
+.stat-value {
+  font-size: 24px;
+  font-weight: 600;
+  word-break: break-all;
+  @include themify() {
+    color: themed('text_color');
   }
 }
 </style>
diff --git a/src/components/Transform/assetsCenter/contract.vue b/src/components/Transform/assetsCenter/contract.vue
index 73f49b9..d678bce 100644
--- a/src/components/Transform/assetsCenter/contract.vue
+++ b/src/components/Transform/assetsCenter/contract.vue
@@ -1,85 +1,64 @@
 <template>
-  <div class="contract">
-    <div class="flex justify-between box-border px-30 mt-43">
-      <div @click="onTap(0)" :class="{ active: tapIndex === 0 }"
-        class=" w-370 h-75 lh-75 rounded-lg font-27 text-center mr-20">{{ $t('永续合约') }}</div>
-      <div @click="onTap(1)" :class="{ active: tapIndex === 1 }" class=" w-370 h-75 lh-75 rounded-lg font-27 text-center">
-        {{ $t('交割合约') }}</div>
+  <div class="funds-contract">
+    <div class="sub-tabs">
+      <div @click="onTap(0)" :class="{ active: tapIndex === 0 }" class="sub-tab-item">{{ $t('永续合约') }}</div>
+      <div @click="onTap(1)" :class="{ active: tapIndex === 1 }" class="sub-tab-item">{{ $t('交割合约') }}</div>
     </div>
-    <div>
-      <div class="box-border px-30 mt-42">
-        <div class="flex justify-between text-grey relative">
-          <div class="flex">
-            <span class="text-grey font-30">{{ $t('总资产') }}(USDT)</span>
-            <div @click.stop="changeEyes">
-              <img :src="handleImage('../../../assets/image/assets-center/eye-open.png')" class="w-32 h-18"
-                v-show="!eyetel" />
-              <img :src="handleImage('../../../assets/image/assets-center/eye-close.png')" class="w-32 h-18"
-                v-show="eyetel" />
-            </div>
-          </div>
-          <div class="right-clock">
-            <img @click="goHistory" :src="handleImage('../../../assets/image/assets-center/Subtract.png')"
-              class="w-34 h-40" />
+
+    <div class="balance-hero">
+      <div class="balance-hero-top">
+        <div class="balance-label">
+          <span>{{ $t('总资产') }}(USDT)</span>
+          <div class="eye-btn" @click.stop="changeEyes">
+            <img :src="handleImage('../../../assets/image/assets-center/eye-open.png')" v-show="!eyetel" />
+            <img :src="handleImage('../../../assets/image/assets-center/eye-close.png')" v-show="eyetel" />
           </div>
         </div>
-        <div class="font-700 font-66 mt-18 textColor" v-if="!eyetel">
-          {{ tapIndex === 0 ? funds.money_contract : funds.money_futures }}
-          <span class="font-39 text-grey">≈{{ currency.currency_symbol }}{{ funds.money_contract ? (((tapIndex === 0 ?
-            funds.money_contract :
-            funds.money_futures) * currency.rate).toFixed(2)) : ' --' }}</span>
-        </div>
-        <div class="font-70 font-66 mt-18 textColor" v-else>******** </div>
-        <div class="flex font-26 lh-32 mb-35 mt-40">
-          <div class="flex flex-col ">
-            <div>{{ tapIndex === 0 ? $t('保证金余额') : $t('全部未实现盈亏') }}(USDT)</div>
-            <template v-if="!eyetel">
-              <div class="font-40 mt-17 mb-9 textColor">{{ tapIndex === 0 ? funds.money_contract_deposit :
-                funds.money_futures_profit }}</div>
-              <div>≈{{ currency.currency_symbol }}{{ funds.money_contract_deposit ? (((tapIndex === 0 ?
-                funds.money_contract_deposit :
-                funds.money_futures_profit) * currency.rate).toFixed(2)) : ' --' }}</div>
-            </template>
-            <template v-else>
-              <div class="font-40 mt-17 mb-9 textColor">*********</div>
-            </template>
-          </div>
-          <div class="flex flex-col ml-110">
-            <div>{{ $t('钱包余额(USDT)') }}</div>
-            <template v-if="!eyetel">
-              <div class="font-40 mt-17 mb-9 textColor">{{ funds.money_wallet }}</div>
-              <div>≈{{ currency.currency_symbol }}{{ funds.money_wallet ? (funds.money_wallet * currency.rate).toFixed(2)
-                :
-                ' --' }}</div>
-            </template>
-            <template v-else>
-              <div class="font-40 mt-17 mb-9 textColor">*********</div>
-            </template>
-          </div>
-        </div>
-        <div v-if="tapIndex === 0" class="flex flex-col lh-32 mb-35 ">
-          <template v-if="!eyetel">
-            <div>{{ $t('全部未实现盈亏') }}(USDT)</div>
-            <div class="font-40 mt-17 mb-9 textColor">{{ funds.money_contract_profit }}</div>
-            <div>≈{{ currency.currency_symbol }}{{ funds.money_contract_profit ? (funds.money_contract_profit *
-              currency.rate).toFixed(2) : ' --' }}</div>
-          </template>
-          <template v-else>
-            <div class="font-40 mt-17 mb-9 textColor">*********</div>
-          </template>
+        <div class="history-btn" @click="goHistory">
+          <img :src="handleImage('../../../assets/image/assets-center/Subtract.png')" />
         </div>
       </div>
-      <div class="w-full h-13 contBackground"></div>
-      <!--永续合约持有仓位-->
-      <div class="px-30">
-        <template v-if="tapIndex === 0">
-          <PerpetualPositionList :list-data="orderHold" @sell="onRecall"></PerpetualPositionList>
-        </template>
-        <!--交割合约持有仓位-->
-        <template v-else>
-          <futrue-hold-list :list-data="futrueHold" />
-        </template>
+      <div class="balance-amount" v-if="!eyetel">
+        {{ tapIndex === 0 ? funds.money_contract : funds.money_futures }}
       </div>
+      <div class="balance-amount" v-else>********</div>
+      <div class="balance-fiat" v-if="!eyetel">
+        ≈{{ currency.currency_symbol }}{{
+          (tapIndex === 0 ? funds.money_contract : funds.money_futures)
+            ? (((tapIndex === 0 ? funds.money_contract : funds.money_futures) * currency.rate).toFixed(2))
+            : ' --'
+        }}
+      </div>
+      <div class="balance-fiat" v-else>≈{{ currency.currency_symbol }} ********</div>
+
+      <div class="stats-grid">
+        <div class="stat-block">
+          <div class="stat-block-label">{{ tapIndex === 0 ? $t('保证金余额') : $t('全部未实现盈亏') }}(USDT)</div>
+          <div class="stat-block-value" v-if="!eyetel">
+            {{ tapIndex === 0 ? funds.money_contract_deposit : funds.money_futures_profit }}
+          </div>
+          <div class="stat-block-value" v-else>********</div>
+        </div>
+        <div class="stat-block">
+          <div class="stat-block-label">{{ $t('钱包余额(USDT)') }}</div>
+          <div class="stat-block-value" v-if="!eyetel">{{ funds.money_wallet }}</div>
+          <div class="stat-block-value" v-else>********</div>
+        </div>
+        <div class="stat-block" v-if="tapIndex === 0">
+          <div class="stat-block-label">{{ $t('全部未实现盈亏') }}(USDT)</div>
+          <div class="stat-block-value" v-if="!eyetel">{{ funds.money_contract_profit }}</div>
+          <div class="stat-block-value" v-else>********</div>
+        </div>
+      </div>
+    </div>
+
+    <div class="position-section">
+      <template v-if="tapIndex === 0">
+        <PerpetualPositionList :list-data="orderHold" @sell="onRecall" />
+      </template>
+      <template v-else>
+        <futrue-hold-list :list-data="futrueHold" />
+      </template>
     </div>
   </div>
 </template>
@@ -205,74 +184,114 @@
 <style lang="scss" scoped>
 @import "@/assets/init.scss";
 
-#cryptos {
-  .w-370 {
-    border: 1px solid #EAEDF2;
-    color: $text_color1;
+.funds-contract {
+  padding-top: 16px;
+  padding-bottom: 40px;
+}
+
+.sub-tabs {
+  display: flex;
+  gap: 16px;
+  margin-bottom: 24px;
+}
+
+.sub-tab-item {
+  flex: 1;
+  text-align: center;
+  padding: 20px 16px;
+  border-radius: 16px;
+  font-size: 28px;
+  transition: all 0.2s ease;
+  @include themify() {
+    background: themed('cont_background');
+    color: themed('text_color1');
   }
 
-  .active {
-    color: $text_color;
-    background: $btn_main;
-    border-color: $btn_main;
-  }
-
-  .lh-32 {
-    color: $text_color5;
-  }
-
-  .font-40 {
-    font-weight: 700;
-  }
-
-  .cl {
-    color: $text_color4;
-    background: #EBECF0;
-  }
-
-  .mr-13 {
+  &.active {
+    color: #fff;
+    background: linear-gradient(135deg, #1a6dff 0%, #004aee 100%);
     font-weight: 600;
-    color: $text_color4;
+    box-shadow: 0 6px 16px rgba(0, 74, 238, 0.28);
   }
+}
 
-  .col {
-    color: $text_color5;
-  }
+.balance-hero {
+  padding: 36px 32px;
+  border-radius: 24px;
+  background: linear-gradient(135deg, #1a6dff 0%, #004aee 55%, #0035b8 100%);
+  color: #fff;
+  box-shadow: 0 16px 40px rgba(0, 74, 238, 0.28);
+  margin-bottom: 28px;
+}
 
-  .num {
-    font-weight: 600;
-    color: $text_color4;
-  }
+.balance-hero-top {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 16px;
+}
 
-  .font-4 {
-    font-weight: 400;
-    color: $text_color4;
-  }
+.balance-label {
+  display: flex;
+  align-items: center;
+  gap: 16px;
+  font-size: 26px;
+  opacity: 0.9;
+}
 
-  .blue {
-    color: $color_main;
-  }
+.eye-btn img {
+  width: 36px;
+  height: 22px;
+}
 
-  .active_green {
-    color: $green;
-  }
+.history-btn img {
+  width: 36px;
+  height: 42px;
+  opacity: 0.85;
+}
 
-  .active_red {
-    color: $red;
-  }
+.balance-amount {
+  font-size: 56px;
+  font-weight: 700;
+  line-height: 1.15;
+}
 
-  .active_tab1 {
-    background: $red;
-    color: $text_color;
-  }
+.balance-fiat {
+  margin-top: 8px;
+  font-size: 26px;
+  opacity: 0.85;
+}
 
-  .active_tab2 {
-    background: $green;
-    color: $text_color;
-  }
+.stats-grid {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 12px;
+  margin-top: 28px;
+  padding-top: 24px;
+  border-top: 1px solid rgba(255, 255, 255, 0.2);
+}
 
-  .font-6 {
-    font-weight: 600;
-  }
+.stat-block {
+  flex: 1;
+  min-width: 40%;
+  padding: 16px;
+  border-radius: 14px;
+  background: rgba(255, 255, 255, 0.12);
+}
+
+.stat-block-label {
+  font-size: 22px;
+  opacity: 0.85;
+  line-height: 1.3;
+}
+
+.stat-block-value {
+  margin-top: 8px;
+  font-size: 28px;
+  font-weight: 600;
+}
+
+.position-section {
+  margin-top: 8px;
 }
 </style>
diff --git a/src/components/Transform/assetsCenter/financial.vue b/src/components/Transform/assetsCenter/financial.vue
index f0e8be1..b8e396e 100644
--- a/src/components/Transform/assetsCenter/financial.vue
+++ b/src/components/Transform/assetsCenter/financial.vue
@@ -1,91 +1,67 @@
 <template>
-  <div class="financial">
-    <div class="flex justify-between box-border px-30 mt-43">
-      <div @click="onTab(0)" :class="{ active: tapIndex === 0 }"
-        class=" w-370 h-75 lh-75 rounded-lg font-27 text-center mr-20">{{ $t('货币理财') }}</div>
-      <div @click="onTab(1)" :class="{ active: tapIndex === 1 }" class=" w-370 h-75 lh-75 rounded-lg font-27 text-center">
-        {{ $t('矿池理财') }}</div>
+  <div class="funds-financial">
+    <div class="sub-tabs">
+      <div @click="onTab(0)" :class="{ active: tapIndex === 0 }" class="sub-tab-item">{{ $t('货币理财') }}</div>
+      <div @click="onTab(1)" :class="{ active: tapIndex === 1 }" class="sub-tab-item">{{ $t('矿池理财') }}</div>
     </div>
-    <div class="box-border px-30 mt-42">
-      <div class="flex justify-between text-grey relative">
-        <div class="flex">
-          <span class="text-grey font-30">{{ $t('总资产') }}(USDT)</span>
-          <div @click.stop="changeEyes">
-            <img :src="handleImage('../../../assets/image/assets-center/eye-open.png')" class="w-32 h-18"
-              v-show="!eyetel" />
-            <img :src="handleImage('../../../assets/image/assets-center/eye-close.png')" class="w-32 h-18"
-              v-show="eyetel" />
+
+    <div class="balance-hero">
+      <div class="balance-hero-top">
+        <div class="balance-label">
+          <span>{{ $t('总资产') }}(USDT)</span>
+          <div class="eye-btn" @click.stop="changeEyes">
+            <img :src="handleImage('../../../assets/image/assets-center/eye-open.png')" v-show="!eyetel" />
+            <img :src="handleImage('../../../assets/image/assets-center/eye-close.png')" v-show="eyetel" />
           </div>
         </div>
-        <div class="right-clock">
-          <img v-if="tapIndex === 0" @click="$router.push({ path: '/cryptos/financialHistory', query: { type: 0 } })"
-            :src="handleImage('../../../assets/image/assets-center/Subtract.png')" class="w-36 h-40" />
-          <img v-if="tapIndex === 1" @click="$router.push({ path: '/cryptos/financialHistory', query: { type: 1 } })"
-            :src="handleImage('../../../assets/image/assets-center/Subtract.png')" class="w-36 h-40" />
+        <div class="history-btn" @click="goHistory">
+          <img :src="handleImage('../../../assets/image/assets-center/Subtract.png')" />
         </div>
       </div>
-      <div class="font-700 font-66 mt-18 textColor" v-if="!eyetel">
+      <div class="balance-amount" v-if="!eyetel">
         <template v-if="tapIndex === 0">{{ funds.money_finance || '--' }}</template>
         <template v-if="tapIndex === 1">{{ funds.money_miner || '--' }}</template>
-        <span class="font-39 text-grey" v-if="tapIndex === 0">≈{{ currency.currency_symbol }}{{ funds.money_finance ?
-          (funds.money_finance *
-            currency.rate).toFixed(2) : ' --' }}</span>
-        <span class="font-39 text-grey" v-if="tapIndex === 1">≈{{ currency.currency_symbol }}{{ funds.money_miner ?
-          (funds.money_miner *
-            currency.rate).toFixed(2) : ' --' }}</span>
       </div>
-      <div class="font-70 font-66 mt-18" v-else>********</div>
-      <div class="flex font-26 lh-32 mb-35 mt-40">
-        <div class="flex flex-col ">
-          <div>{{ $t('预计日收益') }}({{ finData.outputCurrency ? finData.outputCurrency.toUpperCase() : 'USDT' }})</div>
-          <template v-if="!eyetel">
-            <div class="font-40 mt-17 mb-9 textColor">{{ finData.today_profit || '--' }}</div>
-            <!-- <div>≈{{currency.currency_symbol}}{{ finData.today_profit ? (finData.today_profit *
-            currency.rate).toFixed(2) : ' --' }}</div> -->
-          </template>
-          <template v-else>
-            <div class="font-40 mt-17 mb-9 textColor">********</div>
-          </template>
-        </div>
-        <div class="flex flex-col ml-110">
-          <div>{{ $t('累计收益') }}({{ finData.outputCurrency ? finData.outputCurrency.toUpperCase() : 'USDT' }})</div>
-          <template v-if="!eyetel">
-            <div class="font-40 mt-17 mb-9 textColor">{{ finData.aready_profit || '0.00' }}</div>
-            <!-- <div>≈{{currency.currency_symbol}}{{ finData.aready_profit ? (finData.aready_profit *
-            currency.rate).toFixed(2) : '0.00' }}</div> -->
-          </template>
-          <template v-else>
-            <div class="font-40 mt-17 mb-9 textColor">********</div>
-          </template>
-        </div>
+      <div class="balance-amount" v-else>********</div>
+      <div class="balance-fiat" v-if="!eyetel">
+        ≈{{ currency.currency_symbol }}{{
+          tapIndex === 0
+            ? (funds.money_finance ? (funds.money_finance * currency.rate).toFixed(2) : ' --')
+            : (funds.money_miner ? (funds.money_miner * currency.rate).toFixed(2) : ' --')
+        }}
       </div>
-      <div class="flex flex-col lh-32 mb-35 ">
-        <div>{{ $t('托管中总订单') }}</div>
-        <template v-if="!eyetel">
-          <div class="font-40 mt-17 mb-9 textColor">{{ finData.order_sum || 0 }}</div>
-        </template>
-        <template v-else>
-          <div class="font-40 mt-17 mb-9 textColor">********</div>
-        </template>
+      <div class="balance-fiat" v-else>≈{{ currency.currency_symbol }} ********</div>
+
+      <div class="stats-grid">
+        <div class="stat-block">
+          <div class="stat-block-label">{{ $t('预计日收益') }}({{ finData.outputCurrency ? finData.outputCurrency.toUpperCase() : 'USDT' }})</div>
+          <div class="stat-block-value" v-if="!eyetel">{{ finData.today_profit || '--' }}</div>
+          <div class="stat-block-value" v-else>********</div>
+        </div>
+        <div class="stat-block">
+          <div class="stat-block-label">{{ $t('累计收益') }}({{ finData.outputCurrency ? finData.outputCurrency.toUpperCase() : 'USDT' }})</div>
+          <div class="stat-block-value" v-if="!eyetel">{{ finData.aready_profit || '0.00' }}</div>
+          <div class="stat-block-value" v-else>********</div>
+        </div>
+        <div class="stat-block">
+          <div class="stat-block-label">{{ $t('托管中总订单') }}</div>
+          <div class="stat-block-value" v-if="!eyetel">{{ finData.order_sum || 0 }}</div>
+          <div class="stat-block-value" v-else>********</div>
+        </div>
       </div>
     </div>
-    <div class="w-full h-13 contBackground"></div>
-    <div class="px-30">
-      <div class="flex justify-between h-36 mt-37">
-        <div v-if="tapIndex === 0" class=" font-6 h-36 lh-36 textColor">{{ $t('所有理财') }}</div>
-        <div v-if="tapIndex === 0" class="font-26 blue h-36 lh-36 colorMain"
-          @click="$router.push({ path: '/cryptos/fund-rule', query: { back: 0 } })">{{ $t('规则') }}</div>
-        <div v-if="tapIndex === 1" class=" font-6 h-36 lh-36 textColor">{{ $t('所有矿机') }}</div>
-        <div v-if="tapIndex === 1" class="font-26 blue h-36 lh-36 colorMain"
-          @click="$router.push({ path: '/cryptos/machine-rule', query: { back: 0 } })">{{ $t('规则') }}</div>
+
+    <div class="order-section">
+      <div class="section-header">
+        <span class="section-title">{{ tapIndex === 0 ? $t('所有理财') : $t('所有矿机') }}</span>
+        <span v-if="tapIndex === 0" class="section-link" @click="goRule">{{ $t('规则') }}</span>
       </div>
       <template v-if="tapIndex === 0">
-        <financial-list :list="finList" :type="tapIndex" :btnShow="true"></financial-list>
+        <financial-list :list="finList" :type="tapIndex" :btnShow="true" />
       </template>
       <template v-else>
-        <financial-list :list="machineList" :type="tapIndex" :btnShow="true"></financial-list>
+        <financial-list :list="machineList" :type="tapIndex" :btnShow="true" />
       </template>
-
     </div>
   </div>
 </template>
@@ -166,58 +142,153 @@
       })
     },
     changeEyes() {
-      this.eyetel = !this.eyetel;
+      this.eyetel = !this.eyetel
     },
+    goHistory() {
+      this.$router.push({ path: '/cryptos/financialHistory', query: { type: this.tapIndex } })
+    },
+    goRule() {
+      if (this.tapIndex === 0) {
+        this.$router.push({ path: '/cryptos/fund-rule', query: { back: 0 } })
+      } else {
+        this.$router.push({ path: '/cryptos/machine-rule', query: { back: 0 } })
+      }
+    }
   }
 }
 </script>
 
-<style  lang="scss" scoped>
-@import "@/assets/init.scss";
+<style lang="scss" scoped>
+@import '@/assets/init.scss';
 
-#cryptos {
-  .w-370 {
-    border: 1px solid #EAEDF2;
-    color: $text_color1;
+.funds-financial {
+  padding-top: 16px;
+  padding-bottom: 40px;
+}
+
+.sub-tabs {
+  display: flex;
+  gap: 16px;
+  margin-bottom: 24px;
+}
+
+.sub-tab-item {
+  flex: 1;
+  text-align: center;
+  padding: 20px 16px;
+  border-radius: 16px;
+  font-size: 28px;
+  transition: all 0.2s ease;
+  @include themify() {
+    background: themed('cont_background');
+    color: themed('text_color1');
   }
 
-  .active {
-    color: $text_color;
-    background: $btn_main;
-    border-color: $btn_main;
-  }
-
-  .lh-32 {
-    color: $text_color5;
-  }
-
-  .font-40 {
-    font-weight: 700;
-  }
-
-  .cl {
-    color: $text_color4;
-    background: #EBECF0;
-  }
-
-  .mr-13 {
+  &.active {
+    color: #fff;
+    background: linear-gradient(135deg, #1a6dff 0%, #004aee 100%);
     font-weight: 600;
-    color: $text_color4;
+    box-shadow: 0 6px 16px rgba(0, 74, 238, 0.28);
   }
+}
 
-  .col {
-    color: $text_color5;
-  }
+.balance-hero {
+  padding: 36px 32px;
+  border-radius: 24px;
+  background: linear-gradient(135deg, #1a6dff 0%, #004aee 55%, #0035b8 100%);
+  color: #fff;
+  box-shadow: 0 16px 40px rgba(0, 74, 238, 0.28);
+  margin-bottom: 28px;
+}
 
-  .font-6 {
-    font-weight: 600;
-  }
+.balance-hero-top {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 16px;
+}
 
-  .font-4 {
-    font-weight: 400;
-  }
+.balance-label {
+  display: flex;
+  align-items: center;
+  gap: 16px;
+  font-size: 26px;
+  opacity: 0.9;
+}
 
-  .cl-33 {
-    color: $text_color4;
+.eye-btn img {
+  width: 36px;
+  height: 22px;
+}
+
+.history-btn img {
+  width: 36px;
+  height: 42px;
+  opacity: 0.85;
+}
+
+.balance-amount {
+  font-size: 56px;
+  font-weight: 700;
+  line-height: 1.15;
+}
+
+.balance-fiat {
+  margin-top: 8px;
+  font-size: 26px;
+  opacity: 0.85;
+}
+
+.stats-grid {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 12px;
+  margin-top: 28px;
+  padding-top: 24px;
+  border-top: 1px solid rgba(255, 255, 255, 0.2);
+}
+
+.stat-block {
+  flex: 1;
+  min-width: 40%;
+  padding: 16px;
+  border-radius: 14px;
+  background: rgba(255, 255, 255, 0.12);
+}
+
+.stat-block-label {
+  font-size: 22px;
+  opacity: 0.85;
+  line-height: 1.3;
+}
+
+.stat-block-value {
+  margin-top: 8px;
+  font-size: 28px;
+  font-weight: 600;
+}
+
+.order-section {
+  margin-top: 8px;
+}
+
+.section-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 20px;
+}
+
+.section-title {
+  font-size: 32px;
+  font-weight: 600;
+  @include themify() {
+    color: themed('text_color');
   }
-}</style>
+}
+
+.section-link {
+  font-size: 26px;
+  color: #004aee;
+}
+</style>
diff --git a/src/components/Transform/assetsCenter/financialList.vue b/src/components/Transform/assetsCenter/financialList.vue
index 08818e7..0a23084 100644
--- a/src/components/Transform/assetsCenter/financialList.vue
+++ b/src/components/Transform/assetsCenter/financialList.vue
@@ -1,58 +1,73 @@
 <template>
-  <div class="cryptos">
-    <div class="w-762 h-220 mt-37 box-border px-22 py-34 rounded-lg  contBackground"
-      v-for="(item, index) in list" :key="index">
-      <div class="flex justify-between" @click="handleGoOrderDetail(item)">
-        <div class="flex ">
-          <img v-if="type==0" :src="item.img ? item.img : '../../page/financialManagement/images/fund5.png'"
-            alt="" class="w-154 h-154 mr-35" />
-          <img v-else :src="item.img ? item.img : '../../page/financialManagement/images/machine_fpga.png'"
-            alt="" class="w-154 h-154 mr-35" />
-          <div>
-            <div class="font-26 font-700 font-6 textColor" v-if="type==0">
-              {{ $i18n.locale === 'CN'  ? item.financeName_cn :  $i18n.locale === 'zh-CN'?item.financeName : item.financeName_en }}
-            </div>
-            <div class="font-26 font-700 font-6 textColor" v-else>
-              {{ $i18n.locale === 'CN' ?   item.miner_name_cn : $i18n.locale === 'zh-CN' ? item.miner_name : item.miner_name_en }}
-            </div>
-            <!-- <div v-if="tapIndex === 1" class="font-35 font-6">体验矿机3天</div> -->
-            <div class="font-26 font-4 cl-33 mt-25 mb-16 textColor1">{{$t('数量')}}
-              <span class="ml-10 mr-10 textColor">{{item.amount}}</span>{{ item.buyCurrency? item.buyCurrency.toUpperCase() :'USDT' }}</div>
-            <div class="font-26 font-4 cl-33 textColor1">{{$t('周期')}}&nbsp;<span class="textColor">{{ item.cycle == 0 ? $t('无限期') : item.cycle+ $t('天')}}</span>
-            </div>
+  <div class="order-list">
+    <div
+      class="order-card contBackground"
+      v-for="(item, index) in list"
+      :key="index"
+      @click="handleGoOrderDetail(item)"
+    >
+      <div class="order-card-main">
+        <img
+          v-if="type == 0"
+          :src="item.img ? item.img : '../../page/financialManagement/images/fund5.png'"
+          alt=""
+          class="order-thumb"
+        />
+        <img
+          v-else
+          :src="item.img ? item.img : '../../page/financialManagement/images/machine_fpga.png'"
+          alt=""
+          class="order-thumb"
+        />
+        <div class="order-info">
+          <div class="order-name textColor" v-if="type == 0">
+            {{ $i18n.locale === 'CN' ? item.financeName_cn : ($i18n.locale === 'zh-CN' ? item.financeName : item.financeName_en) }}
+          </div>
+          <div class="order-name textColor" v-else>
+            {{ $i18n.locale === 'CN' ? item.miner_name_cn : ($i18n.locale === 'zh-CN' ? item.miner_name : item.miner_name_en) }}
+          </div>
+          <div class="order-meta textColor1">
+            {{ $t('数量') }}
+            <span class="textColor">{{ item.amount }}</span>
+            {{ item.buyCurrency ? item.buyCurrency.toUpperCase() : 'USDT' }}
+          </div>
+          <div class="order-meta textColor1">
+            {{ type == 0 ? $t('周期') : (isMinerTest(item.test) ? $t('周期') : $t('可解锁周期')) }}
+            <span class="textColor">
+              {{ item.cycle == 0 ? $t('无限期') : item.cycle + (type == 0 || isMinerTest(item.test) ? $t('天') : $t('分钟')) }}
+            </span>
           </div>
         </div>
-        <div class="flex justify-center align-center text-center h-152 lh-152">
-          <div class="mr-24 flex flex-col justify-center items-center">
-            <span class="h-52 lh-52 font-44" :class="item.profit / 1 >= 0 ? 'text-green' : 'text-red'">{{(item.profit /
-            1).toFixed(2)}}</span>
-            <span class="w-162 h-32 lh-32 font-26 mt-16 textColor">{{$t('累计收益')}}({{ item.outputCurrency? item.outputCurrency.toUpperCase() : 'USDT'}})</span>
-          </div>
-          <div class="h-152 lh-152">
-            <van-icon class="textColor" name="arrow" />
-          </div>
+      </div>
+      <div class="order-profit">
+        <div class="profit-num" :class="item.profit / 1 >= 0 ? 'text-green' : 'text-red'">
+          {{ (item.profit / 1).toFixed(2) }}
         </div>
+        <div class="profit-label textColor">
+          {{ $t('累计收益') }}({{ item.outputCurrency ? item.outputCurrency.toUpperCase() : 'USDT' }})
+        </div>
+        <van-icon class="order-arrow textColor" name="arrow" />
       </div>
     </div>
   </div>
 </template>
 
 <script>
-import { Icon } from 'vant';
+import { Icon } from 'vant'
+import { isMinerTest } from '@/utils/index.js'
+
 export default {
-  name: "financialList",
-  props: ['list', 'btnShow', 'goBack', 'type'], // orderShow 点击跳转到订单详情的时候是否展示赎回按钮,goBack表示订单详情返回一层
-  components :{
-    [Icon.name]:Icon,
-  },
-  mounted(){
-    console.log(this.type)
+  name: 'financialList',
+  props: ['list', 'btnShow', 'goBack', 'type'],
+  components: {
+    [Icon.name]: Icon
   },
   methods: {
+    isMinerTest,
     handleGoOrderDetail(item) {
       if (this.type === 0) {
         this.$router.push({
-          path: '/financialOrder',
+          path: '/cryptos/financialOrder',
           query: {
             order_no: item.order_no,
             showBtn: this.btnShow,
@@ -62,7 +77,7 @@
         })
       } else {
         this.$router.push({
-          path: '/miningMachineOrder',
+          path: '/cryptos/miningMachineOrder',
           query: {
             order_no: item.order_no,
             showBtn: this.btnShow,
@@ -70,11 +85,84 @@
           }
         })
       }
-    },
+    }
   }
 }
 </script>
 
-<style scoped>
+<style scoped lang="scss">
+.order-list {
+  padding: 0 32px 24px;
+}
 
+.order-card {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  gap: 20px;
+  margin-top: 24px;
+  padding: 28px 24px;
+  border-radius: 20px;
+}
+
+.order-card-main {
+  display: flex;
+  align-items: center;
+  flex: 1;
+  min-width: 0;
+}
+
+.order-thumb {
+  width: 120px;
+  height: 120px;
+  margin-right: 24px;
+  flex-shrink: 0;
+  object-fit: contain;
+}
+
+.order-info {
+  flex: 1;
+  min-width: 0;
+}
+
+.order-name {
+  font-size: 34px;
+  font-weight: 600;
+  line-height: 1.35;
+  word-break: break-word;
+}
+
+.order-meta {
+  margin-top: 16px;
+  font-size: 30px;
+  line-height: 1.4;
+}
+
+.order-profit {
+  position: relative;
+  flex-shrink: 0;
+  padding-right: 36px;
+  text-align: center;
+}
+
+.profit-num {
+  font-size: 44px;
+  font-weight: 700;
+  line-height: 1.2;
+}
+
+.profit-label {
+  margin-top: 12px;
+  font-size: 26px;
+  line-height: 1.3;
+  max-width: 180px;
+}
+
+.order-arrow {
+  position: absolute;
+  right: 0;
+  top: 50%;
+  transform: translateY(-50%);
+  font-size: 32px;
+}
 </style>
diff --git a/src/components/Transform/assetsCenter/overview.vue b/src/components/Transform/assetsCenter/overview.vue
index d9b9cc2..4c792e3 100644
--- a/src/components/Transform/assetsCenter/overview.vue
+++ b/src/components/Transform/assetsCenter/overview.vue
@@ -1,86 +1,97 @@
 <template>
-  <div class="box-border">
-    <div class="pl-33 pr-33 total_wrap">
-      <div class="flex justify-between text-grey relative">
-        <div class="flex">
-          <span class="text-grey font-30">{{ $t('总资产') }}(USDT)</span>
-          <div @click.stop="changeEyes">
-            <img :src="handleImage('../../../assets/image/assets-center/eye-open.png')" class="w-32 h-18"
-              v-show="!eyetel" />
-            <img :src="handleImage('../../../assets/image/assets-center/eye-close.png')" class="w-32 h-18"
-              v-show="eyetel" />
+  <div class="funds-overview">
+    <!-- 总资产卡片 -->
+    <div class="balance-hero">
+      <div class="balance-hero-top">
+        <div class="balance-label">
+          <span>{{ $t('总资产') }}(USDT)</span>
+          <div class="eye-btn" @click.stop="changeEyes">
+            <img :src="handleImage('../../../assets/image/assets-center/eye-open.png')" v-show="!eyetel" />
+            <img :src="handleImage('../../../assets/image/assets-center/eye-close.png')" v-show="eyetel" />
           </div>
         </div>
-        <div class="right-clock" @click="goRouter('/cryptos/exchangeHistory')">
-          <img :src="handleImage('../../../assets/image/assets-center/Subtract.png')" class="w-34 h-40" />
+        <div class="history-btn" @click="goRouter('/cryptos/exchangeHistory')">
+          <img :src="handleImage('../../../assets/image/assets-center/Subtract.png')" />
         </div>
       </div>
-      <div class="font-700 font-66 mt-18 textColor" v-if="!eyetel">{{ funds.total || '--' }}
-        <span class="font-40 text-grey">≈{{ currency.currency_symbol }}{{ funds.total ? (funds.total *
-          currency.rate).toFixed(2) : ' --' }}</span>
+      <div class="balance-amount" v-if="!eyetel">{{ funds.total || '--' }}</div>
+      <div class="balance-amount" v-else>********</div>
+      <div class="balance-fiat" v-if="!eyetel">
+        ≈{{ currency.currency_symbol }}{{ funds.total ? (funds.total * currency.rate).toFixed(2) : ' --' }}
       </div>
-      <div class="font-70 font-66 mt-18 textColor" v-else>********</div>
+      <div class="balance-fiat" v-else>≈{{ currency.currency_symbol }} ********</div>
     </div>
-    <div class="pl-33 pr-33 btn-box flex justify-between">
-      <div class="text-white font-25 textColor tabBackground" @click="goRouter('/cryptos/recharge/rechargeList')">
-        <div class="word-wrap">
-          <img :src="handleImage(`../../../assets/theme/dark/image/assets/up.png`)" alt="">
-          <span> {{ $t('充币') }}</span>
+
+    <!-- 快捷操作 -->
+    <div class="quick-actions">
+      <div class="action-item" @click="goRouter('/cryptos/recharge/rechargeList')">
+        <div class="action-icon deposit">
+          <img :src="handleImage(`../../../assets/theme/${THEME}/image/assets/up.png`)" alt="" />
         </div>
+        <span>{{ $t('充币') }}</span>
       </div>
-      <div class="text-white font-25 textColor tabBackground" @click="withdrawBtn">
-        <div class="word-wrap">
-          <img :src="handleImage(`../../../assets/theme/dark/image/assets/down.png`)" alt="">
-          <span>{{ $t('提币') }}</span>
+      <div class="action-item" @click="withdrawBtn">
+        <div class="action-icon withdraw">
+          <img :src="handleImage(`../../../assets/theme/${THEME}/image/assets/down.png`)" alt="" />
         </div>
+        <span>{{ $t('提币') }}</span>
       </div>
-      <div class="text-white font-25 textColor tabBackground" @click="goRouter('/cryptos/exchangePage')">
-        <div class="word-wrap">
-          <img :src="handleImage(`../../../assets/theme/dark/image/assets/l_r.png`)" alt="">
-          <span>{{ $t('闪兑') }}</span>
+      <div class="action-item" @click="goRouter('/cryptos/exchangePage')">
+        <div class="action-icon swap">
+          <img :src="handleImage(`../../../assets/theme/${THEME}/image/assets/l_r.png`)" alt="" />
         </div>
+        <span>{{ $t('闪兑') }}</span>
+      </div>
+      <div class="action-item" @click="goRouter('/my/transfer')">
+        <div class="action-icon transfer">
+          <img :src="handleImage('../../../assets/imgs/assets/huazhuan.png')" alt="" />
+        </div>
+        <span>{{ $t('划转') }}</span>
       </div>
     </div>
-    <!--       <div class="divider-line"></div>-->
-    <div class="pl-30 pr-30">
-      <div class="assets-content-title font-35 titleColor">{{ $t('投资组合') }}</div>
-      <div class="assets-list font-30 flex justify-between" v-for="(item, index) in list" :key="index">
-        <div class="items-center">
-          <img :src="handleImage('../../../assets/image/assets-center/funds/' + item.icon + '.png')" class="w-44 h-44" />
-          <div class="text-grey symbol-name font-30 textColor2">{{ $t(item.text) }}</div>
+
+    <!-- 账户分布 -->
+    <div class="section-header">
+      <span class="section-title">{{ $t('投资组合') }}</span>
+    </div>
+    <div class="portfolio-list">
+      <div class="portfolio-card" v-for="(item, index) in list" :key="index">
+        <div class="portfolio-left">
+          <div class="portfolio-icon">
+            <img :src="handleImage('../../../assets/image/assets-center/funds/' + item.icon + '.png')" />
+          </div>
+          <span class="portfolio-name">{{ $t(item.text) }}</span>
         </div>
-        <div class="flex-col font-30 text-right" v-if="!eyetel">
-          <div class="textColor">{{ funds[item.key] || '--' }} USDT</div>
-          <div class="text-grey font-30 font-400 mb-0">≈{{ currency.currency_symbol }} {{ funds[item.key] ?
-            (funds[item.key]
-              * currency.rate).toFixed(2) : ' --' }}</div>
+        <div class="portfolio-right" v-if="!eyetel">
+          <div class="portfolio-value">{{ funds[item.key] || '--' }} USDT</div>
+          <div class="portfolio-fiat">
+            ≈{{ currency.currency_symbol }} {{ funds[item.key] ? (funds[item.key] * currency.rate).toFixed(2) : ' --' }}
+          </div>
         </div>
-        <div class="flex-col font-30 text-right" v-if="eyetel">
-          <div class="textColor">******** USDT</div>
-          <div class="text-grey">≈{{ currency.currency_symbol }} ********</div>
+        <div class="portfolio-right" v-else>
+          <div class="portfolio-value">********</div>
+          <div class="portfolio-fiat">≈{{ currency.currency_symbol }} ********</div>
         </div>
       </div>
     </div>
   </div>
 </template>
+
 <script>
-import { _getWallet } from '@/service/fund.api';
-import { Dialog } from 'vant';
-import { mapGetters } from "vuex";
+import { Dialog } from 'vant'
+import { mapGetters } from 'vuex'
 import { THEME } from '@/config/theme'
+
 export default {
   name: 'AssetsPage',
   components: {
-    [Dialog.name]: Dialog,
+    [Dialog.name]: Dialog
   },
   props: ['funds'],
   data() {
     return {
       THEME,
-      // total:"",
-      // status:"", //身份认证状态 0已申请未审核,1审核中,2审核通过,3审核未通过
-      eyetel: false,
-      active: 0,
+      eyetel: false
     }
   },
   computed: {
@@ -91,159 +102,226 @@
         { id: 2, text: this.$t('合约账户 (U本位)'), icon: 'contract_u', key: 'money_contract' },
         { id: 3, text: this.$t('交割合约账户'), icon: 'contract_d', key: 'money_futures' },
         { id: 4, text: this.$t('理财账户'), icon: 'invest', key: 'money_finance' },
-        { id: 5, text: this.$t('矿机资产'), icon: 'mining', key: 'money_miner' },
+        { id: 5, text: this.$t('矿机资产'), icon: 'mining', key: 'money_miner' }
       ]
-    },
-  },
-  mounted() {
-    // this.getData();
-    // this.getList();
+    }
   },
   methods: {
     handleImage(url) {
       return new URL(url, import.meta.url).href
     },
-    onClickLeft() {
-      this.$router.go(-1);
-    },
     goRouter(parmas) {
       if (parmas === '/cryptos/exchangeHistory') {
         this.$router.push({ path: parmas, query: { type: 0 } })
       } else {
-        this.$router.push(parmas);
+        this.$router.push(parmas)
       }
-    },
-    getList() {
-      _getWallet().then((data) => {
-        this.list = data.extends;
-      });
     },
     changeEyes() {
-      this.eyetel = !this.eyetel;
+      this.eyetel = !this.eyetel
     },
-    beforeClose(action, done) {
-      if (action === 'confirm') {
-        setTimeout(done, 1000);
-      } else {
-        done();
-      }
-    },
-    //跳转提币页面
     withdrawBtn() {
-      //身份已认证,直接跳转,未认证则提示跳身份认证页
-      // if(this.funds.status==2) {
-      //   this.$router.push({
-      //     path:'/cryptos/withdraw/withdrawPage'
-      //   });
-      // }else{
-      //   Dialog.confirm({
-      //     confirmButtonText:this.$t('确定'),
-      //     cancelButtonText:this.$t('取消'),
-      //     title: this.$t('提示'),
-      //     message: this.$t('请进行身份KYC认证'),
-      //     beforeClose: (action, done) => {
-      //       if (action === 'confirm') {
-      //         done();
-      //         this.$router.push({
-      //           path:'/authentication'
-      //         });
-      //       } else {
-      //         done();
-      //       }
-      //     },
-      //   });
-      // }
-      this.$router.push({
-        path: '/cryptos/withdraw/withdrawPage'
-      });
-    },
-
-  },
-
+      this.$router.push({ path: '/cryptos/withdraw/withdrawPage' })
+    }
+  }
 }
 </script>
 
 <style lang="scss" scoped>
-@import "@/assets/init.scss";
+@import '@/assets/init.scss';
 
-#cryptos {
-  .right-clock {
-    position: absolute;
-    top: 0;
-    right: -3px;
+.funds-overview {
+  padding-top: 16px;
+  padding-bottom: 40px;
+}
+
+.balance-hero {
+  padding: 36px 32px;
+  border-radius: 24px;
+  background: linear-gradient(135deg, #1a6dff 0%, #004aee 55%, #0035b8 100%);
+  color: #fff;
+  box-shadow: 0 16px 40px rgba(0, 74, 238, 0.28);
+  margin-bottom: 28px;
+}
+
+.balance-hero-top {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 16px;
+}
+
+.balance-label {
+  display: flex;
+  align-items: center;
+  gap: 16px;
+  font-size: 26px;
+  opacity: 0.9;
+}
+
+.eye-btn img {
+  width: 36px;
+  height: 22px;
+}
+
+.history-btn img {
+  width: 36px;
+  height: 42px;
+  opacity: 0.85;
+}
+
+.balance-amount {
+  font-size: 64px;
+  font-weight: 700;
+  line-height: 1.15;
+  word-break: break-all;
+}
+
+.balance-fiat {
+  margin-top: 10px;
+  font-size: 28px;
+  opacity: 0.85;
+}
+
+.quick-actions {
+  display: grid;
+  grid-template-columns: repeat(4, 1fr);
+  gap: 16px;
+  margin-bottom: 36px;
+}
+
+.action-item {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  gap: 10px;
+  padding: 20px 8px;
+  border-radius: 20px;
+  @include themify() {
+    background: themed('cont_background');
   }
+  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.04);
 
-  .total_wrap {
-    margin-top: 44px;
-  }
-
-  .asset-title-box {
-    margin: 40px 0;
-  }
-
-  .btn-box {
-    margin-top: 44px;
-  }
-
-  .btn-box>div {
-    width: 234px;
-    padding: 20px 15px;
-    box-sizing: border-box;
-    text-align: center;
-    border-radius: 8.8px;
-    font-size: 26.5px;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-
-    .word-wrap {
-      display: flex;
-      align-items: center;
-      justify-content: center;
-
-      img {
-        width: 40px;
-        height: 40px;
-        margin-right: 22px;
-      }
-
-      span {
-        font-size: 26.5px;
-      }
+  span {
+    font-size: 24px;
+    @include themify() {
+      color: themed('text_color');
     }
   }
+}
 
-  .mr60 {
-    margin-right: 60px;
+.action-icon {
+  width: 80px;
+  height: 80px;
+  border-radius: 50%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+
+  img {
+    width: 40px;
+    height: 40px;
   }
 
-  .divider-line {
-    border-bottom: 1px solid $border-grey;
-    padding-bottom: 80px;
+  &.deposit {
+    background: rgba(26, 109, 255, 0.12);
   }
 
-  .assets-content-title {
-    margin-top: 60px;
-    margin-bottom: 55px;
+  &.withdraw {
+    background: rgba(230, 84, 97, 0.12);
   }
 
-  .assets-list {
-    margin-bottom: 35px;
+  &.swap {
+    background: rgba(46, 189, 133, 0.12);
   }
 
-  .assets-list>div {
-    display: flex;
+  &.transfer {
+    background: rgba(255, 152, 0, 0.12);
   }
+}
 
-  .assets-list>div:nth-child(2) div:nth-child(1) {
-    margin-bottom: 16px;
-    font-size: 30px;
-    font-weight: 700;
+.section-header {
+  margin-bottom: 20px;
+}
+
+.section-title {
+  font-size: 32px;
+  font-weight: 600;
+  @include themify() {
+    color: themed('text_color');
   }
+}
 
-  .symbol-name {
-    margin-left: 17px;
-    //margin-top:10px;
+.portfolio-list {
+  display: flex;
+  flex-direction: column;
+  gap: 16px;
+}
+
+.portfolio-card {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 28px 24px;
+  border-radius: 20px;
+  @include themify() {
+    background: themed('cont_background');
+  }
+  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.04);
+}
+
+.portfolio-left {
+  display: flex;
+  align-items: center;
+  gap: 20px;
+  flex: 1;
+  min-width: 0;
+}
+
+.portfolio-icon {
+  width: 72px;
+  height: 72px;
+  border-radius: 50%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  background: rgba(0, 74, 238, 0.08);
+  flex-shrink: 0;
+
+  img {
+    width: 44px;
+    height: 44px;
+  }
+}
+
+.portfolio-name {
+  font-size: 28px;
+  line-height: 1.3;
+  @include themify() {
+    color: themed('text_color');
+  }
+}
+
+.portfolio-right {
+  text-align: right;
+  flex-shrink: 0;
+  margin-left: 16px;
+}
+
+.portfolio-value {
+  font-size: 30px;
+  font-weight: 600;
+  @include themify() {
+    color: themed('text_color');
+  }
+}
+
+.portfolio-fiat {
+  margin-top: 6px;
+  font-size: 24px;
+  @include themify() {
+    color: themed('text_color1');
   }
 }
 </style>
diff --git a/src/components/Transform/contract-futrue/index.vue b/src/components/Transform/contract-futrue/index.vue
index 4a87a0f..cbb7de2 100644
--- a/src/components/Transform/contract-futrue/index.vue
+++ b/src/components/Transform/contract-futrue/index.vue
@@ -31,10 +31,17 @@
     }
   },
   watch: {
-    initFutrue: {
-      handler(val) {
-        console.log("initFutrue", val);
+    'initFutrue.para': {
+      handler(para) {
+        if (para && para.length > 0) {
+          if (!this.active) {
+            this.active = para[0].para_id || ''
+            this.$emit('paraId', { id: this.active, index: 0 })
+          }
+        }
       },
+      deep: true,
+      immediate: true
     }
   },
   data() {
@@ -44,7 +51,7 @@
     }
   },
   created() {
-    if (this.initFutrue.para.length > 0) {
+    if (this.initFutrue.para && this.initFutrue.para.length > 0) {
       this.active = this.initFutrue.para[0].para_id || ''
       this.$emit('paraId', { id: this.active, index: 0 })
     }
diff --git a/src/components/Transform/contract-header/index.vue b/src/components/Transform/contract-header/index.vue
index 1d305d8..b3c83fe 100644
--- a/src/components/Transform/contract-header/index.vue
+++ b/src/components/Transform/contract-header/index.vue
@@ -22,13 +22,9 @@
                             @click="jump" />
                     </div> -->
         </div>
-        <div class="flex justify-between  pt-34">
-          <button class="tabBtn w-368 h-74 lh-74 border-none  rounded"
-            :class="selectIndex == 1 ? 'select-active' : 'no-select'" @click="changeTab(1)">
-            {{ $t('永续合约') }}</button>
-          <button class="tabBtn w-368 h-74 lh-74 border-none  rounded"
-            :class="selectIndex == 2 ? 'select-one-active' : 'no-select'" @click="changeTab(2)">
-            {{ queryType == 'cryptos' ? $t('交割合约') : $t('期货交易') }}</button>
+        <div class="flex justify-center pt-34">
+          <button class="tabBtn w-368 h-74 lh-74 border-none rounded select-one-active">
+            {{ queryType == 'cryptos' ? $t('AI量化') : $t('期货交易') }}</button>
         </div>
       </div>
     </div>
@@ -66,7 +62,7 @@
                 alt="logo" class="w-24 h-24 rounded-full mr-8" />
               {{ item.name }}
             </div>
-            <div class="text-grey mt-10 font-28">{{ selectIndex == 1 ? $t('永续') : $t('交割') }}</div>
+            <div class="text-grey mt-10 font-28">{{ queryType == 'cryptos' ? $t('AI量化') : $t('交割') }}</div>
           </div>
           <div class="text-right">
             <div class="textColor font-28">{{ item.close }}</div>
@@ -125,7 +121,7 @@
   computed: {
     ...mapGetters({ coinList: 'home/coinList' }),
     title() {
-      return [this.$t('永续'), this.$t('交割')][this.selectIndex - 1]
+      return this.queryType == 'cryptos' ? this.$t('AI量化') : this.$t('期货交易')
     }
   },
   data() {
@@ -155,10 +151,21 @@
   },
   methods: {
     onRoute(item) {
-      if (this.$route.params.symbol !== item.symbol) {
-        this.$router.push(`/cryptos/perpetualContract/${item.symbol}?type=${this.queryType}`)
+      if (this.symbol === item.symbol) {
+        this.show = false
+        return
+      }
+      setStorage('symbol', item.symbol)
+      const selectIndex = 2
+      if (this.$route.name === 'tradeIndex' || this.$route.path.startsWith('/trade/index')) {
+        this.$router.push({
+          path: '/trade/index',
+          query: { ...this.$route.query, selectIndex: String(selectIndex) }
+        })
         this.$emit('update-coin', item.symbol)
-        setStorage('symbol', item.symbol)
+      } else {
+        this.$router.push(`/cryptos/perpetualContract/${item.symbol}?type=${this.queryType}&selectIndex=${selectIndex}`)
+        this.$emit('update-coin', item.symbol)
         this.$forceUpdate()
       }
       this.show = false
@@ -205,9 +212,8 @@
     klineJump() {
       this.$router.push(`/cryptos/trendDetails/${this.symbol}?type=${this.queryType}`)
     },
-    changeTab(index) {
-      this.$emit('tab', index)
-      // this.selectIndex2 = index;
+    changeTab() {
+      this.$emit('tab', 2)
     },
     // onSearch: debounce(function (e) {
     //   console.log("e", this.popupSearch);
diff --git a/src/components/Transform/cry-nav/index.vue b/src/components/Transform/cry-nav/index.vue
index 1cfb8a2..e63868e 100644
--- a/src/components/Transform/cry-nav/index.vue
+++ b/src/components/Transform/cry-nav/index.vue
@@ -72,14 +72,14 @@
           isLogin: true
         },
         {
-          name: this.$t('基金理财'),
-          icon: new URL('@/assets/theme/dark/image/nav/financialmanagement.png', import.meta.url),
-          path: '/cryptos/fm-home'
+          name: this.$t('矿池'),
+          icon: new URL('@/assets/theme/dark/image/nav/SmartKuangchi.png', import.meta.url),
+          path: '/cryptos/machine'
         },
         // {
-        //   name: this.$t('智能矿池'),
-        //   icon: new URL('@/assets/theme/dark/image/nav/SmartKuangchi.png', import.meta.url),
-        //   path: '/cryptos/machine'
+        //   name: this.$t('基金理财'),
+        //   icon: new URL('@/assets/theme/dark/image/nav/financialmanagement.png', import.meta.url),
+        //   path: '/cryptos/fm-home'
         // },
         // {
         //   name: this.$t('质押借币'),
@@ -165,14 +165,14 @@
         isLogin: true
       },
       {
-        name: this.$t('基金理财'),
-        icon: new URL('@/assets/theme/dark/image/nav/financialmanagement.png', import.meta.url),
-        path: '/cryptos/fm-home'
+        name: this.$t('矿池'),
+        icon: new URL('@/assets/theme/dark/image/nav/SmartKuangchi.png', import.meta.url),
+        path: '/cryptos/machine'
       },
       // {
-      //   name: this.$t('智能矿池'),
-      //   icon: new URL('@/assets/theme/dark/image/nav/SmartKuangchi.png', import.meta.url),
-      //   path: '/cryptos/machine'
+      //   name: this.$t('基金理财'),
+      //   icon: new URL('@/assets/theme/dark/image/nav/financialmanagement.png', import.meta.url),
+      //   path: '/cryptos/fm-home'
       // },
       // {
       //   name: this.$t('质押借币'),
diff --git a/src/components/Transform/deliveryContract/hold.vue b/src/components/Transform/deliveryContract/hold.vue
index 1fe45a8..f80d863 100644
--- a/src/components/Transform/deliveryContract/hold.vue
+++ b/src/components/Transform/deliveryContract/hold.vue
@@ -10,7 +10,7 @@
               {{ item.direction == 'buy' ? $t('开多') : $t('开空') }}
             </div>
             <div class="ml-22 font-31 font-600">
-              <span class="textColor">{{ item.name }} {{ $t('交割') }}</span>
+              <span class="textColor">{{ item.name }} {{ $t('AI量化') }}</span>
               <!-- <span class="text-grey font-28 font-400 ml-17 mr-17">
                 {{ $t('全仓') }} {{ item.lever_rate }}x
               </span> -->
@@ -42,12 +42,16 @@
           <div class="text-grey text-center">{{ $t('数量') }}</div>
           <div class="mt-20 text-center textColor">{{ item.volume }}</div>
         </div>
-        <div class="flex-1 flex flex-col items-end font-28">
+        <div class="flex-1 flex flex-col items-end font-28" v-if="item.state === 'created'">
           <div class="text-grey">{{ $t('盈亏') }}</div>
           <div class="mt-20" :class="item.profit / 1 > 0 ? 'text-green' : 'text-red'">
             {{ item.profit / 1 > 0 ? '+' + item.profit : item.profit }}
           </div>
         </div>
+        <div class="flex-1 flex flex-col items-end font-28" v-else>
+          <div class="text-grey">{{ $t('盈亏') }}</div>
+          <div class="mt-20 textColor">--</div>
+        </div>
       </div>
       <div class="flex pb-32 font-28">
         <div class="flex-1">
diff --git a/src/components/Transform/list-quotation/index.vue b/src/components/Transform/list-quotation/index.vue
index 3568206..67a802b 100644
--- a/src/components/Transform/list-quotation/index.vue
+++ b/src/components/Transform/list-quotation/index.vue
@@ -159,7 +159,7 @@
   methods: {
     ...mapActions('home', [SET_CURRENCY]),
     onItemClick(item) {
-      if (this.tabActive == 2) { //现货
+      if (this.tabActive == 2) { // 现货
         this.$router.push({
           path: `/cryptos/trade/${item.symbol}`
         });
@@ -167,7 +167,7 @@
         setStorage('symbol', item.symbol)
         this.$router.push({
           path: `/cryptos/perpetualContract/${item.symbol}`,
-          query: { type: 'cryptos' }
+          query: { type: 'cryptos', selectIndex: '1' }
         });
       }
     },
diff --git a/src/components/Transform/perpetual-open/index.vue b/src/components/Transform/perpetual-open/index.vue
index acbed0c..bd02be2 100644
--- a/src/components/Transform/perpetual-open/index.vue
+++ b/src/components/Transform/perpetual-open/index.vue
@@ -62,8 +62,11 @@
                 </div>
               </div>
             </template>
-            <contract-futrue v-if="selectIndex == 2 && JSON.stringify(initFutrue.para) != '[]'" class="mb-20"
+            <contract-futrue v-if="selectIndex == 2 && hasFutruePara" class="mb-20"
               :initFutrue="initFutrue" @paraId="onParaId" />
+            <div v-else-if="selectIndex == 2" class="text-grey font-26 py-20 text-center mb-20">
+              {{ $t('暂无交割周期配置,请联系客服') }}
+            </div>
             <div class="h-76 lh-76 greyBg mb-30 flex pr-20 justify-center rounded-lg textColor" v-if="selectIndex == 1">
               <input placeholder="" class="greyBg w-full pl-20  h-76 border-none text-left rounded-lg"
                 :disabled="type / 1 === 1" @focus="focus = true" v-model="form.price" />
@@ -79,7 +82,7 @@
               <input v-if="selectIndex == 1" placeholder="USDT" class="border-none greyBg text-center textColor"
                 style="width: 17rem;border-radius: 5rem;" v-model="form.amount" type="number" @input="onInput" />
 
-              <input v-if="selectIndex == 2 && JSON.stringify(initFutrue.para) != '[]'"
+              <input v-if="selectIndex == 2 && hasFutruePara"
                 :placeholder="($t('最少') + initFutrue && initFutrue.para ? $t('最小金额') + initFutrue.para[paraIndex].buy_min : '')"
                 class="border-none greyBg text-center textColor" style="width: 17rem;border-radius: 5rem;"
                 v-model="form.amount" type="number" @input="onInput" />
@@ -158,15 +161,15 @@
               <div class="textColor">{{ initFutrue.amount }} USDT</div>
             </div>
             <div class="flex font-24 text-grey justify-between mt-20"
-              v-if="selectIndex == 2 && JSON.stringify(initFutrue.para) != '[]'">
+              v-if="selectIndex == 2 && hasFutruePara">
               <div>{{ $t("手续费") }}</div>
               <div class="textColor">
                 {{
                   (
                     form.amount *
                     (initFutrue && initFutrue.para
-                      ? initData.para[paraIndex].unit_fee
-                      : "")
+                      ? initFutrue.para[paraIndex].unit_fee
+                      : 0)
                   ).toFixed(2)
                 }}
                 {{ queryType === 'cryptos' ? 'USDT' : 'USD' }}
@@ -200,7 +203,7 @@
                   </div>
                 </div>
               </template>
-              <template v-if="selectIndex == 2">
+              <template v-if="selectIndex == 2 && hasFutruePara">
                 <div class="w-full h-80 lh-80 bg-green flex text-white rounded-ban mt-10 " @click="order('open')"
                   v-if="userInfo.token">
                   <div class="font-34 relative text-center" style="flex-grow: 1">
@@ -508,6 +511,9 @@
   computed: {
     ...mapGetters('user', ['userInfo']),
     ...mapGetters('home', ['currency']),
+    hasFutruePara() {
+      return Array.isArray(this.initFutrue?.para) && this.initFutrue.para.length > 0
+    },
     initData() {
       let obj = null
       if (this.selectIndex / 1 === 1) {
diff --git a/src/components/fx-footer/index.vue b/src/components/fx-footer/index.vue
index 23dc6b1..476ef9b 100644
--- a/src/components/fx-footer/index.vue
+++ b/src/components/fx-footer/index.vue
@@ -21,8 +21,8 @@
         </template>
       </van-tabbar-item>
 
-      <van-tabbar-item name="fund" to="/cryptos/fund">
-        <span :class="[active === 'fund' ? 'active' : '']">{{ $t('理财') }}</span>
+      <van-tabbar-item name="fund" to="/cryptos/machine">
+        <span :class="[active === 'fund' ? 'active' : '']">{{ $t('矿池') }}</span>
         <template #icon="props">
           <img :src="props.active ? icon.sto.active : icon.sto.inactive" />
         </template>
@@ -114,7 +114,7 @@
   active.value = 'assets'
 } else if (route.path == "/documentation/index") {
   active.value = 'documentation'
-} else if (route.path == "/cryptos/fund" || route.path.indexOf('/cryptos/fund') != -1) {
+} else if (isFundTabPath(route.path)) {
   active.value = 'fund'
 }
 let quotesStore = useQuotesStore()
@@ -136,10 +136,26 @@
     active.value = 'assets'
   } else if (route.path == "/documentation/index") {
     active.value = 'documentation'
-  } else if (route.path == "/cryptos/fund" || route.path.indexOf('/cryptos/fund') != -1) {
+  } else if (isFundTabPath(route.path)) {
     active.value = 'fund'
   }
 })
+
+const fundTabPrefixes = [
+  '/cryptos/machine',
+  '/cryptos/fm-home',
+  '/cryptos/loan',
+  '/cryptos/pool-lock',
+  '/cryptos/machine-buy',
+  '/cryptos/machine-rule',
+  '/cryptos/machine-confirm',
+  '/cryptos/order-success',
+  '/cryptos/loanHistory',
+  '/cryptos/loanRule',
+]
+function isFundTabPath(path) {
+  return fundTabPrefixes.some((p) => path === p || path.startsWith(p + '/'))
+}
 // 底部列表
 const icon = {
   // optional: {
diff --git a/src/config/index.js b/src/config/index.js
index 195c07f..ca3ce72 100644
--- a/src/config/index.js
+++ b/src/config/index.js
@@ -36,11 +36,11 @@
 // const ENV_DEV = 'zhapi.coinbtcs.com' // dev
 // const ENV_DEV = 'openapi.yanshiz.com' // dev
 // const ENV_DEV = 'api.waonjinzai.top' // dev
-const ENV_DEV = 'localhost:8235' // dev
+const ENV_DEV = 'api.bitget-jp-us.cyou' // dev
 
 // const ENV_PRO = 'qheufhj.site' //  app域名
 // const ENV_PRO = window.location.hostname // 接口域名跟随 H5zhapi.coinbtcs.com
-const ENV_PRO = 'api.waonjinzai.top' // 接口域名跟随 H5zhapi.coinbtcs.com
+const ENV_PRO = 'api.bitget-jp-us.cyou'
 // const ENV_PRO = '192.168.10.6:8086' // 接口域名跟随 H5zhapi.coinbtcs.com
 
 let base_url = ''
diff --git a/src/i18n/Deutsch.js b/src/i18n/Deutsch.js
index 19ed091..41b523b 100644
--- a/src/i18n/Deutsch.js
+++ b/src/i18n/Deutsch.js
@@ -1,4 +1,4 @@
-export default {
+export default {
 	"交易金额":"Transaktionsbetrag",
 	"请选择正确的网络。若发送至错误的网络,您的资产可能会丢失。":"Bitte wählen Sie das richtige Netzwerk. Wenn Sie an das falsche Netzwerk senden, können Ihre Vermögenswerte verloren gehen.",
 	"信用分":"Kreditwürdigkeit",
@@ -2091,6 +2091,7 @@
     "查询": "Anfrage",
     "永续合约": "unbefristete Verträge",
     "交割合约": "Liefervertrag",
+    "AI量化": "KI-Quant",
     "最新价格": "jetzter Preis",
     "24h最高价": "höchster Preis in 24 Stunden",
     "24h最低价": "niedrigster Preis in 24 Stunden",
@@ -2754,6 +2755,7 @@
     "期望借款金额": "Gewünschter Kreditbetrag",
     "经过平台审核,您可向平台申请一笔借款!": "Nach Überprüfung durch die Plattform können Sie einen Kredit bei der Plattform beantragen!",
     "助力贷": "Hilfskredit",
+    "AI Quant": "AI Quant",
     "loanRuleContent12": "Um den Fälligkeitsdatum nicht zu verpassen, wird unser Kundenservice Sie mehrmals vor Ihrem Zahlungsdatum benachrichtigen. Wenn Sie das Zahlungsdatum verpassen, wird Ihre Zahlung automatisch um 7 Tage verlängert. In diesem Fall wird eine zusätzliche Überziehungszinsgebühr in Höhe von 0,025 des Kreditbetrags erhoben.",
     "loanRuleTitle12": "12. Was passiert, wenn ich die Zahlung nicht rechtzeitig leiste?",
     "loanRuleContent11": "Die automatische Rückzahlung wird derzeit nicht unterstützt.",
diff --git a/src/i18n/Italy.js b/src/i18n/Italy.js
index c975b43..1115252 100644
--- a/src/i18n/Italy.js
+++ b/src/i18n/Italy.js
@@ -1,4 +1,4 @@
-export default {
+export default {
 	"交易金额":"Importo della transazione",
 	"请选择正确的网络。若发送至错误的网络,您的资产可能会丢失。":"Seleziona la rete corretta. Se invii alla rete sbagliata, i tuoi dati potrebbero andare persi.",
 	"信用分":"punteggio di credito",
@@ -2223,6 +2223,7 @@
     "查询": "Ricerca",
     "永续合约": "Perpetuo",
     "交割合约": "Futures",
+    "AI量化": "AI Quant",
     "最新价格": "Ultimo prezzo",
     "24h最高价": "24 ore Alta",
     "24h最低价": "24 ore Basso",
@@ -2844,6 +2845,7 @@
     "期望借款金额": "Importo del Prestito desiderato",
     "经过平台审核,您可向平台申请一笔借款!": "Dopo la revisione della piattaforma, è possibile richiedere un prestito dalla piattaforma!",
     "助力贷": "Prestito Assistenza",
+    "AI Quant": "AI Quant",
     "loanRuleContent12": "Per evitare di perdere la data di pagamento, il nostro servizio clienti ti avviserà più volte prima della data di scadenza. Se perdi la data di pagamento, il tuo pagamento verrà automaticamente prorogato di 7 giorni. In questo caso, ti verranno addebitati interessi di mora aggiuntivi pari allo 0,025 dell'importo del prestito.",
     "loanRuleTitle12": "12. Cosa succede se non riesco a rimborsare in tempo?",
     "loanRuleContent11": "Attualmente il pagamento automatico non è supportato.",
diff --git a/src/i18n/Japanese.js b/src/i18n/Japanese.js
index fe8649e..4c99257 100644
--- a/src/i18n/Japanese.js
+++ b/src/i18n/Japanese.js
@@ -1,4 +1,4 @@
-export default {
+export default {
 	"交易金额":"取引金額",
 	"请选择正确的网络。若发送至错误的网络,您的资产可能会丢失。":"正しいネットワークを選択してください。間違ったネットワークに送信すると、資産が失われる可能性があります。",
 	"信用分":"クレジットスコア",
@@ -1958,6 +1958,7 @@
     "查询": "お問い合わせ",
     "永续合约": "無期限契約",
     "交割合约": "配達契約",
+    "AI量化": "AIクオンツ",
     "最新价格": "最新の価格",
     "24h最高价": "24時間最高価格",
     "24h最低价": "24時間最低価格",
@@ -2612,6 +2613,7 @@
     "期望借款金额": "希望の借入金額",
     "经过平台审核,您可向平台申请一笔借款!": "プラットフォームの審査を経て、プラットフォームからの借入申請が可能です!",
     "助力贷": "支援ローン",
+    "AI Quant": "AIクォント",
     "loanRuleContent12": "支払い日を逃さないようにするために、お客様の支払い日の前に複数回通知を行います。支払い日を逃した場合、支払いは自動的に7日延長されます。この場合、追加の遅延利息として貸付金額の0.025が請求されます。",
     "loanRuleTitle12": "12. 支払いを遅延した場合の対処方法は?",
     "loanRuleContent11": "現在、自動的な返済はサポートされていません。",
diff --git a/src/i18n/Spanish.js b/src/i18n/Spanish.js
index ce06bb0..7b1bfde 100644
--- a/src/i18n/Spanish.js
+++ b/src/i18n/Spanish.js
@@ -1,4 +1,4 @@
-export default {
+export default {
 	"交易金额":"Valor da transação",
 	"请选择正确的网络。若发送至错误的网络,您的资产可能会丢失。":"Selecione a rede correta. Se você enviar para a rede errada, seus ativos poderão ser perdidos.",
 	"信用分":"pontuação de crédito",
@@ -2071,6 +2071,7 @@
     "查询": "Consulta",
     "永续合约": "Contratos perpetuos",
     "交割合约": "Contratos de entrega",
+    "AI量化": "IA Quant",
     "最新价格": "Último precio",
     "24h最高价": "24 horas Alto",
     "24h最低价": "24 horas Bajo",
diff --git a/src/i18n/cn.js b/src/i18n/cn.js
index c5b1f57..93dc28b 100644
--- a/src/i18n/cn.js
+++ b/src/i18n/cn.js
@@ -2072,6 +2072,13 @@
     "查询": "查詢",
     "永续合约": "永續合約",
     "交割合约": "交割合約",
+    "AI量化": "AI量化",
+    "可解锁周期": "可解鎖週期",
+    "订单信息": "訂單信息",
+    "时间信息": "時間信息",
+    "点击查看详情": "點擊查看詳情",
+    "剩余分钟": "剩餘分鐘",
+    "暂无交割周期配置,请联系客服": "暫無交割週期配置,請聯繫客服",
     "最新价格": "最新價格",
     "24h最高价": "24h最高價",
     "24h最低价": "24h最低價",
@@ -2721,6 +2728,15 @@
     "期望借款金额": "期望借款金額",
     "经过平台审核,您可向平台申请一笔借款!": "經過平台審核,您可向平台申請一筆借款!",
     "助力贷": "助力貸",
+    "AI Quant": "AI 量化",
+    "最高可借": "最高可借",
+    "选择借款期限": "選擇借款期限",
+    "借款方案": "借款方案",
+    "预计总利息": "預計總利息",
+    "身份认证": "身份認證",
+    "请上传证件正反面": "請上傳證件正反面",
+    "提交申请": "提交申請",
+    "提交失败": "提交失敗",
     "loanRuleContent12": "為了避免錯過還款日,客服人員將在您的還款日期前多次通知您。如果您錯過了還款日,您的款項將自動延長7天。在這種情況下,您將需要支付額外逾期利息,相當於貸款金額的0.025。",
     "loanRuleTitle12": "12. 如果我沒有按時還款會怎樣?",
     "loanRuleContent11": "目前暫不支援自動還款。",
diff --git a/src/i18n/en.js b/src/i18n/en.js
index 383ed16..ae7a469 100644
--- a/src/i18n/en.js
+++ b/src/i18n/en.js
@@ -2099,6 +2099,13 @@
     "查询": "Search",
     "永续合约": "Perpetual",
     "交割合约": "Delivery",
+    "AI量化": "AI Quant",
+    "可解锁周期": "Unlock period",
+    "订单信息": "Order info",
+    "时间信息": "Time info",
+    "点击查看详情": "Tap for details",
+    "剩余分钟": "Minutes left",
+    "暂无交割周期配置,请联系客服": "No delivery periods configured. Please contact support.",
     "最新价格": "Last price",
     "24h最高价": "24h High",
     "24h最低价": "24h Low",
@@ -2708,6 +2715,15 @@
     "期望借款金额": "Expected Loan Amount",
     "经过平台审核,您可向平台申请一笔借款!": "After platform review, you can apply for a loan from the platform!",
     "助力贷": "Loan",
+    "AI Quant": "AI Quant",
+    "最高可借": "Max Loan Amount",
+    "选择借款期限": "Select Loan Term",
+    "借款方案": "Loan Plan",
+    "预计总利息": "Estimated Interest",
+    "身份认证": "Identity Verification",
+    "请上传证件正反面": "Please upload front and back of ID",
+    "提交申请": "Submit Application",
+    "提交失败": "Submission failed",
     "loanRuleContent12": "To avoid missing the repayment date, our customer service will notify you multiple times before your repayment date. If you miss the repayment date, your payment will be automatically extended by 7 days. In this case, an additional overdue interest of 0.025 of the loan amount will be charged.",
     "loanRuleTitle12": "12. What happens if I fail to repay on time?",
     "loanRuleContent11": "Automatic repayment is currently not supported.",
diff --git a/src/i18n/fa.js b/src/i18n/fa.js
index fd854d4..fdd9810 100644
--- a/src/i18n/fa.js
+++ b/src/i18n/fa.js
@@ -1,4 +1,4 @@
-export default {
+export default {
 	"交易金额":"Montant de la transaction",
 	"请选择正确的网络。若发送至错误的网络,您的资产可能会丢失。":"Veuillez sélectionner le bon réseau. Si vous envoyez vers le mauvais réseau, vos ressources risquent d'être perdues..",
 	"信用分":"pointage de crédit",
@@ -2008,6 +2008,7 @@
     "查询": "Recherche",
     "永续合约": "éternel",
     "交割合约": "Contrats à terme",
+    "AI量化": "IA Quant",
     "最新价格": "Prix final",
     "24h最高价": "24h Haut",
     "24h最低价": "24h Faible",
@@ -2651,6 +2652,7 @@
     "期望借款金额": "Montant du prêt souhaité",
     "经过平台审核,您可向平台申请一笔借款!": "Après examen de la plateforme, vous pouvez demander un prêt à la plateforme !",
     "助力贷": "Prêt d'assistance",
+    "AI Quant": "AI Quant",
     "loanRuleContent12": "Pour éviter de manquer la date de remboursement, notre service client vous informera à plusieurs reprises avant la date de remboursement. Si vous manquez la date de remboursement, votre paiement sera automatiquement prolongé de 7 jours. Dans ce cas, des frais de retard supplémentaires de 0,025 du montant du prêt seront facturés.",
     "loanRuleTitle12": "12. Que se passe-t-il si je ne rembourse pas à temps ?",
     "loanRuleContent11": "Le remboursement automatique n'est pas actuellement pris en charge.",
diff --git a/src/i18n/korean.js b/src/i18n/korean.js
index e6b683b..999ed7a 100644
--- a/src/i18n/korean.js
+++ b/src/i18n/korean.js
@@ -2748,6 +2748,7 @@
     "期望借款金额": "희망 대출 금액",
     "经过平台审核,您可向平台申请一笔借款!": "플랫폼 검토 후, 플랫폼에 대출 신청이 가능합니다!",
     "助力贷": "보조 대출",
+    "AI Quant": "AI 퀀트",
     "loanRuleContent12": "납부일을 놓치지 않기 위해 고객 서비스에서는 납부일 이전에 여러 차례 알림을 보내드립니다. 납부일을 놓친 경우, 대출 기간이 자동으로 7일 연장됩니다. 이 경우, 대출 금액의 0.025에 해당하는 추가 연체 이자가 부과됩니다.",
     "loanRuleTitle12": "12. 제때 상환하지 않으면 어떻게 될까요?",
     "loanRuleContent11": "현재 자동 상환은 지원되지 않습니다.",
diff --git a/src/i18n/th.js b/src/i18n/th.js
index 989d850..6f734d6 100644
--- a/src/i18n/th.js
+++ b/src/i18n/th.js
@@ -1,4 +1,4 @@
-export default {
+export default {
 	"交易金额":"จำนวนธุรกรรม",
 	"请选择正确的网络。若发送至错误的网络,您的资产可能会丢失。":"กรุณาเลือกเครือข่ายที่ถูกต้อง หากส่งไปยังเครือข่ายที่ไม่ถูกต้อง ทรัพย์สินของคุณอาจสูญหาย",
 	"信用分":"คะแนนเครดิต",
@@ -2100,6 +2100,7 @@
     "查询": "สอบถาม",
     "永续合约": "สัญญาถาวร",
     "交割合约": "สัญญาการส่งมอบ",
+    "AI量化": "AI Quant",
     "最新价格": "ราคาล่าสุด",
     "24h最高价": "ราคาสูงสุด 24 ชม",
     "24h最低价": "ราคาต่ำสุด 24 ชม",
@@ -2718,6 +2719,7 @@
     "期望借款金额": "จำนวนเงินกู้ที่คาดหวัง",
     "经过平台审核,您可向平台申请一笔借款!": "หลังจากผ่านการตรวจสอบของแพลตฟอร์มคุณสามารถสมัครกู้ยืมจากแพลตฟอร์มได้!",
     "助力贷": "สินเชื่อการช่วยเหลือ",
+    "AI Quant": "AI Quant",
     "loanRuleContent12": "เพื่อหลีกเลี่ยงการพลาดกำหนดการชำระเงิน บริการลูกค้าของเราจะแจ้งให้คุณทราบหลายครั้งก่อนวันชำระเงินของคุณ หากคุณพลาดกำหนดชำระเงิน การชำระเงินของคุณจะถูก延กันอัตโนมัติเป็นเวลา 7 วัน ในกรณีนี้ ค่าดอกเบี้ยเกินกำหนดเพิ่มเติมที่เท่ากับ 0.025 ของจำนวนเงินที่กู้",
     "loanRuleTitle12": "12. ถ้าฉันไม่ได้ชำระเงินตรงเวลาจะเกิดอะไรขึ้น?",
     "loanRuleContent11": "ในปัจจุบันยังไม่รองรับการชำระเงินอัตโนมัติ",
diff --git a/src/i18n/vi.js b/src/i18n/vi.js
index c39e1a4..7e4a3b4 100644
--- a/src/i18n/vi.js
+++ b/src/i18n/vi.js
@@ -1,4 +1,4 @@
-export default {
+export default {
 	"交易金额":"Số tiền giao dịch",
 	"请选择正确的网络。若发送至错误的网络,您的资产可能会丢失。":"Vui lòng chọn đúng mạng. Nếu bạn gửi đến sai mạng, tài sản của bạn có thể bị mất.。",
 	"信用分":"Phần tín dụng",
@@ -2119,6 +2119,7 @@
     "查询": "Tìm kiếm",
     "永续合约": "Vĩnh viễn",
     "交割合约": "Hợp đồng cung ứng",
+    "AI量化": "AI Quant",
     "最新价格": "Giá gần nhất",
     "24h最高价": "Cao 24h",
     "24h最低价": "Thấp 24h",
@@ -2699,6 +2700,7 @@
     "期望借款金额": "Số tiền vay mong đợi",
     "经过平台审核,您可向平台申请一笔借款!": "Sau khi được duyệt bởi nền tảng, bạn có thể xin vay từ nền tảng!",
     "助力贷": "Vay hỗ trợ",
+    "AI Quant": "AI Quant",
     "loanRuleContent12": "Để tránh bỏ lỡ ngày thanh toán, dịch vụ khách hàng của chúng tôi sẽ thông báo cho bạn nhiều lần trước ngày thanh toán. Nếu bạn bỏ lỡ ngày thanh toán, khoản vay của bạn sẽ được gia hạn tự động thêm 7 ngày. Trong trường hợp này, bạn sẽ bị tính phí lãi suất quá hạn bổ sung là 0,025 của số tiền vay.",
     "loanRuleTitle12": "12. Nếu tôi không thanh toán đúng hạn, điều gì sẽ xảy ra?",
     "loanRuleContent11": "Hiện tại chưa hỗ trợ thanh toán tự động.",
diff --git a/src/i18n/zhcn.js b/src/i18n/zhcn.js
index 3a99e7e..cc25add 100644
--- a/src/i18n/zhcn.js
+++ b/src/i18n/zhcn.js
@@ -2057,6 +2057,12 @@
     "查询": "查询",
     "永续合约": "永续合约",
     "交割合约": "交割合约",
+    "AI量化": "AI量化",
+    "可解锁周期": "可解锁周期",
+    "订单信息": "订单信息",
+    "时间信息": "时间信息",
+    "点击查看详情": "点击查看详情",
+    "剩余分钟": "剩余分钟",
     "最新价格": "最新价格",
     "24h最高价": "24h最高价",
     "24h最低价": "24h最低价",
@@ -2713,6 +2719,15 @@
     "期望借款金额": "期望借款金额",
     "经过平台审核,您可向平台申请一笔借款!": "经过平台审核,您可向平台申请一笔借款!",
     "助力贷": "助力贷",
+    "AI Quant": "AI 量化",
+    "最高可借": "最高可借",
+    "选择借款期限": "选择借款期限",
+    "借款方案": "借款方案",
+    "预计总利息": "预计总利息",
+    "身份认证": "身份认证",
+    "请上传证件正反面": "请上传证件正反面",
+    "提交申请": "提交申请",
+    "提交失败": "提交失败",
     'loanRuleContent12': '为题免错过赏软还款日,客服会在您该还款日期之前反复通知,如果您错过还款日,您的货款将自动延长7天。在这种情况下,您将被收取货款金额的0.025的额外逾期利息。',
     'loanRuleTitle12': '12.如果我短有按时还款会怎么样?',
     'loanRuleContent11': '目前暂不支持自动还款。',
diff --git a/src/service/fund.api.js b/src/service/fund.api.js
index ada93e7..7cb3f7e 100644
--- a/src/service/fund.api.js
+++ b/src/service/fund.api.js
@@ -205,13 +205,15 @@
     })
 }
 
-// 助力贷订单详情
-export const _loanOrderDetail = (orderNo) => {
+// 助力贷订单详情(orderNo 与 id 至少传一个)
+export const _loanOrderDetail = (params) => {
+    const p = typeof params === 'string' ? { orderNo: params } : (params || {})
     return request({
         url: `${API_PREFIX}/loan!getOrderDetail.action`,
         method: "get",
         params: {
-            orderNo
+            orderNo: p.orderNo,
+            id: p.id || p.uuid,
         }
     })
 }
diff --git a/src/utils/index.js b/src/utils/index.js
index b4f1894..ce89959 100644
--- a/src/utils/index.js
+++ b/src/utils/index.js
@@ -168,4 +168,9 @@
 export const formatWithCommas = (num) => {
   if (num === null || num === undefined || isNaN(num)) return '--';
   return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
+}
+
+/** 体验矿机 test=Y,普通矿机 cycle 为可解锁分钟数 */
+export function isMinerTest(test) {
+  return test === 'Y' || test === true
 }
\ No newline at end of file
diff --git a/src/views/cryptos/AssetsCenter/index.vue b/src/views/cryptos/AssetsCenter/index.vue
index 0771f53..660e5a1 100644
--- a/src/views/cryptos/AssetsCenter/index.vue
+++ b/src/views/cryptos/AssetsCenter/index.vue
@@ -2,23 +2,26 @@
   <div id="cryptos">
     <assets-head :title="$t('现货账户')" :back-func="backFunc">
     </assets-head>
-    <div class="pb-120 assetsCenter">
-      <div class="flex justify-between mx-52 mt-31  box-border">
-        <div class=" items-center text-center textColor1" v-for="(item, index) in typeList " :key="'type' + index"
-          @click="onTabs(index)">
-          <div class="type">{{ item.type }}</div>
+    <div class="funds-page pb-120">
+      <div class="funds-tabs-wrap">
+        <div class="funds-tabs">
+          <div
+            v-for="(item, index) in typeList"
+            :key="'type' + index"
+            class="funds-tab-item"
+            :class="{ active: tab === index }"
+            @click="onTabs(index)"
+          >
+            {{ item.type }}
+          </div>
         </div>
       </div>
-      <div class="flex mt-17">
-        <span class="flex-1 border-b-color " :class="{ active_color: tab === 0 }"></span>
-        <span class="flex-1 border-b-color" :class="{ active_color: tab === 1 }"></span>
-        <span class="flex-1 border-b-color" :class="{ active_color: tab === 2 }"></span>
-        <span class="flex-1 border-b-color" :class="{ active_color: tab === 3 }"></span>
+      <div class="funds-content">
+        <over-view v-if="tab === 0" :funds="funds" :key="'tab0'" />
+        <as-sets v-if="tab === 1" :funds="funds" :key="'tab1'" />
+        <contract v-if="tab === 2" :funds="funds" :index="index" :key="'tab2'" />
+        <financial v-if="tab === 3" :funds="funds" :index="index" :key="'tab3'" />
       </div>
-      <over-view v-if="tab === 0" :funds="funds" :key="tab"></over-view>
-      <as-sets v-if="tab === 1" :funds="funds" :key="tab"></as-sets>
-      <contract v-if="tab === 2" :funds="funds" :index="index" :key="tab"></contract>
-      <financial v-if="tab === 3" :funds="funds" :index="index" :key="tab"></financial>
     </div>
   </div>
 </template>
@@ -117,56 +120,52 @@
 }
 </script>
 
-<style lang="scss" >
-@import "@/assets/init.scss";
+<style lang="scss">
+@import '@/assets/init.scss';
 
 #cryptos {
-  .assetsCenter {
-    width: 100%;
+  .funds-page {
+    min-height: 100vh;
     box-sizing: border-box;
   }
 
-  .type {
-    font-size: 36px;
-    line-height: 24px;
+  .funds-tabs-wrap {
+    padding: 20px 32px 8px;
   }
 
-  .active_color {
-    border-bottom: 5px solid $color_main ;
-    border-radius: 2.208px;
+  .funds-tabs {
+    display: flex;
+    gap: 12px;
+    padding: 8px;
+    border-radius: 20px;
+    @include themify() {
+      background: themed('cont_background');
+    }
+    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.04);
   }
 
-  .left-enter-active,
-  .left-leave-active,
-  .right-enter-active,
-  .right-leave-active {
-    will-change: transform;
-    transition: all 500ms;
+  .funds-tab-item {
+    flex: 1;
+    text-align: center;
+    padding: 18px 8px;
+    border-radius: 14px;
+    font-size: 26px;
+    line-height: 1.2;
+    transition: all 0.2s ease;
+    @include themify() {
+      color: themed('text_color1');
+    }
+
+    &.active {
+      color: #fff;
+      background: linear-gradient(135deg, #1a6dff 0%, #004aee 100%);
+      font-weight: 600;
+      box-shadow: 0 6px 16px rgba(0, 74, 238, 0.28);
+    }
   }
 
-  .left-leave-active,
-  .right-leave-active {
-    display: none;
-  }
-
-  .left-enter {
-    opacity: 0;
-    transform: translate3d(-100%, 0, 0);
-  }
-
-  .left-leave {
-    opacity: 0;
-    transform: translate3d(100%, 0, 0)
-  }
-
-  .right-enter {
-    opacity: 0;
-    transform: translate3d(100%, 0, 0);
-  }
-
-  .right-leave {
-    opacity: 0;
-    transform: translate3d(-100%, 0, 0)
+  .funds-content {
+    padding: 0 32px;
   }
 }
 </style>
diff --git a/src/views/cryptos/FinancialHistory/index.vue b/src/views/cryptos/FinancialHistory/index.vue
index c069c0c..23020f6 100644
--- a/src/views/cryptos/FinancialHistory/index.vue
+++ b/src/views/cryptos/FinancialHistory/index.vue
@@ -15,28 +15,26 @@
         <van-pull-refresh :pulling-text="$t('下拉即可刷新')" :loosing-text="$t('释放即可刷新')" :loading-text="$t('加载中')"
           v-model="isLoading" @refresh="onRefresh">
           <van-list v-model:loading="loading" :finished="finished" @load="onLoad" :loading-text="$t('加载中')">
-            <div v-for="(item, index) in list" :key="'buy' + index">
-              <div class="box-border px-33">
-                <div class="flex justify-between items-center h-110 font-31 font-400">
-                  <div class="text-grey">{{ $t('时间') }}</div>
-                  <div class="textColor"> {{ item.create_time }}</div>
+            <div v-for="(item, index) in list" :key="'buy' + index" class="history-card-wrap">
+              <div class="history-card" @click="type === 1 ? handleGoOrderDetail(item) : null">
+                <div class="history-row">
+                  <span class="history-label">{{ $t('时间') }}</span>
+                  <span class="history-value">{{ item.create_time }}</span>
                 </div>
-                <div class="flex justify-between items-center h-110 font-31 font-400">
-                  <div class="text-grey">{{ $t('数量') }}</div>
-                  <div class="textColor">{{ item.amount }}&nbsp;USDT</div>
+                <div class="history-row">
+                  <span class="history-label">{{ $t('数量') }}</span>
+                  <span class="history-value">{{ item.amount }} USDT</span>
                 </div>
-                <div class="flex justify-between items-center h-110 font-31 font-400">
-                  <div class="text-grey">{{ $t('周期') }}</div>
-                  <div class="textColor"> {{ item.cycle == 0 ? $t('无限期') : item.cycle + $t('天') }}</div>
+                <div class="history-row">
+                  <span class="history-label">{{ type === 1 && !isMinerTest(item.test) ? $t('可解锁周期') : $t('周期') }}</span>
+                  <span class="history-value">{{ item.cycle == 0 ? $t('无限期') : item.cycle + (type === 1 && !isMinerTest(item.test) ? $t('分钟') : $t('天')) }}</span>
                 </div>
-                <div class="flex justify-between items-center h-110 font-31 font-400">
-                  <div class="text-grey">{{ $t('累计收益') }}</div>
-                  <div class="textColor" :class="item.profit / 1 > 0 ? 'text-green' : 'text-red'"> {{ item.profit }}
-                  </div>
+                <div class="history-row">
+                  <span class="history-label">{{ $t('累计收益') }}</span>
+                  <span class="history-value" :class="item.profit / 1 > 0 ? 'text-green' : 'text-red'">{{ item.profit }}</span>
                 </div>
-
+                <div v-if="type === 1" class="history-tip">{{ $t('点击查看详情') }}</div>
               </div>
-              <div class="contBackground h-12"></div>
             </div>
           </van-list>
         </van-pull-refresh>
@@ -58,20 +56,19 @@
         <van-pull-refresh :pulling-text="$t('下拉即可刷新')" :loosing-text="$t('释放即可刷新')" :loading-text="$t('加载中')"
           v-model="isLoading" @refresh="onRefresh">
           <van-list v-model:loading="loading" :finished="finished" :finished-text="$t('没有更多了')" @load="onLoad">
-            <div v-for="(item, index) in list" :key="'interest' + index">
-              <div class="flex justify-between items-center h-150 px-33">
+            <div v-for="(item, index) in list" :key="'interest' + index" class="history-card-wrap">
+              <div class="interest-row">
                 <div class="flex items-center">
                   <img v-if="item.amount / 1 > 0 ? false : true" :src="require('@/assets/image/assets-center/out.png')"
-                    alt="" class="w-44 h-44 mr-30">
-                  <img v-else :src="require('@/assets/image/assets-center/in.png')" alt="" class="w-44 h-44 mr-30">
+                    alt="" class="interest-icon">
+                  <img v-else :src="require('@/assets/image/assets-center/in.png')" alt="" class="interest-icon">
                   <div class="flex flex-col">
-                    <div class="mb-17 font-32 font-400 textColor">{{ $t('利息数量') }}(USDT)</div>
-                    <div class="text-grey font-27">{{ item.createTimeStr }}</div>
+                    <div class="interest-title">{{ $t('利息数量') }}(USDT)</div>
+                    <div class="interest-time">{{ item.createTimeStr }}</div>
                   </div>
                 </div>
-                <div class="font-31" :class="item.amount / 1 > 0 ? 'text-green' : 'text-red'">{{ item.amount }}</div>
+                <div class="interest-amount" :class="item.amount / 1 > 0 ? 'text-green' : 'text-red'">{{ item.amount }}</div>
               </div>
-              <div class="contBackground h-2"></div>
             </div>
           </van-list>
         </van-pull-refresh>
@@ -87,6 +84,7 @@
 import { getfinacialProductsBought, getMachineBought } from '@/service/financialManagement.api.js';
 import { _fundRecord } from '@/service/fund.api';
 import financialList from "@/components/Transform/assetsCenter/financialList.vue";
+import { isMinerTest } from '@/utils/index.js'
 export default {
   name: "index",
   components: {
@@ -111,6 +109,7 @@
     }
   },
   methods: {
+    isMinerTest,
     handleGoOrderDetail(item) {
       if (this.type === 0) {
         this.$router.push({
@@ -215,6 +214,8 @@
 </script>
 
 <style lang="scss" scoped>
+@import '@/assets/init.scss';
+
 .MiningPoolFinanceHistory {
   width: 100%;
   box-sizing: border-box;
@@ -223,8 +224,107 @@
     background-color: $main_background;
   }
 
+  :deep(.van-tab) {
+    font-size: 32px;
+  }
+
   :deep(.van-tab--active) {
     color: $text_color;
+    font-weight: 600;
   }
 }
+
+.history-card-wrap {
+  padding: 16px 32px 0;
+}
+
+.history-card {
+  padding: 28px 28px 24px;
+  border-radius: 20px;
+  @include themify() {
+    background: themed('cont_background');
+  }
+}
+
+.history-row {
+  display: flex;
+  justify-content: space-between;
+  align-items: flex-start;
+  gap: 20px;
+  padding: 18px 0;
+  font-size: 32px;
+  line-height: 1.45;
+
+  & + & {
+    @include themify() {
+      border-top: 1px solid themed('line_color');
+    }
+  }
+}
+
+.history-label {
+  flex-shrink: 0;
+  @include themify() {
+    color: themed('text_color1');
+  }
+}
+
+.history-value {
+  text-align: right;
+  font-weight: 500;
+  word-break: break-all;
+  @include themify() {
+    color: themed('text_color');
+  }
+}
+
+.history-tip {
+  margin-top: 12px;
+  padding-top: 16px;
+  text-align: center;
+  font-size: 28px;
+  color: #004aee;
+  @include themify() {
+    border-top: 1px solid themed('line_color');
+  }
+}
+
+.interest-row {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin: 16px 32px 0;
+  padding: 28px;
+  border-radius: 20px;
+  @include themify() {
+    background: themed('cont_background');
+  }
+}
+
+.interest-icon {
+  width: 52px;
+  height: 52px;
+  margin-right: 24px;
+}
+
+.interest-title {
+  margin-bottom: 12px;
+  font-size: 34px;
+  font-weight: 500;
+  @include themify() {
+    color: themed('text_color');
+  }
+}
+
+.interest-time {
+  font-size: 28px;
+  @include themify() {
+    color: themed('text_color1');
+  }
+}
+
+.interest-amount {
+  font-size: 40px;
+  font-weight: 600;
+}
 </style>
diff --git a/src/views/cryptos/Funds/index.vue b/src/views/cryptos/Funds/index.vue
index 58d8fad..3a23462 100644
--- a/src/views/cryptos/Funds/index.vue
+++ b/src/views/cryptos/Funds/index.vue
@@ -1,37 +1,39 @@
 <template>
   <div id="cryptos">
-    <assets-head :title="$t('资金账户')" :back-func="backFunc">
-    </assets-head>
-    <div class="pb-120 assetsCenter px-12">
-      <div class="flex justify-between mx-52 mt-31  box-border">
-        <div class=" items-center text-center textColor1" v-for="(item, index) in typeList " :key="'type' + index"
-          @click="onTabs(index)">
-          <div class="type">{{ item.type }}</div>
+    <assets-head :title="$t('资金账户')" :back-func="backFunc" />
+    <div class="funds-page pb-120">
+      <div class="funds-tabs-wrap">
+        <div class="funds-tabs">
+          <div
+            v-for="(item, index) in typeList"
+            :key="'type' + index"
+            class="funds-tab-item"
+            :class="{ active: tab === index }"
+            @click="onTabs(index)"
+          >
+            {{ item.type }}
+          </div>
         </div>
       </div>
-      <div class="flex mt-17">
-        <span class="flex-1 border-b-color " :class="{ active_color: tab === 0 }"></span>
-        <span class="flex-1 border-b-color" :class="{ active_color: tab === 1 }"></span>
-        <span class="flex-1 border-b-color" :class="{ active_color: tab === 2 }"></span>
-        <span class="flex-1 border-b-color" :class="{ active_color: tab === 3 }"></span>
+      <div class="funds-content">
+        <over-view v-if="tab === 0" :funds="funds" :key="'tab0'" />
+        <as-sets v-if="tab === 1" :funds="funds" :key="'tab1'" />
+        <contract v-if="tab === 2" :funds="funds" :index="index" :key="'tab2'" />
+        <financial v-if="tab === 3" :funds="funds" :index="index" :key="'tab3'" />
       </div>
-      <over-view v-if="tab === 0" :funds="funds" :key="tab"></over-view>
-      <as-sets v-if="tab === 1" :funds="funds" :key="tab"></as-sets>
-      <contract v-if="tab === 2" :funds="funds" :index="index" :key="tab"></contract>
-      <financial v-if="tab === 3" :funds="funds" :index="index" :key="tab"></financial>
     </div>
   </div>
 </template>
 
 <script>
+import AsSets from '@/components/Transform/assetsCenter/assets.vue'
+import OverView from '@/components/Transform/assetsCenter/overview.vue'
+import Contract from '@/components/Transform/assetsCenter/contract.vue'
+import Financial from '@/components/Transform/assetsCenter/financial.vue'
+import { _getAllAssets } from '@/service/user.api.js'
 
-import AsSets from "@/components/Transform/assetsCenter/assets.vue"
-import OverView from "@/components/Transform/assetsCenter/overview.vue"
-import Contract from "@/components/Transform/assetsCenter/contract.vue"
-import Financial from "@/components/Transform/assetsCenter/financial.vue"
-import { _getAllAssets } from "@/service/user.api.js";
 export default {
-  name: "assets-index",
+  name: 'assets-index',
   components: {
     AsSets,
     OverView,
@@ -40,26 +42,14 @@
   },
   data() {
     return {
-      type: 'left', //left 从左往右 right 从有王座
-      list: [],
-      timer: null,
       tab: 0,
-      index: 0, // 每个组件的二级tab
+      index: 0,
       funds: {},
       typeList: [
-        {
-          type: this.$t('总览'),
-        },
-        {
-          type: this.$t('现货账户'),
-        },
-        {
-          type: this.$t('合约'),
-
-        },
-        {
-          type: this.$t('理财'),
-        },
+        { type: this.$t('总览') },
+        { type: this.$t('现货账户') },
+        { type: this.$t('合约') },
+        { type: this.$t('理财') }
       ]
     }
   },
@@ -67,25 +57,17 @@
     backFunc() {
       this.$router.push({
         path: '/quotes/index',
-        query: {
-          tabActive: 1
-        }
+        query: { tabActive: 1 }
       })
     },
     onTabs(val) {
-      if (this.tab < val) {
-        this.type = 'right'
-      } else {
-        this.type = 'left'
-      }
-      console.log(val)
       this.tab = val
     },
     getAssets() {
       _getAllAssets().then((data) => {
         this.funds = data
       })
-    },
+    }
   },
   created() {
     this.getAssets()
@@ -115,56 +97,58 @@
 }
 </script>
 
-<style lang="scss" >
-@import "@/assets/init.scss";
+<style lang="scss">
+@import '@/assets/init.scss';
 
 #cryptos {
-  .assetsCenter {
-    width: 100%;
+  .funds-page {
+    min-height: 100vh;
     box-sizing: border-box;
   }
 
-  .type {
-    font-size: 36px;
-    line-height: 24px;
+  .funds-tabs-wrap {
+    padding: 20px 32px 8px;
+    position: sticky;
+    top: 96px;
+    z-index: 10;
+    @include themify() {
+      background: themed('main_background');
+    }
   }
 
-  .active_color {
-    border-bottom: 5px solid $color_main ;
-    border-radius: 2.208px;
+  .funds-tabs {
+    display: flex;
+    gap: 12px;
+    padding: 8px;
+    border-radius: 20px;
+    @include themify() {
+      background: themed('cont_background');
+    }
+    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.04);
   }
 
-  .left-enter-active,
-  .left-leave-active,
-  .right-enter-active,
-  .right-leave-active {
-    will-change: transform;
-    transition: all 500ms;
+  .funds-tab-item {
+    flex: 1;
+    text-align: center;
+    padding: 18px 8px;
+    border-radius: 14px;
+    font-size: 26px;
+    line-height: 1.2;
+    transition: all 0.2s ease;
+    @include themify() {
+      color: themed('text_color1');
+    }
+
+    &.active {
+      color: #fff;
+      background: linear-gradient(135deg, #1a6dff 0%, #004aee 100%);
+      font-weight: 600;
+      box-shadow: 0 6px 16px rgba(0, 74, 238, 0.28);
+    }
   }
 
-  .left-leave-active,
-  .right-leave-active {
-    display: none;
-  }
-
-  .left-enter {
-    opacity: 0;
-    transform: translate3d(-100%, 0, 0);
-  }
-
-  .left-leave {
-    opacity: 0;
-    transform: translate3d(100%, 0, 0)
-  }
-
-  .right-enter {
-    opacity: 0;
-    transform: translate3d(100%, 0, 0);
-  }
-
-  .right-leave {
-    opacity: 0;
-    transform: translate3d(-100%, 0, 0)
+  .funds-content {
+    padding: 0 32px;
   }
 }
 </style>
diff --git a/src/views/cryptos/PerpetualContract/index.vue b/src/views/cryptos/PerpetualContract/index.vue
index 89041ad..c3ee0c9 100644
--- a/src/views/cryptos/PerpetualContract/index.vue
+++ b/src/views/cryptos/PerpetualContract/index.vue
@@ -257,7 +257,7 @@
         deep: null /// 深度
       },
       curTab: '', // 当前委托还是持有仓位
-      selectIndex: 1, // 当前tab
+      selectIndex: 2, // 当前tab(仅AI量化)
       initFutrue: {}, /// 交割合约
       show: false, // popup
       animated1: false,
@@ -397,12 +397,13 @@
         })
       }
     },
-    onTopTab(evt) { // 当前tab 永续/交割(页内切换,同步 URL 供底部栏高亮)
-      this.syncContractTab(evt, true)
-      if (String(this.$route.query.selectIndex) !== String(evt)) {
+    onTopTab(evt) { // 仅AI量化
+      const tab = Number(evt) === 1 ? 2 : Number(evt)
+      this.syncContractTab(tab, true)
+      if (String(this.$route.query.selectIndex) !== String(tab)) {
         this.$router.replace({
           path: this.$route.path,
-          query: { ...this.$route.query, selectIndex: String(evt) }
+          query: { ...this.$route.query, selectIndex: String(tab) }
         }).catch(() => {})
       }
     },
@@ -683,16 +684,10 @@
     }
     if (symbol) {
       next(vm => {
-        if (selectIndex) {
-          vm.selectIndex = Number(selectIndex)
-          if (vm.selectIndex === 2) {
-            vm.curTab = 'fetchFutrueHoldList'
-          } else {
-            vm.curTab = 'fetchOrderListHold'
-          }
-        } else {
-          vm.curTab = 'fetchOrderListHold'
-        }
+        let idx = selectIndex ? Number(selectIndex) : 2
+        if (idx === 1) idx = 2
+        vm.selectIndex = idx
+        vm.curTab = 'fetchFutrueHoldList'
         vm.symbol = symbol
         vm.init(symbol)
       })
@@ -703,7 +698,8 @@
   beforeRouteUpdate(to, from, next) {
     const selectIndex = to.query.selectIndex
     if (selectIndex !== undefined && selectIndex !== null && selectIndex !== '') {
-      const idx = Number(selectIndex)
+      let idx = Number(selectIndex)
+      if (idx === 1) idx = 2
       if (this.selectIndex !== idx) {
         this.syncContractTab(idx, true)
       }
diff --git a/src/views/cryptos/financialManagement/index.vue b/src/views/cryptos/financialManagement/index.vue
index 4a5a490..8c72825 100644
--- a/src/views/cryptos/financialManagement/index.vue
+++ b/src/views/cryptos/financialManagement/index.vue
@@ -6,16 +6,9 @@
         <div class="font-700 font-53 textColor">{{ $t('理财') }}</div>
         <div class="mt-20 font-26 textColor">{{ $t('简单、安全搜索热门币种、立即赚取收益') }}</div>
         <div class="mt-64 mb-32 font-600 font-40 textColor">{{ $t('高收益型') }}</div>
-        <div @click="$router.push('/cryptos/fund')" class="pt financial financial-bg flex justify-between items-center">
-          <div class="flex flex-col items-start">
-            <span class="font-53 font-700 mb-22">{{ $t('基金理财') }}</span>
-            <span class="font-26">{{ $t('稳健增值,周期灵活') }}</span>
-            <span class="mt-10 font-28">{{ $t('安心理财') }}</span>
-          </div>
-          <img class="w-290 h-240" src="./images/f-bg.png" alt="">
-        </div>
+        <!-- 基金理财已隐藏 -->
         <div @click="$router.push('/cryptos/machine')"
-          class="financial pool-lock-bg mt-32 flex justify-between items-center">
+          class="financial pool-lock-bg flex justify-between items-center">
           <div class="flex flex-col items-start">
             <span class="font-53 font-700 mb-22">{{ $t('智能矿池') }}</span>
             <span class="font-26">{{ $t('真实矿机租赁,套餐选择灵活') }}</span>
@@ -23,6 +16,15 @@
           </div>
           <img class="w-290 h-240" src="./images/l-bg.png" alt="">
         </div>
+        <div @click="$router.push('/cryptos/loan')"
+          class="financial pool-lock-bg mt-32 flex justify-between items-center">
+          <div class="flex flex-col items-start">
+            <span class="font-53 font-700 mb-22">{{ $t('助力贷') }}</span>
+            <span class="font-26">{{ $t('经过平台审核,您可向平台申请一笔借款!') }}</span>
+            <span class="mt-10 font-28">{{ $t('到期一次还款') }}</span>
+          </div>
+          <img class="w-290 h-240" src="./images/l-bg.png" alt="">
+        </div>
         <!-- <div @click="$router.push('/cryptos/pledgeLoan')"
           class="financial pool-lock-bg mt-32 flex justify-between items-center">
           <div class="flex flex-col items-start">
diff --git a/src/views/cryptos/financialManagement/machineBuy.vue b/src/views/cryptos/financialManagement/machineBuy.vue
index 710c3ce..50fa24c 100644
--- a/src/views/cryptos/financialManagement/machineBuy.vue
+++ b/src/views/cryptos/financialManagement/machineBuy.vue
@@ -1,77 +1,105 @@
 <template>
   <div id="cryptos">
-    <div id="financialOrder" class="financialOrder">
-      <assets-head :title="$i18n.locale === 'CN' || $i18n.locale === 'zh-CN' ? data.name_cn : data.name_en"></assets-head>
-      <div class="box-border  ">
-        <div class="w-full h-1 bgDark"></div>
-        <div class="mt-48 font-36 font-600 px-33 textColor">{{ $t('购买金额') }}</div>
-        <div class="flex justify-center mt-17">
-          <div class="flex">
-            <input :placeholder="$t('输入金额')" v-model="form.amount" type="number"
-              class="h-98 pl-30 w-580 border-none text-grey inputBackground textColor" @input="changeMount">
-            <div class="h-98 lh-98 w-180 flex inputBackground textColor" @click="form.amount = bal">
-              {{ data.buyCurrency ? data.buyCurrency.toUpperCase() : '' }} <span class="colorMain pl-10">{{ $t('全部')
-              }}</span></div>
+    <div class="machine-buy-page">
+      <assets-head :title="minerName"></assets-head>
+
+      <div class="page-body">
+        <!-- 产品概览 -->
+        <div class="hero-card">
+          <div class="hero-top">
+            <span class="hero-badge">{{ isTestMiner ? $t('体验矿机') : $t('智能矿池') }}</span>
+            <span class="hero-cycle">{{ cycleText }}</span>
+          </div>
+          <div class="hero-stats">
+            <div class="hero-stat">
+              <span class="stat-label">{{ $t('日收益率') }}</span>
+              <span class="stat-value" :class="{ negative: Number(data.daily_rate) < 0 }">{{ data.daily_rate }}{{ isTestMiner ? '' : '%' }}</span>
+            </div>
+            <div class="hero-stat">
+              <span class="stat-label">{{ $t('预计日收益') }}</span>
+              <span class="stat-value accent" :class="{ negative: Number(data.daily_rate) < 0 }">{{ expectedDailyProfit }}</span>
+            </div>
           </div>
         </div>
 
-        <div class=" px-33">
-          <div class="flex justify-between flex-row items-center h-72">
-            <div class="font-31 font-400 text-grey">{{ $t('可用余额') }}</div>
-            <div class="font-31 font-400 textColor">{{ bal.toFixed(5) }}
-              {{ data.buyCurrency ? data.buyCurrency.toUpperCase() : '' }}</div>
+        <!-- 购买金额 -->
+        <div class="section-card">
+          <div class="section-title">{{ $t('购买金额') }}</div>
+          <div class="amount-input-wrap">
+            <input
+              v-model="form.amount"
+              type="number"
+              class="amount-input"
+              :placeholder="$t('输入金额')"
+              @input="changeMount"
+            />
+            <div class="amount-suffix" @click="form.amount = bal">
+              <span>{{ currency }}</span>
+              <span class="all-btn">{{ $t('全部') }}</span>
+            </div>
           </div>
-          <div class="flex justify-between items-center h-72">
-            <div class="font-31 font-400 text-grey">{{ $t('数量限制') }}</div>
-          </div>
-          <div class="flex justify-between items-center h-72">
-            <div class="font-31 font-400 text-grey">{{ $t('最少可投') }}</div>
-            <div class="font-31 font-400 textColor">{{ data.investment_min }}
-              {{ data.buyCurrency ? data.buyCurrency.toUpperCase() : '' }}</div>
-          </div>
-          <div class="flex justify-between items-center h-72">
-            <div class="font-31 font-400 text-grey">{{ $t('最大可投') }}</div>
-            <div class="font-31 font-400 textColor">{{ data.investment_max }}
-              {{ data.buyCurrency ? data.buyCurrency.toUpperCase() : '' }}</div>
+          <div class="balance-tip">
+            <span>{{ $t('可用余额') }}</span>
+            <span class="balance-num">{{ bal.toFixed(5) }} {{ currency }}</span>
           </div>
         </div>
-        <div class=" h-28 px-33 mt-83 mb-22 textColor">{{ $t('概览') }}</div>
-        <div class="px-33">
-          <div class="flex justify-between items-center h-98">
-            <div class="font-31 font-400 text-grey">{{ $t('购买日') }}</div>
-            <div class="font-31 font-400 textColor">{{ dateBuy }}</div>
-          </div>
-          <div class="flex justify-between items-center h-98">
-            <div class="font-31 font-400 text-grey">{{ $t('起息日') }}</div>
-            <div class="font-31 font-400 textColor">{{ earn_time ? earn_time : '--' }}</div>
-          </div>
-          <div class="flex justify-between items-center h-98">
-            <div class="font-31 font-400 text-grey">{{ $t('派息时间') }}</div>
-            <div class="font-31 font-400 textColor">{{ $t('每天') }}</div>
-          </div>
-          <div class="flex justify-between items-center h-98">
-            <div class="font-31 font-400 text-grey">{{ $t('预计今日收益') }}</div>
-            <div class="font-31 font-400 textColor">{{ (data.investment_min * (data.daily_rate / 100)).toFixed(2) }} - {{
-              (data.investment_max * (data.daily_rate / 100)).toFixed(2) }}&nbsp;{{ data.outputCurrency ?
-    data.outputCurrency.toUpperCase() : '' }}</div>
+
+        <!-- 限额 -->
+        <div class="section-card">
+          <div class="section-title">{{ $t('数量限制') }}</div>
+          <div class="info-grid">
+            <div class="info-row">
+              <span class="info-label">{{ $t('最少可投') }}</span>
+              <span class="info-value">{{ data.investment_min }} {{ currency }}</span>
+            </div>
+            <div class="info-row">
+              <span class="info-label">{{ $t('最大可投') }}</span>
+              <span class="info-value">{{ data.investment_max }} {{ currency }}</span>
+            </div>
           </div>
         </div>
-      </div>
-      <div @click="handleBuy" class="text-white btnMain h-97 lh-97 w-762 rounded-lg text-center fixed wz ">{{ $t('购买') }}
+
+        <!-- 概览 -->
+        <div class="section-card">
+          <div class="section-title">{{ $t('概览') }}</div>
+          <div class="info-grid">
+            <div class="info-row">
+              <span class="info-label">{{ $t('购买日') }}</span>
+              <span class="info-value">{{ dateBuy }}</span>
+            </div>
+            <div class="info-row">
+              <span class="info-label">{{ $t('起息日') }}</span>
+              <span class="info-value">{{ earn_time || '--' }}</span>
+            </div>
+            <div class="info-row">
+              <span class="info-label">{{ $t('派息时间') }}</span>
+              <span class="info-value">{{ $t('每天') }}</span>
+            </div>
+            <div class="info-row">
+              <span class="info-label">{{ $t('预计今日收益') }}</span>
+              <span class="info-value highlight">{{ profitRange }} {{ outputCurrency }}</span>
+            </div>
+          </div>
+        </div>
       </div>
 
+      <div class="submit-bar">
+        <button class="submit-btn" @click="handleBuy">{{ $t('购买') }}</button>
+      </div>
     </div>
   </div>
 </template>
 
 <script>
 import { machineMakeOrder } from '@/service/financialManagement.api.js'
-import assetsHead from '@/components/Transform/assets-head/index.vue';
+import assetsHead from '@/components/Transform/assets-head/index.vue'
 import dayjs from 'dayjs'
-import { _getBalance } from "@/service/user.api.js";
-import { showToast } from "vant";
+import { _getBalance } from '@/service/user.api.js'
+import { showToast } from 'vant'
+import { isMinerTest } from '@/utils/index.js'
+
 export default {
-  name: "MachineBuy",
+  name: 'MachineBuy',
   components: {
     assetsHead
   },
@@ -80,29 +108,63 @@
       bal: 0,
       earn_time: '--',
       dateBuy: dayjs().format('YYYY-MM-DD'),
-      data: {
-      },
+      data: {},
       form: {
         minerId: '',
-        amount: '',
-      },
+        amount: ''
+      }
+    }
+  },
+  computed: {
+    isTestMiner() {
+      return isMinerTest(this.data.test)
+    },
+    minerName() {
+      const locale = this.$i18n.locale
+      if (locale === 'CN' || locale === 'zh-CN') {
+        return this.data.name_cn || this.data.name || this.$t('矿机')
+      }
+      return this.data.name_en || this.$t('矿机')
+    },
+    currency() {
+      return this.data.buyCurrency ? this.data.buyCurrency.toUpperCase() : 'USDT'
+    },
+    outputCurrency() {
+      return this.data.outputCurrency ? this.data.outputCurrency.toUpperCase() : 'USDT'
+    },
+    cycleText() {
+      if (this.data.cycle == 0) return this.$t('无限期')
+      const unit = this.isTestMiner ? this.$t('天') : this.$t('分钟')
+      return `${this.data.cycle}${unit}`
+    },
+    profitRange() {
+      const minVal = this.data.investment_min * (this.data.daily_rate / 100)
+      const maxVal = this.data.investment_max * (this.data.daily_rate / 100)
+      const low = Math.min(minVal, maxVal).toFixed(2)
+      const high = Math.max(minVal, maxVal).toFixed(2)
+      return `${low} - ${high}`
+    },
+    expectedDailyProfit() {
+      const amount = Number(this.form.amount)
+      if (!amount || amount <= 0) {
+        return this.profitRange + ' ' + this.outputCurrency
+      }
+      const profit = (amount * (this.data.daily_rate / 100)).toFixed(2)
+      return `${profit} ${this.outputCurrency}`
     }
   },
   methods: {
     changeMount() {
-      if (this.form.amount == '') {
-        return
-      }
+      if (this.form.amount === '') return
       machineMakeOrder(this.form).then(res => {
         this.earn_time = res.earn_time
-        console.log(res.earn_time)
       })
     },
     handleBuy() {
-      if (!this.data.test && !this.form.amount) {
+      if (!this.isTestMiner && !this.form.amount) {
         showToast(this.$t('请输入金额'))
         return
-      } else if (this.data.test && this.form.amount == '') {
+      } else if (this.isTestMiner && this.form.amount === '') {
         this.form.amount = 0
       }
       if (this.form.amount * 1 < this.data.investment_min) {
@@ -112,49 +174,253 @@
         showToast(this.$t('最大数量') + ':' + this.data.investment_max)
         return
       }
-
       this.$router.push({ path: '/cryptos/machine-confirm', query: { ...this.form } })
-
     },
-    //获取钱包余额
     getAvailable(symbol) {
       _getBalance().then((res) => {
-        let walletList = res.extends;
-        let initObj = walletList.find(item => {
-          return item.symbol.toLowerCase() == symbol.toLowerCase()
-        })
-        this.bal = initObj.usable
-      });
-    },
+        const walletList = res.extends || []
+        const initObj = walletList.find(item => item.symbol.toLowerCase() === symbol.toLowerCase())
+        this.bal = initObj ? initObj.usable : 0
+      })
+    }
   },
   created() {
     this.data = JSON.parse(this.$route.query.obj)
     this.getAvailable(this.data.buyCurrency || 'usdt')
     this.form.minerId = this.data.id
-    if (this.data.test) {
+    if (this.isTestMiner) {
       this.form.amount = 0
       machineMakeOrder(this.form).then(res => {
         this.earn_time = res.earn_time
-        console.log(res.earn_time)
       })
     }
   }
 }
 </script>
 
-<style lang="scss" >
-@import "@/assets/init.scss";
+<style scoped lang="scss">
+@import '@/assets/init.scss';
 
 #cryptos {
-  .financialOrder {
-    width: 100%;
+  .machine-buy-page {
+    min-height: 100vh;
+    padding-bottom: 160px;
     box-sizing: border-box;
   }
 
-  .wz {
-    bottom: 44px;
-    left: 32px;
-    right: 32px;
+  .page-body {
+    padding: 24px 32px 0;
+  }
+
+  .hero-card {
+    padding: 36px 32px;
+    border-radius: 24px;
+    background: linear-gradient(135deg, #1a6dff 0%, #004aee 55%, #0035b8 100%);
+    color: #fff;
+    box-shadow: 0 16px 40px rgba(0, 74, 238, 0.28);
+    margin-bottom: 28px;
+  }
+
+  .hero-top {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-bottom: 28px;
+  }
+
+  .hero-badge {
+    display: inline-block;
+    padding: 8px 20px;
+    border-radius: 999px;
+    background: rgba(255, 255, 255, 0.18);
+    font-size: 24px;
+  }
+
+  .hero-cycle {
+    font-size: 26px;
+    opacity: 0.9;
+  }
+
+  .hero-stats {
+    display: flex;
+    gap: 48px;
+  }
+
+  .hero-stat {
+    display: flex;
+    flex-direction: column;
+    gap: 8px;
+  }
+
+  .stat-label {
+    font-size: 24px;
+    opacity: 0.85;
+  }
+
+  .stat-value {
+    font-size: 40px;
+    font-weight: 700;
+    line-height: 1.1;
+
+    &.accent {
+      font-size: 32px;
+    }
+
+    &.negative {
+      color: #ffb4b4;
+    }
+  }
+
+  .section-card {
+    padding: 32px 28px;
+    border-radius: 20px;
+    margin-bottom: 24px;
+    @include themify() {
+      background: themed('cont_background');
+    }
+    box-shadow: 0 4px 24px rgba(0, 0, 0, 0.04);
+  }
+
+  .section-title {
+    font-size: 32px;
+    font-weight: 600;
+    margin-bottom: 28px;
+    @include themify() {
+      color: themed('text_color');
+    }
+  }
+
+  .amount-input-wrap {
+    display: flex;
+    align-items: stretch;
+    border-radius: 16px;
+    overflow: hidden;
+    border: 2px solid rgba(0, 74, 238, 0.2);
+    @include themify() {
+      background: themed('tab_background');
+    }
+  }
+
+  .amount-input {
+    flex: 1;
+    min-width: 0;
+    height: 96px;
+    padding: 0 28px;
+    border: none;
+    outline: none;
+    font-size: 36px;
+    font-weight: 600;
+    @include themify() {
+      background: transparent;
+      color: themed('text_color');
+    }
+
+    &::placeholder {
+      font-size: 28px;
+      font-weight: 400;
+      color: #868e9b;
+    }
+  }
+
+  .amount-suffix {
+    display: flex;
+    align-items: center;
+    gap: 12px;
+    padding: 0 28px;
+    font-size: 28px;
+    font-weight: 600;
+    white-space: nowrap;
+    @include themify() {
+      color: themed('text_color');
+      background: themed('cont_background');
+    }
+    border-left: 1px solid rgba(134, 142, 155, 0.2);
+  }
+
+  .all-btn {
+    color: #004aee;
+    font-size: 26px;
+  }
+
+  .balance-tip {
+    display: flex;
+    justify-content: space-between;
+    margin-top: 20px;
+    font-size: 26px;
+    color: #868e9b;
+
+    .balance-num {
+      font-weight: 600;
+      @include themify() {
+        color: themed('text_color');
+      }
+    }
+  }
+
+  .info-grid {
+    display: flex;
+    flex-direction: column;
+  }
+
+  .info-row {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 24px 0;
+    border-bottom: 1px solid rgba(134, 142, 155, 0.15);
+
+    &:last-child {
+      border-bottom: none;
+      padding-bottom: 0;
+    }
+
+    &:first-child {
+      padding-top: 0;
+    }
+  }
+
+  .info-label {
+    font-size: 28px;
+    color: #868e9b;
+  }
+
+  .info-value {
+    font-size: 28px;
+    font-weight: 600;
+    text-align: right;
+    max-width: 58%;
+    word-break: break-all;
+    @include themify() {
+      color: themed('text_color');
+    }
+
+    &.highlight {
+      color: #004aee;
+    }
+  }
+
+  .submit-bar {
+    position: fixed;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    padding: 24px 32px calc(24px + env(safe-area-inset-bottom));
+    @include themify() {
+      background: themed('footer_background');
+    }
+    box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.06);
+    z-index: 20;
+  }
+
+  .submit-btn {
+    width: 100%;
+    height: 96px;
+    border: none;
+    border-radius: 16px;
+    background: linear-gradient(90deg, #1a6dff, #004aee);
+    color: #fff;
+    font-size: 32px;
+    font-weight: 600;
   }
 }
 </style>
diff --git a/src/views/cryptos/financialManagement/machineConfirm.vue b/src/views/cryptos/financialManagement/machineConfirm.vue
index 0360a46..4e6217d 100644
--- a/src/views/cryptos/financialManagement/machineConfirm.vue
+++ b/src/views/cryptos/financialManagement/machineConfirm.vue
@@ -1,77 +1,99 @@
 <template>
   <div id="cryptos">
-    <div id="financialOrder" class="financialOrder">
+    <div class="machine-confirm-page">
       <assets-head :title="$t('确认订单')"></assets-head>
-      <div class="box-border  ">
-        <div class="w-full h-1 bgDark"></div>
-        <div class="mt-48 font-36 font-600 px-33 mb-22 textColor">{{ $i18n.locale === 'CN' || $i18n.locale === 'zh-CN' ?
-          data.miner_name_cn : data.miner_name_en
-        }}</div>
-        <div class=" px-33">
-          <div class="flex justify-between flex-row items-center h-72">
-            <div class="font-31 font-400 text-grey">{{ $t('矿机金额') }}</div>
-            <div class="font-31 font-400 textColor">{{ data.amount }} {{ data.buyCurrenc ?
-              data.buyCurrenc.toUpperCase() : '' }}</div>
+
+      <div class="page-body">
+        <div class="hero-card">
+          <div class="hero-badge">{{ $t('确认订单') }}</div>
+          <div class="hero-name">{{ minerName }}</div>
+          <div class="hero-amount">
+            <span class="amount-num">{{ data.amount }}</span>
+            <span class="amount-unit">{{ buyCurrency }}</span>
           </div>
-          <div class="flex justify-between items-center h-72">
-            <div class="font-31 font-400 text-grey">{{ $t('30天预期收益') }}</div>
-            <div class="font-31 font-400 textColor">{{ data.profit_may }} {{ data.outputCurrency ?
-              data.outputCurrency.toUpperCase() : '' }}</div>
-          </div>
-          <div class="flex justify-between items-center h-72">
-            <div class="font-31 font-400 text-grey">{{ $t('周期') }}</div>
-            <div class="font-31 font-400 textColor">{{ data.cycle == 0 ? $t('无限期') : data.cycle + $t('天') }}</div>
-          </div>
-          <div class="flex justify-between items-center h-72">
-            <div class="font-31 font-400 text-grey">{{ $t('日收益') }}</div>
-            <div class="font-31 font-400 textColor">{{ data.daily_rate }}%</div>
-          </div>
-          <div class="flex justify-between items-center h-72">
-            <div class="font-31 font-400 text-grey">{{ $t('起息日') }}</div>
-            <div class="font-31 font-400 textColor">{{ data.earn_time }}</div>
-          </div>
-          <!-- <div class="flex justify-between items-center h-72">
-          <div class="font-31 font-400 text-grey">{{$t('计息结束日')}}</div>
-          <div class="font-31 font-400 textColor">{{'--'}}</div>
-        </div> -->
-          <div class="flex justify-between items-center h-72">
-            <div class="font-31 font-400 text-grey">{{ $t('订单编号') }}</div>
-            <div class="font-31 font-400 textColor">{{ data.order_no }}</div>
-          </div>
-          <div class="flex justify-between items-center h-72">
-            <div class="font-31 font-400 text-grey">{{ $t('订单时间') }}</div>
-            <div class="font-31 font-400 textColor">{{ data.create_time }}</div>
+        </div>
+
+        <div class="section-card">
+          <div class="section-title">{{ $t('订单信息') }}</div>
+          <div class="info-grid">
+            <div class="info-row">
+              <span class="info-label">{{ $t('矿机金额') }}</span>
+              <span class="info-value highlight">{{ data.amount }} {{ buyCurrency }}</span>
+            </div>
+            <div class="info-row">
+              <span class="info-label">{{ $t('30天预期收益') }}</span>
+              <span class="info-value accent" :class="{ negative: Number(data.daily_rate) < 0 }">{{ data.profit_may }} {{ outputCurrency }}</span>
+            </div>
+            <div class="info-row">
+              <span class="info-label">{{ $t('周期') }}</span>
+              <span class="info-value">{{ cycleText }}</span>
+            </div>
+            <div class="info-row">
+              <span class="info-label">{{ $t('日收益') }}</span>
+              <span class="info-value" :class="{ negative: Number(data.daily_rate) < 0 }">{{ data.daily_rate }}%</span>
+            </div>
+            <div class="info-row">
+              <span class="info-label">{{ $t('起息日') }}</span>
+              <span class="info-value">{{ data.earn_time || '--' }}</span>
+            </div>
+            <div class="info-row">
+              <span class="info-label">{{ $t('订单编号') }}</span>
+              <span class="info-value">{{ data.order_no || '--' }}</span>
+            </div>
+            <div class="info-row">
+              <span class="info-label">{{ $t('订单时间') }}</span>
+              <span class="info-value">{{ data.create_time || '--' }}</span>
+            </div>
           </div>
         </div>
       </div>
-      <div class="flex  justify-center items-center mt-120">
-        <div class="contBackground rounded-lg font-32 w-360 h-80 lh-80 mr-36 text-center textColor"
-          @click="$router.go(-1)">{{ $t('取消') }}
-        </div>
-        <div class="rounded-lg font-32 w-360 h-80 lh-80 text-center text-white btnMain" @click="confirm">{{ $t('确认') }}
-        </div>
+
+      <div class="submit-bar">
+        <button class="cancel-btn" @click="$router.go(-1)">{{ $t('取消') }}</button>
+        <button class="submit-btn" @click="confirm">{{ $t('确认') }}</button>
       </div>
     </div>
   </div>
 </template>
 
 <script>
-import assetsHead from '@/components/Transform/assets-head/index.vue';
-import { confirmMichineOrder, machineMakeOrder } from "@/service/financialManagement.api.js";
+import assetsHead from '@/components/Transform/assets-head/index.vue'
+import { confirmMichineOrder, machineMakeOrder } from '@/service/financialManagement.api.js'
+import { isMinerTest } from '@/utils/index.js'
+
 export default {
-  name: "machineConfirm",
+  name: 'machineConfirm',
   components: {
     assetsHead
   },
   data() {
     return {
-      data: {},
+      data: {}
+    }
+  },
+  computed: {
+    minerName() {
+      const locale = this.$i18n.locale
+      if (locale === 'CN' || locale === 'zh-CN') {
+        return this.data.miner_name_cn || this.$t('矿机')
+      }
+      return this.data.miner_name_en || this.$t('矿机')
+    },
+    buyCurrency() {
+      return this.data.buyCurrenc ? this.data.buyCurrenc.toUpperCase() : 'USDT'
+    },
+    outputCurrency() {
+      return this.data.outputCurrency ? this.data.outputCurrency.toUpperCase() : 'USDT'
+    },
+    cycleText() {
+      if (this.data.cycle == 0) return this.$t('无限期')
+      const unit = isMinerTest(this.data.test) ? this.$t('天') : this.$t('分钟')
+      return `${this.data.cycle}${unit}`
     }
   },
   methods: {
     machineMakeOrderFn() {
       machineMakeOrder(this.$route.query).then(res => {
-        //console.log('矿机认购', res)
         this.data = res
       })
     },
@@ -80,38 +102,184 @@
         session_token: this.data.session_token,
         minerId: this.data.minerId,
         amount: this.data.amount
-      }).then((res) => {
-        //console.log('订单确认成功', res)
+      }).then(() => {
         this.$router.push({
           path: '/cryptos/order-success',
-          query: {
-            type: '1', // 结束后查看矿机订单
-          }
+          query: { type: '1' }
         })
-      }).catch((res) => {
+      }).catch(() => {
         this.machineMakeOrderFn()
       })
     }
   },
   created() {
     this.machineMakeOrderFn()
-  },
+  }
 }
 </script>
 
-<style lang="scss">
-@import "@/assets/init.scss";
+<style scoped lang="scss">
+@import '@/assets/init.scss';
 
 #cryptos {
-  .financialOrder {
-    width: 100%;
+  .machine-confirm-page {
+    min-height: 100vh;
+    padding-bottom: 160px;
     box-sizing: border-box;
   }
 
-  .wz {
-    bottom: 44px;
-    left: 32px;
-    right: 32px;
+  .page-body {
+    padding: 24px 32px 0;
+  }
+
+  .hero-card {
+    padding: 40px 36px;
+    border-radius: 24px;
+    background: linear-gradient(135deg, #1a6dff 0%, #004aee 55%, #0035b8 100%);
+    color: #fff;
+    box-shadow: 0 16px 40px rgba(0, 74, 238, 0.28);
+    margin-bottom: 28px;
+    text-align: center;
+  }
+
+  .hero-badge {
+    display: inline-block;
+    padding: 8px 20px;
+    border-radius: 999px;
+    background: rgba(255, 255, 255, 0.18);
+    font-size: 24px;
+    margin-bottom: 20px;
+  }
+
+  .hero-name {
+    font-size: 32px;
+    font-weight: 600;
+    margin-bottom: 24px;
+    opacity: 0.95;
+  }
+
+  .hero-amount {
+    display: flex;
+    align-items: baseline;
+    justify-content: center;
+    gap: 12px;
+  }
+
+  .amount-num {
+    font-size: 64px;
+    font-weight: 700;
+    line-height: 1;
+  }
+
+  .amount-unit {
+    font-size: 30px;
+    font-weight: 600;
+  }
+
+  .section-card {
+    padding: 32px 28px;
+    border-radius: 20px;
+    @include themify() {
+      background: themed('cont_background');
+    }
+    box-shadow: 0 4px 24px rgba(0, 0, 0, 0.04);
+  }
+
+  .section-title {
+    font-size: 32px;
+    font-weight: 600;
+    margin-bottom: 28px;
+    @include themify() {
+      color: themed('text_color');
+    }
+  }
+
+  .info-grid {
+    display: flex;
+    flex-direction: column;
+  }
+
+  .info-row {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 24px 0;
+    border-bottom: 1px solid rgba(134, 142, 155, 0.15);
+
+    &:last-child {
+      border-bottom: none;
+      padding-bottom: 0;
+    }
+
+    &:first-child {
+      padding-top: 0;
+    }
+  }
+
+  .info-label {
+    font-size: 28px;
+    color: #868e9b;
+    flex-shrink: 0;
+  }
+
+  .info-value {
+    font-size: 28px;
+    font-weight: 600;
+    text-align: right;
+    max-width: 58%;
+    word-break: break-all;
+    @include themify() {
+      color: themed('text_color');
+    }
+
+    &.highlight {
+      color: #004aee;
+    }
+
+    &.accent {
+      color: #e35461;
+    }
+
+    &.negative {
+      color: #f6465d;
+    }
+  }
+
+  .submit-bar {
+    position: fixed;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    display: flex;
+    gap: 24px;
+    padding: 24px 32px calc(24px + env(safe-area-inset-bottom));
+    @include themify() {
+      background: themed('footer_background');
+    }
+    box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.06);
+    z-index: 20;
+  }
+
+  .cancel-btn,
+  .submit-btn {
+    flex: 1;
+    height: 96px;
+    border: none;
+    border-radius: 16px;
+    font-size: 32px;
+    font-weight: 600;
+  }
+
+  .cancel-btn {
+    @include themify() {
+      background: themed('tab_background');
+      color: themed('text_color');
+    }
+  }
+
+  .submit-btn {
+    background: linear-gradient(90deg, #1a6dff, #004aee);
+    color: #fff;
   }
 }
 </style>
diff --git a/src/views/cryptos/financialManagement/miningMachineHome.vue b/src/views/cryptos/financialManagement/miningMachineHome.vue
index fe241d6..b25ffb1 100644
--- a/src/views/cryptos/financialManagement/miningMachineHome.vue
+++ b/src/views/cryptos/financialManagement/miningMachineHome.vue
@@ -28,12 +28,10 @@
           </div>
         </div>
       </div>
-      <div class="flex justify-between box-border px-30 mt-43">
-        <div @click="$router.push('/funds?tab=3&index=1')"
-          class="greyBg text-grey w-370 py-13 rounded-lg font-27 text-center mr-20 active activeBKClick">{{ $t('托管订单') }}
+      <div class="box-border px-30 mt-43">
+        <div @click="$router.push('/cryptos/funds?tab=3&index=1')"
+          class="greyBg text-grey w-full py-13 rounded-lg font-27 text-center active activeBKClick">{{ $t('托管订单') }}
         </div>
-        <div @click="$router.push('/cryptos/machine-rule')"
-          class="greyBg text-grey w-370 py-13 rounded-lg font-27 text-center activeClick">{{ $t('规则') }}</div>
       </div>
       <div class="px-30 mt-40 pb-80">
         <div v-for="(item, index) in list" :key="index"
@@ -41,7 +39,7 @@
           <div class="title absolute px-16 py-8 font-26 text-white top-0 left-22"
             :class="item.on_sale === '0' ? 'inactive' : 'bg-green'">
             <!-- {{item.on_sale==='0'?$t('已锁定,联系客服'):$t('日收益率')}}{{item.on_sale==='0'?null:item.daily_rate}}{{item.on_sale==='0'?null:index===0?'':'%'}} -->
-            {{ item.on_sale === '0' ? $t('已锁定,联系客服') : (item.test ? item.cycle + $t('天') + $t('预期收益') + ' ' +
+            {{ item.on_sale === '0' ? $t('已锁定,联系客服') : (isMinerTest(item.test) ? item.cycle + $t('天') + $t('预期收益') + ' ' +
               item.all_rate
               +
               'USDT' : $t('30天预期收益') + ' ' + item.all_rate + '%') }}
@@ -68,21 +66,21 @@
                 </template>
               </span>
               <!-- <span class="font-26 mt-24 mb-16 textColor">{{item.on_sale==='0'?$t('已锁定,联系客服'):$t('日收益率')}}{{' '}}{{item.on_sale==='0'?null:item.daily_rate}}{{item.on_sale==='0'?null:index===0?'':'%'}}</span> -->
-              <span class="font-26 mt-24 mb-16 textColor">{{ $t('日收益率') }}{{ item.daily_rate }}{{ item.test ? 'USDT' : '%'
+              <span class="font-26 mt-24 mb-16" :class="Number(item.daily_rate) < 0 ? 'text-red' : 'textColor'">{{ $t('日收益率') }}{{ item.daily_rate }}{{ isMinerTest(item.test) ? 'USDT' : '%'
               }}</span>
               <span class="font-26 mb-16 textColor">{{ $t('限额') }} {{ item.investment_min + '-' }}{{ item.investment_max
               }}
                 {{ item.buyCurrency ? item.buyCurrency.toUpperCase() : '--' }}</span>
-              <span class="font-26 textColor">{{ $t('周期') }} {{ item.cycle == 0 ? $t('无限期') : item.cycle + $t('天')
+              <span class="font-26 textColor">{{ isMinerTest(item.test) ? $t('周期') : $t('可解锁周期') }} {{ item.cycle == 0 ? $t('无限期') : item.cycle + (isMinerTest(item.test) ? $t('天') : $t('分钟'))
               }}</span>
             </div>
           </div>
           <div @click="item.on_sale === '0' ? null : $router.push({
-            path: '/machine-buy',
+            path: '/cryptos/machine-buy',
             query: { obj: JSON.stringify(item) }
           })" class="py-16 w-180 font-28 font-600 text-center rounded-lg"
             :class="item.on_sale === '0' ? 'inactive activeDisableClick' : 'active activeBKClick'">{{
-              item.on_sale === '0' ? $t('已锁定') : item.test ? $t('立即体验') : $t('立即租用') }}</div>
+              item.on_sale === '0' ? $t('已锁定') : isMinerTest(item.test) ? $t('立即体验') : $t('立即租用') }}</div>
         </div>
       </div>
     </div>
@@ -93,6 +91,7 @@
 import assetsHead from '@/components/Transform/assets-head/index.vue';
 import { getMachineList } from "@/service/financialManagement.api.js";
 import { getMiningRevenueStatisticsList } from "@/service/financialManagement.api.js";
+import { isMinerTest } from '@/utils/index.js'
 export default {
   name: "fundHome",
   components: {
@@ -106,6 +105,7 @@
     }
   },
   methods: {
+    isMinerTest,
     click_share() {
       this.$router.push('/promote');
     },
diff --git a/src/views/cryptos/loan/index.vue b/src/views/cryptos/loan/index.vue
index 7a4c9d7..a1fc9d9 100644
--- a/src/views/cryptos/loan/index.vue
+++ b/src/views/cryptos/loan/index.vue
@@ -1,239 +1,213 @@
 <template>
   <div id="cryptos">
-    <div class="loan">
+    <div class="loan-page">
       <assets-head :title="$t('助力贷')">
         <div class="right flex items-center">
-          <img src="@/assets/image/loan/rule.png" alt="rule-img" class="w-50 h-50 mr-20"
+          <img src="@/assets/image/loan/rule.png" alt="rule-img" class="head-icon mr-20"
             @click="$router.push('/cryptos/loanRule')" />
-          <img src="@/assets/image/loan/history.png" alt="exchange-img" class="w-50 h-50"
+          <img src="@/assets/image/loan/history.png" alt="history-img" class="head-icon"
             @click="$router.push('/cryptos/loanHistory')" />
         </div>
       </assets-head>
 
-      <!--   container -->
-      <div class="container px-32">
-        <!--      title-->
-        <div class="py-30">
-          <span style="color: #E35461;">{{ this.$t('经过平台审核,您可向平台申请一笔借款!') }}</span>
+      <div class="loan-body">
+        <!-- 额度展示 -->
+        <div class="hero-card">
+          <div class="hero-badge">{{ $t('最高可借') }}</div>
+          <div class="hero-amount">
+            <span class="amount-num">{{ formatNum(loanData.maxQuota) }}</span>
+            <span class="amount-unit">USDT</span>
+          </div>
+          <p class="hero-tip">{{ $t('经过平台审核,您可向平台申请一笔借款!') }}</p>
         </div>
-        <!--    list  -->
-        <div class="loanList">
-          <div class="flex justify-between py-30 border-b-color">
-            <div>
-              <span class="grayText">{{ $t('期望借款金额') }}</span>
-            </div>
-            <div class="flex align-center">
-              <!--            <input class="font-600 textColor border-none text-right mr-14 mainBackground" v-model="loanAmount"  disabled="disabled" @input="inputAmunt" />-->
-              <span class="mr-14 font-600 textColor">{{ loanData.maxQuota || 0 }}</span>
-              <span class="font-600 textColor">USDT</span>
-            </div>
-          </div>
-          <div class="flex justify-between py-30 border-b-color">
-            <div>
-              <span class="grayText">{{ $t('还款周期') }}</span>
-            </div>
-            <div class="flex align-center">
-              <!--            <div class="font-600 textColor relative">-->
-              <div class="font-600 mr-14 textColor relative" @click="isSelectDay = !isSelectDay">
-                <span>{{ loanData.term }} {{ $t('天') }}</span>
-                <!--              <div class="selectDay"  v-show="isSelectDay">-->
-                <!--                <div class="mb-20 border-b-white" v-for="(s,index) in selectDayList" :key="index"  @click="selectDay(s)">-->
-                <!--                  <span>{{s}}</span>-->
-                <!--                </div>-->
-                <!--              </div>-->
-              </div>
-              <div class="w-24 h-24">
-                <img src="@/assets/image/loan/right.png" alt="right-img" class="w-full">
-              </div>
-            </div>
-          </div>
-          <div class="flex justify-between py-30 border-b-color">
-            <div>
-              <span class="grayText">{{ $t('日利率') }}</span>
-            </div>
-            <div class="flex align-center">
-              <span class="font-600 textColor">{{ loanData.dailyRate * 1 * 100 || 0 }}%</span>
-            </div>
-          </div>
-          <div class="flex justify-between py-30 border-b-color">
-            <div>
-              <span class="grayText">{{ $t('还款方式') }}</span>
-            </div>
-            <div class="flex align-center">
-              <span class="font-600 textColor text-right">{{ $t('到期一次还款') }}</span>
-            </div>
-          </div>
-          <div class="flex justify-between py-30 border-b-color">
-            <div>
-              <span class="grayText">{{ $t('利息') }}</span>
-            </div>
-            <div class="flex align-center">
-              <!--            借款金额*日利率*借款天数-->
-              <!-- <span class="font-600 textColor">{{$bigDecimal.multiply(+loanData.maxQuota , +loanData.dailyRate) * +this.loanData.term || 0 }} USDT</span> -->
-              <span class="font-600 textColor">{{ (+loanData.maxQuota, +loanData.dailyRate) * +this.loanData.term || 0 }}
-                USDT</span>
-            </div>
-          </div>
-          <div class="flex justify-between py-30 border-b-color">
-            <div>
-              <span class="grayText">{{ $t('放款机构') }}</span>
-            </div>
-            <div class="flex align-center">
-              <span class="font-600 textColor">{{ loanData.lendingName }}</span>
-            </div>
-          </div>
-        </div>
-        <!--      上传区域-->
-        <div class="uploadImg">
-          <div class="mb-40 textColor">
-            <span>{{ $t('信用放款(请确保图片清晰可见)') }}</span>
-          </div>
-          <div class="upload">
-            <div class="flex mt-33 mb-80 justify-between">
-              <div class="flex-1 flex flex-col text-center justify-center items-center">
-                <div class="upload-wrap">
-                  <!--                    <img src="@/assets/image/kyc/0.png" alt="" class="w-full"-->
-                  <!--                         v-if="[1, 2].includes(status) && frontFile.length === 0" />-->
-                  <van-uploader v-model="frontFile" multiple :max-count="1" :disabled="isUpload" :after-read="afterRead"
-                    @click-upload="onClickUpload('frontFile')" />
-                </div>
-                <div class="mt-32 font-26 h-20" style="color:#868D9A;">{{ $t('证件正面') }}</div>
-              </div>
-              <div class="flex-1 flex flex-col text-center justify-center items-center">
-                <div class="upload-wrap">
-                  <!--                    <img src="@/assets/image/kyc/1.png" alt="" class="w-full"-->
-                  <!--                         v-if="[1, 2].includes(status) && reverseFile.length === 0" />-->
-                  <van-uploader v-model="reverseFile" multiple :max-count="1" :disabled="isUpload" :after-read="afterRead"
-                    @click-upload="onClickUpload('reverseFile')" />
-                </div>
-                <div class="mt-32 font-26 h-20" style="color:#868D9A;">{{ $t('证件反面') }}</div>
-              </div>
-            </div>
-            <div class="flex mt-33 mb-80 justify-between">
-              <div class="flex-1 flex flex-col text-center justify-center items-center">
-                <div class="upload-wrap">
-                  <!--                    <img src="@/assets/image/kyc/2.png" alt="" class="w-full"-->
-                  <!--                         v-if="[1, 2].includes(status) && fileList.length === 0" />-->
-                  <van-uploader v-model="fileList" multiple :max-count="1" :disabled="isUpload" :after-read="afterRead"
-                    @click-upload="onClickUpload('fileList')" />
-                </div>
-                <div class="mt-32 font-26 h-20" style="color:#868D9A;">{{ $t('手持证件照') }}</div>
-              </div>
-              <div class="flex-1 flex flex-col text-center justify-center items-center">
-                <div class="upload-wrap">
-                  <img src="@/assets/image/loan/handId.png" alt="" class="w-full" />
-                </div>
-                <div class="mt-32 font-26 h-20" style="color:#868D9A;">{{ $t('拍摄示例') }}</div>
-              </div>
+
+        <!-- 期限选择 -->
+        <div class="section-card">
+          <div class="section-title">{{ $t('选择借款期限') }}</div>
+          <div class="term-list">
+            <div
+              v-for="item in loanDeployList"
+              :key="item.uuid || item.id || item.term"
+              class="term-item"
+              :class="{ active: isSamePlan(item) }"
+              @click="selectDay(item)"
+            >
+              <span class="term-days">{{ item.term }}</span>
+              <span class="term-unit">{{ $t('天') }}</span>
             </div>
           </div>
         </div>
 
-        <!--      确认按钮-->
-        <div class="confirmBtn btnMain w-full py-30 text-center text-white font-400 font-32" @click="submit()">
-          <span>{{ $t('确定') }}</span>
+        <!-- 方案详情 -->
+        <div class="section-card">
+          <div class="section-title">{{ $t('借款方案') }}</div>
+          <div class="info-grid">
+            <div class="info-row">
+              <span class="info-label">{{ $t('期望借款金额') }}</span>
+              <span class="info-value highlight">{{ formatNum(loanData.maxQuota) }} USDT</span>
+            </div>
+            <div class="info-row">
+              <span class="info-label">{{ $t('还款周期') }}</span>
+              <span class="info-value">{{ loanData.term || 0 }} {{ $t('天') }}</span>
+            </div>
+            <div class="info-row">
+              <span class="info-label">{{ $t('日利率') }}</span>
+              <span class="info-value">{{ dailyRatePercent }}%</span>
+            </div>
+            <div class="info-row">
+              <span class="info-label">{{ $t('预计总利息') }}</span>
+              <span class="info-value accent">{{ totalInterest }} USDT</span>
+            </div>
+            <div class="info-row">
+              <span class="info-label">{{ $t('还款方式') }}</span>
+              <span class="info-value">{{ $t('到期一次还款') }}</span>
+            </div>
+            <div class="info-row">
+              <span class="info-label">{{ $t('放款机构') }}</span>
+              <span class="info-value">{{ loanData.lendingName || '-' }}</span>
+            </div>
+          </div>
+        </div>
+
+        <!-- 证件上传 -->
+        <div class="section-card upload-section">
+          <div class="section-title">{{ $t('身份认证') }}</div>
+          <p class="upload-tip">{{ $t('信用放款(请确保图片清晰可见)') }}</p>
+          <div class="upload-grid">
+            <div class="upload-item">
+              <div class="upload-wrap">
+                <van-uploader
+                  v-model="frontFile"
+                  multiple
+                  :max-count="1"
+                  :deletable="!isUpload"
+                  :disabled="isUpload"
+                  :after-read="afterRead"
+                  @click-upload="onClickUpload('frontFile')"
+                />
+              </div>
+              <span class="upload-label">{{ $t('credentFront') }}</span>
+            </div>
+            <div class="upload-item">
+              <div class="upload-wrap">
+                <van-uploader
+                  v-model="reverseFile"
+                  multiple
+                  :max-count="1"
+                  :deletable="!isUpload"
+                  :disabled="isUpload"
+                  :after-read="afterRead"
+                  @click-upload="onClickUpload('reverseFile')"
+                />
+              </div>
+              <span class="upload-label">{{ $t('credentObverse') }}</span>
+            </div>
+          </div>
         </div>
       </div>
-      <van-popup v-model:show="isSelectDay" position="bottom" :round="true">
-        <ul class="bg-white">
-          <li v-for="(day, index) in loanDeployList" class="text-center py-30" :key="index" @click="selectDay(day)">
-            <span>{{ day.term }}</span>
-          </li>
-        </ul>
-      </van-popup>
+
+      <div class="submit-bar">
+        <button class="submit-btn" :disabled="isUpload" @click="submit">
+          {{ $t('提交申请') }}
+        </button>
+      </div>
     </div>
   </div>
 </template>
 
 <script>
 import AssetsHead from "@/components/Transform/assets-head/index.vue";
-import { Popup, Uploader, showToast } from "vant";
-import { _uploadImage, _getLoan, _loanApply } from "@/service/fund.api";
-// import {debounce} from "@/utils/utis";
+import { Uploader, showToast } from "vant";
+import { _getLoan, _loanApply } from "@/service/fund.api";
+import { _uploadImage } from "@/service/upload.api";
 
 export default {
   name: "loanIndex",
   components: {
     AssetsHead,
     [Uploader.name]: Uploader,
-    [Popup.name]: Popup,
+  },
+  computed: {
+    dailyRatePercent() {
+      const rate = Number(this.loanData.dailyRate) || 0;
+      return (rate * 100).toFixed(2);
+    },
+    totalInterest() {
+      const quota = Number(this.loanData.maxQuota) || 0;
+      const rate = Number(this.loanData.dailyRate) || 0;
+      const term = Number(this.loanData.term) || 0;
+      return (quota * rate * term).toFixed(2);
+    },
   },
   methods: {
+    formatNum(val) {
+      const n = Number(val) || 0;
+      return n.toLocaleString(undefined, { maximumFractionDigits: 2 });
+    },
+    isSamePlan(item) {
+      const key = item.uuid || item.id || item.term;
+      const cur = this.loanData.uuid || this.loanData.id || this.loanData.term;
+      return key === cur;
+    },
     getLoan() {
       _getLoan().then(data => {
-        this.loanDeployList = data
-        this.loanDeployList.sort((a, b) => {
-          return +a.term - +b.term
-        })
-        this.loanData = this.loanDeployList[0]
-      })
+        this.loanDeployList = (data || []).sort((a, b) => +a.term - +b.term);
+        if (this.loanDeployList.length) {
+          this.loanData = this.loanDeployList[0];
+        }
+      });
     },
     submit() {
-      // console.log('this.frontFile',this.frontFile)
-      if (!this.frontFile.length || !this.reverseFile.length || !this.fileList.length) {
-        showToast(this.$t('请上传完整证件信息'))
-        return
+      if (!this.frontFile.length || !this.reverseFile.length) {
+        showToast(this.$t('请上传证件正反面'));
+        return;
+      }
+      if (!this.frontFile[0].resURL || !this.reverseFile[0].resURL) {
+        showToast(this.$t('uploading'));
+        return;
       }
       _loanApply({
-        ...this.loanData,
-        // term:this.loanData.term,
-        quota: this.loanData.maxQuota,//借贷金额 取max
-        // dailyRate: this.loanData.dailyRate,
-        // lendingInstitution:this.loanData.lendingInstitution,//放款机构名字
-        // lendingName:this.loanData.lendingName,
-        // repayment:this.loanData.repayment,//还款方式
-        // repayCycle:this.loanData.repayCycle, //还款日期
+        uuid: this.loanData.uuid || this.loanData.id,
+        quota: this.loanData.maxQuota,
         symbol: 'USDT',
         frontFile: this.frontFile[0].resURL,
         reverseFile: this.reverseFile[0].resURL,
-        fileList: this.fileList[0].resURL,
-      }).then(res => {
-        // console.log('res',res)
-        this.$router.push('/cryptos/loanHistory')
+      }).then(() => {
+        showToast(this.$t('提交成功'));
+        this.$router.push('/cryptos/loanHistory');
       }).catch(err => {
-        showToast(this.$t(err.msg))
-      })
+        showToast(err.msg || this.$t('提交失败'));
+      });
     },
-    // //防抖
-    // inputAmunt(){
-    //   this.loanAmount = this.loanAmount.replace(/[^0-9]/g, '')
-    //   this.debounceFn()
-    // },
-    // debounceFn: debounce(function () {
-    //   this.getInterest()
-    // }, 500),
-    // getInterest(){
-    //   this.interest = +this.loanAmount * +this.loanRate
-    // },
     selectDay(data) {
-      this.loanData = data
-      // this.getInterest()
-      this.isSelectDay = false
+      this.loanData = data;
     },
     onClickUpload(type) {
-      this.curFile = type
+      this.curFile = type;
     },
-    afterRead(file) { /// 处理文件
-      // console.log(file)
-      file.status = 'uploading'
-      file.message = this.$t('上传中...')
-      this.isUpload = true
+    afterRead(file) {
+      file.status = 'uploading';
+      file.message = this.$t('uploading');
+      this.isUpload = true;
       _uploadImage(file).then(data => {
         file.status = 'success';
-        file.message = this.$t('上传成功');
-        file.resURL = data
-        this[this.curFile] = [file]
-        this.isUpload = false
-      }).catch(err => {
+        file.message = this.$t('uploadSuccess');
+        file.resURL = data;
+        if (this.curFile === 'frontFile') {
+          this.frontFile = [file];
+        } else {
+          this.reverseFile = [file];
+        }
+        this.isUpload = false;
+      }).catch(() => {
         file.status = 'failed';
-        file.message = this.$t('图片上传失败');
-        this.isUpload = false
-      })
+        file.message = this.$t('uploadFailed');
+        this.isUpload = false;
+      });
     },
   },
   mounted() {
-    this.getLoan()
-    // this.getInterest()
+    this.getLoan();
   },
   data() {
     return {
@@ -241,65 +215,259 @@
       loanDeployList: [],
       frontFile: [],
       reverseFile: [],
-      fileList: [],
       curFile: 'frontFile',
-      // resultArr: ['small-success_' + this.$t('已申请未审核'), 'identifing_' + this.$t('审核中'), 'small-success_' + this.$t('审核通过'), 'icon-close_' + this.$t('审核未通过')], // 0 好像是未提交
-      // status:'',
-      isSelectDay: false,
       isUpload: false,
-    }
-  }
-}
+    };
+  },
+};
 </script>
 
 <style scoped lang="scss">
 @import "@/assets/init.scss";
+
 #cryptos {
-  .loan {
-    width: 100%;
+  .loan-page {
+    min-height: 100vh;
+    padding-bottom: 160px;
     box-sizing: border-box;
   }
 
-  .uploadImg {
-    margin-top: 60px;
+  .head-icon {
+    width: 50px;
+    height: 50px;
+  }
 
-    .upload-wrap {
-      width: 356px;
-      height: 288px;
-      display: flex;
-      justify-content: center;
-      align-items: center;
+  .loan-body {
+    padding: 24px 32px 0;
+  }
 
-      ::v-deep .van-uploader__upload {
-        width: 356px !important;
-        height: 288px !important;
-      }
+  .hero-card {
+    padding: 40px 36px;
+    border-radius: 24px;
+    background: linear-gradient(135deg, #1a6dff 0%, #004aee 55%, #0035b8 100%);
+    color: #fff;
+    box-shadow: 0 16px 40px rgba(0, 74, 238, 0.28);
+    margin-bottom: 28px;
+  }
+
+  .hero-badge {
+    display: inline-block;
+    padding: 8px 20px;
+    border-radius: 999px;
+    background: rgba(255, 255, 255, 0.18);
+    font-size: 24px;
+    margin-bottom: 24px;
+  }
+
+  .hero-amount {
+    display: flex;
+    align-items: baseline;
+    gap: 12px;
+    margin-bottom: 16px;
+  }
+
+  .amount-num {
+    font-size: 72px;
+    font-weight: 700;
+    line-height: 1;
+  }
+
+  .amount-unit {
+    font-size: 32px;
+    font-weight: 600;
+    opacity: 0.9;
+  }
+
+  .hero-tip {
+    margin: 0;
+    font-size: 26px;
+    line-height: 1.5;
+    opacity: 0.88;
+  }
+
+  .section-card {
+    padding: 32px 28px;
+    border-radius: 20px;
+    margin-bottom: 24px;
+    @include themify() {
+      background: themed("cont_background");
+    }
+    box-shadow: 0 4px 24px rgba(0, 0, 0, 0.04);
+  }
+
+  .section-title {
+    font-size: 32px;
+    font-weight: 600;
+    margin-bottom: 28px;
+    @include themify() {
+      color: themed("text_color");
     }
   }
 
-  .selectDay {
-    position: absolute;
-    left: -70px;
-    background: #f5f5f5;
-    color: #333;
-    box-sizing: border-box;
+  .term-list {
+    display: flex;
+    flex-wrap: wrap;
+    gap: 20px;
+  }
 
-    div {
-      padding: 20px 70px;
+  .term-item {
+    min-width: 120px;
+    padding: 20px 28px;
+    border-radius: 16px;
+    text-align: center;
+    border: 2px solid transparent;
+    transition: all 0.2s;
+    @include themify() {
+      background: themed("tab_background");
+      color: themed("text_color2");
     }
 
-    div:last-child {
+    &.active {
+      border-color: #004aee;
+      background: rgba(0, 74, 238, 0.08);
+      color: #004aee;
+    }
+  }
+
+  .term-days {
+    font-size: 40px;
+    font-weight: 700;
+    margin-right: 4px;
+  }
+
+  .term-unit {
+    font-size: 24px;
+  }
+
+  .info-grid {
+    display: flex;
+    flex-direction: column;
+    gap: 0;
+  }
+
+  .info-row {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 24px 0;
+    border-bottom: 1px solid rgba(134, 142, 155, 0.15);
+
+    &:last-child {
       border-bottom: none;
-      margin-bottom: 0;
+      padding-bottom: 0;
+    }
+
+    &:first-child {
+      padding-top: 0;
     }
   }
 
-  .confirmBtn {
-    border-radius: 8px;
+  .info-label {
+    font-size: 28px;
+    color: #868e9b;
   }
 
-  .grayText {
-    color: #868E9B;
+  .info-value {
+    font-size: 28px;
+    font-weight: 600;
+    text-align: right;
+    max-width: 55%;
+    @include themify() {
+      color: themed("text_color");
+    }
+
+    &.highlight {
+      color: #004aee;
+      font-size: 30px;
+    }
+
+    &.accent {
+      color: #e35461;
+    }
+  }
+
+  .upload-section {
+    margin-bottom: 0;
+  }
+
+  .upload-tip {
+    margin: -12px 0 28px;
+    font-size: 26px;
+    color: #868e9b;
+    line-height: 1.5;
+  }
+
+  .upload-grid {
+    display: grid;
+    grid-template-columns: 1fr 1fr;
+    gap: 24px;
+  }
+
+  .upload-item {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+  }
+
+  .upload-wrap {
+    width: 100%;
+    height: 220px;
+    border-radius: 16px;
+    overflow: hidden;
+    border: 2px dashed rgba(0, 74, 238, 0.25);
+    background: rgba(0, 74, 238, 0.03);
+    display: flex;
+    align-items: center;
+    justify-content: center;
+
+    ::v-deep .van-uploader,
+    ::v-deep .van-uploader__wrapper,
+    ::v-deep .van-uploader__upload,
+    ::v-deep .van-uploader__preview,
+    ::v-deep .van-uploader__preview-image {
+      width: 100% !important;
+      height: 220px !important;
+      margin: 0 !important;
+    }
+
+    ::v-deep .van-uploader__upload-icon {
+      font-size: 48px;
+      color: #004aee;
+    }
+  }
+
+  .upload-label {
+    margin-top: 16px;
+    font-size: 26px;
+    color: #868d9a;
+  }
+
+  .submit-bar {
+    position: fixed;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    padding: 24px 32px calc(24px + env(safe-area-inset-bottom));
+    @include themify() {
+      background: themed("footer_background");
+    }
+    box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.06);
+    z-index: 20;
+  }
+
+  .submit-btn {
+    width: 100%;
+    height: 96px;
+    border: none;
+    border-radius: 16px;
+    background: linear-gradient(90deg, #1a6dff, #004aee);
+    color: #fff;
+    font-size: 32px;
+    font-weight: 600;
+
+    &:disabled {
+      opacity: 0.6;
+    }
   }
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/cryptos/loan/loanHistory.vue b/src/views/cryptos/loan/loanHistory.vue
index 847c174..5dd4aa3 100644
--- a/src/views/cryptos/loan/loanHistory.vue
+++ b/src/views/cryptos/loan/loanHistory.vue
@@ -18,22 +18,25 @@
           <div class="historyData flex justify-between py-40 border-b-grey textColor" v-for="item in loanOrderList"
             :key="item.id">
             <div class="left">
-              <!--            <div class="mb-30">{{ $t('借贷人') }}: 张三</div>-->
-              <div class="mb-30">
+              <div class="mb-30 row-line">
                 <span>{{ $t('借款金额') }}: </span>
-                <span :class="item.status === 5 ? 'text-red' : 'text-green'">{{ item.status === 5 ? '-' : '+' + item.quota
-                }} {{
-  item.symbol }}</span>
+                <span :class="orderState(item) === 5 ? 'text-red' : 'text-green'">
+                  {{ orderState(item) === 5 ? '-' : '+' + item.quota }} {{ item.symbol }}
+                </span>
               </div>
-              <div class="mb-30">{{ $t('备注') }}: {{ item.reason }}</div>
-              <div v-if="item.state === 2">{{ $t('剩余天数') }}: {{ item.remainQuota }}</div>
+              <div class="mb-30 row-line" v-if="item.reason">{{ $t('备注') }}: {{ item.reason }}</div>
+              <div class="row-line" v-if="orderState(item) === 2">{{ $t('剩余天数') }}: {{ item.remainQuota }}</div>
             </div>
             <div class="right text-center text-white">
-              <div class="loanBtn mb-20" @click="$router.push('customerService')" v-if="item.state === 2">{{ $t('申请还款') }}
+              <div class="loanBtn loanBtn--status mb-20" :style="{ background: loanBgText(orderState(item)) }">
+                {{ loanText(orderState(item)) }}
               </div>
-              <div class="loanBtn mb-20" :style="{ background: loanBgText(item.state) }" v-else>{{ loanText(item.state) }}
-              </div>
-              <div class="loanBtn" style="background: #00a7ee;" @click="getLoanDetail(item.id)">{{ $t('详情') }}</div>
+              <div
+                class="loanBtn mb-20"
+                v-if="orderState(item) === 2"
+                @click="goRepay"
+              >{{ $t('还款') }}</div>
+              <div class="loanBtn loanBtn--detail" @click="getLoanDetail(item)">{{ $t('详情') }}</div>
             </div>
           </div>
         </div>
@@ -46,88 +49,47 @@
         </div>
       </div>
 
-      <van-popup v-model:show="isDetail" class="w-full rounded-2xl" style="width: 94%">
-        <div class="px-32 bg-white py-40">
-          <div class="text-center font-36 font-700 py-20">
-            {{ $t('订单详情') }}
-          </div>
-          <div class="loanList">
-            <div class="flex justify-between py-30 border-b-grey">
-              <div>
-                <span class="grayText">{{ $t('期望借款金额') }}</span>
-              </div>
-              <div class="flex align-center">
-                <!--            <input class="font-600 textColor border-none text-right mr-14 mainBackground" v-model="loanAmount"  disabled="disabled" @input="inputAmunt" />-->
-                <span class="mr-14 font-600 ">{{ loanData.quota || 0 }}</span>
-                <span class="font-600 ">USDT</span>
-              </div>
+      <van-popup v-model:show="isDetail" class="loan-detail-popup" round>
+        <div class="loan-detail-body">
+          <div class="loan-detail-title">{{ $t('订单详情') }}</div>
+          <div class="loan-detail-list">
+            <div class="loan-detail-row">
+              <span class="loan-detail-label">{{ $t('期望借款金额') }}</span>
+              <span class="loan-detail-value">{{ loanData.quota || 0 }} USDT</span>
             </div>
-            <div class="flex justify-between py-30 border-b-grey">
-              <div>
-                <span class="grayText">{{ $t('还款周期') }}</span>
-              </div>
-              <div class="flex align-center text-right">
-                <div class="font-600 ">
-                  <span>{{ loanData.term }} {{ $t('Day') }}</span>
-                </div>
-              </div>
+            <div class="loan-detail-row">
+              <span class="loan-detail-label">{{ $t('还款周期') }}</span>
+              <span class="loan-detail-value">{{ loanData.term }} {{ $t('Day') }}</span>
             </div>
-            <div class="flex justify-between py-30 border-b-grey">
-              <div>
-                <span class="grayText">{{ $t('日利率') }}</span>
-              </div>
-              <div class="flex align-center">
-                <span class="font-600">{{ loanData.dailyRate * 1 * 100 || 0 }}%</span>
-              </div>
+            <div class="loan-detail-row">
+              <span class="loan-detail-label">{{ $t('日利率') }}</span>
+              <span class="loan-detail-value">{{ loanData.dailyRate * 1 * 100 || 0 }}%</span>
             </div>
-            <div class="flex justify-between py-30 border-b-grey">
-              <div>
-                <span class="grayText">{{ $t('还款方式') }}</span>
-              </div>
-              <div class="flex align-center">
-                <span class="font-600 text-right">{{ $t('到期一次还款') }}</span>
-              </div>
+            <div class="loan-detail-row">
+              <span class="loan-detail-label">{{ $t('还款方式') }}</span>
+              <span class="loan-detail-value">{{ $t('到期一次还款') }}</span>
             </div>
-            <div class="flex justify-between py-30 border-b-grey">
-              <div>
-                <span class="grayText">{{ $t('利息') }}</span>
-              </div>
-              <div class="flex align-center">
-                <span class="font-600">{{ loanData.totalInterest || 0 }} USDT</span>
-              </div>
+            <div class="loan-detail-row">
+              <span class="loan-detail-label">{{ $t('利息') }}</span>
+              <span class="loan-detail-value">{{ loanData.totalInterest || 0 }} USDT</span>
             </div>
-            <div class="flex justify-between py-30 border-b-grey">
-              <div>
-                <span class="grayText">{{ $t('放款机构') }}</span>
-              </div>
-              <div class="flex align-center">
-                <span class="font-600">{{ loanData.lendingName }}</span>
-              </div>
+            <div class="loan-detail-row">
+              <span class="loan-detail-label">{{ $t('放款机构') }}</span>
+              <span class="loan-detail-value">{{ loanData.lendingName }}</span>
             </div>
-            <div class="flex justify-between py-30 border-b-grey">
-              <div>
-                <span class="grayText">{{ $t('状态') }}</span>
-              </div>
-              <div class="flex align-center">
-                <span class="font-600" :style="{ color: loanBgText(loanData.state) }">{{ loanText(loanData.state)
-                }}</span>
-              </div>
+            <div class="loan-detail-row">
+              <span class="loan-detail-label">{{ $t('状态') }}</span>
+              <span class="loan-detail-value" :style="{ color: loanBgText(Number(loanData.state)) }">
+                {{ loanText(Number(loanData.state)) }}
+              </span>
             </div>
-            <div class="flex justify-between py-30 border-b-grey" v-if="loanData.state === 2">
-              <div>
-                <span class="grayText">{{ $t('剩余天数') }}</span>
-              </div>
-              <div class="flex align-center">
-                <span class="font-600">{{ loanData.remainQuota }}</span>
-              </div>
+            <div class="loan-detail-row" v-if="Number(loanData.state) === 2">
+              <span class="loan-detail-label">{{ $t('剩余天数') }}</span>
+              <span class="loan-detail-value">{{ loanData.remainQuota }}</span>
             </div>
-            <div class="flex justify-between py-30">
-              <div>
-                <span class="grayText">{{ $t('订单时间') }}</span>
-              </div>
-              <div class="flex align-center">
-                <span class="font-600">{{ dataTimeEx(loanData.createTime) }}</span>
-              </div>
+            <div class="loan-detail-row loan-detail-row--last">
+              <span class="loan-detail-label">{{ $t('订单时间') }}</span>
+              <span class="loan-detail-value">{{ formatOrderTime(loanData.createTime) }}</span>
             </div>
           </div>
         </div>
@@ -137,19 +99,42 @@
 </template>
 
 <script>
-import AssetsHead from "@/components/Transform/assets-head/index.vue";;
+import AssetsHead from "@/components/Transform/assets-head/index.vue";
 import { _loanOrderList, _loanOrderDetail } from "@/service/fund.api"
 import { Popup } from "vant";
-import { dataTimeEx } from '@/utils/utis'
+import { dataTime } from '@/utils/utis'
+import { customerServiceUrl } from '@/config'
 export default {
   name: "loanHistory",
   mounted() {
     this.getLoanOrderList()
   },
   methods: {
-    //订单详情
-    getLoanDetail(orderNo) {
-      _loanOrderDetail(orderNo).then(res => {
+    orderState(item) {
+      return Number(item.state ?? item.status)
+    },
+    formatOrderTime(ts) {
+      if (ts == null || ts === '') return '--'
+      if (typeof ts === 'string' && /\d{4}-\d{2}-\d{2}/.test(ts)) {
+        return ts.length > 16 ? ts : ts.trim()
+      }
+      const n = Number(ts)
+      if (!Number.isFinite(n) || n <= 0) return '--'
+      return dataTime(n, true)
+    },
+    goRepay() {
+      if (customerServiceUrl()) {
+        window.location.href = customerServiceUrl()
+      } else {
+        this.$router.push('/customerService')
+      }
+    },
+    //订单详情(按 orderNo 或 uuid 查询)
+    getLoanDetail(item) {
+      _loanOrderDetail({
+        orderNo: item.orderNo,
+        id: item.uuid || item.id,
+      }).then(res => {
         this.loanData = res
         this.isDetail = true
       })
@@ -174,7 +159,7 @@
       if (item.id === 0) {
         this.loanOrderList = this.loanAllOrderList
       } else {
-        this.loanOrderList = this.loanAllOrderList.filter(data => data.state === item.id)
+        this.loanOrderList = this.loanAllOrderList.filter(data => this.orderState(data) === item.id)
       }
     }
   },
@@ -197,7 +182,6 @@
       loanAllOrderList: [],
       isDetail: false, //详情弹窗
       loanData: {},
-      dataTimeEx,//时间戳格式化
     }
   },
   components: {
@@ -249,6 +233,7 @@
         -webkit-backface-visibility: hidden;
         backface-visibility: hidden;
         border: 1px solid transparent;
+        font-size: 28px;
 
         &.ani {
           transform: translate3d(0, 0, 0);
@@ -276,10 +261,95 @@
     }
   }
 
+  .historyData {
+    font-size: 28px;
+    align-items: flex-start;
+
+    .row-line {
+      font-size: 28px;
+      line-height: 1.4;
+    }
+  }
+
+  .right {
+    flex-shrink: 0;
+    min-width: 220px;
+  }
+
   .loanBtn {
-    padding: 14px 30px;
+    padding: 16px 32px;
     background: #004aee;
     border-radius: 10px;
+    font-size: 28px;
+    font-weight: 600;
+    line-height: 1.35;
+    white-space: nowrap;
   }
+
+  .loanBtn--status {
+    min-width: 180px;
+    font-size: 30px;
+    font-weight: 700;
+    padding: 18px 32px;
+  }
+
+  .loanBtn--detail {
+    background: #00a7ee;
+  }
+}
+
+/* 弹窗挂到 body,需独立字号(不依赖 #cryptos 工具类) */
+:deep(.loan-detail-popup) {
+  width: 94%;
+  max-width: 680px;
+}
+
+.loan-detail-body {
+  padding: 40px 32px 48px;
+  background: #fff;
+  border-radius: 24px;
+  color: #1a1a1a;
+}
+
+.loan-detail-title {
+  text-align: center;
+  font-size: 36px;
+  font-weight: 700;
+  line-height: 1.3;
+  margin-bottom: 32px;
+}
+
+.loan-detail-list {
+  display: flex;
+  flex-direction: column;
+}
+
+.loan-detail-row {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  gap: 24px;
+  padding: 28px 0;
+  border-bottom: 1px solid rgba(134, 142, 155, 0.2);
+  font-size: 28px;
+  line-height: 1.4;
+}
+
+.loan-detail-row--last {
+  border-bottom: none;
+  padding-bottom: 0;
+}
+
+.loan-detail-label {
+  flex-shrink: 0;
+  color: #868e9b;
+  font-size: 28px;
+}
+
+.loan-detail-value {
+  text-align: right;
+  font-size: 28px;
+  font-weight: 600;
+  word-break: break-all;
 }
 </style>
\ No newline at end of file
diff --git a/src/views/cryptos/order/MiningMachineOrder/index.vue b/src/views/cryptos/order/MiningMachineOrder/index.vue
index 88baf8a..5056f05 100644
--- a/src/views/cryptos/order/MiningMachineOrder/index.vue
+++ b/src/views/cryptos/order/MiningMachineOrder/index.vue
@@ -1,82 +1,111 @@
 <template>
-  <div id="financialOrder" class="financialOrder">
+  <div id="financialOrder" class="miner-order-detail">
     <assets-head :title="title" :back-func="backFunc"></assets-head>
-    <div class="box-border  ">
-      <div class="flex flex-col justify-center items-center px-33">
-        <div class="font-32 font-400 my-34 textColor">{{ $t('锁仓金额') }}(USDT)</div>
-        <div class="font-66 mb-65 textColor">{{ dataObj.amount }}</div>
-      </div>
 
-      <div class=" px-33 boderT12">
-        <div class="flex justify-between flex-row items-center h-98">
-          <div class="font-31 font-400 text-grey">{{ $t('锁仓时间') }}</div>
-          <div class="font-31 font-400 textColor">{{ dataObj.cycle == 0 ? $t('无限期') : dataObj.cycle + $t('天') }}</div>
-        </div>
-        <div class="flex justify-between items-center h-98">
-          <div class="font-31 font-400 text-grey">{{ $t('当日收益') }}</div>
-          <div class="font-31 font-400 textColor">{{ dataObj.profit_may / 30 }}&nbsp;{{ dataObj.outputCurrency ?
-            dataObj.outputCurrency.toUpperCase() : 'USDT' }}</div>
-        </div>
-        <div class="flex justify-between items-center h-98">
-          <div class="font-31 font-400 text-grey">{{ $t('已获收益') }}</div>
-          <div class="font-31 font-400 textColor">{{ dataObj.profit }}</div>
-        </div>
-        <div class="flex justify-between items-center h-98">
-          <div class="font-31 font-400 text-grey">{{ $t('剩余天数') }}</div>
-          <div class="font-31 font-400 textColor">{{ dataObj.days + $t('天') }}</div>
-        </div>
-      </div>
-      <div class="px-33 boderT12">
-        <div class="flex justify-between items-center h-98">
-          <div class="font-31 font-400 text-grey">30{{ $t('天') }}{{ $t('预期收益') }}</div>
-          <div class="font-31 font-400 textColor">{{ dataObj.profit_may }}&nbsp;{{ dataObj.outputCurrency ?
-            dataObj.outputCurrency.toUpperCase() : 'USDT' }}</div>
-        </div>
-        <div class="flex justify-between items-center h-98">
-          <div class="font-31 font-400 text-grey">{{ $t('日收益率') }}</div>
-          <div class="font-31 font-400 textColor">{{ dataObj.daily_rate }}%</div>
+    <div class="detail-body pb-160">
+      <div class="amount-hero">
+        <div class="amount-label">{{ $t('锁仓金额') }}(USDT)</div>
+        <div class="amount-value">{{ dataObj.amount }}</div>
+        <div class="amount-sub">
+          <span>{{ $t('已获收益') }}</span>
+          <span class="profit-value" :class="Number(dataObj.profit) >= 0 ? 'text-green' : 'text-red'">
+            {{ dataObj.profit || '0' }}
+          </span>
         </div>
       </div>
 
-      <div class="px-33 boderT12">
-        <div class="flex justify-between items-center h-98">
-          <div class="font-31 font-400 text-grey">{{ $t('起息时间') }}</div>
-          <div class="font-31 font-400 textColor">{{ dataObj.earn_timeStr }}</div>
+      <div class="info-card">
+        <div class="card-title">{{ $t('订单信息') }}</div>
+        <div class="info-row">
+          <span class="info-label">{{ isTestMiner ? $t('锁仓时间') : $t('可解锁周期') }}</span>
+          <span class="info-value">{{ cycleText }}</span>
         </div>
-        <div class="flex justify-between items-center h-98">
-          <div class="font-31 font-400 text-grey">{{ $t('到期时间') }}</div>
-          <div class="font-31 font-400 textColor">{{ dataObj.stop_timeStr ? dataObj.stop_timeStr : '--' }}</div>
+        <div class="info-row">
+          <span class="info-label">{{ isTestMiner ? $t('剩余天数') : $t('剩余分钟') }}</span>
+          <span class="info-value">{{ remainText }}</span>
+        </div>
+        <div class="info-row">
+          <span class="info-label">{{ $t('日收益率') }}</span>
+          <span class="info-value">{{ dataObj.daily_rate }}%</span>
+        </div>
+        <div class="info-row">
+          <span class="info-label">{{ $t('当日收益') }}</span>
+          <span class="info-value">{{ dailyProfitText }}</span>
+        </div>
+        <div class="info-row">
+          <span class="info-label">30{{ $t('天') }}{{ $t('预期收益') }}</span>
+          <span class="info-value">{{ profitMayText }}</span>
         </div>
       </div>
 
-      <div class="px-33 boderT12">
-        <div class="flex justify-between items-center h-98">
-          <div class="font-31 font-400 text-grey">{{ $t('订单编号') }}</div>
-          <div class="font-31 font-400 textColor">{{ dataObj.order_no }}</div>
+      <div class="info-card">
+        <div class="card-title">{{ $t('时间信息') }}</div>
+        <div class="info-row">
+          <span class="info-label">{{ $t('起息时间') }}</span>
+          <span class="info-value">{{ dataObj.earn_timeStr || '--' }}</span>
         </div>
-        <div class="flex justify-between items-center h-98">
-          <div class="font-31 font-400 text-grey">{{ $t('订单时间') }}</div>
-          <div class="font-31 font-400 textColor">{{ dataObj.create_timeStr }}</div>
+        <div class="info-row">
+          <span class="info-label">{{ $t('到期时间') }}</span>
+          <span class="info-value">{{ dataObj.stop_timeStr || '--' }}</span>
         </div>
+        <div class="info-row">
+          <span class="info-label">{{ $t('订单时间') }}</span>
+          <span class="info-value">{{ dataObj.create_timeStr || '--' }}</span>
+        </div>
+      </div>
+
+      <div class="info-card">
+        <div class="card-title">{{ $t('订单编号') }}</div>
+        <div class="order-no">{{ dataObj.order_no || '--' }}</div>
       </div>
     </div>
-    <button v-if="this.showBtn" @click="ransom"
-      class="text-white btnMain h-97 lh-97 w-762 rounded-lg text-center fixed wz border-none"
-      :disabled="!dataObj.can_close" :class="!dataObj.can_close ? 'greyBg textColor1' : ''">{{ $t('我要赎回') }}
-    </button>
 
+    <button
+      v-if="showBtn"
+      class="redeem-btn"
+      :disabled="!dataObj.can_close"
+      :class="{ disabled: !dataObj.can_close }"
+      @click="ransom"
+    >
+      {{ $t('我要赎回') }}
+    </button>
   </div>
 </template>
 
 <script>
-import assetsHead from '@/components/Transform/assets-head/index.vue';
-import { ransomMachineProduct, getMinerorder } from "@/service/financialManagement.api.js";
-import { showToast } from 'vant';
-import dayjs from "dayjs";
+import assetsHead from '@/components/Transform/assets-head/index.vue'
+import { ransomMachineProduct, getMinerorder } from '@/service/financialManagement.api.js'
+import { showToast } from 'vant'
+import { isMinerTest } from '@/utils/index.js'
+
 export default {
-  name: "index",
+  name: 'MiningMachineOrder',
   components: {
     assetsHead
+  },
+  computed: {
+    isTestMiner() {
+      return isMinerTest(this.dataObj.test)
+    },
+    cycleText() {
+      if (this.dataObj.cycle == 0) return this.$t('无限期')
+      const unit = this.isTestMiner ? this.$t('天') : this.$t('分钟')
+      return `${this.dataObj.cycle}${unit}`
+    },
+    remainText() {
+      const unit = this.isTestMiner ? this.$t('天') : this.$t('分钟')
+      return `${this.dataObj.days ?? '--'}${unit}`
+    },
+    outputCurrency() {
+      return this.dataObj.outputCurrency ? this.dataObj.outputCurrency.toUpperCase() : 'USDT'
+    },
+    dailyProfitText() {
+      const val = this.dataObj.profit_may ? (this.dataObj.profit_may / 30) : '--'
+      return `${val} ${this.outputCurrency}`
+    },
+    profitMayText() {
+      return `${this.dataObj.profit_may ?? '--'} ${this.outputCurrency}`
+    }
   },
   data() {
     return {
@@ -87,14 +116,16 @@
       dataObj: {
         amount: 0,
         cycle: '',
-        daily_profit: '',
         profit: '',
         days: '',
         daily_rate: '',
-        earn_time: '',
-        stop_time: '',
+        profit_may: '',
+        earn_timeStr: '',
+        stop_timeStr: '',
         order_no: '',
-        create_time: ''
+        create_timeStr: '',
+        can_close: false,
+        test: false
       }
     }
   },
@@ -108,29 +139,20 @@
     backFunc() {
       this.$router.push({
         path: '/cryptos/funds',
-        query: {
-          tab: 3,
-          index: 1 // 0: 查看理财订单 1: 矿机
-        }
+        query: { tab: 3, index: 1 }
       })
     },
-    ransom() { // 赎回
-      ransomMachineProduct({
-        order_no: this.order_no
-      }).then(res => {
+    ransom() {
+      ransomMachineProduct({ order_no: this.order_no }).then(() => {
         showToast(this.$t('赎回成功'))
-        setTimeout(() => {
-          this.backFunc()
-        }, 1000)
+        setTimeout(() => this.backFunc(), 1000)
       })
     },
     getOrderDetail() {
-      getMinerorder({
-        order_no: this.order_no
-      }).then(res => {
+      getMinerorder({ order_no: this.order_no }).then(res => {
         this.dataObj = res
-        let title = this.$i18n.locale === 'en' ? res.miner_name_en : res.miner_name_cn
-        this.title = title + ' ' + this.$t('详情')
+        const name = this.$i18n.locale === 'en' ? res.miner_name_en : (res.miner_name_cn || res.miner_name)
+        this.title = `${name} ${this.$t('详情')}`
       })
     }
   }
@@ -138,20 +160,138 @@
 </script>
 
 <style lang="scss" scoped>
-.financialOrder {
-  width: 100%;
+@import '@/assets/init.scss';
+
+.miner-order-detail {
+  min-height: 100vh;
   box-sizing: border-box;
 }
 
-.wz {
-  bottom: 44px;
-  left: 32px;
-  right: 32px;
+.detail-body {
+  padding: 24px 32px 0;
 }
 
-.boderT12 {
-  // @include themify() {
-  //   border-top: 1px solid themed("cont_background");
-  // }
+.amount-hero {
+  padding: 40px 36px;
+  border-radius: 24px;
+  margin-bottom: 28px;
+  text-align: center;
+  background: linear-gradient(135deg, #1a6dff 0%, #004aee 55%, #0035b8 100%);
+  color: #fff;
+  box-shadow: 0 16px 40px rgba(0, 74, 238, 0.28);
+}
+
+.amount-label {
+  font-size: 32px;
+  opacity: 0.9;
+}
+
+.amount-value {
+  margin-top: 20px;
+  font-size: 72px;
+  font-weight: 700;
+  line-height: 1.1;
+}
+
+.amount-sub {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  gap: 16px;
+  margin-top: 28px;
+  padding-top: 24px;
+  border-top: 1px solid rgba(255, 255, 255, 0.22);
+  font-size: 30px;
+  opacity: 0.92;
+}
+
+.profit-value {
+  font-size: 36px;
+  font-weight: 600;
+}
+
+.info-card {
+  margin-bottom: 24px;
+  padding: 32px 28px;
+  border-radius: 20px;
+  @include themify() {
+    background: themed('cont_background');
+  }
+}
+
+.card-title {
+  margin-bottom: 20px;
+  font-size: 34px;
+  font-weight: 600;
+  @include themify() {
+    color: themed('text_color');
+  }
+}
+
+.info-row {
+  display: flex;
+  justify-content: space-between;
+  align-items: flex-start;
+  gap: 24px;
+  padding: 22px 0;
+  font-size: 32px;
+  line-height: 1.45;
+
+  & + & {
+    @include themify() {
+      border-top: 1px solid themed('line_color');
+    }
+  }
+}
+
+.info-label {
+  flex-shrink: 0;
+  max-width: 45%;
+  @include themify() {
+    color: themed('text_color1');
+  }
+}
+
+.info-value {
+  text-align: right;
+  word-break: break-all;
+  font-weight: 500;
+  @include themify() {
+    color: themed('text_color');
+  }
+}
+
+.order-no {
+  font-size: 30px;
+  line-height: 1.5;
+  word-break: break-all;
+  @include themify() {
+    color: themed('text_color');
+  }
+}
+
+.redeem-btn {
+  position: fixed;
+  left: 32px;
+  right: 32px;
+  bottom: 44px;
+  height: 96px;
+  border: none;
+  border-radius: 16px;
+  font-size: 34px;
+  font-weight: 600;
+  color: #fff;
+  background: linear-gradient(135deg, #1a6dff 0%, #004aee 100%);
+
+  &.disabled {
+    @include themify() {
+      color: themed('text_color1');
+      background: themed('cont_background');
+    }
+  }
+}
+
+.pb-160 {
+  padding-bottom: 160px;
 }
 </style>
diff --git a/src/views/homePage/index.vue b/src/views/homePage/index.vue
index 9537265..e9ec592 100644
--- a/src/views/homePage/index.vue
+++ b/src/views/homePage/index.vue
@@ -10,7 +10,12 @@
             <van-swipe-item><img src="@/assets/imgs/home/Slider-4.jpg" alt=""></van-swipe-item>
         </van-swipe> -->
 
-        <video autoplay loop muted playsinline class="home_logo">
+        <van-swipe v-if="bannerList.length" class="home_logo" :autoplay="3000" indicator-color="white">
+            <van-swipe-item v-for="(item, index) in bannerList" :key="index">
+                <img :src="item.image" alt="" @click="onBannerClick(item.url)" class="banner-img" />
+            </van-swipe-item>
+        </van-swipe>
+        <video v-else autoplay loop muted playsinline class="home_logo">
             <source src="@/assets/video/home_1.mp4" type="video/mp4">
         </video>
 
@@ -79,7 +84,7 @@
 </div> -->
 
         <div id="cryptos" class="pt-10">
-            <list-quatation :listData="qList" :tabShow="false" :tabActive="2" />
+            <list-quatation :listData="qList" :tabShow="false" :tabActive="0" />
         </div>
 
         <van-popup v-model:show="item.showPopUp" style="border-radius:10px;" :close-on-click-overlay="false"
@@ -104,7 +109,7 @@
 import { useRouter } from 'vue-router';
 import ListQuatation from "@/components/Transform/list-quotation/index.vue";
 import { _getHomeList } from '@/service/cryptos.api'
-import { _getNewsList1, _getPopupNews } from '@/service/user.api'
+import { _getNewsList1, _getPopupNews, _getBanner } from '@/service/user.api'
 import { useStore } from "vuex";
 import { TIME_OUT, customerServiceUrl } from "@/config";
 import { useUserStore } from '@/store/user';
@@ -114,7 +119,7 @@
     setStorage('symbol', 'btcusdt');
 }
 const userStore = useUserStore()
-const { t } = useI18n()
+const { t, locale } = useI18n()
 const router = useRouter()
 const store = useStore();
 
@@ -122,15 +127,15 @@
     // { key: 1, name: t('跟单'), icon: new URL('@/assets/imgs/home/home_1.png', import.meta.url) },
     // { key: 3, name: `C2C ${t('交易')}`, icon: new URL('@/assets/imgs/home/home_3.png', import.meta.url) },
     // { key: 4, name: t('邀请好友'), icon: new URL('@/assets/imgs/home/home_4.png', import.meta.url) },
-    { key: 5, name: t('合约'), icon: new URL('@/assets/imgs/home/home_5.png', import.meta.url), path: '/trade/index' },
+    { key: 5, name: t('AI Quant'), icon: new URL('@/assets/imgs/home/home_5.png', import.meta.url), path: '/trade/index?selectIndex=2' },
     { key: 6, name: t('现货'), icon: new URL('@/assets/imgs/home/home_7.png', import.meta.url), path: '/cryptos/trade/btcusdt' },
     { key: 2, name: t('recharge'), icon: new URL('@/assets/imgs/home/home_2.png', import.meta.url), path: '/cryptos/recharge/rechargeList?isForeign=true' },
     // { key: 7, name: t('提现'), icon: new URL('@/assets/imgs/home/home_6.png', import.meta.url), path: '/exchange/withdraw-usdt' }
     { key: 7, name: t('提现'), icon: new URL('@/assets/imgs/home/home_6.png', import.meta.url), path: '/cryptos/Withdraw/withdrawPage' },
     // { key: 8, name: t('卡券中心'), icon: new URL('@/assets/imgs/home/home_7.png', import.meta.url) },
     { key: 9, name: t('闪兑'), icon: new URL('@/assets/imgs/home/home_8.png', import.meta.url), path: '/cryptos/exchangePage' },
-    { key: 16, name: t('理财'), icon: new URL('@/assets/imgs/home/home_1.png', import.meta.url), path: '/cryptos/fund' },
-    // { key: 9, name: t('划转'), icon: new URL('@/assets/imgs/home/home_8.png', import.meta.url), path: '/my/transfer' },
+    // { key: 16, name: t('理财'), icon: new URL('@/assets/imgs/home/home_1.png', import.meta.url), path: '/cryptos/fm-home' },
+    { key: 18, name: t('助力贷'), icon: new URL('@/assets/imgs/home/home_1.png', import.meta.url), path: '/cryptos/loan' },
     // { key: 10, name: t('更多'), icon: new URL('@/assets/imgs/home/home_9.png', import.meta.url) },
 
     // { key: 11, name: "STO", icon: new URL('@/assets/imgs/home/home_1.png', import.meta.url), path: '/ICO/ico' },
@@ -140,7 +145,31 @@
     { key: 15, name: t('矿机'), icon: new URL('@/assets/imgs/home/home_1.png', import.meta.url), path: '/cryptos/machine' },
 ]
 
-// 获取公告数据
+// 首页轮播(后台横幅管理 model=top 配置)
+const bannerList = ref([])
+const getBannerLanguage = () => {
+    if (locale.value === 'en-US') return 'en'
+    if (locale.value.indexOf('CN') >= 0) return 'CN'
+    return locale.value
+}
+const fetchBannerList = () => {
+    _getBanner({ model: 'top', language: getBannerLanguage() }).then(res => {
+        bannerList.value = Array.isArray(res) ? res : []
+    }).catch(() => {
+        bannerList.value = []
+    })
+}
+fetchBannerList()
+
+const onBannerClick = (url) => {
+    if (!url) return
+    if (url.startsWith('http://') || url.startsWith('https://')) {
+        window.open(url, '_blank')
+    } else {
+        router.push(url)
+    }
+}
+
 const announceList = ref([])
 _getNewsList1({
     language: useI18n().locale.value,
@@ -312,8 +341,9 @@
         margin: 2rem auto 1rem;
         border-radius: 1rem;
 
-        img {
+        img, .banner-img {
             width: 100%;
+            border-radius: 1rem;
         }
     }
 
diff --git a/src/views/login/index.vue b/src/views/login/index.vue
index 222a692..f9da4c4 100644
--- a/src/views/login/index.vue
+++ b/src/views/login/index.vue
@@ -223,7 +223,11 @@
         width: 100%;
 
         img {
-            width: 8.5rem;
+            width: auto;
+            max-width: 280px;
+            height: auto;
+            max-height: 120px;
+            object-fit: contain;
         }
     }
 
diff --git a/src/views/morePage/index.vue b/src/views/morePage/index.vue
index 6d51cf3..2d36792 100644
--- a/src/views/morePage/index.vue
+++ b/src/views/morePage/index.vue
@@ -83,6 +83,7 @@
 import { showToast } from "vant";
 import { useI18n } from "vue-i18n";
 import { useUserStore } from '@/store/user';
+import { getStorage, setStorage } from '@/utils/index.js'
 
 const useStore = useUserStore();
 const { t } = useI18n()
@@ -93,6 +94,7 @@
     recommend: [
         { name: t('公告中心'), url: new URL('@/assets/theme/dark/image/nav/announcement.png', import.meta.url), path: '/cryptos/announce', isLogin: false },
         { name: t('充值'), url: new URL('@/assets/theme/dark/image/nav/recharge.png', import.meta.url), path: '/cryptos/recharge/rechargeList', isLogin: true },
+        { name: t('交割合约'), url: new URL('@/assets/imgs/home/home_8.png', import.meta.url), path: '/trade/index?selectIndex=2', isLogin: false },
         { name: t('提现'), url: new URL('@/assets/theme/dark/image/nav/withdraw.png', import.meta.url), path: '/cryptos/withdraw/withdrawPage', isLogin: true },
         { name: t('账变记录'), url: new URL('@/assets/theme/dark/image/nav/record.png', import.meta.url), path: '/cryptos/accountChange?type=cryptos', isLogin: true },
         // { name: t('质押借币'), url: new URL('@/assets/theme/dark/image/nav/PledgeLoan.png', import.meta.url), path: '/cryptos/pledgeLoan', isLogin: false },
@@ -132,6 +134,11 @@
     }
 }
 const openUrl = (item) => {
+    if (item.path && item.path.includes('/trade/index')) {
+        if (!getStorage('symbol')) {
+            setStorage('symbol', 'btcusdt')
+        }
+    }
     if (item.isLogin) {
         if (!useStore.userInfo.token) {
             router.push('/login')
diff --git a/src/views/my/assets.vue b/src/views/my/assets.vue
index ff70892..a755d01 100644
--- a/src/views/my/assets.vue
+++ b/src/views/my/assets.vue
@@ -2,8 +2,7 @@
     <div class="assets">
         <div class="assets_title">{{ $t('总资产估值') }}</div>
         <div class="assets_money font-bold mt-5 flex justify-start items-end">
-            {{ currency.currency_symbol }}{{ formatWithCommas(forexAssets?.money_contract ?
-                (forexAssets?.money_contract * (currency.rate ?? 0)).toFixed(2) : '0.00') }}
+            {{ currency.currency_symbol }}{{ formatWithCommas(totalAssetsFiat) }}
 
             <div class="pricing_jj ml-5">
                 {{ pricing }}
@@ -34,25 +33,24 @@
 
         <van-collapse v-model="activeNames" class="mt-10">
             <van-collapse-item :title="$t('分布')" name="1">
-                <!-- <div class="divider"></div> -->
-                <div class="percentage flex just-between items-center">
-                    <div :style="`width:${assetObj.capital / (assetObj.capital + assetObj.contract) * 100}%`">
-                    </div>
-                    <div class="flex-1">
-                    </div>
+                <div class="distribution-bar">
+                    <div class="bar-segment bar-capital" :style="{ width: capitalPercent + '%' }"></div>
+                    <div class="bar-segment bar-contract" :style="{ width: contractPercent + '%' }"></div>
                 </div>
-                <div class="assets_item flex justify-start items-center mt-14 font-bold">
+                <div class="assets_item flex justify-start items-center mt-14 font-bold" @click="toPage('/cryptos/funds?tab=1')">
                     <div class="icon" style="background-color: #8A90FE;"></div>
                     <span class="ml-5 flex-1">{{ $t('资金账户') }}</span>
-                    <span class="mr-5">{{ formatWithCommas(assetObj.capital) }}</span>
+                    <span class="distribution-percent">{{ capitalPercentText }}</span>
+                    <span class="mr-5">{{ formatAssetAmount(assetObj.capital) }}</span>
                     <van-icon name="arrow" />
                 </div>
-                <!-- <div class="assets_item flex justify-start items-center mt-14 font-bold">
+                <div class="assets_item flex justify-start items-center mt-14 font-bold" @click="toPage('/cryptos/funds?tab=2')">
                     <div class="icon" style="background-color: #f7b600;"></div>
                     <span class="ml-5 flex-1">{{ $t('交易账户') }}</span>
-                    <span class="mr-5">{{ formatWithCommas(assetObj.contract) }}</span>
+                    <span class="distribution-percent">{{ contractPercentText }}</span>
+                    <span class="mr-5">{{ formatAssetAmount(assetObj.contract) }}</span>
                     <van-icon name="arrow" />
-                </div> -->
+                </div>
             </van-collapse-item>
         </van-collapse>
 
@@ -81,7 +79,7 @@
 </template>
 
 <script setup>
-import { ref } from "vue";
+import { ref, computed } from "vue";
 import { useI18n } from "vue-i18n";
 import { useRouter } from 'vue-router';
 import { _getExchangeRate } from '@/service/cryptos.api'
@@ -105,7 +103,7 @@
 const tabList = [
     { key: 1, name: t('充值'), icon: new URL('@/assets/imgs/assets/chonbi.png', import.meta.url), path: '/cryptos/recharge/rechargeList?isForeign=true' },
     { key: 2, name: t('提现'), icon: new URL('@/assets/imgs/assets/tibi.png', import.meta.url), path: '/cryptos/Withdraw/withdrawPage' },
-    // { key: 3, name: t('划转'), icon: new URL('@/assets/imgs/assets/huazhuan.png', import.meta.url), path: '/my/transfer' },
+    { key: 3, name: t('划转'), icon: new URL('@/assets/imgs/assets/huazhuan.png', import.meta.url), path: '/my/transfer' },
     { key: 5, name: t('闪兑'), icon: new URL('@/assets/imgs/assets/sd.png', import.meta.url), path: '/cryptos/exchangePage' },
     { key: 4, name: t('账单'), icon: new URL('@/assets/imgs/assets/zd.png', import.meta.url), path: '/cryptos/accountChange' },
 ]
@@ -159,10 +157,37 @@
         })
 }
 const assetObj = ref({})
-const getassets = () => { // 获取资产
+const getassets = () => {
     _getassets().then(res => {
-        assetObj.value = res
+        assetObj.value = res || {}
     })
+}
+
+const capitalAmount = computed(() => Number(assetObj.value.capital) || 0)
+const contractAmount = computed(() => Number(assetObj.value.contract) || 0)
+const totalAssetsUsdt = computed(() => capitalAmount.value + contractAmount.value)
+
+const capitalPercent = computed(() => {
+    if (totalAssetsUsdt.value <= 0) return 0
+    return Math.round((capitalAmount.value / totalAssetsUsdt.value) * 1000) / 10
+})
+
+const contractPercent = computed(() => {
+    if (totalAssetsUsdt.value <= 0) return 0
+    return Math.round((contractAmount.value / totalAssetsUsdt.value) * 1000) / 10
+})
+
+const capitalPercentText = computed(() => `${capitalPercent.value.toFixed(1)}%`)
+const contractPercentText = computed(() => `${contractPercent.value.toFixed(1)}%`)
+
+const totalAssetsFiat = computed(() => {
+    const rate = Number(currency.value.rate) || 0
+    return (totalAssetsUsdt.value * rate).toFixed(2)
+})
+
+const formatAssetAmount = (val) => {
+    const num = Number(val) || 0
+    return formatWithCommas(num.toFixed(2))
 }
 
 // 获取资产列表
@@ -295,6 +320,39 @@
     //     background: $bg_yellow;
     // }
 
+    .distribution-bar {
+        display: flex;
+        width: 100%;
+        height: 1rem;
+        border-radius: 0.5rem;
+        overflow: hidden;
+        gap: 0.2rem;
+    }
+
+    .bar-segment {
+        height: 100%;
+        min-width: 0;
+        transition: width 0.25s ease;
+    }
+
+    .bar-capital {
+        background: #8A90FE;
+    }
+
+    .bar-contract {
+        background: $bg_yellow;
+    }
+
+    .distribution-percent {
+        margin-right: 1.2rem;
+        font-size: 1.8rem;
+        font-weight: 400;
+
+        @include themify() {
+            color: themed("text_color1");
+        }
+    }
+
     .percentage {
         div {
             height: 1rem;
diff --git a/src/views/quotes/List.vue b/src/views/quotes/List.vue
index 2e8010a..329459e 100644
--- a/src/views/quotes/List.vue
+++ b/src/views/quotes/List.vue
@@ -2,7 +2,7 @@
   <div class="quotes-list pt-5 pb-60 pl-5 pr-5" id="cryptos">
 
     <Head @search="onSearch"></Head>
-    <list-quatation :listData="qList" :tabActive="2" />
+    <list-quatation :listData="qList" :tabActive="0" />
   </div>
 </template>
 
diff --git a/src/views/trade/index.vue b/src/views/trade/index.vue
index 9201c55..ac1e74a 100644
--- a/src/views/trade/index.vue
+++ b/src/views/trade/index.vue
@@ -21,7 +21,7 @@
         <span class="time">{{ chartData.market.time_str }}</span>&nbsp;
         <span>{{ chartData.market.time_zone && $t(chartData.market.time_zone) }}</span>
       </p>
-      <div :class="{ slide2: animated1 }" v-if="selectIndex === 1">
+      <div :class="{ slide2: animated1 }" v-if="Number(selectIndex) === 1">
         <section class="value-container" v-if="showMore">
           <div class="flex-l">
             <p class="first-line red">{{ formatMoney(chartData?.close) }}</p>
@@ -215,16 +215,13 @@
       showLength = 7
     },
     initFutrue(val) {
-      if (val) {
-        if (this.$route.query.selectIndex == 2) {
-          if (this.isUpdate) {
-            setTimeout(() => {
-              this.onTopTab(2)
-            })
-            this.isUpdate = false
-          }
-        }
+      if (!val || !this.symbol) return
+      if (Number(this.selectIndex) === 2 && this.curTab && typeof this[this.curTab] === 'function') {
+        this.$nextTick(() => {
+          this[this.curTab](this.symbol)
+        })
       }
+      this.isUpdate = false
     }
   },
   data() {
@@ -259,7 +256,7 @@
         deep: null /// 深度
       },
       curTab: '', // 当前委托还是持有仓位
-      selectIndex: 1, // 当前tab
+      selectIndex: 2, // 当前tab(仅AI量化)
       initFutrue: {}, /// 交割合约
       show: false, // popup
       animated1: false,
@@ -373,36 +370,43 @@
     handleClickShowMore() {
       this.showMore = !this.showMore
     },
-    onTopTab(evt) { // 当前tab 永续/交割
-      this.keyIndex += 1
-      this.selectIndex = evt
+    onTopTab(evt) { // 仅AI量化
+      const tab = Number(evt) === 1 ? 2 : Number(evt)
+      this.syncContractTab(tab, true)
+      if (String(this.$route.query.selectIndex) !== String(tab)) {
+        this.$router.replace({
+          path: this.$route.path,
+          query: { ...this.$route.query, selectIndex: String(tab) }
+        }).catch(() => {})
+      }
+    },
+    syncContractTab(evt, bumpKey = true) {
+      const idx = Number(evt)
+      if (bumpKey) {
+        this.keyIndex += 1
+      }
+      this.selectIndex = idx
       this.clearTimer()
-      if (this.selectIndex / 1 === 1) {
-        //this.curTab = 'fetchOrderListCur'
+      if (idx === 1) {
         this.curTab = 'fetchOrderListHold'
-        // this.animated1 = true
-        // this.timer = setTimeout(() => {
-        //     this.animated1 = false
-        //     clearTimeout(this.timer)
-        // }, 200)
         this.animated2 = true
         this.timer = setTimeout(() => {
           this.animated2 = false
           clearTimeout(this.timer)
         }, 200)
       } else {
-        // this.animated2 = true
-        // this.timer = setTimeout(() => {
-        //     this.animated2 = false
-        //     clearTimeout(this.timer)
-        // }, 200)
+        this.curTab = 'fetchFutrueHoldList'
         this.animated1 = true
         this.timer = setTimeout(() => {
           this.animated1 = false
           clearTimeout(this.timer)
         }, 200)
       }
-      this[this.curTab](this.symbol)
+      if (this.symbol && this.curTab && typeof this[this.curTab] === 'function') {
+        this.$nextTick(() => {
+          this[this.curTab](this.symbol)
+        })
+      }
     },
     onOrdered(evt) { // 下单过后的回调
       this.clearTimer()
@@ -679,28 +683,33 @@
     if (!symbol && catchSymbol) {
       symbol = catchSymbol
     } else if (!symbol && !catchSymbol) {
-      return
+      symbol = 'btcusdt'
+      setStorage('symbol', symbol)
     }
-    if (symbol) {
-      next(vm => {
-        if (selectIndex) {
-          // vm.selectIndex = selectIndex
-          if (vm.selectIndex / 1 === 2) {
-            vm.curTab = 'fetchFutrueHoldList'
-          } else {
-            //vm.curTab = 'fetchOrderListCur'
-            vm.curTab = 'fetchOrderListHold'
-          }
-        } else {
-          //vm.curTab = 'fetchOrderListCur'
-          vm.curTab = 'fetchOrderListHold'
-        }
-        vm.symbol = symbol
-        vm.init(symbol)
-      })
-    } else {
-      next()
+    next(vm => {
+      let idx = selectIndex !== undefined && selectIndex !== null && selectIndex !== ''
+        ? Number(selectIndex)
+        : 2
+      if (idx === 1) idx = 2
+      vm.selectIndex = idx
+      vm.curTab = 'fetchFutrueHoldList'
+      vm.symbol = symbol
+      vm.init(symbol)
+      if (idx === 2) {
+        vm.$nextTick(() => vm.syncContractTab(2, false))
+      }
+    })
+  },
+  beforeRouteUpdate(to, from, next) {
+    const selectIndex = to.query.selectIndex
+    if (selectIndex !== undefined && selectIndex !== null && selectIndex !== '') {
+      let idx = Number(selectIndex)
+      if (idx === 1) idx = 2
+      if (Number(this.selectIndex) !== idx) {
+        this.syncContractTab(idx, true)
+      }
     }
+    next()
   },
   deactivated() {
     this.closeSocket()
diff --git a/vite.config.js b/vite.config.js
index 615b577..754bf36 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -38,7 +38,7 @@
     host: '0.0.0.0',
     proxy: {
       "/api": {
-        target: "https://104.233.210.35:8085",
+        target: "https://api.bitget-jp-us.cyou",
         // target: "http://198.13.39.109:8081",
         changeOrigin: true,
         // rewrite: (path) => path.replace(/^\/wap/, ""),
diff --git a/yarn.lock b/yarn.lock
index 9560802..4bb55a5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3,34 +3,34 @@
 
 
 "@ampproject/remapping@^2.2.0":
-  "integrity" "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg=="
-  "resolved" "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz"
-  "version" "2.2.1"
+  version "2.2.1"
+  resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz"
+  integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==
   dependencies:
     "@jridgewell/gen-mapping" "^0.3.0"
     "@jridgewell/trace-mapping" "^0.3.9"
 
 "@antfu/utils@^0.7.2":
-  "integrity" "sha512-vy9fM3pIxZmX07dL+VX1aZe7ynZ+YyB0jY+jE6r3hOK6GNY2t6W8rzpFC4tgpbXUYABkFQwgJq2XYXlxbXAI0g=="
-  "resolved" "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.2.tgz"
-  "version" "0.7.2"
+  version "0.7.2"
+  resolved "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.2.tgz"
+  integrity sha512-vy9fM3pIxZmX07dL+VX1aZe7ynZ+YyB0jY+jE6r3hOK6GNY2t6W8rzpFC4tgpbXUYABkFQwgJq2XYXlxbXAI0g==
 
 "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.21.4":
-  "integrity" "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g=="
-  "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz"
-  "version" "7.21.4"
+  version "7.21.4"
+  resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz"
+  integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==
   dependencies:
     "@babel/highlight" "^7.18.6"
 
 "@babel/compat-data@^7.22.0":
-  "integrity" "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ=="
-  "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz"
-  "version" "7.22.3"
+  version "7.22.3"
+  resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz"
+  integrity sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==
 
-"@babel/core@^7.0.0", "@babel/core@^7.12.10":
-  "integrity" "sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA=="
-  "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.22.1.tgz"
-  "version" "7.22.1"
+"@babel/core@^7.12.10":
+  version "7.22.1"
+  resolved "https://registry.npmjs.org/@babel/core/-/core-7.22.1.tgz"
+  integrity sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==
   dependencies:
     "@ampproject/remapping" "^2.2.0"
     "@babel/code-frame" "^7.21.4"
@@ -42,64 +42,64 @@
     "@babel/template" "^7.21.9"
     "@babel/traverse" "^7.22.1"
     "@babel/types" "^7.22.0"
-    "convert-source-map" "^1.7.0"
-    "debug" "^4.1.0"
-    "gensync" "^1.0.0-beta.2"
-    "json5" "^2.2.2"
-    "semver" "^6.3.0"
+    convert-source-map "^1.7.0"
+    debug "^4.1.0"
+    gensync "^1.0.0-beta.2"
+    json5 "^2.2.2"
+    semver "^6.3.0"
 
 "@babel/generator@^7.12.11", "@babel/generator@^7.22.0":
-  "integrity" "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A=="
-  "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz"
-  "version" "7.22.3"
+  version "7.22.3"
+  resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz"
+  integrity sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==
   dependencies:
     "@babel/types" "^7.22.3"
     "@jridgewell/gen-mapping" "^0.3.2"
     "@jridgewell/trace-mapping" "^0.3.17"
-    "jsesc" "^2.5.1"
+    jsesc "^2.5.1"
 
 "@babel/helper-compilation-targets@^7.22.1":
-  "integrity" "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ=="
-  "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz"
-  "version" "7.22.1"
+  version "7.22.1"
+  resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz"
+  integrity sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==
   dependencies:
     "@babel/compat-data" "^7.22.0"
     "@babel/helper-validator-option" "^7.21.0"
-    "browserslist" "^4.21.3"
-    "lru-cache" "^5.1.1"
-    "semver" "^6.3.0"
+    browserslist "^4.21.3"
+    lru-cache "^5.1.1"
+    semver "^6.3.0"
 
 "@babel/helper-environment-visitor@^7.22.1":
-  "integrity" "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA=="
-  "resolved" "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz"
-  "version" "7.22.1"
+  version "7.22.1"
+  resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz"
+  integrity sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==
 
 "@babel/helper-function-name@^7.21.0":
-  "integrity" "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg=="
-  "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz"
-  "version" "7.21.0"
+  version "7.21.0"
+  resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz"
+  integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==
   dependencies:
     "@babel/template" "^7.20.7"
     "@babel/types" "^7.21.0"
 
 "@babel/helper-hoist-variables@^7.18.6":
-  "integrity" "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q=="
-  "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz"
-  "version" "7.18.6"
+  version "7.18.6"
+  resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz"
+  integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==
   dependencies:
     "@babel/types" "^7.18.6"
 
 "@babel/helper-module-imports@^7.21.4":
-  "integrity" "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg=="
-  "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz"
-  "version" "7.21.4"
+  version "7.21.4"
+  resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz"
+  integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==
   dependencies:
     "@babel/types" "^7.21.4"
 
 "@babel/helper-module-transforms@^7.22.1":
-  "integrity" "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw=="
-  "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz"
-  "version" "7.22.1"
+  version "7.22.1"
+  resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz"
+  integrity sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==
   dependencies:
     "@babel/helper-environment-visitor" "^7.22.1"
     "@babel/helper-module-imports" "^7.21.4"
@@ -111,75 +111,75 @@
     "@babel/types" "^7.22.0"
 
 "@babel/helper-simple-access@^7.21.5":
-  "integrity" "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg=="
-  "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz"
-  "version" "7.21.5"
+  version "7.21.5"
+  resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz"
+  integrity sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==
   dependencies:
     "@babel/types" "^7.21.5"
 
 "@babel/helper-split-export-declaration@^7.18.6":
-  "integrity" "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA=="
-  "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz"
-  "version" "7.18.6"
+  version "7.18.6"
+  resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz"
+  integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==
   dependencies:
     "@babel/types" "^7.18.6"
 
 "@babel/helper-string-parser@^7.21.5":
-  "integrity" "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w=="
-  "resolved" "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz"
-  "version" "7.21.5"
+  version "7.21.5"
+  resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz"
+  integrity sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==
 
 "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1":
-  "integrity" "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w=="
-  "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz"
-  "version" "7.19.1"
+  version "7.19.1"
+  resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz"
+  integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
 
 "@babel/helper-validator-option@^7.21.0":
-  "integrity" "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ=="
-  "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz"
-  "version" "7.21.0"
+  version "7.21.0"
+  resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz"
+  integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==
 
 "@babel/helpers@^7.22.0":
-  "integrity" "sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w=="
-  "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.3.tgz"
-  "version" "7.22.3"
+  version "7.22.3"
+  resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.3.tgz"
+  integrity sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==
   dependencies:
     "@babel/template" "^7.21.9"
     "@babel/traverse" "^7.22.1"
     "@babel/types" "^7.22.3"
 
 "@babel/highlight@^7.18.6":
-  "integrity" "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g=="
-  "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz"
-  "version" "7.18.6"
+  version "7.18.6"
+  resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz"
+  integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
   dependencies:
     "@babel/helper-validator-identifier" "^7.18.6"
-    "chalk" "^2.0.0"
-    "js-tokens" "^4.0.0"
+    chalk "^2.0.0"
+    js-tokens "^4.0.0"
 
-"@babel/parser@^7.12.11", "@babel/parser@^7.15.8", "@babel/parser@^7.20.15", "@babel/parser@^7.21.3", "@babel/parser@^7.21.9", "@babel/parser@^7.22.0", "@babel/parser@^7.6.0", "@babel/parser@^7.7.0", "@babel/parser@^7.9.6":
-  "integrity" "sha512-vrukxyW/ep8UD1UDzOYpTKQ6abgjFoeG6L+4ar9+c5TN9QnlqiOi6QK7LSR5ewm/ERyGkT/Ai6VboNrxhbr9Uw=="
-  "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.22.3.tgz"
-  "version" "7.22.3"
+"@babel/parser@^7.12.11", "@babel/parser@^7.20.15", "@babel/parser@^7.21.3", "@babel/parser@^7.21.9", "@babel/parser@^7.22.0", "@babel/parser@^7.6.0", "@babel/parser@^7.7.0", "@babel/parser@^7.9.6":
+  version "7.22.3"
+  resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.22.3.tgz"
+  integrity sha512-vrukxyW/ep8UD1UDzOYpTKQ6abgjFoeG6L+4ar9+c5TN9QnlqiOi6QK7LSR5ewm/ERyGkT/Ai6VboNrxhbr9Uw==
 
 "@babel/standalone@^7.20.13":
-  "integrity" "sha512-us2dNhs+YxbpIlTH84go6FuZxXQZSsCLAQgGCh8Czuubmk6bOz6Dipgo52NBt9VixeEpoVGZQU6NF6NYAIWX8g=="
-  "resolved" "https://registry.npmjs.org/@babel/standalone/-/standalone-7.22.2.tgz"
-  "version" "7.22.2"
+  version "7.22.2"
+  resolved "https://registry.npmjs.org/@babel/standalone/-/standalone-7.22.2.tgz"
+  integrity sha512-us2dNhs+YxbpIlTH84go6FuZxXQZSsCLAQgGCh8Czuubmk6bOz6Dipgo52NBt9VixeEpoVGZQU6NF6NYAIWX8g==
 
 "@babel/template@^7.20.7", "@babel/template@^7.21.9":
-  "integrity" "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ=="
-  "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz"
-  "version" "7.21.9"
+  version "7.21.9"
+  resolved "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz"
+  integrity sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==
   dependencies:
     "@babel/code-frame" "^7.21.4"
     "@babel/parser" "^7.21.9"
     "@babel/types" "^7.21.5"
 
 "@babel/traverse@^7.12.12", "@babel/traverse@^7.22.1", "@babel/traverse@^7.7.0":
-  "integrity" "sha512-lAWkdCoUFnmwLBhIRLciFntGYsIIoC6vIbN8zrLPqBnJmPu7Z6nzqnKd7FsxQUNAvZfVZ0x6KdNvNp8zWIOHSQ=="
-  "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.1.tgz"
-  "version" "7.22.1"
+  version "7.22.1"
+  resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.1.tgz"
+  integrity sha512-lAWkdCoUFnmwLBhIRLciFntGYsIIoC6vIbN8zrLPqBnJmPu7Z6nzqnKd7FsxQUNAvZfVZ0x6KdNvNp8zWIOHSQ==
   dependencies:
     "@babel/code-frame" "^7.21.4"
     "@babel/generator" "^7.22.0"
@@ -189,73 +189,83 @@
     "@babel/helper-split-export-declaration" "^7.18.6"
     "@babel/parser" "^7.22.0"
     "@babel/types" "^7.22.0"
-    "debug" "^4.1.0"
-    "globals" "^11.1.0"
+    debug "^4.1.0"
+    globals "^11.1.0"
 
 "@babel/types@^7.18.6", "@babel/types@^7.21.0", "@babel/types@^7.21.3", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.22.0", "@babel/types@^7.22.3", "@babel/types@^7.6.1", "@babel/types@^7.7.0", "@babel/types@^7.9.6":
-  "integrity" "sha512-P3na3xIQHTKY4L0YOG7pM8M8uoUIB910WQaSiiMCZUC2Cy8XFEQONGABFnHWBa2gpGKODTAJcNhi5Zk0sLRrzg=="
-  "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.22.3.tgz"
-  "version" "7.22.3"
+  version "7.22.3"
+  resolved "https://registry.npmjs.org/@babel/types/-/types-7.22.3.tgz"
+  integrity sha512-P3na3xIQHTKY4L0YOG7pM8M8uoUIB910WQaSiiMCZUC2Cy8XFEQONGABFnHWBa2gpGKODTAJcNhi5Zk0sLRrzg==
   dependencies:
     "@babel/helper-string-parser" "^7.21.5"
     "@babel/helper-validator-identifier" "^7.19.1"
-    "to-fast-properties" "^2.0.0"
+    to-fast-properties "^2.0.0"
+
+"@esbuild/android-arm@0.15.18":
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz"
+  integrity sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==
+
+"@esbuild/linux-loong64@0.15.18":
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz"
+  integrity sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==
 
 "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.3.0":
-  "integrity" "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA=="
-  "resolved" "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz"
-  "version" "4.4.0"
+  version "4.4.0"
+  resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz"
+  integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
   dependencies:
-    "eslint-visitor-keys" "^3.3.0"
+    eslint-visitor-keys "^3.3.0"
 
 "@eslint-community/regexpp@^4.4.0":
-  "integrity" "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ=="
-  "resolved" "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz"
-  "version" "4.5.1"
+  version "4.5.1"
+  resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz"
+  integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==
 
 "@eslint/eslintrc@^2.0.3":
-  "integrity" "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ=="
-  "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz"
-  "version" "2.0.3"
+  version "2.0.3"
+  resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz"
+  integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==
   dependencies:
-    "ajv" "^6.12.4"
-    "debug" "^4.3.2"
-    "espree" "^9.5.2"
-    "globals" "^13.19.0"
-    "ignore" "^5.2.0"
-    "import-fresh" "^3.2.1"
-    "js-yaml" "^4.1.0"
-    "minimatch" "^3.1.2"
-    "strip-json-comments" "^3.1.1"
+    ajv "^6.12.4"
+    debug "^4.3.2"
+    espree "^9.5.2"
+    globals "^13.19.0"
+    ignore "^5.2.0"
+    import-fresh "^3.2.1"
+    js-yaml "^4.1.0"
+    minimatch "^3.1.2"
+    strip-json-comments "^3.1.1"
 
 "@eslint/js@8.41.0":
-  "integrity" "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA=="
-  "resolved" "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz"
-  "version" "8.41.0"
+  version "8.41.0"
+  resolved "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz"
+  integrity sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==
 
 "@humanwhocodes/config-array@^0.11.8":
-  "integrity" "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g=="
-  "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz"
-  "version" "0.11.8"
+  version "0.11.8"
+  resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz"
+  integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==
   dependencies:
     "@humanwhocodes/object-schema" "^1.2.1"
-    "debug" "^4.1.1"
-    "minimatch" "^3.0.5"
+    debug "^4.1.1"
+    minimatch "^3.0.5"
 
 "@humanwhocodes/module-importer@^1.0.1":
-  "integrity" "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="
-  "resolved" "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz"
-  "version" "1.0.1"
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz"
+  integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
 
 "@humanwhocodes/object-schema@^1.2.1":
-  "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="
-  "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz"
-  "version" "1.2.1"
+  version "1.2.1"
+  resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz"
+  integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
 
 "@intlify/core-base@9.2.2":
-  "integrity" "sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA=="
-  "resolved" "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.2.2.tgz"
-  "version" "9.2.2"
+  version "9.2.2"
+  resolved "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.2.2.tgz"
+  integrity sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==
   dependencies:
     "@intlify/devtools-if" "9.2.2"
     "@intlify/message-compiler" "9.2.2"
@@ -263,182 +273,182 @@
     "@intlify/vue-devtools" "9.2.2"
 
 "@intlify/devtools-if@9.2.2":
-  "integrity" "sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg=="
-  "resolved" "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.2.2.tgz"
-  "version" "9.2.2"
+  version "9.2.2"
+  resolved "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.2.2.tgz"
+  integrity sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==
   dependencies:
     "@intlify/shared" "9.2.2"
 
 "@intlify/message-compiler@9.2.2":
-  "integrity" "sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA=="
-  "resolved" "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.2.2.tgz"
-  "version" "9.2.2"
+  version "9.2.2"
+  resolved "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.2.2.tgz"
+  integrity sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==
   dependencies:
     "@intlify/shared" "9.2.2"
-    "source-map" "0.6.1"
+    source-map "0.6.1"
 
 "@intlify/shared@9.2.2":
-  "integrity" "sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q=="
-  "resolved" "https://registry.npmjs.org/@intlify/shared/-/shared-9.2.2.tgz"
-  "version" "9.2.2"
+  version "9.2.2"
+  resolved "https://registry.npmjs.org/@intlify/shared/-/shared-9.2.2.tgz"
+  integrity sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==
 
 "@intlify/vue-devtools@9.2.2":
-  "integrity" "sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg=="
-  "resolved" "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz"
-  "version" "9.2.2"
+  version "9.2.2"
+  resolved "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz"
+  integrity sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==
   dependencies:
     "@intlify/core-base" "9.2.2"
     "@intlify/shared" "9.2.2"
 
 "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2":
-  "integrity" "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ=="
-  "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz"
-  "version" "0.3.3"
+  version "0.3.3"
+  resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz"
+  integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
   dependencies:
     "@jridgewell/set-array" "^1.0.1"
     "@jridgewell/sourcemap-codec" "^1.4.10"
     "@jridgewell/trace-mapping" "^0.3.9"
 
 "@jridgewell/resolve-uri@3.1.0":
-  "integrity" "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w=="
-  "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz"
-  "version" "3.1.0"
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz"
+  integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
 
 "@jridgewell/set-array@^1.0.1":
-  "integrity" "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="
-  "resolved" "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz"
-  "version" "1.1.2"
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz"
+  integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
 
 "@jridgewell/source-map@^0.3.2":
-  "integrity" "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg=="
-  "resolved" "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz"
-  "version" "0.3.3"
+  version "0.3.3"
+  resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz"
+  integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==
   dependencies:
     "@jridgewell/gen-mapping" "^0.3.0"
     "@jridgewell/trace-mapping" "^0.3.9"
 
 "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13":
-  "integrity" "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
-  "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz"
-  "version" "1.4.15"
+  version "1.4.15"
+  resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz"
+  integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
 
 "@jridgewell/sourcemap-codec@1.4.14":
-  "integrity" "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
-  "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz"
-  "version" "1.4.14"
+  version "1.4.14"
+  resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz"
+  integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
 
 "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
-  "integrity" "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA=="
-  "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz"
-  "version" "0.3.18"
+  version "0.3.18"
+  resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz"
+  integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
   dependencies:
     "@jridgewell/resolve-uri" "3.1.0"
     "@jridgewell/sourcemap-codec" "1.4.14"
 
 "@nodelib/fs.scandir@2.1.5":
-  "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="
-  "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
-  "version" "2.1.5"
+  version "2.1.5"
+  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"
-    "run-parallel" "^1.1.9"
+    run-parallel "^1.1.9"
 
 "@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
-  "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
-  "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
-  "version" "2.0.5"
+  version "2.0.5"
+  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":
-  "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="
-  "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
-  "version" "1.2.8"
+  version "1.2.8"
+  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"
-    "fastq" "^1.6.0"
+    fastq "^1.6.0"
 
 "@rollup/pluginutils@^5.0.2":
-  "integrity" "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA=="
-  "resolved" "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz"
-  "version" "5.0.2"
+  version "5.0.2"
+  resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz"
+  integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==
   dependencies:
     "@types/estree" "^1.0.0"
-    "estree-walker" "^2.0.2"
-    "picomatch" "^2.3.1"
+    estree-walker "^2.0.2"
+    picomatch "^2.3.1"
 
 "@types/estree@^1.0.0":
-  "integrity" "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA=="
-  "resolved" "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz"
-  "version" "1.0.1"
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz"
+  integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==
 
 "@types/parse-json@^4.0.0":
-  "integrity" "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
-  "resolved" "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz"
-  "version" "4.0.0"
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz"
+  integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
 
 "@types/web-bluetooth@^0.0.16":
-  "integrity" "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
-  "resolved" "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz"
-  "version" "0.0.16"
+  version "0.0.16"
+  resolved "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz"
+  integrity sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==
 
 "@vant/popperjs@^1.3.0":
-  "integrity" "sha512-hB+czUG+aHtjhaEmCJDuXOep0YTZjdlRR+4MSmIFnkCQIxJaXLQdSsR90XWvAI2yvKUI7TCGqR8pQg2RtvkMHw=="
-  "resolved" "https://registry.npmjs.org/@vant/popperjs/-/popperjs-1.3.0.tgz"
-  "version" "1.3.0"
+  version "1.3.0"
+  resolved "https://registry.npmjs.org/@vant/popperjs/-/popperjs-1.3.0.tgz"
+  integrity sha512-hB+czUG+aHtjhaEmCJDuXOep0YTZjdlRR+4MSmIFnkCQIxJaXLQdSsR90XWvAI2yvKUI7TCGqR8pQg2RtvkMHw==
 
 "@vant/use@^1.5.1":
-  "integrity" "sha512-Zxd7lDz/LliVYEQi3PR9a8CQa/kGCVzF0u9hqDMaTlgXlbG0wHMFPllrcG0ThR6bfs8xrYVuSFM9pJn6HSoUGQ=="
-  "resolved" "https://registry.npmjs.org/@vant/use/-/use-1.5.1.tgz"
-  "version" "1.5.1"
+  version "1.5.1"
+  resolved "https://registry.npmjs.org/@vant/use/-/use-1.5.1.tgz"
+  integrity sha512-Zxd7lDz/LliVYEQi3PR9a8CQa/kGCVzF0u9hqDMaTlgXlbG0wHMFPllrcG0ThR6bfs8xrYVuSFM9pJn6HSoUGQ==
 
 "@vitejs/plugin-legacy@^3.0.1":
-  "integrity" "sha512-9BT2mXunC7kQGKHP70BIbNZ/85P/KUMGKBS9CiV+XKNDZGNBjUnyrh3ofgtqgObmxKaEP2xJsEIRNIFJ+hjI8w=="
-  "resolved" "https://registry.npmjs.org/@vitejs/plugin-legacy/-/plugin-legacy-3.0.2.tgz"
-  "version" "3.0.2"
+  version "3.0.2"
+  resolved "https://registry.npmjs.org/@vitejs/plugin-legacy/-/plugin-legacy-3.0.2.tgz"
+  integrity sha512-9BT2mXunC7kQGKHP70BIbNZ/85P/KUMGKBS9CiV+XKNDZGNBjUnyrh3ofgtqgObmxKaEP2xJsEIRNIFJ+hjI8w==
   dependencies:
     "@babel/standalone" "^7.20.13"
-    "core-js" "^3.27.2"
-    "magic-string" "^0.27.0"
-    "regenerator-runtime" "^0.13.11"
-    "systemjs" "^6.13.0"
+    core-js "^3.27.2"
+    magic-string "^0.27.0"
+    regenerator-runtime "^0.13.11"
+    systemjs "^6.13.0"
 
 "@vitejs/plugin-vue@^3.2.0":
-  "integrity" "sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw=="
-  "resolved" "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz"
-  "version" "3.2.0"
+  version "3.2.0"
+  resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz"
+  integrity sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==
 
 "@vue-macros/common@~1.3.3":
-  "integrity" "sha512-bjHomaf3mu+ARMD4DX22C/lLVVocbmwgcLH7bg1rK4kB5ghesgShZTQIrNR6ZjifQmdGc/2jjZ/25kSb364uEA=="
-  "resolved" "https://registry.npmjs.org/@vue-macros/common/-/common-1.3.3.tgz"
-  "version" "1.3.3"
+  version "1.3.3"
+  resolved "https://registry.npmjs.org/@vue-macros/common/-/common-1.3.3.tgz"
+  integrity sha512-bjHomaf3mu+ARMD4DX22C/lLVVocbmwgcLH7bg1rK4kB5ghesgShZTQIrNR6ZjifQmdGc/2jjZ/25kSb364uEA==
   dependencies:
     "@babel/types" "^7.21.5"
     "@rollup/pluginutils" "^5.0.2"
     "@vue/compiler-sfc" "^3.3.4"
-    "local-pkg" "^0.4.3"
-    "magic-string-ast" "^0.1.2"
+    local-pkg "^0.4.3"
+    magic-string-ast "^0.1.2"
 
 "@vue/compiler-core@3.3.4":
-  "integrity" "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g=="
-  "resolved" "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz"
-  "version" "3.3.4"
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz"
+  integrity sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==
   dependencies:
     "@babel/parser" "^7.21.3"
     "@vue/shared" "3.3.4"
-    "estree-walker" "^2.0.2"
-    "source-map-js" "^1.0.2"
+    estree-walker "^2.0.2"
+    source-map-js "^1.0.2"
 
 "@vue/compiler-dom@3.3.4":
-  "integrity" "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w=="
-  "resolved" "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz"
-  "version" "3.3.4"
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz"
+  integrity sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==
   dependencies:
     "@vue/compiler-core" "3.3.4"
     "@vue/shared" "3.3.4"
 
 "@vue/compiler-sfc@^3.3.4", "@vue/compiler-sfc@3.3.4":
-  "integrity" "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ=="
-  "resolved" "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz"
-  "version" "3.3.4"
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz"
+  integrity sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==
   dependencies:
     "@babel/parser" "^7.20.15"
     "@vue/compiler-core" "3.3.4"
@@ -446,788 +456,883 @@
     "@vue/compiler-ssr" "3.3.4"
     "@vue/reactivity-transform" "3.3.4"
     "@vue/shared" "3.3.4"
-    "estree-walker" "^2.0.2"
-    "magic-string" "^0.30.0"
-    "postcss" "^8.1.10"
-    "source-map-js" "^1.0.2"
+    estree-walker "^2.0.2"
+    magic-string "^0.30.0"
+    postcss "^8.1.10"
+    source-map-js "^1.0.2"
 
 "@vue/compiler-ssr@3.3.4":
-  "integrity" "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ=="
-  "resolved" "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz"
-  "version" "3.3.4"
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz"
+  integrity sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==
   dependencies:
     "@vue/compiler-dom" "3.3.4"
     "@vue/shared" "3.3.4"
 
 "@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.2.1", "@vue/devtools-api@^6.4.4", "@vue/devtools-api@^6.5.0":
-  "integrity" "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
-  "resolved" "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz"
-  "version" "6.5.0"
+  version "6.5.0"
+  resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz"
+  integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==
 
 "@vue/reactivity-transform@3.3.4":
-  "integrity" "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw=="
-  "resolved" "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz"
-  "version" "3.3.4"
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz"
+  integrity sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==
   dependencies:
     "@babel/parser" "^7.20.15"
     "@vue/compiler-core" "3.3.4"
     "@vue/shared" "3.3.4"
-    "estree-walker" "^2.0.2"
-    "magic-string" "^0.30.0"
+    estree-walker "^2.0.2"
+    magic-string "^0.30.0"
 
 "@vue/reactivity@3.3.4":
-  "integrity" "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ=="
-  "resolved" "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz"
-  "version" "3.3.4"
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz"
+  integrity sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==
   dependencies:
     "@vue/shared" "3.3.4"
 
 "@vue/runtime-core@3.3.4":
-  "integrity" "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA=="
-  "resolved" "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz"
-  "version" "3.3.4"
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz"
+  integrity sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==
   dependencies:
     "@vue/reactivity" "3.3.4"
     "@vue/shared" "3.3.4"
 
 "@vue/runtime-dom@3.3.4":
-  "integrity" "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ=="
-  "resolved" "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz"
-  "version" "3.3.4"
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz"
+  integrity sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==
   dependencies:
     "@vue/runtime-core" "3.3.4"
     "@vue/shared" "3.3.4"
-    "csstype" "^3.1.1"
+    csstype "^3.1.1"
 
 "@vue/server-renderer@3.3.4":
-  "integrity" "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ=="
-  "resolved" "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz"
-  "version" "3.3.4"
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz"
+  integrity sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==
   dependencies:
     "@vue/compiler-ssr" "3.3.4"
     "@vue/shared" "3.3.4"
 
 "@vue/shared@^3.0.0", "@vue/shared@3.3.4":
-  "integrity" "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ=="
-  "resolved" "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz"
-  "version" "3.3.4"
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz"
+  integrity sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==
 
 "@vueuse/components@9.4.0":
-  "integrity" "sha512-FDaZsosPoSFYGg+AUpUyf1Kb/tLr2ATXcD0LNRg6H8QPOzrY6j5WnUf1fEADur0W82cnZWaoziPPgjKZOLzAYw=="
-  "resolved" "https://registry.npmjs.org/@vueuse/components/-/components-9.4.0.tgz"
-  "version" "9.4.0"
+  version "9.4.0"
+  resolved "https://registry.npmjs.org/@vueuse/components/-/components-9.4.0.tgz"
+  integrity sha512-FDaZsosPoSFYGg+AUpUyf1Kb/tLr2ATXcD0LNRg6H8QPOzrY6j5WnUf1fEADur0W82cnZWaoziPPgjKZOLzAYw==
   dependencies:
     "@vueuse/core" "9.4.0"
     "@vueuse/shared" "9.4.0"
-    "vue-demi" "*"
+    vue-demi "*"
 
 "@vueuse/core@9.4.0":
-  "integrity" "sha512-JzgenGj1ZF2BHOen5rsFiAyyI9sXAv7aKhNLlm9b7SwYQeKTcxTWdhudonURCSP3Egl9NQaRBzes2lv/1JUt/Q=="
-  "resolved" "https://registry.npmjs.org/@vueuse/core/-/core-9.4.0.tgz"
-  "version" "9.4.0"
+  version "9.4.0"
+  resolved "https://registry.npmjs.org/@vueuse/core/-/core-9.4.0.tgz"
+  integrity sha512-JzgenGj1ZF2BHOen5rsFiAyyI9sXAv7aKhNLlm9b7SwYQeKTcxTWdhudonURCSP3Egl9NQaRBzes2lv/1JUt/Q==
   dependencies:
     "@types/web-bluetooth" "^0.0.16"
     "@vueuse/metadata" "9.4.0"
     "@vueuse/shared" "9.4.0"
-    "vue-demi" "*"
+    vue-demi "*"
 
 "@vueuse/metadata@9.4.0":
-  "integrity" "sha512-7GKMdGAsJyQJl35MYOz/RDpP0FxuiZBRDSN79QIPbdqYx4Sd0sVTnIC68KJ6Oln0t0SouvSUMvRHuno216Ud2Q=="
-  "resolved" "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.4.0.tgz"
-  "version" "9.4.0"
+  version "9.4.0"
+  resolved "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.4.0.tgz"
+  integrity sha512-7GKMdGAsJyQJl35MYOz/RDpP0FxuiZBRDSN79QIPbdqYx4Sd0sVTnIC68KJ6Oln0t0SouvSUMvRHuno216Ud2Q==
 
 "@vueuse/shared@9.4.0":
-  "integrity" "sha512-fTuem51KwMCnqUKkI8B57qAIMcFovtGgsCtAeqxIzH3i6nE9VYge+gVfneNHAAy7lj8twbkNfqQSygOPJTm4tQ=="
-  "resolved" "https://registry.npmjs.org/@vueuse/shared/-/shared-9.4.0.tgz"
-  "version" "9.4.0"
+  version "9.4.0"
+  resolved "https://registry.npmjs.org/@vueuse/shared/-/shared-9.4.0.tgz"
+  integrity sha512-fTuem51KwMCnqUKkI8B57qAIMcFovtGgsCtAeqxIzH3i6nE9VYge+gVfneNHAAy7lj8twbkNfqQSygOPJTm4tQ==
   dependencies:
-    "vue-demi" "*"
+    vue-demi "*"
 
-"acorn-jsx@^5.3.2":
-  "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="
-  "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
-  "version" "5.3.2"
+acorn-jsx@^5.3.2:
+  version "5.3.2"
+  resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
+  integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
 
-"acorn-node@^1.8.2":
-  "integrity" "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A=="
-  "resolved" "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz"
-  "version" "1.8.2"
+acorn-node@^1.8.2:
+  version "1.8.2"
+  resolved "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz"
+  integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==
   dependencies:
-    "acorn" "^7.0.0"
-    "acorn-walk" "^7.0.0"
-    "xtend" "^4.0.2"
+    acorn "^7.0.0"
+    acorn-walk "^7.0.0"
+    xtend "^4.0.2"
 
-"acorn-walk@^7.0.0":
-  "integrity" "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
-  "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz"
-  "version" "7.2.0"
+acorn-walk@^7.0.0:
+  version "7.2.0"
+  resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz"
+  integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
 
-"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^7.0.0", "acorn@^7.1.1":
-  "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
-  "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz"
-  "version" "7.4.1"
+acorn@^7.0.0, acorn@^7.1.1:
+  version "7.4.1"
+  resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz"
+  integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
 
-"acorn@^8.5.0":
-  "integrity" "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw=="
-  "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz"
-  "version" "8.8.2"
+acorn@^8.5.0:
+  version "8.8.2"
+  resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz"
+  integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
 
-"acorn@^8.8.0":
-  "integrity" "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw=="
-  "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz"
-  "version" "8.8.2"
+acorn@^8.8.0:
+  version "8.8.2"
+  resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz"
+  integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
 
-"acorn@^8.8.2":
-  "integrity" "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw=="
-  "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz"
-  "version" "8.8.2"
+acorn@^8.8.2:
+  version "8.8.2"
+  resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz"
+  integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
 
-"ajv@^6.10.0", "ajv@^6.12.4":
-  "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="
-  "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
-  "version" "6.12.6"
+ajv@^6.10.0, ajv@^6.12.4:
+  version "6.12.6"
+  resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
   dependencies:
-    "fast-deep-equal" "^3.1.1"
-    "fast-json-stable-stringify" "^2.0.0"
-    "json-schema-traverse" "^0.4.1"
-    "uri-js" "^4.2.2"
+    fast-deep-equal "^3.1.1"
+    fast-json-stable-stringify "^2.0.0"
+    json-schema-traverse "^0.4.1"
+    uri-js "^4.2.2"
 
-"amfe-flexible@^2.2.1":
-  "integrity" "sha512-L2VfvDzoETBjhRptg5u/IUuzHSuxm22JpSRb404p/TBGeRfwWmmNEbB+TFPIP/sS/+pbM18bCFH9QnMojLuPNw=="
-  "resolved" "https://registry.npmjs.org/amfe-flexible/-/amfe-flexible-2.2.1.tgz"
-  "version" "2.2.1"
+amfe-flexible@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.npmjs.org/amfe-flexible/-/amfe-flexible-2.2.1.tgz"
+  integrity sha512-L2VfvDzoETBjhRptg5u/IUuzHSuxm22JpSRb404p/TBGeRfwWmmNEbB+TFPIP/sS/+pbM18bCFH9QnMojLuPNw==
 
-"ansi-regex@^5.0.1":
-  "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
-  "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
-  "version" "5.0.1"
+ansi-regex@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
+  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
 
-"ansi-styles@^3.2.1":
-  "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="
-  "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"
-  "version" "3.2.1"
+ansi-styles@^3.2.1:
+  version "3.2.1"
+  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"
+    color-convert "^1.9.0"
 
-"ansi-styles@^4.0.0", "ansi-styles@^4.1.0":
-  "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
-  "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
-  "version" "4.3.0"
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+  version "4.3.0"
+  resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
+  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
   dependencies:
-    "color-convert" "^2.0.1"
+    color-convert "^2.0.1"
 
-"anymatch@~3.1.2":
-  "integrity" "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="
-  "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz"
-  "version" "3.1.3"
+anymatch@~3.1.2:
+  version "3.1.3"
+  resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz"
+  integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
   dependencies:
-    "normalize-path" "^3.0.0"
-    "picomatch" "^2.0.4"
+    normalize-path "^3.0.0"
+    picomatch "^2.0.4"
 
-"arg@^5.0.1":
-  "integrity" "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
-  "resolved" "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz"
-  "version" "5.0.2"
+arg@^5.0.1:
+  version "5.0.2"
+  resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz"
+  integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
 
-"argparse@^2.0.1":
-  "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
-  "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz"
-  "version" "2.0.1"
+argparse@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz"
+  integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
 
-"asap@~2.0.3":
-  "integrity" "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
-  "resolved" "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz"
-  "version" "2.0.6"
+asap@~2.0.3:
+  version "2.0.6"
+  resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz"
+  integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==
 
-"assert-never@^1.2.1":
-  "integrity" "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw=="
-  "resolved" "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz"
-  "version" "1.2.1"
+assert-never@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz"
+  integrity sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==
 
-"ast-walker-scope@^0.4.1":
-  "integrity" "sha512-Ro3nmapMxi/remlJdzFH0tiA7A59KDbxVoLlKWaLDrPELiftb9b8w+CCyWRM+sXZH5KHRAgv8feedW6mihvCHA=="
-  "resolved" "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.4.1.tgz"
-  "version" "0.4.1"
+ast-walker-scope@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.4.1.tgz"
+  integrity sha512-Ro3nmapMxi/remlJdzFH0tiA7A59KDbxVoLlKWaLDrPELiftb9b8w+CCyWRM+sXZH5KHRAgv8feedW6mihvCHA==
   dependencies:
     "@babel/parser" "^7.21.3"
     "@babel/types" "^7.21.3"
 
-"asynckit@^0.4.0":
-  "integrity" "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
-  "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
-  "version" "0.4.0"
+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.13":
-  "integrity" "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ=="
-  "resolved" "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz"
-  "version" "10.4.14"
+autoprefixer@^10.4.13:
+  version "10.4.14"
+  resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz"
+  integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==
   dependencies:
-    "browserslist" "^4.21.5"
-    "caniuse-lite" "^1.0.30001464"
-    "fraction.js" "^4.2.0"
-    "normalize-range" "^0.1.2"
-    "picocolors" "^1.0.0"
-    "postcss-value-parser" "^4.2.0"
+    browserslist "^4.21.5"
+    caniuse-lite "^1.0.30001464"
+    fraction.js "^4.2.0"
+    normalize-range "^0.1.2"
+    picocolors "^1.0.0"
+    postcss-value-parser "^4.2.0"
 
-"autoprefixer@^9":
-  "integrity" "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA=="
-  "resolved" "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz"
-  "version" "9.8.8"
+autoprefixer@^9:
+  version "9.8.8"
+  resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz"
+  integrity sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==
   dependencies:
-    "browserslist" "^4.12.0"
-    "caniuse-lite" "^1.0.30001109"
-    "normalize-range" "^0.1.2"
-    "num2fraction" "^1.2.2"
-    "picocolors" "^0.2.1"
-    "postcss" "^7.0.32"
-    "postcss-value-parser" "^4.1.0"
+    browserslist "^4.12.0"
+    caniuse-lite "^1.0.30001109"
+    normalize-range "^0.1.2"
+    num2fraction "^1.2.2"
+    picocolors "^0.2.1"
+    postcss "^7.0.32"
+    postcss-value-parser "^4.1.0"
 
-"axios@^1.1.3":
-  "integrity" "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA=="
-  "resolved" "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz"
-  "version" "1.4.0"
+axios@^1.1.3:
+  version "1.4.0"
+  resolved "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz"
+  integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==
   dependencies:
-    "follow-redirects" "^1.15.0"
-    "form-data" "^4.0.0"
-    "proxy-from-env" "^1.1.0"
+    follow-redirects "^1.15.0"
+    form-data "^4.0.0"
+    proxy-from-env "^1.1.0"
 
-"babel-eslint@^10.1.0":
-  "integrity" "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg=="
-  "resolved" "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz"
-  "version" "10.1.0"
+babel-eslint@^10.1.0:
+  version "10.1.0"
+  resolved "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz"
+  integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==
   dependencies:
     "@babel/code-frame" "^7.0.0"
     "@babel/parser" "^7.7.0"
     "@babel/traverse" "^7.7.0"
     "@babel/types" "^7.7.0"
-    "eslint-visitor-keys" "^1.0.0"
-    "resolve" "^1.12.0"
+    eslint-visitor-keys "^1.0.0"
+    resolve "^1.12.0"
 
-"babel-walk@3.0.0-canary-5":
-  "integrity" "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw=="
-  "resolved" "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz"
-  "version" "3.0.0-canary-5"
+babel-walk@3.0.0-canary-5:
+  version "3.0.0-canary-5"
+  resolved "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz"
+  integrity sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==
   dependencies:
     "@babel/types" "^7.9.6"
 
-"balanced-match@^1.0.0":
-  "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
-  "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
-  "version" "1.0.2"
+balanced-match@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
 
-"base64-arraybuffer@^1.0.2":
-  "integrity" "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ=="
-  "resolved" "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz"
-  "version" "1.0.2"
+base64-arraybuffer@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz"
+  integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==
 
-"binary-extensions@^2.0.0":
-  "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
-  "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz"
-  "version" "2.2.0"
+binary-extensions@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz"
+  integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
 
-"boolbase@^1.0.0":
-  "integrity" "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
-  "resolved" "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz"
-  "version" "1.0.0"
+boolbase@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz"
+  integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
 
-"brace-expansion@^1.1.7":
-  "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="
-  "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
-  "version" "1.1.11"
+brace-expansion@^1.1.7:
+  version "1.1.11"
+  resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
   dependencies:
-    "balanced-match" "^1.0.0"
-    "concat-map" "0.0.1"
+    balanced-match "^1.0.0"
+    concat-map "0.0.1"
 
-"brace-expansion@^2.0.1":
-  "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="
-  "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz"
-  "version" "2.0.1"
+brace-expansion@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz"
+  integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
   dependencies:
-    "balanced-match" "^1.0.0"
+    balanced-match "^1.0.0"
 
-"braces@^3.0.2", "braces@~3.0.2":
-  "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="
-  "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz"
-  "version" "3.0.2"
+braces@^3.0.2, braces@~3.0.2:
+  version "3.0.2"
+  resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz"
+  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
   dependencies:
-    "fill-range" "^7.0.1"
+    fill-range "^7.0.1"
 
-"browserslist@^4.12.0", "browserslist@^4.21.3", "browserslist@^4.21.5", "browserslist@>= 4.21.0":
-  "integrity" "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA=="
-  "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz"
-  "version" "4.21.7"
+browserslist@^4.12.0, browserslist@^4.21.3, browserslist@^4.21.5:
+  version "4.21.7"
+  resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz"
+  integrity sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==
   dependencies:
-    "caniuse-lite" "^1.0.30001489"
-    "electron-to-chromium" "^1.4.411"
-    "node-releases" "^2.0.12"
-    "update-browserslist-db" "^1.0.11"
+    caniuse-lite "^1.0.30001489"
+    electron-to-chromium "^1.4.411"
+    node-releases "^2.0.12"
+    update-browserslist-db "^1.0.11"
 
-"buffer-from@^1.0.0":
-  "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
-  "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz"
-  "version" "1.1.2"
+buffer-from@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz"
+  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
 
-"bytes@^3.0.0":
-  "integrity" "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
-  "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz"
-  "version" "3.1.2"
+bytes@^3.0.0:
+  version "3.1.2"
+  resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz"
+  integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
 
-"call-bind@^1.0.0", "call-bind@^1.0.2":
-  "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA=="
-  "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz"
-  "version" "1.0.2"
+call-bind@^1.0.0, call-bind@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz"
+  integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
   dependencies:
-    "function-bind" "^1.1.1"
-    "get-intrinsic" "^1.0.2"
+    function-bind "^1.1.1"
+    get-intrinsic "^1.0.2"
 
-"callsites@^3.0.0":
-  "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
-  "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"
-  "version" "3.1.0"
+callsites@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"
+  integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
 
-"camelcase-css@^2.0.1":
-  "integrity" "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
-  "resolved" "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz"
-  "version" "2.0.1"
+camelcase-css@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz"
+  integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
 
-"camelcase@^5.0.0":
-  "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
-  "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz"
-  "version" "5.3.1"
+camelcase@^5.0.0:
+  version "5.3.1"
+  resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz"
+  integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
 
-"caniuse-lite@^1.0.30001109", "caniuse-lite@^1.0.30001464", "caniuse-lite@^1.0.30001489":
-  "integrity" "sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ=="
-  "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz"
-  "version" "1.0.30001489"
+caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001489:
+  version "1.0.30001489"
+  resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz"
+  integrity sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==
 
-"chalk@^2.0.0":
-  "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="
-  "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
-  "version" "2.4.2"
+chalk@^2.0.0:
+  version "2.4.2"
+  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"
-    "escape-string-regexp" "^1.0.5"
-    "supports-color" "^5.3.0"
+    ansi-styles "^3.2.1"
+    escape-string-regexp "^1.0.5"
+    supports-color "^5.3.0"
 
-"chalk@^2.4.1":
-  "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="
-  "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
-  "version" "2.4.2"
+chalk@^2.4.1:
+  version "2.4.2"
+  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"
-    "escape-string-regexp" "^1.0.5"
-    "supports-color" "^5.3.0"
+    ansi-styles "^3.2.1"
+    escape-string-regexp "^1.0.5"
+    supports-color "^5.3.0"
 
-"chalk@^4.0.0", "chalk@^4.1.0", "chalk@^4.1.2":
-  "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="
-  "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
-  "version" "4.1.2"
+chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
+  integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
   dependencies:
-    "ansi-styles" "^4.1.0"
-    "supports-color" "^7.1.0"
+    ansi-styles "^4.1.0"
+    supports-color "^7.1.0"
 
-"character-parser@^2.2.0":
-  "integrity" "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw=="
-  "resolved" "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz"
-  "version" "2.2.0"
+character-parser@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz"
+  integrity sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==
   dependencies:
-    "is-regex" "^1.0.3"
+    is-regex "^1.0.3"
 
-"chokidar@^3.5.2", "chokidar@^3.5.3", "chokidar@>=3.0.0 <4.0.0":
-  "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw=="
-  "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz"
-  "version" "3.5.3"
+chokidar@^3.5.2, chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0":
+  version "3.5.3"
+  resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz"
+  integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
   dependencies:
-    "anymatch" "~3.1.2"
-    "braces" "~3.0.2"
-    "glob-parent" "~5.1.2"
-    "is-binary-path" "~2.1.0"
-    "is-glob" "~4.0.1"
-    "normalize-path" "~3.0.0"
-    "readdirp" "~3.6.0"
+    anymatch "~3.1.2"
+    braces "~3.0.2"
+    glob-parent "~5.1.2"
+    is-binary-path "~2.1.0"
+    is-glob "~4.0.1"
+    normalize-path "~3.0.0"
+    readdirp "~3.6.0"
   optionalDependencies:
-    "fsevents" "~2.3.2"
+    fsevents "~2.3.2"
 
-"clipboard@^2.0.6":
-  "integrity" "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw=="
-  "resolved" "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz"
-  "version" "2.0.11"
+clipboard@^2.0.6:
+  version "2.0.11"
+  resolved "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz"
+  integrity sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==
   dependencies:
-    "good-listener" "^1.2.2"
-    "select" "^1.1.2"
-    "tiny-emitter" "^2.0.0"
+    good-listener "^1.2.2"
+    select "^1.1.2"
+    tiny-emitter "^2.0.0"
 
-"cliui@^6.0.0":
-  "integrity" "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ=="
-  "resolved" "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz"
-  "version" "6.0.0"
+cliui@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz"
+  integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
   dependencies:
-    "string-width" "^4.2.0"
-    "strip-ansi" "^6.0.0"
-    "wrap-ansi" "^6.2.0"
+    string-width "^4.2.0"
+    strip-ansi "^6.0.0"
+    wrap-ansi "^6.2.0"
 
-"cliui@^8.0.1":
-  "integrity" "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="
-  "resolved" "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz"
-  "version" "8.0.1"
+cliui@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz"
+  integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
   dependencies:
-    "string-width" "^4.2.0"
-    "strip-ansi" "^6.0.1"
-    "wrap-ansi" "^7.0.0"
+    string-width "^4.2.0"
+    strip-ansi "^6.0.1"
+    wrap-ansi "^7.0.0"
 
-"color-convert@^1.9.0":
-  "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="
-  "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"
-  "version" "1.9.3"
+color-convert@^1.9.0:
+  version "1.9.3"
+  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-name "1.1.3"
 
-"color-convert@^2.0.1":
-  "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="
-  "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
-  "version" "2.0.1"
+color-convert@^2.0.1:
+  version "2.0.1"
+  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.4"
 
-"color-name@^1.0.0", "color-name@~1.1.4":
-  "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
-  "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
-  "version" "1.1.4"
+color-name@^1.0.0, color-name@~1.1.4:
+  version "1.1.4"
+  resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
+  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
 
-"color-name@1.1.3":
-  "integrity" "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
-  "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
-  "version" "1.1.3"
+color-name@1.1.3:
+  version "1.1.3"
+  resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
+  integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
 
-"color-string@^1.9.0":
-  "integrity" "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg=="
-  "resolved" "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz"
-  "version" "1.9.1"
+color-string@^1.9.0:
+  version "1.9.1"
+  resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz"
+  integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==
   dependencies:
-    "color-name" "^1.0.0"
-    "simple-swizzle" "^0.2.2"
+    color-name "^1.0.0"
+    simple-swizzle "^0.2.2"
 
-"color@^4.0.1":
-  "integrity" "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="
-  "resolved" "https://registry.npmjs.org/color/-/color-4.2.3.tgz"
-  "version" "4.2.3"
+color@^4.0.1:
+  version "4.2.3"
+  resolved "https://registry.npmjs.org/color/-/color-4.2.3.tgz"
+  integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==
   dependencies:
-    "color-convert" "^2.0.1"
-    "color-string" "^1.9.0"
+    color-convert "^2.0.1"
+    color-string "^1.9.0"
 
-"combined-stream@^1.0.8":
-  "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="
-  "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
-  "version" "1.0.8"
+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"
+    delayed-stream "~1.0.0"
 
-"commander@^2.20.0":
-  "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
-  "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz"
-  "version" "2.20.3"
+commander@^2.20.0:
+  version "2.20.3"
+  resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
 
-"commander@^8.0.0":
-  "integrity" "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="
-  "resolved" "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz"
-  "version" "8.3.0"
+commander@^8.0.0:
+  version "8.3.0"
+  resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz"
+  integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
 
-"concat-map@0.0.1":
-  "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
-  "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
-  "version" "0.0.1"
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+  integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
 
-"constantinople@^4.0.1":
-  "integrity" "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw=="
-  "resolved" "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz"
-  "version" "4.0.1"
+constantinople@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz"
+  integrity sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==
   dependencies:
     "@babel/parser" "^7.6.0"
     "@babel/types" "^7.6.1"
 
-"convert-source-map@^1.7.0":
-  "integrity" "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
-  "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz"
-  "version" "1.9.0"
+convert-source-map@^1.7.0:
+  version "1.9.0"
+  resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz"
+  integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
 
-"core-js@^3.27.2", "core-js@^3.6.5":
-  "integrity" "sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg=="
-  "resolved" "https://registry.npmjs.org/core-js/-/core-js-3.30.2.tgz"
-  "version" "3.30.2"
+core-js@^3.27.2, core-js@^3.6.5:
+  version "3.30.2"
+  resolved "https://registry.npmjs.org/core-js/-/core-js-3.30.2.tgz"
+  integrity sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg==
 
-"cosmiconfig@^7.0.1":
-  "integrity" "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA=="
-  "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz"
-  "version" "7.1.0"
+cosmiconfig@^7.0.1:
+  version "7.1.0"
+  resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz"
+  integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==
   dependencies:
     "@types/parse-json" "^4.0.0"
-    "import-fresh" "^3.2.1"
-    "parse-json" "^5.0.0"
-    "path-type" "^4.0.0"
-    "yaml" "^1.10.0"
+    import-fresh "^3.2.1"
+    parse-json "^5.0.0"
+    path-type "^4.0.0"
+    yaml "^1.10.0"
 
-"cross-spawn@^7.0.2":
-  "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w=="
-  "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
-  "version" "7.0.3"
+cross-spawn@^7.0.2:
+  version "7.0.3"
+  resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
+  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
   dependencies:
-    "path-key" "^3.1.0"
-    "shebang-command" "^2.0.0"
-    "which" "^2.0.1"
+    path-key "^3.1.0"
+    shebang-command "^2.0.0"
+    which "^2.0.1"
 
-"css-color-names@^0.0.4":
-  "integrity" "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q=="
-  "resolved" "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz"
-  "version" "0.0.4"
+css-color-names@^0.0.4:
+  version "0.0.4"
+  resolved "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz"
+  integrity sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==
 
-"css-line-break@^2.1.0":
-  "integrity" "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w=="
-  "resolved" "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz"
-  "version" "2.1.0"
+css-line-break@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz"
+  integrity sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==
   dependencies:
-    "utrie" "^1.0.2"
+    utrie "^1.0.2"
 
-"css-unit-converter@^1.1.1":
-  "integrity" "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA=="
-  "resolved" "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz"
-  "version" "1.1.2"
+css-unit-converter@^1.1.1:
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz"
+  integrity sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==
 
-"cssesc@^3.0.0":
-  "integrity" "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
-  "resolved" "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz"
-  "version" "3.0.0"
+cssesc@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz"
+  integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
 
-"csstype@^3.1.1":
-  "integrity" "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
-  "resolved" "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz"
-  "version" "3.1.2"
+csstype@^3.1.1:
+  version "3.1.2"
+  resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz"
+  integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
 
-"dayjs@^1.11.7":
-  "integrity" "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ=="
-  "resolved" "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz"
-  "version" "1.11.7"
+dayjs@^1.11.7:
+  version "1.11.7"
+  resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz"
+  integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==
 
-"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.4":
-  "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="
-  "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
-  "version" "4.3.4"
+debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
+  version "4.3.4"
+  resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
+  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
   dependencies:
-    "ms" "2.1.2"
+    ms "2.1.2"
 
-"decamelize@^1.2.0":
-  "integrity" "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="
-  "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz"
-  "version" "1.2.0"
+decamelize@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz"
+  integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
 
-"deep-is@^0.1.3":
-  "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
-  "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz"
-  "version" "0.1.4"
+deep-is@^0.1.3:
+  version "0.1.4"
+  resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz"
+  integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
 
-"deepmerge@^4.2.2":
-  "integrity" "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="
-  "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz"
-  "version" "4.3.1"
+deepmerge@^4.2.2:
+  version "4.3.1"
+  resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz"
+  integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
 
-"default-passive-events@^2.0.0":
-  "integrity" "sha512-eMtt76GpDVngZQ3ocgvRcNCklUMwID1PaNbCNxfpDXuiOXttSh0HzBbda1HU9SIUsDc02vb7g9+3I5tlqe/qMQ=="
-  "resolved" "https://registry.npmjs.org/default-passive-events/-/default-passive-events-2.0.0.tgz"
-  "version" "2.0.0"
+default-passive-events@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/default-passive-events/-/default-passive-events-2.0.0.tgz"
+  integrity sha512-eMtt76GpDVngZQ3ocgvRcNCklUMwID1PaNbCNxfpDXuiOXttSh0HzBbda1HU9SIUsDc02vb7g9+3I5tlqe/qMQ==
 
-"define-lazy-prop@^2.0.0":
-  "integrity" "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="
-  "resolved" "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz"
-  "version" "2.0.0"
+define-lazy-prop@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz"
+  integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
 
-"defined@^1.0.0":
-  "integrity" "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q=="
-  "resolved" "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz"
-  "version" "1.0.1"
+defined@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz"
+  integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==
 
-"delayed-stream@~1.0.0":
-  "integrity" "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
-  "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
-  "version" "1.0.0"
+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==
 
-"delegate@^3.1.2":
-  "integrity" "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw=="
-  "resolved" "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz"
-  "version" "3.2.0"
+delegate@^3.1.2:
+  version "3.2.0"
+  resolved "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz"
+  integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==
 
-"detective@^5.2.0":
-  "integrity" "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw=="
-  "resolved" "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz"
-  "version" "5.2.1"
+detective@^5.2.0:
+  version "5.2.1"
+  resolved "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz"
+  integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==
   dependencies:
-    "acorn-node" "^1.8.2"
-    "defined" "^1.0.0"
-    "minimist" "^1.2.6"
+    acorn-node "^1.8.2"
+    defined "^1.0.0"
+    minimist "^1.2.6"
 
-"didyoumean@^1.2.2":
-  "integrity" "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
-  "resolved" "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz"
-  "version" "1.2.2"
+didyoumean@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz"
+  integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==
 
-"dijkstrajs@^1.0.1":
-  "integrity" "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA=="
-  "resolved" "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz"
-  "version" "1.0.3"
+dijkstrajs@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz"
+  integrity sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==
 
-"dlv@^1.1.3":
-  "integrity" "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
-  "resolved" "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz"
-  "version" "1.1.3"
+dlv@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz"
+  integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==
 
-"doctrine@^3.0.0":
-  "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="
-  "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz"
-  "version" "3.0.0"
+doctrine@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz"
+  integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
   dependencies:
-    "esutils" "^2.0.2"
+    esutils "^2.0.2"
 
-"doctypes@^1.1.0":
-  "integrity" "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ=="
-  "resolved" "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz"
-  "version" "1.1.0"
+doctypes@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz"
+  integrity sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==
 
-"dot-case@^3.0.4":
-  "integrity" "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w=="
-  "resolved" "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz"
-  "version" "3.0.4"
+dot-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz"
+  integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
   dependencies:
-    "no-case" "^3.0.4"
-    "tslib" "^2.0.3"
+    no-case "^3.0.4"
+    tslib "^2.0.3"
 
-"echarts@^5.4.2":
-  "integrity" "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA=="
-  "resolved" "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz"
-  "version" "5.4.3"
+echarts@^5.4.2:
+  version "5.4.3"
+  resolved "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz"
+  integrity sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==
   dependencies:
-    "tslib" "2.3.0"
-    "zrender" "5.4.4"
+    tslib "2.3.0"
+    zrender "5.4.4"
 
-"electron-to-chromium@^1.4.411":
-  "integrity" "sha512-5VXLW4Qw89vM2WTICHua/y8v7fKGDRVa2VPOtBB9IpLvW316B+xd8yD1wTmLPY2ot/00P/qt87xdolj4aG/Lzg=="
-  "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.411.tgz"
-  "version" "1.4.411"
+electron-to-chromium@^1.4.411:
+  version "1.4.411"
+  resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.411.tgz"
+  integrity sha512-5VXLW4Qw89vM2WTICHua/y8v7fKGDRVa2VPOtBB9IpLvW316B+xd8yD1wTmLPY2ot/00P/qt87xdolj4aG/Lzg==
 
-"emoji-regex@^8.0.0":
-  "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
-  "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
-  "version" "8.0.0"
+emoji-regex@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
+  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
 
-"encode-utf8@^1.0.3":
-  "integrity" "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="
-  "resolved" "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz"
-  "version" "1.0.3"
+encode-utf8@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz"
+  integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==
 
-"error-ex@^1.3.1":
-  "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="
-  "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz"
-  "version" "1.3.2"
+error-ex@^1.3.1:
+  version "1.3.2"
+  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"
+    is-arrayish "^0.2.1"
 
-"esbuild-darwin-64@0.15.18":
-  "integrity" "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg=="
-  "resolved" "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz"
-  "version" "0.15.18"
+esbuild-android-64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz"
+  integrity sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==
 
-"esbuild@^0.15.9":
-  "integrity" "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q=="
-  "resolved" "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz"
-  "version" "0.15.18"
+esbuild-android-arm64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz"
+  integrity sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==
+
+esbuild-darwin-64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz"
+  integrity sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==
+
+esbuild-darwin-arm64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz"
+  integrity sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==
+
+esbuild-freebsd-64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz"
+  integrity sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==
+
+esbuild-freebsd-arm64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz"
+  integrity sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==
+
+esbuild-linux-32@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz"
+  integrity sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==
+
+esbuild-linux-64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz"
+  integrity sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==
+
+esbuild-linux-arm@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz"
+  integrity sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==
+
+esbuild-linux-arm64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz"
+  integrity sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==
+
+esbuild-linux-mips64le@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz"
+  integrity sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==
+
+esbuild-linux-ppc64le@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz"
+  integrity sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==
+
+esbuild-linux-riscv64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz"
+  integrity sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==
+
+esbuild-linux-s390x@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz"
+  integrity sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==
+
+esbuild-netbsd-64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz"
+  integrity sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==
+
+esbuild-openbsd-64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz"
+  integrity sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==
+
+esbuild-sunos-64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz"
+  integrity sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==
+
+esbuild-windows-32@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz"
+  integrity sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==
+
+esbuild-windows-64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz"
+  integrity sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==
+
+esbuild-windows-arm64@0.15.18:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz"
+  integrity sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==
+
+esbuild@^0.15.9:
+  version "0.15.18"
+  resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz"
+  integrity sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==
   optionalDependencies:
     "@esbuild/android-arm" "0.15.18"
     "@esbuild/linux-loong64" "0.15.18"
-    "esbuild-android-64" "0.15.18"
-    "esbuild-android-arm64" "0.15.18"
-    "esbuild-darwin-64" "0.15.18"
-    "esbuild-darwin-arm64" "0.15.18"
-    "esbuild-freebsd-64" "0.15.18"
-    "esbuild-freebsd-arm64" "0.15.18"
-    "esbuild-linux-32" "0.15.18"
-    "esbuild-linux-64" "0.15.18"
-    "esbuild-linux-arm" "0.15.18"
-    "esbuild-linux-arm64" "0.15.18"
-    "esbuild-linux-mips64le" "0.15.18"
-    "esbuild-linux-ppc64le" "0.15.18"
-    "esbuild-linux-riscv64" "0.15.18"
-    "esbuild-linux-s390x" "0.15.18"
-    "esbuild-netbsd-64" "0.15.18"
-    "esbuild-openbsd-64" "0.15.18"
-    "esbuild-sunos-64" "0.15.18"
-    "esbuild-windows-32" "0.15.18"
-    "esbuild-windows-64" "0.15.18"
-    "esbuild-windows-arm64" "0.15.18"
+    esbuild-android-64 "0.15.18"
+    esbuild-android-arm64 "0.15.18"
+    esbuild-darwin-64 "0.15.18"
+    esbuild-darwin-arm64 "0.15.18"
+    esbuild-freebsd-64 "0.15.18"
+    esbuild-freebsd-arm64 "0.15.18"
+    esbuild-linux-32 "0.15.18"
+    esbuild-linux-64 "0.15.18"
+    esbuild-linux-arm "0.15.18"
+    esbuild-linux-arm64 "0.15.18"
+    esbuild-linux-mips64le "0.15.18"
+    esbuild-linux-ppc64le "0.15.18"
+    esbuild-linux-riscv64 "0.15.18"
+    esbuild-linux-s390x "0.15.18"
+    esbuild-netbsd-64 "0.15.18"
+    esbuild-openbsd-64 "0.15.18"
+    esbuild-sunos-64 "0.15.18"
+    esbuild-windows-32 "0.15.18"
+    esbuild-windows-64 "0.15.18"
+    esbuild-windows-arm64 "0.15.18"
 
-"escalade@^3.1.1":
-  "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
-  "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz"
-  "version" "3.1.1"
+escalade@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz"
+  integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
 
-"escape-string-regexp@^1.0.5":
-  "integrity" "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
-  "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
-  "version" "1.0.5"
+escape-string-regexp@^1.0.5:
+  version "1.0.5"
+  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":
-  "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
-  "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
-  "version" "4.0.0"
+escape-string-regexp@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
+  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
 
-"eslint-config-prettier@^8.5.0":
-  "integrity" "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA=="
-  "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz"
-  "version" "8.8.0"
+eslint-config-prettier@^8.5.0:
+  version "8.8.0"
+  resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz"
+  integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==
 
-"eslint-plugin-prettier@^4.2.1":
-  "integrity" "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ=="
-  "resolved" "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz"
-  "version" "4.2.1"
+eslint-plugin-prettier@^4.2.1:
+  version "4.2.1"
+  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"
+    prettier-linter-helpers "^1.0.0"
 
-"eslint-plugin-vue@^9.6.0":
-  "integrity" "sha512-LQazDB1qkNEKejLe/b5a9VfEbtbczcOaui5lQ4Qw0tbRBbQYREyxxOV5BQgNDTqGPs9pxqiEpbMi9ywuIaF7vw=="
-  "resolved" "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.14.1.tgz"
-  "version" "9.14.1"
+eslint-plugin-vue@^9.6.0:
+  version "9.14.1"
+  resolved "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.14.1.tgz"
+  integrity sha512-LQazDB1qkNEKejLe/b5a9VfEbtbczcOaui5lQ4Qw0tbRBbQYREyxxOV5BQgNDTqGPs9pxqiEpbMi9ywuIaF7vw==
   dependencies:
     "@eslint-community/eslint-utils" "^4.3.0"
-    "natural-compare" "^1.4.0"
-    "nth-check" "^2.0.1"
-    "postcss-selector-parser" "^6.0.9"
-    "semver" "^7.3.5"
-    "vue-eslint-parser" "^9.3.0"
-    "xml-name-validator" "^4.0.0"
+    natural-compare "^1.4.0"
+    nth-check "^2.0.1"
+    postcss-selector-parser "^6.0.9"
+    semver "^7.3.5"
+    vue-eslint-parser "^9.3.0"
+    xml-name-validator "^4.0.0"
 
-"eslint-scope@^7.1.1", "eslint-scope@^7.2.0":
-  "integrity" "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw=="
-  "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz"
-  "version" "7.2.0"
+eslint-scope@^7.1.1, eslint-scope@^7.2.0:
+  version "7.2.0"
+  resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz"
+  integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==
   dependencies:
-    "esrecurse" "^4.3.0"
-    "estraverse" "^5.2.0"
+    esrecurse "^4.3.0"
+    estraverse "^5.2.0"
 
-"eslint-visitor-keys@^1.0.0":
-  "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
-  "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz"
-  "version" "1.3.0"
+eslint-visitor-keys@^1.0.0:
+  version "1.3.0"
+  resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz"
+  integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
 
-"eslint-visitor-keys@^3.3.0":
-  "integrity" "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA=="
-  "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz"
-  "version" "3.4.1"
+eslint-visitor-keys@^3.3.0:
+  version "3.4.1"
+  resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz"
+  integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==
 
-"eslint-visitor-keys@^3.4.1":
-  "integrity" "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA=="
-  "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz"
-  "version" "3.4.1"
+eslint-visitor-keys@^3.4.1:
+  version "3.4.1"
+  resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz"
+  integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==
 
-"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^6.2.0 || ^7.0.0 || ^8.0.0", "eslint@^8.26.0", "eslint@>= 4.12.1", "eslint@>=6.0.0", "eslint@>=7.0.0", "eslint@>=7.28.0":
-  "integrity" "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q=="
-  "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz"
-  "version" "8.41.0"
+eslint@^8.26.0:
+  version "8.41.0"
+  resolved "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz"
+  integrity sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==
   dependencies:
     "@eslint-community/eslint-utils" "^4.2.0"
     "@eslint-community/regexpp" "^4.4.0"
@@ -1236,1709 +1341,1709 @@
     "@humanwhocodes/config-array" "^0.11.8"
     "@humanwhocodes/module-importer" "^1.0.1"
     "@nodelib/fs.walk" "^1.2.8"
-    "ajv" "^6.10.0"
-    "chalk" "^4.0.0"
-    "cross-spawn" "^7.0.2"
-    "debug" "^4.3.2"
-    "doctrine" "^3.0.0"
-    "escape-string-regexp" "^4.0.0"
-    "eslint-scope" "^7.2.0"
-    "eslint-visitor-keys" "^3.4.1"
-    "espree" "^9.5.2"
-    "esquery" "^1.4.2"
-    "esutils" "^2.0.2"
-    "fast-deep-equal" "^3.1.3"
-    "file-entry-cache" "^6.0.1"
-    "find-up" "^5.0.0"
-    "glob-parent" "^6.0.2"
-    "globals" "^13.19.0"
-    "graphemer" "^1.4.0"
-    "ignore" "^5.2.0"
-    "import-fresh" "^3.0.0"
-    "imurmurhash" "^0.1.4"
-    "is-glob" "^4.0.0"
-    "is-path-inside" "^3.0.3"
-    "js-yaml" "^4.1.0"
-    "json-stable-stringify-without-jsonify" "^1.0.1"
-    "levn" "^0.4.1"
-    "lodash.merge" "^4.6.2"
-    "minimatch" "^3.1.2"
-    "natural-compare" "^1.4.0"
-    "optionator" "^0.9.1"
-    "strip-ansi" "^6.0.1"
-    "strip-json-comments" "^3.1.0"
-    "text-table" "^0.2.0"
+    ajv "^6.10.0"
+    chalk "^4.0.0"
+    cross-spawn "^7.0.2"
+    debug "^4.3.2"
+    doctrine "^3.0.0"
+    escape-string-regexp "^4.0.0"
+    eslint-scope "^7.2.0"
+    eslint-visitor-keys "^3.4.1"
+    espree "^9.5.2"
+    esquery "^1.4.2"
+    esutils "^2.0.2"
+    fast-deep-equal "^3.1.3"
+    file-entry-cache "^6.0.1"
+    find-up "^5.0.0"
+    glob-parent "^6.0.2"
+    globals "^13.19.0"
+    graphemer "^1.4.0"
+    ignore "^5.2.0"
+    import-fresh "^3.0.0"
+    imurmurhash "^0.1.4"
+    is-glob "^4.0.0"
+    is-path-inside "^3.0.3"
+    js-yaml "^4.1.0"
+    json-stable-stringify-without-jsonify "^1.0.1"
+    levn "^0.4.1"
+    lodash.merge "^4.6.2"
+    minimatch "^3.1.2"
+    natural-compare "^1.4.0"
+    optionator "^0.9.1"
+    strip-ansi "^6.0.1"
+    strip-json-comments "^3.1.0"
+    text-table "^0.2.0"
 
-"espree@^9.3.1", "espree@^9.5.2":
-  "integrity" "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw=="
-  "resolved" "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz"
-  "version" "9.5.2"
+espree@^9.3.1, espree@^9.5.2:
+  version "9.5.2"
+  resolved "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz"
+  integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==
   dependencies:
-    "acorn" "^8.8.0"
-    "acorn-jsx" "^5.3.2"
-    "eslint-visitor-keys" "^3.4.1"
+    acorn "^8.8.0"
+    acorn-jsx "^5.3.2"
+    eslint-visitor-keys "^3.4.1"
 
-"esquery@^1.4.0", "esquery@^1.4.2":
-  "integrity" "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg=="
-  "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz"
-  "version" "1.5.0"
+esquery@^1.4.0, esquery@^1.4.2:
+  version "1.5.0"
+  resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz"
+  integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
   dependencies:
-    "estraverse" "^5.1.0"
+    estraverse "^5.1.0"
 
-"esrecurse@^4.3.0":
-  "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="
-  "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz"
-  "version" "4.3.0"
+esrecurse@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz"
+  integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
   dependencies:
-    "estraverse" "^5.2.0"
+    estraverse "^5.2.0"
 
-"estraverse@^5.1.0", "estraverse@^5.2.0":
-  "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
-  "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
-  "version" "5.3.0"
+estraverse@^5.1.0, estraverse@^5.2.0:
+  version "5.3.0"
+  resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
+  integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
 
-"estree-walker@^2.0.2":
-  "integrity" "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
-  "resolved" "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz"
-  "version" "2.0.2"
+estree-walker@^2.0.2:
+  version "2.0.2"
+  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":
-  "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
-  "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
-  "version" "2.0.3"
+esutils@^2.0.2:
+  version "2.0.3"
+  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":
-  "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
-  "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
-  "version" "3.1.3"
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+  version "3.1.3"
+  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":
-  "integrity" "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw=="
-  "resolved" "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz"
-  "version" "1.3.0"
+fast-diff@^1.1.2:
+  version "1.3.0"
+  resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz"
+  integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==
 
-"fast-glob@^3.2.12", "fast-glob@^3.2.7":
-  "integrity" "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w=="
-  "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz"
-  "version" "3.2.12"
+fast-glob@^3.2.12, fast-glob@^3.2.7:
+  version "3.2.12"
+  resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz"
+  integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
   dependencies:
     "@nodelib/fs.stat" "^2.0.2"
     "@nodelib/fs.walk" "^1.2.3"
-    "glob-parent" "^5.1.2"
-    "merge2" "^1.3.0"
-    "micromatch" "^4.0.4"
+    glob-parent "^5.1.2"
+    merge2 "^1.3.0"
+    micromatch "^4.0.4"
 
-"fast-json-stable-stringify@^2.0.0":
-  "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
-  "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
-  "version" "2.1.0"
+fast-json-stable-stringify@^2.0.0:
+  version "2.1.0"
+  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":
-  "integrity" "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
-  "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
-  "version" "2.0.6"
+fast-levenshtein@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
+  integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
 
-"fastq@^1.6.0":
-  "integrity" "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw=="
-  "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz"
-  "version" "1.15.0"
+fastq@^1.6.0:
+  version "1.15.0"
+  resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz"
+  integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
   dependencies:
-    "reusify" "^1.0.4"
+    reusify "^1.0.4"
 
-"file-entry-cache@^6.0.1":
-  "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="
-  "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz"
-  "version" "6.0.1"
+file-entry-cache@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz"
+  integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
   dependencies:
-    "flat-cache" "^3.0.4"
+    flat-cache "^3.0.4"
 
-"fill-range@^7.0.1":
-  "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ=="
-  "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz"
-  "version" "7.0.1"
+fill-range@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz"
+  integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
   dependencies:
-    "to-regex-range" "^5.0.1"
+    to-regex-range "^5.0.1"
 
-"find-up@^4.1.0":
-  "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="
-  "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz"
-  "version" "4.1.0"
+find-up@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz"
+  integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
   dependencies:
-    "locate-path" "^5.0.0"
-    "path-exists" "^4.0.0"
+    locate-path "^5.0.0"
+    path-exists "^4.0.0"
 
-"find-up@^5.0.0":
-  "integrity" "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="
-  "resolved" "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz"
-  "version" "5.0.0"
+find-up@^5.0.0:
+  version "5.0.0"
+  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"
-    "path-exists" "^4.0.0"
+    locate-path "^6.0.0"
+    path-exists "^4.0.0"
 
-"flat-cache@^3.0.4":
-  "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg=="
-  "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz"
-  "version" "3.0.4"
+flat-cache@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz"
+  integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
   dependencies:
-    "flatted" "^3.1.0"
-    "rimraf" "^3.0.2"
+    flatted "^3.1.0"
+    rimraf "^3.0.2"
 
-"flatted@^3.1.0":
-  "integrity" "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ=="
-  "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz"
-  "version" "3.2.7"
+flatted@^3.1.0:
+  version "3.2.7"
+  resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz"
+  integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
 
-"follow-redirects@^1.15.0":
-  "integrity" "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
-  "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz"
-  "version" "1.15.2"
+follow-redirects@^1.15.0:
+  version "1.15.2"
+  resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz"
+  integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
 
-"form-data@^4.0.0":
-  "integrity" "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww=="
-  "resolved" "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz"
-  "version" "4.0.0"
+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"
+    asynckit "^0.4.0"
+    combined-stream "^1.0.8"
+    mime-types "^2.1.12"
 
-"fraction.js@^4.2.0":
-  "integrity" "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA=="
-  "resolved" "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz"
-  "version" "4.2.0"
+fraction.js@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz"
+  integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==
 
-"fs-extra@^10.0.0":
-  "integrity" "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="
-  "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz"
-  "version" "10.1.0"
+fs-extra@^10.0.0:
+  version "10.1.0"
+  resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz"
+  integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
   dependencies:
-    "graceful-fs" "^4.2.0"
-    "jsonfile" "^6.0.1"
-    "universalify" "^2.0.0"
+    graceful-fs "^4.2.0"
+    jsonfile "^6.0.1"
+    universalify "^2.0.0"
 
-"fs.realpath@^1.0.0":
-  "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
-  "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
-  "version" "1.0.0"
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
+  integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
 
-"fsevents@~2.3.2":
-  "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="
-  "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz"
-  "version" "2.3.2"
+fsevents@~2.3.2:
+  version "2.3.2"
+  resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz"
+  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
 
-"function-bind@^1.1.1":
-  "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
-  "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
-  "version" "1.1.1"
+function-bind@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
+  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
 
-"gensync@^1.0.0-beta.2":
-  "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
-  "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz"
-  "version" "1.0.0-beta.2"
+gensync@^1.0.0-beta.2:
+  version "1.0.0-beta.2"
+  resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz"
+  integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
 
-"get-caller-file@^2.0.1", "get-caller-file@^2.0.5":
-  "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
-  "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"
-  "version" "2.0.5"
+get-caller-file@^2.0.1, get-caller-file@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"
+  integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
 
-"get-intrinsic@^1.0.2":
-  "integrity" "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw=="
-  "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz"
-  "version" "1.2.1"
+get-intrinsic@^1.0.2:
+  version "1.2.1"
+  resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz"
+  integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==
   dependencies:
-    "function-bind" "^1.1.1"
-    "has" "^1.0.3"
-    "has-proto" "^1.0.1"
-    "has-symbols" "^1.0.3"
+    function-bind "^1.1.1"
+    has "^1.0.3"
+    has-proto "^1.0.1"
+    has-symbols "^1.0.3"
 
-"glob-parent@^5.1.2":
-  "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="
-  "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
-  "version" "5.1.2"
+glob-parent@^5.1.2:
+  version "5.1.2"
+  resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
+  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
   dependencies:
-    "is-glob" "^4.0.1"
+    is-glob "^4.0.1"
 
-"glob-parent@^6.0.1", "glob-parent@^6.0.2":
-  "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="
-  "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
-  "version" "6.0.2"
+glob-parent@^6.0.1, glob-parent@^6.0.2:
+  version "6.0.2"
+  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"
+    is-glob "^4.0.3"
 
-"glob-parent@~5.1.2":
-  "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="
-  "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
-  "version" "5.1.2"
+glob-parent@~5.1.2:
+  version "5.1.2"
+  resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
+  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
   dependencies:
-    "is-glob" "^4.0.1"
+    is-glob "^4.0.1"
 
-"glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.7":
-  "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="
-  "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz"
-  "version" "7.2.3"
+glob@^7.1.2, glob@^7.1.3, glob@^7.1.7:
+  version "7.2.3"
+  resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz"
+  integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
   dependencies:
-    "fs.realpath" "^1.0.0"
-    "inflight" "^1.0.4"
-    "inherits" "2"
-    "minimatch" "^3.1.1"
-    "once" "^1.3.0"
-    "path-is-absolute" "^1.0.0"
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.1.1"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
 
-"globals@^11.1.0":
-  "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
-  "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"
-  "version" "11.12.0"
+globals@^11.1.0:
+  version "11.12.0"
+  resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"
+  integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
 
-"globals@^13.19.0":
-  "integrity" "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ=="
-  "resolved" "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz"
-  "version" "13.20.0"
+globals@^13.19.0:
+  version "13.20.0"
+  resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz"
+  integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==
   dependencies:
-    "type-fest" "^0.20.2"
+    type-fest "^0.20.2"
 
-"good-listener@^1.2.2":
-  "integrity" "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw=="
-  "resolved" "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz"
-  "version" "1.2.2"
+good-listener@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz"
+  integrity sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==
   dependencies:
-    "delegate" "^3.1.2"
+    delegate "^3.1.2"
 
-"graceful-fs@^4.1.6", "graceful-fs@^4.2.0":
-  "integrity" "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
-  "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz"
-  "version" "4.2.11"
+graceful-fs@^4.1.6, graceful-fs@^4.2.0:
+  version "4.2.11"
+  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":
-  "integrity" "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
-  "resolved" "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz"
-  "version" "1.4.0"
+graphemer@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz"
+  integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
 
-"has-flag@^3.0.0":
-  "integrity" "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
-  "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"
-  "version" "3.0.0"
+has-flag@^3.0.0:
+  version "3.0.0"
+  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":
-  "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
-  "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
-  "version" "4.0.0"
+has-flag@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
+  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
 
-"has-proto@^1.0.1":
-  "integrity" "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
-  "resolved" "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz"
-  "version" "1.0.1"
+has-proto@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz"
+  integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
 
-"has-symbols@^1.0.2", "has-symbols@^1.0.3":
-  "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
-  "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz"
-  "version" "1.0.3"
+has-symbols@^1.0.2, has-symbols@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz"
+  integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
 
-"has-tostringtag@^1.0.0":
-  "integrity" "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ=="
-  "resolved" "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz"
-  "version" "1.0.0"
+has-tostringtag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz"
+  integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
   dependencies:
-    "has-symbols" "^1.0.2"
+    has-symbols "^1.0.2"
 
-"has@^1.0.3":
-  "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw=="
-  "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz"
-  "version" "1.0.3"
+has@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz"
+  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
   dependencies:
-    "function-bind" "^1.1.1"
+    function-bind "^1.1.1"
 
-"hex-color-regex@^1.1.0":
-  "integrity" "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ=="
-  "resolved" "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz"
-  "version" "1.1.0"
+hex-color-regex@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz"
+  integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==
 
-"hsl-regex@^1.0.0":
-  "integrity" "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A=="
-  "resolved" "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz"
-  "version" "1.0.0"
+hsl-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz"
+  integrity sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==
 
-"hsla-regex@^1.0.0":
-  "integrity" "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA=="
-  "resolved" "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz"
-  "version" "1.0.0"
+hsla-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz"
+  integrity sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==
 
-"html-tags@^3.1.0":
-  "integrity" "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ=="
-  "resolved" "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz"
-  "version" "3.3.1"
+html-tags@^3.1.0:
+  version "3.3.1"
+  resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz"
+  integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==
 
-"html2canvas@^1.4.1":
-  "integrity" "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA=="
-  "resolved" "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz"
-  "version" "1.4.1"
+html2canvas@^1.4.1:
+  version "1.4.1"
+  resolved "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz"
+  integrity sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==
   dependencies:
-    "css-line-break" "^2.1.0"
-    "text-segmentation" "^1.0.3"
+    css-line-break "^2.1.0"
+    text-segmentation "^1.0.3"
 
-"ignore@^5.2.0":
-  "integrity" "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ=="
-  "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz"
-  "version" "5.2.4"
+ignore@^5.2.0:
+  version "5.2.4"
+  resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz"
+  integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
 
-"image-conversion@^2.1.1":
-  "integrity" "sha512-hnMOmP7q2jxA+52FZ+wHNhg3fdFRlgfngsQH2JQHEQkafY7tj/8F15e6Rv/RxDegc872jvyaRHwMbkTZK1Cjbg=="
-  "resolved" "https://registry.npmjs.org/image-conversion/-/image-conversion-2.1.1.tgz"
-  "version" "2.1.1"
+image-conversion@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.npmjs.org/image-conversion/-/image-conversion-2.1.1.tgz"
+  integrity sha512-hnMOmP7q2jxA+52FZ+wHNhg3fdFRlgfngsQH2JQHEQkafY7tj/8F15e6Rv/RxDegc872jvyaRHwMbkTZK1Cjbg==
 
-"immutable@^4.0.0":
-  "integrity" "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg=="
-  "resolved" "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz"
-  "version" "4.3.0"
+immutable@^4.0.0:
+  version "4.3.0"
+  resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz"
+  integrity sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==
 
-"import-fresh@^3.0.0", "import-fresh@^3.2.1":
-  "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw=="
-  "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz"
-  "version" "3.3.0"
+import-fresh@^3.0.0, import-fresh@^3.2.1:
+  version "3.3.0"
+  resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz"
+  integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
   dependencies:
-    "parent-module" "^1.0.0"
-    "resolve-from" "^4.0.0"
+    parent-module "^1.0.0"
+    resolve-from "^4.0.0"
 
-"imurmurhash@^0.1.4":
-  "integrity" "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="
-  "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
-  "version" "0.1.4"
+imurmurhash@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
+  integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
 
-"inflight@^1.0.4":
-  "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="
-  "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
-  "version" "1.0.6"
+inflight@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
+  integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
   dependencies:
-    "once" "^1.3.0"
-    "wrappy" "1"
+    once "^1.3.0"
+    wrappy "1"
 
-"inherits@2":
-  "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-  "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
-  "version" "2.0.4"
+inherits@2:
+  version "2.0.4"
+  resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
+  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
 
-"is-arrayish@^0.2.1":
-  "integrity" "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
-  "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz"
-  "version" "0.2.1"
+is-arrayish@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz"
+  integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
 
-"is-arrayish@^0.3.1":
-  "integrity" "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
-  "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz"
-  "version" "0.3.2"
+is-arrayish@^0.3.1:
+  version "0.3.2"
+  resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz"
+  integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
 
-"is-binary-path@~2.1.0":
-  "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="
-  "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz"
-  "version" "2.1.0"
+is-binary-path@~2.1.0:
+  version "2.1.0"
+  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"
+    binary-extensions "^2.0.0"
 
-"is-color-stop@^1.1.0":
-  "integrity" "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA=="
-  "resolved" "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz"
-  "version" "1.1.0"
+is-color-stop@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz"
+  integrity sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==
   dependencies:
-    "css-color-names" "^0.0.4"
-    "hex-color-regex" "^1.1.0"
-    "hsl-regex" "^1.0.0"
-    "hsla-regex" "^1.0.0"
-    "rgb-regex" "^1.0.1"
-    "rgba-regex" "^1.0.0"
+    css-color-names "^0.0.4"
+    hex-color-regex "^1.1.0"
+    hsl-regex "^1.0.0"
+    hsla-regex "^1.0.0"
+    rgb-regex "^1.0.1"
+    rgba-regex "^1.0.0"
 
-"is-core-module@^2.11.0":
-  "integrity" "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg=="
-  "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz"
-  "version" "2.12.1"
+is-core-module@^2.11.0:
+  version "2.12.1"
+  resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz"
+  integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
   dependencies:
-    "has" "^1.0.3"
+    has "^1.0.3"
 
-"is-docker@^2.0.0", "is-docker@^2.1.1":
-  "integrity" "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="
-  "resolved" "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz"
-  "version" "2.2.1"
+is-docker@^2.0.0, is-docker@^2.1.1:
+  version "2.2.1"
+  resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz"
+  integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
 
-"is-expression@^4.0.0":
-  "integrity" "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A=="
-  "resolved" "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz"
-  "version" "4.0.0"
+is-expression@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz"
+  integrity sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==
   dependencies:
-    "acorn" "^7.1.1"
-    "object-assign" "^4.1.1"
+    acorn "^7.1.1"
+    object-assign "^4.1.1"
 
-"is-extglob@^2.1.1":
-  "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
-  "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
-  "version" "2.1.1"
+is-extglob@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
+  integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
 
-"is-fullwidth-code-point@^3.0.0":
-  "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
-  "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"
-  "version" "3.0.0"
+is-fullwidth-code-point@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"
+  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
 
-"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3", "is-glob@~4.0.1":
-  "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="
-  "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
-  "version" "4.0.3"
+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.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
+  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
   dependencies:
-    "is-extglob" "^2.1.1"
+    is-extglob "^2.1.1"
 
-"is-number@^7.0.0":
-  "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
-  "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
-  "version" "7.0.0"
+is-number@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
+  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
 
-"is-path-inside@^3.0.3":
-  "integrity" "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="
-  "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz"
-  "version" "3.0.3"
+is-path-inside@^3.0.3:
+  version "3.0.3"
+  resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz"
+  integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
 
-"is-promise@^2.0.0":
-  "integrity" "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
-  "resolved" "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz"
-  "version" "2.2.2"
+is-promise@^2.0.0:
+  version "2.2.2"
+  resolved "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz"
+  integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==
 
-"is-regex@^1.0.3":
-  "integrity" "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg=="
-  "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz"
-  "version" "1.1.4"
+is-regex@^1.0.3:
+  version "1.1.4"
+  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"
-    "has-tostringtag" "^1.0.0"
+    call-bind "^1.0.2"
+    has-tostringtag "^1.0.0"
 
-"is-wsl@^2.2.0":
-  "integrity" "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="
-  "resolved" "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz"
-  "version" "2.2.0"
+is-wsl@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz"
+  integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
   dependencies:
-    "is-docker" "^2.0.0"
+    is-docker "^2.0.0"
 
-"isexe@^2.0.0":
-  "integrity" "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
-  "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
-  "version" "2.0.0"
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
+  integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
 
-"js-md5@^0.7.3":
-  "integrity" "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ=="
-  "resolved" "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz"
-  "version" "0.7.3"
+js-md5@^0.7.3:
+  version "0.7.3"
+  resolved "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz"
+  integrity sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==
 
-"js-stringify@^1.0.2":
-  "integrity" "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g=="
-  "resolved" "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz"
-  "version" "1.0.2"
+js-stringify@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz"
+  integrity sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==
 
-"js-tokens@^4.0.0":
-  "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-  "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
-  "version" "4.0.0"
+js-tokens@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
+  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
 
-"js-yaml@^4.1.0":
-  "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="
-  "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz"
-  "version" "4.1.0"
+js-yaml@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz"
+  integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
   dependencies:
-    "argparse" "^2.0.1"
+    argparse "^2.0.1"
 
-"jsesc@^2.5.1":
-  "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
-  "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz"
-  "version" "2.5.2"
+jsesc@^2.5.1:
+  version "2.5.2"
+  resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz"
+  integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
 
-"json-parse-even-better-errors@^2.3.0":
-  "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
-  "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz"
-  "version" "2.3.1"
+json-parse-even-better-errors@^2.3.0:
+  version "2.3.1"
+  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":
-  "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
-  "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"
-  "version" "0.4.1"
+json-schema-traverse@^0.4.1:
+  version "0.4.1"
+  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":
-  "integrity" "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
-  "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
-  "version" "1.0.1"
+json-stable-stringify-without-jsonify@^1.0.1:
+  version "1.0.1"
+  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@^2.2.2":
-  "integrity" "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="
-  "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz"
-  "version" "2.2.3"
+json5@^2.2.2:
+  version "2.2.3"
+  resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz"
+  integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
 
-"jsonfile@^6.0.1":
-  "integrity" "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ=="
-  "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz"
-  "version" "6.1.0"
+jsonfile@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz"
+  integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
   dependencies:
-    "universalify" "^2.0.0"
+    universalify "^2.0.0"
   optionalDependencies:
-    "graceful-fs" "^4.1.6"
+    graceful-fs "^4.1.6"
 
-"jsqr@^1.4.0":
-  "integrity" "sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A=="
-  "resolved" "https://registry.npmjs.org/jsqr/-/jsqr-1.4.0.tgz"
-  "version" "1.4.0"
+jsqr@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.npmjs.org/jsqr/-/jsqr-1.4.0.tgz"
+  integrity sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A==
 
-"jstransformer@1.0.0":
-  "integrity" "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A=="
-  "resolved" "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz"
-  "version" "1.0.0"
+jstransformer@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz"
+  integrity sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==
   dependencies:
-    "is-promise" "^2.0.0"
-    "promise" "^7.0.1"
+    is-promise "^2.0.0"
+    promise "^7.0.1"
 
-"klinecharts@^8.6.3":
-  "integrity" "sha512-hGDtWiMNywEDneZFmt+vZ6tOYutCDWV5FPBcXcn7L8kGwe73Q5yJayk8UzP9pIQSBWyxswWIySKh/BVFA6GhuQ=="
-  "resolved" "https://registry.npmjs.org/klinecharts/-/klinecharts-8.6.3.tgz"
-  "version" "8.6.3"
+klinecharts@^8.6.3:
+  version "8.6.3"
+  resolved "https://registry.npmjs.org/klinecharts/-/klinecharts-8.6.3.tgz"
+  integrity sha512-hGDtWiMNywEDneZFmt+vZ6tOYutCDWV5FPBcXcn7L8kGwe73Q5yJayk8UzP9pIQSBWyxswWIySKh/BVFA6GhuQ==
 
-"levn@^0.4.1":
-  "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="
-  "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz"
-  "version" "0.4.1"
+levn@^0.4.1:
+  version "0.4.1"
+  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"
-    "type-check" "~0.4.0"
+    prelude-ls "^1.2.1"
+    type-check "~0.4.0"
 
-"lilconfig@^2.0.5":
-  "integrity" "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="
-  "resolved" "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz"
-  "version" "2.1.0"
+lilconfig@^2.0.5:
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz"
+  integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
 
-"lines-and-columns@^1.1.6":
-  "integrity" "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
-  "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz"
-  "version" "1.2.4"
+lines-and-columns@^1.1.6:
+  version "1.2.4"
+  resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz"
+  integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
 
-"local-pkg@^0.4.2", "local-pkg@^0.4.3":
-  "integrity" "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g=="
-  "resolved" "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz"
-  "version" "0.4.3"
+local-pkg@^0.4.2, local-pkg@^0.4.3:
+  version "0.4.3"
+  resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz"
+  integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==
 
-"locate-path@^5.0.0":
-  "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="
-  "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz"
-  "version" "5.0.0"
+locate-path@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz"
+  integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
   dependencies:
-    "p-locate" "^4.1.0"
+    p-locate "^4.1.0"
 
-"locate-path@^6.0.0":
-  "integrity" "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="
-  "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz"
-  "version" "6.0.0"
+locate-path@^6.0.0:
+  version "6.0.0"
+  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"
+    p-locate "^5.0.0"
 
-"lodash.merge@^4.6.2":
-  "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
-  "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz"
-  "version" "4.6.2"
+lodash.merge@^4.6.2:
+  version "4.6.2"
+  resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz"
+  integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
 
-"lodash.topath@^4.5.2":
-  "integrity" "sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg=="
-  "resolved" "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz"
-  "version" "4.5.2"
+lodash.topath@^4.5.2:
+  version "4.5.2"
+  resolved "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz"
+  integrity sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==
 
-"lodash@^4.17.21":
-  "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
-  "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
-  "version" "4.17.21"
+lodash@^4.17.21:
+  version "4.17.21"
+  resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
+  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
 
-"lower-case@^2.0.2":
-  "integrity" "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg=="
-  "resolved" "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz"
-  "version" "2.0.2"
+lower-case@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz"
+  integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
   dependencies:
-    "tslib" "^2.0.3"
+    tslib "^2.0.3"
 
-"lru-cache@^5.1.1":
-  "integrity" "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="
-  "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz"
-  "version" "5.1.1"
+lru-cache@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz"
+  integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
   dependencies:
-    "yallist" "^3.0.2"
+    yallist "^3.0.2"
 
-"lru-cache@^6.0.0":
-  "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="
-  "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
-  "version" "6.0.0"
+lru-cache@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
+  integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
   dependencies:
-    "yallist" "^4.0.0"
+    yallist "^4.0.0"
 
-"magic-string-ast@^0.1.2":
-  "integrity" "sha512-P53AZrzq7hclCU6HWj88xNZHmP15DKjMmK/vBytO1qnpYP3ul4IEZlyCE0aU3JRnmgWmZPmoTKj4Bls7v0pMyA=="
-  "resolved" "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-0.1.2.tgz"
-  "version" "0.1.2"
+magic-string-ast@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-0.1.2.tgz"
+  integrity sha512-P53AZrzq7hclCU6HWj88xNZHmP15DKjMmK/vBytO1qnpYP3ul4IEZlyCE0aU3JRnmgWmZPmoTKj4Bls7v0pMyA==
   dependencies:
-    "magic-string" "^0.30.0"
+    magic-string "^0.30.0"
 
-"magic-string@^0.27.0":
-  "integrity" "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA=="
-  "resolved" "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz"
-  "version" "0.27.0"
+magic-string@^0.27.0:
+  version "0.27.0"
+  resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz"
+  integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==
   dependencies:
     "@jridgewell/sourcemap-codec" "^1.4.13"
 
-"magic-string@^0.30.0":
-  "integrity" "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ=="
-  "resolved" "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz"
-  "version" "0.30.0"
+magic-string@^0.30.0:
+  version "0.30.0"
+  resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz"
+  integrity sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==
   dependencies:
     "@jridgewell/sourcemap-codec" "^1.4.13"
 
-"merge2@^1.3.0":
-  "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
-  "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
-  "version" "1.4.1"
+merge2@^1.3.0:
+  version "1.4.1"
+  resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
+  integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
 
-"micromatch@^4.0.4":
-  "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA=="
-  "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz"
-  "version" "4.0.5"
+micromatch@^4.0.4:
+  version "4.0.5"
+  resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz"
+  integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
   dependencies:
-    "braces" "^3.0.2"
-    "picomatch" "^2.3.1"
+    braces "^3.0.2"
+    picomatch "^2.3.1"
 
-"mime-db@1.52.0":
-  "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
-  "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
-  "version" "1.52.0"
+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":
-  "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="
-  "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz"
-  "version" "2.1.35"
+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"
+    mime-db "1.52.0"
 
-"minimatch@^3.0.5", "minimatch@^3.1.1", "minimatch@^3.1.2":
-  "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="
-  "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
-  "version" "3.1.2"
+minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
+  integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
   dependencies:
-    "brace-expansion" "^1.1.7"
+    brace-expansion "^1.1.7"
 
-"minimatch@^5.1.1":
-  "integrity" "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="
-  "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz"
-  "version" "5.1.6"
+minimatch@^5.1.1:
+  version "5.1.6"
+  resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz"
+  integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
   dependencies:
-    "brace-expansion" "^2.0.1"
+    brace-expansion "^2.0.1"
 
-"minimist@^1.2.6":
-  "integrity" "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
-  "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz"
-  "version" "1.2.8"
+minimist@^1.2.6:
+  version "1.2.8"
+  resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz"
+  integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
 
-"modern-normalize@^1.1.0":
-  "integrity" "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA=="
-  "resolved" "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz"
-  "version" "1.1.0"
+modern-normalize@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz"
+  integrity sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==
 
-"ms@2.1.2":
-  "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-  "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
-  "version" "2.1.2"
+ms@2.1.2:
+  version "2.1.2"
+  resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
 
-"nanoid@^3.3.6":
-  "integrity" "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA=="
-  "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz"
-  "version" "3.3.6"
+nanoid@^3.3.6:
+  version "3.3.6"
+  resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz"
+  integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==
 
-"natural-compare@^1.4.0":
-  "integrity" "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
-  "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
-  "version" "1.4.0"
+natural-compare@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
+  integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
 
-"no-case@^3.0.4":
-  "integrity" "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg=="
-  "resolved" "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz"
-  "version" "3.0.4"
+no-case@^3.0.4:
+  version "3.0.4"
+  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"
+    lower-case "^2.0.2"
+    tslib "^2.0.3"
 
-"node-emoji@^1.11.0":
-  "integrity" "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A=="
-  "resolved" "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz"
-  "version" "1.11.0"
+node-emoji@^1.11.0:
+  version "1.11.0"
+  resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz"
+  integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==
   dependencies:
-    "lodash" "^4.17.21"
+    lodash "^4.17.21"
 
-"node-releases@^2.0.12":
-  "integrity" "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ=="
-  "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz"
-  "version" "2.0.12"
+node-releases@^2.0.12:
+  version "2.0.12"
+  resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz"
+  integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==
 
-"normalize-path@^3.0.0", "normalize-path@~3.0.0":
-  "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
-  "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"
-  "version" "3.0.0"
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"
+  integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
 
-"normalize-range@^0.1.2":
-  "integrity" "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="
-  "resolved" "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz"
-  "version" "0.1.2"
+normalize-range@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz"
+  integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
 
-"nth-check@^2.0.1":
-  "integrity" "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="
-  "resolved" "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz"
-  "version" "2.1.1"
+nth-check@^2.0.1:
+  version "2.1.1"
+  resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz"
+  integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
   dependencies:
-    "boolbase" "^1.0.0"
+    boolbase "^1.0.0"
 
-"num2fraction@^1.2.2":
-  "integrity" "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg=="
-  "resolved" "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz"
-  "version" "1.2.2"
+num2fraction@^1.2.2:
+  version "1.2.2"
+  resolved "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz"
+  integrity sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==
 
-"object-assign@^4.1.1":
-  "integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
-  "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
-  "version" "4.1.1"
+object-assign@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
+  integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
 
-"object-hash@^2.2.0":
-  "integrity" "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
-  "resolved" "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz"
-  "version" "2.2.0"
+object-hash@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz"
+  integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==
 
-"object-inspect@^1.9.0":
-  "integrity" "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
-  "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz"
-  "version" "1.12.3"
+object-inspect@^1.9.0:
+  version "1.12.3"
+  resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz"
+  integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
 
-"once@^1.3.0":
-  "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="
-  "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz"
-  "version" "1.4.0"
+once@^1.3.0:
+  version "1.4.0"
+  resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz"
+  integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
   dependencies:
-    "wrappy" "1"
+    wrappy "1"
 
-"open@^8.4.0":
-  "integrity" "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="
-  "resolved" "https://registry.npmjs.org/open/-/open-8.4.2.tgz"
-  "version" "8.4.2"
+open@^8.4.0:
+  version "8.4.2"
+  resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz"
+  integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==
   dependencies:
-    "define-lazy-prop" "^2.0.0"
-    "is-docker" "^2.1.1"
-    "is-wsl" "^2.2.0"
+    define-lazy-prop "^2.0.0"
+    is-docker "^2.1.1"
+    is-wsl "^2.2.0"
 
-"optionator@^0.9.1":
-  "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw=="
-  "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz"
-  "version" "0.9.1"
+optionator@^0.9.1:
+  version "0.9.1"
+  resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz"
+  integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
   dependencies:
-    "deep-is" "^0.1.3"
-    "fast-levenshtein" "^2.0.6"
-    "levn" "^0.4.1"
-    "prelude-ls" "^1.2.1"
-    "type-check" "^0.4.0"
-    "word-wrap" "^1.2.3"
+    deep-is "^0.1.3"
+    fast-levenshtein "^2.0.6"
+    levn "^0.4.1"
+    prelude-ls "^1.2.1"
+    type-check "^0.4.0"
+    word-wrap "^1.2.3"
 
-"p-limit@^2.2.0":
-  "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="
-  "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz"
-  "version" "2.3.0"
+p-limit@^2.2.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz"
+  integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
   dependencies:
-    "p-try" "^2.0.0"
+    p-try "^2.0.0"
 
-"p-limit@^3.0.2":
-  "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="
-  "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz"
-  "version" "3.1.0"
+p-limit@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz"
+  integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
   dependencies:
-    "yocto-queue" "^0.1.0"
+    yocto-queue "^0.1.0"
 
-"p-locate@^4.1.0":
-  "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="
-  "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz"
-  "version" "4.1.0"
+p-locate@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz"
+  integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
   dependencies:
-    "p-limit" "^2.2.0"
+    p-limit "^2.2.0"
 
-"p-locate@^5.0.0":
-  "integrity" "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="
-  "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz"
-  "version" "5.0.0"
+p-locate@^5.0.0:
+  version "5.0.0"
+  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"
+    p-limit "^3.0.2"
 
-"p-try@^2.0.0":
-  "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
-  "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz"
-  "version" "2.2.0"
+p-try@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz"
+  integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
 
-"param-case@^3.0.4":
-  "integrity" "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A=="
-  "resolved" "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz"
-  "version" "3.0.4"
+param-case@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz"
+  integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==
   dependencies:
-    "dot-case" "^3.0.4"
-    "tslib" "^2.0.3"
+    dot-case "^3.0.4"
+    tslib "^2.0.3"
 
-"parent-module@^1.0.0":
-  "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="
-  "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
-  "version" "1.0.1"
+parent-module@^1.0.0:
+  version "1.0.1"
+  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"
+    callsites "^3.0.0"
 
-"parse-json@^5.0.0":
-  "integrity" "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="
-  "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz"
-  "version" "5.2.0"
+parse-json@^5.0.0:
+  version "5.2.0"
+  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"
-    "error-ex" "^1.3.1"
-    "json-parse-even-better-errors" "^2.3.0"
-    "lines-and-columns" "^1.1.6"
+    error-ex "^1.3.1"
+    json-parse-even-better-errors "^2.3.0"
+    lines-and-columns "^1.1.6"
 
-"pascal-case@^3.1.2":
-  "integrity" "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g=="
-  "resolved" "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz"
-  "version" "3.1.2"
+pascal-case@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz"
+  integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==
   dependencies:
-    "no-case" "^3.0.4"
-    "tslib" "^2.0.3"
+    no-case "^3.0.4"
+    tslib "^2.0.3"
 
-"path-exists@^4.0.0":
-  "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
-  "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
-  "version" "4.0.0"
+path-exists@^4.0.0:
+  version "4.0.0"
+  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":
-  "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
-  "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
-  "version" "1.0.1"
+path-is-absolute@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
+  integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
 
-"path-key@^3.1.0":
-  "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
-  "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
-  "version" "3.1.1"
+path-key@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
+  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
 
-"path-parse@^1.0.7":
-  "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
-  "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"
-  "version" "1.0.7"
+path-parse@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"
+  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
 
-"path-type@^4.0.0":
-  "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
-  "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
-  "version" "4.0.0"
+path-type@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
+  integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
 
-"picocolors@^0.2.1":
-  "integrity" "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA=="
-  "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz"
-  "version" "0.2.1"
+picocolors@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz"
+  integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==
 
-"picocolors@^1.0.0":
-  "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
-  "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
-  "version" "1.0.0"
+picocolors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
+  integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
 
-"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.3.1":
-  "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
-  "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
-  "version" "2.3.1"
+picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
+  integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
 
-"pinia-plugin-persistedstate@^3.0.2":
-  "integrity" "sha512-8UN+vYMEPBdgNLwceY08mi5olI0wkYaEb8b6hD6xW7SnBRuPydWHlEhZvUWgNb/ibuf4PvufpvtS+dmhYjJQOw=="
-  "resolved" "https://registry.npmjs.org/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.1.0.tgz"
-  "version" "3.1.0"
+pinia-plugin-persistedstate@^3.0.2:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.1.0.tgz"
+  integrity sha512-8UN+vYMEPBdgNLwceY08mi5olI0wkYaEb8b6hD6xW7SnBRuPydWHlEhZvUWgNb/ibuf4PvufpvtS+dmhYjJQOw==
 
-"pinia@^2.0.0", "pinia@2.0.23":
-  "integrity" "sha512-N15hFf4o5STrxpNrib1IEb1GOArvPYf1zPvQVRGOO1G1d74Ak0J0lVyalX/SmrzdT4Q0nlEFjbURsmBmIGUR5Q=="
-  "resolved" "https://registry.npmjs.org/pinia/-/pinia-2.0.23.tgz"
-  "version" "2.0.23"
+pinia@2.0.23:
+  version "2.0.23"
+  resolved "https://registry.npmjs.org/pinia/-/pinia-2.0.23.tgz"
+  integrity sha512-N15hFf4o5STrxpNrib1IEb1GOArvPYf1zPvQVRGOO1G1d74Ak0J0lVyalX/SmrzdT4Q0nlEFjbURsmBmIGUR5Q==
   dependencies:
     "@vue/devtools-api" "^6.4.4"
-    "vue-demi" "*"
+    vue-demi "*"
 
-"pngjs@^5.0.0":
-  "integrity" "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw=="
-  "resolved" "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz"
-  "version" "5.0.0"
+pngjs@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz"
+  integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==
 
-"postcss-functions@^3":
-  "integrity" "sha512-N5yWXWKA+uhpLQ9ZhBRl2bIAdM6oVJYpDojuI1nF2SzXBimJcdjFwiAouBVbO5VuOF3qA6BSFWFc3wXbbj72XQ=="
-  "resolved" "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz"
-  "version" "3.0.0"
+postcss-functions@^3:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz"
+  integrity sha512-N5yWXWKA+uhpLQ9ZhBRl2bIAdM6oVJYpDojuI1nF2SzXBimJcdjFwiAouBVbO5VuOF3qA6BSFWFc3wXbbj72XQ==
   dependencies:
-    "glob" "^7.1.2"
-    "object-assign" "^4.1.1"
-    "postcss" "^6.0.9"
-    "postcss-value-parser" "^3.3.0"
+    glob "^7.1.2"
+    object-assign "^4.1.1"
+    postcss "^6.0.9"
+    postcss-value-parser "^3.3.0"
 
-"postcss-js@^2":
-  "integrity" "sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w=="
-  "resolved" "https://registry.npmjs.org/postcss-js/-/postcss-js-2.0.3.tgz"
-  "version" "2.0.3"
+postcss-js@^2:
+  version "2.0.3"
+  resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-2.0.3.tgz"
+  integrity sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w==
   dependencies:
-    "camelcase-css" "^2.0.1"
-    "postcss" "^7.0.18"
+    camelcase-css "^2.0.1"
+    postcss "^7.0.18"
 
-"postcss-load-config@^3.1.0":
-  "integrity" "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg=="
-  "resolved" "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz"
-  "version" "3.1.4"
+postcss-load-config@^3.1.0:
+  version "3.1.4"
+  resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz"
+  integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==
   dependencies:
-    "lilconfig" "^2.0.5"
-    "yaml" "^1.10.2"
+    lilconfig "^2.0.5"
+    yaml "^1.10.2"
 
-"postcss-nested@^4":
-  "integrity" "sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw=="
-  "resolved" "https://registry.npmjs.org/postcss-nested/-/postcss-nested-4.2.3.tgz"
-  "version" "4.2.3"
+postcss-nested@^4:
+  version "4.2.3"
+  resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-4.2.3.tgz"
+  integrity sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw==
   dependencies:
-    "postcss" "^7.0.32"
-    "postcss-selector-parser" "^6.0.2"
+    postcss "^7.0.32"
+    postcss-selector-parser "^6.0.2"
 
-"postcss-pxtorem@^5.1.1":
-  "integrity" "sha512-uvgIujL/pn0GbZ+rczESD2orHsbXrrCqi+q9wJO8PCk3ZGCoVVtu5hZTbtk+tbZHZP5UkTfCvqOrTZs9Ncqfsg=="
-  "resolved" "https://registry.npmjs.org/postcss-pxtorem/-/postcss-pxtorem-5.1.1.tgz"
-  "version" "5.1.1"
+postcss-pxtorem@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/postcss-pxtorem/-/postcss-pxtorem-5.1.1.tgz"
+  integrity sha512-uvgIujL/pn0GbZ+rczESD2orHsbXrrCqi+q9wJO8PCk3ZGCoVVtu5hZTbtk+tbZHZP5UkTfCvqOrTZs9Ncqfsg==
   dependencies:
-    "postcss" "^7.0.27"
+    postcss "^7.0.27"
 
-"postcss-selector-parser@^6.0.2", "postcss-selector-parser@^6.0.6", "postcss-selector-parser@^6.0.9":
-  "integrity" "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ=="
-  "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz"
-  "version" "6.0.13"
+postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.6, postcss-selector-parser@^6.0.9:
+  version "6.0.13"
+  resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz"
+  integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==
   dependencies:
-    "cssesc" "^3.0.0"
-    "util-deprecate" "^1.0.2"
+    cssesc "^3.0.0"
+    util-deprecate "^1.0.2"
 
-"postcss-value-parser@^3.3.0":
-  "integrity" "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
-  "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz"
-  "version" "3.3.1"
+postcss-value-parser@^3.3.0:
+  version "3.3.1"
+  resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz"
+  integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
 
-"postcss-value-parser@^4.1.0", "postcss-value-parser@^4.2.0":
-  "integrity" "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
-  "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
-  "version" "4.2.0"
+postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
+  integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
 
-"postcss@^6.0.9":
-  "integrity" "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag=="
-  "resolved" "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz"
-  "version" "6.0.23"
+postcss@^6.0.9:
+  version "6.0.23"
+  resolved "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz"
+  integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
   dependencies:
-    "chalk" "^2.4.1"
-    "source-map" "^0.6.1"
-    "supports-color" "^5.4.0"
+    chalk "^2.4.1"
+    source-map "^0.6.1"
+    supports-color "^5.4.0"
 
-"postcss@^7.0.18":
-  "integrity" "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA=="
-  "resolved" "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz"
-  "version" "7.0.39"
+postcss@^7, postcss@^7.0.32:
+  version "7.0.39"
+  resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz"
+  integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==
   dependencies:
-    "picocolors" "^0.2.1"
-    "source-map" "^0.6.1"
+    picocolors "^0.2.1"
+    source-map "^0.6.1"
 
-"postcss@^7.0.27":
-  "integrity" "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA=="
-  "resolved" "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz"
-  "version" "7.0.39"
+postcss@^7.0.18:
+  version "7.0.39"
+  resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz"
+  integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==
   dependencies:
-    "picocolors" "^0.2.1"
-    "source-map" "^0.6.1"
+    picocolors "^0.2.1"
+    source-map "^0.6.1"
 
-"postcss@^7", "postcss@^7.0.32":
-  "integrity" "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA=="
-  "resolved" "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz"
-  "version" "7.0.39"
+postcss@^7.0.27:
+  version "7.0.39"
+  resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz"
+  integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==
   dependencies:
-    "picocolors" "^0.2.1"
-    "source-map" "^0.6.1"
+    picocolors "^0.2.1"
+    source-map "^0.6.1"
 
-"postcss@^8.1.0", "postcss@^8.1.10", "postcss@^8.3.5", "postcss@^8.4.18", "postcss@^8.4.19", "postcss@>=8.0.9":
-  "integrity" "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg=="
-  "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz"
-  "version" "8.4.24"
+postcss@^8.1.10, postcss@^8.3.5, postcss@^8.4.18, postcss@^8.4.19:
+  version "8.4.24"
+  resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz"
+  integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==
   dependencies:
-    "nanoid" "^3.3.6"
-    "picocolors" "^1.0.0"
-    "source-map-js" "^1.0.2"
+    nanoid "^3.3.6"
+    picocolors "^1.0.0"
+    source-map-js "^1.0.2"
 
-"prelude-ls@^1.2.1":
-  "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="
-  "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz"
-  "version" "1.2.1"
+prelude-ls@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz"
+  integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
 
-"prettier-linter-helpers@^1.0.0":
-  "integrity" "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w=="
-  "resolved" "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz"
-  "version" "1.0.0"
+prettier-linter-helpers@^1.0.0:
+  version "1.0.0"
+  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"
+    fast-diff "^1.1.2"
 
-"prettier@^2.7.1", "prettier@>=2.0.0":
-  "integrity" "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="
-  "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz"
-  "version" "2.8.8"
+prettier@^2.7.1:
+  version "2.8.8"
+  resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz"
+  integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
 
-"pretty-hrtime@^1.0.3":
-  "integrity" "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A=="
-  "resolved" "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz"
-  "version" "1.0.3"
+pretty-hrtime@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz"
+  integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==
 
-"promise@^7.0.1":
-  "integrity" "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg=="
-  "resolved" "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz"
-  "version" "7.3.1"
+promise@^7.0.1:
+  version "7.3.1"
+  resolved "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz"
+  integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
   dependencies:
-    "asap" "~2.0.3"
+    asap "~2.0.3"
 
-"proxy-from-env@^1.1.0":
-  "integrity" "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
-  "resolved" "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
-  "version" "1.1.0"
+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==
 
-"pug-attrs@^3.0.0":
-  "integrity" "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA=="
-  "resolved" "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz"
-  "version" "3.0.0"
+pug-attrs@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz"
+  integrity sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==
   dependencies:
-    "constantinople" "^4.0.1"
-    "js-stringify" "^1.0.2"
-    "pug-runtime" "^3.0.0"
+    constantinople "^4.0.1"
+    js-stringify "^1.0.2"
+    pug-runtime "^3.0.0"
 
-"pug-code-gen@^3.0.2":
-  "integrity" "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg=="
-  "resolved" "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz"
-  "version" "3.0.2"
+pug-code-gen@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz"
+  integrity sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==
   dependencies:
-    "constantinople" "^4.0.1"
-    "doctypes" "^1.1.0"
-    "js-stringify" "^1.0.2"
-    "pug-attrs" "^3.0.0"
-    "pug-error" "^2.0.0"
-    "pug-runtime" "^3.0.0"
-    "void-elements" "^3.1.0"
-    "with" "^7.0.0"
+    constantinople "^4.0.1"
+    doctypes "^1.1.0"
+    js-stringify "^1.0.2"
+    pug-attrs "^3.0.0"
+    pug-error "^2.0.0"
+    pug-runtime "^3.0.0"
+    void-elements "^3.1.0"
+    with "^7.0.0"
 
-"pug-error@^2.0.0":
-  "integrity" "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ=="
-  "resolved" "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz"
-  "version" "2.0.0"
+pug-error@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz"
+  integrity sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==
 
-"pug-filters@^4.0.0":
-  "integrity" "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A=="
-  "resolved" "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz"
-  "version" "4.0.0"
+pug-filters@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz"
+  integrity sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==
   dependencies:
-    "constantinople" "^4.0.1"
-    "jstransformer" "1.0.0"
-    "pug-error" "^2.0.0"
-    "pug-walk" "^2.0.0"
-    "resolve" "^1.15.1"
+    constantinople "^4.0.1"
+    jstransformer "1.0.0"
+    pug-error "^2.0.0"
+    pug-walk "^2.0.0"
+    resolve "^1.15.1"
 
-"pug-lexer@^5.0.1":
-  "integrity" "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w=="
-  "resolved" "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz"
-  "version" "5.0.1"
+pug-lexer@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz"
+  integrity sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==
   dependencies:
-    "character-parser" "^2.2.0"
-    "is-expression" "^4.0.0"
-    "pug-error" "^2.0.0"
+    character-parser "^2.2.0"
+    is-expression "^4.0.0"
+    pug-error "^2.0.0"
 
-"pug-linker@^4.0.0":
-  "integrity" "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw=="
-  "resolved" "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz"
-  "version" "4.0.0"
+pug-linker@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz"
+  integrity sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==
   dependencies:
-    "pug-error" "^2.0.0"
-    "pug-walk" "^2.0.0"
+    pug-error "^2.0.0"
+    pug-walk "^2.0.0"
 
-"pug-load@^3.0.0":
-  "integrity" "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ=="
-  "resolved" "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz"
-  "version" "3.0.0"
+pug-load@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz"
+  integrity sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==
   dependencies:
-    "object-assign" "^4.1.1"
-    "pug-walk" "^2.0.0"
+    object-assign "^4.1.1"
+    pug-walk "^2.0.0"
 
-"pug-parser@^6.0.0":
-  "integrity" "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw=="
-  "resolved" "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz"
-  "version" "6.0.0"
+pug-parser@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz"
+  integrity sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==
   dependencies:
-    "pug-error" "^2.0.0"
-    "token-stream" "1.0.0"
+    pug-error "^2.0.0"
+    token-stream "1.0.0"
 
-"pug-runtime@^3.0.0", "pug-runtime@^3.0.1":
-  "integrity" "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg=="
-  "resolved" "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz"
-  "version" "3.0.1"
+pug-runtime@^3.0.0, pug-runtime@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz"
+  integrity sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==
 
-"pug-strip-comments@^2.0.0":
-  "integrity" "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ=="
-  "resolved" "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz"
-  "version" "2.0.0"
+pug-strip-comments@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz"
+  integrity sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==
   dependencies:
-    "pug-error" "^2.0.0"
+    pug-error "^2.0.0"
 
-"pug-walk@^2.0.0":
-  "integrity" "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ=="
-  "resolved" "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz"
-  "version" "2.0.0"
+pug-walk@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz"
+  integrity sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==
 
-"pug@^3.0.2":
-  "integrity" "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw=="
-  "resolved" "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz"
-  "version" "3.0.2"
+pug@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz"
+  integrity sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==
   dependencies:
-    "pug-code-gen" "^3.0.2"
-    "pug-filters" "^4.0.0"
-    "pug-lexer" "^5.0.1"
-    "pug-linker" "^4.0.0"
-    "pug-load" "^3.0.0"
-    "pug-parser" "^6.0.0"
-    "pug-runtime" "^3.0.1"
-    "pug-strip-comments" "^2.0.0"
+    pug-code-gen "^3.0.2"
+    pug-filters "^4.0.0"
+    pug-lexer "^5.0.1"
+    pug-linker "^4.0.0"
+    pug-load "^3.0.0"
+    pug-parser "^6.0.0"
+    pug-runtime "^3.0.1"
+    pug-strip-comments "^2.0.0"
 
-"punycode@^2.1.0":
-  "integrity" "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="
-  "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz"
-  "version" "2.3.0"
+punycode@^2.1.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz"
+  integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
 
-"purgecss@^4.0.3":
-  "integrity" "sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw=="
-  "resolved" "https://registry.npmjs.org/purgecss/-/purgecss-4.1.3.tgz"
-  "version" "4.1.3"
+purgecss@^4.0.3:
+  version "4.1.3"
+  resolved "https://registry.npmjs.org/purgecss/-/purgecss-4.1.3.tgz"
+  integrity sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==
   dependencies:
-    "commander" "^8.0.0"
-    "glob" "^7.1.7"
-    "postcss" "^8.3.5"
-    "postcss-selector-parser" "^6.0.6"
+    commander "^8.0.0"
+    glob "^7.1.7"
+    postcss "^8.3.5"
+    postcss-selector-parser "^6.0.6"
 
-"qrcode@^1.5.1":
-  "integrity" "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg=="
-  "resolved" "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz"
-  "version" "1.5.3"
+qrcode@^1.5.1:
+  version "1.5.3"
+  resolved "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz"
+  integrity sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==
   dependencies:
-    "dijkstrajs" "^1.0.1"
-    "encode-utf8" "^1.0.3"
-    "pngjs" "^5.0.0"
-    "yargs" "^15.3.1"
+    dijkstrajs "^1.0.1"
+    encode-utf8 "^1.0.3"
+    pngjs "^5.0.0"
+    yargs "^15.3.1"
 
-"qs@^6.11.1":
-  "integrity" "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA=="
-  "resolved" "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz"
-  "version" "6.11.2"
+qs@^6.11.1:
+  version "6.11.2"
+  resolved "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz"
+  integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==
   dependencies:
-    "side-channel" "^1.0.4"
+    side-channel "^1.0.4"
 
-"queue-microtask@^1.2.2":
-  "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
-  "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
-  "version" "1.2.3"
+queue-microtask@^1.2.2:
+  version "1.2.3"
+  resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
+  integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
 
-"quick-lru@^5.1.1":
-  "integrity" "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
-  "resolved" "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz"
-  "version" "5.1.1"
+quick-lru@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz"
+  integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
 
-"readdirp@~3.6.0":
-  "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="
-  "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz"
-  "version" "3.6.0"
+readdirp@~3.6.0:
+  version "3.6.0"
+  resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz"
+  integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
   dependencies:
-    "picomatch" "^2.2.1"
+    picomatch "^2.2.1"
 
-"reduce-css-calc@^2.1.8":
-  "integrity" "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg=="
-  "resolved" "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz"
-  "version" "2.1.8"
+reduce-css-calc@^2.1.8:
+  version "2.1.8"
+  resolved "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz"
+  integrity sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==
   dependencies:
-    "css-unit-converter" "^1.1.1"
-    "postcss-value-parser" "^3.3.0"
+    css-unit-converter "^1.1.1"
+    postcss-value-parser "^3.3.0"
 
-"regenerator-runtime@^0.13.11":
-  "integrity" "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
-  "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz"
-  "version" "0.13.11"
+regenerator-runtime@^0.13.11:
+  version "0.13.11"
+  resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz"
+  integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
 
-"require-directory@^2.1.1":
-  "integrity" "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
-  "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz"
-  "version" "2.1.1"
+require-directory@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz"
+  integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
 
-"require-main-filename@^2.0.0":
-  "integrity" "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
-  "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz"
-  "version" "2.0.0"
+require-main-filename@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz"
+  integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
 
-"resolve-from@^4.0.0":
-  "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
-  "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
-  "version" "4.0.0"
+resolve-from@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
+  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
 
-"resolve@^1.12.0", "resolve@^1.15.1", "resolve@^1.20.0", "resolve@^1.22.1":
-  "integrity" "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g=="
-  "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz"
-  "version" "1.22.2"
+resolve@^1.12.0, resolve@^1.15.1, resolve@^1.20.0, resolve@^1.22.1:
+  version "1.22.2"
+  resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz"
+  integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
   dependencies:
-    "is-core-module" "^2.11.0"
-    "path-parse" "^1.0.7"
-    "supports-preserve-symlinks-flag" "^1.0.0"
+    is-core-module "^2.11.0"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
 
-"reusify@^1.0.4":
-  "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
-  "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"
-  "version" "1.0.4"
+reusify@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"
+  integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
 
-"rgb-regex@^1.0.1":
-  "integrity" "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w=="
-  "resolved" "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz"
-  "version" "1.0.1"
+rgb-regex@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz"
+  integrity sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==
 
-"rgba-regex@^1.0.0":
-  "integrity" "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg=="
-  "resolved" "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz"
-  "version" "1.0.0"
+rgba-regex@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz"
+  integrity sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==
 
-"rimraf@^3.0.0", "rimraf@^3.0.2":
-  "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="
-  "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz"
-  "version" "3.0.2"
+rimraf@^3.0.0, rimraf@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz"
+  integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
   dependencies:
-    "glob" "^7.1.3"
+    glob "^7.1.3"
 
-"rollup-plugin-visualizer@^5.9.0":
-  "integrity" "sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg=="
-  "resolved" "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.0.tgz"
-  "version" "5.9.0"
+rollup-plugin-visualizer@^5.9.0:
+  version "5.9.0"
+  resolved "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.9.0.tgz"
+  integrity sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==
   dependencies:
-    "open" "^8.4.0"
-    "picomatch" "^2.3.1"
-    "source-map" "^0.7.4"
-    "yargs" "^17.5.1"
+    open "^8.4.0"
+    picomatch "^2.3.1"
+    source-map "^0.7.4"
+    yargs "^17.5.1"
 
-"rollup@^1.20.0||^2.0.0||^3.0.0", "rollup@^2.79.1", "rollup@2.x || 3.x":
-  "integrity" "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw=="
-  "resolved" "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz"
-  "version" "2.79.1"
+rollup@^2.79.1:
+  version "2.79.1"
+  resolved "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz"
+  integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==
   optionalDependencies:
-    "fsevents" "~2.3.2"
+    fsevents "~2.3.2"
 
-"run-parallel@^1.1.9":
-  "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="
-  "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"
-  "version" "1.2.0"
+run-parallel@^1.1.9:
+  version "1.2.0"
+  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"
+    queue-microtask "^1.2.2"
 
-"sass@*", "sass@^1.55.0":
-  "integrity" "sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A=="
-  "resolved" "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz"
-  "version" "1.62.1"
+sass@^1.55.0:
+  version "1.62.1"
+  resolved "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz"
+  integrity sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==
   dependencies:
-    "chokidar" ">=3.0.0 <4.0.0"
-    "immutable" "^4.0.0"
-    "source-map-js" ">=0.6.2 <2.0.0"
+    chokidar ">=3.0.0 <4.0.0"
+    immutable "^4.0.0"
+    source-map-js ">=0.6.2 <2.0.0"
 
-"select@^1.1.2":
-  "integrity" "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA=="
-  "resolved" "https://registry.npmjs.org/select/-/select-1.1.2.tgz"
-  "version" "1.1.2"
+select@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.npmjs.org/select/-/select-1.1.2.tgz"
+  integrity sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==
 
-"semver@^6.3.0":
-  "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
-  "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz"
-  "version" "6.3.0"
+semver@^6.3.0:
+  version "6.3.0"
+  resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz"
+  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
 
-"semver@^7.3.5", "semver@^7.3.6":
-  "integrity" "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw=="
-  "resolved" "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz"
-  "version" "7.5.1"
+semver@^7.3.5, semver@^7.3.6:
+  version "7.5.1"
+  resolved "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz"
+  integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==
   dependencies:
-    "lru-cache" "^6.0.0"
+    lru-cache "^6.0.0"
 
-"set-blocking@^2.0.0":
-  "integrity" "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
-  "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz"
-  "version" "2.0.0"
+set-blocking@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz"
+  integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
 
-"shebang-command@^2.0.0":
-  "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="
-  "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
-  "version" "2.0.0"
+shebang-command@^2.0.0:
+  version "2.0.0"
+  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"
 
-"shebang-regex@^3.0.0":
-  "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
-  "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
-  "version" "3.0.0"
+shebang-regex@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
+  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
 
-"shvl@^2.0.3":
-  "integrity" "sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw=="
-  "resolved" "https://registry.npmjs.org/shvl/-/shvl-2.0.3.tgz"
-  "version" "2.0.3"
+shvl@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.npmjs.org/shvl/-/shvl-2.0.3.tgz"
+  integrity sha512-V7C6S9Hlol6SzOJPnQ7qzOVEWUQImt3BNmmzh40wObhla3XOYMe4gGiYzLrJd5TFa+cI2f9LKIRJTTKZSTbWgw==
 
-"side-channel@^1.0.4":
-  "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw=="
-  "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz"
-  "version" "1.0.4"
+side-channel@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz"
+  integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
   dependencies:
-    "call-bind" "^1.0.0"
-    "get-intrinsic" "^1.0.2"
-    "object-inspect" "^1.9.0"
+    call-bind "^1.0.0"
+    get-intrinsic "^1.0.2"
+    object-inspect "^1.9.0"
 
-"simple-swizzle@^0.2.2":
-  "integrity" "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg=="
-  "resolved" "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz"
-  "version" "0.2.2"
+simple-swizzle@^0.2.2:
+  version "0.2.2"
+  resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz"
+  integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==
   dependencies:
-    "is-arrayish" "^0.3.1"
+    is-arrayish "^0.3.1"
 
-"sortablejs@1.14.0":
-  "integrity" "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w=="
-  "resolved" "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz"
-  "version" "1.14.0"
+sortablejs@1.14.0:
+  version "1.14.0"
+  resolved "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz"
+  integrity sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==
 
-"source-map-js@^1.0.2", "source-map-js@>=0.6.2 <2.0.0":
-  "integrity" "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
-  "resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
-  "version" "1.0.2"
+source-map-js@^1.0.2, "source-map-js@>=0.6.2 <2.0.0":
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
+  integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
 
-"source-map-support@~0.5.20":
-  "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="
-  "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz"
-  "version" "0.5.21"
+source-map-support@~0.5.20:
+  version "0.5.21"
+  resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz"
+  integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
   dependencies:
-    "buffer-from" "^1.0.0"
-    "source-map" "^0.6.0"
+    buffer-from "^1.0.0"
+    source-map "^0.6.0"
 
-"source-map@^0.6.0", "source-map@^0.6.1", "source-map@0.6.1":
-  "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
-  "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
-  "version" "0.6.1"
+source-map@^0.6.0, source-map@^0.6.1, source-map@0.6.1:
+  version "0.6.1"
+  resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
 
-"source-map@^0.7.4":
-  "integrity" "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="
-  "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz"
-  "version" "0.7.4"
+source-map@^0.7.4:
+  version "0.7.4"
+  resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz"
+  integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==
 
-"string-width@^4.1.0", "string-width@^4.2.0", "string-width@^4.2.3":
-  "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="
-  "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
-  "version" "4.2.3"
+string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+  version "4.2.3"
+  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"
-    "is-fullwidth-code-point" "^3.0.0"
-    "strip-ansi" "^6.0.1"
+    emoji-regex "^8.0.0"
+    is-fullwidth-code-point "^3.0.0"
+    strip-ansi "^6.0.1"
 
-"strip-ansi@^6.0.0", "strip-ansi@^6.0.1":
-  "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="
-  "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
-  "version" "6.0.1"
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
   dependencies:
-    "ansi-regex" "^5.0.1"
+    ansi-regex "^5.0.1"
 
-"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1":
-  "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
-  "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
-  "version" "3.1.1"
+strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
+  integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
 
-"supports-color@^5.3.0", "supports-color@^5.4.0":
-  "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="
-  "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"
-  "version" "5.5.0"
+supports-color@^5.3.0, supports-color@^5.4.0:
+  version "5.5.0"
+  resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"
+  integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
   dependencies:
-    "has-flag" "^3.0.0"
+    has-flag "^3.0.0"
 
-"supports-color@^7.1.0":
-  "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="
-  "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
-  "version" "7.2.0"
+supports-color@^7.1.0:
+  version "7.2.0"
+  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"
+    has-flag "^4.0.0"
 
-"supports-preserve-symlinks-flag@^1.0.0":
-  "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
-  "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
-  "version" "1.0.0"
+supports-preserve-symlinks-flag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
+  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
 
-"systemjs@^6.13.0":
-  "integrity" "sha512-8ftwWd+XnQtZ/aGbatrN4QFNGrKJzmbtixW+ODpci7pyoTajg4sonPP8aFLESAcuVxaC1FyDESt+SpfFCH9rZQ=="
-  "resolved" "https://registry.npmjs.org/systemjs/-/systemjs-6.14.1.tgz"
-  "version" "6.14.1"
+systemjs@^6.13.0:
+  version "6.14.1"
+  resolved "https://registry.npmjs.org/systemjs/-/systemjs-6.14.1.tgz"
+  integrity sha512-8ftwWd+XnQtZ/aGbatrN4QFNGrKJzmbtixW+ODpci7pyoTajg4sonPP8aFLESAcuVxaC1FyDESt+SpfFCH9rZQ==
 
 "tailwindcss@npm:@tailwindcss/postcss7-compat@^2.2.17":
-  "integrity" "sha512-3h2svqQAqYHxRZ1KjsJjZOVTQ04m29LjfrLjXyZZEJuvUuJN+BCIF9GI8vhE1s0plS0mogd6E6YLg6mu4Wv/Vw=="
-  "resolved" "https://registry.npmjs.org/@tailwindcss/postcss7-compat/-/postcss7-compat-2.2.17.tgz"
-  "version" "2.2.17"
+  version "2.2.17"
+  resolved "https://registry.npmjs.org/@tailwindcss/postcss7-compat/-/postcss7-compat-2.2.17.tgz"
+  integrity sha512-3h2svqQAqYHxRZ1KjsJjZOVTQ04m29LjfrLjXyZZEJuvUuJN+BCIF9GI8vhE1s0plS0mogd6E6YLg6mu4Wv/Vw==
   dependencies:
-    "arg" "^5.0.1"
-    "autoprefixer" "^9"
-    "bytes" "^3.0.0"
-    "chalk" "^4.1.2"
-    "chokidar" "^3.5.2"
-    "color" "^4.0.1"
-    "cosmiconfig" "^7.0.1"
-    "detective" "^5.2.0"
-    "didyoumean" "^1.2.2"
-    "dlv" "^1.1.3"
-    "fast-glob" "^3.2.7"
-    "fs-extra" "^10.0.0"
-    "glob-parent" "^6.0.1"
-    "html-tags" "^3.1.0"
-    "is-color-stop" "^1.1.0"
-    "is-glob" "^4.0.1"
-    "lodash" "^4.17.21"
-    "lodash.topath" "^4.5.2"
-    "modern-normalize" "^1.1.0"
-    "node-emoji" "^1.11.0"
-    "normalize-path" "^3.0.0"
-    "object-hash" "^2.2.0"
-    "postcss" "^7"
-    "postcss-functions" "^3"
-    "postcss-js" "^2"
-    "postcss-load-config" "^3.1.0"
-    "postcss-nested" "^4"
-    "postcss-selector-parser" "^6.0.6"
-    "postcss-value-parser" "^4.1.0"
-    "pretty-hrtime" "^1.0.3"
-    "purgecss" "^4.0.3"
-    "quick-lru" "^5.1.1"
-    "reduce-css-calc" "^2.1.8"
-    "resolve" "^1.20.0"
-    "tmp" "^0.2.1"
+    arg "^5.0.1"
+    autoprefixer "^9"
+    bytes "^3.0.0"
+    chalk "^4.1.2"
+    chokidar "^3.5.2"
+    color "^4.0.1"
+    cosmiconfig "^7.0.1"
+    detective "^5.2.0"
+    didyoumean "^1.2.2"
+    dlv "^1.1.3"
+    fast-glob "^3.2.7"
+    fs-extra "^10.0.0"
+    glob-parent "^6.0.1"
+    html-tags "^3.1.0"
+    is-color-stop "^1.1.0"
+    is-glob "^4.0.1"
+    lodash "^4.17.21"
+    lodash.topath "^4.5.2"
+    modern-normalize "^1.1.0"
+    node-emoji "^1.11.0"
+    normalize-path "^3.0.0"
+    object-hash "^2.2.0"
+    postcss "^7"
+    postcss-functions "^3"
+    postcss-js "^2"
+    postcss-load-config "^3.1.0"
+    postcss-nested "^4"
+    postcss-selector-parser "^6.0.6"
+    postcss-value-parser "^4.1.0"
+    pretty-hrtime "^1.0.3"
+    purgecss "^4.0.3"
+    quick-lru "^5.1.1"
+    reduce-css-calc "^2.1.8"
+    resolve "^1.20.0"
+    tmp "^0.2.1"
 
-"terser@^5.16.1", "terser@^5.4.0":
-  "integrity" "sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ=="
-  "resolved" "https://registry.npmjs.org/terser/-/terser-5.17.6.tgz"
-  "version" "5.17.6"
+terser@^5.16.1:
+  version "5.17.6"
+  resolved "https://registry.npmjs.org/terser/-/terser-5.17.6.tgz"
+  integrity sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ==
   dependencies:
     "@jridgewell/source-map" "^0.3.2"
-    "acorn" "^8.5.0"
-    "commander" "^2.20.0"
-    "source-map-support" "~0.5.20"
+    acorn "^8.5.0"
+    commander "^2.20.0"
+    source-map-support "~0.5.20"
 
-"text-segmentation@^1.0.3":
-  "integrity" "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw=="
-  "resolved" "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz"
-  "version" "1.0.3"
+text-segmentation@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz"
+  integrity sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==
   dependencies:
-    "utrie" "^1.0.2"
+    utrie "^1.0.2"
 
-"text-table@^0.2.0":
-  "integrity" "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
-  "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
-  "version" "0.2.0"
+text-table@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
+  integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
 
-"tiny-emitter@^2.0.0":
-  "integrity" "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q=="
-  "resolved" "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz"
-  "version" "2.1.0"
+tiny-emitter@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz"
+  integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==
 
-"tmp@^0.2.1":
-  "integrity" "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ=="
-  "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz"
-  "version" "0.2.1"
+tmp@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz"
+  integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==
   dependencies:
-    "rimraf" "^3.0.0"
+    rimraf "^3.0.0"
 
-"to-fast-properties@^2.0.0":
-  "integrity" "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
-  "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz"
-  "version" "2.0.0"
+to-fast-properties@^2.0.0:
+  version "2.0.0"
+  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":
-  "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="
-  "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
-  "version" "5.0.1"
+to-regex-range@^5.0.1:
+  version "5.0.1"
+  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"
+    is-number "^7.0.0"
 
-"token-stream@1.0.0":
-  "integrity" "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg=="
-  "resolved" "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz"
-  "version" "1.0.0"
+token-stream@1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz"
+  integrity sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==
 
-"tslib@^2.0.3", "tslib@2.3.0":
-  "integrity" "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
-  "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz"
-  "version" "2.3.0"
+tslib@^2.0.3, tslib@2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz"
+  integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
 
-"type-check@^0.4.0", "type-check@~0.4.0":
-  "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="
-  "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz"
-  "version" "0.4.0"
+type-check@^0.4.0, type-check@~0.4.0:
+  version "0.4.0"
+  resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz"
+  integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
   dependencies:
-    "prelude-ls" "^1.2.1"
+    prelude-ls "^1.2.1"
 
-"type-fest@^0.20.2":
-  "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
-  "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz"
-  "version" "0.20.2"
+type-fest@^0.20.2:
+  version "0.20.2"
+  resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz"
+  integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
 
-"universalify@^2.0.0":
-  "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
-  "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz"
-  "version" "2.0.0"
+universalify@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz"
+  integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
 
-"unplugin-vue-components@^0.22.9":
-  "integrity" "sha512-FxyzsuBvMCYPIk+8cgscGBQ345tvwVu+qY5IhE++eorkyvA4Z1TiD/HCiim+Kbqozl10i4K+z+NCa2WO2jexRA=="
-  "resolved" "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.22.12.tgz"
-  "version" "0.22.12"
+unplugin-vue-components@^0.22.9:
+  version "0.22.12"
+  resolved "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.22.12.tgz"
+  integrity sha512-FxyzsuBvMCYPIk+8cgscGBQ345tvwVu+qY5IhE++eorkyvA4Z1TiD/HCiim+Kbqozl10i4K+z+NCa2WO2jexRA==
   dependencies:
     "@antfu/utils" "^0.7.2"
     "@rollup/pluginutils" "^5.0.2"
-    "chokidar" "^3.5.3"
-    "debug" "^4.3.4"
-    "fast-glob" "^3.2.12"
-    "local-pkg" "^0.4.2"
-    "magic-string" "^0.27.0"
-    "minimatch" "^5.1.1"
-    "resolve" "^1.22.1"
-    "unplugin" "^1.0.1"
+    chokidar "^3.5.3"
+    debug "^4.3.4"
+    fast-glob "^3.2.12"
+    local-pkg "^0.4.2"
+    magic-string "^0.27.0"
+    minimatch "^5.1.1"
+    resolve "^1.22.1"
+    unplugin "^1.0.1"
 
-"unplugin-vue-define-options@^1.1.3":
-  "integrity" "sha512-DIZtzJ5bJOVSPH4D8uNSJdCFE5vQwUSVUoSFqJjIJqMZ+X1bp5ydMdmB4vlAOnKhdCQszvU+mP+Fu0A64tnvcw=="
-  "resolved" "https://registry.npmjs.org/unplugin-vue-define-options/-/unplugin-vue-define-options-1.3.7.tgz"
-  "version" "1.3.7"
+unplugin-vue-define-options@^1.1.3:
+  version "1.3.7"
+  resolved "https://registry.npmjs.org/unplugin-vue-define-options/-/unplugin-vue-define-options-1.3.7.tgz"
+  integrity sha512-DIZtzJ5bJOVSPH4D8uNSJdCFE5vQwUSVUoSFqJjIJqMZ+X1bp5ydMdmB4vlAOnKhdCQszvU+mP+Fu0A64tnvcw==
   dependencies:
     "@vue-macros/common" "~1.3.3"
-    "ast-walker-scope" "^0.4.1"
-    "unplugin" "^1.3.1"
+    ast-walker-scope "^0.4.1"
+    unplugin "^1.3.1"
 
-"unplugin@^1.0.1", "unplugin@^1.3.1":
-  "integrity" "sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw=="
-  "resolved" "https://registry.npmjs.org/unplugin/-/unplugin-1.3.1.tgz"
-  "version" "1.3.1"
+unplugin@^1.0.1, unplugin@^1.3.1:
+  version "1.3.1"
+  resolved "https://registry.npmjs.org/unplugin/-/unplugin-1.3.1.tgz"
+  integrity sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw==
   dependencies:
-    "acorn" "^8.8.2"
-    "chokidar" "^3.5.3"
-    "webpack-sources" "^3.2.3"
-    "webpack-virtual-modules" "^0.5.0"
+    acorn "^8.8.2"
+    chokidar "^3.5.3"
+    webpack-sources "^3.2.3"
+    webpack-virtual-modules "^0.5.0"
 
-"update-browserslist-db@^1.0.11":
-  "integrity" "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA=="
-  "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz"
-  "version" "1.0.11"
+update-browserslist-db@^1.0.11:
+  version "1.0.11"
+  resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz"
+  integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==
   dependencies:
-    "escalade" "^3.1.1"
-    "picocolors" "^1.0.0"
+    escalade "^3.1.1"
+    picocolors "^1.0.0"
 
-"uri-js@^4.2.2":
-  "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="
-  "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"
-  "version" "4.4.1"
+uri-js@^4.2.2:
+  version "4.4.1"
+  resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"
+  integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
   dependencies:
-    "punycode" "^2.1.0"
+    punycode "^2.1.0"
 
-"util-deprecate@^1.0.2":
-  "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
-  "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
-  "version" "1.0.2"
+util-deprecate@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
+  integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
 
-"utrie@^1.0.2":
-  "integrity" "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw=="
-  "resolved" "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz"
-  "version" "1.0.2"
+utrie@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz"
+  integrity sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==
   dependencies:
-    "base64-arraybuffer" "^1.0.2"
+    base64-arraybuffer "^1.0.2"
 
-"vant@^4.0.9":
-  "integrity" "sha512-sHCyuXo6djVcR8H14tF/kF8FWAdk/ynrMGQt3F3adgNZ5vQR4MZrGJHKzfrY8y4EXU+vPbNTCPyaV5EBm67JAQ=="
-  "resolved" "https://registry.npmjs.org/vant/-/vant-4.4.1.tgz"
-  "version" "4.4.1"
+vant@^4.0.9:
+  version "4.4.1"
+  resolved "https://registry.npmjs.org/vant/-/vant-4.4.1.tgz"
+  integrity sha512-sHCyuXo6djVcR8H14tF/kF8FWAdk/ynrMGQt3F3adgNZ5vQR4MZrGJHKzfrY8y4EXU+vPbNTCPyaV5EBm67JAQ==
   dependencies:
     "@vant/popperjs" "^1.3.0"
     "@vant/use" "^1.5.1"
     "@vue/shared" "^3.0.0"
 
-"vite-plugin-imp@^2.3.1":
-  "integrity" "sha512-L/6/nvOw+MyNh4UxAlCZHsmKd5MitmHamqqAWB15sbUgVIEz/OQ8jpKr6kkQU0eA/AIe8fkCVbQBlP81ajrqWg=="
-  "resolved" "https://registry.npmjs.org/vite-plugin-imp/-/vite-plugin-imp-2.4.0.tgz"
-  "version" "2.4.0"
+vite-plugin-imp@^2.3.1:
+  version "2.4.0"
+  resolved "https://registry.npmjs.org/vite-plugin-imp/-/vite-plugin-imp-2.4.0.tgz"
+  integrity sha512-L/6/nvOw+MyNh4UxAlCZHsmKd5MitmHamqqAWB15sbUgVIEz/OQ8jpKr6kkQU0eA/AIe8fkCVbQBlP81ajrqWg==
   dependencies:
     "@babel/core" "^7.12.10"
     "@babel/generator" "^7.12.11"
     "@babel/parser" "^7.12.11"
     "@babel/traverse" "^7.12.12"
-    "chalk" "^4.1.0"
-    "param-case" "^3.0.4"
-    "pascal-case" "^3.1.2"
+    chalk "^4.1.0"
+    param-case "^3.0.4"
+    pascal-case "^3.1.2"
 
-"vite@^3.0.0", "vite@^3.2.0", "vite@^4.0.0", "vite@>= 2.0.0-beta.5":
-  "integrity" "sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g=="
-  "resolved" "https://registry.npmjs.org/vite/-/vite-3.2.7.tgz"
-  "version" "3.2.7"
+vite@^3.2.0:
+  version "3.2.7"
+  resolved "https://registry.npmjs.org/vite/-/vite-3.2.7.tgz"
+  integrity sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==
   dependencies:
-    "esbuild" "^0.15.9"
-    "postcss" "^8.4.18"
-    "resolve" "^1.22.1"
-    "rollup" "^2.79.1"
+    esbuild "^0.15.9"
+    postcss "^8.4.18"
+    resolve "^1.22.1"
+    rollup "^2.79.1"
   optionalDependencies:
-    "fsevents" "~2.3.2"
+    fsevents "~2.3.2"
 
-"void-elements@^3.1.0":
-  "integrity" "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w=="
-  "resolved" "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz"
-  "version" "3.1.0"
+void-elements@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz"
+  integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==
 
-"vue-clipboard3@^2.0.0":
-  "integrity" "sha512-Q9S7dzWGax7LN5iiSPcu/K1GGm2gcBBlYwmMsUc5/16N6w90cbKow3FnPmPs95sungns4yvd9/+JhbAznECS2A=="
-  "resolved" "https://registry.npmjs.org/vue-clipboard3/-/vue-clipboard3-2.0.0.tgz"
-  "version" "2.0.0"
+vue-clipboard3@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/vue-clipboard3/-/vue-clipboard3-2.0.0.tgz"
+  integrity sha512-Q9S7dzWGax7LN5iiSPcu/K1GGm2gcBBlYwmMsUc5/16N6w90cbKow3FnPmPs95sungns4yvd9/+JhbAznECS2A==
   dependencies:
-    "clipboard" "^2.0.6"
+    clipboard "^2.0.6"
 
-"vue-demi@*":
-  "integrity" "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA=="
-  "resolved" "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz"
-  "version" "0.14.5"
+vue-demi@*:
+  version "0.14.5"
+  resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz"
+  integrity sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==
 
-"vue-eslint-parser@^9.3.0":
-  "integrity" "sha512-48IxT9d0+wArT1+3wNIy0tascRoywqSUe2E1YalIC1L8jsUGe5aJQItWfRok7DVFGz3UYvzEI7n5wiTXsCMAcQ=="
-  "resolved" "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.0.tgz"
-  "version" "9.3.0"
+vue-eslint-parser@^9.3.0:
+  version "9.3.0"
+  resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.0.tgz"
+  integrity sha512-48IxT9d0+wArT1+3wNIy0tascRoywqSUe2E1YalIC1L8jsUGe5aJQItWfRok7DVFGz3UYvzEI7n5wiTXsCMAcQ==
   dependencies:
-    "debug" "^4.3.4"
-    "eslint-scope" "^7.1.1"
-    "eslint-visitor-keys" "^3.3.0"
-    "espree" "^9.3.1"
-    "esquery" "^1.4.0"
-    "lodash" "^4.17.21"
-    "semver" "^7.3.6"
+    debug "^4.3.4"
+    eslint-scope "^7.1.1"
+    eslint-visitor-keys "^3.3.0"
+    espree "^9.3.1"
+    esquery "^1.4.0"
+    lodash "^4.17.21"
+    semver "^7.3.6"
 
-"vue-i18n@^9.2.2":
-  "integrity" "sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ=="
-  "resolved" "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.2.2.tgz"
-  "version" "9.2.2"
+vue-i18n@^9.2.2:
+  version "9.2.2"
+  resolved "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.2.2.tgz"
+  integrity sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==
   dependencies:
     "@intlify/core-base" "9.2.2"
     "@intlify/shared" "9.2.2"
     "@intlify/vue-devtools" "9.2.2"
     "@vue/devtools-api" "^6.2.1"
 
-"vue-property-decorator@^9.0.2":
-  "integrity" "sha512-xYA8MkZynPBGd/w5QFJ2d/NM0z/YeegMqYTphy7NJQXbZcuU6FC6AOdUAcy4SXP+YnkerC6AfH+ldg7PDk9ESQ=="
-  "resolved" "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-9.1.2.tgz"
-  "version" "9.1.2"
+vue-property-decorator@^9.0.2:
+  version "9.1.2"
+  resolved "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-9.1.2.tgz"
+  integrity sha512-xYA8MkZynPBGd/w5QFJ2d/NM0z/YeegMqYTphy7NJQXbZcuU6FC6AOdUAcy4SXP+YnkerC6AfH+ldg7PDk9ESQ==
 
-"vue-router@^4.1.6":
-  "integrity" "sha512-cChBPPmAflgBGmy3tBsjeoe3f3VOSG6naKyY5pjtrqLGbNEXdzCigFUHgBvp9e3ysAtFtEx7OLqcSDh/1Cq2TQ=="
-  "resolved" "https://registry.npmjs.org/vue-router/-/vue-router-4.2.2.tgz"
-  "version" "4.2.2"
+vue-router@^4.1.6:
+  version "4.2.2"
+  resolved "https://registry.npmjs.org/vue-router/-/vue-router-4.2.2.tgz"
+  integrity sha512-cChBPPmAflgBGmy3tBsjeoe3f3VOSG6naKyY5pjtrqLGbNEXdzCigFUHgBvp9e3ysAtFtEx7OLqcSDh/1Cq2TQ==
   dependencies:
     "@vue/devtools-api" "^6.5.0"
 
-"vue-slider-component@^4.0.0-beta.5":
-  "integrity" "sha512-dvaquYv85coVmQQqjWs+aaXFSCbTeNr7rpjXgSFo1E+XscErSXZkf0LF7MHX9rP/aeMpAVMMzm6Y//gS0ELiTw=="
-  "resolved" "https://registry.npmjs.org/vue-slider-component/-/vue-slider-component-4.0.0-beta.5.tgz"
-  "version" "4.0.0-beta.5"
+vue-slider-component@^4.0.0-beta.5:
+  version "4.0.0-beta.5"
+  resolved "https://registry.npmjs.org/vue-slider-component/-/vue-slider-component-4.0.0-beta.5.tgz"
+  integrity sha512-dvaquYv85coVmQQqjWs+aaXFSCbTeNr7rpjXgSFo1E+XscErSXZkf0LF7MHX9rP/aeMpAVMMzm6Y//gS0ELiTw==
   dependencies:
-    "core-js" "^3.6.5"
-    "vue-property-decorator" "^9.0.2"
+    core-js "^3.6.5"
+    vue-property-decorator "^9.0.2"
 
-"vue@*", "vue@^2.6.14 || ^3.2.0", "vue@^2.7.0 || ^3.2.25", "vue@^3.0.0", "vue@^3.0.0-0 || ^2.6.0", "vue@^3.0.1", "vue@^3.2.0", "vue@^3.2.25", "vue@^3.2.38", "vue@^3.2.41", "vue@2 || 3", "vue@3.3.4":
-  "integrity" "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw=="
-  "resolved" "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz"
-  "version" "3.3.4"
+vue@^3.2.38, vue@^3.2.41:
+  version "3.3.4"
+  resolved "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz"
+  integrity sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==
   dependencies:
     "@vue/compiler-dom" "3.3.4"
     "@vue/compiler-sfc" "3.3.4"
@@ -2946,193 +3051,193 @@
     "@vue/server-renderer" "3.3.4"
     "@vue/shared" "3.3.4"
 
-"vue3-carousel-3d@^1.0.4":
-  "integrity" "sha512-MqoaEYo94hfnHrs8UJzzeJX+30fbcHyn1qiSIzCdKefYcmSNmsssk8ahw/zL9D6zdrRySHTD5+vN+zGENPwlJw=="
-  "resolved" "https://registry.npmjs.org/vue3-carousel-3d/-/vue3-carousel-3d-1.0.4.tgz"
-  "version" "1.0.4"
+vue3-carousel-3d@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.npmjs.org/vue3-carousel-3d/-/vue3-carousel-3d-1.0.4.tgz"
+  integrity sha512-MqoaEYo94hfnHrs8UJzzeJX+30fbcHyn1qiSIzCdKefYcmSNmsssk8ahw/zL9D6zdrRySHTD5+vN+zGENPwlJw==
   dependencies:
-    "vue" "^3.2.38"
+    vue "^3.2.38"
 
-"vue3-puzzle-vcode@^1.0.6":
-  "integrity" "sha512-49BRLFQfvG0tt/gCrcMvncOkbcLWZrFxhAkjwbzmS/dQsXlWGz7qjta5b2/5q2q7UTVKTweyfHYwf7SRL+QehQ=="
-  "resolved" "https://registry.npmjs.org/vue3-puzzle-vcode/-/vue3-puzzle-vcode-1.0.12.tgz"
-  "version" "1.0.12"
+vue3-puzzle-vcode@^1.0.6:
+  version "1.0.12"
+  resolved "https://registry.npmjs.org/vue3-puzzle-vcode/-/vue3-puzzle-vcode-1.0.12.tgz"
+  integrity sha512-49BRLFQfvG0tt/gCrcMvncOkbcLWZrFxhAkjwbzmS/dQsXlWGz7qjta5b2/5q2q7UTVKTweyfHYwf7SRL+QehQ==
 
-"vue3-qr-reader@^1.0.0":
-  "integrity" "sha512-BRgmR+lDPkNwgL6skSaEOGFg4Aup/FLYnOGFCV0knYHxfbAnliJN/+wr//iqD2G3EOBrXw4TPGNfj/5Wxl7wwQ=="
-  "resolved" "https://registry.npmjs.org/vue3-qr-reader/-/vue3-qr-reader-1.0.0.tgz"
-  "version" "1.0.0"
+vue3-qr-reader@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/vue3-qr-reader/-/vue3-qr-reader-1.0.0.tgz"
+  integrity sha512-BRgmR+lDPkNwgL6skSaEOGFg4Aup/FLYnOGFCV0knYHxfbAnliJN/+wr//iqD2G3EOBrXw4TPGNfj/5Wxl7wwQ==
   dependencies:
-    "jsqr" "^1.4.0"
+    jsqr "^1.4.0"
 
-"vuedraggable@next":
-  "integrity" "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww=="
-  "resolved" "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz"
-  "version" "4.1.0"
+vuedraggable@next:
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz"
+  integrity sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==
   dependencies:
-    "sortablejs" "1.14.0"
+    sortablejs "1.14.0"
 
-"vuex-persistedstate@^4.1.0":
-  "integrity" "sha512-3SkEj4NqwM69ikJdFVw6gObeB0NHyspRYMYkR/EbhR0hbvAKyR5gksVhtAfY1UYuWUOCCA0QNGwv9pOwdj+XUQ=="
-  "resolved" "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-4.1.0.tgz"
-  "version" "4.1.0"
+vuex-persistedstate@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/vuex-persistedstate/-/vuex-persistedstate-4.1.0.tgz"
+  integrity sha512-3SkEj4NqwM69ikJdFVw6gObeB0NHyspRYMYkR/EbhR0hbvAKyR5gksVhtAfY1UYuWUOCCA0QNGwv9pOwdj+XUQ==
   dependencies:
-    "deepmerge" "^4.2.2"
-    "shvl" "^2.0.3"
+    deepmerge "^4.2.2"
+    shvl "^2.0.3"
 
-"vuex@^3.0 || ^4.0.0-rc", "vuex@^4.1.0":
-  "integrity" "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ=="
-  "resolved" "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz"
-  "version" "4.1.0"
+vuex@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz"
+  integrity sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==
   dependencies:
     "@vue/devtools-api" "^6.0.0-beta.11"
 
-"webpack-sources@^3.2.3":
-  "integrity" "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w=="
-  "resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz"
-  "version" "3.2.3"
+webpack-sources@^3.2.3:
+  version "3.2.3"
+  resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz"
+  integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
 
-"webpack-virtual-modules@^0.5.0":
-  "integrity" "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw=="
-  "resolved" "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz"
-  "version" "0.5.0"
+webpack-virtual-modules@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz"
+  integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==
 
-"which-module@^2.0.0":
-  "integrity" "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ=="
-  "resolved" "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz"
-  "version" "2.0.1"
+which-module@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz"
+  integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==
 
-"which@^2.0.1":
-  "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="
-  "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
-  "version" "2.0.2"
+which@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
+  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
   dependencies:
-    "isexe" "^2.0.0"
+    isexe "^2.0.0"
 
-"with@^7.0.0":
-  "integrity" "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w=="
-  "resolved" "https://registry.npmjs.org/with/-/with-7.0.2.tgz"
-  "version" "7.0.2"
+with@^7.0.0:
+  version "7.0.2"
+  resolved "https://registry.npmjs.org/with/-/with-7.0.2.tgz"
+  integrity sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==
   dependencies:
     "@babel/parser" "^7.9.6"
     "@babel/types" "^7.9.6"
-    "assert-never" "^1.2.1"
-    "babel-walk" "3.0.0-canary-5"
+    assert-never "^1.2.1"
+    babel-walk "3.0.0-canary-5"
 
-"word-wrap@^1.2.3":
-  "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
-  "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz"
-  "version" "1.2.3"
+word-wrap@^1.2.3:
+  version "1.2.3"
+  resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz"
+  integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
 
-"wrap-ansi@^6.2.0":
-  "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="
-  "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz"
-  "version" "6.2.0"
+wrap-ansi@^6.2.0:
+  version "6.2.0"
+  resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz"
+  integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
   dependencies:
-    "ansi-styles" "^4.0.0"
-    "string-width" "^4.1.0"
-    "strip-ansi" "^6.0.0"
+    ansi-styles "^4.0.0"
+    string-width "^4.1.0"
+    strip-ansi "^6.0.0"
 
-"wrap-ansi@^7.0.0":
-  "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="
-  "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"
-  "version" "7.0.0"
+wrap-ansi@^7.0.0:
+  version "7.0.0"
+  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"
-    "string-width" "^4.1.0"
-    "strip-ansi" "^6.0.0"
+    ansi-styles "^4.0.0"
+    string-width "^4.1.0"
+    strip-ansi "^6.0.0"
 
-"wrappy@1":
-  "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
-  "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
-  "version" "1.0.2"
+wrappy@1:
+  version "1.0.2"
+  resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
+  integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
 
-"xml-name-validator@^4.0.0":
-  "integrity" "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw=="
-  "resolved" "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz"
-  "version" "4.0.0"
+xml-name-validator@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz"
+  integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==
 
-"xtend@^4.0.2":
-  "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
-  "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"
-  "version" "4.0.2"
+xtend@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"
+  integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
 
-"y18n@^4.0.0":
-  "integrity" "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
-  "resolved" "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz"
-  "version" "4.0.3"
+y18n@^4.0.0:
+  version "4.0.3"
+  resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz"
+  integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
 
-"y18n@^5.0.5":
-  "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
-  "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz"
-  "version" "5.0.8"
+y18n@^5.0.5:
+  version "5.0.8"
+  resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz"
+  integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
 
-"yallist@^3.0.2":
-  "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
-  "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz"
-  "version" "3.1.1"
+yallist@^3.0.2:
+  version "3.1.1"
+  resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz"
+  integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
 
-"yallist@^4.0.0":
-  "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
-  "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
-  "version" "4.0.0"
+yallist@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
+  integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
 
-"yaml@^1.10.0", "yaml@^1.10.2":
-  "integrity" "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
-  "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz"
-  "version" "1.10.2"
+yaml@^1.10.0, yaml@^1.10.2:
+  version "1.10.2"
+  resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz"
+  integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
 
-"yargs-parser@^18.1.2":
-  "integrity" "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="
-  "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz"
-  "version" "18.1.3"
+yargs-parser@^18.1.2:
+  version "18.1.3"
+  resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz"
+  integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
   dependencies:
-    "camelcase" "^5.0.0"
-    "decamelize" "^1.2.0"
+    camelcase "^5.0.0"
+    decamelize "^1.2.0"
 
-"yargs-parser@^21.1.1":
-  "integrity" "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="
-  "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz"
-  "version" "21.1.1"
+yargs-parser@^21.1.1:
+  version "21.1.1"
+  resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz"
+  integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
 
-"yargs@^15.3.1":
-  "integrity" "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="
-  "resolved" "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz"
-  "version" "15.4.1"
+yargs@^15.3.1:
+  version "15.4.1"
+  resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz"
+  integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
   dependencies:
-    "cliui" "^6.0.0"
-    "decamelize" "^1.2.0"
-    "find-up" "^4.1.0"
-    "get-caller-file" "^2.0.1"
-    "require-directory" "^2.1.1"
-    "require-main-filename" "^2.0.0"
-    "set-blocking" "^2.0.0"
-    "string-width" "^4.2.0"
-    "which-module" "^2.0.0"
-    "y18n" "^4.0.0"
-    "yargs-parser" "^18.1.2"
+    cliui "^6.0.0"
+    decamelize "^1.2.0"
+    find-up "^4.1.0"
+    get-caller-file "^2.0.1"
+    require-directory "^2.1.1"
+    require-main-filename "^2.0.0"
+    set-blocking "^2.0.0"
+    string-width "^4.2.0"
+    which-module "^2.0.0"
+    y18n "^4.0.0"
+    yargs-parser "^18.1.2"
 
-"yargs@^17.5.1":
-  "integrity" "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="
-  "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz"
-  "version" "17.7.2"
+yargs@^17.5.1:
+  version "17.7.2"
+  resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz"
+  integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
   dependencies:
-    "cliui" "^8.0.1"
-    "escalade" "^3.1.1"
-    "get-caller-file" "^2.0.5"
-    "require-directory" "^2.1.1"
-    "string-width" "^4.2.3"
-    "y18n" "^5.0.5"
-    "yargs-parser" "^21.1.1"
+    cliui "^8.0.1"
+    escalade "^3.1.1"
+    get-caller-file "^2.0.5"
+    require-directory "^2.1.1"
+    string-width "^4.2.3"
+    y18n "^5.0.5"
+    yargs-parser "^21.1.1"
 
-"yocto-queue@^0.1.0":
-  "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
-  "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
-  "version" "0.1.0"
+yocto-queue@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
+  integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
 
-"zrender@5.4.4":
-  "integrity" "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw=="
-  "resolved" "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz"
-  "version" "5.4.4"
+zrender@5.4.4:
+  version "5.4.4"
+  resolved "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz"
+  integrity sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==
   dependencies:
-    "tslib" "2.3.0"
+    tslib "2.3.0"

--
Gitblit v1.9.3