diff --git a/README.md b/README.md index 08795691c..a5158f801 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ laravel-wallet - Easy work with virtual wallet. [[Benchmark](https://github.com/bavix/laravel-wallet-benchmark/)] [[Documentation](https://bavix.github.io/laravel-wallet/)] -[[Get Started](https://bavix.github.io/laravel-wallet/#/basic-usage)] +[[Get Started](https://bavix.github.io/laravel-wallet/guide/introduction/)] * **Vendor**: bavix * **Package**: laravel-wallet diff --git a/composer.json b/composer.json index 8ccf952dd..2c8ac7c91 100644 --- a/composer.json +++ b/composer.json @@ -59,7 +59,7 @@ } }, "scripts": { - "docs": "@php -S localhost:3000 -t ./docs", + "docs": "@php -S localhost:3000 -t old_docs", "parabench":"@php ./vendor/bin/testbench package:test --coverage-xml=build/coverage-xml --log-junit=build/junit.xml", "infect": "@php vendor/bin/infection --coverage=build --min-msi=50 -j$(nproc) --only-covering-test-cases", "phpstan": ["@phpstan-src", "@phpstan-tests"], diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/.vitepress/.gitignore b/docs/.vitepress/.gitignore new file mode 100644 index 000000000..6e25fa8f1 --- /dev/null +++ b/docs/.vitepress/.gitignore @@ -0,0 +1 @@ +cache/ \ No newline at end of file diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts new file mode 100644 index 000000000..0834f6cf5 --- /dev/null +++ b/docs/.vitepress/config.mts @@ -0,0 +1,138 @@ +import { defineConfig } from 'vitepress' + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: "Laravel Wallet", + description: "Easy work with virtual wallet", + base: '/laravel-wallet/', + head: [ + [ + 'script', + { async: '', src: 'https://www.googletagmanager.com/gtag/js?id=G-LNEGT551DV' } + ], + [ + 'script', + {}, + `window.dataLayer = window.dataLayer || []; + function gtag(){dataLayer.push(arguments);} + gtag('js', new Date()); + gtag('config', 'G-LNEGT551DV');` + ] + ], + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + search: { + provider: 'local' + }, + editLink: { + pattern: 'https://github.com/bavix/laravel-wallet/edit/master/docs/:path' + }, + nav: [ + { text: 'Home', link: '/' }, + { text: 'Guide', link: '/guide/introduction/' }, + { text: 'Chat', link: 'https://t.me/laravel_wallet' }, + { text: 'Issues', link: 'https://github.com/bavix/laravel-wallet/issues' }, + { text: 'Discussions', link: 'https://github.com/bavix/laravel-wallet/discussions' }, + { text: 'Donate', link: 'https://opencollective.com/laravel-wallet' }, + ], + + sidebar: [ + { + text: 'Getting started', + items: [ + { text: 'Introduction', link: '/guide/introduction/' }, + { text: 'Installation', link: '/guide/introduction/installation' }, + { text: 'Configuration', link: '/guide/introduction/configuration' }, + { text: 'Basic Usage', link: '/guide/introduction/basic-usage' }, + { text: 'Upgrade', link: '/guide/introduction/upgrade' }, + ] + }, + { + text: 'Single/Default Wallet', + items: [ + { text: 'Deposit', link: '/guide/single/deposit' }, + { text: 'Withdraw', link: '/guide/single/withdraw' }, + { text: 'Transfer', link: '/guide/single/transfer' }, + { text: 'Refresh Balance', link: '/guide/single/refresh' }, + { text: 'Confirm Transaction', link: '/guide/single/confirm' }, + { text: 'Cancel Transaction', link: '/guide/single/cancel' }, + { text: 'Exchange', link: '/guide/single/exchange' }, + { text: 'Credit Limits', link: '/guide/single/credit-limits' }, + ] + }, + { + text: 'Multi Wallet', + items: [ + { text: 'New Wallet', link: '/guide/multi/new-wallet' }, + { text: 'Transfer', link: '/guide/multi/transfer' }, + { text: 'Transaction Filter', link: '/guide/multi/transaction-filter' }, + ] + }, + { + text: 'Fractional Wallet', + items: [ + { text: 'Deposit', link: '/guide/fractional/deposit' }, + { text: 'Withdraw', link: '/guide/fractional/withdraw' }, + { text: 'Transfer', link: '/guide/fractional/transfer' }, + ] + }, + { + text: 'Purchases', + items: [ + { text: 'Payment', link: '/guide/purchases/payment' }, + { text: 'Payment Free', link: '/guide/purchases/payment-free' }, + { text: 'Refund', link: '/guide/purchases/refund' }, + { text: 'Gift', link: '/guide/purchases/gift' }, + { text: 'Cart', link: '/guide/purchases/cart' }, + { text: 'Commissions', link: '/guide/purchases/commissions' }, + { text: 'Customize receiving', link: '/guide/purchases/receiving' }, + ] + }, + { + text: 'Database Transaction', + items: [ + { text: 'Atomic Service', link: '/guide/db/atomic-service' }, + { text: 'Race Condition', link: '/guide/db/race-condition' }, + { text: 'Transaction', link: '/guide/db/transaction' }, + ] + }, + { + text: 'Events', + items: [ + { text: 'Balance Updated', link: '/guide/events/balance-updated-event' }, + { text: 'Wallet Created', link: '/guide/events/wallet-created-event' }, + { text: 'Transaction Created', link: '/guide/events/transaction-created-event' }, + { text: 'Customize', link: '/guide/events/customize' }, + ] + }, + { + text: 'Helpers', + items: [ + { text: 'Formatter', link: '/guide/helpers/formatter' }, + ] + }, + { + text: 'High performance api handles', + items: [ + { text: 'Batch Transactions', link: '/guide/high-performance/batch-transactions' }, + { text: 'Batch Transfers', link: '/guide/high-performance/batch-transfers' }, + ] + }, + { + text: 'CQRS', + items: [ + { text: 'Create Wallet', link: '/guide/cqrs/create-wallet' }, + ] + }, + ], + + socialLinks: [ + { icon: 'github', link: 'https://github.com/bavix/laravel-wallet' }, + ], + + footer: { + message: 'Released under the MIT License.', + copyright: 'Copyright © 2018-present Babichev Maksim' + } + } +}) diff --git a/docs/.vitepress/dist/404.html b/docs/.vitepress/dist/404.html new file mode 100644 index 000000000..a42da2327 --- /dev/null +++ b/docs/.vitepress/dist/404.html @@ -0,0 +1,23 @@ + + + + + + 404 | Laravel Wallet + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/_include/composer.html b/docs/.vitepress/dist/_include/composer.html new file mode 100644 index 000000000..ae899a0c9 --- /dev/null +++ b/docs/.vitepress/dist/_include/composer.html @@ -0,0 +1,26 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Composer

The recommended installation method is using Composer.

In your project root just run:

bash
composer req bavix/laravel-wallet

Ensure that you’ve set up your project to autoload Composer-installed packages.

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/_include/eager_loading.html b/docs/.vitepress/dist/_include/eager_loading.html new file mode 100644 index 000000000..4fc7eebfa --- /dev/null +++ b/docs/.vitepress/dist/_include/eager_loading.html @@ -0,0 +1,42 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Eager Loading

When accessing Eloquent relationships as properties, the relationship data is "lazy loaded". This means the relationship data is not actually loaded until you first access the property. However, Eloquent can "eager load" relationships at the time you query the parent model. Eager loading alleviates the N + 1 query problem. To illustrate the N + 1 query problem, consider a Wallet model that is related to User:

Add the HasWallet trait and Wallet interface to model.

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet; // public function wallet(): MorphOne...
+}

Now, let's retrieve all wallets and their users:

php
$users = User::all();
+
+foreach ($users as $user) {
+    // echo $user->wallet->balance;
+    echo $user->balance; // Abbreviated notation
+}

This loop will execute 1 query to retrieve all of the users on the table, then another query for each user to retrieve the wallet. So, if we have 25 users, the code above would run 26 queries: 1 for the original user, and 25 additional queries to retrieve the wallet of each user.

Thankfully, we can use eager loading to reduce this operation to just 2 queries. When querying, you may specify which relationships should be eager loaded using the with method:

php
$users = User::with('wallet')->all();
+
+foreach ($users as $user) {
+    // echo $user->wallet->balance;
+    echo $user->balance; // Abbreviated notation
+}

For this operation, only two queries will be executed.

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/_include/models/user_simple.html b/docs/.vitepress/dist/_include/models/user_simple.html new file mode 100644 index 000000000..d92682c28 --- /dev/null +++ b/docs/.vitepress/dist/_include/models/user_simple.html @@ -0,0 +1,32 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

It is necessary to expand the model that will have the wallet. This is done in two stages:

  • Add Wallet interface;
  • Add the HasWallet trait;

Let's get started.

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet;
+}

The model is prepared to work with a wallet.

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/_include/models/user_simple_float.html b/docs/.vitepress/dist/_include/models/user_simple_float.html new file mode 100644 index 000000000..e40a05fd7 --- /dev/null +++ b/docs/.vitepress/dist/_include/models/user_simple_float.html @@ -0,0 +1,32 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

It is necessary to expand the model that will have the wallet. This is done in two stages:

  • Add Wallet interface;
  • Add the HasWalletFloat trait;

Let's get started.

php
use Bavix\Wallet\Traits\HasWalletFloat;
+use Bavix\Wallet\Interfaces\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWalletFloat;
+}

The model is prepared to work with a wallet.

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/assets/app.Bju71ejy.js b/docs/.vitepress/dist/assets/app.Bju71ejy.js new file mode 100644 index 000000000..9d516279b --- /dev/null +++ b/docs/.vitepress/dist/assets/app.Bju71ejy.js @@ -0,0 +1 @@ +import{U as o,a4 as p,a5 as u,a6 as l,a7 as c,a8 as f,a9 as d,aa as m,ab as h,ac as g,ad as A,d as P,u as v,y,x as C,ae as b,af as w,ag as E,ah as R}from"./chunks/framework.OdeEVNy0.js";import{t as S}from"./chunks/theme.TrL8JeO-.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(S),_=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return y(()=>{C(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),E(),s.setup&&s.setup(),()=>R(s.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=D(),a=x();a.provide(u,e);const t=l(e.route);return a.provide(c,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function x(){return h(_)}function D(){let e=o,a;return g(t=>{let n=A(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{p(a.route,t.site),e.mount("#app")})});export{T as createApp}; diff --git a/docs/.vitepress/dist/assets/chunks/@localSearchIndexroot.Duohj-zx.js b/docs/.vitepress/dist/assets/chunks/@localSearchIndexroot.Duohj-zx.js new file mode 100644 index 000000000..68beac5a4 --- /dev/null +++ b/docs/.vitepress/dist/assets/chunks/@localSearchIndexroot.Duohj-zx.js @@ -0,0 +1 @@ +const e='{"documentCount":140,"nextId":140,"documentIds":{"0":"/laravel-wallet/_include/composer.html#composer","1":"/laravel-wallet/_include/eager_loading.html#eager-loading","2":"/laravel-wallet/guide/additions/laravel-wallet-swap.html#laravel-wallet-swap","3":"/laravel-wallet/guide/additions/laravel-wallet-swap.html#composer","4":"/laravel-wallet/guide/additions/laravel-wallet-swap.html#user-model","5":"/laravel-wallet/guide/additions/laravel-wallet-swap.html#simple-example","6":"/laravel-wallet/guide/additions/laravel-wallet-uuid.html#laravel-wallet-uuid","7":"/laravel-wallet/guide/additions/laravel-wallet-uuid.html#composer","8":"/laravel-wallet/guide/cqrs/create-wallet.html#asynchronous-wallet-creation","9":"/laravel-wallet/guide/cqrs/create-wallet.html#user-model","10":"/laravel-wallet/guide/cqrs/create-wallet.html#action-handler","11":"/laravel-wallet/guide/cqrs/create-wallet.html#command-handler","12":"/laravel-wallet/guide/db/atomic-service.html#atomic-service-mutex-in-a-db-transaction","13":"/laravel-wallet/guide/db/race-condition.html#race-condition","14":"/laravel-wallet/guide/db/transaction.html#transaction","15":"/laravel-wallet/guide/events/balance-updated-event.html#tracking-balance-changes","16":"/laravel-wallet/guide/events/customize.html#customizing-events","17":"/laravel-wallet/guide/events/transaction-created-event.html#tracking-the-creation-of-wallet-transactions","18":"/laravel-wallet/guide/events/wallet-created-event.html#tracking-the-creation-of-wallets","19":"/laravel-wallet/guide/fractional/deposit.html#deposit-float","20":"/laravel-wallet/guide/fractional/deposit.html#user-model","21":"/laravel-wallet/guide/fractional/deposit.html#make-a-deposit","22":"/laravel-wallet/guide/fractional/transfer.html#transfer","23":"/laravel-wallet/guide/fractional/transfer.html#user-model","24":"/laravel-wallet/guide/fractional/transfer.html#example-contract","25":"/laravel-wallet/guide/fractional/transfer.html#make-a-transfer","26":"/laravel-wallet/guide/fractional/transfer.html#force-transfer","27":"/laravel-wallet/guide/fractional/withdraw.html#withdraw","28":"/laravel-wallet/guide/fractional/withdraw.html#user-model","29":"/laravel-wallet/guide/fractional/withdraw.html#make-a-withdraw","30":"/laravel-wallet/guide/fractional/withdraw.html#force-withdraw","31":"/laravel-wallet/guide/fractional/withdraw.html#and-what-will-happen-if-the-money-is-not-enough","32":"/laravel-wallet/guide/helpers/formatter.html#helper-formatterserviceinterface","33":"/laravel-wallet/guide/helpers/formatter.html#floatvalue","34":"/laravel-wallet/guide/helpers/formatter.html#intvalue","35":"/laravel-wallet/guide/high-performance/batch-transactions.html#api-batch-transactions","36":"/laravel-wallet/guide/high-performance/batch-transfers.html#api-batch-transfers","37":"/laravel-wallet/guide/introduction/basic-usage.html#basic-usage","38":"/laravel-wallet/guide/introduction/basic-usage.html#simple-wallet","39":"/laravel-wallet/guide/introduction/basic-usage.html#simple-wallet-transactions","40":"/laravel-wallet/guide/introduction/basic-usage.html#purchases","41":"/laravel-wallet/guide/introduction/basic-usage.html#eager-loading","42":"/laravel-wallet/guide/introduction/basic-usage.html#how-to-work-with-fractional-numbers","43":"/laravel-wallet/guide/introduction/configuration.html#configuration","44":"/laravel-wallet/guide/introduction/configuration.html#environment","45":"/laravel-wallet/guide/introduction/configuration.html#configure-default-wallet","46":"/laravel-wallet/guide/introduction/configuration.html#extend-base-wallet-model","47":"/laravel-wallet/guide/introduction/configuration.html#register-base-wallet-model","48":"/laravel-wallet/guide/introduction/configuration.html#changing-wallet-decimal-places","49":"/laravel-wallet/guide/introduction/#introduction","50":"/laravel-wallet/guide/introduction/#support","51":"/laravel-wallet/guide/introduction/installation.html#installation","52":"/laravel-wallet/guide/introduction/installation.html#composer","53":"/laravel-wallet/guide/introduction/installation.html#you-can-use-it-for-customization","54":"/laravel-wallet/guide/introduction/installation.html#run-migrations","55":"/laravel-wallet/guide/introduction/installation.html#configuration","56":"/laravel-wallet/guide/introduction/upgrade.html#upgrade-guide","57":"/laravel-wallet/guide/introduction/upgrade.html#_1-x-x-→-2-x-x","58":"/laravel-wallet/guide/introduction/upgrade.html#_2-1-x-→-2-2-x","59":"/laravel-wallet/guide/introduction/upgrade.html#_2-2-x-→-2-4-x","60":"/laravel-wallet/guide/introduction/upgrade.html#_2-4-x-→-3-0-x","61":"/laravel-wallet/guide/introduction/upgrade.html#_3-0-x-→-3-1-x","62":"/laravel-wallet/guide/introduction/upgrade.html#_3-1-x-→-4-0-x","63":"/laravel-wallet/guide/introduction/upgrade.html#if-you-use-payment-for-goods","64":"/laravel-wallet/guide/introduction/upgrade.html#_4-0-x-→-5-0-x","65":"/laravel-wallet/guide/introduction/upgrade.html#_5-x-x-→-6-0-x","66":"/laravel-wallet/guide/introduction/upgrade.html#_6-x-x-→-6-2-4","67":"/laravel-wallet/guide/introduction/upgrade.html#_6-2-4-→-7-x-x","68":"/laravel-wallet/guide/introduction/upgrade.html#_7-x-x-→-8-0-x","69":"/laravel-wallet/guide/introduction/upgrade.html#_8-0-x-→-8-1-x","70":"/laravel-wallet/guide/introduction/upgrade.html#_8-1-x-→-9-0-x","71":"/laravel-wallet/guide/introduction/upgrade.html#_9-x-x-→-10-0-x","72":"/laravel-wallet/guide/introduction/upgrade.html#_10-x-x-→-11-0-x","73":"/laravel-wallet/guide/multi/new-wallet.html#create-a-wallet-and-use-it","74":"/laravel-wallet/guide/multi/new-wallet.html#user-model","75":"/laravel-wallet/guide/multi/new-wallet.html#create-a-wallet","76":"/laravel-wallet/guide/multi/new-wallet.html#how-to-get-the-right-wallet","77":"/laravel-wallet/guide/multi/new-wallet.html#default-wallet-multiwallet","78":"/laravel-wallet/guide/multi/transaction-filter.html#transaction-filter","79":"/laravel-wallet/guide/multi/transfer.html#transfer-between-wallets","80":"/laravel-wallet/guide/multi/transfer.html#user-model","81":"/laravel-wallet/guide/multi/transfer.html#make-a-transfer","82":"/laravel-wallet/guide/multi/transfer.html#force-transfer","83":"/laravel-wallet/guide/multi/transfer.html#change-the-meta-and-confirmation","84":"/laravel-wallet/guide/purchases/cart.html#cart","85":"/laravel-wallet/guide/purchases/cart.html#user-model","86":"/laravel-wallet/guide/purchases/cart.html#item-model","87":"/laravel-wallet/guide/purchases/cart.html#fill-the-cart","88":"/laravel-wallet/guide/purchases/gift.html#gift","89":"/laravel-wallet/guide/purchases/gift.html#user-model","90":"/laravel-wallet/guide/purchases/gift.html#item-model","91":"/laravel-wallet/guide/purchases/gift.html#santa-claus-give-gifts","92":"/laravel-wallet/guide/purchases/payment-free.html#payment-free","93":"/laravel-wallet/guide/purchases/payment-free.html#user-model","94":"/laravel-wallet/guide/purchases/payment-free.html#item-model","95":"/laravel-wallet/guide/purchases/payment-free.html#pay-free","96":"/laravel-wallet/guide/purchases/payment.html#payment","97":"/laravel-wallet/guide/purchases/payment.html#user-model","98":"/laravel-wallet/guide/purchases/payment.html#item-model","99":"/laravel-wallet/guide/purchases/payment.html#proceed-to-purchase","100":"/laravel-wallet/guide/purchases/payment.html#safe-pay","101":"/laravel-wallet/guide/purchases/receiving.html#payment-customize-receiving","102":"/laravel-wallet/guide/purchases/receiving.html#user-model","103":"/laravel-wallet/guide/purchases/receiving.html#item-model","104":"/laravel-wallet/guide/purchases/receiving.html#proceed-to-purchase","105":"/laravel-wallet/guide/purchases/refund.html#refund","106":"/laravel-wallet/guide/purchases/refund.html#user-model","107":"/laravel-wallet/guide/purchases/refund.html#item-model","108":"/laravel-wallet/guide/purchases/refund.html#make-a-refund","109":"/laravel-wallet/guide/single/cancel.html#user-model","110":"/laravel-wallet/guide/single/cancel.html#example","111":"/laravel-wallet/guide/single/confirm.html#user-model","112":"/laravel-wallet/guide/single/confirm.html#example","113":"/laravel-wallet/guide/single/credit-limits.html#credit-limits","114":"/laravel-wallet/guide/single/deposit.html#deposit","115":"/laravel-wallet/guide/single/deposit.html#user-model","116":"/laravel-wallet/guide/single/deposit.html#make-a-deposit","117":"/laravel-wallet/guide/single/exchange.html#exchange","118":"/laravel-wallet/guide/single/exchange.html#service-for-working-with-currency","119":"/laravel-wallet/guide/single/exchange.html#service-registration","120":"/laravel-wallet/guide/single/exchange.html#exchange-process","121":"/laravel-wallet/guide/single/refresh.html#to-refresh-the-balance","122":"/laravel-wallet/guide/single/refresh.html#user-model","123":"/laravel-wallet/guide/single/refresh.html#get-the-current-balance-for-your-wallet","124":"/laravel-wallet/guide/single/taxing.html#user-model","125":"/laravel-wallet/guide/single/taxing.html#item-model","126":"/laravel-wallet/guide/single/taxing.html#tax-process","127":"/laravel-wallet/guide/single/taxing.html#minimal-taxing","128":"/laravel-wallet/guide/single/taxing.html#successfully","129":"/laravel-wallet/guide/single/taxing.html#failed","130":"/laravel-wallet/guide/single/transfer.html#transfer","131":"/laravel-wallet/guide/single/transfer.html#user-model","132":"/laravel-wallet/guide/single/transfer.html#example-contract","133":"/laravel-wallet/guide/single/transfer.html#make-a-transfer","134":"/laravel-wallet/guide/single/transfer.html#force-transfer","135":"/laravel-wallet/guide/single/withdraw.html#withdraw","136":"/laravel-wallet/guide/single/withdraw.html#user-model","137":"/laravel-wallet/guide/single/withdraw.html#make-a-withdraw","138":"/laravel-wallet/guide/single/withdraw.html#force-withdraw","139":"/laravel-wallet/guide/single/withdraw.html#and-what-will-happen-if-the-money-is-not-enough"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[1,1,29],"1":[2,1,128],"2":[3,1,1],"3":[1,1,20],"4":[2,1,26],"5":[2,1,42],"6":[3,1,57],"7":[1,1,47],"8":[3,1,27],"9":[2,3,22],"10":[2,3,31],"11":[2,3,69],"12":[8,1,148],"13":[2,1,95],"14":[1,1,74],"15":[3,1,72],"16":[2,1,116],"17":[6,1,71],"18":[5,1,71],"19":[2,1,28],"20":[2,2,41],"21":[3,2,35],"22":[1,1,23],"23":[2,1,1],"24":[2,3,21],"25":[3,1,44],"26":[2,1,25],"27":[1,1,31],"28":[2,1,1],"29":[3,1,40],"30":[2,1,27],"31":[11,1,30],"32":[2,1,23],"33":[1,2,13],"34":[1,2,16],"35":[3,1,219],"36":[3,1,163],"37":[2,1,1],"38":[2,2,41],"39":[3,2,38],"40":[1,2,142],"41":[2,2,128],"42":[7,2,54],"43":[1,1,22],"44":[1,1,39],"45":[3,1,14],"46":[4,1,36],"47":[4,5,41],"48":[4,5,26],"49":[1,1,7],"50":[1,1,9],"51":[1,1,1],"52":[1,1,29],"53":[6,1,5],"54":[2,7,13],"55":[1,7,28],"56":[2,1,1],"57":[4,2,6],"58":[4,2,7],"59":[4,2,5],"60":[6,2,47],"61":[5,2,5],"62":[6,2,29],"63":[6,8,27],"64":[5,2,47],"65":[5,2,46],"66":[5,2,12],"67":[6,2,124],"68":[5,2,6],"69":[5,2,48],"70":[7,2,97],"71":[5,2,32],"72":[5,2,79],"73":[6,1,18],"74":[2,6,21],"75":[3,6,30],"76":[7,6,13],"77":[4,6,42],"78":[2,1,84],"79":[3,1,23],"80":[2,3,21],"81":[3,3,48],"82":[2,3,25],"83":[6,3,56],"84":[1,1,1],"85":[2,1,31],"86":[2,1,113],"87":[3,1,63],"88":[1,1,1],"89":[2,1,31],"90":[2,1,111],"91":[4,1,57],"92":[2,1,1],"93":[2,2,31],"94":[2,2,111],"95":[2,2,29],"96":[1,1,1],"97":[2,1,31],"98":[2,1,111],"99":[3,1,54],"100":[2,1,20],"101":[3,1,1],"102":[2,3,31],"103":[2,3,110],"104":[3,3,47],"105":[1,1,1],"106":[2,1,31],"107":[2,1,111],"108":[3,1,30],"109":[2,1,33],"110":[2,2,36],"111":[2,1,33],"112":[2,2,36],"113":[2,1,88],"114":[1,1,28],"115":[2,1,41],"116":[3,1,40],"117":[1,1,46],"118":[5,1,60],"119":[2,1,23],"120":[2,1,69],"121":[4,1,33],"122":[2,4,41],"123":[7,4,44],"124":[2,1,31],"125":[2,1,64],"126":[2,1,32],"127":[2,1,46],"128":[1,2,33],"129":[1,2,36],"130":[1,1,23],"131":[2,1,41],"132":[2,3,20],"133":[3,1,42],"134":[2,1,25],"135":[1,1,31],"136":[2,1,41],"137":[3,1,36],"138":[2,1,27],"139":[11,1,30]},"averageFieldLength":[2.857142857142857,1.7714285714285714,42.62857142857141],"storedFields":{"0":{"title":"Composer","titles":[]},"1":{"title":"Eager Loading","titles":[]},"2":{"title":"Laravel Wallet Swap","titles":[]},"3":{"title":"Composer","titles":[]},"4":{"title":"User model","titles":["Composer"]},"5":{"title":"Simple example","titles":["Composer"]},"6":{"title":"Laravel Wallet UUID","titles":[]},"7":{"title":"Composer","titles":[]},"8":{"title":"Asynchronous wallet creation","titles":[]},"9":{"title":"User Model","titles":["Asynchronous wallet creation"]},"10":{"title":"Action Handler","titles":["Asynchronous wallet creation"]},"11":{"title":"Command Handler","titles":["Asynchronous wallet creation"]},"12":{"title":"Atomic Service (Mutex in a db transaction)","titles":[]},"13":{"title":"Race Condition","titles":[]},"14":{"title":"Transaction","titles":[]},"15":{"title":"Tracking balance changes","titles":[]},"16":{"title":"Customizing events","titles":[]},"17":{"title":"Tracking the creation of wallet transactions","titles":[]},"18":{"title":"Tracking the creation of wallets","titles":[]},"19":{"title":"Deposit float","titles":[]},"20":{"title":"User Model","titles":["Deposit float"]},"21":{"title":"Make a Deposit","titles":["Deposit float"]},"22":{"title":"Transfer","titles":[]},"23":{"title":"User Model","titles":["Transfer"]},"24":{"title":"Example contract","titles":["Transfer","User Model"]},"25":{"title":"Make a Transfer","titles":["Transfer"]},"26":{"title":"Force Transfer","titles":["Transfer"]},"27":{"title":"Withdraw","titles":[]},"28":{"title":"User Model","titles":["Withdraw"]},"29":{"title":"Make a Withdraw","titles":["Withdraw"]},"30":{"title":"Force Withdraw","titles":["Withdraw"]},"31":{"title":"And what will happen if the money is not enough?","titles":["Withdraw"]},"32":{"title":"Helper FormatterServiceInterface","titles":[]},"33":{"title":"floatValue","titles":["Helper FormatterServiceInterface"]},"34":{"title":"intValue","titles":["Helper FormatterServiceInterface"]},"35":{"title":"API. Batch Transactions","titles":[]},"36":{"title":"API. Batch Transfers","titles":[]},"37":{"title":"Basic Usage","titles":[]},"38":{"title":"Simple Wallet","titles":["Basic Usage"]},"39":{"title":"Simple wallet transactions","titles":["Basic Usage"]},"40":{"title":"Purchases","titles":["Basic Usage"]},"41":{"title":"Eager Loading","titles":["Basic Usage"]},"42":{"title":"How to work with fractional numbers?","titles":["Basic Usage"]},"43":{"title":"Configuration","titles":[]},"44":{"title":"Environment","titles":["Configuration"]},"45":{"title":"Configure default wallet","titles":["Configuration"]},"46":{"title":"Extend base Wallet model","titles":["Configuration"]},"47":{"title":"Register base Wallet model","titles":["Configuration","Extend base Wallet model"]},"48":{"title":"Changing wallet decimal places","titles":["Configuration","Extend base Wallet model"]},"49":{"title":"Introduction","titles":[]},"50":{"title":"Support","titles":["Introduction"]},"51":{"title":"Installation","titles":[]},"52":{"title":"Composer","titles":["Installation"]},"53":{"title":"You can use it for customization","titles":["Installation"]},"54":{"title":"Run Migrations","titles":["Installation","You can use it for customization"]},"55":{"title":"Configuration","titles":["Installation","You can use it for customization"]},"56":{"title":"Upgrade Guide","titles":[]},"57":{"title":"1.x.x → 2.x.x","titles":["Upgrade Guide"]},"58":{"title":"2.1.x → 2.2.x","titles":["Upgrade Guide"]},"59":{"title":"2.2.x → 2.4.x","titles":["Upgrade Guide"]},"60":{"title":"2.4.x → 3.0.x","titles":["Upgrade Guide"]},"61":{"title":"3.0.x → 3.1.x","titles":["Upgrade Guide"]},"62":{"title":"3.1.x → 4.0.x","titles":["Upgrade Guide"]},"63":{"title":"If you use payment for goods","titles":["Upgrade Guide","3.1.x → 4.0.x"]},"64":{"title":"4.0.x → 5.0.x","titles":["Upgrade Guide"]},"65":{"title":"5.x.x → 6.0.x","titles":["Upgrade Guide"]},"66":{"title":"6.x.x → 6.2.4","titles":["Upgrade Guide"]},"67":{"title":"6.2.4 → 7.x.x","titles":["Upgrade Guide"]},"68":{"title":"7.x.x → 8.0.x","titles":["Upgrade Guide"]},"69":{"title":"8.0.x → 8.1.x","titles":["Upgrade Guide"]},"70":{"title":"8.1.x+ → 9.0.x","titles":["Upgrade Guide"]},"71":{"title":"9.x.x → 10.0.x","titles":["Upgrade Guide"]},"72":{"title":"10.x.x → 11.0.x","titles":["Upgrade Guide"]},"73":{"title":"Create a wallet and use it","titles":[]},"74":{"title":"User Model","titles":["Create a wallet and use it"]},"75":{"title":"Create a wallet","titles":["Create a wallet and use it"]},"76":{"title":"How to get the right wallet?","titles":["Create a wallet and use it"]},"77":{"title":"Default Wallet + MultiWallet","titles":["Create a wallet and use it"]},"78":{"title":"Transaction Filter","titles":[]},"79":{"title":"Transfer between wallets","titles":[]},"80":{"title":"User Model","titles":["Transfer between wallets"]},"81":{"title":"Make a Transfer","titles":["Transfer between wallets"]},"82":{"title":"Force Transfer","titles":["Transfer between wallets"]},"83":{"title":"Change the meta and confirmation.","titles":["Transfer between wallets"]},"84":{"title":"Cart","titles":[]},"85":{"title":"User Model","titles":["Cart"]},"86":{"title":"Item Model","titles":["Cart"]},"87":{"title":"Fill the cart","titles":["Cart"]},"88":{"title":"Gift","titles":[]},"89":{"title":"User Model","titles":["Gift"]},"90":{"title":"Item Model","titles":["Gift"]},"91":{"title":"Santa Claus, give gifts","titles":["Gift"]},"92":{"title":"Payment Free","titles":[]},"93":{"title":"User Model","titles":["Payment Free"]},"94":{"title":"Item Model","titles":["Payment Free"]},"95":{"title":"Pay Free","titles":["Payment Free"]},"96":{"title":"Payment","titles":[]},"97":{"title":"User Model","titles":["Payment"]},"98":{"title":"Item Model","titles":["Payment"]},"99":{"title":"Proceed to purchase","titles":["Payment"]},"100":{"title":"Safe Pay","titles":["Payment"]},"101":{"title":"Payment. Customize receiving","titles":[]},"102":{"title":"User Model","titles":["Payment. Customize receiving"]},"103":{"title":"Item Model","titles":["Payment. Customize receiving"]},"104":{"title":"Proceed to purchase","titles":["Payment. Customize receiving"]},"105":{"title":"Refund","titles":[]},"106":{"title":"User Model","titles":["Refund"]},"107":{"title":"Item Model","titles":["Refund"]},"108":{"title":"Make a refund","titles":["Refund"]},"109":{"title":"User Model","titles":[]},"110":{"title":"Example:","titles":["User Model"]},"111":{"title":"User Model","titles":[]},"112":{"title":"Example:","titles":["User Model"]},"113":{"title":"Credit Limits","titles":[]},"114":{"title":"Deposit","titles":[]},"115":{"title":"User Model","titles":["Deposit"]},"116":{"title":"Make a Deposit","titles":["Deposit"]},"117":{"title":"Exchange","titles":[]},"118":{"title":"Service for working with currency","titles":["Exchange"]},"119":{"title":"Service Registration","titles":["Exchange"]},"120":{"title":"Exchange process","titles":["Exchange"]},"121":{"title":"To refresh the balance","titles":[]},"122":{"title":"User Model","titles":["To refresh the balance"]},"123":{"title":"Get the current balance for your wallet","titles":["To refresh the balance"]},"124":{"title":"User Model","titles":[]},"125":{"title":"Item Model","titles":[]},"126":{"title":"Tax process","titles":[]},"127":{"title":"Minimal Taxing","titles":[]},"128":{"title":"Successfully","titles":["Minimal Taxing"]},"129":{"title":"Failed","titles":["Minimal Taxing"]},"130":{"title":"Transfer","titles":[]},"131":{"title":"User Model","titles":["Transfer"]},"132":{"title":"Example contract","titles":["Transfer","User Model"]},"133":{"title":"Make a Transfer","titles":["Transfer"]},"134":{"title":"Force Transfer","titles":["Transfer"]},"135":{"title":"Withdraw","titles":[]},"136":{"title":"User Model","titles":["Withdraw"]},"137":{"title":"Make a Withdraw","titles":["Withdraw"]},"138":{"title":"Force Withdraw","titles":["Withdraw"]},"139":{"title":"And what will happen if the money is not enough?","titles":["Withdraw"]}},"dirtCount":0,"index":[["это",{"2":{"120":1}}],["🔑",{"2":{"67":1}}],["\\t",{"2":{"65":9}}],["→",{"0":{"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1},"1":{"63":1}}],["8",{"0":{"68":1,"69":2,"70":1}}],["81f1",{"2":{"36":2}}],["8715",{"2":{"36":2}}],["62",{"2":{"120":1}}],["622",{"2":{"5":1}}],["61",{"2":{"118":1}}],["67",{"2":{"118":1}}],["6",{"0":{"65":1,"66":2,"67":1},"2":{"65":1}}],["64",{"2":{"44":1}}],["6e87dbf2",{"2":{"35":2}}],["kopecks",{"2":{"120":2}}],["kernel",{"2":{"67":1}}],["key",{"2":{"67":1}}],["keep",{"2":{"35":1,"36":1}}],["known",{"2":{"22":1,"79":1,"130":1}}],["know",{"2":{"11":1,"14":1,"36":1,"99":1}}],["knows",{"2":{"11":1}}],["x+",{"0":{"70":1}}],["x",{"0":{"57":4,"58":2,"59":2,"60":2,"61":2,"62":2,"64":2,"65":3,"66":2,"67":2,"68":3,"69":2,"70":1,"71":3,"72":3},"1":{"63":2},"2":{"35":1,"36":1,"40":1,"63":2,"64":6,"65":2,"67":1,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1}}],["x3c",{"2":{"35":4}}],["42",{"2":{"123":1}}],["47",{"2":{"120":1}}],["48455",{"2":{"72":1}}],["48c2",{"2":{"35":2}}],["4",{"0":{"59":1,"60":1,"62":1,"64":1,"66":1,"67":1},"1":{"63":1},"2":{"62":1,"63":1,"64":3}}],["43d7",{"2":{"36":2}}],["419d",{"2":{"36":2}}],["464f",{"2":{"36":2}}],["4d03",{"2":{"35":2}}],["45",{"2":{"33":1,"34":1}}],["400",{"2":{"26":1,"82":1,"134":1}}],["511",{"2":{"132":1}}],["54",{"2":{"123":1}}],["5f7820d1",{"2":{"35":2}}],["500",{"2":{"26":2,"82":2,"83":2,"87":2,"113":3,"134":2}}],["5",{"0":{"64":1,"65":1},"2":{"24":1,"25":2,"35":1,"64":3,"65":1,"78":4,"81":2,"123":1,"127":2,"128":1,"129":1,"133":2}}],["zero",{"2":{"21":1,"31":2,"113":1,"116":1,"139":2}}],["38",{"2":{"120":1}}],["3805730b",{"2":{"36":2}}],["37",{"2":{"42":3}}],["3993",{"2":{"36":2}}],["39a1",{"2":{"36":2}}],["345",{"2":{"33":1,"34":1}}],["3",{"0":{"60":1,"61":2,"62":1},"1":{"63":1},"2":{"18":1,"33":1,"34":1,"63":1,"78":2,"87":1,"125":1,"126":1,"127":2}}],["7+",{"2":{"62":1}}],["7a725c72e976",{"2":{"36":2}}],["71cecafe",{"2":{"36":2}}],["7be7",{"2":{"35":2}}],["7",{"0":{"67":1,"68":1},"2":{"15":1,"18":1,"62":1,"67":3}}],["yet",{"2":{"13":1}}],["yes",{"2":{"12":1,"77":1,"78":1}}],["you",{"0":{"53":1,"63":1},"1":{"54":1,"55":1},"2":{"0":1,"1":3,"6":2,"7":3,"11":4,"12":4,"13":7,"14":2,"15":2,"16":2,"17":1,"18":1,"19":2,"27":2,"29":1,"32":1,"35":3,"36":6,"40":5,"41":3,"42":1,"43":1,"46":1,"48":1,"52":1,"55":2,"62":3,"63":1,"64":1,"65":1,"66":1,"67":7,"70":1,"71":6,"72":4,"73":1,"78":2,"86":4,"90":4,"94":4,"98":4,"99":1,"103":3,"107":4,"109":2,"110":1,"111":2,"112":1,"113":4,"114":2,"117":2,"119":1,"120":3,"121":2,"135":2,"137":1}}],["yourself",{"2":{"36":1,"67":1,"117":1}}],["your",{"0":{"123":1},"2":{"0":2,"3":1,"7":2,"12":1,"16":1,"27":1,"40":1,"43":1,"52":2,"55":1,"60":1,"63":3,"64":5,"65":3,"67":2,"85":1,"89":1,"93":1,"97":1,"102":1,"106":1,"109":1,"111":1,"117":1,"120":1,"124":1,"135":1}}],["var",{"2":{"40":4,"78":1,"83":1,"113":4}}],["vacuum",{"2":{"13":1}}],["virtual",{"2":{"27":1,"49":1,"135":1}}],["via",{"2":{"15":1,"17":1,"18":1,"67":1,"117":1}}],["void",{"2":{"11":1,"15":1,"16":1,"17":1,"18":1}}],["very",{"2":{"14":1,"67":1}}],["versions",{"2":{"62":1}}],["version",{"2":{"6":1,"15":1,"17":1,"18":1,"35":3,"36":3,"40":1,"62":1,"66":1,"67":1,"70":1,"72":1,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1}}],["vendor",{"2":{"13":1,"54":1,"55":1,"67":1}}],["ve",{"2":{"0":1,"52":1}}],["json",{"2":{"10":1}}],["just",{"2":{"0":1,"1":1,"3":1,"7":1,"13":1,"41":1,"52":1}}],["globally",{"2":{"67":3}}],["guide",{"0":{"56":1},"1":{"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1}}],["gives",{"2":{"91":1}}],["give",{"0":{"91":1},"2":{"91":1}}],["given",{"2":{"35":1,"36":1}}],["gifts",{"0":{"91":1}}],["gift",{"0":{"88":1},"1":{"89":1,"90":1,"91":1},"2":{"91":1}}],["github",{"2":{"7":1,"50":1,"72":1}}],["greater",{"2":{"31":1,"139":1}}],["greatly",{"2":{"6":1}}],["goods",{"0":{"63":1},"2":{"64":1,"70":1,"95":1,"99":1,"104":1,"108":1,"126":1,"128":1,"129":1}}],["good",{"2":{"35":1}}],["go",{"2":{"16":1,"65":1,"70":1}}],["going",{"2":{"12":1}}],["generation",{"2":{"36":1}}],["generate",{"2":{"35":1,"36":1}}],["generated",{"2":{"11":1}}],["generates",{"2":{"8":1,"12":1}}],["getavailablebalanceattribute",{"2":{"69":1}}],["getavailablebalance",{"2":{"69":1}}],["getamountproduct",{"2":{"40":2,"63":3,"64":2,"86":2,"90":2,"94":2,"98":2,"103":2,"107":2,"125":1,"127":1}}],["getminimalfee",{"2":{"64":2,"127":1}}],["getmetaproduct",{"2":{"40":2,"86":2,"90":2,"94":2,"98":2,"103":2,"107":2,"125":1,"127":1}}],["getfeepercent",{"2":{"64":2,"125":1,"127":1}}],["getuniqueid",{"2":{"60":2}}],["getupdatedat",{"2":{"16":1}}],["getting",{"2":{"35":1}}],["getbalance",{"2":{"16":1}}],["getwalletuuid",{"2":{"16":1}}],["getwalletid",{"2":{"16":1}}],["get",{"0":{"76":1,"123":1},"2":{"11":1,"14":1,"20":1,"31":1,"38":1,"42":1,"77":1,"78":1,"113":1,"115":1,"120":1,"122":1,"131":1,"136":1,"139":1}}],["99",{"2":{"120":1}}],["9938",{"2":{"120":1}}],["9e00",{"2":{"36":2}}],["9414",{"2":{"35":2}}],["90",{"2":{"29":1,"30":1,"137":2}}],["9000",{"2":{"29":2}}],["95",{"2":{"25":1,"81":1,"133":1}}],["9",{"0":{"70":1,"71":1},"2":{"6":1,"17":1,"39":1,"40":1,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1}}],["03",{"2":{"125":1,"127":1}}],["0b7cc3f1ffc2",{"2":{"36":2}}],["05d0c44da9a1",{"2":{"35":2}}],["000",{"2":{"83":2}}],["00",{"2":{"25":1,"29":2,"30":2,"42":1,"75":1,"76":1}}],["0",{"0":{"60":1,"61":1,"62":1,"64":2,"65":1,"68":1,"69":1,"70":1,"71":1,"72":1},"1":{"63":1},"2":{"5":1,"6":1,"21":3,"25":1,"26":1,"39":1,"40":1,"62":1,"67":3,"77":1,"78":1,"81":1,"82":1,"83":1,"87":2,"91":3,"95":2,"99":2,"104":1,"108":2,"110":2,"112":2,"113":1,"116":2,"120":2,"125":1,"126":1,"127":1,"128":1,"133":1,"134":1}}],["$1",{"2":{"120":1}}],["$100",{"2":{"104":1}}],["$secondwallet",{"2":{"83":3}}],["$query",{"2":{"78":1}}],["$quantity",{"2":{"40":1,"60":2,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1,"125":1}}],["$product",{"2":{"69":4,"87":3,"113":3}}],["$products",{"2":{"69":2,"87":3}}],["$carttotal",{"2":{"87":2}}],["$cart",{"2":{"69":5,"87":7,"104":1}}],["$customer",{"2":{"40":4,"60":2,"63":2,"64":2,"86":4,"90":4,"94":4,"98":4,"103":3,"107":4,"113":3,"125":3,"127":1}}],["$bcloaded",{"2":{"65":1}}],["$mathservice",{"2":{"118":3}}],["$mathclass",{"2":{"65":5}}],["$mywallet",{"2":{"76":2}}],["$message",{"2":{"10":2,"11":4}}],["$tocurrency",{"2":{"118":2}}],["$to",{"2":{"118":3}}],["$transfer",{"2":{"83":5}}],["$transaction",{"2":{"42":1,"110":4,"112":4}}],["$this",{"2":{"16":5,"40":5,"60":1,"63":2,"86":7,"90":5,"94":5,"98":5,"103":4,"107":5,"118":7,"125":3,"127":2}}],["$item",{"2":{"40":6,"91":5,"95":5,"99":4,"100":1,"104":3,"108":4,"126":2,"128":2,"129":2}}],["$force",{"2":{"40":1,"60":2,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1,"125":1}}],["$fromcurrency",{"2":{"118":2}}],["$from",{"2":{"36":6,"118":3}}],["$firstwallet",{"2":{"81":3,"82":1,"83":3}}],["$first",{"2":{"25":2,"26":1,"81":2,"91":4,"133":2,"134":1}}],["$objects",{"2":{"35":4}}],["$amountflaot",{"2":{"36":1}}],["$amountfloat",{"2":{"35":2}}],["$amount",{"2":{"35":8,"36":4,"118":3}}],["$list",{"2":{"87":2}}],["$listen",{"2":{"15":1,"16":1,"17":1,"18":1}}],["$lastwallet",{"2":{"81":4,"82":3}}],["$last",{"2":{"25":5,"26":3,"81":3,"91":6,"133":5,"134":3}}],["$eur",{"2":{"78":4}}],["$event",{"2":{"15":1,"16":1,"17":1,"18":1}}],["$entity",{"2":{"12":2}}],["$wallets",{"2":{"35":8,"36":3}}],["$wallet2",{"2":{"12":3}}],["$wallet1",{"2":{"12":3}}],["$wallet",{"2":{"12":3,"14":1,"16":3,"35":12,"36":6,"64":4,"75":4,"77":2,"78":2,"113":8}}],["$updatedat",{"2":{"16":1}}],["$uuid",{"2":{"10":2}}],["$usd",{"2":{"5":4,"78":4,"120":5}}],["$user2",{"2":{"24":1,"132":1}}],["$user1",{"2":{"24":1,"132":1}}],["$user",{"2":{"1":6,"5":4,"10":2,"11":2,"21":5,"29":5,"30":2,"39":7,"40":7,"41":6,"42":5,"47":1,"75":2,"76":1,"77":1,"78":9,"87":10,"95":4,"99":5,"100":1,"104":4,"108":4,"110":4,"112":4,"113":2,"116":3,"120":2,"123":3,"126":3,"128":3,"129":3,"137":3,"138":4}}],["$users",{"2":{"1":2,"41":2}}],["$name",{"2":{"10":2}}],["$rate",{"2":{"118":2}}],["$rates",{"2":{"118":3}}],["$receiving",{"2":{"104":3}}],["$request",{"2":{"10":3}}],["$rub",{"2":{"5":4,"120":5}}],["due",{"2":{"120":1}}],["dump",{"2":{"40":4}}],["da10",{"2":{"36":2}}],["datetimeimmutable",{"2":{"16":3}}],["database",{"2":{"11":1,"36":1,"40":1,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1,"118":1}}],["data",{"2":{"1":2,"15":1,"17":1,"18":1,"41":2,"78":1,"118":1}}],["dto",{"2":{"36":6,"69":1,"83":2}}],["driver",{"2":{"13":2,"44":2}}],["dollar",{"2":{"104":1}}],["dollars",{"2":{"5":1,"120":2}}],["don",{"2":{"72":2}}],["done",{"2":{"15":1,"16":1,"17":1,"18":1,"20":1,"38":1,"68":1,"115":1,"119":1,"122":1,"131":1,"136":1}}],["down",{"2":{"67":1}}],["does",{"2":{"36":2,"99":1,"110":1,"112":1,"113":1}}],["documentation",{"2":{"15":1,"17":1,"18":1}}],["doingmagic",{"2":{"14":1}}],["do",{"2":{"13":1,"15":1,"35":2,"40":2,"67":1,"86":1,"90":1,"94":1,"98":1,"99":1,"103":1,"107":1}}],["debts",{"2":{"113":1}}],["debiting",{"2":{"12":2}}],["debit",{"2":{"12":1}}],["developers",{"2":{"78":1}}],["delete",{"2":{"72":2}}],["deleted",{"2":{"72":1}}],["details",{"2":{"72":1}}],["decimal",{"0":{"48":1},"2":{"48":2}}],["demands",{"2":{"43":1}}],["default",{"0":{"45":1,"77":1},"2":{"43":1,"44":7,"45":2,"47":3,"48":1,"77":2,"78":3,"113":2}}],["definitely",{"2":{"14":1}}],["depend",{"2":{"35":1}}],["deposit",{"0":{"19":1,"21":1,"114":1,"116":1},"1":{"20":1,"21":1,"115":1,"116":1},"2":{"19":2,"22":1,"24":2,"36":6,"39":1,"79":1,"83":1,"114":2,"130":1,"132":2}}],["describing",{"2":{"67":1}}],["description",{"2":{"39":1,"40":2,"44":1,"86":2,"90":2,"94":2,"98":2,"103":2,"107":2,"125":1,"127":1}}],["desc",{"2":{"25":1,"81":1,"91":1,"133":1}}],["dealing",{"2":{"13":1}}],["deduct",{"2":{"12":1}}],["db",{"0":{"12":1},"2":{"14":3}}],["different",{"2":{"117":1}}],["difference",{"2":{"12":1}}],["displays",{"2":{"78":1}}],["dispatch",{"2":{"10":1}}],["divided",{"2":{"70":1}}],["division",{"2":{"8":1}}],["directly",{"2":{"70":1}}],["did",{"2":{"67":1}}],["bx",{"2":{"70":1}}],["brick",{"2":{"65":1}}],["brickmath",{"2":{"65":2}}],["break",{"2":{"65":2}}],["broadcaston",{"2":{"16":1}}],["broadcasting",{"2":{"16":1}}],["broadcast",{"2":{"16":1}}],["bigdecimal",{"2":{"65":1}}],["bcmath",{"2":{"65":2}}],["by",{"2":{"36":1,"42":1,"43":1,"46":1,"64":1,"113":1}}],["b688",{"2":{"35":2}}],["blue",{"2":{"35":1}}],["blocking",{"2":{"14":2}}],["blocked",{"2":{"12":1,"14":2}}],["blocks",{"2":{"12":1}}],["block",{"2":{"12":2}}],["bookkeeperserviceinterface",{"2":{"71":1}}],["bool",{"2":{"40":7,"60":4,"75":2,"86":2,"87":1,"90":2,"91":2,"94":2,"95":2,"98":2,"99":2,"103":2,"107":2,"108":4,"110":3,"112":3,"125":2}}],["bonus",{"2":{"35":1}}],["both",{"2":{"12":2}}],["bugs",{"2":{"67":1}}],["built",{"2":{"39":1}}],["buys",{"2":{"91":1}}],["buy",{"2":{"19":1,"27":2,"40":1,"99":2,"100":1,"104":2,"114":1,"126":2,"128":2,"129":2,"135":2}}],["but",{"2":{"12":1,"13":2,"16":1,"31":1,"35":3,"70":1,"73":1,"83":1,"139":1}}],["beginning",{"2":{"67":1}}],["begintransaction",{"2":{"14":1}}],["been",{"2":{"67":1,"70":1,"72":4}}],["became",{"2":{"35":1,"36":1}}],["because",{"2":{"11":1,"36":2}}],["better",{"2":{"35":1,"67":1}}],["between",{"0":{"79":1},"1":{"80":1,"81":1,"82":1,"83":1},"2":{"22":1,"36":1,"70":2,"79":1,"130":1}}],["before",{"2":{"12":1,"35":1,"36":1}}],["be",{"2":{"1":2,"8":1,"11":1,"12":2,"25":1,"26":1,"31":1,"35":3,"40":2,"41":2,"47":1,"48":1,"67":3,"68":1,"70":4,"72":1,"73":1,"78":1,"81":1,"82":1,"86":2,"90":2,"94":2,"98":2,"103":1,"107":2,"119":1,"121":1,"125":1,"133":1,"134":1,"139":1}}],["bad",{"2":{"70":1}}],["batch",{"0":{"35":1,"36":1},"2":{"35":2}}],["balanceisempty",{"2":{"31":1,"139":1}}],["balanceupdatedeventassemblerinterface",{"2":{"16":2}}],["balanceupdatedeventinterface",{"2":{"15":4,"16":7}}],["balance",{"0":{"15":1,"121":1,"123":1},"1":{"122":1,"123":1},"2":{"13":1,"15":1,"16":1,"17":1,"18":1,"21":3,"25":2,"26":1,"29":3,"31":2,"32":1,"35":2,"36":1,"44":2,"57":1,"69":1,"82":1,"83":1,"87":1,"91":1,"95":1,"99":1,"104":1,"108":2,"116":4,"121":2,"123":2,"126":1,"128":1,"129":1,"133":2,"134":1,"137":3,"139":2}}],["back",{"2":{"12":1,"120":1}}],["backend",{"2":{"11":1}}],["basket",{"2":{"67":1}}],["base",{"0":{"46":1,"47":1},"1":{"47":1,"48":1},"2":{"46":1,"47":1,"48":1,"67":1}}],["based",{"2":{"8":1}}],["basic",{"0":{"37":1},"1":{"38":1,"39":1,"40":1,"41":1,"42":1}}],["bashphp",{"2":{"13":1,"54":1,"55":1,"67":1}}],["bashcomposer",{"2":{"0":1,"3":1,"7":1,"52":1}}],["bavix",{"2":{"0":1,"1":2,"3":1,"4":3,"7":2,"9":3,"12":2,"15":2,"16":7,"17":2,"18":2,"20":2,"31":2,"35":8,"36":10,"38":2,"40":8,"41":2,"42":3,"46":2,"52":1,"60":8,"69":2,"70":2,"72":1,"74":2,"77":3,"78":1,"80":2,"83":3,"85":2,"86":6,"87":1,"89":2,"90":6,"93":2,"94":6,"97":2,"98":6,"102":2,"103":8,"106":2,"107":6,"109":4,"111":4,"113":4,"115":2,"118":2,"122":2,"124":2,"125":4,"127":4,"131":2,"136":2,"139":2}}],["212",{"2":{"123":1}}],["27",{"2":{"87":2,"123":2}}],["24x",{"2":{"67":1}}],["24h",{"2":{"44":1}}],["237",{"2":{"42":1}}],["202",{"2":{"10":1}}],["200",{"2":{"5":1,"39":1,"78":1}}],["2",{"0":{"57":1,"58":3,"59":3,"60":1,"66":1,"67":1},"2":{"1":1,"15":1,"33":1,"34":1,"41":1,"42":1}}],["26",{"2":{"1":1,"41":1}}],["25",{"2":{"1":2,"41":2}}],["owner",{"2":{"78":2}}],["overridden",{"2":{"72":1}}],["override",{"2":{"40":1,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1}}],["obsolete",{"2":{"72":1}}],["objects",{"2":{"69":2,"87":1}}],["older",{"2":{"62":1}}],["old",{"2":{"60":2,"69":2,"70":1}}],["out",{"2":{"35":1}}],["our",{"2":{"16":1,"22":1,"79":1,"130":1}}],["other",{"2":{"35":2}}],["or",{"2":{"27":1,"55":1,"69":1,"117":1,"125":1,"127":1,"135":1}}],["orderby",{"2":{"25":1,"81":1,"91":1,"133":1}}],["original",{"2":{"1":1,"41":1}}],["option",{"2":{"24":1,"36":4,"83":2,"132":1}}],["optimize",{"2":{"12":1,"36":1}}],["opportunity",{"2":{"12":1,"35":1}}],["operations",{"2":{"12":1,"14":1,"22":1,"35":1,"79":1,"113":1,"121":1,"130":1}}],["operation",{"2":{"1":2,"12":4,"35":1,"41":2,"110":1,"112":1}}],["online",{"2":{"67":1}}],["only",{"2":{"1":1,"6":1,"17":1,"18":1,"41":1,"78":1,"109":1,"111":1,"113":1}}],["once",{"2":{"35":1,"40":1,"86":1,"90":1,"94":1,"98":1,"107":1,"125":1}}],["one",{"2":{"5":1,"11":1,"16":1,"22":1,"40":1,"69":1,"70":1,"78":1,"79":1,"86":1,"90":1,"91":1,"94":1,"98":1,"103":1,"107":1,"130":1}}],["on",{"2":{"1":1,"8":1,"11":2,"12":3,"27":1,"35":2,"36":1,"39":1,"41":1,"42":1,"50":1,"63":2,"64":4,"65":2,"67":1,"113":1,"116":1,"135":1}}],["offers",{"2":{"13":1}}],["often",{"2":{"6":1,"78":1}}],["of",{"0":{"17":1,"18":1},"2":{"1":2,"6":1,"8":1,"11":1,"12":2,"13":5,"14":3,"15":1,"16":2,"17":2,"18":2,"19":4,"35":6,"36":4,"39":2,"40":7,"41":2,"43":1,"45":1,"62":1,"63":1,"67":2,"70":3,"73":1,"78":1,"83":2,"86":7,"90":7,"94":7,"98":7,"103":7,"107":7,"108":1,"113":2,"114":4,"117":1,"121":1,"125":1,"127":1}}],[">div",{"2":{"118":1}}],[">deposit",{"2":{"35":1,"39":1,"75":1,"78":4,"81":1,"83":2,"87":2,"110":1,"112":1,"116":1,"120":1}}],[">depositfloat",{"2":{"21":1,"42":1}}],[">refreshbalance",{"2":{"123":1}}],[">refund",{"2":{"40":1,"108":1}}],[">rates",{"2":{"118":4}}],[">mul",{"2":{"118":1}}],[">mathservice",{"2":{"118":3}}],[">meta",{"2":{"83":2,"113":1}}],[">gift",{"2":{"91":1}}],[">getamountproduct",{"2":{"91":1,"95":1,"99":1,"104":1,"113":1,"126":1,"128":1,"129":1}}],[">getattributes",{"2":{"16":1}}],[">gettotal",{"2":{"87":1}}],[">getkey",{"2":{"16":1,"25":2,"60":1,"81":2,"91":2,"133":2}}],[">getuser",{"2":{"11":1}}],[">get",{"2":{"10":2,"87":1}}],[">getwalletname",{"2":{"11":1}}],[">getwalletuuid",{"2":{"11":1}}],[">getwallet",{"2":{"5":2,"76":1}}],[">haswallet",{"2":{"75":2}}],[">helloworld",{"2":{"47":1}}],[">save",{"2":{"113":1}}],[">safepay",{"2":{"40":1,"100":1,"129":1}}],[">slug",{"2":{"87":1}}],[">setmeta",{"2":{"69":1}}],[">price",{"2":{"63":2,"86":2}}],[">payfree",{"2":{"95":1}}],[">paycart",{"2":{"87":1,"104":1}}],[">pay",{"2":{"40":1,"99":2,"113":1,"126":1,"128":1}}],[">paid",{"2":{"40":3,"86":1,"90":1,"91":1,"94":1,"95":1,"98":1,"99":1,"107":1,"108":1,"125":1}}],[">id",{"2":{"40":2,"86":2,"90":2,"94":2,"98":2,"103":2,"107":2,"123":1,"125":1,"127":1}}],[">intvalue",{"2":{"34":2}}],[">increasesales",{"2":{"12":1}}],[">transfer",{"2":{"81":1,"83":1,"132":1,"133":1}}],[">transferfloat",{"2":{"24":1,"25":1}}],[">transactions",{"2":{"78":5}}],[">title",{"2":{"40":2,"86":2,"90":2,"94":2,"98":2,"103":2,"107":2,"125":1,"127":1}}],[">confirm",{"2":{"110":1,"112":1}}],[">confirmed",{"2":{"83":2,"110":2,"112":2}}],[">count",{"2":{"78":9}}],[">checkpotential",{"2":{"35":1}}],[">createwallet",{"2":{"5":2,"11":1,"75":1,"78":2,"81":2,"104":1,"113":1,"117":1,"120":2}}],[">additem",{"2":{"69":2}}],[">additems",{"2":{"69":1}}],[">amountfloat",{"2":{"42":1}}],[">amount",{"2":{"42":1}}],[">apply",{"2":{"35":2,"36":1}}],[">all",{"2":{"1":1,"41":1}}],[">floatvalue",{"2":{"33":2}}],[">forcewithdraw",{"2":{"39":1,"138":1}}],[">forcewithdrawfloat",{"2":{"30":1}}],[">forcetransfer",{"2":{"36":1,"82":1,"134":1}}],[">forcetransferfloat",{"2":{"26":1}}],[">first",{"2":{"25":1,"81":1,"91":1,"133":1}}],[">updatedat",{"2":{"16":1}}],[">uuid",{"2":{"16":1}}],[">wherein",{"2":{"87":1}}],[">withmeta",{"2":{"69":1}}],[">withitem",{"2":{"69":2,"87":2,"104":1}}],[">withitems",{"2":{"69":1}}],[">withdrawfloat",{"2":{"29":1}}],[">withdraw",{"2":{"12":3,"39":1,"78":1,"83":2,"137":1}}],[">wallettransactions",{"2":{"78":5}}],[">wallet",{"2":{"1":2,"16":4,"41":2,"47":1,"77":1,"78":4,"113":1,"123":1}}],[">blocks",{"2":{"12":1,"35":2}}],[">block",{"2":{"12":1,"36":1}}],[">balancefloat",{"2":{"42":2,"87":3}}],[">balancefloatnum",{"2":{"21":2,"25":4,"26":4,"29":2,"30":2,"75":1,"76":1,"77":1}}],[">balanceint",{"2":{"14":1,"16":1,"21":2,"29":2,"83":4,"87":2,"104":1,"113":2,"116":2,"137":2,"138":2}}],[">balance",{"2":{"1":4,"5":4,"21":2,"29":2,"39":4,"40":2,"41":4,"42":2,"75":1,"76":1,"77":1,"81":4,"82":4,"87":1,"91":6,"95":4,"99":3,"104":2,"108":4,"110":3,"112":3,"116":2,"120":5,"123":3,"126":2,"128":2,"129":2,"133":4,"134":4,"137":2,"138":2}}],[">exchange",{"2":{"5":1,"120":2}}],["==",{"2":{"25":1,"81":1,"91":1,"133":1}}],["=>",{"2":{"5":8,"11":2,"13":5,"15":1,"16":3,"17":1,"18":1,"24":3,"35":2,"36":3,"39":1,"40":4,"45":4,"47":8,"48":3,"65":2,"69":2,"75":2,"78":2,"81":2,"83":4,"86":4,"87":2,"90":4,"94":4,"98":4,"103":4,"104":3,"107":4,"113":3,"117":3,"118":4,"119":2,"120":6,"125":2,"127":2,"132":3}}],["=",{"2":{"1":2,"5":4,"10":3,"11":1,"15":1,"16":1,"17":1,"18":1,"21":1,"24":1,"25":2,"29":1,"39":1,"40":4,"41":2,"42":1,"60":3,"65":4,"69":3,"75":2,"76":1,"77":1,"78":3,"81":4,"83":1,"86":2,"87":7,"90":2,"91":3,"94":2,"95":2,"98":2,"99":2,"103":2,"104":4,"107":2,"108":2,"110":1,"112":1,"113":3,"116":1,"118":3,"120":4,"125":2,"126":3,"128":3,"129":3,"132":1,"133":2,"137":1}}],["sqlupdate",{"2":{"123":1}}],["say",{"2":{"123":1}}],["safepay",{"2":{"100":1}}],["safe",{"0":{"100":1}}],["santa",{"0":{"91":1},"2":{"91":1}}],["same",{"2":{"12":1,"16":1,"47":1,"77":1,"99":1}}],["schema",{"2":{"67":1}}],["scale",{"2":{"44":1}}],["switching",{"2":{"67":1}}],["switch",{"2":{"65":1}}],["swap",{"0":{"2":1},"2":{"3":1}}],["shopping",{"2":{"40":2,"86":2,"87":1,"90":2,"94":2,"98":2,"103":2,"107":2}}],["shouldbroadcast",{"2":{"16":2}}],["should",{"2":{"1":1,"40":1,"41":1,"67":1,"70":1,"73":1,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1,"113":1}}],["small",{"2":{"32":1,"35":1,"67":2}}],["spam",{"2":{"30":1,"138":1}}],["specific",{"2":{"71":1}}],["specify",{"2":{"1":1,"41":1}}],["special",{"2":{"6":1}}],["system",{"2":{"13":1,"22":1,"27":1,"35":1,"79":1,"130":1,"135":1}}],["success",{"2":{"113":1,"126":1,"128":1}}],["successfully",{"0":{"128":1}}],["successful",{"2":{"12":1}}],["suit",{"2":{"43":2,"55":1}}],["sum",{"2":{"19":1,"114":1}}],["subscribe",{"2":{"15":1,"17":1,"18":1}}],["sure",{"2":{"12":1,"72":1}}],["supported",{"2":{"72":1}}],["support",{"0":{"50":1},"2":{"10":1,"14":1,"16":1,"62":2,"64":1,"69":1,"72":2}}],["supports",{"2":{"6":1,"13":1}}],["see",{"2":{"35":1}}],["server",{"2":{"13":1}}],["services",{"2":{"12":2,"27":1,"35":3,"36":1,"118":1,"119":1,"135":1}}],["service",{"0":{"12":1,"118":1,"119":1},"2":{"12":2,"13":2,"40":1,"64":1,"86":1,"90":1,"94":1,"98":1,"107":1,"117":1,"118":2,"119":1,"125":1}}],["select",{"2":{"13":1,"44":1}}],["secondwallet",{"2":{"83":2}}],["second",{"2":{"25":1,"26":1,"81":1,"82":1,"133":1,"134":1}}],["seconds",{"2":{"13":1}}],["section",{"2":{"12":1}}],["search",{"2":{"12":1,"27":1,"135":1}}],["settings",{"2":{"16":1,"67":1}}],["setting",{"2":{"13":1}}],["set",{"2":{"0":1,"12":1,"14":1,"52":1,"117":1,"123":1}}],["structure",{"2":{"70":1}}],["strictly",{"2":{"70":1}}],["stringency",{"2":{"67":1}}],["string",{"2":{"6":1,"16":2,"35":2,"46":1,"60":2,"118":3}}],["strong",{"2":{"64":1}}],["strongly",{"2":{"36":1}}],["still",{"2":{"35":1}}],["storage",{"2":{"13":1}}],["storing",{"2":{"13":1,"70":1}}],["store",{"2":{"6":1}}],["study",{"2":{"12":1}}],["static",{"2":{"35":2,"36":1}}],["state",{"2":{"13":2}}],["stages",{"2":{"20":1,"38":1,"115":1,"122":1,"131":1,"136":1}}],["standard",{"2":{"15":1,"16":2,"17":1,"18":1}}],["starting",{"2":{"40":1,"70":1,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1}}],["started",{"2":{"12":1,"20":1,"38":1,"115":1,"122":1,"131":1,"136":1}}],["starts",{"2":{"12":1,"70":1}}],["start",{"2":{"12":1,"87":1}}],["stable",{"2":{"11":1}}],["single",{"2":{"35":1,"36":1}}],["since",{"2":{"6":1,"27":1,"35":1,"135":1}}],["situation",{"2":{"35":1}}],["situations",{"2":{"31":1,"35":1,"121":1,"139":1}}],["similar",{"2":{"17":1,"18":1}}],["simply",{"2":{"16":1}}],["simplify",{"2":{"6":1,"32":1}}],["simple",{"0":{"5":1,"38":1,"39":1},"2":{"4":1,"5":1,"7":1,"11":1,"12":1,"13":1,"14":1,"15":1,"16":1,"17":1,"18":1,"25":1,"26":1,"29":1,"32":1,"34":1,"35":1,"36":1,"39":1,"77":1,"78":1,"81":1,"83":1,"87":1,"91":1,"95":1,"100":1,"104":1,"108":1,"110":1,"112":1,"113":1,"118":1,"120":1,"123":1,"129":1,"133":1,"134":1,"137":1}}],["side",{"2":{"11":1,"35":1,"36":1}}],["slug",{"2":{"5":2,"44":2,"45":2,"47":1,"73":1,"75":1,"87":1}}],["soft",{"2":{"72":2}}],["solution",{"2":{"64":1}}],["something",{"2":{"15":1,"19":1,"27":1,"35":1,"83":2,"114":1,"135":1}}],["sometimes",{"2":{"12":1,"16":1,"32":1,"35":1,"53":1,"110":1,"112":1}}],["some",{"2":{"12":1,"32":1,"35":1}}],["sort",{"2":{"12":1}}],["so",{"2":{"1":1,"29":1,"41":1,"137":1}}],["s",{"2":{"1":1,"5":2,"7":1,"9":1,"11":1,"12":4,"13":1,"14":1,"15":2,"16":3,"17":1,"18":1,"20":1,"21":1,"25":2,"26":2,"29":2,"31":1,"34":1,"35":2,"36":1,"38":1,"41":1,"67":1,"74":1,"77":1,"78":2,"80":1,"81":1,"82":1,"83":2,"87":2,"91":2,"95":1,"100":1,"104":1,"108":1,"110":1,"112":1,"113":1,"115":1,"116":1,"117":1,"120":1,"121":1,"122":1,"123":3,"129":1,"131":1,"133":2,"134":2,"136":1,"137":2,"139":1}}],["fee",{"2":{"126":1,"128":1,"129":1}}],["feature",{"2":{"14":1}}],["fledged",{"2":{"70":1}}],["fluent",{"2":{"69":2}}],["float|int|string",{"2":{"118":1}}],["floatvalue",{"0":{"33":1}}],["float",{"0":{"19":1},"1":{"20":1,"21":1},"2":{"35":1,"36":1,"42":1,"64":3}}],["f8becf81",{"2":{"36":2}}],["found",{"2":{"67":1}}],["following",{"2":{"36":1}}],["forget",{"2":{"72":1}}],["format",{"2":{"32":1}}],["formatterserviceinterface",{"0":{"32":1},"1":{"33":1,"34":1},"2":{"33":2,"34":2}}],["forcetransfer",{"2":{"36":1}}],["forcedelete",{"2":{"72":1}}],["forced",{"2":{"30":1,"121":1,"138":1}}],["force",{"0":{"26":1,"30":1,"82":1,"134":1,"138":1},"2":{"67":1,"113":1}}],["for",{"0":{"53":1,"63":1,"118":1,"123":1},"1":{"54":1,"55":1},"2":{"1":3,"6":1,"8":1,"11":1,"12":3,"13":2,"14":2,"17":2,"18":2,"27":1,"30":3,"35":6,"40":2,"41":3,"44":4,"62":1,"66":1,"67":1,"69":1,"70":1,"71":1,"72":1,"73":1,"78":2,"81":1,"86":2,"90":2,"94":2,"98":2,"103":3,"107":2,"113":4,"117":1,"135":1,"138":3}}],["foreach",{"2":{"1":2,"35":2,"36":1,"41":2,"87":1,"118":2}}],["f46ba4e25786",{"2":{"35":2}}],["fn",{"2":{"35":2,"36":1}}],["failed",{"0":{"129":1},"2":{"129":1}}],["fails",{"2":{"70":1}}],["fast",{"2":{"36":2}}],["false",{"2":{"24":1,"40":2,"60":2,"75":1,"83":2,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1,"110":2,"112":2,"125":1,"132":1}}],["facades",{"2":{"10":1,"14":1}}],["free",{"0":{"92":1,"95":1},"1":{"93":1,"94":1,"95":1}}],["frequent",{"2":{"15":1,"17":1,"18":1}}],["fractional",{"0":{"42":1},"2":{"48":1}}],["framework",{"2":{"13":1,"72":1}}],["front",{"2":{"15":1,"17":1,"18":1}}],["from",{"2":{"5":1,"12":5,"14":1,"16":1,"25":1,"26":1,"36":1,"39":1,"40":1,"64":1,"70":1,"72":1,"81":1,"82":1,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1,"118":2,"133":1,"134":1}}],["fullest",{"2":{"67":1}}],["full",{"2":{"19":1,"70":1,"114":1}}],["future",{"2":{"12":1}}],["funds",{"2":{"12":3,"29":1,"30":1,"35":1,"83":1,"99":1,"108":1,"137":1,"138":1}}],["functionality",{"2":{"113":2,"117":1}}],["functions",{"2":{"67":1}}],["function",{"2":{"1":1,"10":1,"11":1,"12":2,"15":1,"16":8,"17":1,"18":1,"35":4,"36":1,"40":5,"41":1,"46":1,"60":3,"63":2,"64":10,"86":5,"90":5,"94":5,"98":5,"103":5,"107":5,"118":2,"125":4,"127":4}}],["fill",{"0":{"87":1}}],["filter",{"0":{"78":1},"2":{"78":1}}],["file",{"2":{"43":1,"47":1,"48":1,"55":1,"65":1,"119":1}}],["fix",{"2":{"70":1}}],["fine",{"2":{"30":1,"138":1}}],["finally",{"2":{"70":1}}],["final",{"2":{"16":1}}],["find",{"2":{"5":1,"7":1,"21":1,"25":1,"29":1,"75":1,"81":1,"87":1,"91":2,"95":2,"99":2,"104":2,"108":2,"116":1,"126":2,"128":2,"129":2,"133":1,"137":1}}],["fight",{"2":{"13":1}}],["field",{"2":{"6":1,"67":2,"110":1,"112":1}}],["first",{"2":{"1":1,"21":1,"25":2,"26":1,"29":1,"39":1,"40":2,"41":1,"42":1,"75":1,"81":3,"82":1,"87":1,"91":3,"95":2,"99":2,"104":2,"108":2,"116":1,"126":2,"128":2,"129":2,"133":2,"134":1,"137":1}}],["huge",{"2":{"36":1}}],["his",{"2":{"116":1}}],["highload",{"2":{"67":1}}],["highly",{"2":{"35":1}}],["high",{"2":{"36":1}}],["himself",{"2":{"8":1}}],["how",{"0":{"42":1,"76":1},"2":{"77":1,"99":1}}],["however",{"2":{"1":1,"41":1}}],["hood",{"2":{"35":1}}],["help",{"2":{"35":1,"117":1}}],["helper",{"0":{"32":1},"1":{"33":1,"34":1},"2":{"32":1}}],["helloworld",{"2":{"46":1}}],["hello",{"2":{"24":1,"46":1,"69":2,"83":2,"132":1}}],["he",{"2":{"21":1,"25":1,"29":1,"116":1,"123":1,"133":1,"137":1}}],["here",{"2":{"12":1,"13":1,"14":1,"35":1,"72":1}}],["http",{"2":{"10":2}}],["https",{"2":{"7":1,"72":1}}],["happens",{"2":{"35":1,"99":1}}],["happen",{"0":{"31":1,"139":1}}],["hasmany",{"2":{"71":1}}],["has",{"2":{"30":1,"32":1,"67":4,"70":2,"72":3,"123":1,"138":1}}],["haswalletfloat",{"2":{"20":3,"21":1,"25":1,"29":1,"42":3}}],["haswallets",{"2":{"4":2,"9":3,"74":3,"77":2,"80":3,"103":5,"113":1}}],["haswallet",{"2":{"1":3,"4":2,"9":3,"38":3,"40":6,"41":3,"77":2,"85":1,"86":5,"89":1,"90":5,"93":1,"94":5,"97":1,"98":5,"102":1,"103":5,"106":1,"107":5,"109":2,"111":2,"115":3,"116":1,"122":3,"124":1,"125":3,"127":2,"131":3,"133":1,"136":3,"137":1}}],["handles",{"2":{"35":2}}],["handle",{"2":{"15":1,"16":1,"17":1,"18":1,"35":1,"36":1}}],["handler",{"0":{"10":1,"11":1}}],["have",{"2":{"1":1,"13":1,"20":1,"21":1,"25":1,"29":1,"35":1,"36":1,"38":1,"40":1,"41":1,"65":1,"67":4,"71":2,"72":2,"99":1,"113":2,"115":1,"116":1,"120":1,"122":1,"131":1,"133":1,"136":1,"137":1}}],["147",{"2":{"120":1}}],["15",{"2":{"91":1}}],["156",{"2":{"87":1}}],["15627",{"2":{"87":1}}],["151",{"2":{"87":1}}],["15127+500",{"2":{"87":1}}],["15127",{"2":{"87":2}}],["150",{"2":{"67":1}}],["18",{"2":{"48":1}}],["1s",{"2":{"44":1}}],["137",{"2":{"42":1}}],["191",{"2":{"39":1}}],["190",{"2":{"5":1}}],["1e82",{"2":{"35":2}}],["12",{"2":{"33":1,"34":1}}],["123",{"2":{"33":1,"34":1}}],["12345",{"2":{"33":2,"34":2}}],["115",{"2":{"91":1}}],["11",{"0":{"72":1},"2":{"24":1,"30":1}}],["105",{"2":{"128":2,"129":1}}],["103",{"2":{"126":2,"129":2}}],["101",{"2":{"30":1,"138":1}}],["1010",{"2":{"21":2}}],["10000",{"2":{"29":2,"113":1,"120":2}}],["100",{"2":{"12":3,"25":1,"26":1,"29":1,"40":3,"42":1,"75":2,"76":1,"78":3,"81":2,"82":1,"86":2,"90":2,"91":2,"94":2,"95":3,"98":2,"99":2,"103":2,"104":2,"107":2,"108":2,"110":2,"112":2,"120":2,"125":1,"126":2,"127":1,"128":2,"129":2,"133":1,"134":1,"137":2,"138":2}}],["10",{"0":{"71":1,"72":1},"2":{"5":1,"21":2,"29":1,"35":1,"36":1,"39":2,"72":2,"77":2,"87":1,"116":5,"137":1}}],["1",{"0":{"57":1,"58":1,"61":1,"62":1,"69":1,"70":1},"1":{"63":1},"2":{"1":4,"13":1,"17":1,"21":2,"39":1,"40":1,"41":4,"42":3,"60":1,"62":1,"67":1,"75":1,"76":1,"78":3,"83":2,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1,"118":2,"125":1,"138":2}}],["+",{"0":{"77":1},"2":{"1":2,"41":2,"126":1,"128":1,"129":1}}],["nine",{"2":{"70":1}}],["null",{"2":{"35":6,"36":5,"110":1,"112":1}}],["numbers",{"0":{"42":1},"2":{"48":1}}],["number",{"2":{"35":1,"36":1,"40":4,"70":1,"73":1,"86":4,"90":4,"94":4,"98":4,"103":4,"107":4}}],["next",{"2":{"16":1}}],["necessary",{"2":{"12":1,"14":1,"20":1,"30":1,"38":1,"64":1,"69":1,"115":1,"122":1,"131":1,"136":1,"138":1}}],["new",{"2":{"10":1,"16":3,"24":2,"35":1,"36":9,"46":2,"60":2,"69":2,"72":3,"75":2,"81":1,"83":2,"132":2}}],["needed",{"2":{"70":2,"72":1}}],["needs",{"2":{"11":1,"43":1,"55":1,"68":1}}],["need",{"2":{"4":1,"6":2,"7":1,"12":3,"13":4,"14":2,"15":1,"16":2,"32":1,"35":3,"36":2,"62":1,"66":1,"70":1,"71":3,"72":1,"78":1,"103":1,"110":1,"112":1,"113":1,"117":1}}],["name",{"2":{"5":2,"10":1,"11":1,"44":9,"45":2,"47":1,"75":1,"78":2,"81":2,"104":1,"113":1,"117":1,"120":2}}],["non",{"2":{"35":4}}],["no",{"2":{"11":1,"30":1,"40":1,"67":1,"70":1,"71":1,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1,"138":1}}],["now",{"2":{"1":1,"7":1,"13":1,"14":1,"16":1,"35":1,"36":1,"41":1,"42":1,"67":1,"69":1,"78":1}}],["notifications",{"2":{"113":1}}],["noting",{"2":{"35":1}}],["nothing",{"2":{"35":1,"68":1,"113":1}}],["notation",{"2":{"1":2,"41":2}}],["not",{"0":{"31":1,"139":1},"2":{"1":1,"6":1,"11":1,"12":3,"13":2,"16":1,"29":1,"31":1,"35":2,"36":3,"40":2,"41":1,"62":1,"67":2,"72":1,"86":1,"90":1,"94":1,"98":1,"99":1,"100":1,"103":1,"107":1,"110":1,"112":1,"113":1,"118":1,"120":2,"121":1,"137":1,"139":1}}],["n",{"2":{"1":2,"12":1,"40":1,"41":2,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1}}],["ms",{"2":{"123":1}}],["msg",{"2":{"24":1,"132":1}}],["minimaltaxable",{"2":{"127":3}}],["minimal",{"0":{"127":1},"1":{"128":1,"129":1},"2":{"128":1,"129":1}}],["minimum",{"2":{"72":1,"127":1}}],["minimize",{"2":{"14":1}}],["migrate",{"2":{"7":1,"70":1}}],["migrations",{"0":{"54":1},"2":{"54":2,"66":1,"72":2}}],["migration",{"2":{"6":1,"7":1,"67":2}}],["must",{"2":{"63":1,"70":1,"119":1,"121":1}}],["much",{"2":{"14":1}}],["mutex",{"0":{"12":1}}],["multiwallet",{"0":{"77":1}}],["multiple",{"2":{"35":3,"36":1}}],["multi",{"2":{"4":1,"77":1,"78":1,"103":1,"113":1}}],["maximaltaxable",{"2":{"127":1}}],["maximum",{"2":{"14":1}}],["mariadb",{"2":{"72":1}}],["mark",{"2":{"67":1}}],["mathserviceinterface",{"2":{"118":3}}],["mathable",{"2":{"65":2}}],["mathematics",{"2":{"64":1}}],["mathematical",{"2":{"44":1,"120":1}}],["math",{"2":{"44":1,"65":3}}],["making",{"2":{"35":1}}],["make",{"0":{"21":1,"25":1,"29":1,"81":1,"108":1,"116":1,"133":1,"137":1},"2":{"35":1,"42":1,"72":1}}],["map",{"2":{"35":2,"36":1}}],["many",{"2":{"35":1}}],["main",{"2":{"12":1,"35":1,"36":1}}],["master",{"2":{"7":1}}],["made",{"2":{"6":1}}],["maybe",{"2":{"12":1}}],["may",{"2":{"1":1,"41":1,"67":1}}],["myexchangeservice",{"2":{"118":1,"119":1}}],["mysql",{"2":{"67":1}}],["mywallet",{"2":{"46":3,"47":1}}],["mywalletcreatedlistener",{"2":{"18":2}}],["mywallettransactioncreatedlistener",{"2":{"17":2}}],["myupdatedeventassembler",{"2":{"16":2}}],["myupdatedevent",{"2":{"16":2}}],["mybalanceupdatedlistener",{"2":{"15":2,"16":2}}],["my",{"2":{"5":2,"75":3,"76":1,"113":1,"117":1,"120":2}}],["modify",{"2":{"16":1}}],["models",{"2":{"6":1,"7":1,"16":2,"46":3,"47":2,"60":4,"78":1,"113":1,"123":1}}],["model",{"0":{"4":1,"9":1,"20":1,"23":1,"28":1,"46":1,"47":1,"74":1,"80":1,"85":1,"86":1,"89":1,"90":1,"93":1,"94":1,"97":1,"98":1,"102":1,"103":1,"106":1,"107":1,"109":1,"111":1,"115":1,"122":1,"124":1,"125":1,"131":1,"136":1},"1":{"24":1,"47":1,"48":1,"110":1,"112":1,"132":1},"2":{"1":4,"4":2,"9":2,"20":3,"38":3,"40":5,"41":4,"42":3,"46":1,"47":1,"48":1,"60":1,"63":1,"74":2,"77":1,"80":2,"85":2,"86":3,"89":2,"90":3,"93":2,"94":3,"97":2,"98":3,"102":2,"103":3,"106":2,"107":3,"109":2,"111":2,"115":3,"122":3,"124":2,"125":2,"127":1,"131":3,"136":3}}],["morphmany",{"2":{"71":1}}],["morphone",{"2":{"1":1,"41":1}}],["more",{"2":{"14":1,"15":1,"17":1,"18":1,"67":1,"72":1}}],["moment",{"2":{"14":1}}],["money",{"0":{"31":1,"139":1},"2":{"12":1,"19":1,"27":1,"40":1,"70":1,"114":1,"116":1,"135":1}}],["most",{"2":{"11":1,"43":1,"113":1}}],["message",{"2":{"83":2}}],["me",{"2":{"78":1}}],["metadata",{"2":{"36":2}}],["meta",{"0":{"83":1},"2":{"5":2,"45":2,"47":1,"83":1,"104":1,"113":1,"117":2,"120":2}}],["methods",{"2":{"15":1,"17":1,"18":1,"69":1,"72":1}}],["method",{"2":{"0":1,"1":1,"3":1,"7":1,"12":1,"41":1,"47":1,"52":1,"60":3,"63":1,"69":1,"72":2,"78":4,"100":1}}],["means",{"2":{"1":1,"41":1}}],["quantity",{"2":{"87":1}}],["question",{"2":{"99":1}}],["questions",{"2":{"50":1}}],["queuing",{"2":{"36":1}}],["queries",{"2":{"1":4,"35":3,"36":1,"40":1,"41":4,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1}}],["querying",{"2":{"1":1,"41":1}}],["query",{"2":{"1":5,"35":1,"41":5,"87":1}}],["quite",{"2":{"16":1}}],["quot",{"2":{"1":4,"8":2,"12":4,"41":4,"113":2}}],["cents",{"2":{"116":2}}],["certain",{"2":{"43":1}}],["credit",{"0":{"113":1},"2":{"113":8}}],["credited",{"2":{"70":1,"116":1}}],["creating",{"2":{"8":1,"36":1,"46":1,"47":1,"48":1,"113":1}}],["creation",{"0":{"8":1,"17":1,"18":1},"1":{"9":1,"10":1,"11":1},"2":{"8":1,"11":1,"17":1,"18":1}}],["createwithdraw",{"2":{"35":3}}],["createwalletcommandmessage",{"2":{"10":1,"11":1}}],["createdeposit",{"2":{"35":3}}],["create",{"0":{"73":1,"75":1},"1":{"74":1,"75":1,"76":1,"77":1},"2":{"5":1,"11":3,"15":1,"16":3,"17":1,"18":1,"35":1,"36":1,"70":1,"73":1,"75":1,"81":1,"110":1,"112":1,"120":1,"121":1}}],["crafted",{"2":{"43":1}}],["c80437bb4c3e",{"2":{"36":2}}],["currencies",{"2":{"117":1}}],["currency",{"0":{"118":1},"2":{"5":3,"27":1,"104":1,"117":2,"120":2,"135":1}}],["current",{"0":{"123":1},"2":{"87":1}}],["custom",{"2":{"71":1}}],["customization",{"0":{"53":1},"1":{"54":1,"55":1}}],["customize",{"0":{"101":1},"1":{"102":1,"103":1,"104":1},"2":{"45":1}}],["customizing",{"0":{"16":1}}],["customer",{"2":{"40":8,"60":2,"63":2,"64":2,"85":3,"86":5,"89":3,"90":5,"93":3,"94":5,"97":3,"98":5,"102":3,"103":5,"106":3,"107":5,"113":1,"124":3,"125":3,"127":2}}],["changing",{"0":{"48":1}}],["changed",{"2":{"67":3,"70":1}}],["change",{"0":{"83":1},"2":{"16":1,"35":1,"48":1,"67":2,"121":1}}],["changes",{"0":{"15":1},"2":{"15":1,"35":3,"67":1}}],["check",{"2":{"21":1,"25":1,"26":1,"29":1,"35":1,"36":1,"40":1,"71":1,"82":1,"83":1,"86":1,"87":1,"90":1,"91":1,"94":1,"95":2,"98":1,"99":2,"103":1,"104":2,"107":1,"108":2,"116":1,"126":2,"128":2,"129":2,"133":1,"134":1,"137":1}}],["choose",{"2":{"13":1}}],["choosing",{"2":{"13":1}}],["catch",{"2":{"71":1,"100":1}}],["cashier",{"2":{"62":1}}],["cases",{"2":{"30":1,"138":1}}],["case",{"2":{"12":1,"15":1,"17":1,"18":1,"19":1,"35":1,"65":2,"114":1,"121":1}}],["calculatebalance",{"2":{"59":1}}],["carrot",{"2":{"87":2}}],["cart",{"0":{"84":1,"87":1},"1":{"85":1,"86":1,"87":1},"2":{"40":2,"69":3,"86":2,"87":2,"90":2,"94":2,"98":2,"103":2,"104":1,"107":2}}],["care",{"2":{"36":1}}],["cause",{"2":{"40":1,"85":1,"89":1,"93":1,"97":1,"102":1,"106":1,"124":1}}],["cache",{"2":{"13":2,"36":1,"44":4}}],["canconfirm",{"2":{"109":3,"111":3}}],["canceled",{"2":{"12":1}}],["canbepaidfloat",{"2":{"58":1}}],["canbepaid",{"2":{"58":1}}],["canbuy",{"2":{"40":1,"60":3,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1,"125":1}}],["canpayfloat",{"2":{"58":1}}],["canpay",{"2":{"40":4,"58":1,"85":4,"89":4,"93":4,"97":4,"102":4,"106":4,"124":4}}],["can",{"0":{"53":1},"1":{"54":1,"55":1},"2":{"1":2,"6":1,"7":2,"8":1,"13":1,"15":1,"17":1,"18":1,"27":2,"29":1,"31":1,"35":3,"36":3,"40":2,"41":2,"42":1,"43":1,"46":1,"47":1,"48":2,"55":2,"67":2,"73":1,"78":2,"86":2,"90":2,"94":2,"98":2,"99":1,"103":1,"104":1,"107":2,"109":1,"111":1,"117":1,"125":1,"126":1,"128":1,"129":1,"135":2,"137":1,"139":1}}],["claus",{"0":{"91":1}}],["class",{"2":{"1":1,"4":1,"9":1,"12":2,"15":3,"16":7,"17":3,"18":3,"20":1,"33":2,"34":2,"35":5,"36":2,"38":1,"40":3,"41":1,"42":1,"46":3,"47":1,"60":4,"65":7,"69":2,"74":1,"77":1,"80":1,"85":1,"86":2,"87":1,"89":1,"90":2,"93":1,"94":2,"97":1,"98":2,"102":1,"103":2,"104":1,"106":1,"107":2,"109":1,"111":1,"115":1,"118":1,"119":1,"122":1,"124":1,"125":1,"127":2,"131":1,"136":1}}],["closer",{"2":{"14":1}}],["client",{"2":{"8":1,"11":2,"35":1,"36":1}}],["cost",{"2":{"95":1,"99":1,"104":1,"126":1,"128":1,"129":1}}],["could",{"2":{"70":1}}],["collecting",{"2":{"113":1}}],["collapse",{"2":{"35":1}}],["columns",{"2":{"72":1}}],["column",{"2":{"11":1,"72":1}}],["correct",{"2":{"70":1}}],["correctly",{"2":{"35":1}}],["core",{"2":{"13":1}}],["conversion",{"2":{"120":1}}],["convertto",{"2":{"64":2,"118":1}}],["convert",{"2":{"32":1}}],["continue",{"2":{"70":1}}],["contract",{"0":{"24":1,"132":1},"2":{"67":1,"71":1,"72":1}}],["contracts",{"2":{"16":1}}],["confirm",{"2":{"109":1,"110":2,"111":1,"112":2,"121":1,"123":1}}],["confirmable",{"2":{"109":3,"111":3}}],["confirmation",{"0":{"83":1},"2":{"83":1}}],["confirmed=0",{"2":{"123":1}}],["confirmed=1",{"2":{"123":1}}],["confirmed",{"2":{"24":1,"83":1,"132":1}}],["configuration",{"0":{"43":1,"55":1},"1":{"44":1,"45":1,"46":1,"47":1,"48":1},"2":{"13":1,"14":1,"43":1,"47":1,"67":1}}],["configure",{"0":{"45":1},"2":{"12":1,"13":1,"55":1}}],["config",{"2":{"13":2,"45":1,"46":1,"47":1,"48":2,"55":2,"65":1,"67":4,"119":1}}],["constraint",{"2":{"40":1,"86":1,"90":1,"94":1,"98":1,"107":1}}],["construct",{"2":{"16":1,"118":1}}],["consistencyserviceinterface",{"2":{"35":2}}],["considered",{"2":{"12":1}}],["consider",{"2":{"1":1,"39":1,"41":1}}],["conditions",{"2":{"13":3}}],["condition",{"0":{"13":1},"2":{"12":1}}],["combine",{"2":{"35":1}}],["commit",{"2":{"14":1}}],["common",{"2":{"13":1}}],["command",{"0":{"11":1},"2":{"54":1,"55":1,"70":4}}],["completed",{"2":{"67":1}}],["complete",{"2":{"12":1}}],["composer",{"0":{"0":1,"3":1,"7":1,"52":1},"1":{"4":1,"5":1},"2":{"0":2,"3":1,"7":1,"52":2}}],["com",{"2":{"7":1,"72":1}}],["code",{"2":{"1":1,"35":2,"36":1,"41":1,"63":2,"64":4,"65":3,"69":1,"78":1}}],["affected",{"2":{"123":1}}],["after",{"2":{"7":1,"35":1,"55":1}}],["available",{"2":{"62":1,"69":1}}],["availability",{"2":{"40":1,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1}}],["amp",{"2":{"36":1}}],["amountfloat",{"2":{"42":1}}],["amount",{"2":{"12":1,"42":1}}],["apm",{"2":{"64":1}}],["api",{"0":{"35":1,"36":1},"2":{"35":8,"36":3}}],["approach",{"2":{"70":1}}],["appear",{"2":{"66":1}}],["appeared",{"2":{"32":1}}],["app",{"2":{"12":2,"33":1,"34":1,"35":5,"36":2,"46":1,"60":2,"69":2,"87":1,"104":1,"123":1}}],["applied",{"2":{"67":1}}],["application",{"2":{"11":1,"35":1}}],["apply",{"2":{"12":1,"35":2,"72":1}}],["again",{"2":{"40":1,"100":1}}],["against",{"2":{"13":1,"36":1}}],["agree",{"2":{"19":1,"114":1}}],["automatically",{"2":{"14":1,"67":1}}],["autoload",{"2":{"0":1,"52":1}}],["arbitrary",{"2":{"64":1}}],["argument",{"2":{"63":1}}],["arises",{"2":{"99":1}}],["arise",{"2":{"35":1}}],["array",{"2":{"13":2,"16":1,"35":10,"36":1,"40":2,"44":2,"86":2,"90":2,"94":2,"98":2,"103":2,"107":2,"118":2,"125":1,"127":1}}],["artisan",{"2":{"13":1,"54":2,"55":2,"67":1,"70":1}}],["are",{"2":{"12":2,"14":1,"15":1,"17":1,"18":1,"22":2,"35":3,"40":2,"62":1,"79":2,"86":2,"90":2,"94":2,"98":2,"103":2,"107":2,"117":1,"121":1,"130":2}}],["advise",{"2":{"36":1,"67":1}}],["administrator",{"2":{"35":1}}],["ad",{"2":{"12":4}}],["added",{"2":{"67":2,"72":2}}],["additional",{"2":{"1":1,"41":1}}],["add",{"2":{"1":1,"9":1,"16":1,"20":2,"38":2,"40":2,"41":1,"42":1,"60":2,"63":1,"67":1,"74":1,"80":1,"85":1,"86":1,"89":1,"90":1,"93":1,"94":1,"97":1,"98":1,"102":1,"103":2,"106":1,"107":1,"109":1,"111":1,"115":2,"117":1,"122":2,"124":1,"125":1,"127":1,"131":2,"136":2}}],["almost",{"2":{"14":1}}],["also",{"2":{"12":1}}],["already",{"2":{"11":1,"40":1,"85":1,"89":1,"93":1,"97":1,"102":1,"106":1,"124":1}}],["allows",{"2":{"113":1}}],["all",{"2":{"1":3,"14":1,"16":1,"35":1,"36":1,"40":1,"41":3,"66":1,"67":2,"70":1,"72":1,"78":2,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1,"123":1}}],["alleviates",{"2":{"1":1,"41":1}}],["abruptly",{"2":{"121":1}}],["about",{"2":{"13":1,"78":1}}],["above",{"2":{"1":1,"41":1,"47":1}}],["able",{"2":{"11":1,"35":3}}],["ability",{"2":{"4":1,"113":1}}],["abbreviated",{"2":{"1":2,"41":2}}],["anything",{"2":{"83":2}}],["any",{"2":{"27":1,"135":1}}],["an",{"2":{"6":1,"12":3,"15":1,"16":1,"17":1,"18":1,"31":1,"35":2,"39":1,"40":5,"70":1,"72":1,"73":1,"85":1,"86":3,"89":1,"90":3,"93":1,"94":3,"97":1,"98":3,"99":1,"102":1,"103":3,"106":1,"107":3,"110":1,"112":1,"113":1,"124":1,"139":1}}],["another",{"2":{"1":1,"5":1,"41":1,"91":1}}],["and",{"0":{"31":1,"73":1,"83":1,"139":1},"1":{"74":1,"75":1,"76":1,"77":1},"2":{"1":3,"5":1,"9":1,"11":2,"12":8,"13":2,"15":2,"16":2,"17":2,"18":2,"19":1,"22":1,"32":1,"35":6,"36":2,"40":2,"41":3,"42":1,"45":1,"46":1,"47":2,"65":1,"67":4,"74":1,"77":1,"78":1,"79":1,"80":1,"85":1,"86":1,"87":1,"89":1,"90":1,"91":2,"93":1,"94":1,"95":2,"97":1,"98":1,"99":2,"100":1,"102":1,"103":1,"104":2,"106":1,"107":1,"108":2,"109":1,"110":1,"111":1,"112":1,"114":1,"117":1,"118":1,"120":1,"121":1,"123":3,"124":1,"125":1,"126":2,"128":2,"129":2,"130":1}}],["a",{"0":{"12":1,"21":1,"25":1,"29":1,"73":1,"75":1,"81":1,"108":1,"116":1,"133":1,"137":1},"1":{"74":1,"75":1,"76":1,"77":1},"2":{"1":1,"4":1,"6":3,"8":2,"11":2,"12":2,"13":6,"14":2,"15":2,"16":3,"17":3,"18":3,"19":2,"20":1,"30":1,"32":2,"35":6,"36":5,"38":1,"40":4,"41":1,"46":1,"67":6,"69":1,"71":2,"75":1,"78":3,"86":4,"90":4,"91":1,"94":4,"98":4,"99":1,"103":5,"104":1,"107":4,"113":2,"114":2,"115":1,"118":1,"121":1,"122":1,"126":1,"128":1,"129":1,"131":1,"136":1,"138":1}}],["attribute",{"2":{"42":1}}],["attention",{"2":{"6":1}}],["at=now",{"2":{"12":1}}],["atomicservice",{"2":{"36":1}}],["atomicserviceinterface",{"2":{"12":4,"35":4,"36":2}}],["atomically",{"2":{"12":1}}],["atomicity",{"2":{"12":1}}],["atomic",{"0":{"12":1},"2":{"12":4,"35":1}}],["at",{"2":{"1":1,"12":1,"35":2,"36":1,"41":1,"67":2,"77":1,"78":2}}],["achieve",{"2":{"103":1}}],["accrues",{"2":{"35":1}}],["accounts",{"2":{"70":1}}],["account",{"2":{"27":1,"116":1,"135":1}}],["acceleration",{"2":{"67":1}}],["accelerated",{"2":{"8":1}}],["access",{"2":{"1":1,"41":1}}],["accessing",{"2":{"1":1,"41":1,"42":1}}],["actively",{"2":{"67":1}}],["actions",{"2":{"12":1}}],["action",{"0":{"10":1}}],["actually",{"2":{"1":1,"41":1}}],["ask",{"2":{"50":1,"78":1}}],["assemblers",{"2":{"16":1}}],["assembler",{"2":{"16":2}}],["asynchronously",{"2":{"11":1}}],["asynchronous",{"0":{"8":1},"1":{"9":1,"10":1,"11":1}}],["as",{"2":{"1":3,"10":1,"14":2,"16":1,"21":1,"25":1,"29":1,"35":3,"36":1,"41":3,"46":1,"87":1,"99":1,"116":1,"118":2,"133":1,"137":1}}],["wrote",{"2":{"119":1}}],["write",{"2":{"100":1,"113":1,"117":1,"118":1}}],["written",{"2":{"36":1}}],["was",{"2":{"13":1,"64":1}}],["wants",{"2":{"91":1}}],["want",{"2":{"12":1,"16":1,"103":1}}],["wait",{"2":{"11":1}}],["wallettransactions",{"2":{"78":1}}],["walletbase",{"2":{"46":2}}],["walletfloat",{"2":{"42":3}}],["walletcreatedeventinterface",{"2":{"18":4}}],["wallets",{"0":{"18":1,"79":1},"1":{"80":1,"81":1,"82":1,"83":1},"2":{"1":1,"4":1,"5":2,"8":1,"11":1,"12":4,"13":1,"22":1,"35":2,"36":1,"41":1,"44":3,"47":1,"70":1,"73":1,"77":1,"78":1,"79":1,"81":1,"103":1,"113":2,"117":1,"120":1,"130":1}}],["wallet",{"0":{"2":1,"6":1,"8":1,"17":1,"38":1,"39":1,"45":1,"46":1,"47":1,"48":1,"73":1,"75":1,"76":1,"77":1,"123":1},"1":{"9":1,"10":1,"11":1,"47":1,"48":1,"74":1,"75":1,"76":1,"77":1},"2":{"0":1,"1":10,"3":1,"4":5,"6":2,"7":2,"8":2,"9":6,"10":2,"11":2,"12":9,"13":3,"14":8,"15":2,"16":10,"17":3,"18":3,"19":1,"20":7,"31":2,"35":11,"36":12,"38":7,"39":2,"40":8,"41":10,"42":5,"44":19,"45":2,"46":6,"47":3,"48":5,"49":2,"52":1,"54":1,"55":1,"57":1,"60":10,"64":4,"65":1,"67":6,"69":2,"70":2,"72":2,"73":1,"74":5,"75":5,"76":1,"77":7,"78":8,"80":5,"81":2,"83":4,"85":2,"86":6,"87":1,"89":2,"90":6,"93":2,"94":6,"97":2,"98":6,"102":2,"103":8,"106":2,"107":6,"109":7,"111":7,"113":7,"114":1,"115":7,"117":2,"118":2,"119":1,"120":1,"122":7,"124":2,"125":4,"127":4,"131":7,"136":7,"139":2}}],["worth",{"2":{"35":1,"36":1}}],["world",{"2":{"24":1,"46":1,"69":2,"120":1,"132":1}}],["worked",{"2":{"82":1}}],["works",{"2":{"35":1}}],["working",{"0":{"118":1},"2":{"12":2,"35":1,"40":2,"48":1,"86":2,"90":2,"94":2,"98":2,"103":2,"107":2,"113":1,"117":1}}],["work",{"0":{"42":1},"2":{"4":1,"6":1,"13":1,"20":1,"38":1,"49":1,"70":1,"115":1,"122":1,"131":1,"136":1}}],["wow",{"2":{"21":1,"116":1}}],["would",{"2":{"1":1,"35":2,"36":2,"41":1,"67":1}}],["without",{"2":{"83":1}}],["within",{"2":{"14":1,"113":1}}],["withdrawal",{"2":{"30":1,"39":1,"83":1,"99":1,"138":1}}],["withdraw",{"0":{"27":1,"29":1,"30":1,"135":1,"137":1,"138":1},"1":{"28":1,"29":1,"30":1,"31":1,"136":1,"137":1,"138":1,"139":1},"2":{"12":1,"22":1,"24":2,"27":1,"29":1,"36":4,"39":1,"79":1,"83":1,"130":1,"132":2,"135":1,"137":1}}],["with",{"0":{"42":1,"118":1},"2":{"1":2,"4":1,"5":1,"11":1,"12":2,"13":2,"16":1,"20":1,"35":1,"36":1,"38":1,"40":6,"41":2,"48":1,"49":1,"54":1,"55":1,"57":2,"65":1,"69":1,"70":2,"72":2,"86":6,"90":6,"94":6,"98":6,"99":1,"103":6,"107":6,"109":2,"111":2,"113":1,"115":1,"117":2,"120":1,"122":1,"131":1,"136":1}}],["will",{"0":{"31":1,"139":1},"2":{"1":2,"6":1,"11":1,"12":4,"14":1,"16":1,"20":1,"21":1,"25":2,"26":1,"29":1,"32":1,"35":4,"36":1,"38":1,"40":2,"41":2,"67":1,"70":1,"81":1,"82":1,"83":1,"85":1,"86":1,"89":1,"90":1,"91":1,"93":1,"94":1,"97":1,"98":1,"102":1,"103":1,"106":1,"107":1,"115":1,"116":1,"118":2,"120":2,"121":1,"122":1,"124":1,"131":1,"133":2,"134":1,"136":1,"137":1}}],["whopping",{"2":{"67":1}}],["whatever",{"2":{"13":1}}],["what",{"0":{"31":1,"139":1},"2":{"12":1,"21":1,"35":1,"99":1,"110":1,"112":1,"116":1}}],["where",{"2":{"12":1,"40":1,"86":1,"90":1,"94":1,"98":1,"107":1,"123":1}}],["when",{"2":{"1":2,"15":2,"19":1,"27":1,"30":1,"35":1,"40":1,"41":2,"48":1,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1,"113":1,"114":1,"121":1,"135":1,"138":1}}],["which",{"2":{"1":1,"15":1,"16":1,"17":1,"18":1,"19":2,"21":1,"41":1,"67":1,"114":2,"116":1}}],["website",{"2":{"27":1,"135":1}}],["websockets",{"2":{"15":1,"17":1,"18":1}}],["well",{"2":{"22":1,"79":1,"130":1}}],["we",{"2":{"1":2,"4":1,"6":1,"12":4,"15":1,"16":3,"17":1,"18":1,"21":1,"31":1,"35":2,"41":2,"42":1,"62":1,"78":1,"83":1,"103":2,"116":1,"118":2,"120":2,"139":1}}],["left",{"2":{"70":1,"120":1}}],["least",{"2":{"67":1}}],["lead",{"2":{"36":2}}],["let",{"2":{"1":1,"5":1,"12":1,"16":1,"20":1,"35":1,"38":1,"41":1,"78":1,"87":1,"115":1,"122":1,"123":1,"131":1,"136":1}}],["limit",{"2":{"113":6}}],["limits",{"0":{"113":1}}],["limited",{"2":{"40":3,"70":1,"86":3,"90":3,"94":3,"98":3,"103":3,"107":3}}],["livelier",{"2":{"78":1}}],["library",{"2":{"64":1,"117":1}}],["like",{"2":{"35":5}}],["likely",{"2":{"14":1}}],["little",{"2":{"32":1}}],["listener",{"2":{"15":1,"16":1,"17":1,"18":1}}],["ll",{"2":{"12":1}}],["lost",{"2":{"120":1}}],["lose",{"2":{"64":1}}],["logic",{"2":{"40":1,"70":1,"86":1,"90":1,"94":1,"98":1,"107":1,"113":1}}],["look",{"2":{"35":4,"78":1}}],["loop",{"2":{"1":1,"41":1}}],["long",{"2":{"14":1}}],["longer",{"2":{"11":1,"14":3,"71":1}}],["lot",{"2":{"12":1,"67":1,"121":1}}],["lockprovidernotfoundexception",{"2":{"71":1}}],["locks",{"2":{"13":1}}],["lockserviceinterface",{"2":{"12":1}}],["lock",{"2":{"12":3,"13":2,"14":1,"44":4}}],["load",{"2":{"1":1,"41":1}}],["loaded",{"2":{"1":3,"41":3,"65":1}}],["loading",{"0":{"1":1,"41":1},"2":{"1":2,"41":2}}],["latest",{"2":{"66":1}}],["large",{"2":{"36":2}}],["laravel",{"0":{"2":1,"6":1},"2":{"0":1,"3":1,"6":1,"7":2,"15":1,"17":1,"18":1,"49":1,"52":1,"62":1,"72":1}}],["last",{"2":{"25":1,"81":2,"91":1,"133":1}}],["lazy",{"2":{"1":1,"41":1}}],["eur",{"2":{"78":2}}],["eth",{"2":{"45":1}}],["ethereum",{"2":{"45":1}}],["etc",{"2":{"8":1,"113":1}}],["edit",{"2":{"43":1,"65":1}}],["efficient",{"2":{"35":1}}],["empty",{"2":{"29":1,"35":4,"118":1,"137":1}}],["everyone",{"2":{"117":1}}],["everything",{"2":{"16":1,"35":1,"121":1}}],["event",{"2":{"16":5}}],["events",{"0":{"16":1},"2":{"15":2,"16":6,"17":4,"18":4}}],["error",{"2":{"12":1,"31":1,"40":1,"85":1,"89":1,"93":1,"97":1,"102":1,"106":1,"124":1,"139":1}}],["entries",{"2":{"70":1}}],["entity",{"2":{"12":1}}],["environment",{"0":{"44":1}}],["end",{"2":{"14":2,"15":1,"17":1,"18":1}}],["enable",{"2":{"13":1}}],["enough",{"0":{"31":1,"139":1},"2":{"11":1,"12":2,"27":1,"31":1,"40":1,"135":1,"139":1}}],["ensure",{"2":{"0":1,"52":1}}],["easy",{"2":{"49":1}}],["each",{"2":{"1":2,"35":2,"41":2,"67":1,"73":1}}],["eager",{"0":{"1":1,"41":1},"2":{"1":4,"41":4}}],["executing",{"2":{"70":1}}],["executed",{"2":{"1":1,"41":1}}],["execute",{"2":{"1":1,"36":1,"41":1,"83":1}}],["exists",{"2":{"65":1,"71":1}}],["exception",{"2":{"40":1,"71":1,"99":1}}],["exceptioninterface",{"2":{"35":2}}],["exceptions",{"2":{"31":2,"139":2}}],["exchangeserviceinterface",{"2":{"118":2}}],["exchange",{"0":{"117":1,"120":1},"1":{"118":1,"119":1,"120":1},"2":{"5":1,"64":1,"117":1,"119":1,"120":1}}],["extension",{"2":{"65":1}}],["extended",{"2":{"47":1,"72":1}}],["extend",{"0":{"46":1},"1":{"47":1,"48":1},"2":{"46":1,"47":1}}],["extends",{"2":{"1":1,"4":1,"9":1,"20":1,"38":1,"40":3,"41":1,"42":1,"46":2,"60":1,"74":1,"77":1,"80":1,"85":1,"86":2,"89":1,"90":2,"93":1,"94":2,"97":1,"98":2,"102":1,"103":2,"106":1,"107":2,"109":1,"111":1,"115":1,"122":1,"124":1,"125":1,"127":1,"131":1,"136":1}}],["external",{"2":{"35":5,"36":9,"83":2}}],["extra",{"2":{"24":4,"36":4,"72":1,"83":2,"132":4}}],["expected",{"2":{"21":1,"116":1}}],["expensive",{"2":{"12":1}}],["expand",{"2":{"20":1,"38":1,"115":1,"122":1,"131":1,"136":1}}],["examples",{"2":{"7":1}}],["example",{"0":{"5":1,"24":1,"110":1,"112":1,"132":1},"2":{"12":2,"27":1,"30":1,"35":2,"39":1,"40":2,"46":1,"69":1,"78":1,"86":2,"90":2,"94":2,"98":2,"103":2,"107":2,"113":1,"117":1,"135":1,"138":1}}],["echo",{"2":{"1":4,"41":4,"47":1}}],["eloquent",{"2":{"1":2,"41":2}}],["physically",{"2":{"72":1}}],["phpreturn",{"2":{"119":1}}],["phpif",{"2":{"100":1}}],["phpclass",{"2":{"60":1}}],["phpapp",{"2":{"33":1,"34":1}}],["php",{"2":{"13":4,"16":2,"35":1,"45":2,"46":3,"47":3,"48":2,"60":2,"62":2,"63":2,"64":4,"65":3,"67":2,"69":1,"78":1,"99":1,"108":1,"113":2,"119":1}}],["phppublic",{"2":{"11":1}}],["php$cart",{"2":{"104":1}}],["php$item",{"2":{"91":1,"95":1,"99":1,"104":1,"108":1,"126":1,"128":1,"129":1}}],["php$wallet",{"2":{"77":1}}],["php$mywallet",{"2":{"76":1}}],["php$bcloaded",{"2":{"65":1}}],["php$transaction",{"2":{"42":1}}],["php$transfer",{"2":{"24":1,"120":2,"132":1}}],["php$fist",{"2":{"25":1}}],["php$firstwallet",{"2":{"81":2,"82":2,"83":1}}],["php$first",{"2":{"25":2,"26":2,"81":1,"91":2,"133":3,"134":2}}],["php$rub",{"2":{"5":1,"120":1}}],["php$user",{"2":{"21":3,"29":3,"30":1,"39":1,"40":1,"42":1,"75":2,"78":1,"87":1,"95":2,"99":3,"104":1,"108":1,"110":1,"112":1,"116":3,"117":1,"123":2,"126":2,"128":2,"129":2,"137":3,"138":1}}],["php$users",{"2":{"1":2,"41":2}}],["php$usd",{"2":{"5":1,"120":1}}],["phpuse",{"2":{"1":1,"4":1,"9":1,"10":1,"12":2,"14":1,"15":2,"16":4,"17":2,"18":2,"20":1,"35":4,"36":3,"38":1,"40":3,"41":1,"42":1,"46":1,"74":1,"77":1,"80":1,"83":1,"85":1,"86":2,"87":1,"89":1,"90":2,"93":1,"94":2,"97":1,"98":2,"102":1,"103":2,"106":1,"107":2,"109":1,"111":1,"115":1,"118":1,"122":1,"124":1,"125":1,"127":1,"131":1,"136":1}}],["pt",{"2":{"67":1}}],["please",{"2":{"50":1}}],["places",{"0":{"48":1},"2":{"48":2}}],["place",{"2":{"22":1,"79":1,"130":1}}],["put",{"2":{"116":1}}],["pull",{"2":{"67":1,"72":1}}],["purchased",{"2":{"40":1,"86":1,"90":1,"94":1,"98":1,"99":1,"107":1,"125":1}}],["purchase",{"0":{"99":1,"104":1},"2":{"40":3,"86":2,"90":2,"94":2,"95":1,"98":2,"103":2,"107":2,"125":1,"127":1}}],["purchaseserviceinterface",{"2":{"40":1,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1}}],["purchases",{"0":{"40":1}}],["publish",{"2":{"13":1,"54":2,"55":2,"67":1}}],["public",{"2":{"1":1,"10":1,"15":1,"16":8,"17":1,"18":1,"35":2,"40":5,"41":1,"46":1,"60":3,"63":2,"64":8,"86":5,"90":5,"94":5,"98":5,"103":5,"107":5,"118":2,"125":4,"127":4}}],["perfect",{"2":{"120":1}}],["performed",{"2":{"22":1,"79":1,"130":1}}],["perform",{"2":{"6":1,"72":1}}],["performance",{"2":{"6":1,"35":1,"36":1,"67":1}}],["pen",{"2":{"36":1}}],["potato",{"2":{"87":2}}],["possible",{"2":{"14":1,"35":1,"36":1,"77":1}}],["point",{"2":{"14":1,"67":1}}],["prepare",{"2":{"80":1}}],["prepared",{"2":{"20":1,"38":1,"115":1,"122":1,"131":1,"136":1}}],["precision",{"2":{"44":1,"64":1}}],["previously",{"2":{"13":1,"35":1,"36":1,"70":1}}],["priority",{"2":{"27":1,"135":1}}],["priceperitem",{"2":{"87":1}}],["price",{"2":{"19":1,"114":1}}],["private",{"2":{"16":2,"118":2}}],["proceed",{"0":{"99":1,"104":1},"2":{"40":1,"55":1}}],["processing",{"2":{"64":1}}],["process",{"0":{"120":1,"126":1},"2":{"6":1,"12":1,"32":1}}],["productlimitedinterface",{"2":{"40":3,"70":2,"86":3,"90":3,"94":3,"98":3,"103":3,"107":3,"125":3}}],["productinterface",{"2":{"40":3,"70":1,"86":3,"90":3,"94":3,"98":3,"103":3,"107":3,"113":1,"125":1,"127":2}}],["products",{"2":{"40":5,"67":1,"70":1,"86":5,"90":5,"94":5,"98":5,"103":5,"107":5}}],["product",{"2":{"40":3,"60":2,"70":3,"86":3,"90":3,"91":3,"94":3,"98":3,"99":2,"103":4,"104":1,"107":3,"125":1,"126":2,"127":1,"128":2,"129":2}}],["promotion",{"2":{"35":1}}],["protected",{"2":{"15":1,"16":1,"17":1,"18":1,"64":2}}],["provider",{"2":{"13":1}}],["problem",{"2":{"1":2,"41":2}}],["property",{"2":{"1":1,"21":1,"25":1,"29":1,"41":1,"69":1,"116":1,"133":1,"137":1}}],["properties",{"2":{"1":1,"41":1}}],["project",{"2":{"0":2,"3":1,"7":1,"13":1,"52":2,"67":2,"70":1}}],["paid",{"2":{"109":1,"111":1}}],["path",{"2":{"60":3}}],["page",{"2":{"50":1}}],["packs",{"2":{"36":1}}],["package",{"2":{"6":2,"7":1,"13":2,"16":4,"35":2,"36":2,"39":1,"43":1,"55":1,"67":2,"72":1}}],["packages",{"2":{"0":1,"52":1}}],["payable",{"2":{"123":2}}],["payment",{"0":{"63":1,"92":1,"96":1,"101":1},"1":{"93":1,"94":1,"95":1,"97":1,"98":1,"99":1,"100":1,"102":1,"103":1,"104":1},"2":{"39":1}}],["pay",{"0":{"95":1,"100":1},"2":{"19":1,"91":1,"114":1}}],["parameter",{"2":{"60":1}}],["param",{"2":{"35":2,"118":1}}],["participating",{"2":{"35":1}}],["part",{"2":{"13":1,"19":1,"114":1}}],["parent",{"2":{"1":1,"41":1}}],["t",{"2":{"72":2}}],["typing",{"2":{"64":1}}],["type=",{"2":{"123":1}}],["type",{"2":{"24":2,"72":2,"132":2}}],["ttl",{"2":{"44":4}}],["title",{"2":{"40":2,"86":2,"90":2,"94":2,"98":2,"103":2,"107":2,"125":1,"127":1}}],["time",{"2":{"1":1,"12":1,"14":2,"41":1,"77":1,"78":1}}],["tax",{"0":{"126":1},"2":{"91":1}}],["taxable",{"2":{"61":1,"91":1,"125":2}}],["taxing",{"0":{"127":1},"1":{"128":1,"129":1},"2":{"61":1}}],["taxes",{"2":{"39":1}}],["take",{"2":{"36":1,"78":1,"118":1}}],["takes",{"2":{"14":1,"22":1,"79":1,"130":1}}],["tasks",{"2":{"15":1,"117":1}}],["tag=laravel",{"2":{"13":1,"54":1,"55":1,"67":1}}],["table",{"2":{"1":1,"36":2,"41":1,"44":6,"47":1,"67":1,"72":2}}],["tell",{"2":{"35":1}}],["teams",{"2":{"8":1}}],["tests",{"2":{"7":2}}],["trey",{"2":{"110":1,"112":1}}],["tree",{"2":{"7":1}}],["try",{"2":{"40":1,"100":2}}],["true",{"2":{"25":1,"40":3,"65":1,"75":1,"81":1,"83":1,"86":1,"87":1,"90":1,"91":3,"94":1,"95":1,"98":1,"99":1,"103":1,"107":1,"108":2,"110":2,"112":2,"125":1,"133":1}}],["transferfloatquery",{"2":{"36":1}}],["transfer>",{"2":{"35":1}}],["transferquery",{"2":{"36":4}}],["transferquery>",{"2":{"35":1}}],["transferqueryhandlerinterface",{"2":{"35":1,"36":2}}],["transfers",{"0":{"36":1},"2":{"35":1,"36":4,"44":1,"70":1,"71":1,"72":2}}],["transfer",{"0":{"22":1,"25":1,"26":1,"79":1,"81":1,"82":1,"130":1,"133":1,"134":1},"1":{"23":1,"24":1,"25":1,"26":1,"80":1,"81":1,"82":1,"83":1,"131":1,"132":1,"133":1,"134":1},"2":{"22":2,"25":1,"26":1,"27":1,"36":2,"44":2,"47":1,"60":2,"70":1,"79":2,"81":1,"82":1,"83":1,"130":2,"133":1,"134":1,"135":1}}],["transferring",{"2":{"15":1,"17":1,"18":1,"36":1}}],["transactionfloatquery",{"2":{"35":2}}],["transaction>",{"2":{"35":1}}],["transactionquery",{"2":{"35":7}}],["transactionquery>",{"2":{"35":1}}],["transactionqueryhandlerinterface",{"2":{"35":5}}],["transactioncreatedeventinterface",{"2":{"17":4}}],["transaction",{"0":{"12":1,"14":1,"78":1},"2":{"12":3,"14":4,"22":1,"36":5,"42":1,"44":2,"47":1,"60":4,"79":1,"109":1,"111":1,"130":1}}],["transactions",{"0":{"17":1,"35":1,"39":1},"2":{"8":1,"14":3,"35":2,"36":1,"39":1,"42":1,"44":1,"70":1,"78":4,"123":3}}],["tracking",{"0":{"15":1,"17":1,"18":1}}],["traits",{"2":{"1":1,"4":2,"9":2,"20":1,"38":1,"40":3,"41":1,"42":1,"74":1,"77":2,"80":1,"85":1,"86":2,"89":1,"90":2,"93":1,"94":2,"97":1,"98":2,"102":1,"103":4,"106":1,"107":2,"109":2,"111":2,"113":1,"115":1,"122":1,"124":1,"125":1,"127":1,"131":1,"136":1}}],["trait",{"2":{"1":1,"9":1,"20":1,"38":1,"40":3,"41":1,"42":1,"74":1,"80":1,"85":2,"86":1,"89":2,"90":1,"93":2,"94":1,"97":2,"98":1,"102":2,"103":1,"106":2,"107":1,"109":1,"111":1,"115":1,"122":1,"124":2,"125":1,"131":1,"136":1}}],["two",{"2":{"1":1,"11":1,"12":1,"20":1,"22":1,"31":1,"38":1,"40":1,"41":1,"70":1,"79":1,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1,"115":1,"120":1,"122":1,"130":1,"131":1,"136":1,"139":1}}],["together",{"2":{"78":1}}],["toned",{"2":{"67":1}}],["too",{"2":{"13":1}}],["to",{"0":{"42":1,"76":1,"99":1,"104":1,"121":1},"1":{"122":1,"123":1},"2":{"0":1,"1":8,"4":1,"5":1,"6":4,"7":1,"9":1,"11":4,"12":8,"13":4,"14":5,"15":3,"16":5,"17":3,"18":3,"19":1,"20":2,"25":1,"26":1,"32":2,"35":11,"36":6,"38":2,"40":4,"41":8,"42":1,"43":2,"47":1,"52":1,"55":2,"57":1,"58":2,"59":1,"60":5,"61":1,"62":2,"63":1,"64":2,"65":1,"66":3,"67":4,"68":1,"69":2,"70":7,"71":4,"72":4,"74":1,"77":2,"78":2,"81":1,"82":1,"85":1,"86":1,"89":1,"90":1,"91":2,"93":1,"94":1,"97":1,"98":1,"100":2,"102":1,"103":3,"106":1,"107":1,"109":1,"110":1,"111":1,"112":1,"113":2,"114":1,"115":2,"117":2,"120":1,"121":1,"122":2,"124":1,"125":1,"131":2,"133":1,"134":1,"136":2}}],["though",{"2":{"43":1}}],["those",{"2":{"30":1,"138":1}}],["throw",{"2":{"40":1,"99":1}}],["throws",{"2":{"35":2}}],["thing",{"2":{"35":1,"36":1}}],["things",{"2":{"35":2}}],["this",{"2":{"1":4,"6":1,"12":2,"13":1,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"35":5,"36":3,"38":1,"40":1,"41":4,"43":1,"47":1,"48":1,"54":1,"55":1,"64":1,"67":1,"70":1,"71":1,"78":1,"86":1,"90":1,"94":1,"98":1,"107":1,"110":1,"112":1,"113":1,"114":1,"115":1,"117":1,"119":1,"121":1,"122":1,"131":1,"136":1}}],["thanks",{"2":{"70":1}}],["thankfully",{"2":{"1":1,"41":1}}],["than",{"2":{"31":1,"139":1}}],["that",{"2":{"0":1,"1":1,"12":1,"13":1,"14":1,"16":1,"20":1,"22":1,"32":1,"35":2,"36":2,"38":1,"41":1,"46":1,"52":1,"67":2,"79":1,"99":1,"110":1,"112":1,"115":1,"122":1,"130":1,"131":1,"136":1}}],["they",{"2":{"35":1,"72":1}}],["these",{"2":{"35":1,"70":1}}],["them",{"2":{"11":1,"36":1,"72":1}}],["therefore",{"2":{"14":1}}],["there",{"2":{"6":2,"12":3,"13":2,"15":1,"27":1,"31":1,"35":2,"40":2,"67":2,"70":1,"86":2,"90":2,"94":2,"98":2,"103":2,"107":2,"121":1,"135":1,"139":1}}],["then",{"2":{"1":1,"12":1,"13":1,"15":2,"16":3,"17":2,"18":2,"31":1,"35":1,"40":2,"41":1,"62":1,"67":4,"70":1,"71":3,"72":3,"86":2,"90":2,"91":1,"94":2,"98":2,"103":2,"107":2,"113":1,"121":1,"125":1,"139":1}}],["their",{"2":{"1":1,"41":1}}],["the",{"0":{"17":1,"18":1,"31":1,"76":1,"83":1,"87":1,"121":1,"123":1,"139":1},"1":{"122":1,"123":1},"2":{"0":1,"1":15,"3":1,"4":1,"6":2,"7":3,"8":4,"9":1,"11":9,"12":26,"13":13,"14":21,"15":4,"16":10,"17":7,"18":7,"19":4,"20":4,"21":3,"22":1,"25":5,"26":4,"27":3,"29":3,"30":1,"31":2,"32":2,"35":18,"36":13,"38":4,"39":3,"40":9,"41":15,"42":4,"43":1,"46":1,"47":3,"48":1,"50":1,"52":1,"54":1,"55":2,"60":2,"63":2,"64":2,"66":1,"67":15,"69":1,"70":10,"71":4,"72":7,"73":1,"74":1,"77":3,"78":7,"79":1,"80":2,"81":3,"82":4,"83":3,"85":2,"86":7,"87":2,"89":2,"90":7,"91":7,"93":2,"94":7,"95":4,"97":2,"98":7,"99":11,"102":2,"103":5,"104":5,"106":2,"107":7,"108":4,"109":3,"111":3,"113":6,"114":4,"115":4,"116":5,"117":2,"118":3,"119":2,"120":2,"121":2,"122":4,"123":2,"124":2,"125":2,"126":5,"128":5,"129":5,"130":1,"131":4,"133":5,"134":4,"135":3,"136":4,"137":3,"138":1,"139":2}}],["urgently",{"2":{"15":1}}],["unconfirmed",{"2":{"121":1,"123":1}}],["unfortunately",{"2":{"120":1}}],["unnecessary",{"2":{"65":1}}],["unlimited",{"2":{"40":2,"73":1,"86":2,"90":2,"94":2,"98":2,"103":2,"107":2}}],["unlock",{"2":{"14":1}}],["under",{"2":{"35":1}}],["uniqueness",{"2":{"35":1,"36":1}}],["unique",{"2":{"11":1,"73":1}}],["until",{"2":{"1":1,"14":1,"41":1,"70":1}}],["ulid",{"2":{"6":1}}],["uuid4",{"2":{"11":1}}],["uuid",{"0":{"6":1},"2":{"6":4,"7":3,"10":1,"11":3,"35":5,"36":9,"67":2,"70":1}}],["usage",{"0":{"37":1},"1":{"38":1,"39":1,"40":1,"41":1,"42":1}}],["us",{"2":{"35":1}}],["usd",{"2":{"5":3,"78":2,"104":1,"117":2,"118":1,"120":1}}],["useful",{"2":{"48":1,"53":1}}],["uses",{"2":{"21":1,"25":1,"29":1,"91":1,"116":1,"133":1,"137":1}}],["used",{"2":{"14":1,"36":1,"47":1,"67":1,"72":1,"78":1}}],["use",{"0":{"53":1,"63":1,"73":1},"1":{"54":1,"55":1,"74":1,"75":1,"76":1,"77":1},"2":{"1":3,"4":3,"6":2,"7":1,"9":3,"10":2,"12":3,"14":1,"16":1,"20":2,"35":7,"36":3,"38":2,"40":8,"41":3,"42":3,"55":1,"67":1,"72":1,"74":2,"77":4,"78":1,"80":2,"83":1,"85":2,"86":6,"89":2,"90":6,"93":2,"94":6,"97":2,"98":6,"100":1,"102":2,"103":8,"106":2,"107":6,"109":4,"111":4,"113":1,"115":2,"117":1,"118":1,"122":2,"124":2,"125":4,"127":4,"131":2,"136":2}}],["userconfirm",{"2":{"109":1,"111":1}}],["users",{"2":{"1":3,"35":1,"41":3,"81":1}}],["user",{"0":{"4":1,"9":1,"20":1,"23":1,"28":1,"74":1,"80":1,"85":1,"89":1,"93":1,"97":1,"102":1,"106":1,"109":1,"111":1,"115":1,"122":1,"124":1,"131":1,"136":1},"1":{"24":1,"110":1,"112":1,"132":1},"2":{"1":7,"4":1,"9":1,"10":1,"11":1,"12":1,"15":1,"20":1,"21":4,"25":7,"26":2,"29":4,"30":1,"31":1,"38":1,"39":1,"40":3,"41":7,"42":2,"70":1,"74":1,"75":2,"77":1,"80":1,"81":7,"82":2,"83":1,"85":2,"87":2,"89":2,"91":6,"93":2,"95":2,"97":2,"99":4,"102":2,"104":3,"106":2,"108":2,"109":1,"111":1,"115":1,"116":4,"121":1,"122":1,"123":2,"124":2,"126":3,"128":3,"129":3,"131":1,"133":7,"134":2,"136":1,"137":4,"138":1,"139":1}}],["using",{"2":{"0":1,"1":1,"3":1,"6":2,"7":1,"15":1,"17":1,"18":1,"40":1,"41":1,"52":1,"62":1,"71":1,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1}}],["upgrade",{"0":{"56":1},"1":{"57":1,"58":1,"59":1,"60":1,"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1}}],["updating",{"2":{"17":1,"18":1,"64":1}}],["updatewalletsuuidtable",{"2":{"67":1}}],["updated",{"2":{"16":1}}],["update",{"2":{"12":1,"35":1,"62":1,"66":1,"67":1,"71":1,"113":1}}],["up",{"2":{"0":1,"52":1}}],["right",{"0":{"76":1}}],["rows",{"2":{"123":1}}],["rounding",{"2":{"120":1}}],["round",{"2":{"86":2}}],["roll",{"2":{"12":1}}],["root",{"2":{"0":1,"3":1,"7":1,"52":1}}],["rates",{"2":{"117":1}}],["rate",{"2":{"64":3}}],["raise",{"2":{"12":4}}],["race",{"0":{"13":1},"2":{"12":1,"13":3,"14":1}}],["rub",{"2":{"5":3,"118":1,"120":1}}],["rubles",{"2":{"120":4}}],["ruble",{"2":{"5":1,"120":2}}],["running",{"2":{"14":1}}],["run",{"0":{"54":1},"2":{"0":1,"1":1,"3":1,"7":1,"41":1,"52":1,"67":1,"70":1}}],["registration",{"0":{"119":1}}],["registered",{"2":{"119":1}}],["register",{"0":{"47":1}}],["registering",{"2":{"46":1,"47":1}}],["refresh",{"0":{"121":1},"1":{"122":1,"123":1},"2":{"121":1,"123":1}}],["refreshbalance",{"2":{"59":1}}],["refund",{"0":{"105":1,"108":1},"1":{"106":1,"107":1,"108":1}}],["rewrite",{"2":{"71":1}}],["reuse",{"2":{"40":1,"85":1,"89":1,"93":1,"97":1,"102":1,"106":1,"124":1}}],["replenish",{"2":{"120":1}}],["replenishment",{"2":{"19":1,"39":1,"114":1}}],["replaced",{"2":{"70":1,"72":1}}],["replace",{"2":{"57":1,"58":2,"59":1,"60":3,"61":1,"65":1,"67":1,"69":2,"70":1}}],["report",{"2":{"36":1}}],["remove",{"2":{"71":1}}],["removed",{"2":{"12":1,"62":1,"72":1}}],["removing",{"2":{"65":1}}],["remembering",{"2":{"36":1}}],["restarted",{"2":{"70":1}}],["result",{"2":{"35":1}}],["results",{"2":{"27":1,"135":1}}],["responsefactory",{"2":{"10":2}}],["response",{"2":{"10":3,"36":1}}],["redis",{"2":{"13":5}}],["reduces",{"2":{"6":1}}],["reduce",{"2":{"1":1,"35":1,"41":1}}],["receiving",{"0":{"101":1},"1":{"102":1,"103":1,"104":1},"2":{"104":1}}],["receivedtransfers",{"2":{"72":1}}],["receive",{"2":{"11":1}}],["recommend",{"2":{"6":1,"13":2,"40":1,"67":2,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1}}],["recommended",{"2":{"0":1,"3":1,"7":1,"13":1,"52":1}}],["returns",{"2":{"78":1}}],["return",{"2":{"10":1,"16":6,"35":2,"40":6,"46":1,"60":1,"63":2,"67":1,"86":6,"90":6,"94":6,"98":6,"103":5,"107":6,"108":1,"118":1,"125":5,"127":4}}],["retrieve",{"2":{"1":4,"41":4}}],["ready",{"2":{"6":1,"16":1}}],["relative",{"2":{"78":1}}],["relation",{"2":{"71":2}}],["relationship",{"2":{"1":2,"41":2}}],["relationships",{"2":{"1":3,"41":3}}],["related",{"2":{"1":1,"41":1}}],["required",{"2":{"13":1}}],["requests",{"2":{"11":1,"12":1,"36":1,"71":1}}],["request",{"2":{"10":2,"36":1,"40":1,"67":1,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1}}],["req",{"2":{"0":1,"3":1,"7":1,"52":1}}],["i",{"2":{"12":1,"13":2,"35":1,"36":1,"40":1,"67":3,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1}}],["impressive",{"2":{"35":1}}],["improve",{"2":{"35":1}}],["important",{"2":{"14":1}}],["imported",{"2":{"13":1}}],["implement",{"2":{"16":2,"40":1,"72":1,"86":1,"90":1,"94":1,"98":1,"107":1}}],["implementation",{"2":{"7":1,"15":1,"16":1,"17":1,"18":1,"72":1}}],["implements",{"2":{"1":1,"4":1,"9":1,"16":2,"20":1,"38":1,"40":3,"41":1,"42":1,"60":1,"74":1,"77":1,"80":1,"85":1,"86":2,"89":1,"90":2,"93":1,"94":2,"97":1,"98":2,"102":1,"103":2,"106":1,"107":2,"109":1,"111":1,"115":1,"118":1,"122":1,"124":1,"125":1,"127":1,"131":1,"136":1}}],["immediately",{"2":{"12":1,"70":1}}],["illuminate",{"2":{"10":3,"14":1,"16":1}}],["illustrate",{"2":{"1":1,"41":1}}],["id=5",{"2":{"123":1}}],["id=123",{"2":{"12":1}}],["idea",{"2":{"8":1}}],["identifiers",{"2":{"6":1,"70":1}}],["identifier",{"2":{"6":1}}],["id",{"2":{"6":1,"25":1,"81":1,"91":1,"133":1}}],["its",{"2":{"110":1,"112":1}}],["item",{"0":{"86":1,"90":1,"94":1,"98":1,"103":1,"107":1,"125":1},"2":{"40":4,"60":1,"86":3,"87":1,"90":3,"91":1,"94":3,"95":1,"98":3,"99":1,"103":3,"104":1,"107":3,"108":1,"125":2,"126":1,"127":2,"128":1,"129":1}}],["it",{"0":{"53":1,"73":1},"1":{"54":1,"55":1,"74":1,"75":1,"76":1,"77":1},"2":{"5":1,"6":1,"7":1,"11":3,"12":4,"13":2,"14":4,"15":1,"16":1,"17":1,"18":1,"19":1,"20":1,"25":1,"26":1,"27":1,"29":1,"31":1,"34":1,"35":6,"36":4,"38":1,"40":1,"53":1,"55":2,"65":2,"67":4,"69":1,"71":1,"77":2,"78":1,"81":1,"82":1,"83":1,"86":1,"87":1,"90":1,"91":2,"94":1,"95":1,"98":1,"100":1,"103":1,"104":1,"107":1,"108":1,"110":1,"112":1,"113":2,"114":1,"115":1,"116":1,"120":1,"122":1,"123":1,"129":1,"131":1,"133":1,"134":1,"135":1,"136":1,"137":1,"139":1}}],["if",{"0":{"31":1,"63":1,"139":1},"2":{"1":1,"8":1,"12":2,"13":1,"31":1,"35":1,"36":1,"40":4,"41":1,"62":1,"65":1,"67":4,"70":1,"71":3,"72":4,"78":1,"86":2,"90":2,"91":1,"94":2,"98":2,"99":1,"103":2,"107":2,"113":1,"118":1,"125":1,"139":1}}],["infinite",{"2":{"70":1}}],["info",{"2":{"36":2}}],["information",{"2":{"15":1,"17":1,"18":1}}],["inherits",{"2":{"40":1,"85":1,"89":1,"93":1,"97":1,"102":1,"106":1,"124":1}}],["increase",{"2":{"36":1}}],["independent",{"2":{"35":1}}],["insert",{"2":{"35":3}}],["insufficientfunds",{"2":{"31":1,"139":1}}],["inside",{"2":{"16":1,"35":1,"36":1}}],["instead",{"2":{"6":1}}],["installing",{"2":{"55":1}}],["installed",{"2":{"0":1,"52":1}}],["installation",{"0":{"51":1},"1":{"52":1,"53":1,"54":1,"55":1},"2":{"0":1,"3":1,"7":1,"52":1}}],["invoke",{"2":{"10":1,"11":1}}],["introduction",{"0":{"49":1},"1":{"50":1}}],["introduces",{"2":{"15":1,"17":1,"18":1}}],["int|string",{"2":{"40":2,"86":2,"90":2,"94":2,"98":2,"103":2,"107":2,"125":1,"127":1}}],["intvalue",{"0":{"34":1}}],["interest",{"2":{"113":1}}],["internal",{"2":{"15":2,"16":5,"17":2,"18":2,"118":1}}],["interfaces",{"2":{"1":1,"4":1,"9":1,"20":1,"38":1,"40":6,"41":1,"42":2,"70":3,"72":1,"74":1,"77":1,"80":1,"83":1,"85":1,"86":5,"89":1,"90":5,"93":1,"94":5,"97":1,"98":5,"102":1,"103":5,"106":1,"107":5,"109":2,"111":2,"113":2,"115":1,"122":1,"124":1,"125":3,"127":3,"131":1,"136":1}}],["interface",{"2":{"1":1,"9":1,"12":1,"15":1,"16":1,"17":1,"18":1,"20":1,"35":2,"38":1,"40":4,"41":1,"42":1,"60":1,"70":1,"74":1,"80":1,"85":1,"86":3,"89":1,"90":3,"91":1,"93":1,"94":3,"97":1,"98":3,"102":1,"103":3,"106":1,"107":3,"109":1,"111":1,"115":1,"122":1,"124":1,"125":1,"127":1,"131":1,"136":1}}],["into",{"2":{"8":1,"13":1,"35":2,"70":1,"120":1}}],["int",{"2":{"6":1,"16":1,"35":1,"36":1,"40":1,"60":1,"63":2,"64":2,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1,"125":1}}],["in",{"0":{"12":1},"2":{"0":1,"3":1,"6":2,"7":3,"11":1,"12":4,"13":2,"14":1,"15":1,"17":1,"18":1,"19":1,"20":1,"22":2,"27":3,"35":4,"36":5,"38":1,"40":1,"46":1,"47":1,"48":1,"52":1,"64":2,"67":3,"70":1,"72":1,"79":2,"86":1,"90":1,"94":1,"98":1,"103":1,"107":1,"114":1,"115":1,"119":1,"121":1,"122":1,"123":1,"127":1,"130":2,"131":1,"135":3,"136":1}}],["issues",{"2":{"50":1}}],["issue",{"2":{"13":2}}],["is",{"0":{"31":1,"139":1},"2":{"0":1,"1":3,"3":1,"6":2,"7":1,"8":1,"11":3,"12":5,"13":4,"14":7,"15":1,"16":3,"17":1,"18":1,"19":3,"20":3,"21":2,"27":2,"29":1,"30":1,"31":3,"35":6,"36":3,"38":3,"39":1,"40":1,"41":3,"43":1,"52":1,"53":1,"62":1,"67":4,"69":1,"72":2,"77":1,"86":1,"90":1,"94":1,"98":1,"99":1,"107":1,"110":1,"112":1,"113":2,"114":3,"115":3,"116":4,"117":1,"119":1,"120":1,"122":3,"131":3,"135":2,"136":3,"137":1,"138":1,"139":3}}]],"serializationVersion":2}';export{e as default}; diff --git a/docs/.vitepress/dist/assets/chunks/VPLocalSearchBox.BxDsQnVT.js b/docs/.vitepress/dist/assets/chunks/VPLocalSearchBox.BxDsQnVT.js new file mode 100644 index 000000000..ac457f2ff --- /dev/null +++ b/docs/.vitepress/dist/assets/chunks/VPLocalSearchBox.BxDsQnVT.js @@ -0,0 +1,7 @@ +var Ct=Object.defineProperty;var It=(o,e,t)=>e in o?Ct(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var Oe=(o,e,t)=>It(o,typeof e!="symbol"?e+"":e,t);import{X as Dt,s as oe,v as $e,ai as kt,aj as Ot,d as Rt,G as xe,ak as tt,h as Fe,al as _t,am as Mt,x as Lt,an as Pt,y as Re,R as de,Q as Ee,ao as zt,ap as Bt,Y as Vt,U as $t,aq as Wt,o as ee,b as Kt,j as k,a1 as Jt,k as j,ar as Ut,as as jt,at as Gt,c as re,n as rt,e as Se,E as at,F as nt,a as ve,t as pe,au as Qt,p as qt,l as Ht,av as it,aw as Yt,a7 as Zt,ad as Xt,ax as er,_ as tr}from"./framework.OdeEVNy0.js";import{u as rr,c as ar}from"./theme.TrL8JeO-.js";const nr={root:()=>Dt(()=>import("./@localSearchIndexroot.Duohj-zx.js"),[])};/*! +* tabbable 6.2.0 +* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE +*/var yt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ne=yt.join(","),mt=typeof Element>"u",ue=mt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ce=!mt&&Element.prototype.getRootNode?function(o){var e;return o==null||(e=o.getRootNode)===null||e===void 0?void 0:e.call(o)}:function(o){return o==null?void 0:o.ownerDocument},Ie=function o(e,t){var r;t===void 0&&(t=!0);var n=e==null||(r=e.getAttribute)===null||r===void 0?void 0:r.call(e,"inert"),a=n===""||n==="true",i=a||t&&e&&o(e.parentNode);return i},ir=function(e){var t,r=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return r===""||r==="true"},gt=function(e,t,r){if(Ie(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ne));return t&&ue.call(e,Ne)&&n.unshift(e),n=n.filter(r),n},bt=function o(e,t,r){for(var n=[],a=Array.from(e);a.length;){var i=a.shift();if(!Ie(i,!1))if(i.tagName==="SLOT"){var s=i.assignedElements(),u=s.length?s:i.children,l=o(u,!0,r);r.flatten?n.push.apply(n,l):n.push({scopeParent:i,candidates:l})}else{var h=ue.call(i,Ne);h&&r.filter(i)&&(t||!e.includes(i))&&n.push(i);var d=i.shadowRoot||typeof r.getShadowRoot=="function"&&r.getShadowRoot(i),v=!Ie(d,!1)&&(!r.shadowRootFilter||r.shadowRootFilter(i));if(d&&v){var y=o(d===!0?i.children:d.children,!0,r);r.flatten?n.push.apply(n,y):n.push({scopeParent:i,candidates:y})}else a.unshift.apply(a,i.children)}}return n},wt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},se=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||ir(e))&&!wt(e)?0:e.tabIndex},or=function(e,t){var r=se(e);return r<0&&t&&!wt(e)?0:r},sr=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},xt=function(e){return e.tagName==="INPUT"},ur=function(e){return xt(e)&&e.type==="hidden"},lr=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(r){return r.tagName==="SUMMARY"});return t},cr=function(e,t){for(var r=0;rsummary:first-of-type"),i=a?e.parentElement:e;if(ue.call(i,"details:not([open]) *"))return!0;if(!r||r==="full"||r==="legacy-full"){if(typeof n=="function"){for(var s=e;e;){var u=e.parentElement,l=Ce(e);if(u&&!u.shadowRoot&&n(u)===!0)return ot(e);e.assignedSlot?e=e.assignedSlot:!u&&l!==e.ownerDocument?e=l.host:e=u}e=s}if(vr(e))return!e.getClientRects().length;if(r!=="legacy-full")return!0}else if(r==="non-zero-area")return ot(e);return!1},yr=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var r=0;r=0)},gr=function o(e){var t=[],r=[];return e.forEach(function(n,a){var i=!!n.scopeParent,s=i?n.scopeParent:n,u=or(s,i),l=i?o(n.candidates):s;u===0?i?t.push.apply(t,l):t.push(s):r.push({documentOrder:a,tabIndex:u,item:n,isScope:i,content:l})}),r.sort(sr).reduce(function(n,a){return a.isScope?n.push.apply(n,a.content):n.push(a.content),n},[]).concat(t)},br=function(e,t){t=t||{};var r;return t.getShadowRoot?r=bt([e],t.includeContainer,{filter:We.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:mr}):r=gt(e,t.includeContainer,We.bind(null,t)),gr(r)},wr=function(e,t){t=t||{};var r;return t.getShadowRoot?r=bt([e],t.includeContainer,{filter:De.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):r=gt(e,t.includeContainer,De.bind(null,t)),r},le=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,Ne)===!1?!1:We(t,e)},xr=yt.concat("iframe").join(","),_e=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,xr)===!1?!1:De(t,e)};/*! +* focus-trap 7.5.4 +* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE +*/function st(o,e){var t=Object.keys(o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(o);e&&(r=r.filter(function(n){return Object.getOwnPropertyDescriptor(o,n).enumerable})),t.push.apply(t,r)}return t}function ut(o){for(var e=1;e0){var r=e[e.length-1];r!==t&&r.pause()}var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var r=e.indexOf(t);r!==-1&&e.splice(r,1),e.length>0&&e[e.length-1].unpause()}},Ar=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Tr=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},ge=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},Nr=function(e){return ge(e)&&!e.shiftKey},Cr=function(e){return ge(e)&&e.shiftKey},ct=function(e){return setTimeout(e,0)},ft=function(e,t){var r=-1;return e.every(function(n,a){return t(n)?(r=a,!1):!0}),r},ye=function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n1?p-1:0),I=1;I=0)c=r.activeElement;else{var f=i.tabbableGroups[0],p=f&&f.firstTabbableNode;c=p||h("fallbackFocus")}if(!c)throw new Error("Your focus-trap needs to have at least one focusable element");return c},v=function(){if(i.containerGroups=i.containers.map(function(c){var f=br(c,a.tabbableOptions),p=wr(c,a.tabbableOptions),C=f.length>0?f[0]:void 0,I=f.length>0?f[f.length-1]:void 0,M=p.find(function(m){return le(m)}),P=p.slice().reverse().find(function(m){return le(m)}),z=!!f.find(function(m){return se(m)>0});return{container:c,tabbableNodes:f,focusableNodes:p,posTabIndexesFound:z,firstTabbableNode:C,lastTabbableNode:I,firstDomTabbableNode:M,lastDomTabbableNode:P,nextTabbableNode:function(x){var $=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,K=f.indexOf(x);return K<0?$?p.slice(p.indexOf(x)+1).find(function(Q){return le(Q)}):p.slice(0,p.indexOf(x)).reverse().find(function(Q){return le(Q)}):f[K+($?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(c){return c.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!h("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(c){return c.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},y=function w(c){var f=c.activeElement;if(f)return f.shadowRoot&&f.shadowRoot.activeElement!==null?w(f.shadowRoot):f},b=function w(c){if(c!==!1&&c!==y(document)){if(!c||!c.focus){w(d());return}c.focus({preventScroll:!!a.preventScroll}),i.mostRecentlyFocusedNode=c,Ar(c)&&c.select()}},E=function(c){var f=h("setReturnFocus",c);return f||(f===!1?!1:c)},g=function(c){var f=c.target,p=c.event,C=c.isBackward,I=C===void 0?!1:C;f=f||Ae(p),v();var M=null;if(i.tabbableGroups.length>0){var P=l(f,p),z=P>=0?i.containerGroups[P]:void 0;if(P<0)I?M=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:M=i.tabbableGroups[0].firstTabbableNode;else if(I){var m=ft(i.tabbableGroups,function(B){var U=B.firstTabbableNode;return f===U});if(m<0&&(z.container===f||_e(f,a.tabbableOptions)&&!le(f,a.tabbableOptions)&&!z.nextTabbableNode(f,!1))&&(m=P),m>=0){var x=m===0?i.tabbableGroups.length-1:m-1,$=i.tabbableGroups[x];M=se(f)>=0?$.lastTabbableNode:$.lastDomTabbableNode}else ge(p)||(M=z.nextTabbableNode(f,!1))}else{var K=ft(i.tabbableGroups,function(B){var U=B.lastTabbableNode;return f===U});if(K<0&&(z.container===f||_e(f,a.tabbableOptions)&&!le(f,a.tabbableOptions)&&!z.nextTabbableNode(f))&&(K=P),K>=0){var Q=K===i.tabbableGroups.length-1?0:K+1,q=i.tabbableGroups[Q];M=se(f)>=0?q.firstTabbableNode:q.firstDomTabbableNode}else ge(p)||(M=z.nextTabbableNode(f))}}else M=h("fallbackFocus");return M},S=function(c){var f=Ae(c);if(!(l(f,c)>=0)){if(ye(a.clickOutsideDeactivates,c)){s.deactivate({returnFocus:a.returnFocusOnDeactivate});return}ye(a.allowOutsideClick,c)||c.preventDefault()}},T=function(c){var f=Ae(c),p=l(f,c)>=0;if(p||f instanceof Document)p&&(i.mostRecentlyFocusedNode=f);else{c.stopImmediatePropagation();var C,I=!0;if(i.mostRecentlyFocusedNode)if(se(i.mostRecentlyFocusedNode)>0){var M=l(i.mostRecentlyFocusedNode),P=i.containerGroups[M].tabbableNodes;if(P.length>0){var z=P.findIndex(function(m){return m===i.mostRecentlyFocusedNode});z>=0&&(a.isKeyForward(i.recentNavEvent)?z+1=0&&(C=P[z-1],I=!1))}}else i.containerGroups.some(function(m){return m.tabbableNodes.some(function(x){return se(x)>0})})||(I=!1);else I=!1;I&&(C=g({target:i.mostRecentlyFocusedNode,isBackward:a.isKeyBackward(i.recentNavEvent)})),b(C||i.mostRecentlyFocusedNode||d())}i.recentNavEvent=void 0},F=function(c){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=c;var p=g({event:c,isBackward:f});p&&(ge(c)&&c.preventDefault(),b(p))},L=function(c){if(Tr(c)&&ye(a.escapeDeactivates,c)!==!1){c.preventDefault(),s.deactivate();return}(a.isKeyForward(c)||a.isKeyBackward(c))&&F(c,a.isKeyBackward(c))},_=function(c){var f=Ae(c);l(f,c)>=0||ye(a.clickOutsideDeactivates,c)||ye(a.allowOutsideClick,c)||(c.preventDefault(),c.stopImmediatePropagation())},V=function(){if(i.active)return lt.activateTrap(n,s),i.delayInitialFocusTimer=a.delayInitialFocus?ct(function(){b(d())}):b(d()),r.addEventListener("focusin",T,!0),r.addEventListener("mousedown",S,{capture:!0,passive:!1}),r.addEventListener("touchstart",S,{capture:!0,passive:!1}),r.addEventListener("click",_,{capture:!0,passive:!1}),r.addEventListener("keydown",L,{capture:!0,passive:!1}),s},N=function(){if(i.active)return r.removeEventListener("focusin",T,!0),r.removeEventListener("mousedown",S,!0),r.removeEventListener("touchstart",S,!0),r.removeEventListener("click",_,!0),r.removeEventListener("keydown",L,!0),s},R=function(c){var f=c.some(function(p){var C=Array.from(p.removedNodes);return C.some(function(I){return I===i.mostRecentlyFocusedNode})});f&&b(d())},A=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(R):void 0,O=function(){A&&(A.disconnect(),i.active&&!i.paused&&i.containers.map(function(c){A.observe(c,{subtree:!0,childList:!0})}))};return s={get active(){return i.active},get paused(){return i.paused},activate:function(c){if(i.active)return this;var f=u(c,"onActivate"),p=u(c,"onPostActivate"),C=u(c,"checkCanFocusTrap");C||v(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=r.activeElement,f==null||f();var I=function(){C&&v(),V(),O(),p==null||p()};return C?(C(i.containers.concat()).then(I,I),this):(I(),this)},deactivate:function(c){if(!i.active)return this;var f=ut({onDeactivate:a.onDeactivate,onPostDeactivate:a.onPostDeactivate,checkCanReturnFocus:a.checkCanReturnFocus},c);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,N(),i.active=!1,i.paused=!1,O(),lt.deactivateTrap(n,s);var p=u(f,"onDeactivate"),C=u(f,"onPostDeactivate"),I=u(f,"checkCanReturnFocus"),M=u(f,"returnFocus","returnFocusOnDeactivate");p==null||p();var P=function(){ct(function(){M&&b(E(i.nodeFocusedBeforeActivation)),C==null||C()})};return M&&I?(I(E(i.nodeFocusedBeforeActivation)).then(P,P),this):(P(),this)},pause:function(c){if(i.paused||!i.active)return this;var f=u(c,"onPause"),p=u(c,"onPostPause");return i.paused=!0,f==null||f(),N(),O(),p==null||p(),this},unpause:function(c){if(!i.paused||!i.active)return this;var f=u(c,"onUnpause"),p=u(c,"onPostUnpause");return i.paused=!1,f==null||f(),v(),V(),O(),p==null||p(),this},updateContainerElements:function(c){var f=[].concat(c).filter(Boolean);return i.containers=f.map(function(p){return typeof p=="string"?r.querySelector(p):p}),i.active&&v(),O(),this}},s.updateContainerElements(e),s};function kr(o,e={}){let t;const{immediate:r,...n}=e,a=oe(!1),i=oe(!1),s=d=>t&&t.activate(d),u=d=>t&&t.deactivate(d),l=()=>{t&&(t.pause(),i.value=!0)},h=()=>{t&&(t.unpause(),i.value=!1)};return $e(()=>kt(o),d=>{d&&(t=Dr(d,{...n,onActivate(){a.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){a.value=!1,e.onDeactivate&&e.onDeactivate()}}),r&&s())},{flush:"post"}),Ot(()=>u()),{hasFocus:a,isPaused:i,activate:s,deactivate:u,pause:l,unpause:h}}class fe{constructor(e,t=!0,r=[],n=5e3){this.ctx=e,this.iframes=t,this.exclude=r,this.iframesTimeout=n}static matches(e,t){const r=typeof t=="string"?[t]:t,n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(n){let a=!1;return r.every(i=>n.call(e,i)?(a=!0,!1):!0),a}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(r=>{const n=t.filter(a=>a.contains(r)).length>0;t.indexOf(r)===-1&&!n&&t.push(r)}),t}getIframeContents(e,t,r=()=>{}){let n;try{const a=e.contentWindow;if(n=a.document,!a||!n)throw new Error("iframe inaccessible")}catch{r()}n&&t(n)}isIframeBlank(e){const t="about:blank",r=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&r!==t&&r}observeIframeLoad(e,t,r){let n=!1,a=null;const i=()=>{if(!n){n=!0,clearTimeout(a);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,r))}catch{r()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,r){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,r):this.getIframeContents(e,t,r):this.observeIframeLoad(e,t,r)}catch{r()}}waitForIframes(e,t){let r=0;this.forEachIframe(e,()=>!0,n=>{r++,this.waitForIframes(n.querySelector("html"),()=>{--r||t()})},n=>{n||t()})}forEachIframe(e,t,r,n=()=>{}){let a=e.querySelectorAll("iframe"),i=a.length,s=0;a=Array.prototype.slice.call(a);const u=()=>{--i<=0&&n(s)};i||u(),a.forEach(l=>{fe.matches(l,this.exclude)?u():this.onIframeReady(l,h=>{t(l)&&(s++,r(h)),u()},u)})}createIterator(e,t,r){return document.createNodeIterator(e,t,r,!1)}createInstanceOnIframe(e){return new fe(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,r){const n=e.compareDocumentPosition(r),a=Node.DOCUMENT_POSITION_PRECEDING;if(n&a)if(t!==null){const i=t.compareDocumentPosition(r),s=Node.DOCUMENT_POSITION_FOLLOWING;if(i&s)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let r;return t===null?r=e.nextNode():r=e.nextNode()&&e.nextNode(),{prevNode:t,node:r}}checkIframeFilter(e,t,r,n){let a=!1,i=!1;return n.forEach((s,u)=>{s.val===r&&(a=u,i=s.handled)}),this.compareNodeIframe(e,t,r)?(a===!1&&!i?n.push({val:r,handled:!0}):a!==!1&&!i&&(n[a].handled=!0),!0):(a===!1&&n.push({val:r,handled:!1}),!1)}handleOpenIframes(e,t,r,n){e.forEach(a=>{a.handled||this.getIframeContents(a.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,r,n)})})}iterateThroughNodes(e,t,r,n,a){const i=this.createIterator(t,e,n);let s=[],u=[],l,h,d=()=>({prevNode:h,node:l}=this.getIteratorNode(i),l);for(;d();)this.iframes&&this.forEachIframe(t,v=>this.checkIframeFilter(l,h,v,s),v=>{this.createInstanceOnIframe(v).forEachNode(e,y=>u.push(y),n)}),u.push(l);u.forEach(v=>{r(v)}),this.iframes&&this.handleOpenIframes(s,e,r,n),a()}forEachNode(e,t,r,n=()=>{}){const a=this.getContexts();let i=a.length;i||n(),a.forEach(s=>{const u=()=>{this.iterateThroughNodes(e,s,t,r,()=>{--i<=0&&n()})};this.iframes?this.waitForIframes(s,u):u()})}}let Or=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new fe(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const r=this.opt.log;this.opt.debug&&typeof r=="object"&&typeof r[t]=="function"&&r[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,r=this.opt.caseSensitive?"":"i",n=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let a in t)if(t.hasOwnProperty(a)){const i=t[a],s=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(a):this.escapeStr(a),u=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);s!==""&&u!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(s)}|${this.escapeStr(u)})`,`gm${r}`),n+`(${this.processSynomyms(s)}|${this.processSynomyms(u)})`+n))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,r,n)=>{let a=n.charAt(r+1);return/[(|)\\]/.test(a)||a===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const r=this.opt.ignorePunctuation;return Array.isArray(r)&&r.length&&t.push(this.escapeStr(r.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",r=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let n=[];return e.split("").forEach(a=>{r.every(i=>{if(i.indexOf(a)!==-1){if(n.indexOf(i)>-1)return!1;e=e.replace(new RegExp(`[${i}]`,`gm${t}`),`[${i}]`),n.push(i)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let r=this.opt.accuracy,n=typeof r=="string"?r:r.value,a=typeof r=="string"?[]:r.limiters,i="";switch(a.forEach(s=>{i+=`|${this.escapeStr(s)}`}),n){case"partially":default:return`()(${e})`;case"complementary":return i="\\s"+(i||this.escapeStr(t)),`()([^${i}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}getSeparatedKeywords(e){let t=[];return e.forEach(r=>{this.opt.separateWordSearch?r.split(" ").forEach(n=>{n.trim()&&t.indexOf(n)===-1&&t.push(n)}):r.trim()&&t.indexOf(r)===-1&&t.push(r)}),{keywords:t.sort((r,n)=>n.length-r.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let r=0;return e.sort((n,a)=>n.start-a.start).forEach(n=>{let{start:a,end:i,valid:s}=this.callNoMatchOnInvalidRanges(n,r);s&&(n.start=a,n.length=i-a,t.push(n),r=i)}),t}callNoMatchOnInvalidRanges(e,t){let r,n,a=!1;return e&&typeof e.start<"u"?(r=parseInt(e.start,10),n=r+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&n-t>0&&n-r>0?a=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:r,end:n,valid:a}}checkWhitespaceRanges(e,t,r){let n,a=!0,i=r.length,s=t-i,u=parseInt(e.start,10)-s;return u=u>i?i:u,n=u+parseInt(e.length,10),n>i&&(n=i,this.log(`End range automatically set to the max value of ${i}`)),u<0||n-u<0||u>i||n>i?(a=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):r.substring(u,n).replace(/\s+/g,"")===""&&(a=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:u,end:n,valid:a}}getTextNodes(e){let t="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,n=>{r.push({start:t.length,end:(t+=n.textContent).length,node:n})},n=>this.matchesExclude(n.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:r})})}matchesExclude(e){return fe.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,r){const n=this.opt.element?this.opt.element:"mark",a=e.splitText(t),i=a.splitText(r-t);let s=document.createElement(n);return s.setAttribute("data-markjs","true"),this.opt.className&&s.setAttribute("class",this.opt.className),s.textContent=a.textContent,a.parentNode.replaceChild(s,a),i}wrapRangeInMappedTextNode(e,t,r,n,a){e.nodes.every((i,s)=>{const u=e.nodes[s+1];if(typeof u>"u"||u.start>t){if(!n(i.node))return!1;const l=t-i.start,h=(r>i.end?i.end:r)-i.start,d=e.value.substr(0,i.start),v=e.value.substr(h+i.start);if(i.node=this.wrapRangeInTextNode(i.node,l,h),e.value=d+v,e.nodes.forEach((y,b)=>{b>=s&&(e.nodes[b].start>0&&b!==s&&(e.nodes[b].start-=h),e.nodes[b].end-=h)}),r-=h,a(i.node.previousSibling,i.start),r>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,r,n,a){const i=t===0?0:t+1;this.getTextNodes(s=>{s.nodes.forEach(u=>{u=u.node;let l;for(;(l=e.exec(u.textContent))!==null&&l[i]!=="";){if(!r(l[i],u))continue;let h=l.index;if(i!==0)for(let d=1;d{let u;for(;(u=e.exec(s.value))!==null&&u[i]!=="";){let l=u.index;if(i!==0)for(let d=1;dr(u[i],d),(d,v)=>{e.lastIndex=v,n(d)})}a()})}wrapRangeFromIndex(e,t,r,n){this.getTextNodes(a=>{const i=a.value.length;e.forEach((s,u)=>{let{start:l,end:h,valid:d}=this.checkWhitespaceRanges(s,i,a.value);d&&this.wrapRangeInMappedTextNode(a,l,h,v=>t(v,s,a.value.substring(l,h),u),v=>{r(v,s)})}),n()})}unwrapMatches(e){const t=e.parentNode;let r=document.createDocumentFragment();for(;e.firstChild;)r.appendChild(e.removeChild(e.firstChild));t.replaceChild(r,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let r=0,n="wrapMatches";const a=i=>{r++,this.opt.each(i)};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),this[n](e,this.opt.ignoreGroups,(i,s)=>this.opt.filter(s,i,r),a,()=>{r===0&&this.opt.noMatch(e),this.opt.done(r)})}mark(e,t){this.opt=t;let r=0,n="wrapMatches";const{keywords:a,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),s=this.opt.caseSensitive?"":"i",u=l=>{let h=new RegExp(this.createRegExp(l),`gm${s}`),d=0;this.log(`Searching with expression "${h}"`),this[n](h,1,(v,y)=>this.opt.filter(y,l,r,d),v=>{d++,r++,this.opt.each(v)},()=>{d===0&&this.opt.noMatch(l),a[i-1]===l?this.opt.done(r):u(a[a.indexOf(l)+1])})};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),i===0?this.opt.done(r):u(a[0])}markRanges(e,t){this.opt=t;let r=0,n=this.checkRanges(e);n&&n.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(n)),this.wrapRangeFromIndex(n,(a,i,s,u)=>this.opt.filter(a,i,s,u),(a,i)=>{r++,this.opt.each(a,i)},()=>{this.opt.done(r)})):this.opt.done(r)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,r=>{this.unwrapMatches(r)},r=>{const n=fe.matches(r,t),a=this.matchesExclude(r);return!n||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function Rr(o){const e=new Or(o);return this.mark=(t,r)=>(e.mark(t,r),this),this.markRegExp=(t,r)=>(e.markRegExp(t,r),this),this.markRanges=(t,r)=>(e.markRanges(t,r),this),this.unmark=t=>(e.unmark(t),this),this}var W=function(){return W=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&a[a.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!a||l[1]>a[0]&&l[1]=o.length&&(o=void 0),{value:o&&o[r++],done:!o}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function J(o,e){var t=typeof Symbol=="function"&&o[Symbol.iterator];if(!t)return o;var r=t.call(o),n,a=[],i;try{for(;(e===void 0||e-- >0)&&!(n=r.next()).done;)a.push(n.value)}catch(s){i={error:s}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(i)throw i.error}}return a}var Lr="ENTRIES",Ft="KEYS",Et="VALUES",G="",Me=function(){function o(e,t){var r=e._tree,n=Array.from(r.keys());this.set=e,this._type=t,this._path=n.length>0?[{node:r,keys:n}]:[]}return o.prototype.next=function(){var e=this.dive();return this.backtrack(),e},o.prototype.dive=function(){if(this._path.length===0)return{done:!0,value:void 0};var e=ce(this._path),t=e.node,r=e.keys;if(ce(r)===G)return{done:!1,value:this.result()};var n=t.get(ce(r));return this._path.push({node:n,keys:Array.from(n.keys())}),this.dive()},o.prototype.backtrack=function(){if(this._path.length!==0){var e=ce(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}},o.prototype.key=function(){return this.set._prefix+this._path.map(function(e){var t=e.keys;return ce(t)}).filter(function(e){return e!==G}).join("")},o.prototype.value=function(){return ce(this._path).node.get(G)},o.prototype.result=function(){switch(this._type){case Et:return this.value();case Ft:return this.key();default:return[this.key(),this.value()]}},o.prototype[Symbol.iterator]=function(){return this},o}(),ce=function(o){return o[o.length-1]},Pr=function(o,e,t){var r=new Map;if(e===void 0)return r;for(var n=e.length+1,a=n+t,i=new Uint8Array(a*n).fill(t+1),s=0;st)continue e}St(o.get(y),e,t,r,n,E,i,s+y)}}}catch(f){u={error:f}}finally{try{v&&!v.done&&(l=d.return)&&l.call(d)}finally{if(u)throw u.error}}},Le=function(){function o(e,t){e===void 0&&(e=new Map),t===void 0&&(t=""),this._size=void 0,this._tree=e,this._prefix=t}return o.prototype.atPrefix=function(e){var t,r;if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");var n=J(ke(this._tree,e.slice(this._prefix.length)),2),a=n[0],i=n[1];if(a===void 0){var s=J(je(i),2),u=s[0],l=s[1];try{for(var h=D(u.keys()),d=h.next();!d.done;d=h.next()){var v=d.value;if(v!==G&&v.startsWith(l)){var y=new Map;return y.set(v.slice(l.length),u.get(v)),new o(y,e)}}}catch(b){t={error:b}}finally{try{d&&!d.done&&(r=h.return)&&r.call(h)}finally{if(t)throw t.error}}}return new o(a,e)},o.prototype.clear=function(){this._size=void 0,this._tree.clear()},o.prototype.delete=function(e){return this._size=void 0,zr(this._tree,e)},o.prototype.entries=function(){return new Me(this,Lr)},o.prototype.forEach=function(e){var t,r;try{for(var n=D(this),a=n.next();!a.done;a=n.next()){var i=J(a.value,2),s=i[0],u=i[1];e(s,u,this)}}catch(l){t={error:l}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},o.prototype.fuzzyGet=function(e,t){return Pr(this._tree,e,t)},o.prototype.get=function(e){var t=Ke(this._tree,e);return t!==void 0?t.get(G):void 0},o.prototype.has=function(e){var t=Ke(this._tree,e);return t!==void 0&&t.has(G)},o.prototype.keys=function(){return new Me(this,Ft)},o.prototype.set=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=Pe(this._tree,e);return r.set(G,t),this},Object.defineProperty(o.prototype,"size",{get:function(){if(this._size)return this._size;this._size=0;for(var e=this.entries();!e.next().done;)this._size+=1;return this._size},enumerable:!1,configurable:!0}),o.prototype.update=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=Pe(this._tree,e);return r.set(G,t(r.get(G))),this},o.prototype.fetch=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=Pe(this._tree,e),n=r.get(G);return n===void 0&&r.set(G,n=t()),n},o.prototype.values=function(){return new Me(this,Et)},o.prototype[Symbol.iterator]=function(){return this.entries()},o.from=function(e){var t,r,n=new o;try{for(var a=D(e),i=a.next();!i.done;i=a.next()){var s=J(i.value,2),u=s[0],l=s[1];n.set(u,l)}}catch(h){t={error:h}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}return n},o.fromObject=function(e){return o.from(Object.entries(e))},o}(),ke=function(o,e,t){var r,n;if(t===void 0&&(t=[]),e.length===0||o==null)return[o,t];try{for(var a=D(o.keys()),i=a.next();!i.done;i=a.next()){var s=i.value;if(s!==G&&e.startsWith(s))return t.push([o,s]),ke(o.get(s),e.slice(s.length),t)}}catch(u){r={error:u}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return t.push([o,e]),ke(void 0,"",t)},Ke=function(o,e){var t,r;if(e.length===0||o==null)return o;try{for(var n=D(o.keys()),a=n.next();!a.done;a=n.next()){var i=a.value;if(i!==G&&e.startsWith(i))return Ke(o.get(i),e.slice(i.length))}}catch(s){t={error:s}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},Pe=function(o,e){var t,r,n=e.length;e:for(var a=0;o&&a0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new Le,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}},o.prototype.discard=function(e){var t=this,r=this._idToShortId.get(e);if(r==null)throw new Error("MiniSearch: cannot discard document with ID ".concat(e,": it is not in the index"));this._idToShortId.delete(e),this._documentIds.delete(r),this._storedFields.delete(r),(this._fieldLength.get(r)||[]).forEach(function(n,a){t.removeFieldLength(r,a,t._documentCount,n)}),this._fieldLength.delete(r),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()},o.prototype.maybeAutoVacuum=function(){if(this._options.autoVacuum!==!1){var e=this._options.autoVacuum,t=e.minDirtFactor,r=e.minDirtCount,n=e.batchSize,a=e.batchWait;this.conditionalVacuum({batchSize:n,batchWait:a},{minDirtCount:r,minDirtFactor:t})}},o.prototype.discardAll=function(e){var t,r,n=this._options.autoVacuum;try{this._options.autoVacuum=!1;try{for(var a=D(e),i=a.next();!i.done;i=a.next()){var s=i.value;this.discard(s)}}catch(u){t={error:u}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}}finally{this._options.autoVacuum=n}this.maybeAutoVacuum()},o.prototype.replace=function(e){var t=this._options,r=t.idField,n=t.extractField,a=n(e,r);this.discard(a),this.add(e)},o.prototype.vacuum=function(e){return e===void 0&&(e={}),this.conditionalVacuum(e)},o.prototype.conditionalVacuum=function(e,t){var r=this;return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(function(){var n=r._enqueuedVacuumConditions;return r._enqueuedVacuumConditions=Ue,r.performVacuuming(e,n)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)},o.prototype.performVacuuming=function(e,t){return _r(this,void 0,void 0,function(){var r,n,a,i,s,u,l,h,d,v,y,b,E,g,S,T,F,L,_,V,N,R,A,O,w;return Mr(this,function(c){switch(c.label){case 0:if(r=this._dirtCount,!this.vacuumConditionsMet(t))return[3,10];n=e.batchSize||Je.batchSize,a=e.batchWait||Je.batchWait,i=1,c.label=1;case 1:c.trys.push([1,7,8,9]),s=D(this._index),u=s.next(),c.label=2;case 2:if(u.done)return[3,6];l=J(u.value,2),h=l[0],d=l[1];try{for(v=(R=void 0,D(d)),y=v.next();!y.done;y=v.next()){b=J(y.value,2),E=b[0],g=b[1];try{for(S=(O=void 0,D(g)),T=S.next();!T.done;T=S.next())F=J(T.value,1),L=F[0],!this._documentIds.has(L)&&(g.size<=1?d.delete(E):g.delete(L))}catch(f){O={error:f}}finally{try{T&&!T.done&&(w=S.return)&&w.call(S)}finally{if(O)throw O.error}}}}catch(f){R={error:f}}finally{try{y&&!y.done&&(A=v.return)&&A.call(v)}finally{if(R)throw R.error}}return this._index.get(h).size===0&&this._index.delete(h),i%n!==0?[3,4]:[4,new Promise(function(f){return setTimeout(f,a)})];case 3:c.sent(),c.label=4;case 4:i+=1,c.label=5;case 5:return u=s.next(),[3,2];case 6:return[3,9];case 7:return _=c.sent(),V={error:_},[3,9];case 8:try{u&&!u.done&&(N=s.return)&&N.call(s)}finally{if(V)throw V.error}return[7];case 9:this._dirtCount-=r,c.label=10;case 10:return[4,null];case 11:return c.sent(),this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null,[2]}})})},o.prototype.vacuumConditionsMet=function(e){if(e==null)return!0;var t=e.minDirtCount,r=e.minDirtFactor;return t=t||Ve.minDirtCount,r=r||Ve.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=r},Object.defineProperty(o.prototype,"isVacuuming",{get:function(){return this._currentVacuum!=null},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtCount",{get:function(){return this._dirtCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtFactor",{get:function(){return this._dirtCount/(1+this._documentCount+this._dirtCount)},enumerable:!1,configurable:!0}),o.prototype.has=function(e){return this._idToShortId.has(e)},o.prototype.getStoredFields=function(e){var t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)},o.prototype.search=function(e,t){var r,n;t===void 0&&(t={});var a=this.executeQuery(e,t),i=[];try{for(var s=D(a),u=s.next();!u.done;u=s.next()){var l=J(u.value,2),h=l[0],d=l[1],v=d.score,y=d.terms,b=d.match,E=y.length||1,g={id:this._documentIds.get(h),score:v*E,terms:Object.keys(b),queryTerms:y,match:b};Object.assign(g,this._storedFields.get(h)),(t.filter==null||t.filter(g))&&i.push(g)}}catch(S){r={error:S}}finally{try{u&&!u.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}return e===o.wildcard&&t.boostDocument==null&&this._options.searchOptions.boostDocument==null||i.sort(vt),i},o.prototype.autoSuggest=function(e,t){var r,n,a,i;t===void 0&&(t={}),t=W(W({},this._options.autoSuggestOptions),t);var s=new Map;try{for(var u=D(this.search(e,t)),l=u.next();!l.done;l=u.next()){var h=l.value,d=h.score,v=h.terms,y=v.join(" "),b=s.get(y);b!=null?(b.score+=d,b.count+=1):s.set(y,{score:d,terms:v,count:1})}}catch(_){r={error:_}}finally{try{l&&!l.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}var E=[];try{for(var g=D(s),S=g.next();!S.done;S=g.next()){var T=J(S.value,2),b=T[0],F=T[1],d=F.score,v=F.terms,L=F.count;E.push({suggestion:b,terms:v,score:d/L})}}catch(_){a={error:_}}finally{try{S&&!S.done&&(i=g.return)&&i.call(g)}finally{if(a)throw a.error}}return E.sort(vt),E},Object.defineProperty(o.prototype,"documentCount",{get:function(){return this._documentCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"termCount",{get:function(){return this._index.size},enumerable:!1,configurable:!0}),o.loadJSON=function(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)},o.getDefault=function(e){if(Be.hasOwnProperty(e))return ze(Be,e);throw new Error('MiniSearch: unknown option "'.concat(e,'"'))},o.loadJS=function(e,t){var r,n,a,i,s,u,l=e.index,h=e.documentCount,d=e.nextId,v=e.documentIds,y=e.fieldIds,b=e.fieldLength,E=e.averageFieldLength,g=e.storedFields,S=e.dirtCount,T=e.serializationVersion;if(T!==1&&T!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");var F=new o(t);F._documentCount=h,F._nextId=d,F._documentIds=Te(v),F._idToShortId=new Map,F._fieldIds=y,F._fieldLength=Te(b),F._avgFieldLength=E,F._storedFields=Te(g),F._dirtCount=S||0,F._index=new Le;try{for(var L=D(F._documentIds),_=L.next();!_.done;_=L.next()){var V=J(_.value,2),N=V[0],R=V[1];F._idToShortId.set(R,N)}}catch(z){r={error:z}}finally{try{_&&!_.done&&(n=L.return)&&n.call(L)}finally{if(r)throw r.error}}try{for(var A=D(l),O=A.next();!O.done;O=A.next()){var w=J(O.value,2),c=w[0],f=w[1],p=new Map;try{for(var C=(s=void 0,D(Object.keys(f))),I=C.next();!I.done;I=C.next()){var M=I.value,P=f[M];T===1&&(P=P.ds),p.set(parseInt(M,10),Te(P))}}catch(z){s={error:z}}finally{try{I&&!I.done&&(u=C.return)&&u.call(C)}finally{if(s)throw s.error}}F._index.set(c,p)}}catch(z){a={error:z}}finally{try{O&&!O.done&&(i=A.return)&&i.call(A)}finally{if(a)throw a.error}}return F},o.prototype.executeQuery=function(e,t){var r=this;if(t===void 0&&(t={}),e===o.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){var n=W(W(W({},t),e),{queries:void 0}),a=e.queries.map(function(g){return r.executeQuery(g,n)});return this.combineResults(a,n.combineWith)}var i=this._options,s=i.tokenize,u=i.processTerm,l=i.searchOptions,h=W(W({tokenize:s,processTerm:u},l),t),d=h.tokenize,v=h.processTerm,y=d(e).flatMap(function(g){return v(g)}).filter(function(g){return!!g}),b=y.map(Jr(h)),E=b.map(function(g){return r.executeQuerySpec(g,h)});return this.combineResults(E,h.combineWith)},o.prototype.executeQuerySpec=function(e,t){var r,n,a,i,s=W(W({},this._options.searchOptions),t),u=(s.fields||this._options.fields).reduce(function(M,P){var z;return W(W({},M),(z={},z[P]=ze(s.boost,P)||1,z))},{}),l=s.boostDocument,h=s.weights,d=s.maxFuzzy,v=s.bm25,y=W(W({},ht.weights),h),b=y.fuzzy,E=y.prefix,g=this._index.get(e.term),S=this.termResults(e.term,e.term,1,g,u,l,v),T,F;if(e.prefix&&(T=this._index.atPrefix(e.term)),e.fuzzy){var L=e.fuzzy===!0?.2:e.fuzzy,_=L<1?Math.min(d,Math.round(e.term.length*L)):L;_&&(F=this._index.fuzzyGet(e.term,_))}if(T)try{for(var V=D(T),N=V.next();!N.done;N=V.next()){var R=J(N.value,2),A=R[0],O=R[1],w=A.length-e.term.length;if(w){F==null||F.delete(A);var c=E*A.length/(A.length+.3*w);this.termResults(e.term,A,c,O,u,l,v,S)}}}catch(M){r={error:M}}finally{try{N&&!N.done&&(n=V.return)&&n.call(V)}finally{if(r)throw r.error}}if(F)try{for(var f=D(F.keys()),p=f.next();!p.done;p=f.next()){var A=p.value,C=J(F.get(A),2),I=C[0],w=C[1];if(w){var c=b*A.length/(A.length+w);this.termResults(e.term,A,c,I,u,l,v,S)}}}catch(M){a={error:M}}finally{try{p&&!p.done&&(i=f.return)&&i.call(f)}finally{if(a)throw a.error}}return S},o.prototype.executeWildcardQuery=function(e){var t,r,n=new Map,a=W(W({},this._options.searchOptions),e);try{for(var i=D(this._documentIds),s=i.next();!s.done;s=i.next()){var u=J(s.value,2),l=u[0],h=u[1],d=a.boostDocument?a.boostDocument(h,"",this._storedFields.get(l)):1;n.set(l,{score:d,terms:[],match:{}})}}catch(v){t={error:v}}finally{try{s&&!s.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}return n},o.prototype.combineResults=function(e,t){if(t===void 0&&(t=Ge),e.length===0)return new Map;var r=t.toLowerCase();return e.reduce($r[r])||new Map},o.prototype.toJSON=function(){var e,t,r,n,a=[];try{for(var i=D(this._index),s=i.next();!s.done;s=i.next()){var u=J(s.value,2),l=u[0],h=u[1],d={};try{for(var v=(r=void 0,D(h)),y=v.next();!y.done;y=v.next()){var b=J(y.value,2),E=b[0],g=b[1];d[E]=Object.fromEntries(g)}}catch(S){r={error:S}}finally{try{y&&!y.done&&(n=v.return)&&n.call(v)}finally{if(r)throw r.error}}a.push([l,d])}}catch(S){e={error:S}}finally{try{s&&!s.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:a,serializationVersion:2}},o.prototype.termResults=function(e,t,r,n,a,i,s,u){var l,h,d,v,y;if(u===void 0&&(u=new Map),n==null)return u;try{for(var b=D(Object.keys(a)),E=b.next();!E.done;E=b.next()){var g=E.value,S=a[g],T=this._fieldIds[g],F=n.get(T);if(F!=null){var L=F.size,_=this._avgFieldLength[T];try{for(var V=(d=void 0,D(F.keys())),N=V.next();!N.done;N=V.next()){var R=N.value;if(!this._documentIds.has(R)){this.removeTerm(T,R,t),L-=1;continue}var A=i?i(this._documentIds.get(R),t,this._storedFields.get(R)):1;if(A){var O=F.get(R),w=this._fieldLength.get(R)[T],c=Kr(O,L,this._documentCount,w,_,s),f=r*S*A*c,p=u.get(R);if(p){p.score+=f,jr(p.terms,e);var C=ze(p.match,t);C?C.push(g):p.match[t]=[g]}else u.set(R,{score:f,terms:[e],match:(y={},y[t]=[g],y)})}}}catch(I){d={error:I}}finally{try{N&&!N.done&&(v=V.return)&&v.call(V)}finally{if(d)throw d.error}}}}}catch(I){l={error:I}}finally{try{E&&!E.done&&(h=b.return)&&h.call(b)}finally{if(l)throw l.error}}return u},o.prototype.addTerm=function(e,t,r){var n=this._index.fetch(r,pt),a=n.get(e);if(a==null)a=new Map,a.set(t,1),n.set(e,a);else{var i=a.get(t);a.set(t,(i||0)+1)}},o.prototype.removeTerm=function(e,t,r){if(!this._index.has(r)){this.warnDocumentChanged(t,e,r);return}var n=this._index.fetch(r,pt),a=n.get(e);a==null||a.get(t)==null?this.warnDocumentChanged(t,e,r):a.get(t)<=1?a.size<=1?n.delete(e):a.delete(t):a.set(t,a.get(t)-1),this._index.get(r).size===0&&this._index.delete(r)},o.prototype.warnDocumentChanged=function(e,t,r){var n,a;try{for(var i=D(Object.keys(this._fieldIds)),s=i.next();!s.done;s=i.next()){var u=s.value;if(this._fieldIds[u]===t){this._options.logger("warn","MiniSearch: document with ID ".concat(this._documentIds.get(e),' has changed before removal: term "').concat(r,'" was not present in field "').concat(u,'". Removing a document after it has changed can corrupt the index!'),"version_conflict");return}}}catch(l){n={error:l}}finally{try{s&&!s.done&&(a=i.return)&&a.call(i)}finally{if(n)throw n.error}}},o.prototype.addDocumentId=function(e){var t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t},o.prototype.addFields=function(e){for(var t=0;t(qt("data-v-639d7ab9"),o=o(),Ht(),o),qr=["aria-owns"],Hr={class:"shell"},Yr=["title"],Zr=Y(()=>k("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)),Xr=[Zr],ea={class:"search-actions before"},ta=["title"],ra=Y(()=>k("span",{class:"vpi-arrow-left local-search-icon"},null,-1)),aa=[ra],na=["placeholder"],ia={class:"search-actions"},oa=["title"],sa=Y(()=>k("span",{class:"vpi-layout-list local-search-icon"},null,-1)),ua=[sa],la=["disabled","title"],ca=Y(()=>k("span",{class:"vpi-delete local-search-icon"},null,-1)),fa=[ca],ha=["id","role","aria-labelledby"],da=["aria-selected"],va=["href","aria-label","onMouseenter","onFocusin"],pa={class:"titles"},ya=Y(()=>k("span",{class:"title-icon"},"#",-1)),ma=["innerHTML"],ga=Y(()=>k("span",{class:"vpi-chevron-right local-search-icon"},null,-1)),ba={class:"title main"},wa=["innerHTML"],xa={key:0,class:"excerpt-wrapper"},Fa={key:0,class:"excerpt",inert:""},Ea=["innerHTML"],Sa=Y(()=>k("div",{class:"excerpt-gradient-bottom"},null,-1)),Aa=Y(()=>k("div",{class:"excerpt-gradient-top"},null,-1)),Ta={key:0,class:"no-results"},Na={class:"search-keyboard-shortcuts"},Ca=["aria-label"],Ia=Y(()=>k("span",{class:"vpi-arrow-up navigate-icon"},null,-1)),Da=[Ia],ka=["aria-label"],Oa=Y(()=>k("span",{class:"vpi-arrow-down navigate-icon"},null,-1)),Ra=[Oa],_a=["aria-label"],Ma=Y(()=>k("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)),La=[Ma],Pa=["aria-label"],za=Rt({__name:"VPLocalSearchBox",emits:["close"],setup(o,{emit:e}){var P,z;const t=e,r=xe(),n=xe(),a=xe(nr),i=rr(),{activate:s}=kr(r,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:u,theme:l}=i,h=tt(async()=>{var m,x,$,K,Q,q,B,U,Z;return it(Vr.loadJSON(($=await((x=(m=a.value)[u.value])==null?void 0:x.call(m)))==null?void 0:$.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((K=l.value.search)==null?void 0:K.provider)==="local"&&((q=(Q=l.value.search.options)==null?void 0:Q.miniSearch)==null?void 0:q.searchOptions)},...((B=l.value.search)==null?void 0:B.provider)==="local"&&((Z=(U=l.value.search.options)==null?void 0:U.miniSearch)==null?void 0:Z.options)}))}),v=Fe(()=>{var m,x;return((m=l.value.search)==null?void 0:m.provider)==="local"&&((x=l.value.search.options)==null?void 0:x.disableQueryPersistence)===!0}).value?oe(""):_t("vitepress:local-search-filter",""),y=Mt("vitepress:local-search-detailed-list",((P=l.value.search)==null?void 0:P.provider)==="local"&&((z=l.value.search.options)==null?void 0:z.detailedView)===!0),b=Fe(()=>{var m,x,$;return((m=l.value.search)==null?void 0:m.provider)==="local"&&(((x=l.value.search.options)==null?void 0:x.disableDetailedView)===!0||(($=l.value.search.options)==null?void 0:$.detailedView)===!1)}),E=Fe(()=>{var x,$,K,Q,q,B,U;const m=((x=l.value.search)==null?void 0:x.options)??l.value.algolia;return((q=(Q=(K=($=m==null?void 0:m.locales)==null?void 0:$[u.value])==null?void 0:K.translations)==null?void 0:Q.button)==null?void 0:q.buttonText)||((U=(B=m==null?void 0:m.translations)==null?void 0:B.button)==null?void 0:U.buttonText)||"Search"});Lt(()=>{b.value&&(y.value=!1)});const g=xe([]),S=oe(!1);$e(v,()=>{S.value=!1});const T=tt(async()=>{if(n.value)return it(new Rr(n.value))},null),F=new Qr(16);Pt(()=>[h.value,v.value,y.value],async([m,x,$],K,Q)=>{var be,Qe,qe,He;(K==null?void 0:K[0])!==m&&F.clear();let q=!1;if(Q(()=>{q=!0}),!m)return;g.value=m.search(x).slice(0,16),S.value=!0;const B=$?await Promise.all(g.value.map(H=>L(H.id))):[];if(q)return;for(const{id:H,mod:ae}of B){const ne=H.slice(0,H.indexOf("#"));let te=F.get(ne);if(te)continue;te=new Map,F.set(ne,te);const X=ae.default??ae;if(X!=null&&X.render||X!=null&&X.setup){const ie=Yt(X);ie.config.warnHandler=()=>{},ie.provide(Zt,i),Object.defineProperties(ie.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const Ye=document.createElement("div");ie.mount(Ye),Ye.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(he=>{var et;const we=(et=he.querySelector("a"))==null?void 0:et.getAttribute("href"),Ze=(we==null?void 0:we.startsWith("#"))&&we.slice(1);if(!Ze)return;let Xe="";for(;(he=he.nextElementSibling)&&!/^h[1-6]$/i.test(he.tagName);)Xe+=he.outerHTML;te.set(Ze,Xe)}),ie.unmount()}if(q)return}const U=new Set;if(g.value=g.value.map(H=>{const[ae,ne]=H.id.split("#"),te=F.get(ae),X=(te==null?void 0:te.get(ne))??"";for(const ie in H.match)U.add(ie);return{...H,text:X}}),await de(),q)return;await new Promise(H=>{var ae;(ae=T.value)==null||ae.unmark({done:()=>{var ne;(ne=T.value)==null||ne.markRegExp(M(U),{done:H})}})});const Z=((be=r.value)==null?void 0:be.querySelectorAll(".result .excerpt"))??[];for(const H of Z)(Qe=H.querySelector('mark[data-markjs="true"]'))==null||Qe.scrollIntoView({block:"center"});(He=(qe=n.value)==null?void 0:qe.firstElementChild)==null||He.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function L(m){const x=Xt(m.slice(0,m.indexOf("#")));try{if(!x)throw new Error(`Cannot find file for id: ${m}`);return{id:m,mod:await import(x)}}catch($){return console.error($),{id:m,mod:{}}}}const _=oe(),V=Fe(()=>{var m;return((m=v.value)==null?void 0:m.length)<=0});function N(m=!0){var x,$;(x=_.value)==null||x.focus(),m&&(($=_.value)==null||$.select())}Re(()=>{N()});function R(m){m.pointerType==="mouse"&&N()}const A=oe(-1),O=oe(!1);$e(g,m=>{A.value=m.length?0:-1,w()});function w(){de(()=>{const m=document.querySelector(".result.selected");m==null||m.scrollIntoView({block:"nearest"})})}Ee("ArrowUp",m=>{m.preventDefault(),A.value--,A.value<0&&(A.value=g.value.length-1),O.value=!0,w()}),Ee("ArrowDown",m=>{m.preventDefault(),A.value++,A.value>=g.value.length&&(A.value=0),O.value=!0,w()});const c=zt();Ee("Enter",m=>{if(m.isComposing||m.target instanceof HTMLButtonElement&&m.target.type!=="submit")return;const x=g.value[A.value];if(m.target instanceof HTMLInputElement&&!x){m.preventDefault();return}x&&(c.go(x.id),t("close"))}),Ee("Escape",()=>{t("close")});const p=ar({modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});Re(()=>{window.history.pushState(null,"",null)}),Bt("popstate",m=>{m.preventDefault(),t("close")});const C=Vt($t?document.body:null);Re(()=>{de(()=>{C.value=!0,de().then(()=>s())})}),Wt(()=>{C.value=!1});function I(){v.value="",de().then(()=>N(!1))}function M(m){return new RegExp([...m].sort((x,$)=>$.length-x.length).map(x=>`(${er(x)})`).join("|"),"gi")}return(m,x)=>{var $,K,Q,q;return ee(),Kt(Qt,{to:"body"},[k("div",{ref_key:"el",ref:r,role:"button","aria-owns":($=g.value)!=null&&$.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[k("div",{class:"backdrop",onClick:x[0]||(x[0]=B=>m.$emit("close"))}),k("div",Hr,[k("form",{class:"search-bar",onPointerup:x[4]||(x[4]=B=>R(B)),onSubmit:x[5]||(x[5]=Jt(()=>{},["prevent"]))},[k("label",{title:E.value,id:"localsearch-label",for:"localsearch-input"},Xr,8,Yr),k("div",ea,[k("button",{class:"back-button",title:j(p)("modal.backButtonTitle"),onClick:x[1]||(x[1]=B=>m.$emit("close"))},aa,8,ta)]),Ut(k("input",{ref_key:"searchInput",ref:_,"onUpdate:modelValue":x[2]||(x[2]=B=>Gt(v)?v.value=B:null),placeholder:E.value,id:"localsearch-input","aria-labelledby":"localsearch-label",class:"search-input"},null,8,na),[[jt,j(v)]]),k("div",ia,[b.value?Se("",!0):(ee(),re("button",{key:0,class:rt(["toggle-layout-button",{"detailed-list":j(y)}]),type:"button",title:j(p)("modal.displayDetails"),onClick:x[3]||(x[3]=B=>A.value>-1&&(y.value=!j(y)))},ua,10,oa)),k("button",{class:"clear-button",type:"reset",disabled:V.value,title:j(p)("modal.resetButtonTitle"),onClick:I},fa,8,la)])],32),k("ul",{ref_key:"resultsEl",ref:n,id:(K=g.value)!=null&&K.length?"localsearch-list":void 0,role:(Q=g.value)!=null&&Q.length?"listbox":void 0,"aria-labelledby":(q=g.value)!=null&&q.length?"localsearch-label":void 0,class:"results",onMousemove:x[7]||(x[7]=B=>O.value=!1)},[(ee(!0),re(nt,null,at(g.value,(B,U)=>(ee(),re("li",{key:B.id,role:"option","aria-selected":A.value===U?"true":"false"},[k("a",{href:B.id,class:rt(["result",{selected:A.value===U}]),"aria-label":[...B.titles,B.title].join(" > "),onMouseenter:Z=>!O.value&&(A.value=U),onFocusin:Z=>A.value=U,onClick:x[6]||(x[6]=Z=>m.$emit("close"))},[k("div",null,[k("div",pa,[ya,(ee(!0),re(nt,null,at(B.titles,(Z,be)=>(ee(),re("span",{key:be,class:"title"},[k("span",{class:"text",innerHTML:Z},null,8,ma),ga]))),128)),k("span",ba,[k("span",{class:"text",innerHTML:B.title},null,8,wa)])]),j(y)?(ee(),re("div",xa,[B.text?(ee(),re("div",Fa,[k("div",{class:"vp-doc",innerHTML:B.text},null,8,Ea)])):Se("",!0),Sa,Aa])):Se("",!0)])],42,va)],8,da))),128)),j(v)&&!g.value.length&&S.value?(ee(),re("li",Ta,[ve(pe(j(p)("modal.noResultsText"))+' "',1),k("strong",null,pe(j(v)),1),ve('" ')])):Se("",!0)],40,ha),k("div",Na,[k("span",null,[k("kbd",{"aria-label":j(p)("modal.footer.navigateUpKeyAriaLabel")},Da,8,Ca),k("kbd",{"aria-label":j(p)("modal.footer.navigateDownKeyAriaLabel")},Ra,8,ka),ve(" "+pe(j(p)("modal.footer.navigateText")),1)]),k("span",null,[k("kbd",{"aria-label":j(p)("modal.footer.selectKeyAriaLabel")},La,8,_a),ve(" "+pe(j(p)("modal.footer.selectText")),1)]),k("span",null,[k("kbd",{"aria-label":j(p)("modal.footer.closeKeyAriaLabel")},"esc",8,Pa),ve(" "+pe(j(p)("modal.footer.closeText")),1)])])])],8,qr)])}}}),Ja=tr(za,[["__scopeId","data-v-639d7ab9"]]);export{Ja as default}; diff --git a/docs/.vitepress/dist/assets/chunks/framework.OdeEVNy0.js b/docs/.vitepress/dist/assets/chunks/framework.OdeEVNy0.js new file mode 100644 index 000000000..61a106a81 --- /dev/null +++ b/docs/.vitepress/dist/assets/chunks/framework.OdeEVNy0.js @@ -0,0 +1,17 @@ +/** +* @vue/shared v3.4.29 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function wr(e,t){const n=new Set(e.split(","));return r=>n.has(r)}const te={},mt=[],xe=()=>{},Li=()=>!1,kt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Er=e=>e.startsWith("onUpdate:"),le=Object.assign,Cr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ii=Object.prototype.hasOwnProperty,Y=(e,t)=>Ii.call(e,t),k=Array.isArray,yt=e=>Sn(e)==="[object Map]",Ys=e=>Sn(e)==="[object Set]",K=e=>typeof e=="function",oe=e=>typeof e=="string",ut=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",Js=e=>(Z(e)||K(e))&&K(e.then)&&K(e.catch),Qs=Object.prototype.toString,Sn=e=>Qs.call(e),Mi=e=>Sn(e).slice(8,-1),Zs=e=>Sn(e)==="[object Object]",xr=e=>oe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,_t=wr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Tn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Pi=/-(\w)/g,$e=Tn(e=>e.replace(Pi,(t,n)=>n?n.toUpperCase():"")),Ni=/\B([A-Z])/g,ft=Tn(e=>e.replace(Ni,"-$1").toLowerCase()),An=Tn(e=>e.charAt(0).toUpperCase()+e.slice(1)),un=Tn(e=>e?`on${An(e)}`:""),Je=(e,t)=>!Object.is(e,t),fn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},cr=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Fi=e=>{const t=oe(e)?Number(e):NaN;return isNaN(t)?e:t};let Jr;const to=()=>Jr||(Jr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Sr(e){if(k(e)){const t={};for(let n=0;n{if(n){const r=n.split(Hi);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Tr(e){let t="";if(oe(e))t=e;else if(k(e))for(let n=0;noe(e)?e:e==null?"":k(e)||Z(e)&&(e.toString===Qs||!K(e.toString))?JSON.stringify(e,ro,2):String(e),ro=(e,t)=>t&&t.__v_isRef?ro(e,t.value):yt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],o)=>(n[kn(r,o)+" =>"]=s,n),{})}:Ys(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>kn(n))}:ut(t)?kn(t):Z(t)&&!k(t)&&!Zs(t)?String(t):t,kn=(e,t="")=>{var n;return ut(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.4.29 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let we;class Bi{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=we,!t&&we&&(this.index=(we.scopes||(we.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=we;try{return we=this,t()}finally{we=n}}}on(){we=this}off(){we=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n=5)break}}this._dirtyLevel===1&&(this._dirtyLevel=0),et()}return this._dirtyLevel>=5}set dirty(t){this._dirtyLevel=t?5:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Xe,n=lt;try{return Xe=!0,lt=this,this._runnings++,Qr(this),this.fn()}finally{Zr(this),this._runnings--,lt=n,Xe=t}}stop(){this.active&&(Qr(this),Zr(this),this.onStop&&this.onStop(),this.active=!1)}}function Wi(e){return e.value}function Qr(e){e._trackId++,e._depsLength=0}function Zr(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t0){r._dirtyLevel=2;continue}let s;r._dirtyLevel{const n=new Map;return n.cleanup=e,n.computed=t,n},mn=new WeakMap,ct=Symbol(""),fr=Symbol("");function ve(e,t,n){if(Xe&<){let r=mn.get(e);r||mn.set(e,r=new Map);let s=r.get(n);s||r.set(n,s=ao(()=>r.delete(n))),lo(lt,s)}}function De(e,t,n,r,s,o){const i=mn.get(e);if(!i)return;let l=[];if(t==="clear")l=[...i.values()];else if(n==="length"&&k(e)){const c=Number(r);i.forEach((a,f)=>{(f==="length"||!ut(f)&&f>=c)&&l.push(a)})}else switch(n!==void 0&&l.push(i.get(n)),t){case"add":k(e)?xr(n)&&l.push(i.get("length")):(l.push(i.get(ct)),yt(e)&&l.push(i.get(fr)));break;case"delete":k(e)||(l.push(i.get(ct)),yt(e)&&l.push(i.get(fr)));break;case"set":yt(e)&&l.push(i.get(ct));break}Rr();for(const c of l)c&&co(c,5);Or()}function qi(e,t){const n=mn.get(e);return n&&n.get(t)}const Gi=wr("__proto__,__v_isRef,__isVue"),uo=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ut)),es=zi();function zi(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=J(this);for(let o=0,i=this.length;o{e[t]=function(...n){Ze(),Rr();const r=J(this)[t].apply(this,n);return Or(),et(),r}}),e}function Xi(e){ut(e)||(e=String(e));const t=J(this);return ve(t,"has",e),t.hasOwnProperty(e)}class fo{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){const s=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return o;if(n==="__v_raw")return r===(s?o?cl:mo:o?go:po).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const i=k(t);if(!s){if(i&&Y(es,n))return Reflect.get(es,n,r);if(n==="hasOwnProperty")return Xi}const l=Reflect.get(t,n,r);return(ut(n)?uo.has(n):Gi(n))||(s||ve(t,"get",n),o)?l:de(l)?i&&xr(n)?l:l.value:Z(l)?s?Ln(l):On(l):l}}class ho extends fo{constructor(t=!1){super(!1,t)}set(t,n,r,s){let o=t[n];if(!this._isShallow){const c=$t(o);if(!yn(r)&&!$t(r)&&(o=J(o),r=J(r)),!k(t)&&de(o)&&!de(r))return c?!1:(o.value=r,!0)}const i=k(t)&&xr(n)?Number(n)e,Rn=e=>Reflect.getPrototypeOf(e);function Yt(e,t,n=!1,r=!1){e=e.__v_raw;const s=J(e),o=J(t);n||(Je(t,o)&&ve(s,"get",t),ve(s,"get",o));const{has:i}=Rn(s),l=r?Lr:n?Pr:Ht;if(i.call(s,t))return l(e.get(t));if(i.call(s,o))return l(e.get(o));e!==s&&e.get(t)}function Jt(e,t=!1){const n=this.__v_raw,r=J(n),s=J(e);return t||(Je(e,s)&&ve(r,"has",e),ve(r,"has",s)),e===s?n.has(e):n.has(e)||n.has(s)}function Qt(e,t=!1){return e=e.__v_raw,!t&&ve(J(e),"iterate",ct),Reflect.get(e,"size",e)}function ts(e){e=J(e);const t=J(this);return Rn(t).has.call(t,e)||(t.add(e),De(t,"add",e,e)),this}function ns(e,t){t=J(t);const n=J(this),{has:r,get:s}=Rn(n);let o=r.call(n,e);o||(e=J(e),o=r.call(n,e));const i=s.call(n,e);return n.set(e,t),o?Je(t,i)&&De(n,"set",e,t):De(n,"add",e,t),this}function rs(e){const t=J(this),{has:n,get:r}=Rn(t);let s=n.call(t,e);s||(e=J(e),s=n.call(t,e)),r&&r.call(t,e);const o=t.delete(e);return s&&De(t,"delete",e,void 0),o}function ss(){const e=J(this),t=e.size!==0,n=e.clear();return t&&De(e,"clear",void 0,void 0),n}function Zt(e,t){return function(r,s){const o=this,i=o.__v_raw,l=J(i),c=t?Lr:e?Pr:Ht;return!e&&ve(l,"iterate",ct),i.forEach((a,f)=>r.call(s,c(a),c(f),o))}}function en(e,t,n){return function(...r){const s=this.__v_raw,o=J(s),i=yt(o),l=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,a=s[e](...r),f=n?Lr:t?Pr:Ht;return!t&&ve(o,"iterate",c?fr:ct),{next(){const{value:h,done:m}=a.next();return m?{value:h,done:m}:{value:l?[f(h[0]),f(h[1])]:f(h),done:m}},[Symbol.iterator](){return this}}}}function Be(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function el(){const e={get(o){return Yt(this,o)},get size(){return Qt(this)},has:Jt,add:ts,set:ns,delete:rs,clear:ss,forEach:Zt(!1,!1)},t={get(o){return Yt(this,o,!1,!0)},get size(){return Qt(this)},has:Jt,add:ts,set:ns,delete:rs,clear:ss,forEach:Zt(!1,!0)},n={get(o){return Yt(this,o,!0)},get size(){return Qt(this,!0)},has(o){return Jt.call(this,o,!0)},add:Be("add"),set:Be("set"),delete:Be("delete"),clear:Be("clear"),forEach:Zt(!0,!1)},r={get(o){return Yt(this,o,!0,!0)},get size(){return Qt(this,!0)},has(o){return Jt.call(this,o,!0)},add:Be("add"),set:Be("set"),delete:Be("delete"),clear:Be("clear"),forEach:Zt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=en(o,!1,!1),n[o]=en(o,!0,!1),t[o]=en(o,!1,!0),r[o]=en(o,!0,!0)}),[e,n,t,r]}const[tl,nl,rl,sl]=el();function Ir(e,t){const n=t?e?sl:rl:e?nl:tl;return(r,s,o)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(Y(n,s)&&s in r?n:r,s,o)}const ol={get:Ir(!1,!1)},il={get:Ir(!1,!0)},ll={get:Ir(!0,!1)};const po=new WeakMap,go=new WeakMap,mo=new WeakMap,cl=new WeakMap;function al(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function ul(e){return e.__v_skip||!Object.isExtensible(e)?0:al(Mi(e))}function On(e){return $t(e)?e:Mr(e,!1,Ji,ol,po)}function fl(e){return Mr(e,!1,Zi,il,go)}function Ln(e){return Mr(e,!0,Qi,ll,mo)}function Mr(e,t,n,r,s){if(!Z(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=s.get(e);if(o)return o;const i=ul(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return s.set(e,l),l}function Rt(e){return $t(e)?Rt(e.__v_raw):!!(e&&e.__v_isReactive)}function $t(e){return!!(e&&e.__v_isReadonly)}function yn(e){return!!(e&&e.__v_isShallow)}function yo(e){return e?!!e.__v_raw:!1}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function dn(e){return Object.isExtensible(e)&&eo(e,"__v_skip",!0),e}const Ht=e=>Z(e)?On(e):e,Pr=e=>Z(e)?Ln(e):e;class _o{constructor(t,n,r,s){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new Ar(()=>t(this._value),()=>Ot(this,this.effect._dirtyLevel===3?3:4)),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=r}get value(){const t=J(this);return(!t._cacheable||t.effect.dirty)&&Je(t._value,t._value=t.effect.run())&&Ot(t,5),Nr(t),t.effect._dirtyLevel>=2&&Ot(t,3),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function dl(e,t,n=!1){let r,s;const o=K(e);return o?(r=e,s=xe):(r=e.get,s=e.set),new _o(r,s,o||!s,n)}function Nr(e){var t;Xe&<&&(e=J(e),lo(lt,(t=e.dep)!=null?t:e.dep=ao(()=>e.dep=void 0,e instanceof _o?e:void 0)))}function Ot(e,t=5,n,r){e=J(e);const s=e.dep;s&&co(s,t)}function de(e){return!!(e&&e.__v_isRef===!0)}function se(e){return vo(e,!1)}function Fr(e){return vo(e,!0)}function vo(e,t){return de(e)?e:new hl(e,t)}class hl{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:J(t),this._value=n?t:Ht(t)}get value(){return Nr(this),this._value}set value(t){const n=this.__v_isShallow||yn(t)||$t(t);t=n?t:J(t),Je(t,this._rawValue)&&(this._rawValue,this._rawValue=t,this._value=n?t:Ht(t),Ot(this,5))}}function bo(e){return de(e)?e.value:e}const pl={get:(e,t,n)=>bo(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return de(s)&&!de(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function wo(e){return Rt(e)?e:new Proxy(e,pl)}class gl{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>Nr(this),()=>Ot(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function ml(e){return new gl(e)}class yl{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return qi(J(this._object),this._key)}}class _l{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function vl(e,t,n){return de(e)?e:K(e)?new _l(e):Z(e)&&arguments.length>1?bl(e,t,n):se(e)}function bl(e,t,n){const r=e[t];return de(r)?r:new yl(e,t,n)}/** +* @vue/runtime-core v3.4.29 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Ye(e,t,n,r){try{return r?e(...r):e()}catch(s){Kt(s,t,n)}}function Se(e,t,n,r){if(K(e)){const s=Ye(e,t,n,r);return s&&Js(s)&&s.catch(o=>{Kt(o,t,n)}),s}if(k(e)){const s=[];for(let o=0;o>>1,s=pe[r],o=Vt(s);oPe&&pe.splice(t,1)}function xl(e){k(e)?vt.push(...e):(!We||!We.includes(e,e.allowRecurse?ot+1:ot))&&vt.push(e),Co()}function os(e,t,n=jt?Pe+1:0){for(;nVt(n)-Vt(r));if(vt.length=0,We){We.push(...t);return}for(We=t,ot=0;ote.id==null?1/0:e.id,Sl=(e,t)=>{const n=Vt(e)-Vt(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function xo(e){dr=!1,jt=!0,pe.sort(Sl);try{for(Pe=0;Peoe(_)?_.trim():_)),h&&(s=n.map(cr))}let l,c=r[l=un(t)]||r[l=un($e(t))];!c&&o&&(c=r[l=un(ft(t))]),c&&Se(c,e,6,s);const a=r[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Se(a,e,6,s)}}function So(e,t,n=!1){const r=t.emitsCache,s=r.get(e);if(s!==void 0)return s;const o=e.emits;let i={},l=!1;if(!K(e)){const c=a=>{const f=So(a,t,!0);f&&(l=!0,le(i,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!o&&!l?(Z(e)&&r.set(e,null),null):(k(o)?o.forEach(c=>i[c]=null):le(i,o),Z(e)&&r.set(e,i),i)}function Pn(e,t){return!e||!kt(t)?!1:(t=t.slice(2).replace(/Once$/,""),Y(e,t[0].toLowerCase()+t.slice(1))||Y(e,ft(t))||Y(e,t))}let fe=null,Nn=null;function vn(e){const t=fe;return fe=e,Nn=e&&e.type.__scopeId||null,t}function ru(e){Nn=e}function su(){Nn=null}function Al(e,t=fe,n){if(!t||e._n)return e;const r=(...s)=>{r._d&&ws(-1);const o=vn(t);let i;try{i=e(...s)}finally{vn(o),r._d&&ws(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Kn(e){const{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[o],slots:i,attrs:l,emit:c,render:a,renderCache:f,props:h,data:m,setupState:_,ctx:C,inheritAttrs:L}=e,H=vn(e);let W,D;try{if(n.shapeFlag&4){const y=s||r,M=y;W=Ae(a.call(M,y,f,h,_,m,C)),D=l}else{const y=t;W=Ae(y.length>1?y(h,{attrs:l,slots:i,emit:c}):y(h,null)),D=t.props?l:Rl(l)}}catch(y){Nt.length=0,Kt(y,e,1),W=ie(me)}let p=W;if(D&&L!==!1){const y=Object.keys(D),{shapeFlag:M}=p;y.length&&M&7&&(o&&y.some(Er)&&(D=Ol(D,o)),p=Qe(p,D,!1,!0))}return n.dirs&&(p=Qe(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&(p.transition=n.transition),W=p,vn(H),W}const Rl=e=>{let t;for(const n in e)(n==="class"||n==="style"||kt(n))&&((t||(t={}))[n]=e[n]);return t},Ol=(e,t)=>{const n={};for(const r in e)(!Er(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Ll(e,t,n){const{props:r,children:s,component:o}=e,{props:i,children:l,patchFlag:c}=t,a=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?is(r,i,a):!!i;if(c&8){const f=t.dynamicProps;for(let h=0;he.__isSuspense;function Oo(e,t){t&&t.pendingBranch?k(e)?t.effects.push(...e):t.effects.push(e):xl(e)}function Fn(e,t,n=ue,r=!1){if(n){const s=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{Ze();const l=qt(n),c=Se(t,n,e,i);return l(),et(),c});return r?s.unshift(o):s.push(o),o}}const Ue=e=>(t,n=ue)=>{(!Gt||e==="sp")&&Fn(e,(...r)=>t(...r),n)},Pl=Ue("bm"),xt=Ue("m"),Nl=Ue("bu"),Fl=Ue("u"),Lo=Ue("bum"),$n=Ue("um"),$l=Ue("sp"),Hl=Ue("rtg"),jl=Ue("rtc");function Vl(e,t=ue){Fn("ec",e,t)}function lu(e,t){if(fe===null)return e;const n=Vn(fe),r=e.dirs||(e.dirs=[]);for(let s=0;st(i,l,void 0,o));else{const i=Object.keys(e);s=new Array(i.length);for(let l=0,c=i.length;l!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function au(e){K(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:s=200,timeout:o,suspensible:i=!0,onError:l}=e;let c=null,a,f=0;const h=()=>(f++,c=null,m()),m=()=>{let _;return c||(_=c=t().catch(C=>{if(C=C instanceof Error?C:new Error(String(C)),l)return new Promise((L,H)=>{l(C,()=>L(h()),()=>H(C),f+1)});throw C}).then(C=>_!==c&&c?c:(C&&(C.__esModule||C[Symbol.toStringTag]==="Module")&&(C=C.default),a=C,C)))};return Hr({name:"AsyncComponentWrapper",__asyncLoader:m,get __asyncResolved(){return a},setup(){const _=ue;if(a)return()=>Wn(a,_);const C=D=>{c=null,Kt(D,_,13,!r)};if(i&&_.suspense||Gt)return m().then(D=>()=>Wn(D,_)).catch(D=>(C(D),()=>r?ie(r,{error:D}):null));const L=se(!1),H=se(),W=se(!!s);return s&&setTimeout(()=>{W.value=!1},s),o!=null&&setTimeout(()=>{if(!L.value&&!H.value){const D=new Error(`Async component timed out after ${o}ms.`);C(D),H.value=D}},o),m().then(()=>{L.value=!0,_.parent&&Wt(_.parent.vnode)&&(_.parent.effect.dirty=!0,Mn(_.parent.update))}).catch(D=>{C(D),H.value=D}),()=>{if(L.value&&a)return Wn(a,_);if(H.value&&r)return ie(r,{error:H.value});if(n&&!W.value)return ie(n)}}})}function Wn(e,t){const{ref:n,props:r,children:s,ce:o}=t.vnode,i=ie(e,r,s);return i.ref=n,i.ce=o,delete t.vnode.ce,i}function uu(e,t,n={},r,s){if(fe.isCE||fe.parent&&bt(fe.parent)&&fe.parent.isCE)return t!=="default"&&(n.name=t),ie("slot",n,r&&r());let o=e[t];o&&o._c&&(o._d=!1),Qo();const i=o&&Io(o(n)),l=ei(_e,{key:n.key||i&&i.key||`_${t}`},i||(r?r():[]),i&&e._===1?64:-2);return!s&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),o&&o._c&&(o._d=!0),l}function Io(e){return e.some(t=>Cn(t)?!(t.type===me||t.type===_e&&!Io(t.children)):!0)?e:null}function fu(e,t){const n={};for(const r in e)n[/[A-Z]/.test(r)?`on:${r}`:un(r)]=e[r];return n}const hr=e=>e?si(e)?Vn(e):hr(e.parent):null,Lt=le(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>hr(e.parent),$root:e=>hr(e.root),$emit:e=>e.emit,$options:e=>jr(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Mn(e.update)}),$nextTick:e=>e.n||(e.n=In.bind(e.proxy)),$watch:e=>ac.bind(e)}),qn=(e,t)=>e!==te&&!e.__isScriptSetup&&Y(e,t),Dl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:s,props:o,accessCache:i,type:l,appContext:c}=e;let a;if(t[0]!=="$"){const _=i[t];if(_!==void 0)switch(_){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return o[t]}else{if(qn(r,t))return i[t]=1,r[t];if(s!==te&&Y(s,t))return i[t]=2,s[t];if((a=e.propsOptions[0])&&Y(a,t))return i[t]=3,o[t];if(n!==te&&Y(n,t))return i[t]=4,n[t];pr&&(i[t]=0)}}const f=Lt[t];let h,m;if(f)return t==="$attrs"&&ve(e.attrs,"get",""),f(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==te&&Y(n,t))return i[t]=4,n[t];if(m=c.config.globalProperties,Y(m,t))return m[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:o}=e;return qn(s,t)?(s[t]=n,!0):r!==te&&Y(r,t)?(r[t]=n,!0):Y(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,propsOptions:o}},i){let l;return!!n[i]||e!==te&&Y(e,i)||qn(t,i)||(l=o[0])&&Y(l,i)||Y(r,i)||Y(Lt,i)||Y(s.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Y(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function du(){return Ul().slots}function Ul(){const e=jn();return e.setupContext||(e.setupContext=ii(e))}function cs(e){return k(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let pr=!0;function Bl(e){const t=jr(e),n=e.proxy,r=e.ctx;pr=!1,t.beforeCreate&&as(t.beforeCreate,e,"bc");const{data:s,computed:o,methods:i,watch:l,provide:c,inject:a,created:f,beforeMount:h,mounted:m,beforeUpdate:_,updated:C,activated:L,deactivated:H,beforeDestroy:W,beforeUnmount:D,destroyed:p,unmounted:y,render:M,renderTracked:A,renderTriggered:F,errorCaptured:$,serverPrefetch:I,expose:w,inheritAttrs:N,components:T,directives:G,filters:ne}=t;if(a&&kl(a,r,null),i)for(const X in i){const V=i[X];K(V)&&(r[X]=V.bind(n))}if(s){const X=s.call(n,n);Z(X)&&(e.data=On(X))}if(pr=!0,o)for(const X in o){const V=o[X],He=K(V)?V.bind(n,n):K(V.get)?V.get.bind(n,n):xe,zt=!K(V)&&K(V.set)?V.set.bind(n):xe,tt=re({get:He,set:zt});Object.defineProperty(r,X,{enumerable:!0,configurable:!0,get:()=>tt.value,set:Le=>tt.value=Le})}if(l)for(const X in l)Mo(l[X],r,n,X);if(c){const X=K(c)?c.call(n):c;Reflect.ownKeys(X).forEach(V=>{Xl(V,X[V])})}f&&as(f,e,"c");function U(X,V){k(V)?V.forEach(He=>X(He.bind(n))):V&&X(V.bind(n))}if(U(Pl,h),U(xt,m),U(Nl,_),U(Fl,C),U(uc,L),U(fc,H),U(Vl,$),U(jl,A),U(Hl,F),U(Lo,D),U($n,y),U($l,I),k(w))if(w.length){const X=e.exposed||(e.exposed={});w.forEach(V=>{Object.defineProperty(X,V,{get:()=>n[V],set:He=>n[V]=He})})}else e.exposed||(e.exposed={});M&&e.render===xe&&(e.render=M),N!=null&&(e.inheritAttrs=N),T&&(e.components=T),G&&(e.directives=G)}function kl(e,t,n=xe){k(e)&&(e=gr(e));for(const r in e){const s=e[r];let o;Z(s)?"default"in s?o=wt(s.from||r,s.default,!0):o=wt(s.from||r):o=wt(s),de(o)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[r]=o}}function as(e,t,n){Se(k(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Mo(e,t,n,r){const s=r.includes(".")?Wo(n,r):()=>n[r];if(oe(e)){const o=t[e];K(o)&&Ne(s,o)}else if(K(e))Ne(s,e.bind(n));else if(Z(e))if(k(e))e.forEach(o=>Mo(o,t,n,r));else{const o=K(e.handler)?e.handler.bind(n):t[e.handler];K(o)&&Ne(s,o,e)}}function jr(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let c;return l?c=l:!s.length&&!n&&!r?c=t:(c={},s.length&&s.forEach(a=>bn(c,a,i,!0)),bn(c,t,i)),Z(t)&&o.set(t,c),c}function bn(e,t,n,r=!1){const{mixins:s,extends:o}=t;o&&bn(e,o,n,!0),s&&s.forEach(i=>bn(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const l=Kl[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const Kl={data:us,props:fs,emits:fs,methods:At,computed:At,beforeCreate:ge,created:ge,beforeMount:ge,mounted:ge,beforeUpdate:ge,updated:ge,beforeDestroy:ge,beforeUnmount:ge,destroyed:ge,unmounted:ge,activated:ge,deactivated:ge,errorCaptured:ge,serverPrefetch:ge,components:At,directives:At,watch:ql,provide:us,inject:Wl};function us(e,t){return t?e?function(){return le(K(e)?e.call(this,this):e,K(t)?t.call(this,this):t)}:t:e}function Wl(e,t){return At(gr(e),gr(t))}function gr(e){if(k(e)){const t={};for(let n=0;n1)return n&&K(t)?t.call(r&&r.proxy):t}}const No={},Fo=()=>Object.create(No),$o=e=>Object.getPrototypeOf(e)===No;function Yl(e,t,n,r=!1){const s={},o=Fo();e.propsDefaults=Object.create(null),Ho(e,t,s,o);for(const i in e.propsOptions[0])i in s||(s[i]=void 0);n?e.props=r?s:fl(s):e.type.props?e.props=s:e.props=o,e.attrs=o}function Jl(e,t,n,r){const{props:s,attrs:o,vnode:{patchFlag:i}}=e,l=J(s),[c]=e.propsOptions;let a=!1;if((r||i>0)&&!(i&16)){if(i&8){const f=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[m,_]=jo(h,t,!0);le(i,m),_&&l.push(..._)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!o&&!c)return Z(e)&&r.set(e,mt),mt;if(k(o))for(let f=0;f-1,_[1]=L<0||C-1||Y(_,"default"))&&l.push(h)}}}const a=[i,l];return Z(e)&&r.set(e,a),a}function ds(e){return e[0]!=="$"&&!_t(e)}function hs(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function ps(e,t){return hs(e)===hs(t)}function gs(e,t){return k(t)?t.findIndex(n=>ps(n,e)):K(t)&&ps(t,e)?0:-1}const Vo=e=>e[0]==="_"||e==="$stable",Vr=e=>k(e)?e.map(Ae):[Ae(e)],Ql=(e,t,n)=>{if(t._n)return t;const r=Al((...s)=>Vr(t(...s)),n);return r._c=!1,r},Do=(e,t,n)=>{const r=e._ctx;for(const s in e){if(Vo(s))continue;const o=e[s];if(K(o))t[s]=Ql(s,o,r);else if(o!=null){const i=Vr(o);t[s]=()=>i}}},Uo=(e,t)=>{const n=Vr(t);e.slots.default=()=>n},Zl=(e,t)=>{const n=e.slots=Fo();if(e.vnode.shapeFlag&32){const r=t._;r?(le(n,t),eo(n,"_",r,!0)):Do(t,n)}else t&&Uo(e,t)},ec=(e,t,n)=>{const{vnode:r,slots:s}=e;let o=!0,i=te;if(r.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:(le(s,t),!n&&l===1&&delete s._):(o=!t.$stable,Do(t,s)),i=t}else t&&(Uo(e,t),i={default:1});if(o)for(const l in s)!Vo(l)&&i[l]==null&&delete s[l]};function wn(e,t,n,r,s=!1){if(k(e)){e.forEach((m,_)=>wn(m,t&&(k(t)?t[_]:t),n,r,s));return}if(bt(r)&&!s)return;const o=r.shapeFlag&4?Vn(r.component):r.el,i=s?null:o,{i:l,r:c}=e,a=t&&t.r,f=l.refs===te?l.refs={}:l.refs,h=l.setupState;if(a!=null&&a!==c&&(oe(a)?(f[a]=null,Y(h,a)&&(h[a]=null)):de(a)&&(a.value=null)),K(c))Ye(c,l,12,[i,f]);else{const m=oe(c),_=de(c);if(m||_){const C=()=>{if(e.f){const L=m?Y(h,c)?h[c]:f[c]:c.value;s?k(L)&&Cr(L,o):k(L)?L.includes(o)||L.push(o):m?(f[c]=[o],Y(h,c)&&(h[c]=f[c])):(c.value=[o],e.k&&(f[e.k]=c.value))}else m?(f[c]=i,Y(h,c)&&(h[c]=i)):_&&(c.value=i,e.k&&(f[e.k]=i))};i?(C.id=-1,ye(C,n)):C()}}}let ms=!1;const pt=()=>{ms||(console.error("Hydration completed but contains mismatches."),ms=!0)},tc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",nc=e=>e.namespaceURI.includes("MathML"),tn=e=>{if(tc(e))return"svg";if(nc(e))return"mathml"},nn=e=>e.nodeType===8;function rc(e){const{mt:t,p:n,o:{patchProp:r,createText:s,nextSibling:o,parentNode:i,remove:l,insert:c,createComment:a}}=e,f=(p,y)=>{if(!y.hasChildNodes()){n(null,p,y),_n(),y._vnode=p;return}h(y.firstChild,p,null,null,null),_n(),y._vnode=p},h=(p,y,M,A,F,$=!1)=>{$=$||!!y.dynamicChildren;const I=nn(p)&&p.data==="[",w=()=>L(p,y,M,A,F,I),{type:N,ref:T,shapeFlag:G,patchFlag:ne}=y;let ce=p.nodeType;y.el=p,ne===-2&&($=!1,y.dynamicChildren=null);let U=null;switch(N){case Et:ce!==3?y.children===""?(c(y.el=s(""),i(p),p),U=p):U=w():(p.data!==y.children&&(pt(),p.data=y.children),U=o(p));break;case me:D(p)?(U=o(p),W(y.el=p.content.firstChild,p,M)):ce!==8||I?U=w():U=o(p);break;case Pt:if(I&&(p=o(p),ce=p.nodeType),ce===1||ce===3){U=p;const X=!y.children.length;for(let V=0;V{$=$||!!y.dynamicChildren;const{type:I,props:w,patchFlag:N,shapeFlag:T,dirs:G,transition:ne}=y,ce=I==="input"||I==="option";if(ce||N!==-1){G&&Me(y,null,M,"created");let U=!1;if(D(p)){U=ko(A,ne)&&M&&M.vnode.props&&M.vnode.props.appear;const V=p.content.firstChild;U&&ne.beforeEnter(V),W(V,p,M),y.el=p=V}if(T&16&&!(w&&(w.innerHTML||w.textContent))){let V=_(p.firstChild,y,p,M,A,F,$);for(;V;){pt();const He=V;V=V.nextSibling,l(He)}}else T&8&&p.textContent!==y.children&&(pt(),p.textContent=y.children);if(w)if(ce||!$||N&48)for(const V in w)(ce&&(V.endsWith("value")||V==="indeterminate")||kt(V)&&!_t(V)||V[0]===".")&&r(p,V,null,w[V],void 0,void 0,M);else w.onClick&&r(p,"onClick",null,w.onClick,void 0,void 0,M);let X;(X=w&&w.onVnodeBeforeMount)&&Ce(X,M,y),G&&Me(y,null,M,"beforeMount"),((X=w&&w.onVnodeMounted)||G||U)&&Oo(()=>{X&&Ce(X,M,y),U&&ne.enter(p),G&&Me(y,null,M,"mounted")},A)}return p.nextSibling},_=(p,y,M,A,F,$,I)=>{I=I||!!y.dynamicChildren;const w=y.children,N=w.length;for(let T=0;T{const{slotScopeIds:I}=y;I&&(F=F?F.concat(I):I);const w=i(p),N=_(o(p),y,w,M,A,F,$);return N&&nn(N)&&N.data==="]"?o(y.anchor=N):(pt(),c(y.anchor=a("]"),w,N),N)},L=(p,y,M,A,F,$)=>{if(pt(),y.el=null,$){const N=H(p);for(;;){const T=o(p);if(T&&T!==N)l(T);else break}}const I=o(p),w=i(p);return l(p),n(null,y,w,I,M,A,tn(w),F),I},H=(p,y="[",M="]")=>{let A=0;for(;p;)if(p=o(p),p&&nn(p)&&(p.data===y&&A++,p.data===M)){if(A===0)return o(p);A--}return p},W=(p,y,M)=>{const A=y.parentNode;A&&A.replaceChild(p,y);let F=M;for(;F;)F.vnode.el===y&&(F.vnode.el=F.subTree.el=p),F=F.parent},D=p=>p.nodeType===1&&p.tagName.toLowerCase()==="template";return[f,h]}const ye=Oo;function sc(e){return Bo(e)}function oc(e){return Bo(e,rc)}function Bo(e,t){const n=to();n.__VUE__=!0;const{insert:r,remove:s,patchProp:o,createElement:i,createText:l,createComment:c,setText:a,setElementText:f,parentNode:h,nextSibling:m,setScopeId:_=xe,insertStaticContent:C}=e,L=(u,d,g,v=null,b=null,S=null,O=void 0,x=null,R=!!d.dynamicChildren)=>{if(u===d)return;u&&!it(u,d)&&(v=Xt(u),Le(u,b,S,!0),u=null),d.patchFlag===-2&&(R=!1,d.dynamicChildren=null);const{type:E,ref:P,shapeFlag:B}=d;switch(E){case Et:H(u,d,g,v);break;case me:W(u,d,g,v);break;case Pt:u==null&&D(d,g,v,O);break;case _e:T(u,d,g,v,b,S,O,x,R);break;default:B&1?M(u,d,g,v,b,S,O,x,R):B&6?G(u,d,g,v,b,S,O,x,R):(B&64||B&128)&&E.process(u,d,g,v,b,S,O,x,R,dt)}P!=null&&b&&wn(P,u&&u.ref,S,d||u,!d)},H=(u,d,g,v)=>{if(u==null)r(d.el=l(d.children),g,v);else{const b=d.el=u.el;d.children!==u.children&&a(b,d.children)}},W=(u,d,g,v)=>{u==null?r(d.el=c(d.children||""),g,v):d.el=u.el},D=(u,d,g,v)=>{[u.el,u.anchor]=C(u.children,d,g,v,u.el,u.anchor)},p=({el:u,anchor:d},g,v)=>{let b;for(;u&&u!==d;)b=m(u),r(u,g,v),u=b;r(d,g,v)},y=({el:u,anchor:d})=>{let g;for(;u&&u!==d;)g=m(u),s(u),u=g;s(d)},M=(u,d,g,v,b,S,O,x,R)=>{d.type==="svg"?O="svg":d.type==="math"&&(O="mathml"),u==null?A(d,g,v,b,S,O,x,R):I(u,d,b,S,O,x,R)},A=(u,d,g,v,b,S,O,x)=>{let R,E;const{props:P,shapeFlag:B,transition:j,dirs:q}=u;if(R=u.el=i(u.type,S,P&&P.is,P),B&8?f(R,u.children):B&16&&$(u.children,R,null,v,b,Gn(u,S),O,x),q&&Me(u,null,v,"created"),F(R,u,u.scopeId,O,v),P){for(const ee in P)ee!=="value"&&!_t(ee)&&o(R,ee,null,P[ee],S,u.children,v,b,je);"value"in P&&o(R,"value",null,P.value,S),(E=P.onVnodeBeforeMount)&&Ce(E,v,u)}q&&Me(u,null,v,"beforeMount");const z=ko(b,j);z&&j.beforeEnter(R),r(R,d,g),((E=P&&P.onVnodeMounted)||z||q)&&ye(()=>{E&&Ce(E,v,u),z&&j.enter(R),q&&Me(u,null,v,"mounted")},b)},F=(u,d,g,v,b)=>{if(g&&_(u,g),v)for(let S=0;S{for(let E=R;E{const x=d.el=u.el;let{patchFlag:R,dynamicChildren:E,dirs:P}=d;R|=u.patchFlag&16;const B=u.props||te,j=d.props||te;let q;if(g&&nt(g,!1),(q=j.onVnodeBeforeUpdate)&&Ce(q,g,d,u),P&&Me(d,u,g,"beforeUpdate"),g&&nt(g,!0),E?w(u.dynamicChildren,E,x,g,v,Gn(d,b),S):O||V(u,d,x,null,g,v,Gn(d,b),S,!1),R>0){if(R&16)N(x,d,B,j,g,v,b);else if(R&2&&B.class!==j.class&&o(x,"class",null,j.class,b),R&4&&o(x,"style",B.style,j.style,b),R&8){const z=d.dynamicProps;for(let ee=0;ee{q&&Ce(q,g,d,u),P&&Me(d,u,g,"updated")},v)},w=(u,d,g,v,b,S,O)=>{for(let x=0;x{if(g!==v){if(g!==te)for(const x in g)!_t(x)&&!(x in v)&&o(u,x,g[x],null,O,d.children,b,S,je);for(const x in v){if(_t(x))continue;const R=v[x],E=g[x];R!==E&&x!=="value"&&o(u,x,E,R,O,d.children,b,S,je)}"value"in v&&o(u,"value",g.value,v.value,O)}},T=(u,d,g,v,b,S,O,x,R)=>{const E=d.el=u?u.el:l(""),P=d.anchor=u?u.anchor:l("");let{patchFlag:B,dynamicChildren:j,slotScopeIds:q}=d;q&&(x=x?x.concat(q):q),u==null?(r(E,g,v),r(P,g,v),$(d.children||[],g,P,b,S,O,x,R)):B>0&&B&64&&j&&u.dynamicChildren?(w(u.dynamicChildren,j,g,b,S,O,x),(d.key!=null||b&&d===b.subTree)&&Dr(u,d,!0)):V(u,d,g,P,b,S,O,x,R)},G=(u,d,g,v,b,S,O,x,R)=>{d.slotScopeIds=x,u==null?d.shapeFlag&512?b.ctx.activate(d,g,v,O,R):ne(d,g,v,b,S,O,R):ce(u,d,R)},ne=(u,d,g,v,b,S,O)=>{const x=u.component=Sc(u,v,b);if(Wt(u)&&(x.ctx.renderer=dt),Tc(x),x.asyncDep){if(b&&b.registerDep(x,U,O),!u.el){const R=x.subTree=ie(me);W(null,R,d,g)}}else U(x,u,d,g,b,S,O)},ce=(u,d,g)=>{const v=d.component=u.component;if(Ll(u,d,g))if(v.asyncDep&&!v.asyncResolved){X(v,d,g);return}else v.next=d,Cl(v.update),v.effect.dirty=!0,v.update();else d.el=u.el,v.vnode=d},U=(u,d,g,v,b,S,O)=>{const x=()=>{if(u.isMounted){let{next:P,bu:B,u:j,parent:q,vnode:z}=u;{const ht=Ko(u);if(ht){P&&(P.el=z.el,X(u,P,O)),ht.asyncDep.then(()=>{u.isUnmounted||x()});return}}let ee=P,Q;nt(u,!1),P?(P.el=z.el,X(u,P,O)):P=z,B&&fn(B),(Q=P.props&&P.props.onVnodeBeforeUpdate)&&Ce(Q,q,P,z),nt(u,!0);const ae=Kn(u),Te=u.subTree;u.subTree=ae,L(Te,ae,h(Te.el),Xt(Te),u,b,S),P.el=ae.el,ee===null&&Il(u,ae.el),j&&ye(j,b),(Q=P.props&&P.props.onVnodeUpdated)&&ye(()=>Ce(Q,q,P,z),b)}else{let P;const{el:B,props:j}=d,{bm:q,m:z,parent:ee}=u,Q=bt(d);if(nt(u,!1),q&&fn(q),!Q&&(P=j&&j.onVnodeBeforeMount)&&Ce(P,ee,d),nt(u,!0),B&&Bn){const ae=()=>{u.subTree=Kn(u),Bn(B,u.subTree,u,b,null)};Q?d.type.__asyncLoader().then(()=>!u.isUnmounted&&ae()):ae()}else{const ae=u.subTree=Kn(u);L(null,ae,g,v,u,b,S),d.el=ae.el}if(z&&ye(z,b),!Q&&(P=j&&j.onVnodeMounted)){const ae=d;ye(()=>Ce(P,ee,ae),b)}(d.shapeFlag&256||ee&&bt(ee.vnode)&&ee.vnode.shapeFlag&256)&&u.a&&ye(u.a,b),u.isMounted=!0,d=g=v=null}},R=u.effect=new Ar(x,xe,()=>Mn(E),u.scope),E=u.update=()=>{R.dirty&&R.run()};E.id=u.uid,nt(u,!0),E()},X=(u,d,g)=>{d.component=u;const v=u.vnode.props;u.vnode=d,u.next=null,Jl(u,d.props,v,g),ec(u,d.children,g),Ze(),os(u),et()},V=(u,d,g,v,b,S,O,x,R=!1)=>{const E=u&&u.children,P=u?u.shapeFlag:0,B=d.children,{patchFlag:j,shapeFlag:q}=d;if(j>0){if(j&128){zt(E,B,g,v,b,S,O,x,R);return}else if(j&256){He(E,B,g,v,b,S,O,x,R);return}}q&8?(P&16&&je(E,b,S),B!==E&&f(g,B)):P&16?q&16?zt(E,B,g,v,b,S,O,x,R):je(E,b,S,!0):(P&8&&f(g,""),q&16&&$(B,g,v,b,S,O,x,R))},He=(u,d,g,v,b,S,O,x,R)=>{u=u||mt,d=d||mt;const E=u.length,P=d.length,B=Math.min(E,P);let j;for(j=0;jP?je(u,b,S,!0,!1,B):$(d,g,v,b,S,O,x,R,B)},zt=(u,d,g,v,b,S,O,x,R)=>{let E=0;const P=d.length;let B=u.length-1,j=P-1;for(;E<=B&&E<=j;){const q=u[E],z=d[E]=R?Ge(d[E]):Ae(d[E]);if(it(q,z))L(q,z,g,null,b,S,O,x,R);else break;E++}for(;E<=B&&E<=j;){const q=u[B],z=d[j]=R?Ge(d[j]):Ae(d[j]);if(it(q,z))L(q,z,g,null,b,S,O,x,R);else break;B--,j--}if(E>B){if(E<=j){const q=j+1,z=qj)for(;E<=B;)Le(u[E],b,S,!0),E++;else{const q=E,z=E,ee=new Map;for(E=z;E<=j;E++){const be=d[E]=R?Ge(d[E]):Ae(d[E]);be.key!=null&&ee.set(be.key,E)}let Q,ae=0;const Te=j-z+1;let ht=!1,zr=0;const St=new Array(Te);for(E=0;E=Te){Le(be,b,S,!0);continue}let Ie;if(be.key!=null)Ie=ee.get(be.key);else for(Q=z;Q<=j;Q++)if(St[Q-z]===0&&it(be,d[Q])){Ie=Q;break}Ie===void 0?Le(be,b,S,!0):(St[Ie-z]=E+1,Ie>=zr?zr=Ie:ht=!0,L(be,d[Ie],g,null,b,S,O,x,R),ae++)}const Xr=ht?ic(St):mt;for(Q=Xr.length-1,E=Te-1;E>=0;E--){const be=z+E,Ie=d[be],Yr=be+1{const{el:S,type:O,transition:x,children:R,shapeFlag:E}=u;if(E&6){tt(u.component.subTree,d,g,v);return}if(E&128){u.suspense.move(d,g,v);return}if(E&64){O.move(u,d,g,dt);return}if(O===_e){r(S,d,g);for(let B=0;Bx.enter(S),b);else{const{leave:B,delayLeave:j,afterLeave:q}=x,z=()=>r(S,d,g),ee=()=>{B(S,()=>{z(),q&&q()})};j?j(S,z,ee):ee()}else r(S,d,g)},Le=(u,d,g,v=!1,b=!1)=>{const{type:S,props:O,ref:x,children:R,dynamicChildren:E,shapeFlag:P,patchFlag:B,dirs:j,memoIndex:q}=u;if(x!=null&&wn(x,null,g,u,!0),q!=null&&(d.renderCache[q]=void 0),P&256){d.ctx.deactivate(u);return}const z=P&1&&j,ee=!bt(u);let Q;if(ee&&(Q=O&&O.onVnodeBeforeUnmount)&&Ce(Q,d,u),P&6)Oi(u.component,g,v);else{if(P&128){u.suspense.unmount(g,v);return}z&&Me(u,null,d,"beforeUnmount"),P&64?u.type.remove(u,d,g,b,dt,v):E&&(S!==_e||B>0&&B&64)?je(E,d,g,!1,!0):(S===_e&&B&384||!b&&P&16)&&je(R,d,g),v&&qr(u)}(ee&&(Q=O&&O.onVnodeUnmounted)||z)&&ye(()=>{Q&&Ce(Q,d,u),z&&Me(u,null,d,"unmounted")},g)},qr=u=>{const{type:d,el:g,anchor:v,transition:b}=u;if(d===_e){Ri(g,v);return}if(d===Pt){y(u);return}const S=()=>{s(g),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(u.shapeFlag&1&&b&&!b.persisted){const{leave:O,delayLeave:x}=b,R=()=>O(g,S);x?x(u.el,S,R):R()}else S()},Ri=(u,d)=>{let g;for(;u!==d;)g=m(u),s(u),u=g;s(d)},Oi=(u,d,g)=>{const{bum:v,scope:b,update:S,subTree:O,um:x,m:R,a:E}=u;ys(R),ys(E),v&&fn(v),b.stop(),S&&(S.active=!1,Le(O,u,d,g)),x&&ye(x,d),ye(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},je=(u,d,g,v=!1,b=!1,S=0)=>{for(let O=S;Ou.shapeFlag&6?Xt(u.component.subTree):u.shapeFlag&128?u.suspense.next():m(u.anchor||u.el);let Dn=!1;const Gr=(u,d,g)=>{u==null?d._vnode&&Le(d._vnode,null,null,!0):L(d._vnode||null,u,d,null,null,null,g),Dn||(Dn=!0,os(),_n(),Dn=!1),d._vnode=u},dt={p:L,um:Le,m:tt,r:qr,mt:ne,mc:$,pc:V,pbc:w,n:Xt,o:e};let Un,Bn;return t&&([Un,Bn]=t(dt)),{render:Gr,hydrate:Un,createApp:zl(Gr,Un)}}function Gn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function nt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function ko(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Dr(e,t,n=!1){const r=e.children,s=t.children;if(k(r)&&k(s))for(let o=0;o>1,e[n[l]]0&&(t[r]=n[o-1]),n[o]=r)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function Ko(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Ko(t)}function ys(e){if(e)for(let t=0;twt(lc);function Ur(e,t){return Hn(e,null,t)}function hu(e,t){return Hn(e,null,{flush:"post"})}const rn={};function Ne(e,t,n){return Hn(e,t,n)}function Hn(e,t,{immediate:n,deep:r,flush:s,once:o,onTrack:i,onTrigger:l}=te){if(t&&o){const A=t;t=(...F)=>{A(...F),M()}}const c=ue,a=A=>r===!0?A:ze(A,r===!1?1:void 0);let f,h=!1,m=!1;if(de(e)?(f=()=>e.value,h=yn(e)):Rt(e)?(f=()=>a(e),h=!0):k(e)?(m=!0,h=e.some(A=>Rt(A)||yn(A)),f=()=>e.map(A=>{if(de(A))return A.value;if(Rt(A))return a(A);if(K(A))return Ye(A,c,2)})):K(e)?t?f=()=>Ye(e,c,2):f=()=>(_&&_(),Se(e,c,3,[C])):f=xe,t&&r){const A=f;f=()=>ze(A())}let _,C=A=>{_=p.onStop=()=>{Ye(A,c,4),_=p.onStop=void 0}},L;if(Gt)if(C=xe,t?n&&Se(t,c,3,[f(),m?[]:void 0,C]):f(),s==="sync"){const A=cc();L=A.__watcherHandles||(A.__watcherHandles=[])}else return xe;let H=m?new Array(e.length).fill(rn):rn;const W=()=>{if(!(!p.active||!p.dirty))if(t){const A=p.run();(r||h||(m?A.some((F,$)=>Je(F,H[$])):Je(A,H)))&&(_&&_(),Se(t,c,3,[A,H===rn?void 0:m&&H[0]===rn?[]:H,C]),H=A)}else p.run()};W.allowRecurse=!!t;let D;s==="sync"?D=W:s==="post"?D=()=>ye(W,c&&c.suspense):(W.pre=!0,c&&(W.id=c.uid),D=()=>Mn(W));const p=new Ar(f,xe,D),y=so(),M=()=>{p.stop(),y&&Cr(y.effects,p)};return t?n?W():H=p.run():s==="post"?ye(p.run.bind(p),c&&c.suspense):p.run(),L&&L.push(M),M}function ac(e,t,n){const r=this.proxy,s=oe(e)?e.includes(".")?Wo(r,e):()=>r[e]:e.bind(r,r);let o;K(t)?o=t:(o=t.handler,n=t);const i=qt(this),l=Hn(s,o.bind(r),n);return i(),l}function Wo(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;s{ze(r,t,n)});else if(Zs(e)){for(const r in e)ze(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&ze(e[r],t,n)}return e}const Wt=e=>e.type.__isKeepAlive;function uc(e,t){qo(e,"a",t)}function fc(e,t){qo(e,"da",t)}function qo(e,t,n=ue){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(Fn(t,r,n),n){let s=n.parent;for(;s&&s.parent;)Wt(s.parent.vnode)&&dc(r,t,n,s),s=s.parent}}function dc(e,t,n,r){const s=Fn(t,e,r,!0);$n(()=>{Cr(r[t],s)},n)}const qe=Symbol("_leaveCb"),sn=Symbol("_enterCb");function hc(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return xt(()=>{e.isMounted=!0}),Lo(()=>{e.isUnmounting=!0}),e}const Ee=[Function,Array],Go={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ee,onEnter:Ee,onAfterEnter:Ee,onEnterCancelled:Ee,onBeforeLeave:Ee,onLeave:Ee,onAfterLeave:Ee,onLeaveCancelled:Ee,onBeforeAppear:Ee,onAppear:Ee,onAfterAppear:Ee,onAppearCancelled:Ee},zo=e=>{const t=e.subTree;return t.component?zo(t.component):t},pc={name:"BaseTransition",props:Go,setup(e,{slots:t}){const n=jn(),r=hc();return()=>{const s=t.default&&Yo(t.default(),!0);if(!s||!s.length)return;let o=s[0];if(s.length>1){for(const m of s)if(m.type!==me){o=m;break}}const i=J(e),{mode:l}=i;if(r.isLeaving)return zn(o);const c=_s(o);if(!c)return zn(o);let a=yr(c,i,r,n,m=>a=m);En(c,a);const f=n.subTree,h=f&&_s(f);if(h&&h.type!==me&&!it(c,h)&&zo(n).type!==me){const m=yr(h,i,r,n);if(En(h,m),l==="out-in"&&c.type!==me)return r.isLeaving=!0,m.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},zn(o);l==="in-out"&&c.type!==me&&(m.delayLeave=(_,C,L)=>{const H=Xo(r,h);H[String(h.key)]=h,_[qe]=()=>{C(),_[qe]=void 0,delete a.delayedLeave},a.delayedLeave=L})}return o}}},gc=pc;function Xo(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function yr(e,t,n,r,s){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:c,onEnter:a,onAfterEnter:f,onEnterCancelled:h,onBeforeLeave:m,onLeave:_,onAfterLeave:C,onLeaveCancelled:L,onBeforeAppear:H,onAppear:W,onAfterAppear:D,onAppearCancelled:p}=t,y=String(e.key),M=Xo(n,e),A=(I,w)=>{I&&Se(I,r,9,w)},F=(I,w)=>{const N=w[1];A(I,w),k(I)?I.every(T=>T.length<=1)&&N():I.length<=1&&N()},$={mode:i,persisted:l,beforeEnter(I){let w=c;if(!n.isMounted)if(o)w=H||c;else return;I[qe]&&I[qe](!0);const N=M[y];N&&it(e,N)&&N.el[qe]&&N.el[qe](),A(w,[I])},enter(I){let w=a,N=f,T=h;if(!n.isMounted)if(o)w=W||a,N=D||f,T=p||h;else return;let G=!1;const ne=I[sn]=ce=>{G||(G=!0,ce?A(T,[I]):A(N,[I]),$.delayedLeave&&$.delayedLeave(),I[sn]=void 0)};w?F(w,[I,ne]):ne()},leave(I,w){const N=String(e.key);if(I[sn]&&I[sn](!0),n.isUnmounting)return w();A(m,[I]);let T=!1;const G=I[qe]=ne=>{T||(T=!0,w(),ne?A(L,[I]):A(C,[I]),I[qe]=void 0,M[N]===e&&delete M[N])};M[N]=e,_?F(_,[I,G]):G()},clone(I){const w=yr(I,t,n,r,s);return s&&s(w),w}};return $}function zn(e){if(Wt(e))return e=Qe(e),e.children=null,e}function _s(e){if(!Wt(e))return e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&K(n.default))return n.default()}}function En(e,t){e.shapeFlag&6&&e.component?En(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Yo(e,t=!1,n){let r=[],s=0;for(let o=0;o1)for(let o=0;oe.__isTeleport,Mt=e=>e&&(e.disabled||e.disabled===""),vs=e=>typeof SVGElement<"u"&&e instanceof SVGElement,bs=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,_r=(e,t)=>{const n=e&&e.to;return oe(n)?t?t(n):null:n},yc={name:"Teleport",__isTeleport:!0,process(e,t,n,r,s,o,i,l,c,a){const{mc:f,pc:h,pbc:m,o:{insert:_,querySelector:C,createText:L,createComment:H}}=a,W=Mt(t.props);let{shapeFlag:D,children:p,dynamicChildren:y}=t;if(e==null){const M=t.el=L(""),A=t.anchor=L("");_(M,n,r),_(A,n,r);const F=t.target=_r(t.props,C),$=t.targetAnchor=L("");F&&(_($,F),i==="svg"||vs(F)?i="svg":(i==="mathml"||bs(F))&&(i="mathml"));const I=(w,N)=>{D&16&&f(p,w,N,s,o,i,l,c)};W?I(n,A):F&&I(F,$)}else{t.el=e.el;const M=t.anchor=e.anchor,A=t.target=e.target,F=t.targetAnchor=e.targetAnchor,$=Mt(e.props),I=$?n:A,w=$?M:F;if(i==="svg"||vs(A)?i="svg":(i==="mathml"||bs(A))&&(i="mathml"),y?(m(e.dynamicChildren,y,I,s,o,i,l),Dr(e,t,!0)):c||h(e,t,I,w,s,o,i,l,!1),W)$?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):on(t,n,M,a,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const N=t.target=_r(t.props,C);N&&on(t,N,null,a,0)}else $&&on(t,A,F,a,1)}Jo(t)},remove(e,t,n,r,{um:s,o:{remove:o}},i){const{shapeFlag:l,children:c,anchor:a,targetAnchor:f,target:h,props:m}=e;if(h&&o(f),i&&o(a),l&16){const _=i||!Mt(m);for(let C=0;C0?Re||mt:null,vc(),Dt>0&&Re&&Re.push(e),e}function gu(e,t,n,r,s,o){return Zo(ni(e,t,n,r,s,o,!0))}function ei(e,t,n,r,s){return Zo(ie(e,t,n,r,s,!0))}function Cn(e){return e?e.__v_isVNode===!0:!1}function it(e,t){return e.type===t.type&&e.key===t.key}const ti=({key:e})=>e??null,hn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?oe(e)||de(e)||K(e)?{i:fe,r:e,k:t,f:!!n}:e:null);function ni(e,t=null,n=null,r=0,s=null,o=e===_e?0:1,i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ti(t),ref:t&&hn(t),scopeId:Nn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:fe};return l?(Br(c,n),o&128&&e.normalize(c)):n&&(c.shapeFlag|=oe(n)?8:16),Dt>0&&!i&&Re&&(c.patchFlag>0||o&6)&&c.patchFlag!==32&&Re.push(c),c}const ie=bc;function bc(e,t=null,n=null,r=0,s=null,o=!1){if((!e||e===Ao)&&(e=me),Cn(e)){const l=Qe(e,t,!0);return n&&Br(l,n),Dt>0&&!o&&Re&&(l.shapeFlag&6?Re[Re.indexOf(e)]=l:Re.push(l)),l.patchFlag=-2,l}if(Lc(e)&&(e=e.__vccOpts),t){t=wc(t);let{class:l,style:c}=t;l&&!oe(l)&&(t.class=Tr(l)),Z(c)&&(yo(c)&&!k(c)&&(c=le({},c)),t.style=Sr(c))}const i=oe(e)?1:Ml(e)?128:mc(e)?64:Z(e)?4:K(e)?2:0;return ni(e,t,n,r,s,i,o,!0)}function wc(e){return e?yo(e)||$o(e)?le({},e):e:null}function Qe(e,t,n=!1,r=!1){const{props:s,ref:o,patchFlag:i,children:l,transition:c}=e,a=t?Ec(s||{},t):s,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:a,key:a&&ti(a),ref:t&&t.ref?n&&o?k(o)?o.concat(hn(t)):[o,hn(t)]:hn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==_e?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Qe(e.ssContent),ssFallback:e.ssFallback&&Qe(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&r&&En(f,c.clone(f)),f}function ri(e=" ",t=0){return ie(Et,null,e,t)}function mu(e,t){const n=ie(Pt,null,e);return n.staticCount=t,n}function yu(e="",t=!1){return t?(Qo(),ei(me,null,e)):ie(me,null,e)}function Ae(e){return e==null||typeof e=="boolean"?ie(me):k(e)?ie(_e,null,e.slice()):typeof e=="object"?Ge(e):ie(Et,null,String(e))}function Ge(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Qe(e)}function Br(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(k(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),Br(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!$o(t)?t._ctx=fe:s===3&&fe&&(fe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else K(t)?(t={default:t,_ctx:fe},n=32):(t=String(t),r&64?(n=16,t=[ri(t)]):n=8);e.children=t,e.shapeFlag|=n}function Ec(...e){const t={};for(let n=0;nue||fe;let xn,vr;{const e=to(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),o=>{s.length>1?s.forEach(i=>i(o)):s[0](o)}};xn=t("__VUE_INSTANCE_SETTERS__",n=>ue=n),vr=t("__VUE_SSR_SETTERS__",n=>Gt=n)}const qt=e=>{const t=ue;return xn(e),e.scope.on(),()=>{e.scope.off(),xn(t)}},Es=()=>{ue&&ue.scope.off(),xn(null)};function si(e){return e.vnode.shapeFlag&4}let Gt=!1;function Tc(e,t=!1){t&&vr(t);const{props:n,children:r}=e.vnode,s=si(e);Yl(e,n,s,t),Zl(e,r);const o=s?Ac(e,t):void 0;return t&&vr(!1),o}function Ac(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Dl);const{setup:r}=n;if(r){const s=e.setupContext=r.length>1?ii(e):null,o=qt(e);Ze();const i=Ye(r,e,0,[e.props,s]);if(et(),o(),Js(i)){if(i.then(Es,Es),t)return i.then(l=>{Cs(e,l,t)}).catch(l=>{Kt(l,e,0)});e.asyncDep=i}else Cs(e,i,t)}else oi(e,t)}function Cs(e,t,n){K(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=wo(t)),oi(e,n)}let xs;function oi(e,t,n){const r=e.type;if(!e.render){if(!t&&xs&&!r.render){const s=r.template||jr(e).template;if(s){const{isCustomElement:o,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:c}=r,a=le(le({isCustomElement:o,delimiters:l},i),c);r.render=xs(s,a)}}e.render=r.render||xe}{const s=qt(e);Ze();try{Bl(e)}finally{et(),s()}}}const Rc={get(e,t){return ve(e,"get",""),e[t]}};function ii(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Rc),slots:e.slots,emit:e.emit,expose:t}}function Vn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(wo(dn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Lt)return Lt[n](e)},has(t,n){return n in t||n in Lt}})):e.proxy}function Oc(e,t=!0){return K(e)?e.displayName||e.name:e.name||t&&e.__name}function Lc(e){return K(e)&&"__vccOpts"in e}const re=(e,t)=>dl(e,t,Gt);function br(e,t,n){const r=arguments.length;return r===2?Z(t)&&!k(t)?Cn(t)?ie(e,null,[t]):ie(e,t):ie(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Cn(n)&&(n=[n]),ie(e,t,n))}const Ic="3.4.29";/** +* @vue/runtime-dom v3.4.29 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const Mc="http://www.w3.org/2000/svg",Pc="http://www.w3.org/1998/Math/MathML",Ve=typeof document<"u"?document:null,Ss=Ve&&Ve.createElement("template"),Nc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t==="svg"?Ve.createElementNS(Mc,e):t==="mathml"?Ve.createElementNS(Pc,e):n?Ve.createElement(e,{is:n}):Ve.createElement(e);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>Ve.createTextNode(e),createComment:e=>Ve.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ve.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,o){const i=n?n.previousSibling:t.lastChild;if(s&&(s===o||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===o||!(s=s.nextSibling)););else{Ss.innerHTML=r==="svg"?`${e}`:r==="mathml"?`${e}`:e;const l=Ss.content;if(r==="svg"||r==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ke="transition",Tt="animation",Ut=Symbol("_vtc"),li=(e,{slots:t})=>br(gc,Fc(e),t);li.displayName="Transition";const ci={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};li.props=le({},Go,ci);const rt=(e,t=[])=>{k(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ts=e=>e?k(e)?e.some(t=>t.length>1):e.length>1:!1;function Fc(e){const t={};for(const T in e)T in ci||(t[T]=e[T]);if(e.css===!1)return t;const{name:n="v",type:r,duration:s,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=o,appearActiveClass:a=i,appearToClass:f=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:m=`${n}-leave-active`,leaveToClass:_=`${n}-leave-to`}=e,C=$c(s),L=C&&C[0],H=C&&C[1],{onBeforeEnter:W,onEnter:D,onEnterCancelled:p,onLeave:y,onLeaveCancelled:M,onBeforeAppear:A=W,onAppear:F=D,onAppearCancelled:$=p}=t,I=(T,G,ne)=>{st(T,G?f:l),st(T,G?a:i),ne&&ne()},w=(T,G)=>{T._isLeaving=!1,st(T,h),st(T,_),st(T,m),G&&G()},N=T=>(G,ne)=>{const ce=T?F:D,U=()=>I(G,T,ne);rt(ce,[G,U]),As(()=>{st(G,T?c:o),Ke(G,T?f:l),Ts(ce)||Rs(G,r,L,U)})};return le(t,{onBeforeEnter(T){rt(W,[T]),Ke(T,o),Ke(T,i)},onBeforeAppear(T){rt(A,[T]),Ke(T,c),Ke(T,a)},onEnter:N(!1),onAppear:N(!0),onLeave(T,G){T._isLeaving=!0;const ne=()=>w(T,G);Ke(T,h),Ke(T,m),Vc(),As(()=>{T._isLeaving&&(st(T,h),Ke(T,_),Ts(y)||Rs(T,r,H,ne))}),rt(y,[T,ne])},onEnterCancelled(T){I(T,!1),rt(p,[T])},onAppearCancelled(T){I(T,!0),rt($,[T])},onLeaveCancelled(T){w(T),rt(M,[T])}})}function $c(e){if(e==null)return null;if(Z(e))return[Xn(e.enter),Xn(e.leave)];{const t=Xn(e);return[t,t]}}function Xn(e){return Fi(e)}function Ke(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Ut]||(e[Ut]=new Set)).add(t)}function st(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Ut];n&&(n.delete(t),n.size||(e[Ut]=void 0))}function As(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Hc=0;function Rs(e,t,n,r){const s=e._endId=++Hc,o=()=>{s===e._endId&&r()};if(n)return setTimeout(o,n);const{type:i,timeout:l,propCount:c}=jc(e,t);if(!i)return r();const a=i+"end";let f=0;const h=()=>{e.removeEventListener(a,m),o()},m=_=>{_.target===e&&++f>=c&&h()};setTimeout(()=>{f(n[C]||"").split(", "),s=r(`${ke}Delay`),o=r(`${ke}Duration`),i=Os(s,o),l=r(`${Tt}Delay`),c=r(`${Tt}Duration`),a=Os(l,c);let f=null,h=0,m=0;t===ke?i>0&&(f=ke,h=i,m=o.length):t===Tt?a>0&&(f=Tt,h=a,m=c.length):(h=Math.max(i,a),f=h>0?i>a?ke:Tt:null,m=f?f===ke?o.length:c.length:0);const _=f===ke&&/\b(transform|all)(,|$)/.test(r(`${ke}Property`).toString());return{type:f,timeout:h,propCount:m,hasTransform:_}}function Os(e,t){for(;e.lengthLs(n)+Ls(e[r])))}function Ls(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Vc(){return document.body.offsetHeight}function Dc(e,t,n){const r=e[Ut];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Is=Symbol("_vod"),Uc=Symbol("_vsh"),Bc=Symbol(""),kc=/(^|;)\s*display\s*:/;function Kc(e,t,n){const r=e.style,s=oe(n);let o=!1;if(n&&!s){if(t)if(oe(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&pn(r,l,"")}else for(const i in t)n[i]==null&&pn(r,i,"");for(const i in n)i==="display"&&(o=!0),pn(r,i,n[i])}else if(s){if(t!==n){const i=r[Bc];i&&(n+=";"+i),r.cssText=n,o=kc.test(n)}}else t&&e.removeAttribute("style");Is in e&&(e[Is]=o?r.display:"",e[Uc]&&(r.display="none"))}const Ms=/\s*!important$/;function pn(e,t,n){if(k(n))n.forEach(r=>pn(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Wc(e,t);Ms.test(n)?e.setProperty(ft(r),n.replace(Ms,""),"important"):e[r]=n}}const Ps=["Webkit","Moz","ms"],Yn={};function Wc(e,t){const n=Yn[t];if(n)return n;let r=$e(t);if(r!=="filter"&&r in e)return Yn[t]=r;r=An(r);for(let s=0;sJn||(Yc.then(()=>Jn=0),Jn=Date.now());function Qc(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Se(Zc(r,n.value),t,5,[r])};return n.value=e,n.attached=Jc(),n}function Zc(e,t){if(k(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>s=>!s._stopped&&r&&r(s))}else return t}const js=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,ea=(e,t,n,r,s,o,i,l,c)=>{const a=s==="svg";t==="class"?Dc(e,r,a):t==="style"?Kc(e,n,r):kt(t)?Er(t)||zc(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):ta(e,t,r,a))?(qc(e,t,r,o,i,l,c),(t==="value"||t==="checked"||t==="selected")&&Fs(e,t,r,a,i,t!=="value")):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Fs(e,t,r,a))};function ta(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&js(t)&&K(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return js(t)&&oe(n)?!1:t in e}const Vs=e=>{const t=e.props["onUpdate:modelValue"]||!1;return k(t)?n=>fn(t,n):t};function na(e){e.target.composing=!0}function Ds(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Qn=Symbol("_assign"),_u={created(e,{modifiers:{lazy:t,trim:n,number:r}},s){e[Qn]=Vs(s);const o=r||s.props&&s.props.type==="number";gt(e,t?"change":"input",i=>{if(i.target.composing)return;let l=e.value;n&&(l=l.trim()),o&&(l=cr(l)),e[Qn](l)}),n&>(e,"change",()=>{e.value=e.value.trim()}),t||(gt(e,"compositionstart",na),gt(e,"compositionend",Ds),gt(e,"change",Ds))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:s,number:o}},i){if(e[Qn]=Vs(i),e.composing)return;const l=(o||e.type==="number")&&!/^0\d/.test(e.value)?cr(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(r&&t===n||s&&e.value.trim()===c)||(e.value=c))}},ra=["ctrl","shift","alt","meta"],sa={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>ra.some(n=>e[`${n}Key`]&&!t.includes(n))},vu=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(s,...o)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=s=>{if(!("key"in s))return;const o=ft(s.key);if(t.some(i=>i===o||oa[i]===o))return e(s)})},ai=le({patchProp:ea},Nc);let Ft,Us=!1;function ia(){return Ft||(Ft=sc(ai))}function la(){return Ft=Us?Ft:oc(ai),Us=!0,Ft}const wu=(...e)=>{const t=ia().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=fi(r);if(!s)return;const o=t._component;!K(o)&&!o.render&&!o.template&&(o.template=s.innerHTML),s.innerHTML="";const i=n(s,!1,ui(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),i},t},Eu=(...e)=>{const t=la().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=fi(r);if(s)return n(s,!0,ui(s))},t};function ui(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function fi(e){return oe(e)?document.querySelector(e):e}const Cu=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n},ca="modulepreload",aa=function(e){return"/laravel-wallet/"+e},Bs={},xu=function(t,n,r){let s=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),i=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));s=Promise.all(n.map(l=>{if(l=aa(l),l in Bs)return;Bs[l]=!0;const c=l.endsWith(".css"),a=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${a}`))return;const f=document.createElement("link");if(f.rel=c?"stylesheet":ca,c||(f.as="script",f.crossOrigin=""),f.href=l,i&&f.setAttribute("nonce",i),document.head.appendChild(f),c)return new Promise((h,m)=>{f.addEventListener("load",h),f.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${l}`)))})}))}return s.then(()=>t()).catch(o=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=o,window.dispatchEvent(i),!i.defaultPrevented)throw o})},ua=window.__VP_SITE_DATA__;function kr(e){return so()?(Ki(e),!0):!1}function Fe(e){return typeof e=="function"?e():bo(e)}const di=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const fa=Object.prototype.toString,da=e=>fa.call(e)==="[object Object]",Bt=()=>{},ks=ha();function ha(){var e,t;return di&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function pa(e,t){function n(...r){return new Promise((s,o)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(s).catch(o)})}return n}const hi=e=>e();function ga(e,t={}){let n,r,s=Bt;const o=l=>{clearTimeout(l),s(),s=Bt};return l=>{const c=Fe(e),a=Fe(t.maxWait);return n&&o(n),c<=0||a!==void 0&&a<=0?(r&&(o(r),r=null),Promise.resolve(l())):new Promise((f,h)=>{s=t.rejectOnCancel?h:f,a&&!r&&(r=setTimeout(()=>{n&&o(n),r=null,f(l())},a)),n=setTimeout(()=>{r&&o(r),r=null,f(l())},c)})}}function ma(e=hi){const t=se(!0);function n(){t.value=!1}function r(){t.value=!0}const s=(...o)=>{t.value&&e(...o)};return{isActive:Ln(t),pause:n,resume:r,eventFilter:s}}function ya(e){return jn()}function pi(...e){if(e.length!==1)return vl(...e);const t=e[0];return typeof t=="function"?Ln(ml(()=>({get:t,set:Bt}))):se(t)}function gi(e,t,n={}){const{eventFilter:r=hi,...s}=n;return Ne(e,pa(r,t),s)}function _a(e,t,n={}){const{eventFilter:r,...s}=n,{eventFilter:o,pause:i,resume:l,isActive:c}=ma(r);return{stop:gi(e,t,{...s,eventFilter:o}),pause:i,resume:l,isActive:c}}function Kr(e,t=!0,n){ya()?xt(e,n):t?e():In(e)}function Su(e,t,n={}){const{debounce:r=0,maxWait:s=void 0,...o}=n;return gi(e,t,{...o,eventFilter:ga(r,{maxWait:s})})}function Tu(e,t,n){let r;de(n)?r={evaluating:n}:r={};const{lazy:s=!1,evaluating:o=void 0,shallow:i=!0,onError:l=Bt}=r,c=se(!s),a=i?Fr(t):se(t);let f=0;return Ur(async h=>{if(!c.value)return;f++;const m=f;let _=!1;o&&Promise.resolve().then(()=>{o.value=!0});try{const C=await e(L=>{h(()=>{o&&(o.value=!1),_||L()})});m===f&&(a.value=C)}catch(C){l(C)}finally{o&&m===f&&(o.value=!1),_=!0}}),s?re(()=>(c.value=!0,a.value)):a}function mi(e){var t;const n=Fe(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Oe=di?window:void 0;function Ct(...e){let t,n,r,s;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,s]=e,t=Oe):[t,n,r,s]=e,!t)return Bt;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const o=[],i=()=>{o.forEach(f=>f()),o.length=0},l=(f,h,m,_)=>(f.addEventListener(h,m,_),()=>f.removeEventListener(h,m,_)),c=Ne(()=>[mi(t),Fe(s)],([f,h])=>{if(i(),!f)return;const m=da(h)?{...h}:h;o.push(...n.flatMap(_=>r.map(C=>l(f,_,C,m))))},{immediate:!0,flush:"post"}),a=()=>{c(),i()};return kr(a),a}function va(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Au(...e){let t,n,r={};e.length===3?(t=e[0],n=e[1],r=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],r=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:s=Oe,eventName:o="keydown",passive:i=!1,dedupe:l=!1}=r,c=va(t);return Ct(s,o,f=>{f.repeat&&Fe(l)||c(f)&&n(f)},i)}function ba(){const e=se(!1),t=jn();return t&&xt(()=>{e.value=!0},t),e}function wa(e){const t=ba();return re(()=>(t.value,!!e()))}function yi(e,t={}){const{window:n=Oe}=t,r=wa(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let s;const o=se(!1),i=a=>{o.value=a.matches},l=()=>{s&&("removeEventListener"in s?s.removeEventListener("change",i):s.removeListener(i))},c=Ur(()=>{r.value&&(l(),s=n.matchMedia(Fe(e)),"addEventListener"in s?s.addEventListener("change",i):s.addListener(i),o.value=s.matches)});return kr(()=>{c(),l(),s=void 0}),o}const ln=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},cn="__vueuse_ssr_handlers__",Ea=Ca();function Ca(){return cn in ln||(ln[cn]=ln[cn]||{}),ln[cn]}function _i(e,t){return Ea[e]||t}function xa(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Sa={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Ks="vueuse-storage";function Wr(e,t,n,r={}){var s;const{flush:o="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:a=!1,shallow:f,window:h=Oe,eventFilter:m,onError:_=w=>{console.error(w)},initOnMounted:C}=r,L=(f?Fr:se)(typeof t=="function"?t():t);if(!n)try{n=_i("getDefaultStorage",()=>{var w;return(w=Oe)==null?void 0:w.localStorage})()}catch(w){_(w)}if(!n)return L;const H=Fe(t),W=xa(H),D=(s=r.serializer)!=null?s:Sa[W],{pause:p,resume:y}=_a(L,()=>A(L.value),{flush:o,deep:i,eventFilter:m});h&&l&&Kr(()=>{Ct(h,"storage",$),Ct(h,Ks,I),C&&$()}),C||$();function M(w,N){h&&h.dispatchEvent(new CustomEvent(Ks,{detail:{key:e,oldValue:w,newValue:N,storageArea:n}}))}function A(w){try{const N=n.getItem(e);if(w==null)M(N,null),n.removeItem(e);else{const T=D.write(w);N!==T&&(n.setItem(e,T),M(N,T))}}catch(N){_(N)}}function F(w){const N=w?w.newValue:n.getItem(e);if(N==null)return c&&H!=null&&n.setItem(e,D.write(H)),H;if(!w&&a){const T=D.read(N);return typeof a=="function"?a(T,H):W==="object"&&!Array.isArray(T)?{...H,...T}:T}else return typeof N!="string"?N:D.read(N)}function $(w){if(!(w&&w.storageArea!==n)){if(w&&w.key==null){L.value=H;return}if(!(w&&w.key!==e)){p();try{(w==null?void 0:w.newValue)!==D.write(L.value)&&(L.value=F(w))}catch(N){_(N)}finally{w?In(y):y()}}}}function I(w){$(w.detail)}return L}function vi(e){return yi("(prefers-color-scheme: dark)",e)}function Ta(e={}){const{selector:t="html",attribute:n="class",initialValue:r="auto",window:s=Oe,storage:o,storageKey:i="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:a,disableTransition:f=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},m=vi({window:s}),_=re(()=>m.value?"dark":"light"),C=c||(i==null?pi(r):Wr(i,r,o,{window:s,listenToStorageChanges:l})),L=re(()=>C.value==="auto"?_.value:C.value),H=_i("updateHTMLAttrs",(y,M,A)=>{const F=typeof y=="string"?s==null?void 0:s.document.querySelector(y):mi(y);if(!F)return;let $;if(f&&($=s.document.createElement("style"),$.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),s.document.head.appendChild($)),M==="class"){const I=A.split(/\s/g);Object.values(h).flatMap(w=>(w||"").split(/\s/g)).filter(Boolean).forEach(w=>{I.includes(w)?F.classList.add(w):F.classList.remove(w)})}else F.setAttribute(M,A);f&&(s.getComputedStyle($).opacity,document.head.removeChild($))});function W(y){var M;H(t,n,(M=h[y])!=null?M:y)}function D(y){e.onChanged?e.onChanged(y,W):W(y)}Ne(L,D,{flush:"post",immediate:!0}),Kr(()=>D(L.value));const p=re({get(){return a?C.value:L.value},set(y){C.value=y}});try{return Object.assign(p,{store:C,system:_,state:L})}catch{return p}}function Aa(e={}){const{valueDark:t="dark",valueLight:n="",window:r=Oe}=e,s=Ta({...e,onChanged:(l,c)=>{var a;e.onChanged?(a=e.onChanged)==null||a.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),o=re(()=>s.system?s.system.value:vi({window:r}).value?"dark":"light");return re({get(){return s.value==="dark"},set(l){const c=l?"dark":"light";o.value===c?s.value="auto":s.value=c}})}function Zn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Ru(e,t,n={}){const{window:r=Oe}=n;return Wr(e,t,r==null?void 0:r.localStorage,n)}function bi(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const er=new WeakMap;function Ou(e,t=!1){const n=se(t);let r=null,s="";Ne(pi(e),l=>{const c=Zn(Fe(l));if(c){const a=c;if(er.get(a)||er.set(a,a.style.overflow),a.style.overflow!=="hidden"&&(s=a.style.overflow),a.style.overflow==="hidden")return n.value=!0;if(n.value)return a.style.overflow="hidden"}},{immediate:!0});const o=()=>{const l=Zn(Fe(e));!l||n.value||(ks&&(r=Ct(l,"touchmove",c=>{Ra(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},i=()=>{const l=Zn(Fe(e));!l||!n.value||(ks&&(r==null||r()),l.style.overflow=s,er.delete(l),n.value=!1)};return kr(i),re({get(){return n.value},set(l){l?o():i()}})}function Lu(e,t,n={}){const{window:r=Oe}=n;return Wr(e,t,r==null?void 0:r.sessionStorage,n)}function Iu(e={}){const{window:t=Oe,behavior:n="auto"}=e;if(!t)return{x:se(0),y:se(0)};const r=se(t.scrollX),s=se(t.scrollY),o=re({get(){return r.value},set(l){scrollTo({left:l,behavior:n})}}),i=re({get(){return s.value},set(l){scrollTo({top:l,behavior:n})}});return Ct(t,"scroll",()=>{r.value=t.scrollX,s.value=t.scrollY},{capture:!1,passive:!0}),{x:o,y:i}}function Mu(e={}){const{window:t=Oe,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:s=!0,includeScrollbar:o=!0}=e,i=se(n),l=se(r),c=()=>{t&&(o?(i.value=t.innerWidth,l.value=t.innerHeight):(i.value=t.document.documentElement.clientWidth,l.value=t.document.documentElement.clientHeight))};if(c(),Kr(c),Ct("resize",c,{passive:!0}),s){const a=yi("(orientation: portrait)");Ne(a,()=>c())}return{width:i,height:l}}var tr={BASE_URL:"/laravel-wallet/",MODE:"production",DEV:!1,PROD:!0,SSR:!1},nr={};const wi=/^(?:[a-z]+:|\/\/)/i,Oa="vitepress-theme-appearance",La=/#.*$/,Ia=/[?#].*$/,Ma=/(?:(^|\/)index)?\.(?:md|html)$/,he=typeof document<"u",Ei={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function Pa(e,t,n=!1){if(t===void 0)return!1;if(e=Ws(`/${e}`),n)return new RegExp(t).test(e);if(Ws(t)!==e)return!1;const r=t.match(La);return r?(he?location.hash:"")===r[0]:!0}function Ws(e){return decodeURI(e).replace(Ia,"").replace(Ma,"$1")}function Na(e){return wi.test(e)}function Fa(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!Na(n)&&Pa(t,`/${n}/`,!0))||"root"}function $a(e,t){var r,s,o,i,l,c,a;const n=Fa(e,t);return Object.assign({},e,{localeIndex:n,lang:((r=e.locales[n])==null?void 0:r.lang)??e.lang,dir:((s=e.locales[n])==null?void 0:s.dir)??e.dir,title:((o=e.locales[n])==null?void 0:o.title)??e.title,titleTemplate:((i=e.locales[n])==null?void 0:i.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:xi(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(a=e.locales[n])==null?void 0:a.themeConfig}})}function Ci(e,t){const n=t.title||e.title,r=t.titleTemplate??e.titleTemplate;if(typeof r=="string"&&r.includes(":title"))return r.replace(/:title/g,n);const s=Ha(e.title,r);return n===s.slice(3)?n:`${n}${s}`}function Ha(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function ja(e,t){const[n,r]=t;if(n!=="meta")return!1;const s=Object.entries(r)[0];return s==null?!1:e.some(([o,i])=>o===n&&i[s[0]]===s[1])}function xi(e,t){return[...e.filter(n=>!ja(t,n)),...t]}const Va=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Da=/^[a-z]:/i;function qs(e){const t=Da.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(Va,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const rr=new Set;function Ua(e){if(rr.size===0){const n=typeof process=="object"&&(nr==null?void 0:nr.VITE_EXTRA_EXTENSIONS)||(tr==null?void 0:tr.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(r=>rr.add(r))}const t=e.split(".").pop();return t==null||!rr.has(t.toLowerCase())}function Pu(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const Ba=Symbol(),at=Fr(ua);function Nu(e){const t=re(()=>$a(at.value,e.data.relativePath)),n=t.value.appearance,r=n==="force-dark"?se(!0):n?Aa({storageKey:Oa,initialValue:()=>typeof n=="string"?n:"auto",...typeof n=="object"?n:{}}):se(!1),s=se(he?location.hash:"");return he&&window.addEventListener("hashchange",()=>{s.value=location.hash}),Ne(()=>e.data,()=>{s.value=he?location.hash:""}),{site:t,theme:re(()=>t.value.themeConfig),page:re(()=>e.data),frontmatter:re(()=>e.data.frontmatter),params:re(()=>e.data.params),lang:re(()=>t.value.lang),dir:re(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:re(()=>t.value.localeIndex||"root"),title:re(()=>Ci(t.value,e.data)),description:re(()=>e.data.description||t.value.description),isDark:r,hash:re(()=>s.value)}}function ka(){const e=wt(Ba);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Ka(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Gs(e){return wi.test(e)||!e.startsWith("/")?e:Ka(at.value.base,e)}function Wa(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),he){const n="/laravel-wallet/";t=qs(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let r=__VP_HASH_MAP__[t.toLowerCase()];if(r||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",r=__VP_HASH_MAP__[t.toLowerCase()]),!r)return null;t=`${n}assets/${t}.${r}.js`}else t=`./${qs(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let gn=[];function Fu(e){gn.push(e),$n(()=>{gn=gn.filter(t=>t!==e)})}function qa(){let e=at.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=zs(e,n);else if(Array.isArray(e))for(const r of e){const s=zs(r,n);if(s){t=s;break}}return t}function zs(e,t){const n=document.querySelector(e);if(!n)return 0;const r=n.getBoundingClientRect().bottom;return r<0?0:r+t}const Ga=Symbol(),Si="http://a.com",za=()=>({path:"/",component:null,data:Ei});function $u(e,t){const n=On(za()),r={route:n,go:s};async function s(l=he?location.href:"/"){var c,a;l=sr(l),await((c=r.onBeforeRouteChange)==null?void 0:c.call(r,l))!==!1&&(he&&l!==sr(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await i(l),await((a=r.onAfterRouteChanged)==null?void 0:a.call(r,l)))}let o=null;async function i(l,c=0,a=!1){var m;if(await((m=r.onBeforePageLoad)==null?void 0:m.call(r,l))===!1)return;const f=new URL(l,Si),h=o=f.pathname;try{let _=await e(h);if(!_)throw new Error(`Page not found: ${h}`);if(o===h){o=null;const{default:C,__pageData:L}=_;if(!C)throw new Error(`Invalid route component: ${C}`);n.path=he?h:Gs(h),n.component=dn(C),n.data=dn(L),he&&In(()=>{let H=at.value.base+L.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!at.value.cleanUrls&&!H.endsWith("/")&&(H+=".html"),H!==f.pathname&&(f.pathname=H,l=H+f.search+f.hash,history.replaceState({},"",l)),f.hash&&!c){let W=null;try{W=document.getElementById(decodeURIComponent(f.hash).slice(1))}catch(D){console.warn(D)}if(W){Xs(W,f.hash);return}}window.scrollTo(0,c)})}}catch(_){if(!/fetch|Page not found/.test(_.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(_),!a)try{const C=await fetch(at.value.base+"hashmap.json");window.__VP_HASH_MAP__=await C.json(),await i(l,c,!0);return}catch{}if(o===h){o=null,n.path=he?h:Gs(h),n.component=t?dn(t):null;const C=he?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...Ei,relativePath:C}}}}return he&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.target.closest("button"))return;const a=l.target.closest("a");if(a&&!a.closest(".vp-raw")&&(a instanceof SVGElement||!a.download)){const{target:f}=a,{href:h,origin:m,pathname:_,hash:C,search:L}=new URL(a.href instanceof SVGAnimatedString?a.href.animVal:a.href,a.baseURI),H=new URL(location.href);!l.ctrlKey&&!l.shiftKey&&!l.altKey&&!l.metaKey&&!f&&m===H.origin&&Ua(_)&&(l.preventDefault(),_===H.pathname&&L===H.search?(C!==H.hash&&(history.pushState({},"",h),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:H.href,newURL:h}))),C?Xs(a,C,a.classList.contains("header-anchor")):window.scrollTo(0,0)):s(h))}},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await i(sr(location.href),l.state&&l.state.scrollPosition||0),(c=r.onAfterRouteChanged)==null||c.call(r,location.href))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),r}function Xa(){const e=wt(Ga);if(!e)throw new Error("useRouter() is called without provider.");return e}function Ti(){return Xa().route}function Xs(e,t,n=!1){let r=null;try{r=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(s){console.warn(s)}if(r){let s=function(){!n||Math.abs(i-window.scrollY)>window.innerHeight?window.scrollTo(0,i):window.scrollTo({left:0,top:i,behavior:"smooth"})};const o=parseInt(window.getComputedStyle(r).paddingTop,10),i=window.scrollY+r.getBoundingClientRect().top-qa()+o;requestAnimationFrame(s)}}function sr(e){const t=new URL(e,Si);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),at.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const or=()=>gn.forEach(e=>e()),Hu=Hr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Ti(),{site:n}=ka();return()=>br(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?br(t.component,{onVnodeMounted:or,onVnodeUpdated:or,onVnodeUnmounted:or}):"404 Page Not Found"])}}),ju=Hr({setup(e,{slots:t}){const n=se(!1);return xt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function Vu(){he&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const r=(n=t.parentElement)==null?void 0:n.parentElement;if(!r)return;const s=Array.from(r.querySelectorAll("input")).indexOf(t);if(s<0)return;const o=r.querySelector(".blocks");if(!o)return;const i=Array.from(o.children).find(a=>a.classList.contains("active"));if(!i)return;const l=o.children[s];if(!l||i===l)return;i.classList.remove("active"),l.classList.add("active");const c=r==null?void 0:r.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function Du(){if(he){const e=new WeakMap;window.addEventListener("click",t=>{var r;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const s=n.parentElement,o=(r=n.nextElementSibling)==null?void 0:r.nextElementSibling;if(!s||!o)return;const i=/language-(shellscript|shell|bash|sh|zsh)/.test(s.className),l=[".vp-copy-ignore",".diff.remove"],c=o.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(f=>f.remove());let a=c.textContent||"";i&&(a=a.replace(/^ *(\$|>) /gm,"").trim()),Ya(a).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const f=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,f)})}})}}async function Ya(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const r=document.getSelection(),s=r?r.rangeCount>0&&r.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),s&&(r.removeAllRanges(),r.addRange(s)),n&&n.focus()}}function Uu(e,t){let n=!0,r=[];const s=o=>{if(n){n=!1,o.forEach(l=>{const c=ir(l);for(const a of document.head.children)if(a.isEqualNode(c)){r.push(a);return}});return}const i=o.map(ir);r.forEach((l,c)=>{const a=i.findIndex(f=>f==null?void 0:f.isEqualNode(l??null));a!==-1?delete i[a]:(l==null||l.remove(),delete r[c])}),i.forEach(l=>l&&document.head.appendChild(l)),r=[...r,...i].filter(Boolean)};Ur(()=>{const o=e.data,i=t.value,l=o&&o.description,c=o&&o.frontmatter.head||[],a=Ci(i,o);a!==document.title&&(document.title=a);const f=l||i.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==f&&h.setAttribute("content",f):ir(["meta",{name:"description",content:f}]),s(xi(i.head,Qa(c)))})}function ir([e,t,n]){const r=document.createElement(e);for(const s in t)r.setAttribute(s,t[s]);return n&&(r.innerHTML=n),e==="script"&&!t.async&&(r.async=!1),r}function Ja(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function Qa(e){return e.filter(t=>!Ja(t))}const lr=new Set,Ai=()=>document.createElement("link"),Za=e=>{const t=Ai();t.rel="prefetch",t.href=e,document.head.appendChild(t)},eu=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let an;const tu=he&&(an=Ai())&&an.relList&&an.relList.supports&&an.relList.supports("prefetch")?Za:eu;function Bu(){if(!he||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const r=()=>{n&&n.disconnect(),n=new IntersectionObserver(o=>{o.forEach(i=>{if(i.isIntersecting){const l=i.target;n.unobserve(l);const{pathname:c}=l;if(!lr.has(c)){lr.add(c);const a=Wa(c);a&&tu(a)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(o=>{const{hostname:i,pathname:l}=new URL(o.href instanceof SVGAnimatedString?o.href.animVal:o.href,o.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||o.target!=="_blank"&&i===location.hostname&&(l!==location.pathname?n.observe(o):lr.add(l))})})};xt(r);const s=Ti();Ne(()=>s.path,r),$n(()=>{n&&n.disconnect()})}export{bu as $,hu as A,Fl as B,qa as C,ou as D,cu as E,_e as F,Fr as G,Fu as H,ie as I,iu as J,wi as K,Ti as L,Ec as M,wt as N,Mu as O,Sr as P,Au as Q,In as R,Iu as S,li as T,he as U,Ln as V,au as W,xu as X,Ou as Y,Xl as Z,Cu as _,ri as a,fu as a0,vu as a1,du as a2,mu as a3,Uu as a4,Ga as a5,Nu as a6,Ba as a7,Hu as a8,ju as a9,at as aa,Eu as ab,$u as ac,Wa as ad,Bu as ae,Du as af,Vu as ag,br as ah,mi as ai,kr as aj,Tu as ak,Lu as al,Ru as am,Su as an,Xa as ao,Ct as ap,Lo as aq,lu as ar,_u as as,de as at,pu as au,dn as av,wu as aw,Pu as ax,ei as b,gu as c,Hr as d,yu as e,Ua as f,Gs as g,re as h,Na as i,ni as j,bo as k,su as l,Pa as m,Tr as n,Qo as o,ru as p,yi as q,uu as r,se as s,nu as t,ka as u,Ne as v,Al as w,Ur as x,xt as y,$n as z}; diff --git a/docs/.vitepress/dist/assets/chunks/theme.TrL8JeO-.js b/docs/.vitepress/dist/assets/chunks/theme.TrL8JeO-.js new file mode 100644 index 000000000..423cfa7a5 --- /dev/null +++ b/docs/.vitepress/dist/assets/chunks/theme.TrL8JeO-.js @@ -0,0 +1,2 @@ +const __vite__fileDeps=["assets/chunks/VPLocalSearchBox.BxDsQnVT.js","assets/chunks/framework.OdeEVNy0.js"],__vite__mapDeps=i=>i.map(i=>__vite__fileDeps[i]); +import{d as _,o as a,c,r as l,n as N,a as D,t as I,b as $,w as d,e as f,T as ve,_ as b,u as Ue,i as Ge,f as je,g as pe,h as y,j as v,k as r,p as B,l as H,m as z,q as ie,s as w,v as j,x as Z,y as R,z as he,A as ye,B as ze,C as qe,D as q,F as M,E,G as Pe,H as x,I as m,J as W,K as Le,L as ee,M as Y,N as te,O as Ke,P as Ve,Q as le,R as We,S as Se,U as oe,V as Re,W as Je,X as Ye,Y as Te,Z as Ie,$ as Qe,a0 as Xe,a1 as Ze,a2 as xe}from"./framework.OdeEVNy0.js";const et=_({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(o){return(e,t)=>(a(),c("span",{class:N(["VPBadge",e.type])},[l(e.$slots,"default",{},()=>[D(I(e.text),1)])],2))}}),tt={key:0,class:"VPBackdrop"},ot=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(o){return(e,t)=>(a(),$(ve,{name:"fade"},{default:d(()=>[e.show?(a(),c("div",tt)):f("",!0)]),_:1}))}}),st=b(ot,[["__scopeId","data-v-c79a1216"]]),P=Ue;function nt(o,e){let t,n=!1;return()=>{t&&clearTimeout(t),n?t=setTimeout(o,e):(o(),(n=!0)&&setTimeout(()=>n=!1,e))}}function ce(o){return/^\//.test(o)?o:`/${o}`}function fe(o){const{pathname:e,search:t,hash:n,protocol:s}=new URL(o,"http://a.com");if(Ge(o)||o.startsWith("#")||!s.startsWith("http")||!je(e))return o;const{site:i}=P(),u=e.endsWith("/")||e.endsWith(".html")?o:o.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${n}`);return pe(u)}function J({correspondingLink:o=!1}={}){const{site:e,localeIndex:t,page:n,theme:s,hash:i}=P(),u=y(()=>{var p,g;return{label:(p=e.value.locales[t.value])==null?void 0:p.label,link:((g=e.value.locales[t.value])==null?void 0:g.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([p,g])=>u.value.label===g.label?[]:{text:g.label,link:at(g.link||(p==="root"?"/":`/${p}/`),s.value.i18nRouting!==!1&&o,n.value.relativePath.slice(u.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:u}}function at(o,e,t,n){return e?o.replace(/\/$/,"")+ce(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,n?".html":"")):o}const rt=o=>(B("data-v-d6be1790"),o=o(),H(),o),it={class:"NotFound"},lt={class:"code"},ct={class:"title"},ut=rt(()=>v("div",{class:"divider"},null,-1)),dt={class:"quote"},vt={class:"action"},pt=["href","aria-label"],ht=_({__name:"NotFound",setup(o){const{theme:e}=P(),{currentLang:t}=J();return(n,s)=>{var i,u,h,p,g;return a(),c("div",it,[v("p",lt,I(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),v("h1",ct,I(((u=r(e).notFound)==null?void 0:u.title)??"PAGE NOT FOUND"),1),ut,v("blockquote",dt,I(((h=r(e).notFound)==null?void 0:h.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),v("div",vt,[v("a",{class:"link",href:r(pe)(r(t).link),"aria-label":((p=r(e).notFound)==null?void 0:p.linkLabel)??"go to home"},I(((g=r(e).notFound)==null?void 0:g.linkText)??"Take me home"),9,pt)])])}}}),ft=b(ht,[["__scopeId","data-v-d6be1790"]]);function we(o,e){if(Array.isArray(o))return Q(o);if(o==null)return[];e=ce(e);const t=Object.keys(o).sort((s,i)=>i.split("/").length-s.split("/").length).find(s=>e.startsWith(ce(s))),n=t?o[t]:[];return Array.isArray(n)?Q(n):Q(n.items,n.base)}function _t(o){const e=[];let t=0;for(const n in o){const s=o[n];if(s.items){t=e.push(s);continue}e[t]||e.push({items:[]}),e[t].items.push(s)}return e}function mt(o){const e=[];function t(n){for(const s of n)s.text&&s.link&&e.push({text:s.text,link:s.link,docFooterText:s.docFooterText}),s.items&&t(s.items)}return t(o),e}function ue(o,e){return Array.isArray(e)?e.some(t=>ue(o,t)):z(o,e.link)?!0:e.items?ue(o,e.items):!1}function Q(o,e){return[...o].map(t=>{const n={...t},s=n.base||e;return s&&n.link&&(n.link=s+n.link),n.items&&(n.items=Q(n.items,s)),n})}function O(){const{frontmatter:o,page:e,theme:t}=P(),n=ie("(min-width: 960px)"),s=w(!1),i=y(()=>{const C=t.value.sidebar,S=e.value.relativePath;return C?we(C,S):[]}),u=w(i.value);j(i,(C,S)=>{JSON.stringify(C)!==JSON.stringify(S)&&(u.value=i.value)});const h=y(()=>o.value.sidebar!==!1&&u.value.length>0&&o.value.layout!=="home"),p=y(()=>g?o.value.aside==null?t.value.aside==="left":o.value.aside==="left":!1),g=y(()=>o.value.layout==="home"?!1:o.value.aside!=null?!!o.value.aside:t.value.aside!==!1),L=y(()=>h.value&&n.value),k=y(()=>h.value?_t(u.value):[]);function V(){s.value=!0}function T(){s.value=!1}function A(){s.value?T():V()}return{isOpen:s,sidebar:u,sidebarGroups:k,hasSidebar:h,hasAside:g,leftAside:p,isSidebarEnabled:L,open:V,close:T,toggle:A}}function kt(o,e){let t;Z(()=>{t=o.value?document.activeElement:void 0}),R(()=>{window.addEventListener("keyup",n)}),he(()=>{window.removeEventListener("keyup",n)});function n(s){s.key==="Escape"&&o.value&&(e(),t==null||t.focus())}}function bt(o){const{page:e,hash:t}=P(),n=w(!1),s=y(()=>o.value.collapsed!=null),i=y(()=>!!o.value.link),u=w(!1),h=()=>{u.value=z(e.value.relativePath,o.value.link)};j([e,o,t],h),R(h);const p=y(()=>u.value?!0:o.value.items?ue(e.value.relativePath,o.value.items):!1),g=y(()=>!!(o.value.items&&o.value.items.length));Z(()=>{n.value=!!(s.value&&o.value.collapsed)}),ye(()=>{(u.value||p.value)&&(n.value=!1)});function L(){s.value&&(n.value=!n.value)}return{collapsed:n,collapsible:s,isLink:i,isActiveLink:u,hasActiveLink:p,hasChildren:g,toggle:L}}function $t(){const{hasSidebar:o}=O(),e=ie("(min-width: 960px)"),t=ie("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:o.value?t.value:e.value)}}const de=[];function Ne(o){return typeof o.outline=="object"&&!Array.isArray(o.outline)&&o.outline.label||o.outlineTitle||"On this page"}function _e(o){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const n=Number(t.tagName[1]);return{element:t,title:gt(t),link:"#"+t.id,level:n}});return yt(e,o)}function gt(o){let e="";for(const t of o.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function yt(o,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[n,s]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;o=o.filter(u=>u.level>=n&&u.level<=s),de.length=0;for(const{element:u,link:h}of o)de.push({element:u,link:h});const i=[];e:for(let u=0;u=0;p--){const g=o[p];if(g.level{requestAnimationFrame(i),window.addEventListener("scroll",n)}),ze(()=>{u(location.hash)}),he(()=>{window.removeEventListener("scroll",n)});function i(){if(!t.value)return;const h=window.scrollY,p=window.innerHeight,g=document.body.offsetHeight,L=Math.abs(h+p-g)<1,k=de.map(({element:T,link:A})=>({link:A,top:Lt(T)})).filter(({top:T})=>!Number.isNaN(T)).sort((T,A)=>T.top-A.top);if(!k.length){u(null);return}if(h<1){u(null);return}if(L){u(k[k.length-1].link);return}let V=null;for(const{link:T,top:A}of k){if(A>h+qe()+4)break;V=T}u(V)}function u(h){s&&s.classList.remove("active"),h==null?s=null:s=o.value.querySelector(`a[href="${decodeURIComponent(h)}"]`);const p=s;p?(p.classList.add("active"),e.value.style.top=p.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Lt(o){let e=0;for(;o!==document.body;){if(o===null)return NaN;e+=o.offsetTop,o=o.offsetParent}return e}const Vt=["href","title"],St=_({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(o){function e({target:t}){const n=t.href.split("#")[1],s=document.getElementById(decodeURIComponent(n));s==null||s.focus({preventScroll:!0})}return(t,n)=>{const s=q("VPDocOutlineItem",!0);return a(),c("ul",{class:N(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),c(M,null,E(t.headers,({children:i,link:u,title:h})=>(a(),c("li",null,[v("a",{class:"outline-link",href:u,onClick:e,title:h},I(h),9,Vt),i!=null&&i.length?(a(),$(s,{key:0,headers:i},null,8,["headers"])):f("",!0)]))),256))],2)}}}),Me=b(St,[["__scopeId","data-v-b933a997"]]),Tt={class:"content"},It={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},wt=_({__name:"VPDocAsideOutline",setup(o){const{frontmatter:e,theme:t}=P(),n=Pe([]);x(()=>{n.value=_e(e.value.outline??t.value.outline)});const s=w(),i=w();return Pt(s,i),(u,h)=>(a(),c("nav",{"aria-labelledby":"doc-outline-aria-label",class:N(["VPDocAsideOutline",{"has-outline":n.value.length>0}]),ref_key:"container",ref:s},[v("div",Tt,[v("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),v("div",It,I(r(Ne)(r(t))),1),m(Me,{headers:n.value,root:!0},null,8,["headers"])])],2))}}),Nt=b(wt,[["__scopeId","data-v-a5bbad30"]]),Mt={class:"VPDocAsideCarbonAds"},At=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(o){const e=()=>null;return(t,n)=>(a(),c("div",Mt,[m(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),Ct=o=>(B("data-v-3f215769"),o=o(),H(),o),Bt={class:"VPDocAside"},Ht=Ct(()=>v("div",{class:"spacer"},null,-1)),Et=_({__name:"VPDocAside",setup(o){const{theme:e}=P();return(t,n)=>(a(),c("div",Bt,[l(t.$slots,"aside-top",{},void 0,!0),l(t.$slots,"aside-outline-before",{},void 0,!0),m(Nt),l(t.$slots,"aside-outline-after",{},void 0,!0),Ht,l(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),$(At,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):f("",!0),l(t.$slots,"aside-ads-after",{},void 0,!0),l(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Ft=b(Et,[["__scopeId","data-v-3f215769"]]);function Dt(){const{theme:o,page:e}=P();return y(()=>{const{text:t="Edit this page",pattern:n=""}=o.value.editLink||{};let s;return typeof n=="function"?s=n(e.value):s=n.replace(/:path/g,e.value.filePath),{url:s,text:t}})}function Ot(){const{page:o,theme:e,frontmatter:t}=P();return y(()=>{var g,L,k,V,T,A,C,S;const n=we(e.value.sidebar,o.value.relativePath),s=mt(n),i=Ut(s,U=>U.link.replace(/[?#].*$/,"")),u=i.findIndex(U=>z(o.value.relativePath,U.link)),h=((g=e.value.docFooter)==null?void 0:g.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((L=e.value.docFooter)==null?void 0:L.next)===!1&&!t.value.next||t.value.next===!1;return{prev:h?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((k=i[u-1])==null?void 0:k.docFooterText)??((V=i[u-1])==null?void 0:V.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((T=i[u-1])==null?void 0:T.link)},next:p?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=i[u+1])==null?void 0:A.docFooterText)??((C=i[u+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((S=i[u+1])==null?void 0:S.link)}}})}function Ut(o,e){const t=new Set;return o.filter(n=>{const s=e(n);return t.has(s)?!1:t.add(s)})}const F=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.tag??(e.href?"a":"span")),n=y(()=>e.href&&Le.test(e.href)||e.target==="_blank");return(s,i)=>(a(),$(W(t.value),{class:N(["VPLink",{link:s.href,"vp-external-link-icon":n.value,"no-icon":s.noIcon}]),href:s.href?r(fe)(s.href):void 0,target:s.target??(n.value?"_blank":void 0),rel:s.rel??(n.value?"noreferrer":void 0)},{default:d(()=>[l(s.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Gt={class:"VPLastUpdated"},jt=["datetime"],zt=_({__name:"VPDocFooterLastUpdated",setup(o){const{theme:e,page:t,frontmatter:n,lang:s}=P(),i=y(()=>new Date(n.value.lastUpdated??t.value.lastUpdated)),u=y(()=>i.value.toISOString()),h=w("");return R(()=>{Z(()=>{var p,g,L;h.value=new Intl.DateTimeFormat((g=(p=e.value.lastUpdated)==null?void 0:p.formatOptions)!=null&&g.forceLocale?s.value:void 0,((L=e.value.lastUpdated)==null?void 0:L.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(i.value)})}),(p,g)=>{var L;return a(),c("p",Gt,[D(I(((L=r(e).lastUpdated)==null?void 0:L.text)||r(e).lastUpdatedText||"Last updated")+": ",1),v("time",{datetime:u.value},I(h.value),9,jt)])}}}),qt=b(zt,[["__scopeId","data-v-7e05ebdb"]]),Ae=o=>(B("data-v-d4a0bba5"),o=o(),H(),o),Kt={key:0,class:"VPDocFooter"},Wt={key:0,class:"edit-info"},Rt={key:0,class:"edit-link"},Jt=Ae(()=>v("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),Yt={key:1,class:"last-updated"},Qt={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},Xt=Ae(()=>v("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),Zt={class:"pager"},xt=["innerHTML"],eo=["innerHTML"],to={class:"pager"},oo=["innerHTML"],so=["innerHTML"],no=_({__name:"VPDocFooter",setup(o){const{theme:e,page:t,frontmatter:n}=P(),s=Dt(),i=Ot(),u=y(()=>e.value.editLink&&n.value.editLink!==!1),h=y(()=>t.value.lastUpdated&&n.value.lastUpdated!==!1),p=y(()=>u.value||h.value||i.value.prev||i.value.next);return(g,L)=>{var k,V,T,A;return p.value?(a(),c("footer",Kt,[l(g.$slots,"doc-footer-before",{},void 0,!0),u.value||h.value?(a(),c("div",Wt,[u.value?(a(),c("div",Rt,[m(F,{class:"edit-link-button",href:r(s).url,"no-icon":!0},{default:d(()=>[Jt,D(" "+I(r(s).text),1)]),_:1},8,["href"])])):f("",!0),h.value?(a(),c("div",Yt,[m(qt)])):f("",!0)])):f("",!0),(k=r(i).prev)!=null&&k.link||(V=r(i).next)!=null&&V.link?(a(),c("nav",Qt,[Xt,v("div",Zt,[(T=r(i).prev)!=null&&T.link?(a(),$(F,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:d(()=>{var C;return[v("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,xt),v("span",{class:"title",innerHTML:r(i).prev.text},null,8,eo)]}),_:1},8,["href"])):f("",!0)]),v("div",to,[(A=r(i).next)!=null&&A.link?(a(),$(F,{key:0,class:"pager-link next",href:r(i).next.link},{default:d(()=>{var C;return[v("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,oo),v("span",{class:"title",innerHTML:r(i).next.text},null,8,so)]}),_:1},8,["href"])):f("",!0)])])):f("",!0)])):f("",!0)}}}),ao=b(no,[["__scopeId","data-v-d4a0bba5"]]),ro=o=>(B("data-v-39a288b8"),o=o(),H(),o),io={class:"container"},lo=ro(()=>v("div",{class:"aside-curtain"},null,-1)),co={class:"aside-container"},uo={class:"aside-content"},vo={class:"content"},po={class:"content-container"},ho={class:"main"},fo=_({__name:"VPDoc",setup(o){const{theme:e}=P(),t=ee(),{hasSidebar:n,hasAside:s,leftAside:i}=O(),u=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(h,p)=>{const g=q("Content");return a(),c("div",{class:N(["VPDoc",{"has-sidebar":r(n),"has-aside":r(s)}])},[l(h.$slots,"doc-top",{},void 0,!0),v("div",io,[r(s)?(a(),c("div",{key:0,class:N(["aside",{"left-aside":r(i)}])},[lo,v("div",co,[v("div",uo,[m(Ft,null,{"aside-top":d(()=>[l(h.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[l(h.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[l(h.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(h.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(h.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(h.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),v("div",vo,[v("div",po,[l(h.$slots,"doc-before",{},void 0,!0),v("main",ho,[m(g,{class:N(["vp-doc",[u.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),m(ao,null,{"doc-footer-before":d(()=>[l(h.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),l(h.$slots,"doc-after",{},void 0,!0)])])]),l(h.$slots,"doc-bottom",{},void 0,!0)],2)}}}),_o=b(fo,[["__scopeId","data-v-39a288b8"]]),mo=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(o){const e=o,t=y(()=>e.href&&Le.test(e.href)),n=y(()=>e.tag||e.href?"a":"button");return(s,i)=>(a(),$(W(n.value),{class:N(["VPButton",[s.size,s.theme]]),href:s.href?r(fe)(s.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:d(()=>[D(I(s.text),1)]),_:1},8,["class","href","target","rel"]))}}),ko=b(mo,[["__scopeId","data-v-cad61b99"]]),bo=["src","alt"],$o=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(o){return(e,t)=>{const n=q("VPImage",!0);return e.image?(a(),c(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),c("img",Y({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(pe)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,bo)):(a(),c(M,{key:1},[m(n,Y({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),m(n,Y({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}}),X=b($o,[["__scopeId","data-v-8426fc1a"]]),go=o=>(B("data-v-303bb580"),o=o(),H(),o),yo={class:"container"},Po={class:"main"},Lo={key:0,class:"name"},Vo=["innerHTML"],So=["innerHTML"],To=["innerHTML"],Io={key:0,class:"actions"},wo={key:0,class:"image"},No={class:"image-container"},Mo=go(()=>v("div",{class:"image-bg"},null,-1)),Ao=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(o){const e=te("hero-image-slot-exists");return(t,n)=>(a(),c("div",{class:N(["VPHero",{"has-image":t.image||r(e)}])},[v("div",yo,[v("div",Po,[l(t.$slots,"home-hero-info-before",{},void 0,!0),l(t.$slots,"home-hero-info",{},()=>[t.name?(a(),c("h1",Lo,[v("span",{innerHTML:t.name,class:"clip"},null,8,Vo)])):f("",!0),t.text?(a(),c("p",{key:1,innerHTML:t.text,class:"text"},null,8,So)):f("",!0),t.tagline?(a(),c("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,To)):f("",!0)],!0),l(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),c("div",Io,[(a(!0),c(M,null,E(t.actions,s=>(a(),c("div",{key:s.link,class:"action"},[m(ko,{tag:"a",size:"medium",theme:s.theme,text:s.text,href:s.link,target:s.target,rel:s.rel},null,8,["theme","text","href","target","rel"])]))),128))])):f("",!0),l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),c("div",wo,[v("div",No,[Mo,l(t.$slots,"home-hero-image",{},()=>[t.image?(a(),$(X,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}}),Co=b(Ao,[["__scopeId","data-v-303bb580"]]),Bo=_({__name:"VPHomeHero",setup(o){const{frontmatter:e}=P();return(t,n)=>r(e).hero?(a(),$(Co,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":d(()=>[l(t.$slots,"home-hero-info-before")]),"home-hero-info":d(()=>[l(t.$slots,"home-hero-info")]),"home-hero-info-after":d(()=>[l(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":d(()=>[l(t.$slots,"home-hero-actions-after")]),"home-hero-image":d(()=>[l(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Ho=o=>(B("data-v-a3976bdc"),o=o(),H(),o),Eo={class:"box"},Fo={key:0,class:"icon"},Do=["innerHTML"],Oo=["innerHTML"],Uo=["innerHTML"],Go={key:4,class:"link-text"},jo={class:"link-text-value"},zo=Ho(()=>v("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),qo=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(o){return(e,t)=>(a(),$(F,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:d(()=>[v("article",Eo,[typeof e.icon=="object"&&e.icon.wrap?(a(),c("div",Fo,[m(X,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),$(X,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),c("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Do)):f("",!0),v("h2",{class:"title",innerHTML:e.title},null,8,Oo),e.details?(a(),c("p",{key:3,class:"details",innerHTML:e.details},null,8,Uo)):f("",!0),e.linkText?(a(),c("div",Go,[v("p",jo,[D(I(e.linkText)+" ",1),zo])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),Ko=b(qo,[["__scopeId","data-v-a3976bdc"]]),Wo={key:0,class:"VPFeatures"},Ro={class:"container"},Jo={class:"items"},Yo=_({__name:"VPFeatures",props:{features:{}},setup(o){const e=o,t=y(()=>{const n=e.features.length;if(n){if(n===2)return"grid-2";if(n===3)return"grid-3";if(n%3===0)return"grid-6";if(n>3)return"grid-4"}else return});return(n,s)=>n.features?(a(),c("div",Wo,[v("div",Ro,[v("div",Jo,[(a(!0),c(M,null,E(n.features,i=>(a(),c("div",{key:i.title,class:N(["item",[t.value]])},[m(Ko,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}}),Qo=b(Yo,[["__scopeId","data-v-a6181336"]]),Xo=_({__name:"VPHomeFeatures",setup(o){const{frontmatter:e}=P();return(t,n)=>r(e).features?(a(),$(Qo,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):f("",!0)}}),Zo=_({__name:"VPHomeContent",setup(o){const{width:e}=Ke({initialWidth:0,includeScrollbar:!1});return(t,n)=>(a(),c("div",{class:"vp-doc container",style:Ve(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[l(t.$slots,"default",{},void 0,!0)],4))}}),xo=b(Zo,[["__scopeId","data-v-8e2d4988"]]),es={class:"VPHome"},ts=_({__name:"VPHome",setup(o){const{frontmatter:e}=P();return(t,n)=>{const s=q("Content");return a(),c("div",es,[l(t.$slots,"home-hero-before",{},void 0,!0),m(Bo,null,{"home-hero-info-before":d(()=>[l(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),l(t.$slots,"home-hero-after",{},void 0,!0),l(t.$slots,"home-features-before",{},void 0,!0),m(Xo),l(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),$(xo,{key:0},{default:d(()=>[m(s)]),_:1})):(a(),$(s,{key:1}))])}}}),os=b(ts,[["__scopeId","data-v-686f80a6"]]),ss={},ns={class:"VPPage"};function as(o,e){const t=q("Content");return a(),c("div",ns,[l(o.$slots,"page-top"),m(t),l(o.$slots,"page-bottom")])}const rs=b(ss,[["render",as]]),is=_({__name:"VPContent",setup(o){const{page:e,frontmatter:t}=P(),{hasSidebar:n}=O();return(s,i)=>(a(),c("div",{class:N(["VPContent",{"has-sidebar":r(n),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?l(s.$slots,"not-found",{key:0},()=>[m(ft)],!0):r(t).layout==="page"?(a(),$(rs,{key:1},{"page-top":d(()=>[l(s.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[l(s.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),$(os,{key:2},{"home-hero-before":d(()=>[l(s.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[l(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(s.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[l(s.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[l(s.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[l(s.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),$(W(r(t).layout),{key:3})):(a(),$(_o,{key:4},{"doc-top":d(()=>[l(s.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[l(s.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":d(()=>[l(s.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[l(s.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[l(s.$slots,"doc-after",{},void 0,!0)]),"aside-top":d(()=>[l(s.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":d(()=>[l(s.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(s.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(s.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(s.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":d(()=>[l(s.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),ls=b(is,[["__scopeId","data-v-1428d186"]]),cs={class:"container"},us=["innerHTML"],ds=["innerHTML"],vs=_({__name:"VPFooter",setup(o){const{theme:e,frontmatter:t}=P(),{hasSidebar:n}=O();return(s,i)=>r(e).footer&&r(t).footer!==!1?(a(),c("footer",{key:0,class:N(["VPFooter",{"has-sidebar":r(n)}])},[v("div",cs,[r(e).footer.message?(a(),c("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,us)):f("",!0),r(e).footer.copyright?(a(),c("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,ds)):f("",!0)])],2)):f("",!0)}}),ps=b(vs,[["__scopeId","data-v-e315a0ad"]]);function hs(){const{theme:o,frontmatter:e}=P(),t=Pe([]),n=y(()=>t.value.length>0);return x(()=>{t.value=_e(e.value.outline??o.value.outline)}),{headers:t,hasLocalNav:n}}const fs=o=>(B("data-v-17a5e62e"),o=o(),H(),o),_s={class:"menu-text"},ms=fs(()=>v("span",{class:"vpi-chevron-right icon"},null,-1)),ks={class:"header"},bs={class:"outline"},$s=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(o){const e=o,{theme:t}=P(),n=w(!1),s=w(0),i=w(),u=w();function h(k){var V;(V=i.value)!=null&&V.contains(k.target)||(n.value=!1)}j(n,k=>{if(k){document.addEventListener("click",h);return}document.removeEventListener("click",h)}),le("Escape",()=>{n.value=!1}),x(()=>{n.value=!1});function p(){n.value=!n.value,s.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function g(k){k.target.classList.contains("outline-link")&&(u.value&&(u.value.style.transition="none"),We(()=>{n.value=!1}))}function L(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(k,V)=>(a(),c("div",{class:"VPLocalNavOutlineDropdown",style:Ve({"--vp-vh":s.value+"px"}),ref_key:"main",ref:i},[k.headers.length>0?(a(),c("button",{key:0,onClick:p,class:N({open:n.value})},[v("span",_s,I(r(Ne)(r(t))),1),ms],2)):(a(),c("button",{key:1,onClick:L},I(r(t).returnToTopLabel||"Return to top"),1)),m(ve,{name:"flyout"},{default:d(()=>[n.value?(a(),c("div",{key:0,ref_key:"items",ref:u,class:"items",onClick:g},[v("div",ks,[v("a",{class:"top-link",href:"#",onClick:L},I(r(t).returnToTopLabel||"Return to top"),1)]),v("div",bs,[m(Me,{headers:k.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}}),gs=b($s,[["__scopeId","data-v-17a5e62e"]]),ys=o=>(B("data-v-a6f0e41e"),o=o(),H(),o),Ps={class:"container"},Ls=["aria-expanded"],Vs=ys(()=>v("span",{class:"vpi-align-left menu-icon"},null,-1)),Ss={class:"menu-text"},Ts=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(o){const{theme:e,frontmatter:t}=P(),{hasSidebar:n}=O(),{headers:s}=hs(),{y:i}=Se(),u=w(0);R(()=>{u.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),x(()=>{s.value=_e(t.value.outline??e.value.outline)});const h=y(()=>s.value.length===0),p=y(()=>h.value&&!n.value),g=y(()=>({VPLocalNav:!0,"has-sidebar":n.value,empty:h.value,fixed:p.value}));return(L,k)=>r(t).layout!=="home"&&(!p.value||r(i)>=u.value)?(a(),c("div",{key:0,class:N(g.value)},[v("div",Ps,[r(n)?(a(),c("button",{key:0,class:"menu","aria-expanded":L.open,"aria-controls":"VPSidebarNav",onClick:k[0]||(k[0]=V=>L.$emit("open-menu"))},[Vs,v("span",Ss,I(r(e).sidebarMenuLabel||"Menu"),1)],8,Ls)):f("",!0),m(gs,{headers:r(s),navHeight:u.value},null,8,["headers","navHeight"])])],2)):f("",!0)}}),Is=b(Ts,[["__scopeId","data-v-a6f0e41e"]]);function ws(){const o=w(!1);function e(){o.value=!0,window.addEventListener("resize",s)}function t(){o.value=!1,window.removeEventListener("resize",s)}function n(){o.value?t():e()}function s(){window.outerWidth>=768&&t()}const i=ee();return j(()=>i.path,t),{isScreenOpen:o,openScreen:e,closeScreen:t,toggleScreen:n}}const Ns={},Ms={class:"VPSwitch",type:"button",role:"switch"},As={class:"check"},Cs={key:0,class:"icon"};function Bs(o,e){return a(),c("button",Ms,[v("span",As,[o.$slots.default?(a(),c("span",Cs,[l(o.$slots,"default",{},void 0,!0)])):f("",!0)])])}const Hs=b(Ns,[["render",Bs],["__scopeId","data-v-1d5665e3"]]),Ce=o=>(B("data-v-d1f28634"),o=o(),H(),o),Es=Ce(()=>v("span",{class:"vpi-sun sun"},null,-1)),Fs=Ce(()=>v("span",{class:"vpi-moon moon"},null,-1)),Ds=_({__name:"VPSwitchAppearance",setup(o){const{isDark:e,theme:t}=P(),n=te("toggle-appearance",()=>{e.value=!e.value}),s=y(()=>e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme");return(i,u)=>(a(),$(Hs,{title:s.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(n)},{default:d(()=>[Es,Fs]),_:1},8,["title","aria-checked","onClick"]))}}),me=b(Ds,[["__scopeId","data-v-d1f28634"]]),Os={key:0,class:"VPNavBarAppearance"},Us=_({__name:"VPNavBarAppearance",setup(o){const{site:e}=P();return(t,n)=>r(e).appearance&&r(e).appearance!=="force-dark"?(a(),c("div",Os,[m(me)])):f("",!0)}}),Gs=b(Us,[["__scopeId","data-v-e6aabb21"]]),ke=w();let Be=!1,re=0;function js(o){const e=w(!1);if(oe){!Be&&zs(),re++;const t=j(ke,n=>{var s,i,u;n===o.el.value||(s=o.el.value)!=null&&s.contains(n)?(e.value=!0,(i=o.onFocus)==null||i.call(o)):(e.value=!1,(u=o.onBlur)==null||u.call(o))});he(()=>{t(),re--,re||qs()})}return Re(e)}function zs(){document.addEventListener("focusin",He),Be=!0,ke.value=document.activeElement}function qs(){document.removeEventListener("focusin",He)}function He(){ke.value=document.activeElement}const Ks={class:"VPMenuLink"},Ws=_({__name:"VPMenuLink",props:{item:{}},setup(o){const{page:e}=P();return(t,n)=>(a(),c("div",Ks,[m(F,{class:N({active:r(z)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:d(()=>[D(I(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),se=b(Ws,[["__scopeId","data-v-43f1e123"]]),Rs={class:"VPMenuGroup"},Js={key:0,class:"title"},Ys=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Rs,[e.text?(a(),c("p",Js,I(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,n=>(a(),c(M,null,["link"in n?(a(),$(se,{key:0,item:n},null,8,["item"])):f("",!0)],64))),256))]))}}),Qs=b(Ys,[["__scopeId","data-v-69e747b5"]]),Xs={class:"VPMenu"},Zs={key:0,class:"items"},xs=_({__name:"VPMenu",props:{items:{}},setup(o){return(e,t)=>(a(),c("div",Xs,[e.items?(a(),c("div",Zs,[(a(!0),c(M,null,E(e.items,n=>(a(),c(M,{key:n.text},["link"in n?(a(),$(se,{key:0,item:n},null,8,["item"])):(a(),$(Qs,{key:1,text:n.text,items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0),l(e.$slots,"default",{},void 0,!0)]))}}),en=b(xs,[["__scopeId","data-v-e7ea1737"]]),tn=o=>(B("data-v-b6c34ac9"),o=o(),H(),o),on=["aria-expanded","aria-label"],sn={key:0,class:"text"},nn=["innerHTML"],an=tn(()=>v("span",{class:"vpi-chevron-down text-icon"},null,-1)),rn={key:1,class:"vpi-more-horizontal icon"},ln={class:"menu"},cn=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(o){const e=w(!1),t=w();js({el:t,onBlur:n});function n(){e.value=!1}return(s,i)=>(a(),c("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=u=>e.value=!0),onMouseleave:i[2]||(i[2]=u=>e.value=!1)},[v("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":s.label,onClick:i[0]||(i[0]=u=>e.value=!e.value)},[s.button||s.icon?(a(),c("span",sn,[s.icon?(a(),c("span",{key:0,class:N([s.icon,"option-icon"])},null,2)):f("",!0),s.button?(a(),c("span",{key:1,innerHTML:s.button},null,8,nn)):f("",!0),an])):(a(),c("span",rn))],8,on),v("div",ln,[m(en,{items:s.items},{default:d(()=>[l(s.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),be=b(cn,[["__scopeId","data-v-b6c34ac9"]]),un=["href","aria-label","innerHTML"],dn=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(o){const e=o,t=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(n,s)=>(a(),c("a",{class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,un))}}),vn=b(dn,[["__scopeId","data-v-eee4e7cb"]]),pn={class:"VPSocialLinks"},hn=_({__name:"VPSocialLinks",props:{links:{}},setup(o){return(e,t)=>(a(),c("div",pn,[(a(!0),c(M,null,E(e.links,({link:n,icon:s,ariaLabel:i})=>(a(),$(vn,{key:n,icon:s,link:n,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),$e=b(hn,[["__scopeId","data-v-7bc22406"]]),fn={key:0,class:"group translations"},_n={class:"trans-title"},mn={key:1,class:"group"},kn={class:"item appearance"},bn={class:"label"},$n={class:"appearance-action"},gn={key:2,class:"group"},yn={class:"item social-links"},Pn=_({__name:"VPNavBarExtra",setup(o){const{site:e,theme:t}=P(),{localeLinks:n,currentLang:s}=J({correspondingLink:!0}),i=y(()=>n.value.length&&s.value.label||e.value.appearance||t.value.socialLinks);return(u,h)=>i.value?(a(),$(be,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:d(()=>[r(n).length&&r(s).label?(a(),c("div",fn,[v("p",_n,I(r(s).label),1),(a(!0),c(M,null,E(r(n),p=>(a(),$(se,{key:p.link,item:p},null,8,["item"]))),128))])):f("",!0),r(e).appearance&&r(e).appearance!=="force-dark"?(a(),c("div",mn,[v("div",kn,[v("p",bn,I(r(t).darkModeSwitchLabel||"Appearance"),1),v("div",$n,[m(me)])])])):f("",!0),r(t).socialLinks?(a(),c("div",gn,[v("div",yn,[m($e,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}}),Ln=b(Pn,[["__scopeId","data-v-d0bd9dde"]]),Vn=o=>(B("data-v-e5dd9c1c"),o=o(),H(),o),Sn=["aria-expanded"],Tn=Vn(()=>v("span",{class:"container"},[v("span",{class:"top"}),v("span",{class:"middle"}),v("span",{class:"bottom"})],-1)),In=[Tn],wn=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(o){return(e,t)=>(a(),c("button",{type:"button",class:N(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=n=>e.$emit("click"))},In,10,Sn))}}),Nn=b(wn,[["__scopeId","data-v-e5dd9c1c"]]),Mn=["innerHTML"],An=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(o){const{page:e}=P();return(t,n)=>(a(),$(F,{class:N({VPNavBarMenuLink:!0,active:r(z)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:d(()=>[v("span",{innerHTML:t.item.text},null,8,Mn)]),_:1},8,["class","href","noIcon","target","rel"]))}}),Cn=b(An,[["__scopeId","data-v-9c663999"]]),Bn=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(o){const e=o,{page:t}=P(),n=i=>"link"in i?z(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(n),s=y(()=>n(e.item));return(i,u)=>(a(),$(be,{class:N({VPNavBarMenuGroup:!0,active:r(z)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||s.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),Hn=o=>(B("data-v-7f418b0f"),o=o(),H(),o),En={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Fn=Hn(()=>v("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),Dn=_({__name:"VPNavBarMenu",setup(o){const{theme:e}=P();return(t,n)=>r(e).nav?(a(),c("nav",En,[Fn,(a(!0),c(M,null,E(r(e).nav,s=>(a(),c(M,{key:s.text},["link"in s?(a(),$(Cn,{key:0,item:s},null,8,["item"])):(a(),$(Bn,{key:1,item:s},null,8,["item"]))],64))),128))])):f("",!0)}}),On=b(Dn,[["__scopeId","data-v-7f418b0f"]]);function Un(o){const{localeIndex:e,theme:t}=P();function n(s){var A,C,S;const i=s.split("."),u=(A=t.value.search)==null?void 0:A.options,h=u&&typeof u=="object",p=h&&((S=(C=u.locales)==null?void 0:C[e.value])==null?void 0:S.translations)||null,g=h&&u.translations||null;let L=p,k=g,V=o;const T=i.pop();for(const U of i){let G=null;const K=V==null?void 0:V[U];K&&(G=V=K);const ne=k==null?void 0:k[U];ne&&(G=k=ne);const ae=L==null?void 0:L[U];ae&&(G=L=ae),K||(V=G),ne||(k=G),ae||(L=G)}return(L==null?void 0:L[T])??(k==null?void 0:k[T])??(V==null?void 0:V[T])??""}return n}const Gn=["aria-label"],jn={class:"DocSearch-Button-Container"},zn=v("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),qn={class:"DocSearch-Button-Placeholder"},Kn=v("span",{class:"DocSearch-Button-Keys"},[v("kbd",{class:"DocSearch-Button-Key"}),v("kbd",{class:"DocSearch-Button-Key"},"K")],-1),ge=_({__name:"VPNavBarSearchButton",setup(o){const t=Un({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(n,s)=>(a(),c("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[v("span",jn,[zn,v("span",qn,I(r(t)("button.buttonText")),1)]),Kn],8,Gn))}}),Wn={class:"VPNavBarSearch"},Rn={id:"local-search"},Jn={key:1,id:"docsearch"},Yn=_({__name:"VPNavBarSearch",setup(o){const e=Je(()=>Ye(()=>import("./VPLocalSearchBox.BxDsQnVT.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:n}=P(),s=w(!1),i=w(!1);R(()=>{});function u(){s.value||(s.value=!0,setTimeout(h,16))}function h(){const k=new Event("keydown");k.key="k",k.metaKey=!0,window.dispatchEvent(k),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||h()},16)}function p(k){const V=k.target,T=V.tagName;return V.isContentEditable||T==="INPUT"||T==="SELECT"||T==="TEXTAREA"}const g=w(!1);le("k",k=>{(k.ctrlKey||k.metaKey)&&(k.preventDefault(),g.value=!0)}),le("/",k=>{p(k)||(k.preventDefault(),g.value=!0)});const L="local";return(k,V)=>{var T;return a(),c("div",Wn,[r(L)==="local"?(a(),c(M,{key:0},[g.value?(a(),$(r(e),{key:0,onClose:V[0]||(V[0]=A=>g.value=!1)})):f("",!0),v("div",Rn,[m(ge,{onClick:V[1]||(V[1]=A=>g.value=!0)})])],64)):r(L)==="algolia"?(a(),c(M,{key:1},[s.value?(a(),$(r(t),{key:0,algolia:((T=r(n).search)==null?void 0:T.options)??r(n).algolia,onVnodeBeforeMount:V[2]||(V[2]=A=>i.value=!0)},null,8,["algolia"])):f("",!0),i.value?f("",!0):(a(),c("div",Jn,[m(ge,{onClick:u})]))],64)):f("",!0)])}}}),Qn=_({__name:"VPNavBarSocialLinks",setup(o){const{theme:e}=P();return(t,n)=>r(e).socialLinks?(a(),$($e,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),Xn=b(Qn,[["__scopeId","data-v-0394ad82"]]),Zn=["href","rel","target"],xn={key:1},ea={key:2},ta=_({__name:"VPNavBarTitle",setup(o){const{site:e,theme:t}=P(),{hasSidebar:n}=O(),{currentLang:s}=J(),i=y(()=>{var p;return typeof t.value.logoLink=="string"?t.value.logoLink:(p=t.value.logoLink)==null?void 0:p.link}),u=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.rel}),h=y(()=>{var p;return typeof t.value.logoLink=="string"||(p=t.value.logoLink)==null?void 0:p.target});return(p,g)=>(a(),c("div",{class:N(["VPNavBarTitle",{"has-sidebar":r(n)}])},[v("a",{class:"title",href:i.value??r(fe)(r(s).link),rel:u.value,target:h.value},[l(p.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),$(X,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):f("",!0),r(t).siteTitle?(a(),c("span",xn,I(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),c("span",ea,I(r(e).title),1)):f("",!0),l(p.$slots,"nav-bar-title-after",{},void 0,!0)],8,Zn)],2))}}),oa=b(ta,[["__scopeId","data-v-ab179fa1"]]),sa={class:"items"},na={class:"title"},aa=_({__name:"VPNavBarTranslations",setup(o){const{theme:e}=P(),{localeLinks:t,currentLang:n}=J({correspondingLink:!0});return(s,i)=>r(t).length&&r(n).label?(a(),$(be,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:d(()=>[v("div",sa,[v("p",na,I(r(n).label),1),(a(!0),c(M,null,E(r(t),u=>(a(),$(se,{key:u.link,item:u},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}}),ra=b(aa,[["__scopeId","data-v-88af2de4"]]),ia=o=>(B("data-v-ccf7ddec"),o=o(),H(),o),la={class:"wrapper"},ca={class:"container"},ua={class:"title"},da={class:"content"},va={class:"content-body"},pa=ia(()=>v("div",{class:"divider"},[v("div",{class:"divider-line"})],-1)),ha=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(o){const{y:e}=Se(),{hasSidebar:t}=O(),{frontmatter:n}=P(),s=w({});return ye(()=>{s.value={"has-sidebar":t.value,home:n.value.layout==="home",top:e.value===0}}),(i,u)=>(a(),c("div",{class:N(["VPNavBar",s.value])},[v("div",la,[v("div",ca,[v("div",ua,[m(oa,null,{"nav-bar-title-before":d(()=>[l(i.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(i.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),v("div",da,[v("div",va,[l(i.$slots,"nav-bar-content-before",{},void 0,!0),m(Yn,{class:"search"}),m(On,{class:"menu"}),m(ra,{class:"translations"}),m(Gs,{class:"appearance"}),m(Xn,{class:"social-links"}),m(Ln,{class:"extra"}),l(i.$slots,"nav-bar-content-after",{},void 0,!0),m(Nn,{class:"hamburger",active:i.isScreenOpen,onClick:u[0]||(u[0]=h=>i.$emit("toggle-screen"))},null,8,["active"])])])])]),pa],2))}}),fa=b(ha,[["__scopeId","data-v-ccf7ddec"]]),_a={key:0,class:"VPNavScreenAppearance"},ma={class:"text"},ka=_({__name:"VPNavScreenAppearance",setup(o){const{site:e,theme:t}=P();return(n,s)=>r(e).appearance&&r(e).appearance!=="force-dark"?(a(),c("div",_a,[v("p",ma,I(r(t).darkModeSwitchLabel||"Appearance"),1),m(me)])):f("",!0)}}),ba=b(ka,[["__scopeId","data-v-2d7af913"]]),$a=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(o){const e=te("close-screen");return(t,n)=>(a(),$(F,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),ga=b($a,[["__scopeId","data-v-7f31e1f6"]]),ya=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(o){const e=te("close-screen");return(t,n)=>(a(),$(F,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:d(()=>[D(I(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Ee=b(ya,[["__scopeId","data-v-19976ae1"]]),Pa={class:"VPNavScreenMenuGroupSection"},La={key:0,class:"title"},Va=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(o){return(e,t)=>(a(),c("div",Pa,[e.text?(a(),c("p",La,I(e.text),1)):f("",!0),(a(!0),c(M,null,E(e.items,n=>(a(),$(Ee,{key:n.text,item:n},null,8,["item"]))),128))]))}}),Sa=b(Va,[["__scopeId","data-v-8133b170"]]),Ta=o=>(B("data-v-ff6087d4"),o=o(),H(),o),Ia=["aria-controls","aria-expanded"],wa=["innerHTML"],Na=Ta(()=>v("span",{class:"vpi-plus button-icon"},null,-1)),Ma=["id"],Aa={key:1,class:"group"},Ca=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(o){const e=o,t=w(!1),n=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function s(){t.value=!t.value}return(i,u)=>(a(),c("div",{class:N(["VPNavScreenMenuGroup",{open:t.value}])},[v("button",{class:"button","aria-controls":n.value,"aria-expanded":t.value,onClick:s},[v("span",{class:"button-text",innerHTML:i.text},null,8,wa),Na],8,Ia),v("div",{id:n.value,class:"items"},[(a(!0),c(M,null,E(i.items,h=>(a(),c(M,{key:h.text},["link"in h?(a(),c("div",{key:h.text,class:"item"},[m(Ee,{item:h},null,8,["item"])])):(a(),c("div",Aa,[m(Sa,{text:h.text,items:h.items},null,8,["text","items"])]))],64))),128))],8,Ma)],2))}}),Ba=b(Ca,[["__scopeId","data-v-ff6087d4"]]),Ha={key:0,class:"VPNavScreenMenu"},Ea=_({__name:"VPNavScreenMenu",setup(o){const{theme:e}=P();return(t,n)=>r(e).nav?(a(),c("nav",Ha,[(a(!0),c(M,null,E(r(e).nav,s=>(a(),c(M,{key:s.text},["link"in s?(a(),$(ga,{key:0,item:s},null,8,["item"])):(a(),$(Ba,{key:1,text:s.text||"",items:s.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Fa=_({__name:"VPNavScreenSocialLinks",setup(o){const{theme:e}=P();return(t,n)=>r(e).socialLinks?(a(),$($e,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):f("",!0)}}),Fe=o=>(B("data-v-858fe1a4"),o=o(),H(),o),Da=Fe(()=>v("span",{class:"vpi-languages icon lang"},null,-1)),Oa=Fe(()=>v("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Ua={class:"list"},Ga=_({__name:"VPNavScreenTranslations",setup(o){const{localeLinks:e,currentLang:t}=J({correspondingLink:!0}),n=w(!1);function s(){n.value=!n.value}return(i,u)=>r(e).length&&r(t).label?(a(),c("div",{key:0,class:N(["VPNavScreenTranslations",{open:n.value}])},[v("button",{class:"title",onClick:s},[Da,D(" "+I(r(t).label)+" ",1),Oa]),v("ul",Ua,[(a(!0),c(M,null,E(r(e),h=>(a(),c("li",{key:h.link,class:"item"},[m(F,{class:"link",href:h.link},{default:d(()=>[D(I(h.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}}),ja=b(Ga,[["__scopeId","data-v-858fe1a4"]]),za={class:"container"},qa=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(o){const e=w(null),t=Te(oe?document.body:null);return(n,s)=>(a(),$(ve,{name:"fade",onEnter:s[0]||(s[0]=i=>t.value=!0),onAfterLeave:s[1]||(s[1]=i=>t.value=!1)},{default:d(()=>[n.open?(a(),c("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[v("div",za,[l(n.$slots,"nav-screen-content-before",{},void 0,!0),m(Ea,{class:"menu"}),m(ja,{class:"translations"}),m(ba,{class:"appearance"}),m(Fa,{class:"social-links"}),l(n.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}}),Ka=b(qa,[["__scopeId","data-v-cc5739dd"]]),Wa={key:0,class:"VPNav"},Ra=_({__name:"VPNav",setup(o){const{isScreenOpen:e,closeScreen:t,toggleScreen:n}=ws(),{frontmatter:s}=P(),i=y(()=>s.value.navbar!==!1);return Ie("close-screen",t),Z(()=>{oe&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(u,h)=>i.value?(a(),c("header",Wa,[m(fa,{"is-screen-open":r(e),onToggleScreen:r(n)},{"nav-bar-title-before":d(()=>[l(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[l(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[l(u.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),m(Ka,{open:r(e)},{"nav-screen-content-before":d(()=>[l(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[l(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}}),Ja=b(Ra,[["__scopeId","data-v-ae24b3ad"]]),De=o=>(B("data-v-b8d55f3b"),o=o(),H(),o),Ya=["role","tabindex"],Qa=De(()=>v("div",{class:"indicator"},null,-1)),Xa=De(()=>v("span",{class:"vpi-chevron-right caret-icon"},null,-1)),Za=[Xa],xa={key:1,class:"items"},er=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(o){const e=o,{collapsed:t,collapsible:n,isLink:s,isActiveLink:i,hasActiveLink:u,hasChildren:h,toggle:p}=bt(y(()=>e.item)),g=y(()=>h.value?"section":"div"),L=y(()=>s.value?"a":"div"),k=y(()=>h.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),V=y(()=>s.value?void 0:"button"),T=y(()=>[[`level-${e.depth}`],{collapsible:n.value},{collapsed:t.value},{"is-link":s.value},{"is-active":i.value},{"has-active":u.value}]);function A(S){"key"in S&&S.key!=="Enter"||!e.item.link&&p()}function C(){e.item.link&&p()}return(S,U)=>{const G=q("VPSidebarItem",!0);return a(),$(W(g.value),{class:N(["VPSidebarItem",T.value])},{default:d(()=>[S.item.text?(a(),c("div",Y({key:0,class:"item",role:V.value},Xe(S.item.items?{click:A,keydown:A}:{},!0),{tabindex:S.item.items&&0}),[Qa,S.item.link?(a(),$(F,{key:0,tag:L.value,class:"link",href:S.item.link,rel:S.item.rel,target:S.item.target},{default:d(()=>[(a(),$(W(k.value),{class:"text",innerHTML:S.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),$(W(k.value),{key:1,class:"text",innerHTML:S.item.text},null,8,["innerHTML"])),S.item.collapsed!=null&&S.item.items&&S.item.items.length?(a(),c("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:Qe(C,["enter"]),tabindex:"0"},Za,32)):f("",!0)],16,Ya)):f("",!0),S.item.items&&S.item.items.length?(a(),c("div",xa,[S.depth<5?(a(!0),c(M,{key:0},E(S.item.items,K=>(a(),$(G,{key:K.text,item:K,depth:S.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}}),tr=b(er,[["__scopeId","data-v-b8d55f3b"]]),Oe=o=>(B("data-v-575e6a36"),o=o(),H(),o),or=Oe(()=>v("div",{class:"curtain"},null,-1)),sr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},nr=Oe(()=>v("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),ar=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(o){const{sidebarGroups:e,hasSidebar:t}=O(),n=o,s=w(null),i=Te(oe?document.body:null);return j([n,s],()=>{var u;n.open?(i.value=!0,(u=s.value)==null||u.focus()):i.value=!1},{immediate:!0,flush:"post"}),(u,h)=>r(t)?(a(),c("aside",{key:0,class:N(["VPSidebar",{open:u.open}]),ref_key:"navEl",ref:s,onClick:h[0]||(h[0]=Ze(()=>{},["stop"]))},[or,v("nav",sr,[nr,l(u.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),c(M,null,E(r(e),p=>(a(),c("div",{key:p.text,class:"group"},[m(tr,{item:p,depth:0},null,8,["item"])]))),128)),l(u.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}}),rr=b(ar,[["__scopeId","data-v-575e6a36"]]),ir=_({__name:"VPSkipLink",setup(o){const e=ee(),t=w();j(()=>e.path,()=>t.value.focus());function n({target:s}){const i=document.getElementById(decodeURIComponent(s.hash).slice(1));if(i){const u=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",u)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",u),i.focus(),window.scrollTo(0,0)}}return(s,i)=>(a(),c(M,null,[v("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),v("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n}," Skip to content ")],64))}}),lr=b(ir,[["__scopeId","data-v-0f60ec36"]]),cr=_({__name:"Layout",setup(o){const{isOpen:e,open:t,close:n}=O(),s=ee();j(()=>s.path,n),kt(e,n);const{frontmatter:i}=P(),u=xe(),h=y(()=>!!u["home-hero-image"]);return Ie("hero-image-slot-exists",h),(p,g)=>{const L=q("Content");return r(i).layout!==!1?(a(),c("div",{key:0,class:N(["Layout",r(i).pageClass])},[l(p.$slots,"layout-top",{},void 0,!0),m(lr),m(st,{class:"backdrop",show:r(e),onClick:r(n)},null,8,["show","onClick"]),m(Ja,null,{"nav-bar-title-before":d(()=>[l(p.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":d(()=>[l(p.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":d(()=>[l(p.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":d(()=>[l(p.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":d(()=>[l(p.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":d(()=>[l(p.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),m(Is,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),m(rr,{open:r(e)},{"sidebar-nav-before":d(()=>[l(p.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":d(()=>[l(p.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),m(ls,null,{"page-top":d(()=>[l(p.$slots,"page-top",{},void 0,!0)]),"page-bottom":d(()=>[l(p.$slots,"page-bottom",{},void 0,!0)]),"not-found":d(()=>[l(p.$slots,"not-found",{},void 0,!0)]),"home-hero-before":d(()=>[l(p.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":d(()=>[l(p.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":d(()=>[l(p.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":d(()=>[l(p.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":d(()=>[l(p.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":d(()=>[l(p.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":d(()=>[l(p.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":d(()=>[l(p.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":d(()=>[l(p.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":d(()=>[l(p.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":d(()=>[l(p.$slots,"doc-before",{},void 0,!0)]),"doc-after":d(()=>[l(p.$slots,"doc-after",{},void 0,!0)]),"doc-top":d(()=>[l(p.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":d(()=>[l(p.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":d(()=>[l(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":d(()=>[l(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":d(()=>[l(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":d(()=>[l(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":d(()=>[l(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":d(()=>[l(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),m(ps),l(p.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),$(L,{key:1}))}}}),ur=b(cr,[["__scopeId","data-v-5d98c3a5"]]),vr={Layout:ur,enhanceApp:({app:o})=>{o.component("Badge",et)}};export{Un as c,vr as t,P as u}; diff --git a/docs/.vitepress/dist/assets/guide_additions_laravel-wallet-swap.md.CAXVUHnE.js b/docs/.vitepress/dist/assets/guide_additions_laravel-wallet-swap.md.CAXVUHnE.js new file mode 100644 index 000000000..9acfedb6b --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_additions_laravel-wallet-swap.md.CAXVUHnE.js @@ -0,0 +1,26 @@ +import{_ as s,c as i,o as a,a3 as l}from"./chunks/framework.OdeEVNy0.js";const F=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/additions/laravel-wallet-swap.md","filePath":"guide/additions/laravel-wallet-swap.md"}'),n={name:"guide/additions/laravel-wallet-swap.md"},h=l(`

Laravel Wallet Swap

Composer

The recommended installation method is using Composer.

In your project root just run:

bash
composer req bavix/laravel-wallet-swap

User model

We need a simple model with the ability to work multi-wallets.

php
use Bavix\\Wallet\\Interfaces\\Wallet;
+use Bavix\\Wallet\\Traits\\HasWallets;
+use Bavix\\Wallet\\Traits\\HasWallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet, HasWallets;
+}

Simple example

Let's create wallets with currency:

php
$usd = $user->createWallet([
+    'name' => 'My Dollars',
+    'slug' => 'usd',
+    'meta' => ['currency' => 'USD'],
+]);
+
+$rub = $user->createWallet([
+    'name' => 'My Ruble',
+    'slug' => 'rub',
+    'meta' => ['currency' => 'RUB'],
+]);

Find wallets and exchange from one to another.

php
$rub = $user->getWallet('rub');
+$usd = $user->getWallet('usd');
+
+$usd->balance; // 200
+$rub->balance; // 0
+
+$usd->exchange($rub, 10);
+$usd->balance; // 190
+$rub->balance; // 622

It's simple!

`,14),t=[h];function e(p,k,r,d,E,g){return a(),i("div",null,t)}const c=s(n,[["render",e]]);export{F as __pageData,c as default}; diff --git a/docs/.vitepress/dist/assets/guide_additions_laravel-wallet-swap.md.CAXVUHnE.lean.js b/docs/.vitepress/dist/assets/guide_additions_laravel-wallet-swap.md.CAXVUHnE.lean.js new file mode 100644 index 000000000..d338e9537 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_additions_laravel-wallet-swap.md.CAXVUHnE.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as l}from"./chunks/framework.OdeEVNy0.js";const F=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/additions/laravel-wallet-swap.md","filePath":"guide/additions/laravel-wallet-swap.md"}'),n={name:"guide/additions/laravel-wallet-swap.md"},h=l("",14),t=[h];function e(p,k,r,d,E,g){return a(),i("div",null,t)}const c=s(n,[["render",e]]);export{F as __pageData,c as default}; diff --git a/docs/.vitepress/dist/assets/guide_additions_laravel-wallet-uuid.md.DIFSzon4.js b/docs/.vitepress/dist/assets/guide_additions_laravel-wallet-uuid.md.DIFSzon4.js new file mode 100644 index 000000000..91a5f134f --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_additions_laravel-wallet-uuid.md.DIFSzon4.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as t,a3 as i}from"./chunks/framework.OdeEVNy0.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/additions/laravel-wallet-uuid.md","filePath":"guide/additions/laravel-wallet-uuid.md"}'),s={name:"guide/additions/laravel-wallet-uuid.md"},o=i('

Laravel Wallet UUID

Using uuid greatly reduces package performance. We recommend using int.

Often there is a need to store an identifier in uuid/ulid. Since version 9.0 laravel-wallet supports string identifiers, you only need to perform the migration.

To simplify the process, you can use a ready-made package.

Attention! It will not work to use UUID instead of ID in wallet models; there is a special uuid field for this.

Composer

The recommended installation method is using Composer.

In your project root just run:

bash
composer req bavix/laravel-wallet-uuid

Now you need to migrate!

After migration, you can use the UUID in your models.

You can find implementation examples in the package tests: https://github.com/bavix/laravel-wallet-uuid/tree/master/tests

It's simple!

',13),l=[o];function r(n,p,d,u,c,h){return t(),a("div",null,l)}const _=e(s,[["render",r]]);export{g as __pageData,_ as default}; diff --git a/docs/.vitepress/dist/assets/guide_additions_laravel-wallet-uuid.md.DIFSzon4.lean.js b/docs/.vitepress/dist/assets/guide_additions_laravel-wallet-uuid.md.DIFSzon4.lean.js new file mode 100644 index 000000000..8f6fa6b3a --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_additions_laravel-wallet-uuid.md.DIFSzon4.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as t,a3 as i}from"./chunks/framework.OdeEVNy0.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/additions/laravel-wallet-uuid.md","filePath":"guide/additions/laravel-wallet-uuid.md"}'),s={name:"guide/additions/laravel-wallet-uuid.md"},o=i("",13),l=[o];function r(n,p,d,u,c,h){return t(),a("div",null,l)}const _=e(s,[["render",r]]);export{g as __pageData,_ as default}; diff --git a/docs/.vitepress/dist/assets/guide_cqrs_create-wallet.md.BIpY-lGh.js b/docs/.vitepress/dist/assets/guide_cqrs_create-wallet.md.BIpY-lGh.js new file mode 100644 index 000000000..75c1bcb6d --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_cqrs_create-wallet.md.BIpY-lGh.js @@ -0,0 +1,29 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"Asynchronous wallet creation","description":"","frontmatter":{},"headers":[],"relativePath":"guide/cqrs/create-wallet.md","filePath":"guide/cqrs/create-wallet.md"}'),e={name:"guide/cqrs/create-wallet.md"},t=n(`

Asynchronous wallet creation

The idea is based on the division into teams for creating wallets, transactions, etc. The creation of a wallet can be accelerated if the client "generates a wallet himself".


User Model

Add the HasWallet, HasWallets trait's and Wallet interface to model.

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Traits\\HasWallets;
+use Bavix\\Wallet\\Interfaces\\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet, HasWallets;
+}

Action Handler

php
use Illuminate\\Http\\Request;
+use Illuminate\\Http\\Response;
+use Illuminate\\Support\\Facades\\Response as ResponseFactory;
+...
+
+public function __invoke(User $user, Request $request): Response
+{
+    $name = $request->get('wallet_name');
+    $uuid = $request->get('wallet_uuid');
+
+    $message = new CreateWalletCommandMessage($user, $name, $uuid);
+    dispatch($message);
+
+    return ResponseFactory::json([], 202);
+}

Command Handler

php
public function __invoke(CreateWalletCommandMessage $message): void
+{
+    $user = $message->getUser();
+    $user->createWallet([
+        'uuid' => $message->getWalletUuid(),
+        'name' => $message->getWalletName(),
+    ]);
+}

You receive requests to create a wallet on the backend, and you create them asynchronously. UUID4 is generated on the client side and the client already knows it. You will not be able to create two wallets with one uuid, because the column in the database is unique.

The user no longer needs to wait for the creation of a wallet, it is enough to know the uuid. You get the most stable application.


It's simple!

`,14),l=[t];function h(p,k,r,d,E,g){return a(),i("div",null,l)}const y=s(e,[["render",h]]);export{c as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_cqrs_create-wallet.md.BIpY-lGh.lean.js b/docs/.vitepress/dist/assets/guide_cqrs_create-wallet.md.BIpY-lGh.lean.js new file mode 100644 index 000000000..f0bc29165 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_cqrs_create-wallet.md.BIpY-lGh.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"Asynchronous wallet creation","description":"","frontmatter":{},"headers":[],"relativePath":"guide/cqrs/create-wallet.md","filePath":"guide/cqrs/create-wallet.md"}'),e={name:"guide/cqrs/create-wallet.md"},t=n("",14),l=[t];function h(p,k,r,d,E,g){return a(),i("div",null,l)}const y=s(e,[["render",h]]);export{c as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_db_atomic-service.md.csSpqsjE.js b/docs/.vitepress/dist/assets/guide_db_atomic-service.md.csSpqsjE.js new file mode 100644 index 000000000..2a4659688 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_db_atomic-service.md.csSpqsjE.js @@ -0,0 +1,11 @@ +import{_ as s,c as i,o as a,a3 as t}from"./chunks/framework.OdeEVNy0.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/db/atomic-service.md","filePath":"guide/db/atomic-service.md"}'),e={name:"guide/db/atomic-service.md"},n=t(`

Atomic Service (Mutex in a db transaction)

Working with atomic wallet operations.

Before you start working with atomicity, you need to study the "Race Condition" section and configure the lock.

Sometimes it is necessary to apply actions to the user and the wallet atomically. For example, you want to raise an ad in the search and withdraw money from your wallet. You need an Atomic Service Interface.

php
use Bavix\\Wallet\\Services\\AtomicServiceInterface;
+
+app(AtomicServiceInterface::class)->block($wallet, function () use ($wallet, $entity) {
+    $entity->increaseSales(); // update entity set sort_at=NOW() where id=123;
+    $wallet->withdraw(100);
+});

What's going on here? We block the wallet and raise the ad in the transaction (yes, atomic immediately starts the transaction - this is the main difference from LockServiceInterface). We raise the ad and deduct the amount from the wallet. If there are not enough funds to raise the ad, the error will complete the atomic operation and the transaction will roll back, and the lock on the wallet will be removed.

There is also an opportunity to block a lot of wallets. The operation is expensive, it generates N requests to the lock service. Maybe I'll optimize it in the future, but that's not for sure.


For example, we need to debit from two wallets at the same time. Then let's use the "blocks" method.

php
use Bavix\\Wallet\\Services\\AtomicServiceInterface;
+
+app(AtomicServiceInterface::class)->blocks([$wallet1, $wallet2], function () use ($wallet1, $wallet2) {
+    $wallet1->withdraw(100);
+    $wallet2->withdraw(100);
+});

In this case, we blocked both wallets and started the process of debiting funds. Debiting from both wallets will be considered a successful operation. If there are not enough funds on some wallet, the operation is canceled.

It's simple!

`,12),l=[n];function h(p,k,r,o,d,c){return a(),i("div",null,l)}const y=s(e,[["render",h]]);export{g as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_db_atomic-service.md.csSpqsjE.lean.js b/docs/.vitepress/dist/assets/guide_db_atomic-service.md.csSpqsjE.lean.js new file mode 100644 index 000000000..50c6e7a04 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_db_atomic-service.md.csSpqsjE.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as t}from"./chunks/framework.OdeEVNy0.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/db/atomic-service.md","filePath":"guide/db/atomic-service.md"}'),e={name:"guide/db/atomic-service.md"},n=t("",12),l=[n];function h(p,k,r,o,d,c){return a(),i("div",null,l)}const y=s(e,[["render",h]]);export{g as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_db_race-condition.md.Bk_sun3W.js b/docs/.vitepress/dist/assets/guide_db_race-condition.md.Bk_sun3W.js new file mode 100644 index 000000000..8b3fb3a6a --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_db_race-condition.md.Bk_sun3W.js @@ -0,0 +1,10 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.OdeEVNy0.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/db/race-condition.md","filePath":"guide/db/race-condition.md"}'),t={name:"guide/db/race-condition.md"},n=e(`

Race Condition

A common issue in the issue is about race conditions.

If you have not yet imported the config into the project, then you need to do this.

bash
php artisan vendor:publish --tag=laravel-wallet-config

Previously, there was a vacuum package, but now it is a part of the core. You just need to configure the lock service and the cache service in the package configuration wallet.php.

php
    /**
+     * A system for dealing with race conditions.
+     */
+    'lock' => [
+        'driver' => 'array',
+        'seconds' => 1,
+    ],

To enable the fight against race conditions, you need to select a provider that supports work with locks. I recommend redis.

There is a setting for storing the state of the wallet, I recommend choosing redis here too.

php
    /**
+     * Storage of the state of the balance of wallets.
+     */
+    'cache' => ['driver' => 'array'],

You need redis-server and php-redis.

Redis is recommended but not required. You can choose whatever the framework offers you.

It's simple!

`,12),p=[n];function h(l,o,r,d,c,k){return a(),i("div",null,p)}const y=s(t,[["render",h]]);export{u as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_db_race-condition.md.Bk_sun3W.lean.js b/docs/.vitepress/dist/assets/guide_db_race-condition.md.Bk_sun3W.lean.js new file mode 100644 index 000000000..66707ac3d --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_db_race-condition.md.Bk_sun3W.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.OdeEVNy0.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/db/race-condition.md","filePath":"guide/db/race-condition.md"}'),t={name:"guide/db/race-condition.md"},n=e("",12),p=[n];function h(l,o,r,d,c,k){return a(),i("div",null,p)}const y=s(t,[["render",h]]);export{u as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_db_transaction.md.CZUiznZz.js b/docs/.vitepress/dist/assets/guide_db_transaction.md.CZUiznZz.js new file mode 100644 index 000000000..6bf51a4be --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_db_transaction.md.CZUiznZz.js @@ -0,0 +1,6 @@ +import{_ as s,c as i,o as a,a3 as t}from"./chunks/framework.OdeEVNy0.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/db/transaction.md","filePath":"guide/db/transaction.md"}'),e={name:"guide/db/transaction.md"},n=t(`

Transaction

You definitely need to know the feature of transactions. The wallet is automatically blocked from the moment it is used until the end of the transaction. Therefore, it is necessary to use the wallet closer to the end of the transaction.

Very important! Almost all wallet transactions are blocking.

php
use Illuminate\\Support\\Facades\\DB;
+
+DB::beginTransaction();
+$wallet->balanceInt; // now the wallet is blocked
+doingMagic(); // running for a long time.
+DB::commit(); // here will unlock the wallet

The point is that you need to minimize operations within transactions as much as possible. The longer the transaction, the longer the wallet lock. The maximum wallet blocking time is set in the configuration. The longer the transaction takes, the more likely it is to get a race for the wallet.


It's simple!

`,7),l=[n];function h(o,p,r,k,c,d){return a(),i("div",null,l)}const u=s(e,[["render",h]]);export{m as __pageData,u as default}; diff --git a/docs/.vitepress/dist/assets/guide_db_transaction.md.CZUiznZz.lean.js b/docs/.vitepress/dist/assets/guide_db_transaction.md.CZUiznZz.lean.js new file mode 100644 index 000000000..e6d80bd4d --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_db_transaction.md.CZUiznZz.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as t}from"./chunks/framework.OdeEVNy0.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/db/transaction.md","filePath":"guide/db/transaction.md"}'),e={name:"guide/db/transaction.md"},n=t("",7),l=[n];function h(o,p,r,k,c,d){return a(),i("div",null,l)}const u=s(e,[["render",h]]);export{m as __pageData,u as default}; diff --git a/docs/.vitepress/dist/assets/guide_events_balance-updated-event.md.CBcnawJm.js b/docs/.vitepress/dist/assets/guide_events_balance-updated-event.md.CBcnawJm.js new file mode 100644 index 000000000..2d62b94fd --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_events_balance-updated-event.md.CBcnawJm.js @@ -0,0 +1,15 @@ +import{_ as s,c as a,o as i,a3 as n}from"./chunks/framework.OdeEVNy0.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/events/balance-updated-event.md","filePath":"guide/events/balance-updated-event.md"}'),e={name:"guide/events/balance-updated-event.md"},t=n(`

Tracking balance changes

There are tasks when you urgently need to do something when the user's balance changes. A frequent case of transferring data via websockets to the front-end.

Version 7.2 introduces an interface to which you can subscribe. This is done using standard Laravel methods. More information in the documentation.

php
use Bavix\\Wallet\\Internal\\Events\\BalanceUpdatedEventInterface;
+
+protected $listen = [
+    BalanceUpdatedEventInterface::class => [
+        MyBalanceUpdatedListener::class,
+    ],
+];

And then we create a listener.

php
use Bavix\\Wallet\\Internal\\Events\\BalanceUpdatedEventInterface;
+
+class MyBalanceUpdatedListener
+{
+    public function handle(BalanceUpdatedEventInterface $event): void
+    {
+        // And then the implementation...
+    }
+}

It's simple!

`,7),l=[t];function p(h,k,d,r,c,o){return i(),a("div",null,l)}const y=s(e,[["render",p]]);export{E as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_events_balance-updated-event.md.CBcnawJm.lean.js b/docs/.vitepress/dist/assets/guide_events_balance-updated-event.md.CBcnawJm.lean.js new file mode 100644 index 000000000..879bef007 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_events_balance-updated-event.md.CBcnawJm.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a3 as n}from"./chunks/framework.OdeEVNy0.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/events/balance-updated-event.md","filePath":"guide/events/balance-updated-event.md"}'),e={name:"guide/events/balance-updated-event.md"},t=n("",7),l=[t];function p(h,k,d,r,c,o){return i(),a("div",null,l)}const y=s(e,[["render",p]]);export{E as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_events_customize.md.9V6b1Caz.js b/docs/.vitepress/dist/assets/guide_events_customize.md.9V6b1Caz.js new file mode 100644 index 000000000..dc9692bad --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_events_customize.md.9V6b1Caz.js @@ -0,0 +1,44 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/events/customize.md","filePath":"guide/events/customize.md"}'),t={name:"guide/events/customize.md"},l=n(`

Customizing events

Sometimes you want to modify the standard events of a package. This is done quite simply.

Let's add broadcast support? We need to implement our event from the interface.

php
use Bavix\\Wallet\\Internal\\Events\\BalanceUpdatedEventInterface;
+use Illuminate\\Contracts\\Broadcasting\\ShouldBroadcast;
+
+final class MyUpdatedEvent implements BalanceUpdatedEventInterface, ShouldBroadcast
+{
+    public function __construct(
+        private \\Bavix\\Wallet\\Models\\Wallet $wallet,
+        private DateTimeImmutable $updatedAt,
+    ) {}
+    
+    public function getWalletId(): int { return $this->wallet->getKey(); }
+    public function getWalletUuid(): string { return $this->wallet->uuid; }
+    public function getBalance(): string { return $this->wallet->balanceInt; }
+    public function getUpdatedAt(): DateTimeImmutable { return $this->updatedAt; }
+
+    public function broadcastOn(): array
+    {
+        return $this->wallet->getAttributes();
+    }
+}

The event is ready, but that's not all. Now you need to implement your assembler class, which will create an event inside the package.

php
use Bavix\\Wallet\\Internal\\Assembler\\BalanceUpdatedEventAssemblerInterface;
+
+class MyUpdatedEventAssembler implements BalanceUpdatedEventAssemblerInterface
+{
+    public function create(\\Bavix\\Wallet\\Models\\Wallet $wallet) : \\Bavix\\Wallet\\Internal\\Events\\BalanceUpdatedEventInterface
+    {
+        return new MyUpdatedEvent($wallet, new DateTimeImmutable());
+    }
+}

Next, go to the package settings (wallet.php). We change the event to a new one.

php
    'assemblers' => [
+        'balance_updated_event' => MyUpdatedEventAssembler::class,
+    ],

Then everything is the same as with the standard events of the package.

php
use Bavix\\Wallet\\Internal\\Events\\BalanceUpdatedEventInterface;
+
+protected $listen = [
+    BalanceUpdatedEventInterface::class => [
+        MyBalanceUpdatedListener::class,
+    ],
+];

And then we create a listener.

php
use Bavix\\Wallet\\Internal\\Events\\BalanceUpdatedEventInterface;
+
+class MyBalanceUpdatedListener
+{
+    public function handle(BalanceUpdatedEventInterface $event): void
+    {
+        // And then the implementation...
+    }
+}

It's simple!

`,13),h=[l];function e(p,k,d,r,E,g){return a(),i("div",null,h)}const F=s(t,[["render",e]]);export{c as __pageData,F as default}; diff --git a/docs/.vitepress/dist/assets/guide_events_customize.md.9V6b1Caz.lean.js b/docs/.vitepress/dist/assets/guide_events_customize.md.9V6b1Caz.lean.js new file mode 100644 index 000000000..392d8ccf8 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_events_customize.md.9V6b1Caz.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/events/customize.md","filePath":"guide/events/customize.md"}'),t={name:"guide/events/customize.md"},l=n("",13),h=[l];function e(p,k,d,r,E,g){return a(),i("div",null,h)}const F=s(t,[["render",e]]);export{c as __pageData,F as default}; diff --git a/docs/.vitepress/dist/assets/guide_events_transaction-created-event.md.Duh3XbkM.js b/docs/.vitepress/dist/assets/guide_events_transaction-created-event.md.Duh3XbkM.js new file mode 100644 index 000000000..9be608eb9 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_events_transaction-created-event.md.Duh3XbkM.js @@ -0,0 +1,15 @@ +import{_ as s,c as a,o as i,a3 as n}from"./chunks/framework.OdeEVNy0.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/events/transaction-created-event.md","filePath":"guide/events/transaction-created-event.md"}'),e={name:"guide/events/transaction-created-event.md"},t=n(`

Tracking the creation of wallet transactions

The events are similar to the events for updating the balance, only for the creation of a wallet. A frequent case of transferring data via websockets to the front-end.

Version 9.1 introduces an interface to which you can subscribe. This is done using standard Laravel methods. More information in the documentation.

php
use Bavix\\Wallet\\Internal\\Events\\TransactionCreatedEventInterface;
+
+protected $listen = [
+    TransactionCreatedEventInterface::class => [
+        MyWalletTransactionCreatedListener::class,
+    ],
+];

And then we create a listener.

php
use Bavix\\Wallet\\Internal\\Events\\TransactionCreatedEventInterface;
+
+class MyWalletTransactionCreatedListener
+{
+    public function handle(TransactionCreatedEventInterface $event): void
+    {
+        // And then the implementation...
+    }
+}

It's simple!

`,7),l=[t];function h(p,r,k,c,d,o){return i(),a("div",null,l)}const y=s(e,[["render",h]]);export{g as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_events_transaction-created-event.md.Duh3XbkM.lean.js b/docs/.vitepress/dist/assets/guide_events_transaction-created-event.md.Duh3XbkM.lean.js new file mode 100644 index 000000000..d6c32593d --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_events_transaction-created-event.md.Duh3XbkM.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a3 as n}from"./chunks/framework.OdeEVNy0.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/events/transaction-created-event.md","filePath":"guide/events/transaction-created-event.md"}'),e={name:"guide/events/transaction-created-event.md"},t=n("",7),l=[t];function h(p,r,k,c,d,o){return i(),a("div",null,l)}const y=s(e,[["render",h]]);export{g as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_events_wallet-created-event.md.CK_r0lzx.js b/docs/.vitepress/dist/assets/guide_events_wallet-created-event.md.CK_r0lzx.js new file mode 100644 index 000000000..ea3cebe14 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_events_wallet-created-event.md.CK_r0lzx.js @@ -0,0 +1,15 @@ +import{_ as s,c as a,o as i,a3 as e}from"./chunks/framework.OdeEVNy0.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/events/wallet-created-event.md","filePath":"guide/events/wallet-created-event.md"}'),n={name:"guide/events/wallet-created-event.md"},t=e(`

Tracking the creation of wallets

The events are similar to the events for updating the balance, only for the creation of a wallet. A frequent case of transferring data via websockets to the front-end.

Version 7.3 introduces an interface to which you can subscribe. This is done using standard Laravel methods. More information in the documentation.

php
use Bavix\\Wallet\\Internal\\Events\\WalletCreatedEventInterface;
+
+protected $listen = [
+    WalletCreatedEventInterface::class => [
+        MyWalletCreatedListener::class,
+    ],
+];

And then we create a listener.

php
use Bavix\\Wallet\\Internal\\Events\\WalletCreatedEventInterface;
+
+class MyWalletCreatedListener
+{
+    public function handle(WalletCreatedEventInterface $event): void
+    {
+        // And then the implementation...
+    }
+}

It's simple!

`,7),l=[t];function h(p,r,k,d,c,o){return i(),a("div",null,l)}const y=s(n,[["render",h]]);export{g as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_events_wallet-created-event.md.CK_r0lzx.lean.js b/docs/.vitepress/dist/assets/guide_events_wallet-created-event.md.CK_r0lzx.lean.js new file mode 100644 index 000000000..60dd2f879 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_events_wallet-created-event.md.CK_r0lzx.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a3 as e}from"./chunks/framework.OdeEVNy0.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/events/wallet-created-event.md","filePath":"guide/events/wallet-created-event.md"}'),n={name:"guide/events/wallet-created-event.md"},t=e("",7),l=[t];function h(p,r,k,d,c,o){return i(),a("div",null,l)}const y=s(n,[["render",h]]);export{g as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_fractional_deposit.md.BWDu9S8t.js b/docs/.vitepress/dist/assets/guide_fractional_deposit.md.BWDu9S8t.js new file mode 100644 index 000000000..863e2cd29 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_fractional_deposit.md.BWDu9S8t.js @@ -0,0 +1,12 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.OdeEVNy0.js";const E=JSON.parse('{"title":"Deposit float","description":"","frontmatter":{},"headers":[],"relativePath":"guide/fractional/deposit.md","filePath":"guide/fractional/deposit.md"}'),t={name:"guide/fractional/deposit.md"},l=e(`

Deposit float

A deposit is a sum of money which is part of the full price of something, and which you pay when you agree to buy it.

In this case, the Deposit is the replenishment of the wallet.


User Model

It is necessary to expand the model that will have the wallet. This is done in two stages:

  • Add Wallet interface;
  • Add the HasWalletFloat trait;

Let's get started.

php
use Bavix\\Wallet\\Traits\\HasWalletFloat;
+use Bavix\\Wallet\\Interfaces\\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWalletFloat;
+}

The model is prepared to work with a wallet.

Make a Deposit

Find user:

php
$user = User::first();

As the user uses HasWalletFloat, he will have balance property. Check the user's balance.

php
$user->balance; // 0
+$user->balanceInt; // 0
+$user->balanceFloatNum; // 0

The balance is zero, which is what we expected.

php
$user->depositFloat(10.1); 
+$user->balance; // 1010
+$user->balanceInt; // 1010
+$user->balanceFloatNum; // 10.1

Wow!

`,18),n=[l];function h(p,k,d,r,o,c){return a(),i("div",null,n)}const y=s(t,[["render",h]]);export{E as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_fractional_deposit.md.BWDu9S8t.lean.js b/docs/.vitepress/dist/assets/guide_fractional_deposit.md.BWDu9S8t.lean.js new file mode 100644 index 000000000..ee517d144 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_fractional_deposit.md.BWDu9S8t.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.OdeEVNy0.js";const E=JSON.parse('{"title":"Deposit float","description":"","frontmatter":{},"headers":[],"relativePath":"guide/fractional/deposit.md","filePath":"guide/fractional/deposit.md"}'),t={name:"guide/fractional/deposit.md"},l=e("",18),n=[l];function h(p,k,d,r,o,c){return a(),i("div",null,n)}const y=s(t,[["render",h]]);export{E as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_fractional_transfer.md.B94kgHWa.js b/docs/.vitepress/dist/assets/guide_fractional_transfer.md.B94kgHWa.js new file mode 100644 index 000000000..fded36547 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_fractional_transfer.md.B94kgHWa.js @@ -0,0 +1,26 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const o=JSON.parse('{"title":"Transfer","description":"","frontmatter":{},"headers":[],"relativePath":"guide/fractional/transfer.md","filePath":"guide/fractional/transfer.md"}'),t={name:"guide/fractional/transfer.md"},h=n(`

Transfer

Transfer in our system are two well-known Deposit and Withdraw operations that are performed in one transaction.

The transfer takes place between wallets.


User Model

Example contract

php
$transfer = $user1->transferFloat(
+    $user2,
+    5.11,
+    new Extra(
+        deposit: [
+            'type' => 'extra-deposit',
+        ],
+        withdraw: new Option(
+            [
+                'type' => 'extra-withdraw',
+            ],
+            false // confirmed
+        ),
+        extra: [
+            'msg' => 'hello world',
+        ],
+    )
+);

Make a Transfer

Find user:

php
$first = User::first(); 
+$last = User::orderBy('id', 'desc')->first(); // last user
+$first->getKey() !== $last->getKey(); // true

As the user uses HasWalletFloat, he will have balance property. Check the user's balance.

php
$fist->balanceFloatNum; // 100.00
+$last->balanceFloatNum; // 0

The transfer will be from the first user to the second.

php
$first->transferFloat($last, 5); 
+$first->balanceFloatNum; // 95
+$last->balanceFloatNum; // 5

It's simple!

Force Transfer

Check the user's balance.

php
$first->balanceFloatNum; // 100
+$last->balanceFloatNum; // 0

The transfer will be from the first user to the second.

php
$first->forceTransferFloat($last, 500); 
+$first->balanceFloatNum; // -400
+$last->balanceFloatNum; // 500

It's simple!

`,21),l=[h];function e(p,k,r,d,E,g){return a(),i("div",null,l)}const y=s(t,[["render",e]]);export{o as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_fractional_transfer.md.B94kgHWa.lean.js b/docs/.vitepress/dist/assets/guide_fractional_transfer.md.B94kgHWa.lean.js new file mode 100644 index 000000000..04a000d08 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_fractional_transfer.md.B94kgHWa.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const o=JSON.parse('{"title":"Transfer","description":"","frontmatter":{},"headers":[],"relativePath":"guide/fractional/transfer.md","filePath":"guide/fractional/transfer.md"}'),t={name:"guide/fractional/transfer.md"},h=n("",21),l=[h];function e(p,k,r,d,E,g){return a(),i("div",null,l)}const y=s(t,[["render",e]]);export{o as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_fractional_withdraw.md.e7s23Eiv.js b/docs/.vitepress/dist/assets/guide_fractional_withdraw.md.e7s23Eiv.js new file mode 100644 index 000000000..241df338a --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_fractional_withdraw.md.e7s23Eiv.js @@ -0,0 +1,8 @@ +import{_ as s,c as a,o as i,a3 as e}from"./chunks/framework.OdeEVNy0.js";const g=JSON.parse('{"title":"Withdraw","description":"","frontmatter":{},"headers":[],"relativePath":"guide/fractional/withdraw.md","filePath":"guide/fractional/withdraw.md"}'),t={name:"guide/fractional/withdraw.md"},h=e(`

Withdraw

When there is enough money in the account, you can transfer/withdraw it or buy something in the system.

Since the currency is virtual, you can buy any services on your website. For example, priority in search results.


User Model

Make a Withdraw

Find user:

php
$user = User::first();

As the user uses HasWalletFloat, he will have balance property. Check the user's balance.

php
$user->balance; // 10000
+$user->balanceInt; // 10000
+$user->balanceFloatNum; // 100.00

The balance is not empty, so you can withdraw funds.

php
$user->withdrawFloat(10); 
+$user->balance; // 9000
+$user->balanceInt; // 9000
+$user->balanceFloatNum; // 90.00

It's simple!

Force Withdraw

Forced withdrawal is necessary for those cases when the user has no funds. For example, a fine for spam.

php
$user->balanceFloatNum; // 90.00
+$user->forceWithdrawFloat(101);
+$user->balanceFloatNum; // -11.00

And what will happen if the money is not enough?

There can be two situations:

  • The user's balance is zero, then we get an error Bavix\\Wallet\\Exceptions\\BalanceIsEmpty
  • If the balance is greater than zero, but it is not enough Bavix\\Wallet\\Exceptions\\InsufficientFunds
`,19),n=[h];function l(p,r,k,d,o,c){return i(),a("div",null,n)}const u=s(t,[["render",l]]);export{g as __pageData,u as default}; diff --git a/docs/.vitepress/dist/assets/guide_fractional_withdraw.md.e7s23Eiv.lean.js b/docs/.vitepress/dist/assets/guide_fractional_withdraw.md.e7s23Eiv.lean.js new file mode 100644 index 000000000..7ff56fd2c --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_fractional_withdraw.md.e7s23Eiv.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a3 as e}from"./chunks/framework.OdeEVNy0.js";const g=JSON.parse('{"title":"Withdraw","description":"","frontmatter":{},"headers":[],"relativePath":"guide/fractional/withdraw.md","filePath":"guide/fractional/withdraw.md"}'),t={name:"guide/fractional/withdraw.md"},h=e("",19),n=[h];function l(p,r,k,d,o,c){return i(),a("div",null,n)}const u=s(t,[["render",l]]);export{g as __pageData,u as default}; diff --git a/docs/.vitepress/dist/assets/guide_helpers_formatter.md.DgY9iwej.js b/docs/.vitepress/dist/assets/guide_helpers_formatter.md.DgY9iwej.js new file mode 100644 index 000000000..8a58fea37 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_helpers_formatter.md.DgY9iwej.js @@ -0,0 +1,3 @@ +import{_ as s,c as i,o as a,a3 as t}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"Helper FormatterServiceInterface","description":"","frontmatter":{},"headers":[],"relativePath":"guide/helpers/formatter.md","filePath":"guide/helpers/formatter.md"}'),e={name:"guide/helpers/formatter.md"},h=t(`

Helper FormatterServiceInterface

Sometimes you need to convert the balance to some format. A small and simple helper has appeared that will simplify the process a little.

floatValue

php
app(FormatterServiceInterface::class)->floatValue('12345', 2); // 123.45
+app(FormatterServiceInterface::class)->floatValue('12345', 3); // 12.345

intValue

php
app(FormatterServiceInterface::class)->intValue('12.345', 3); // 12345
+app(FormatterServiceInterface::class)->intValue('123.45', 2); // 12345

It's simple!

`,8),l=[h];function n(p,k,r,d,E,o){return a(),i("div",null,l)}const F=s(e,[["render",n]]);export{c as __pageData,F as default}; diff --git a/docs/.vitepress/dist/assets/guide_helpers_formatter.md.DgY9iwej.lean.js b/docs/.vitepress/dist/assets/guide_helpers_formatter.md.DgY9iwej.lean.js new file mode 100644 index 000000000..95e36dc05 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_helpers_formatter.md.DgY9iwej.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as t}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"Helper FormatterServiceInterface","description":"","frontmatter":{},"headers":[],"relativePath":"guide/helpers/formatter.md","filePath":"guide/helpers/formatter.md"}'),e={name:"guide/helpers/formatter.md"},h=t("",8),l=[h];function n(p,k,r,d,E,o){return a(),i("div",null,l)}const F=s(e,[["render",n]]);export{c as __pageData,F as default}; diff --git a/docs/.vitepress/dist/assets/guide_high-performance_batch-transactions.md.BEEhiD5t.js b/docs/.vitepress/dist/assets/guide_high-performance_batch-transactions.md.BEEhiD5t.js new file mode 100644 index 000000000..058508d43 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_high-performance_batch-transactions.md.BEEhiD5t.js @@ -0,0 +1,59 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/high-performance/batch-transactions.md","filePath":"guide/high-performance/batch-transactions.md"}'),t={name:"guide/high-performance/batch-transactions.md"},h=n(`

API. Batch Transactions

Sometimes situations arise when there is a need to make multiple changes to wallets. For example, we need to change the balance of many wallets at once. For example, the system administrator accrues a bonus for participating in some promotion. Previously, the code would look like this:

php
use Bavix\\Wallet\\Services\\AtomicServiceInterface;
+
+app(AtomicServiceInterface::class)->blocks($wallets, function () use ($amount, $wallets) {
+    foreach ($wallets as $wallet) {
+        $wallet->deposit($amount);
+    }
+});

The code is working and everything works correctly. But what happens under the hood? Nothing good. For 5 users it will look like this. exm1

Since the operations inside an atomic operation can depend on each other, we will not be able to combine insert queries into a batch. But there is an opportunity to reduce the number of update queries and improve application performance out of the blue.

After small things, the situation will look like this.

exm2

As you can see, things are getting better. Still, I would like to be able to tell the package that the changes are independent of each other. In this case, the package will be able to collapse all insert queries into a single query and insert in a batch.

Here new api handles can help us:

php
// For multiple transactions.
+interface TransactionQueryHandlerInterface
+{
+    /**
+     * @param non-empty-array<TransactionQuery> $objects
+     * @return non-empty-array<string, Transaction>
+     * @throws ExceptionInterface
+     */
+    public function apply(array $objects): array;
+}
+
+// For multiple transfers of funds.
+interface TransferQueryHandlerInterface
+{
+    /**
+     * @param non-empty-array<TransferQuery> $objects
+     * @return non-empty-array<string, Transfer>
+     * @throws ExceptionInterface
+     */
+    public function apply(array $objects): array;
+}

Let's use the API handle.

php
use Bavix\\Wallet\\External\\Api\\TransactionQuery;
+use Bavix\\Wallet\\External\\Api\\TransactionQueryHandlerInterface;
+
+app(TransactionQueryHandlerInterface::class)->apply(
+    array_map(
+        static fn (Wallet $wallet) => TransactionQuery::createDeposit($wallet, $amount, null),
+        $wallets
+     )
+);

And now look at the result and it is impressive. exm3

But it is worth noting that these are highly efficient api handles and they do not check the balance of the wallet before making changes. If you need it, then you have to do something like this.

php
use Bavix\\Wallet\\External\\Api\\TransactionQuery;
+use Bavix\\Wallet\\External\\Api\\TransactionQueryHandlerInterface;
+use Bavix\\Wallet\\Services\\AtomicServiceInterface;
+use Bavix\\Wallet\\Services\\ConsistencyServiceInterface;
+
+app(AtomicServiceInterface::class)->blocks($wallets, function () use ($wallets, $amount) {
+    foreach ($wallets as $wallet) {
+        app(ConsistencyServiceInterface::class)->checkPotential($wallet, $amount);
+    }
+
+    app(TransactionQueryHandlerInterface::class)->apply(
+        array_map(
+            static fn (Wallet $wallet) => TransactionQuery::createWithdraw($wallet, $amount, null),
+            $wallets
+        )
+    );
+});

In version 10.x, it became possible to create transactions with a given uuid (generate on the client side). The main thing is to keep uniqueness.

php
use Bavix\\Wallet\\External\\Api\\TransactionQuery;
+
+// int version
+TransactionQuery::createDeposit($wallet, $amount, null, uuid: '5f7820d1-1e82-4d03-9414-05d0c44da9a1');
+TransactionQuery::createWithdraw($wallet, $amount, null, uuid: '6e87dbf2-7be7-48c2-b688-f46ba4e25786');
+
+// float version
+TransactionFloatQuery::createDeposit($wallet, $amountFloat, null, uuid: '5f7820d1-1e82-4d03-9414-05d0c44da9a1');
+TransactionFloatQuery::createWithdraw($wallet, $amountFloat, null, uuid: '6e87dbf2-7be7-48c2-b688-f46ba4e25786');

It's simple!

`,20),l=[h];function p(e,k,r,d,E,g){return a(),i("div",null,l)}const o=s(t,[["render",p]]);export{c as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_high-performance_batch-transactions.md.BEEhiD5t.lean.js b/docs/.vitepress/dist/assets/guide_high-performance_batch-transactions.md.BEEhiD5t.lean.js new file mode 100644 index 000000000..55ab7ac72 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_high-performance_batch-transactions.md.BEEhiD5t.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/high-performance/batch-transactions.md","filePath":"guide/high-performance/batch-transactions.md"}'),t={name:"guide/high-performance/batch-transactions.md"},h=n("",20),l=[h];function p(e,k,r,d,E,g){return a(),i("div",null,l)}const o=s(t,[["render",p]]);export{c as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_high-performance_batch-transfers.md.CDYVA106.js b/docs/.vitepress/dist/assets/guide_high-performance_batch-transfers.md.CDYVA106.js new file mode 100644 index 000000000..6904eba22 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_high-performance_batch-transfers.md.CDYVA106.js @@ -0,0 +1,43 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/high-performance/batch-transfers.md","filePath":"guide/high-performance/batch-transfers.md"}'),t={name:"guide/high-performance/batch-transfers.md"},h=n(`

API. Batch Transfers

If you need multiple transfers between wallets, you can use a high-performance handle. It is worth remembering that the pen does not check the balance of the wallet before transferring, you need to take care of this yourself.

Previously, you would have written the following code:

php
use Bavix\\Wallet\\Services\\AtomicServiceInterface;
+
+app(AtomicServiceInterface::class)->block($from, function () use ($amount, $from, $wallets) {
+    foreach ($wallets as $wallet) {
+        $from->forceTransfer($wallet, $amount);
+    }
+});

This would lead to the generation of a huge number of requests to the database and cache, because. the package does not know that the response from forceTransfer is not used by you at all inside AtomicService. Now, you can report it:

php
use Bavix\\Wallet\\External\\Api\\TransferQuery;
+use Bavix\\Wallet\\External\\Api\\TransferQueryHandlerInterface;
+
+app(TransferQueryHandlerInterface::class)->apply(
+    array_map(
+        static fn (Wallet $wallet) => new TransferQuery($from, $wallet, $amount, null),
+        $wallets
+     )
+);

The package will optimize queries and execute them in a single transaction. I strongly advise against creating large packs, because. this can lead to a large increase in request queuing.


In version 10.x, it became possible to create transactions&transfers with a given uuid (generate on the client side). The main thing is to keep uniqueness.

php
use Bavix\\Wallet\\External\\Api\\TransferQuery;
+
+// int version
+new TransferQuery($from, $wallet, $amount, new \\Bavix\\Wallet\\External\\Dto\\Extra(
+    deposit: new \\Bavix\\Wallet\\External\\Dto\\Option(
+        null,
+        uuid: '71cecafe-da10-464f-9e00-c80437bb4c3e', // deposit transaction
+    ),
+    withdraw: new \\Bavix\\Wallet\\External\\Dto\\Option(
+        null,
+        uuid: '3805730b-39a1-419d-8715-0b7cc3f1ffc2', // withdraw transaction
+    ),
+    uuid: 'f8becf81-3993-43d7-81f1-7a725c72e976', // transfer uuid
+    extra: ['info' => 'fast deposit'], // metadata in the table transfers
+));
+
+// float version
+new TransferFloatQuery($from, $wallet, $amountFlaot, new \\Bavix\\Wallet\\External\\Dto\\Extra(
+    deposit: new \\Bavix\\Wallet\\External\\Dto\\Option(
+        null,
+        uuid: '71cecafe-da10-464f-9e00-c80437bb4c3e', // deposit transaction
+    ),
+    withdraw: new \\Bavix\\Wallet\\External\\Dto\\Option(
+        null,
+        uuid: '3805730b-39a1-419d-8715-0b7cc3f1ffc2', // withdraw transaction
+    ),
+    uuid: 'f8becf81-3993-43d7-81f1-7a725c72e976', // transfer uuid
+    extra: ['info' => 'fast deposit'], // metadata in the table transfers
+));

It's simple!

`,12),l=[h];function e(p,k,r,E,d,g){return a(),i("div",null,l)}const o=s(t,[["render",e]]);export{c as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_high-performance_batch-transfers.md.CDYVA106.lean.js b/docs/.vitepress/dist/assets/guide_high-performance_batch-transfers.md.CDYVA106.lean.js new file mode 100644 index 000000000..62b81593b --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_high-performance_batch-transfers.md.CDYVA106.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/high-performance/batch-transfers.md","filePath":"guide/high-performance/batch-transfers.md"}'),t={name:"guide/high-performance/batch-transfers.md"},h=n("",12),l=[h];function e(p,k,r,E,d,g){return a(),i("div",null,l)}const o=s(t,[["render",e]]);export{c as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_introduction_basic-usage.md.8BCaXADC.js b/docs/.vitepress/dist/assets/guide_introduction_basic-usage.md.8BCaXADC.js new file mode 100644 index 000000000..506395100 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_introduction_basic-usage.md.8BCaXADC.js @@ -0,0 +1,118 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"Basic Usage","description":"","frontmatter":{},"headers":[],"relativePath":"guide/introduction/basic-usage.md","filePath":"guide/introduction/basic-usage.md"}'),l={name:"guide/introduction/basic-usage.md"},t=n(`

Basic Usage

Simple Wallet

It is necessary to expand the model that will have the wallet. This is done in two stages:

  • Add Wallet interface;
  • Add the HasWallet trait;

Let's get started.

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet;
+}

The model is prepared to work with a wallet.

Simple wallet transactions

The package is built on simple transactions:

  • deposit - replenishment of the wallet;
  • withdraw - withdrawal from the wallet;

Consider an example:

php
$user = User::first();
+$user->balance; // 0
+
+$user->deposit(10);
+$user->balance; // 10
+
+$user->withdraw(1);
+$user->balance; // 9
+
+$user->forceWithdraw(200, ['description' => 'payment of taxes']);
+$user->balance; // -191

Purchases

Add the CanPay trait and Customer interface to your User model.

The trait CanPay already inherits HasWallet, reuse will cause an error.

php
use Bavix\\Wallet\\Traits\\CanPay;
+use Bavix\\Wallet\\Interfaces\\Customer;
+
+class User extends Model implements Customer
+{
+    use CanPay;
+}

Add the HasWallet trait and interface to Item model.

Starting from version 9.x there are two product interfaces:

  • For an unlimited number of products (ProductInterface);
  • For a limited number of products (ProductLimitedInterface);

An example with an unlimited number of products:

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Customer;
+use Bavix\\Wallet\\Interfaces\\ProductInterface;
+
+class Item extends Model implements ProductInterface
+{
+    use HasWallet;
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

Example with a limited number of products:

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Customer;
+use Bavix\\Wallet\\Interfaces\\ProductLimitedInterface;
+
+class Item extends Model implements ProductLimitedInterface
+{
+    use HasWallet;
+
+    public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool
+    {
+        /**
+         * This is where you implement the constraint logic. 
+         * 
+         * If the service can be purchased once, then
+         *  return !$customer->paid($this);
+         */
+        return true; 
+    }
+    
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

I do not recommend using the limited interface when working with a shopping cart. If you are working with a shopping cart, then you should override the PurchaseServiceInterface interface. With it, you can check the availability of all products with one request, there will be no N-queries in the database.

Proceed to purchase.

php
$user = User::first();
+$user->balance; // 100
+
+$item = Item::first();
+$user->pay($item); // If you do not have enough money, throw an exception
+var_dump($user->balance); // 0
+
+if ($user->safePay($item)) {
+  // try to buy again )
+}
+
+var_dump((bool)$user->paid($item)); // bool(true)
+
+var_dump($user->refund($item)); // bool(true)
+var_dump((bool)$user->paid($item)); // bool(false)

Eager Loading

When accessing Eloquent relationships as properties, the relationship data is "lazy loaded". This means the relationship data is not actually loaded until you first access the property. However, Eloquent can "eager load" relationships at the time you query the parent model. Eager loading alleviates the N + 1 query problem. To illustrate the N + 1 query problem, consider a Wallet model that is related to User:

Add the HasWallet trait and Wallet interface to model.

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet; // public function wallet(): MorphOne...
+}

Now, let's retrieve all wallets and their users:

php
$users = User::all();
+
+foreach ($users as $user) {
+    // echo $user->wallet->balance;
+    echo $user->balance; // Abbreviated notation
+}

This loop will execute 1 query to retrieve all of the users on the table, then another query for each user to retrieve the wallet. So, if we have 25 users, the code above would run 26 queries: 1 for the original user, and 25 additional queries to retrieve the wallet of each user.

Thankfully, we can use eager loading to reduce this operation to just 2 queries. When querying, you may specify which relationships should be eager loaded using the with method:

php
$users = User::with('wallet')->all();
+
+foreach ($users as $user) {
+    // echo $user->wallet->balance;
+    echo $user->balance; // Abbreviated notation
+}

For this operation, only two queries will be executed.

How to work with fractional numbers?

Add the HasWalletFloat trait and WalletFloat interface to model.

php
use Bavix\\Wallet\\Traits\\HasWalletFloat;
+use Bavix\\Wallet\\Interfaces\\WalletFloat;
+use Bavix\\Wallet\\Interfaces\\Wallet;
+
+class User extends Model implements Wallet, WalletFloat
+{
+    use HasWalletFloat;
+}

Now we make transactions.

php
$user = User::first();
+$user->balance; // 100
+$user->balanceFloat; // 1.00
+
+$user->depositFloat(1.37);
+$user->balance; // 237
+$user->balanceFloat; // 2.37

You can get the float amount by accessing the amountFloat attribute on the transaction model

php
$transaction->amount; // 137
+$transaction->amountFloat; // 1.37
`,43),h=[t];function e(p,k,r,d,E,g){return a(),i("div",null,h)}const o=s(l,[["render",e]]);export{c as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_introduction_basic-usage.md.8BCaXADC.lean.js b/docs/.vitepress/dist/assets/guide_introduction_basic-usage.md.8BCaXADC.lean.js new file mode 100644 index 000000000..4a0ab70c9 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_introduction_basic-usage.md.8BCaXADC.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"Basic Usage","description":"","frontmatter":{},"headers":[],"relativePath":"guide/introduction/basic-usage.md","filePath":"guide/introduction/basic-usage.md"}'),l={name:"guide/introduction/basic-usage.md"},t=n("",43),h=[t];function e(p,k,r,d,E,g){return a(),i("div",null,h)}const o=s(l,[["render",e]]);export{c as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_introduction_configuration.md.BkIk8Nu_.js b/docs/.vitepress/dist/assets/guide_introduction_configuration.md.BkIk8Nu_.js new file mode 100644 index 000000000..1899ef561 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_introduction_configuration.md.BkIk8Nu_.js @@ -0,0 +1,27 @@ +import{_ as s,c as a,o as i,a3 as t}from"./chunks/framework.OdeEVNy0.js";const E=JSON.parse('{"title":"Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"guide/introduction/configuration.md","filePath":"guide/introduction/configuration.md"}'),e={name:"guide/introduction/configuration.md"},l=t(`

Configuration

Though this package is crafted to suit most of your needs by default, you can edit the configuration file to suit certain demands.

Environment

NameDescriptionDefault
WALLET_MATH_SCALESelect mathematical precision64
WALLET_CACHE_DRIVERCache for wallet balancearray
WALLET_CACHE_TTLCache TTL for wallet balance24h
WALLET_LOCK_DRIVERLock for walletsarray
WALLET_LOCK_TTLLock TTL for wallets1s
WALLET_TRANSACTION_TABLE_NAMETransaction table nametransactions
WALLET_TRANSFER_TABLE_NAMETransfer table nametransfers
WALLET_WALLET_TABLE_NAMEWallet table namewallets
WALLET_DEFAULT_WALLET_NAMEDefault wallet nameDefault Wallet
WALLET_DEFAULT_WALLET_SLUGDefault wallet slugdefault

Configure default wallet

Customize name,slug and meta of default wallet.

config/wallet.php:

php
'default' => [
+            'name' => 'Ethereum',
+            'slug' => 'ETH',
+            'meta' => [],
+        ],

Extend base Wallet model

You can extend base Wallet model by creating a new class that extends Bavix\\Wallet\\Models\\Wallet and registering the new class in config/wallet.php. Example MyWallet.php

App/Models/MyWallet.php:

php
use Bavix\\Wallet\\Models\\Wallet as WalletBase;
+
+class MyWallet extends WalletBase {
+    public function helloWorld(): string { return "hello world"; }
+}

Register base Wallet model

config/wallet.php:

php
    'wallet' => [
+        'table' => 'wallets',
+        'model' => MyWallet::class,
+        'creating' => [],
+        'default' => [
+            'name' => 'Default Wallet',
+            'slug' => 'default',
+            'meta' => [],
+        ],
+    ],
php
   echo $user->wallet->helloWorld();

This same method above, can be used to extend the base Transfer and Transaction models and registering the extended models in the configuration file.

Changing wallet decimal places

You can change the default wallet decimal places, in wallet config file. This can be useful when working with fractional numbers.

config/wallet.php:

php
  /**
+     * Base model 'wallet'.
+     */
+    'wallet' => [
+        ....
+        'creating' => [
+            'decimal_places' => 18,
+        ],
+       ....
+    ],
`,21),n=[l];function h(p,d,k,r,o,c){return i(),a("div",null,n)}const y=s(e,[["render",h]]);export{E as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_introduction_configuration.md.BkIk8Nu_.lean.js b/docs/.vitepress/dist/assets/guide_introduction_configuration.md.BkIk8Nu_.lean.js new file mode 100644 index 000000000..05670e138 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_introduction_configuration.md.BkIk8Nu_.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a3 as t}from"./chunks/framework.OdeEVNy0.js";const E=JSON.parse('{"title":"Configuration","description":"","frontmatter":{},"headers":[],"relativePath":"guide/introduction/configuration.md","filePath":"guide/introduction/configuration.md"}'),e={name:"guide/introduction/configuration.md"},l=t("",21),n=[l];function h(p,d,k,r,o,c){return i(),a("div",null,n)}const y=s(e,[["render",h]]);export{E as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_introduction_index.md.OLZq5yD4.js b/docs/.vitepress/dist/assets/guide_introduction_index.md.OLZq5yD4.js new file mode 100644 index 000000000..90bd69024 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_introduction_index.md.OLZq5yD4.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as a,a3 as o}from"./chunks/framework.OdeEVNy0.js";const f=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"guide/introduction/index.md","filePath":"guide/introduction/index.md"}'),r={name:"guide/introduction/index.md"},i=o('

Introduction


Laravel Wallet

laravel-wallet - Easy work with virtual wallet.

Support

Please ask questions on the Github issues page.

',6),n=[i];function s(c,d,l,u,p,_){return a(),t("div",null,n)}const m=e(r,[["render",s]]);export{f as __pageData,m as default}; diff --git a/docs/.vitepress/dist/assets/guide_introduction_index.md.OLZq5yD4.lean.js b/docs/.vitepress/dist/assets/guide_introduction_index.md.OLZq5yD4.lean.js new file mode 100644 index 000000000..2fd7977e0 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_introduction_index.md.OLZq5yD4.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as a,a3 as o}from"./chunks/framework.OdeEVNy0.js";const f=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"guide/introduction/index.md","filePath":"guide/introduction/index.md"}'),r={name:"guide/introduction/index.md"},i=o("",6),n=[i];function s(c,d,l,u,p,_){return a(),t("div",null,n)}const m=e(r,[["render",s]]);export{f as __pageData,m as default}; diff --git a/docs/.vitepress/dist/assets/guide_introduction_installation.md.cd8KQDEh.js b/docs/.vitepress/dist/assets/guide_introduction_installation.md.cd8KQDEh.js new file mode 100644 index 000000000..e6559b89d --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_introduction_installation.md.cd8KQDEh.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as t,a3 as s}from"./chunks/framework.OdeEVNy0.js";const k=JSON.parse('{"title":"Installation","description":"","frontmatter":{},"headers":[],"relativePath":"guide/introduction/installation.md","filePath":"guide/introduction/installation.md"}'),e={name:"guide/introduction/installation.md"},n=s('

Installation

Composer

The recommended installation method is using Composer.

In your project root just run:

bash
composer req bavix/laravel-wallet

Ensure that you’ve set up your project to autoload Composer-installed packages.

You can use it for customization

Sometimes it is useful...

Run Migrations

Publish the migrations with this artisan command:

bash
php artisan vendor:publish --tag=laravel-wallet-migrations

Configuration

You can publish the config file with this artisan command:

bash
php artisan vendor:publish --tag=laravel-wallet-config

After installing the package, you can proceed to use it or configure it to suit your needs.

',15),o=[n];function r(l,h,p,c,d,u){return t(),i("div",null,o)}const m=a(e,[["render",r]]);export{k as __pageData,m as default}; diff --git a/docs/.vitepress/dist/assets/guide_introduction_installation.md.cd8KQDEh.lean.js b/docs/.vitepress/dist/assets/guide_introduction_installation.md.cd8KQDEh.lean.js new file mode 100644 index 000000000..65f4df13d --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_introduction_installation.md.cd8KQDEh.lean.js @@ -0,0 +1 @@ +import{_ as a,c as i,o as t,a3 as s}from"./chunks/framework.OdeEVNy0.js";const k=JSON.parse('{"title":"Installation","description":"","frontmatter":{},"headers":[],"relativePath":"guide/introduction/installation.md","filePath":"guide/introduction/installation.md"}'),e={name:"guide/introduction/installation.md"},n=s("",15),o=[n];function r(l,h,p,c,d,u){return t(),i("div",null,o)}const m=a(e,[["render",r]]);export{k as __pageData,m as default}; diff --git a/docs/.vitepress/dist/assets/guide_introduction_upgrade.md.DAWn6XRt.js b/docs/.vitepress/dist/assets/guide_introduction_upgrade.md.DAWn6XRt.js new file mode 100644 index 000000000..0d6d16fd0 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_introduction_upgrade.md.DAWn6XRt.js @@ -0,0 +1,58 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.OdeEVNy0.js";const E=JSON.parse('{"title":"Upgrade Guide","description":"","frontmatter":{},"headers":[],"relativePath":"guide/introduction/upgrade.md","filePath":"guide/introduction/upgrade.md"}'),t={name:"guide/introduction/upgrade.md"},n=e(`

Upgrade Guide

1.x.x → 2.x.x

Replace ::with('balance') to ::with('wallet')


2.1.x → 2.2.x

Replace CanBePaid to CanPay.

Replace CanBePaidFloat to CanPayFloat.


2.2.x → 2.4.x

Replace calculateBalance to refreshBalance


2.4.x → 3.0.x

Replace path bavix.wallet::transaction to Bavix\\Wallet\\Models\\Transaction::class

Replace path bavix.wallet::transfer to Bavix\\Wallet\\Models\\Transfer::class

Replace path bavix.wallet::wallet to Bavix\\Wallet\\Models\\Wallet::class

php
// old
+app('bavix.wallet::transaction'); 
+// new
+app(Bavix\\Wallet\\Models\\Transaction::class);

Add the $quantity parameter to the canBuy method.

php
// old
+public function canBuy(Customer $customer, bool $force = false): bool
+// new
+public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool

Add method getUniqueId to Interface Product

php
class Item extends Model implements Product
+{
+    
+    // Your method
+    
+    public function getUniqueId(): string
+    {
+        return (string)$this->getKey();
+    }
+    
+}

3.0.x → 3.1.x

Replace Taxing to Taxable.

3.1.x → 4.0.x

If you are using php 7.1, then version 4.0 is not available to you. You need to update php.

Removed support for older versions of laravel/cashier. We support 7+.

If you use payment for goods

You must add the argument Customer $customer to the getAmountProduct method of your model.

Your code on 3.x:

php
    public function getAmountProduct(): int
+    {
+        return $this->price;
+    }

Your code on 4.x:

php
    public function getAmountProduct(Customer $customer): int
+    {
+        return $this->price;
+    }

4.0.x → 5.0.x

By updating the library from 4.x to 5.x you lose strong typing. This solution was necessary to support APM (Arbitrary Precision Mathematics).

In your goods:

Your code on 4.x:

php
    public function getAmountProduct(Customer $customer): int  { ... }
+
+    public function getFeePercent(): float  { ... }
+
+    public function getMinimalFee(): int { ... }

Your code on 5.x:

php
    public function getAmountProduct(Customer $customer) { ... }
+
+    public function getFeePercent() { ... }
+
+    public function getMinimalFee() { ... }

In the exchange rate processing service:

Your code on 4.x:

php
    protected function rate(Wallet $wallet): float { ... }
+
+    public function convertTo(Wallet $wallet): float { ... }

Your code on 5.x:

php
    protected function rate(Wallet $wallet) { ... }
+
+    public function convertTo(Wallet $wallet) { ... }

5.x.x → 6.0.x

Go to config/wallet.php file (if you have it) and edit it.

Removing unnecessary code.

php
$bcLoaded = extension_loaded('bcmath');	
+$mathClass = Math::class;	
+switch (true) {	
+    case class_exists(BigDecimal::class):	
+        $mathClass = BrickMath::class;	
+        break;	
+    case $bcLoaded:	
+        $mathClass = BCMath::class;	
+        break;	
+}

Replace your math class ($mathClass) with brick/math.

Your code on 5.x:

php
    'mathable' => $mathClass,

Your code on 6.x:

php
    'mathable' => BrickMath::class,

6.x.x → 6.2.4

You need to update to the latest version for all migrations to appear.

6.2.4 → 7.x.x

Update config/wallet.php

The config/wallet.php config has changed a lot, if you have it in your project, then replace it run.

bash
php artisan vendor:publish --tag=laravel-wallet-config --force

Then return your settings. The package configuration has changed globally and there is no point in describing each key 🔑


UUID for wallet

The uuid field has been added to the wallet table, which is now actively used. If you have a highload, then I recommend that you add the field yourself and mark the migration (UpdateWalletsUuidTable) completed. If you have mysql, it is better to do this via pt-online-schema-change.

If you have a small project and a small wallet base, then the migration will be applied automatically.


That's it, you can use all 7.x functions to the fullest. The contract did not change globally, added more stringency and toned down the performance of the package. On a basket of 150 products, the acceleration is a whopping 24x.

All changes can be found in the pull request. The kernel has changed globally, I would not recommend switching to version 7.0.0 at the very beginning, there may be bugs. I advise you should at least 7.0.1.

7.x.x → 8.0.x

Nothing needs to be done.

8.0.x → 8.1.x

Replace getAvailableBalance to getAvailableBalanceAttribute (method) or available_balance (property).


Cart methods now support fluent-dto. It is necessary to replace the old code with a new one, for example:

php
// old
+$cart = app(\\Bavix\\Wallet\\Objects\\Cart::class)
+    ->addItems($products)
+    ->addItem($product)
+    ->setMeta(['hello' => 'world']);
+    
+$cart->addItem($product);
+
+// new. fluent
+$cart = app(\\Bavix\\Wallet\\Objects\\Cart::class)
+    ->withItems($products)
+    ->withItem($product)
+    ->withMeta(['hello' => 'world']);
+
+$cart = $cart->withItem($product);

8.1.x+ → 9.0.x

The logic of storing transfers between accounts has changed. Previously, money could be credited to the user directly, but starting from version nine, all transactions go strictly between wallets. Thanks to this approach, finally, there will be full-fledged work with uuid identifiers in the project.

To migrate to the correct structure, you need to run the command:

artisan bx:transfer:fix

If the command fails, then the command must be restarted. Continue until the command starts executing immediately (no bad entries left).


The product has been divided into two interfaces:

  • ProductLimitedInterface. Needed to create limited goods;
  • ProductInterface. Needed for an infinite number of products;

The old Product interface should be replaced with one of these.

Replace Bavix\\Wallet\\Interfaces\\Product to Bavix\\Wallet\\Interfaces\\ProductLimitedInterface.

9.x.x → 10.0.x

  1. If you have a custom BookkeeperServiceInterface, then you need to update the contract.
  2. If you catch a LockProviderNotFoundException, then you need to remove the check. This exception no longer exists.
  3. If you have specific requests for transfers using the MorphMany relation, then you need to rewrite it to the HasMany relation.

10.x.x → 11.0.x

  1. If you have mariadb, then the minimum supported version is 10.10. More details here: https://github.com/laravel/framework/pull/48455;
  2. Perform new package migrations, support for soft deleted has been added;
  3. If you used delete methods, then they need to be replaced with forceDelete (if soft delete support is not needed);
  4. Obsolete columns from_type, to_type in the transfers table have been physically removed. Make sure you don't use them;
  5. An extra column has been added to the transfers table. Don't forget to apply all new migrations;
  6. The Bavix\\Wallet\\Interfaces\\Wallet contract has been extended with the receivedTransfers method. If you overridden the implementation, then implement the new method;
`,87),h=[n];function l(p,k,d,r,o,c){return a(),i("div",null,h)}const y=s(t,[["render",l]]);export{E as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_introduction_upgrade.md.DAWn6XRt.lean.js b/docs/.vitepress/dist/assets/guide_introduction_upgrade.md.DAWn6XRt.lean.js new file mode 100644 index 000000000..b2054ed1d --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_introduction_upgrade.md.DAWn6XRt.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.OdeEVNy0.js";const E=JSON.parse('{"title":"Upgrade Guide","description":"","frontmatter":{},"headers":[],"relativePath":"guide/introduction/upgrade.md","filePath":"guide/introduction/upgrade.md"}'),t={name:"guide/introduction/upgrade.md"},n=e("",87),h=[n];function l(p,k,d,r,o,c){return a(),i("div",null,h)}const y=s(t,[["render",l]]);export{E as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_multi_new-wallet.md.C77SSs4v.js b/docs/.vitepress/dist/assets/guide_multi_new-wallet.md.C77SSs4v.js new file mode 100644 index 000000000..a910d80f9 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_multi_new-wallet.md.C77SSs4v.js @@ -0,0 +1,28 @@ +import{_ as s,c as i,o as a,a3 as l}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"Create a wallet and use it","description":"","frontmatter":{},"headers":[],"relativePath":"guide/multi/new-wallet.md","filePath":"guide/multi/new-wallet.md"}'),t={name:"guide/multi/new-wallet.md"},e=l(`

Create a wallet and use it

You can create an unlimited number of wallets, but the slug for each wallet should be unique.


User Model

Add the HasWallets trait's and Wallet interface to model.

php
use Bavix\\Wallet\\Traits\\HasWallets;
+use Bavix\\Wallet\\Interfaces\\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallets;
+}

Create a wallet

Find user:

php
$user = User::first();

Create a new wallet.

php
$user->hasWallet('my-wallet'); // bool(false)
+$wallet = $user->createWallet([
+    'name' => 'New Wallet',
+    'slug' => 'my-wallet',
+]);
+
+$user->hasWallet('my-wallet'); // bool(true)
+
+$wallet->deposit(100);
+$wallet->balance; // 100
+$wallet->balanceFloatNum; // 1.00

How to get the right wallet?

php
$myWallet = $user->getWallet('my-wallet');
+$myWallet->balance; // 100
+$myWallet->balanceFloatNum; // 1.00

Default Wallet + MultiWallet

Is it possible to use the default wallet and multi-wallets at the same time? Yes.

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Traits\\HasWallets;
+use Bavix\\Wallet\\Interfaces\\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet, HasWallets;
+}

How to get the default wallet?

php
$wallet = $user->wallet;
+$wallet->balance; // 10
+$wallet->balanceFloatNum; // 0.10

It's simple!

`,19),n=[e];function h(p,k,d,r,E,g){return a(),i("div",null,n)}const o=s(t,[["render",h]]);export{c as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_multi_new-wallet.md.C77SSs4v.lean.js b/docs/.vitepress/dist/assets/guide_multi_new-wallet.md.C77SSs4v.lean.js new file mode 100644 index 000000000..3bd9e7be6 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_multi_new-wallet.md.C77SSs4v.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as l}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"Create a wallet and use it","description":"","frontmatter":{},"headers":[],"relativePath":"guide/multi/new-wallet.md","filePath":"guide/multi/new-wallet.md"}'),t={name:"guide/multi/new-wallet.md"},e=l("",19),n=[e];function h(p,k,d,r,E,g){return a(),i("div",null,n)}const o=s(t,[["render",h]]);export{c as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_multi_transaction-filter.md.BJcsCpfk.js b/docs/.vitepress/dist/assets/guide_multi_transaction-filter.md.BJcsCpfk.js new file mode 100644 index 000000000..de91efc79 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_multi_transaction-filter.md.BJcsCpfk.js @@ -0,0 +1,28 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const F=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/multi/transaction-filter.md","filePath":"guide/multi/transaction-filter.md"}'),t={name:"guide/multi/transaction-filter.md"},h=n(`

Transaction Filter

Often developers ask me about the transactions method. Yes, this method displays ALL transactions for the wallet owner. If you only need to filter one wallet at a time, now you can use the walletTransactions method.

php
/** @var \\Bavix\\Wallet\\Models\\Wallet $wallet */
+
+$query = $wallet->walletTransactions();

Let's take a look at a livelier code example:

php
$user->transactions()->count(); // 0
+
+// Multi wallets and default wallet can be used together
+// default wallet
+$user->deposit(100);
+$user->wallet->deposit(200);
+$user->wallet->withdraw(1);
+
+// usd
+$usd = $user->createWallet(['name' => 'USD']);
+$usd->deposit(100);
+
+// eur
+$eur = $user->createWallet(['name' => 'EUR']);
+$eur->deposit(100);
+
+$user->transactions()->count(); // 5
+$user->wallet->transactions()->count(); // 5
+$usd->transactions()->count(); // 5
+$eur->transactions()->count(); // 5
+// the transactions method returns data relative to the owner of the wallet, for all transactions
+
+$user->walletTransactions()->count(); // 3. we get the default wallet
+$user->wallet->walletTransactions()->count(); // 3
+$usd->walletTransactions()->count(); // 1
+$eur->walletTransactions()->count(); // 1

It's simple!

`,6),l=[h];function k(p,e,r,E,d,g){return a(),i("div",null,l)}const c=s(t,[["render",k]]);export{F as __pageData,c as default}; diff --git a/docs/.vitepress/dist/assets/guide_multi_transaction-filter.md.BJcsCpfk.lean.js b/docs/.vitepress/dist/assets/guide_multi_transaction-filter.md.BJcsCpfk.lean.js new file mode 100644 index 000000000..8cac52659 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_multi_transaction-filter.md.BJcsCpfk.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const F=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/multi/transaction-filter.md","filePath":"guide/multi/transaction-filter.md"}'),t={name:"guide/multi/transaction-filter.md"},h=n("",6),l=[h];function k(p,e,r,E,d,g){return a(),i("div",null,l)}const c=s(t,[["render",k]]);export{F as __pageData,c as default}; diff --git a/docs/.vitepress/dist/assets/guide_multi_transfer.md.CmmGlTvH.js b/docs/.vitepress/dist/assets/guide_multi_transfer.md.CmmGlTvH.js new file mode 100644 index 000000000..f0d955910 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_multi_transfer.md.CmmGlTvH.js @@ -0,0 +1,36 @@ +import{_ as s,c as i,o as a,a3 as t}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"Transfer between wallets","description":"","frontmatter":{},"headers":[],"relativePath":"guide/multi/transfer.md","filePath":"guide/multi/transfer.md"}'),n={name:"guide/multi/transfer.md"},h=t(`

Transfer between wallets

Transfer in our system are two well-known Deposit and Withdraw operations that are performed in one transaction.

The transfer takes place between wallets.


User Model

Prepare the model, add the HasWallets trait's and Wallet interface.

php
use Bavix\\Wallet\\Traits\\HasWallets;
+use Bavix\\Wallet\\Interfaces\\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallets;
+}

Make a Transfer

Find user:

php
$first = User::first(); 
+$last = User::orderBy('id', 'desc')->first(); // last user
+$first->getKey() !== $last->getKey(); // true

Create new wallets for users.

php
$firstWallet = $first->createWallet(['name' => 'First User Wallet']);
+$lastWallet = $last->createWallet(['name' => 'Second User Wallet']);
+
+$firstWallet->deposit(100);
+$firstWallet->balance; // 100
+$lastWallet->balance; // 0

The transfer will be from the first user to the last.

php
$firstWallet->transfer($lastWallet, 5); 
+$firstWallet->balance; // 95
+$lastWallet->balance; // 5

It's simple!

Force Transfer

Check the user's balance.

php
$firstWallet->balance; // 100
+$lastWallet->balance; // 0

The transfer will be from the first user to the second.

php
$firstWallet->forceTransfer($lastWallet, 500); 
+$firstWallet->balance; // -400
+$lastWallet->balance; // 500

It worked!

Change the meta and confirmation.

Check the user's balance.

php
$firstWallet->balanceInt; // 1_000
+$secondWallet->balanceInt; // 0

We will execute the transfer, but without confirmation of the withdrawal of funds.

php
use Bavix\\Wallet\\External\\Dto\\Extra;
+use Bavix\\Wallet\\External\\Dto\\Option;
+
+/** @var $firstWallet \\Bavix\\Wallet\\Interfaces\\Wallet */
+$transfer = $firstWallet->transfer($secondWallet, 500, new Extra(
+    deposit: ['message' => 'Hello, secondWallet!'],
+    withdraw: new Option(meta: ['something' => 'anything'], confirmed: false)
+));
+
+$transfer->withdraw->meta; // ['something' => 'anything']
+$transfer->withdraw->confirmed; // false
+
+$transfer->deposit->meta; // ['message' => 'Hello, secondWallet!']
+$transfer->deposit->confirmed; // true
+
+$firstWallet->balanceInt; // 1_000
+$secondWallet->balanceInt; // 500

It's simple!

`,27),l=[h];function e(p,k,r,E,d,g){return a(),i("div",null,l)}const o=s(n,[["render",e]]);export{c as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_multi_transfer.md.CmmGlTvH.lean.js b/docs/.vitepress/dist/assets/guide_multi_transfer.md.CmmGlTvH.lean.js new file mode 100644 index 000000000..fcea8c787 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_multi_transfer.md.CmmGlTvH.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as t}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"Transfer between wallets","description":"","frontmatter":{},"headers":[],"relativePath":"guide/multi/transfer.md","filePath":"guide/multi/transfer.md"}'),n={name:"guide/multi/transfer.md"},h=t("",27),l=[h];function e(p,k,r,E,d,g){return a(),i("div",null,l)}const o=s(n,[["render",e]]);export{c as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_purchases_cart.md.9T34pvFh.js b/docs/.vitepress/dist/assets/guide_purchases_cart.md.9T34pvFh.js new file mode 100644 index 000000000..54a87c208 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_purchases_cart.md.9T34pvFh.js @@ -0,0 +1,86 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"Cart","description":"","frontmatter":{},"headers":[],"relativePath":"guide/purchases/cart.md","filePath":"guide/purchases/cart.md"}'),h={name:"guide/purchases/cart.md"},t=n(`

Cart

User Model

Add the CanPay trait and Customer interface to your User model.

The trait CanPay already inherits HasWallet, reuse will cause an error.

php
use Bavix\\Wallet\\Traits\\CanPay;
+use Bavix\\Wallet\\Interfaces\\Customer;
+
+class User extends Model implements Customer
+{
+    use CanPay;
+}

Item Model

Add the HasWallet trait and interface to Item model.

Starting from version 9.x there are two product interfaces:

  • For an unlimited number of products (ProductInterface);
  • For a limited number of products (ProductLimitedInterface);

An example with an unlimited number of products:

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Customer;
+use Bavix\\Wallet\\Interfaces\\ProductInterface;
+
+class Item extends Model implements ProductInterface
+{
+    use HasWallet;
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return round($this->price * 100);
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

Example with a limited number of products:

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Customer;
+use Bavix\\Wallet\\Interfaces\\ProductLimitedInterface;
+
+class Item extends Model implements ProductLimitedInterface
+{
+    use HasWallet;
+
+    public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool
+    {
+        /**
+         * This is where you implement the constraint logic. 
+         * 
+         * If the service can be purchased once, then
+         *  return !$customer->paid($this);
+         */
+        return true; 
+    }
+    
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return round($this->price * 100);
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

I do not recommend using the limited interface when working with a shopping cart. If you are working with a shopping cart, then you should override the PurchaseServiceInterface interface. With it, you can check the availability of all products with one request, there will be no N-queries in the database.

Fill the cart

Find the user and check the balance.

php
$user = User::first();
+$user->balance; // 0

Let's start shopping.

php
use Bavix\\Wallet\\Objects\\Cart;
+
+$list = [
+    'potato' => 3,
+    'carrot' => 10,
+];
+
+$products = Item::query()
+    ->whereIn('slug', ['potato', 'carrot'])
+    ->get();
+
+$cart = app(Cart::class);
+foreach ($products as $product) {
+    $cart = $cart->withItem($product, quantity: $list[$product->slug]);
+}
+
+$cartTotal = $cart->getTotal($user); // 15127
+$user->deposit($cartTotal); 
+$user->balanceInt; // 15127
+$user->balanceFloat; // 151.27
+
+$cart = $cart->withItem(current($products), pricePerItem: 500); // 15127+500
+$user->deposit(500);
+$user->balanceInt; // 15627
+$user->balanceFloat; // 156.27
+
+(bool)$user->payCart($cart); // true
+$user->balanceFloat; // 0

It's simple!

`,20),l=[t];function k(p,e,r,E,d,g){return a(),i("div",null,l)}const F=s(h,[["render",k]]);export{c as __pageData,F as default}; diff --git a/docs/.vitepress/dist/assets/guide_purchases_cart.md.9T34pvFh.lean.js b/docs/.vitepress/dist/assets/guide_purchases_cart.md.9T34pvFh.lean.js new file mode 100644 index 000000000..67d376a1b --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_purchases_cart.md.9T34pvFh.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"Cart","description":"","frontmatter":{},"headers":[],"relativePath":"guide/purchases/cart.md","filePath":"guide/purchases/cart.md"}'),h={name:"guide/purchases/cart.md"},t=n("",20),l=[t];function k(p,e,r,E,d,g){return a(),i("div",null,l)}const F=s(h,[["render",k]]);export{c as __pageData,F as default}; diff --git a/docs/.vitepress/dist/assets/guide_purchases_gift.md.BL1g8j1n.js b/docs/.vitepress/dist/assets/guide_purchases_gift.md.BL1g8j1n.js new file mode 100644 index 000000000..b5473ff76 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_purchases_gift.md.BL1g8j1n.js @@ -0,0 +1,69 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"Gift","description":"","frontmatter":{},"headers":[],"relativePath":"guide/purchases/gift.md","filePath":"guide/purchases/gift.md"}'),t={name:"guide/purchases/gift.md"},h=n(`

Gift

User Model

Add the CanPay trait and Customer interface to your User model.

The trait CanPay already inherits HasWallet, reuse will cause an error.

php
use Bavix\\Wallet\\Traits\\CanPay;
+use Bavix\\Wallet\\Interfaces\\Customer;
+
+class User extends Model implements Customer
+{
+    use CanPay;
+}

Item Model

Add the HasWallet trait and interface to Item model.

Starting from version 9.x there are two product interfaces:

  • For an unlimited number of products (ProductInterface);
  • For a limited number of products (ProductLimitedInterface);

An example with an unlimited number of products:

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Customer;
+use Bavix\\Wallet\\Interfaces\\ProductInterface;
+
+class Item extends Model implements ProductInterface
+{
+    use HasWallet;
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

Example with a limited number of products:

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Customer;
+use Bavix\\Wallet\\Interfaces\\ProductLimitedInterface;
+
+class Item extends Model implements ProductLimitedInterface
+{
+    use HasWallet;
+
+    public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool
+    {
+        /**
+         * This is where you implement the constraint logic. 
+         * 
+         * If the service can be purchased once, then
+         *  return !$customer->paid($this);
+         */
+        return true; 
+    }
+    
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

I do not recommend using the limited interface when working with a shopping cart. If you are working with a shopping cart, then you should override the PurchaseServiceInterface interface. With it, you can check the availability of all products with one request, there will be no N-queries in the database.

Santa Claus, give gifts

Find the user's and check the balance.

php
$first = User::first(); 
+$last = User::orderBy('id', 'desc')->first(); // last user
+$first->getKey() !== $last->getKey(); // true
+
+$first->balance; // 115
+$last->balance; // 0

One user wants to give a gift to another. Find the product.

php
$item = Item::first();
+$item->getAmountProduct($first); // 100
+$item->balance; // 0

The first user buys the product and gives it.

If the product uses the Taxable interface, then Santa will pay tax

php
$first->gift($last, $item);
+(bool)$last->paid($item, true); // bool(true)
+$first->balance; // 15
+$last->balance; // 0
+$item->balance; // 100

It's simple!

`,23),l=[h];function p(k,e,r,d,E,g){return a(),i("div",null,l)}const o=s(t,[["render",p]]);export{c as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_purchases_gift.md.BL1g8j1n.lean.js b/docs/.vitepress/dist/assets/guide_purchases_gift.md.BL1g8j1n.lean.js new file mode 100644 index 000000000..37d968ed8 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_purchases_gift.md.BL1g8j1n.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"Gift","description":"","frontmatter":{},"headers":[],"relativePath":"guide/purchases/gift.md","filePath":"guide/purchases/gift.md"}'),t={name:"guide/purchases/gift.md"},h=n("",23),l=[h];function p(k,e,r,d,E,g){return a(),i("div",null,l)}const o=s(t,[["render",p]]);export{c as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_purchases_payment-free.md.BkfY0cCS.js b/docs/.vitepress/dist/assets/guide_purchases_payment-free.md.BkfY0cCS.js new file mode 100644 index 000000000..e7a6b3fcb --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_purchases_payment-free.md.BkfY0cCS.js @@ -0,0 +1,64 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const y=JSON.parse('{"title":"Payment Free","description":"","frontmatter":{},"headers":[],"relativePath":"guide/purchases/payment-free.md","filePath":"guide/purchases/payment-free.md"}'),t={name:"guide/purchases/payment-free.md"},h=n(`

Payment Free

User Model

Add the CanPay trait and Customer interface to your User model.

The trait CanPay already inherits HasWallet, reuse will cause an error.

php
use Bavix\\Wallet\\Traits\\CanPay;
+use Bavix\\Wallet\\Interfaces\\Customer;
+
+class User extends Model implements Customer
+{
+    use CanPay;
+}

Item Model

Add the HasWallet trait and interface to Item model.

Starting from version 9.x there are two product interfaces:

  • For an unlimited number of products (ProductInterface);
  • For a limited number of products (ProductLimitedInterface);

An example with an unlimited number of products:

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Customer;
+use Bavix\\Wallet\\Interfaces\\ProductInterface;
+
+class Item extends Model implements ProductInterface
+{
+    use HasWallet;
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

Example with a limited number of products:

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Customer;
+use Bavix\\Wallet\\Interfaces\\ProductLimitedInterface;
+
+class Item extends Model implements ProductLimitedInterface
+{
+    use HasWallet;
+
+    public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool
+    {
+        /**
+         * This is where you implement the constraint logic. 
+         * 
+         * If the service can be purchased once, then
+         *  return !$customer->paid($this);
+         */
+        return true; 
+    }
+    
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

I do not recommend using the limited interface when working with a shopping cart. If you are working with a shopping cart, then you should override the PurchaseServiceInterface interface. With it, you can check the availability of all products with one request, there will be no N-queries in the database.

Pay Free

Find the user and check the balance.

php
$user = User::first();
+$user->balance; // 100

Find the goods and check the cost.

php
$item = Item::first();
+$item->getAmountProduct($user); // 100
+$item->balance; // 0

Purchase!

php
$user->payFree($item);
+(bool)$user->paid($item); // bool(true)
+$user->balance; // 100
+$item->balance; // 0

It's simple!

`,22),l=[h];function e(p,k,r,d,E,g){return a(),i("div",null,l)}const o=s(t,[["render",e]]);export{y as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_purchases_payment-free.md.BkfY0cCS.lean.js b/docs/.vitepress/dist/assets/guide_purchases_payment-free.md.BkfY0cCS.lean.js new file mode 100644 index 000000000..b69764db0 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_purchases_payment-free.md.BkfY0cCS.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const y=JSON.parse('{"title":"Payment Free","description":"","frontmatter":{},"headers":[],"relativePath":"guide/purchases/payment-free.md","filePath":"guide/purchases/payment-free.md"}'),t={name:"guide/purchases/payment-free.md"},h=n("",22),l=[h];function e(p,k,r,d,E,g){return a(),i("div",null,l)}const o=s(t,[["render",e]]);export{y as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_purchases_payment.md.CqJ47XjU.js b/docs/.vitepress/dist/assets/guide_purchases_payment.md.CqJ47XjU.js new file mode 100644 index 000000000..6c48c2e07 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_purchases_payment.md.CqJ47XjU.js @@ -0,0 +1,65 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const y=JSON.parse('{"title":"Payment","description":"","frontmatter":{},"headers":[],"relativePath":"guide/purchases/payment.md","filePath":"guide/purchases/payment.md"}'),t={name:"guide/purchases/payment.md"},h=n(`

Payment

User Model

Add the CanPay trait and Customer interface to your User model.

The trait CanPay already inherits HasWallet, reuse will cause an error.

php
use Bavix\\Wallet\\Traits\\CanPay;
+use Bavix\\Wallet\\Interfaces\\Customer;
+
+class User extends Model implements Customer
+{
+    use CanPay;
+}

Item Model

Add the HasWallet trait and interface to Item model.

Starting from version 9.x there are two product interfaces:

  • For an unlimited number of products (ProductInterface);
  • For a limited number of products (ProductLimitedInterface);

An example with an unlimited number of products:

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Customer;
+use Bavix\\Wallet\\Interfaces\\ProductInterface;
+
+class Item extends Model implements ProductInterface
+{
+    use HasWallet;
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

Example with a limited number of products:

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Customer;
+use Bavix\\Wallet\\Interfaces\\ProductLimitedInterface;
+
+class Item extends Model implements ProductLimitedInterface
+{
+    use HasWallet;
+
+    public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool
+    {
+        /**
+         * This is where you implement the constraint logic. 
+         * 
+         * If the service can be purchased once, then
+         *  return !$customer->paid($this);
+         */
+        return true; 
+    }
+    
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

I do not recommend using the limited interface when working with a shopping cart. If you are working with a shopping cart, then you should override the PurchaseServiceInterface interface. With it, you can check the availability of all products with one request, there will be no N-queries in the database.

Proceed to purchase

Find the user and check the balance.

php
$user = User::first();
+$user->balance; // 100

Find the goods and check the cost.

php
$item = Item::first();
+$item->getAmountProduct($user); // 100

The user can buy a product, buy...

php
$user->pay($item);
+$user->balance; // 0

What happens if the user does not have the funds? The same as with the withdrawal.

php
$user->balance; // 0
+$user->pay($item);
+// throw an exception

The question arises, how do you know that the product is purchased?

php
(bool)$user->paid($item); // bool(true)

Safe Pay

To not write try and catch use safePay method.

php
if ($user->safePay($item)) {
+  // try to buy again )
+}

It's simple!

`,29),e=[h];function p(l,k,r,d,E,g){return a(),i("div",null,e)}const o=s(t,[["render",p]]);export{y as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_purchases_payment.md.CqJ47XjU.lean.js b/docs/.vitepress/dist/assets/guide_purchases_payment.md.CqJ47XjU.lean.js new file mode 100644 index 000000000..b3322a601 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_purchases_payment.md.CqJ47XjU.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const y=JSON.parse('{"title":"Payment","description":"","frontmatter":{},"headers":[],"relativePath":"guide/purchases/payment.md","filePath":"guide/purchases/payment.md"}'),t={name:"guide/purchases/payment.md"},h=n("",29),e=[h];function p(l,k,r,d,E,g){return a(),i("div",null,e)}const o=s(t,[["render",p]]);export{y as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_purchases_receiving.md.DgdGYpnV.js b/docs/.vitepress/dist/assets/guide_purchases_receiving.md.DgdGYpnV.js new file mode 100644 index 000000000..58609b033 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_purchases_receiving.md.DgdGYpnV.js @@ -0,0 +1,70 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const y=JSON.parse('{"title":"Payment. Customize receiving","description":"","frontmatter":{},"headers":[],"relativePath":"guide/purchases/receiving.md","filePath":"guide/purchases/receiving.md"}'),t={name:"guide/purchases/receiving.md"},h=n(`

Payment. Customize receiving

User Model

Add the CanPay trait and Customer interface to your User model.

The trait CanPay already inherits HasWallet, reuse will cause an error.

php
use Bavix\\Wallet\\Traits\\CanPay;
+use Bavix\\Wallet\\Interfaces\\Customer;
+
+class User extends Model implements Customer
+{
+    use CanPay;
+}

Item Model

Add the HasWallet trait and interface to Item model. If we want to achieve multi wallets for a product, then we need to add HasWallets.

Starting from version 9.x there are two product interfaces:

  • For an unlimited number of products (ProductInterface);
  • For a limited number of products (ProductLimitedInterface);

An example with an unlimited number of products:

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Traits\\HasWallets;
+use Bavix\\Wallet\\Interfaces\\Customer;
+use Bavix\\Wallet\\Interfaces\\ProductInterface;
+
+class Item extends Model implements ProductInterface
+{
+    use HasWallet, HasWallets;
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

Example with a limited number of products:

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Traits\\HasWallets;
+use Bavix\\Wallet\\Interfaces\\Customer;
+use Bavix\\Wallet\\Interfaces\\ProductLimitedInterface;
+
+class Item extends Model implements ProductLimitedInterface
+{
+    use HasWallet, HasWallets;
+
+    public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool
+    {
+        return true; 
+    }
+    
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

I do not recommend using the limited interface when working with a shopping cart. If you are working with a shopping cart, then you should override the PurchaseServiceInterface interface. With it, you can check the availability of all products with one request, there will be no N-queries in the database.

Proceed to purchase

Find the user and check the balance.

php
$user = User::first();
+$user->balance; // 100

Find the goods and check the cost.

php
$item = Item::first();
+$item->getAmountProduct($user); // 100
+
+$receiving = $item->createWallet([
+    'name' => 'Dollar',
+    'meta' => [
+        'currency' => 'USD',
+    ],
+]);

The user can buy a product, buy...

php
$cart = app(Cart::class)
+    ->withItem($item, receiving: $receiving)
+;
+
+$user->payCart($cart);
+$user->balance; // 0
+
+$receiving->balanceInt; // $100

It's simple!

`,22),l=[h];function p(e,k,r,d,E,g){return a(),i("div",null,l)}const F=s(t,[["render",p]]);export{y as __pageData,F as default}; diff --git a/docs/.vitepress/dist/assets/guide_purchases_receiving.md.DgdGYpnV.lean.js b/docs/.vitepress/dist/assets/guide_purchases_receiving.md.DgdGYpnV.lean.js new file mode 100644 index 000000000..4bb1e4710 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_purchases_receiving.md.DgdGYpnV.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const y=JSON.parse('{"title":"Payment. Customize receiving","description":"","frontmatter":{},"headers":[],"relativePath":"guide/purchases/receiving.md","filePath":"guide/purchases/receiving.md"}'),t={name:"guide/purchases/receiving.md"},h=n("",22),l=[h];function p(e,k,r,d,E,g){return a(),i("div",null,l)}const F=s(t,[["render",p]]);export{y as __pageData,F as default}; diff --git a/docs/.vitepress/dist/assets/guide_purchases_refund.md.Cvi1Vscy.js b/docs/.vitepress/dist/assets/guide_purchases_refund.md.Cvi1Vscy.js new file mode 100644 index 000000000..2f96f5f5f --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_purchases_refund.md.Cvi1Vscy.js @@ -0,0 +1,63 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const y=JSON.parse('{"title":"Refund","description":"","frontmatter":{},"headers":[],"relativePath":"guide/purchases/refund.md","filePath":"guide/purchases/refund.md"}'),h={name:"guide/purchases/refund.md"},t=n(`

Refund

User Model

Add the CanPay trait and Customer interface to your User model.

The trait CanPay already inherits HasWallet, reuse will cause an error.

php
use Bavix\\Wallet\\Traits\\CanPay;
+use Bavix\\Wallet\\Interfaces\\Customer;
+
+class User extends Model implements Customer
+{
+    use CanPay;
+}

Item Model

Add the HasWallet trait and interface to Item model.

Starting from version 9.x there are two product interfaces:

  • For an unlimited number of products (ProductInterface);
  • For a limited number of products (ProductLimitedInterface);

An example with an unlimited number of products:

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Customer;
+use Bavix\\Wallet\\Interfaces\\ProductInterface;
+
+class Item extends Model implements ProductInterface
+{
+    use HasWallet;
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

Example with a limited number of products:

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Customer;
+use Bavix\\Wallet\\Interfaces\\ProductLimitedInterface;
+
+class Item extends Model implements ProductLimitedInterface
+{
+    use HasWallet;
+
+    public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool
+    {
+        /**
+         * This is where you implement the constraint logic. 
+         * 
+         * If the service can be purchased once, then
+         *  return !$customer->paid($this);
+         */
+        return true; 
+    }
+    
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

I do not recommend using the limited interface when working with a shopping cart. If you are working with a shopping cart, then you should override the PurchaseServiceInterface interface. With it, you can check the availability of all products with one request, there will be no N-queries in the database.

Make a refund

Find the user and check the balance.

php
$user = User::first();
+$user->balance; // 0

Find the goods and check the balance.

php
$item = Item::first();
+$item->balance; // 100

Return of funds!

php
(bool)$user->paid($item); // bool(true)
+(bool)$user->refund($item); // bool(true)
+$item->balance; // 0
+$user->balance; // 100

It's simple!

`,22),l=[t];function p(e,k,r,d,E,g){return a(),i("div",null,l)}const o=s(h,[["render",p]]);export{y as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_purchases_refund.md.Cvi1Vscy.lean.js b/docs/.vitepress/dist/assets/guide_purchases_refund.md.Cvi1Vscy.lean.js new file mode 100644 index 000000000..2cb1839d5 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_purchases_refund.md.Cvi1Vscy.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const y=JSON.parse('{"title":"Refund","description":"","frontmatter":{},"headers":[],"relativePath":"guide/purchases/refund.md","filePath":"guide/purchases/refund.md"}'),h={name:"guide/purchases/refund.md"},t=n("",22),l=[t];function p(e,k,r,d,E,g){return a(),i("div",null,l)}const o=s(h,[["render",p]]);export{y as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_cancel.md.CNo1Ld3C.js b/docs/.vitepress/dist/assets/guide_single_cancel.md.CNo1Ld3C.js new file mode 100644 index 000000000..7152a6ece --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_cancel.md.CNo1Ld3C.js @@ -0,0 +1,17 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/cancel.md","filePath":"guide/single/cancel.md"}'),l={name:"guide/single/cancel.md"},t=n(`

User Model

Add the CanConfirm trait and Confirmable interface to your User model.

php
use Bavix\\Wallet\\Interfaces\\Confirmable;
+use Bavix\\Wallet\\Interfaces\\Wallet;
+use Bavix\\Wallet\\Traits\\CanConfirm;
+use Bavix\\Wallet\\Traits\\HasWallet;
+
+class UserConfirm extends Model implements Wallet, Confirmable
+{
+    use HasWallet, CanConfirm;
+}

You can only confirm the transaction with the wallet you paid with.

Example:

Sometimes you need to create an operation and confirm its field. That is what this trey does.

php
$user->balance; // 0
+$transaction = $user->deposit(100, null, false); // not confirm
+$transaction->confirmed; // bool(false)
+$user->balance; // 0
+
+$user->confirm($transaction); // bool(true)
+$transaction->confirmed; // bool(true)
+
+$user->balance; // 100

It's simple!

`,8),e=[t];function h(p,k,r,d,E,o){return a(),i("div",null,e)}const y=s(l,[["render",h]]);export{g as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_cancel.md.CNo1Ld3C.lean.js b/docs/.vitepress/dist/assets/guide_single_cancel.md.CNo1Ld3C.lean.js new file mode 100644 index 000000000..3e7c2b723 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_cancel.md.CNo1Ld3C.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/cancel.md","filePath":"guide/single/cancel.md"}'),l={name:"guide/single/cancel.md"},t=n("",8),e=[t];function h(p,k,r,d,E,o){return a(),i("div",null,e)}const y=s(l,[["render",h]]);export{g as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_confirm.md.e4AeBLuv.js b/docs/.vitepress/dist/assets/guide_single_confirm.md.e4AeBLuv.js new file mode 100644 index 000000000..9bf09948c --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_confirm.md.e4AeBLuv.js @@ -0,0 +1,17 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/confirm.md","filePath":"guide/single/confirm.md"}'),t={name:"guide/single/confirm.md"},l=n(`

User Model

Add the CanConfirm trait and Confirmable interface to your User model.

php
use Bavix\\Wallet\\Interfaces\\Confirmable;
+use Bavix\\Wallet\\Interfaces\\Wallet;
+use Bavix\\Wallet\\Traits\\CanConfirm;
+use Bavix\\Wallet\\Traits\\HasWallet;
+
+class UserConfirm extends Model implements Wallet, Confirmable
+{
+    use HasWallet, CanConfirm;
+}

You can only confirm the transaction with the wallet you paid with.

Example:

Sometimes you need to create an operation and confirm its field. That is what this trey does.

php
$user->balance; // 0
+$transaction = $user->deposit(100, null, false); // not confirm
+$transaction->confirmed; // bool(false)
+$user->balance; // 0
+
+$user->confirm($transaction); // bool(true)
+$transaction->confirmed; // bool(true)
+
+$user->balance; // 100

It's simple!

`,8),e=[l];function h(p,k,r,d,E,o){return a(),i("div",null,e)}const y=s(t,[["render",h]]);export{c as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_confirm.md.e4AeBLuv.lean.js b/docs/.vitepress/dist/assets/guide_single_confirm.md.e4AeBLuv.lean.js new file mode 100644 index 000000000..00e41c7d7 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_confirm.md.e4AeBLuv.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/confirm.md","filePath":"guide/single/confirm.md"}'),t={name:"guide/single/confirm.md"},l=n("",8),e=[l];function h(p,k,r,d,E,o){return a(),i("div",null,e)}const y=s(t,[["render",h]]);export{c as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_credit-limits.md.m6HNPX38.js b/docs/.vitepress/dist/assets/guide_single_credit-limits.md.m6HNPX38.js new file mode 100644 index 000000000..ddb4e2efd --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_credit-limits.md.m6HNPX38.js @@ -0,0 +1,18 @@ +import{_ as s,c as i,o as a,a3 as t}from"./chunks/framework.OdeEVNy0.js";const y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/credit-limits.md","filePath":"guide/single/credit-limits.md"}'),n={name:"guide/single/credit-limits.md"},l=t(`

Credit Limits

If you need the ability to have wallets have a credit limit, then this functionality is for you.

The functionality does nothing, it only allows you not to use "force" for most of the operations within the credit limit. You should write the logic for collecting interest, notifications on debts, etc.

By default, the credit limit is zero.

An example of working with a credit limit:

php
/**
+ * @var \\Bavix\\Wallet\\Interfaces\\Customer $customer
+ * @var \\Bavix\\Wallet\\Models\\Wallet $wallet
+ * @var \\Bavix\\Wallet\\Interfaces\\ProductInterface $product
+ */
+$wallet = $customer->wallet; // get default wallet
+$wallet->meta['credit'] = 10000; // credit limit
+$wallet->save(); // update credit limit
+
+$wallet->balanceInt; // 0
+$product->getAmountProduct($customer); // 500
+
+$wallet->pay($product); // success
+$wallet->balanceInt; // -500

For multi-wallets when creating:

php
/** @var \\Bavix\\Wallet\\Traits\\HasWallets $user */
+$wallet = $user->createWallet([
+    'name' => 'My Wallet',
+    'meta' => ['credit' => 500],
+]);

It's simple!

`,9),h=[l];function e(p,k,r,d,g,E){return a(),i("div",null,h)}const o=s(n,[["render",e]]);export{y as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_credit-limits.md.m6HNPX38.lean.js b/docs/.vitepress/dist/assets/guide_single_credit-limits.md.m6HNPX38.lean.js new file mode 100644 index 000000000..f76ba269e --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_credit-limits.md.m6HNPX38.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as t}from"./chunks/framework.OdeEVNy0.js";const y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/credit-limits.md","filePath":"guide/single/credit-limits.md"}'),n={name:"guide/single/credit-limits.md"},l=t("",9),h=[l];function e(p,k,r,d,g,E){return a(),i("div",null,h)}const o=s(n,[["render",e]]);export{y as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_deposit.md.DWjBMxNa.js b/docs/.vitepress/dist/assets/guide_single_deposit.md.DWjBMxNa.js new file mode 100644 index 000000000..46e9168f9 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_deposit.md.DWjBMxNa.js @@ -0,0 +1,10 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.OdeEVNy0.js";const E=JSON.parse('{"title":"Deposit","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/deposit.md","filePath":"guide/single/deposit.md"}'),t={name:"guide/single/deposit.md"},n=e(`

Deposit

A deposit is a sum of money which is part of the full price of something, and which you pay when you agree to buy it.

In this case, the Deposit is the replenishment of the wallet.


User Model

It is necessary to expand the model that will have the wallet. This is done in two stages:

  • Add Wallet interface;
  • Add the HasWallet trait;

Let's get started.

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet;
+}

The model is prepared to work with a wallet.

Make a Deposit

Find user:

php
$user = User::first();

As the user uses HasWallet, he will have balance property. Check the user's balance.

php
$user->balance; // 0
+$user->balanceInt; // 0

The balance is zero, which is what we expected. Put it on his 10 cents account.

php
$user->deposit(10); 
+$user->balance; // 10
+$user->balanceInt; // 10

Wow! The balance is 10 cents, the money is credited.

`,18),l=[n];function h(p,k,d,r,o,c){return a(),i("div",null,l)}const y=s(t,[["render",h]]);export{E as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_deposit.md.DWjBMxNa.lean.js b/docs/.vitepress/dist/assets/guide_single_deposit.md.DWjBMxNa.lean.js new file mode 100644 index 000000000..c722de28f --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_deposit.md.DWjBMxNa.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.OdeEVNy0.js";const E=JSON.parse('{"title":"Deposit","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/deposit.md","filePath":"guide/single/deposit.md"}'),t={name:"guide/single/deposit.md"},n=e("",18),l=[n];function h(p,k,d,r,o,c){return a(),i("div",null,l)}const y=s(t,[["render",h]]);export{E as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_exchange.md.DHAqruLi.js b/docs/.vitepress/dist/assets/guide_single_exchange.md.DHAqruLi.js new file mode 100644 index 000000000..80330a8e5 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_exchange.md.DHAqruLi.js @@ -0,0 +1,54 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/exchange.md","filePath":"guide/single/exchange.md"}'),h={name:"guide/single/exchange.md"},t=n(`

Exchange

Everyone’s tasks are different and with the help of this functionality you can add exchange rates to your wallets.

The wallet currency is set via meta. Example:

php
$user->createWallet([
+    'name' => 'My USD Wallet',
+    'meta' => ['currency' => 'USD'],
+]);

Service for working with currencies you need to write yourself or use library.

Service for working with currency

We will write a simple service. We will take the data from the array, and not from the database.

php
use Bavix\\Wallet\\Internal\\Service\\MathServiceInterface;
+use Bavix\\Wallet\\Services\\ExchangeServiceInterface;
+
+class MyExchangeService implements ExchangeServiceInterface
+{
+    private array $rates = [
+        'USD' => [
+            'RUB' => 67.61,
+        ],
+    ];
+
+    private MathServiceInterface $mathService;
+
+    public function __construct(MathServiceInterface $mathService)
+    {
+        $this->mathService = $mathService;
+
+        foreach ($this->rates as $from => $rates) {
+            foreach ($rates as $to => $rate) {
+                if (empty($this->rates[$to][$from])) {
+                    $this->rates[$to][$from] = $this->mathService->div(1, $rate);
+                }
+            }
+        }
+    }
+
+    /** @param float|int|string $amount */
+    public function convertTo(string $fromCurrency, string $toCurrency, $amount): string
+    {
+        return $this->mathService->mul($amount, $this->rates[$fromCurrency][$toCurrency] ?? 1);
+    }
+}

Service Registration

The service you wrote must be registered, this is done in the file config/wallet.php.

php
return [
+    // ...
+    'services' => [
+        'exchange' => MyExchangeService::class,
+        // ...
+    ],
+    // ...
+];

Exchange process

Create two wallets.

php
$usd = $user->createWallet([
+    'name' => 'My Dollars',
+    'meta' => ['currency' => 'USD'],
+]);
+
+$rub = $user->createWallet([
+    'name' => 'My Ruble',
+    'meta' => ['currency' => 'RUB'],
+]);

We replenish the ruble wallet with 100 rubles.

php
$rub->deposit(10000);

We will exchange rubles into dollars.

php
$transfer = $rub->exchange($usd, 10000);
+$rub->balance; // 0
+$usd->balance; // 147, это $1.47

Unfortunately, the world is not perfect. You will not get back your 100 rubles.

php
$transfer = $usd->exchange($rub, $usd->balance);
+$usd->balance; 0
+$rub->balance; 9938

Due to conversion and mathematical rounding, you lost 62 kopecks. You have 99 rubles 38 kopecks left.


It's simple!

`,23),l=[t];function p(k,e,r,E,g,d){return a(),i("div",null,l)}const F=s(h,[["render",p]]);export{c as __pageData,F as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_exchange.md.DHAqruLi.lean.js b/docs/.vitepress/dist/assets/guide_single_exchange.md.DHAqruLi.lean.js new file mode 100644 index 000000000..d29d4c451 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_exchange.md.DHAqruLi.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/exchange.md","filePath":"guide/single/exchange.md"}'),h={name:"guide/single/exchange.md"},t=n("",23),l=[t];function p(k,e,r,E,g,d){return a(),i("div",null,l)}const F=s(h,[["render",p]]);export{c as __pageData,F as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_refresh.md.RmgocjVW.js b/docs/.vitepress/dist/assets/guide_single_refresh.md.RmgocjVW.js new file mode 100644 index 000000000..2dfbfb36f --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_refresh.md.RmgocjVW.js @@ -0,0 +1,15 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.OdeEVNy0.js";const E=JSON.parse('{"title":"To refresh the balance","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/refresh.md","filePath":"guide/single/refresh.md"}'),t={name:"guide/single/refresh.md"},n=e(`

To refresh the balance

There are situations when you create a lot of unconfirmed operations, and then abruptly confirm everything. In this case, the user's balance will not change. You must be forced to refresh the balance.


User Model

It is necessary to expand the model that will have the wallet. This is done in two stages:

  • Add Wallet interface;
  • Add the HasWallet trait;

Let's get started.

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet;
+}

The model is prepared to work with a wallet.

Get the current balance for your wallet

Let's say the user's balance

php
$user->id; // 5
+$user->balance; // 27

And he has unconfirmed transactions. Confirm all transactions.

sql
update transactions 
+set confirmed=1 
+where confirmed=0 and 
+      payable_type='App\\Models\\User' and 
+      payable_id=5;
+-- 212 rows affected in 54 ms

Refresh the balance.

php
$user->balance; // 27
+$user->wallet->refreshBalance();
+$user->balance; // 42

It's simple!

`,17),l=[n];function h(p,k,r,d,c,o){return a(),i("div",null,l)}const y=s(t,[["render",h]]);export{E as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_refresh.md.RmgocjVW.lean.js b/docs/.vitepress/dist/assets/guide_single_refresh.md.RmgocjVW.lean.js new file mode 100644 index 000000000..ed39a9b9f --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_refresh.md.RmgocjVW.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.OdeEVNy0.js";const E=JSON.parse('{"title":"To refresh the balance","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/refresh.md","filePath":"guide/single/refresh.md"}'),t={name:"guide/single/refresh.md"},n=e("",17),l=[n];function h(p,k,r,d,c,o){return a(),i("div",null,l)}const y=s(t,[["render",h]]);export{E as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_taxing.md.t-q6--Yk.js b/docs/.vitepress/dist/assets/guide_single_taxing.md.t-q6--Yk.js new file mode 100644 index 000000000..030653528 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_taxing.md.t-q6--Yk.js @@ -0,0 +1,82 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/taxing.md","filePath":"guide/single/taxing.md"}'),h={name:"guide/single/taxing.md"},t=n(`

User Model

Add the CanPay trait and Customer interface to your User model.

The trait CanPay already inherits HasWallet, reuse will cause an error.

php
use Bavix\\Wallet\\Traits\\CanPay;
+use Bavix\\Wallet\\Interfaces\\Customer;
+
+class User extends Model implements Customer
+{
+    use CanPay;
+}

Item Model

Add the HasWallet trait and ProductInterface (or ProductLimitedInterface) interface to Item model.

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Customer;
+use Bavix\\Wallet\\Interfaces\\Taxable;
+use Bavix\\Wallet\\Interfaces\\ProductLimitedInterface;
+
+class Item extends Model implements ProductLimitedInterface, Taxable
+{
+    use HasWallet;
+
+    public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool
+    {
+        /**
+         * If the service can be purchased once, then
+         *  return !$customer->paid($this);
+         */
+        return true; 
+    }
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+
+    public function getFeePercent()
+    {
+        return 0.03; // 3%    
+    }
+}

Tax process

Find the user and check the balance.

php
$user = User::first();
+$user->balance; // 103

Find the goods and check the cost.

php
$item = Item::first();
+$item->getAmountProduct($user); // 100

The user can buy a product, buy...

php
$user->pay($item); // success, 100 (product) + 3 (fee) = 103
+$user->balance; // 0

Minimal Taxing

Add interface MinimalTaxable (or MaximalTaxable) in class Item.

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Customer;
+use Bavix\\Wallet\\Interfaces\\MinimalTaxable;
+use Bavix\\Wallet\\Interfaces\\ProductInterface;
+
+class Item extends Model implements ProductInterface, MinimalTaxable
+{
+    use HasWallet;
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+
+    public function getFeePercent()
+    {
+        return 0.03; // 3%    
+    }
+    
+    public function getMinimalFee()
+    {
+        return 5; // 3%, minimum 5    
+    }
+}

Successfully

Find the user and check the balance.

php
$user = User::first();
+$user->balance; // 105

Find the goods and check the cost.

php
$item = Item::first();
+$item->getAmountProduct($user); // 100

The user can buy a product, buy...

php
$user->pay($item); // success, 100 (product) + 5 (minimal fee) = 105
+$user->balance; // 0

Failed

Find the user and check the balance.

php
$user = User::first();
+$user->balance; // 103

Find the goods and check the cost.

php
$item = Item::first();
+$item->getAmountProduct($user); // 100

The user can buy a product, buy...

php
$user->safePay($item); // failed, 100 (product) + 5 (minimal fee) = 105
+$user->balance; // 103

It's simple!

`,32),l=[t];function p(k,e,d,r,E,g){return a(),i("div",null,l)}const F=s(h,[["render",p]]);export{y as __pageData,F as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_taxing.md.t-q6--Yk.lean.js b/docs/.vitepress/dist/assets/guide_single_taxing.md.t-q6--Yk.lean.js new file mode 100644 index 000000000..81b72178b --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_taxing.md.t-q6--Yk.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const y=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/taxing.md","filePath":"guide/single/taxing.md"}'),h={name:"guide/single/taxing.md"},t=n("",32),l=[t];function p(k,e,d,r,E,g){return a(),i("div",null,l)}const F=s(h,[["render",p]]);export{y as __pageData,F as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_transfer.md.BGFEmOXn.js b/docs/.vitepress/dist/assets/guide_single_transfer.md.BGFEmOXn.js new file mode 100644 index 000000000..b8ea3bfda --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_transfer.md.BGFEmOXn.js @@ -0,0 +1,32 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const y=JSON.parse('{"title":"Transfer","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/transfer.md","filePath":"guide/single/transfer.md"}'),t={name:"guide/single/transfer.md"},h=n(`

Transfer

Transfer in our system are two well-known Deposit and Withdraw operations that are performed in one transaction.

The transfer takes place between wallets.


User Model

It is necessary to expand the model that will have the wallet. This is done in two stages:

  • Add Wallet interface;
  • Add the HasWallet trait;

Let's get started.

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet;
+}

The model is prepared to work with a wallet.

Example contract

php
$transfer = $user1->transfer(
+    $user2,
+    511,
+    new Extra(
+        deposit: [
+            'type' => 'extra-deposit',
+        ],
+        withdraw: new Option(
+            [
+                'type' => 'extra-withdraw',
+            ],
+            false // confirmed
+        ),
+        extra: [
+            'msg' => 'hello world',
+        ],
+    )
+);

Make a Transfer

Find user:

php
$first = User::first(); 
+$last = User::orderBy('id', 'desc')->first(); // last user
+$first->getKey() !== $last->getKey(); // true

As the user uses HasWallet, he will have balance property. Check the user's balance.

php
$first->balance; // 100
+$last->balance; // 0

The transfer will be from the first user to the second.

php
$first->transfer($last, 5); 
+$first->balance; // 95
+$last->balance; // 5

It's simple!

Force Transfer

Check the user's balance.

php
$first->balance; // 100
+$last->balance; // 0

The transfer will be from the first user to the second.

php
$first->forceTransfer($last, 500); 
+$first->balance; // -400
+$last->balance; // 500

It's simple!

`,26),e=[h];function l(p,k,r,d,E,g){return a(),i("div",null,e)}const o=s(t,[["render",l]]);export{y as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_transfer.md.BGFEmOXn.lean.js b/docs/.vitepress/dist/assets/guide_single_transfer.md.BGFEmOXn.lean.js new file mode 100644 index 000000000..cf7550b49 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_transfer.md.BGFEmOXn.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.OdeEVNy0.js";const y=JSON.parse('{"title":"Transfer","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/transfer.md","filePath":"guide/single/transfer.md"}'),t={name:"guide/single/transfer.md"},h=n("",26),e=[h];function l(p,k,r,d,E,g){return a(),i("div",null,e)}const o=s(t,[["render",l]]);export{y as __pageData,o as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_withdraw.md.Cqspz8GJ.js b/docs/.vitepress/dist/assets/guide_single_withdraw.md.Cqspz8GJ.js new file mode 100644 index 000000000..e1a960cb3 --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_withdraw.md.Cqspz8GJ.js @@ -0,0 +1,14 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.OdeEVNy0.js";const E=JSON.parse('{"title":"Withdraw","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/withdraw.md","filePath":"guide/single/withdraw.md"}'),t={name:"guide/single/withdraw.md"},n=e(`

Withdraw

When there is enough money in the account, you can transfer/withdraw it or buy something in the system.

Since the currency is virtual, you can buy any services on your website. For example, priority in search results.


User Model

It is necessary to expand the model that will have the wallet. This is done in two stages:

  • Add Wallet interface;
  • Add the HasWallet trait;

Let's get started.

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet;
+}

The model is prepared to work with a wallet.

Make a Withdraw

Find user:

php
$user = User::first();

As the user uses HasWallet, he will have balance property. Check the user's balance.

php
$user->balance; // 100
+$user->balanceInt; // 100

The balance is not empty, so you can withdraw funds.

php
$user->withdraw(10); 
+$user->balance; // 90
+$user->balanceInt; // 90

It's simple!

Force Withdraw

Forced withdrawal is necessary for those cases when the user has no funds. For example, a fine for spam.

php
$user->balance; // 100
+$user->balanceInt; // 100
+$user->forceWithdraw(101);
+$user->balance; // -1
+$user->balanceInt; // -1

And what will happen if the money is not enough?

There can be two situations:

  • The user's balance is zero, then we get an error Bavix\\Wallet\\Exceptions\\BalanceIsEmpty
  • If the balance is greater than zero, but it is not enough Bavix\\Wallet\\Exceptions\\InsufficientFunds
`,24),h=[n];function l(p,k,r,d,o,c){return a(),i("div",null,h)}const y=s(t,[["render",l]]);export{E as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/guide_single_withdraw.md.Cqspz8GJ.lean.js b/docs/.vitepress/dist/assets/guide_single_withdraw.md.Cqspz8GJ.lean.js new file mode 100644 index 000000000..f7d6a54ed --- /dev/null +++ b/docs/.vitepress/dist/assets/guide_single_withdraw.md.Cqspz8GJ.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.OdeEVNy0.js";const E=JSON.parse('{"title":"Withdraw","description":"","frontmatter":{},"headers":[],"relativePath":"guide/single/withdraw.md","filePath":"guide/single/withdraw.md"}'),t={name:"guide/single/withdraw.md"},n=e("",24),h=[n];function l(p,k,r,d,o,c){return a(),i("div",null,h)}const y=s(t,[["render",l]]);export{E as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/include_composer.md.Bahh6vzC.js b/docs/.vitepress/dist/assets/include_composer.md.Bahh6vzC.js new file mode 100644 index 000000000..83acd1e24 --- /dev/null +++ b/docs/.vitepress/dist/assets/include_composer.md.Bahh6vzC.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as s,a3 as o}from"./chunks/framework.OdeEVNy0.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"_include/composer.md","filePath":"_include/composer.md"}'),t={name:"_include/composer.md"},r=o('

Composer

The recommended installation method is using Composer.

In your project root just run:

bash
composer req bavix/laravel-wallet

Ensure that you’ve set up your project to autoload Composer-installed packages.

',5),i=[r];function n(p,c,l,d,h,_){return s(),a("div",null,i)}const g=e(t,[["render",n]]);export{u as __pageData,g as default}; diff --git a/docs/.vitepress/dist/assets/include_composer.md.Bahh6vzC.lean.js b/docs/.vitepress/dist/assets/include_composer.md.Bahh6vzC.lean.js new file mode 100644 index 000000000..2d0aa95a1 --- /dev/null +++ b/docs/.vitepress/dist/assets/include_composer.md.Bahh6vzC.lean.js @@ -0,0 +1 @@ +import{_ as e,c as a,o as s,a3 as o}from"./chunks/framework.OdeEVNy0.js";const u=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"_include/composer.md","filePath":"_include/composer.md"}'),t={name:"_include/composer.md"},r=o("",5),i=[r];function n(p,c,l,d,h,_){return s(),a("div",null,i)}const g=e(t,[["render",n]]);export{u as __pageData,g as default}; diff --git a/docs/.vitepress/dist/assets/include_eager_loading.md.DEcAtRed.js b/docs/.vitepress/dist/assets/include_eager_loading.md.DEcAtRed.js new file mode 100644 index 000000000..6a08e4c8a --- /dev/null +++ b/docs/.vitepress/dist/assets/include_eager_loading.md.DEcAtRed.js @@ -0,0 +1,17 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.OdeEVNy0.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"_include/eager_loading.md","filePath":"_include/eager_loading.md"}'),t={name:"_include/eager_loading.md"},n=e(`

Eager Loading

When accessing Eloquent relationships as properties, the relationship data is "lazy loaded". This means the relationship data is not actually loaded until you first access the property. However, Eloquent can "eager load" relationships at the time you query the parent model. Eager loading alleviates the N + 1 query problem. To illustrate the N + 1 query problem, consider a Wallet model that is related to User:

Add the HasWallet trait and Wallet interface to model.

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet; // public function wallet(): MorphOne...
+}

Now, let's retrieve all wallets and their users:

php
$users = User::all();
+
+foreach ($users as $user) {
+    // echo $user->wallet->balance;
+    echo $user->balance; // Abbreviated notation
+}

This loop will execute 1 query to retrieve all of the users on the table, then another query for each user to retrieve the wallet. So, if we have 25 users, the code above would run 26 queries: 1 for the original user, and 25 additional queries to retrieve the wallet of each user.

Thankfully, we can use eager loading to reduce this operation to just 2 queries. When querying, you may specify which relationships should be eager loaded using the with method:

php
$users = User::with('wallet')->all();
+
+foreach ($users as $user) {
+    // echo $user->wallet->balance;
+    echo $user->balance; // Abbreviated notation
+}

For this operation, only two queries will be executed.

`,10),l=[n];function h(p,k,r,d,o,g){return a(),i("div",null,l)}const y=s(t,[["render",h]]);export{E as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/include_eager_loading.md.DEcAtRed.lean.js b/docs/.vitepress/dist/assets/include_eager_loading.md.DEcAtRed.lean.js new file mode 100644 index 000000000..baeea10a5 --- /dev/null +++ b/docs/.vitepress/dist/assets/include_eager_loading.md.DEcAtRed.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.OdeEVNy0.js";const E=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"_include/eager_loading.md","filePath":"_include/eager_loading.md"}'),t={name:"_include/eager_loading.md"},n=e("",10),l=[n];function h(p,k,r,d,o,g){return a(),i("div",null,l)}const y=s(t,[["render",h]]);export{E as __pageData,y as default}; diff --git a/docs/.vitepress/dist/assets/include_models_user_simple.md.DWW_tdne.js b/docs/.vitepress/dist/assets/include_models_user_simple.md.DWW_tdne.js new file mode 100644 index 000000000..7d62b0d11 --- /dev/null +++ b/docs/.vitepress/dist/assets/include_models_user_simple.md.DWW_tdne.js @@ -0,0 +1,7 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.OdeEVNy0.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"_include/models/user_simple.md","filePath":"_include/models/user_simple.md"}'),t={name:"_include/models/user_simple.md"},l=e(`

It is necessary to expand the model that will have the wallet. This is done in two stages:

  • Add Wallet interface;
  • Add the HasWallet trait;

Let's get started.

php
use Bavix\\Wallet\\Traits\\HasWallet;
+use Bavix\\Wallet\\Interfaces\\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet;
+}

The model is prepared to work with a wallet.

`,5),n=[l];function p(h,d,k,r,c,o){return a(),i("div",null,n)}const m=s(t,[["render",p]]);export{g as __pageData,m as default}; diff --git a/docs/.vitepress/dist/assets/include_models_user_simple.md.DWW_tdne.lean.js b/docs/.vitepress/dist/assets/include_models_user_simple.md.DWW_tdne.lean.js new file mode 100644 index 000000000..fb733cf7d --- /dev/null +++ b/docs/.vitepress/dist/assets/include_models_user_simple.md.DWW_tdne.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a3 as e}from"./chunks/framework.OdeEVNy0.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"_include/models/user_simple.md","filePath":"_include/models/user_simple.md"}'),t={name:"_include/models/user_simple.md"},l=e("",5),n=[l];function p(h,d,k,r,c,o){return a(),i("div",null,n)}const m=s(t,[["render",p]]);export{g as __pageData,m as default}; diff --git a/docs/.vitepress/dist/assets/include_models_user_simple_float.md.BHKtZpXH.js b/docs/.vitepress/dist/assets/include_models_user_simple_float.md.BHKtZpXH.js new file mode 100644 index 000000000..0be2656a3 --- /dev/null +++ b/docs/.vitepress/dist/assets/include_models_user_simple_float.md.BHKtZpXH.js @@ -0,0 +1,7 @@ +import{_ as s,c as a,o as i,a3 as e}from"./chunks/framework.OdeEVNy0.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"_include/models/user_simple_float.md","filePath":"_include/models/user_simple_float.md"}'),t={name:"_include/models/user_simple_float.md"},l=e(`

It is necessary to expand the model that will have the wallet. This is done in two stages:

  • Add Wallet interface;
  • Add the HasWalletFloat trait;

Let's get started.

php
use Bavix\\Wallet\\Traits\\HasWalletFloat;
+use Bavix\\Wallet\\Interfaces\\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWalletFloat;
+}

The model is prepared to work with a wallet.

`,5),n=[l];function p(h,d,k,r,o,c){return i(),a("div",null,n)}const m=s(t,[["render",p]]);export{g as __pageData,m as default}; diff --git a/docs/.vitepress/dist/assets/include_models_user_simple_float.md.BHKtZpXH.lean.js b/docs/.vitepress/dist/assets/include_models_user_simple_float.md.BHKtZpXH.lean.js new file mode 100644 index 000000000..439ac566a --- /dev/null +++ b/docs/.vitepress/dist/assets/include_models_user_simple_float.md.BHKtZpXH.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as i,a3 as e}from"./chunks/framework.OdeEVNy0.js";const g=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"_include/models/user_simple_float.md","filePath":"_include/models/user_simple_float.md"}'),t={name:"_include/models/user_simple_float.md"},l=e("",5),n=[l];function p(h,d,k,r,o,c){return i(),a("div",null,n)}const m=s(t,[["render",p]]);export{g as __pageData,m as default}; diff --git a/docs/.vitepress/dist/assets/index.md.CxOcTylj.js b/docs/.vitepress/dist/assets/index.md.CxOcTylj.js new file mode 100644 index 000000000..053320c86 --- /dev/null +++ b/docs/.vitepress/dist/assets/index.md.CxOcTylj.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as a}from"./chunks/framework.OdeEVNy0.js";const m=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Laravel Wallet","text":"It's simple!","tagline":"Easy work with virtual wallet","image":{"src":"https://github.com/bavix/laravel-wallet/assets/5111255/24cf424a-0177-4712-b74c-52b4ba88c428","alt":"Laravel Wallet"},"actions":[{"theme":"brand","text":"Getting started","link":"/guide/introduction/"},{"theme":"alt","text":"Upgrade Guide","link":"/guide/introduction/upgrade"}]},"features":[{"title":"Default Wallet","details":"For simple projects when there is no need for multiple wallets."},{"title":"Multi wallets","details":"Many wallets for one model. Easy API."},{"title":"Purchases","details":"E-commerce. Create goods and buy them using wallets. There are also shopping carts, availability, taxes and fees."},{"title":"Exchanges","details":"Exchanges between wallets. Convert currency from one wallet to another."},{"title":"Support UUID","details":"Models with UUID are supported."},{"title":"Events","details":"For more complex projects there are events and high performance API."}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}`),l={name:"index.md"};function r(s,i,o,n,d,c){return a(),t("div")}const h=e(l,[["render",r]]);export{m as __pageData,h as default}; diff --git a/docs/.vitepress/dist/assets/index.md.CxOcTylj.lean.js b/docs/.vitepress/dist/assets/index.md.CxOcTylj.lean.js new file mode 100644 index 000000000..053320c86 --- /dev/null +++ b/docs/.vitepress/dist/assets/index.md.CxOcTylj.lean.js @@ -0,0 +1 @@ +import{_ as e,c as t,o as a}from"./chunks/framework.OdeEVNy0.js";const m=JSON.parse(`{"title":"","description":"","frontmatter":{"layout":"home","hero":{"name":"Laravel Wallet","text":"It's simple!","tagline":"Easy work with virtual wallet","image":{"src":"https://github.com/bavix/laravel-wallet/assets/5111255/24cf424a-0177-4712-b74c-52b4ba88c428","alt":"Laravel Wallet"},"actions":[{"theme":"brand","text":"Getting started","link":"/guide/introduction/"},{"theme":"alt","text":"Upgrade Guide","link":"/guide/introduction/upgrade"}]},"features":[{"title":"Default Wallet","details":"For simple projects when there is no need for multiple wallets."},{"title":"Multi wallets","details":"Many wallets for one model. Easy API."},{"title":"Purchases","details":"E-commerce. Create goods and buy them using wallets. There are also shopping carts, availability, taxes and fees."},{"title":"Exchanges","details":"Exchanges between wallets. Convert currency from one wallet to another."},{"title":"Support UUID","details":"Models with UUID are supported."},{"title":"Events","details":"For more complex projects there are events and high performance API."}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}`),l={name:"index.md"};function r(s,i,o,n,d,c){return a(),t("div")}const h=e(l,[["render",r]]);export{m as __pageData,h as default}; diff --git a/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 b/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 new file mode 100644 index 000000000..b6b603d59 Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 b/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 new file mode 100644 index 000000000..def40a4f6 Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 b/docs/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 new file mode 100644 index 000000000..e070c3d30 Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 b/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 new file mode 100644 index 000000000..a3c16ca40 Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 b/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 new file mode 100644 index 000000000..2210a899e Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 b/docs/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 new file mode 100644 index 000000000..790d62dc7 Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 b/docs/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 new file mode 100644 index 000000000..1eec0775a Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 b/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 new file mode 100644 index 000000000..2cfe61536 Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 b/docs/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 new file mode 100644 index 000000000..e3886dd14 Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 b/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 new file mode 100644 index 000000000..36d67487d Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 b/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 new file mode 100644 index 000000000..2bed1e85e Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 b/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 new file mode 100644 index 000000000..9a8d1e2b5 Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 b/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 new file mode 100644 index 000000000..07d3c53ae Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2 differ diff --git a/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 b/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 new file mode 100644 index 000000000..57bdc22ae Binary files /dev/null and b/docs/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2 differ diff --git a/docs/.vitepress/dist/assets/style.A34_PHSu.css b/docs/.vitepress/dist/assets/style.A34_PHSu.css new file mode 100644 index 000000000..6726cdf24 --- /dev/null +++ b/docs/.vitepress/dist/assets/style.A34_PHSu.css @@ -0,0 +1 @@ +@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/laravel-wallet/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/laravel-wallet/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/laravel-wallet/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/laravel-wallet/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/laravel-wallet/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/laravel-wallet/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/laravel-wallet/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/laravel-wallet/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/laravel-wallet/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/laravel-wallet/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/laravel-wallet/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/laravel-wallet/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/laravel-wallet/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/laravel-wallet/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "Microsoft YaHei", "DengXian", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{margin:0;font-size:16px;color:var(--vp-c-text-2);transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-c79a1216]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-c79a1216],.VPBackdrop.fade-leave-to[data-v-c79a1216]{opacity:0}.VPBackdrop.fade-leave-active[data-v-c79a1216]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-c79a1216]{display:none}}.NotFound[data-v-d6be1790]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-d6be1790]{padding:96px 32px 168px}}.code[data-v-d6be1790]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-d6be1790]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-d6be1790]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-d6be1790]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-d6be1790]{padding-top:20px}.link[data-v-d6be1790]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-d6be1790]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-b933a997]{position:relative;z-index:1}.nested[data-v-b933a997]{padding-right:16px;padding-left:16px}.outline-link[data-v-b933a997]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-b933a997]:hover,.outline-link.active[data-v-b933a997]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-b933a997]{padding-left:13px}.VPDocAsideOutline[data-v-a5bbad30]{display:none}.VPDocAsideOutline.has-outline[data-v-a5bbad30]{display:block}.content[data-v-a5bbad30]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-a5bbad30]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-a5bbad30]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-3f215769]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-3f215769]{flex-grow:1}.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-3f215769] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-3f215769] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-7e05ebdb]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-7e05ebdb]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-d4a0bba5]{margin-top:64px}.edit-info[data-v-d4a0bba5]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-d4a0bba5]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-d4a0bba5]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-d4a0bba5]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-d4a0bba5]{margin-right:8px}.prev-next[data-v-d4a0bba5]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-d4a0bba5]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-d4a0bba5]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-d4a0bba5]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-d4a0bba5]{margin-left:auto;text-align:right}.desc[data-v-d4a0bba5]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-d4a0bba5]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-39a288b8]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-39a288b8]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-39a288b8]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-39a288b8]{display:flex;justify-content:center}.VPDoc .aside[data-v-39a288b8]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-39a288b8]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-39a288b8]{max-width:1104px}}.container[data-v-39a288b8]{margin:0 auto;width:100%}.aside[data-v-39a288b8]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-39a288b8]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-39a288b8]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-39a288b8]::-webkit-scrollbar{display:none}.aside-curtain[data-v-39a288b8]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-39a288b8]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-39a288b8]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-39a288b8]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-39a288b8]{order:1;margin:0;min-width:640px}}.content-container[data-v-39a288b8]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-39a288b8]{max-width:688px}.VPButton[data-v-cad61b99]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-cad61b99]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-cad61b99]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-cad61b99]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-cad61b99]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-cad61b99]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-cad61b99]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-cad61b99]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-cad61b99]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-cad61b99]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-cad61b99]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-cad61b99]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-cad61b99]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-8426fc1a]{display:none}.dark .VPImage.light[data-v-8426fc1a]{display:none}.VPHero[data-v-303bb580]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-303bb580]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-303bb580]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-303bb580]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-303bb580]{flex-direction:row}}.main[data-v-303bb580]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-303bb580]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-303bb580]{text-align:left}}@media (min-width: 960px){.main[data-v-303bb580]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-303bb580]{max-width:592px}}.name[data-v-303bb580],.text[data-v-303bb580]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-303bb580],.VPHero.has-image .text[data-v-303bb580]{margin:0 auto}.name[data-v-303bb580]{color:var(--vp-home-hero-name-color)}.clip[data-v-303bb580]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-303bb580],.text[data-v-303bb580]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-303bb580],.text[data-v-303bb580]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-303bb580],.VPHero.has-image .text[data-v-303bb580]{margin:0}}.tagline[data-v-303bb580]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-303bb580]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-303bb580]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-303bb580]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-303bb580]{margin:0}}.actions[data-v-303bb580]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-303bb580]{justify-content:center}@media (min-width: 640px){.actions[data-v-303bb580]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-303bb580]{justify-content:flex-start}}.action[data-v-303bb580]{flex-shrink:0;padding:6px}.image[data-v-303bb580]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-303bb580]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-303bb580]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-303bb580]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-303bb580]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-303bb580]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-303bb580]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-303bb580]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-303bb580]{width:320px;height:320px}}[data-v-303bb580] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-303bb580] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-303bb580] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-a3976bdc]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-a3976bdc]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-a3976bdc]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-a3976bdc]>.VPImage{margin-bottom:20px}.icon[data-v-a3976bdc]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-a3976bdc]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-a3976bdc]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-a3976bdc]{padding-top:8px}.link-text-value[data-v-a3976bdc]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-a3976bdc]{margin-left:6px}.VPFeatures[data-v-a6181336]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-a6181336]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-a6181336]{padding:0 64px}}.container[data-v-a6181336]{margin:0 auto;max-width:1152px}.items[data-v-a6181336]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-a6181336]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-a6181336],.item.grid-4[data-v-a6181336]{width:50%}.item.grid-3[data-v-a6181336],.item.grid-6[data-v-a6181336]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-a6181336]{width:25%}}.container[data-v-8e2d4988]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-8e2d4988]{padding:0 48px}}@media (min-width: 960px){.container[data-v-8e2d4988]{width:100%;padding:0 64px}}.vp-doc[data-v-8e2d4988] .VPHomeSponsors,.vp-doc[data-v-8e2d4988] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-8e2d4988] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-8e2d4988] .VPHomeSponsors a,.vp-doc[data-v-8e2d4988] .VPTeamPage a{text-decoration:none}.VPHome[data-v-686f80a6]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-686f80a6]{margin-bottom:128px}}.VPContent[data-v-1428d186]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-1428d186]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-1428d186]{margin:0}@media (min-width: 960px){.VPContent[data-v-1428d186]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-1428d186]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-1428d186]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-e315a0ad]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-e315a0ad]{display:none}.VPFooter[data-v-e315a0ad] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-e315a0ad] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-e315a0ad]{padding:32px}}.container[data-v-e315a0ad]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-e315a0ad],.copyright[data-v-e315a0ad]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-17a5e62e]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-17a5e62e]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-17a5e62e]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-17a5e62e]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-17a5e62e]{color:var(--vp-c-text-1)}.icon[data-v-17a5e62e]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-17a5e62e]{font-size:14px}.icon[data-v-17a5e62e]{font-size:16px}}.open>.icon[data-v-17a5e62e]{transform:rotate(90deg)}.items[data-v-17a5e62e]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-17a5e62e]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-17a5e62e]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-17a5e62e]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-17a5e62e]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-17a5e62e]{transition:all .2s ease-out}.flyout-leave-active[data-v-17a5e62e]{transition:all .15s ease-in}.flyout-enter-from[data-v-17a5e62e],.flyout-leave-to[data-v-17a5e62e]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-a6f0e41e]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-a6f0e41e]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-a6f0e41e]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-a6f0e41e]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-a6f0e41e]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-a6f0e41e]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-a6f0e41e]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-a6f0e41e]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-a6f0e41e]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-a6f0e41e]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-a6f0e41e]{display:none}}.menu-icon[data-v-a6f0e41e]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-a6f0e41e]{padding:12px 32px 11px}}.VPSwitch[data-v-1d5665e3]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-1d5665e3]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-1d5665e3]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-1d5665e3]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-1d5665e3] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-1d5665e3] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-d1f28634]{opacity:1}.moon[data-v-d1f28634],.dark .sun[data-v-d1f28634]{opacity:0}.dark .moon[data-v-d1f28634]{opacity:1}.dark .VPSwitchAppearance[data-v-d1f28634] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-e6aabb21]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-e6aabb21]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-43f1e123]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-43f1e123]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-43f1e123]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-43f1e123]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-69e747b5]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-69e747b5]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-69e747b5]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-69e747b5]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-e7ea1737]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-e7ea1737] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-e7ea1737] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-e7ea1737] .group:last-child{padding-bottom:0}.VPMenu[data-v-e7ea1737] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-e7ea1737] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-e7ea1737] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-e7ea1737] .action{padding-left:24px}.VPFlyout[data-v-b6c34ac9]{position:relative}.VPFlyout[data-v-b6c34ac9]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-b6c34ac9]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-b6c34ac9]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-b6c34ac9]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-b6c34ac9]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-b6c34ac9],.button[aria-expanded=true]+.menu[data-v-b6c34ac9]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-b6c34ac9]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-b6c34ac9]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-b6c34ac9]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-b6c34ac9]{margin-right:0;font-size:16px}.text-icon[data-v-b6c34ac9]{margin-left:4px;font-size:14px}.icon[data-v-b6c34ac9]{font-size:20px;transition:fill .25s}.menu[data-v-b6c34ac9]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-eee4e7cb]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-eee4e7cb]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-eee4e7cb]>svg,.VPSocialLink[data-v-eee4e7cb]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-7bc22406]{display:flex;justify-content:center}.VPNavBarExtra[data-v-d0bd9dde]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-d0bd9dde]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-d0bd9dde]{display:none}}.trans-title[data-v-d0bd9dde]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-d0bd9dde],.item.social-links[data-v-d0bd9dde]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-d0bd9dde]{min-width:176px}.appearance-action[data-v-d0bd9dde]{margin-right:-2px}.social-links-list[data-v-d0bd9dde]{margin:-4px -8px}.VPNavBarHamburger[data-v-e5dd9c1c]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-e5dd9c1c]{display:none}}.container[data-v-e5dd9c1c]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-e5dd9c1c]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-e5dd9c1c]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .middle[data-v-e5dd9c1c],.VPNavBarHamburger.active:hover .bottom[data-v-e5dd9c1c]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-e5dd9c1c],.middle[data-v-e5dd9c1c],.bottom[data-v-e5dd9c1c]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-e5dd9c1c]{top:0;left:0;transform:translate(0)}.middle[data-v-e5dd9c1c]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-e5dd9c1c]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-9c663999]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-9c663999],.VPNavBarMenuLink[data-v-9c663999]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-7f418b0f]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-7f418b0f]{display:flex}}/*! @docsearch/css 3.6.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-0394ad82]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-0394ad82]{display:flex;align-items:center}}.title[data-v-ab179fa1]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-ab179fa1]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-ab179fa1]{border-bottom-color:var(--vp-c-divider)}}[data-v-ab179fa1] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-88af2de4]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-88af2de4]{display:flex;align-items:center}}.title[data-v-88af2de4]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-ccf7ddec]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .5s}.VPNavBar[data-v-ccf7ddec]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-ccf7ddec]:not(.home){background-color:transparent}.VPNavBar[data-v-ccf7ddec]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-ccf7ddec]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-ccf7ddec]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-ccf7ddec]{padding:0}}.container[data-v-ccf7ddec]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-ccf7ddec],.container>.content[data-v-ccf7ddec]{pointer-events:none}.container[data-v-ccf7ddec] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-ccf7ddec]{max-width:100%}}.title[data-v-ccf7ddec]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-ccf7ddec]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-ccf7ddec]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-ccf7ddec]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-ccf7ddec]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-ccf7ddec]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-ccf7ddec]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-ccf7ddec]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-ccf7ddec]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-ccf7ddec]{column-gap:.5rem}}.menu+.translations[data-v-ccf7ddec]:before,.menu+.appearance[data-v-ccf7ddec]:before,.menu+.social-links[data-v-ccf7ddec]:before,.translations+.appearance[data-v-ccf7ddec]:before,.appearance+.social-links[data-v-ccf7ddec]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-ccf7ddec]:before,.translations+.appearance[data-v-ccf7ddec]:before{margin-right:16px}.appearance+.social-links[data-v-ccf7ddec]:before{margin-left:16px}.social-links[data-v-ccf7ddec]{margin-right:-8px}.divider[data-v-ccf7ddec]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-ccf7ddec]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-ccf7ddec]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-ccf7ddec]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-ccf7ddec]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-ccf7ddec]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-ccf7ddec]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-2d7af913]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-2d7af913]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-7f31e1f6]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-7f31e1f6]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-19976ae1]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-19976ae1]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-8133b170]{display:block}.title[data-v-8133b170]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-ff6087d4]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-ff6087d4]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-ff6087d4]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-ff6087d4]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-ff6087d4]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-ff6087d4]{transform:rotate(45deg)}.button[data-v-ff6087d4]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-ff6087d4]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-ff6087d4]{transition:transform .25s}.group[data-v-ff6087d4]:first-child{padding-top:0}.group+.group[data-v-ff6087d4],.group+.item[data-v-ff6087d4]{padding-top:4px}.VPNavScreenTranslations[data-v-858fe1a4]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-858fe1a4]{height:auto}.title[data-v-858fe1a4]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-858fe1a4]{font-size:16px}.icon.lang[data-v-858fe1a4]{margin-right:8px}.icon.chevron[data-v-858fe1a4]{margin-left:4px}.list[data-v-858fe1a4]{padding:4px 0 0 24px}.link[data-v-858fe1a4]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-cc5739dd]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 1px);right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .5s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-cc5739dd],.VPNavScreen.fade-leave-active[data-v-cc5739dd]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-cc5739dd],.VPNavScreen.fade-leave-active .container[data-v-cc5739dd]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-cc5739dd],.VPNavScreen.fade-leave-to[data-v-cc5739dd]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-cc5739dd],.VPNavScreen.fade-leave-to .container[data-v-cc5739dd]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-cc5739dd]{display:none}}.container[data-v-cc5739dd]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-cc5739dd],.menu+.appearance[data-v-cc5739dd],.translations+.appearance[data-v-cc5739dd]{margin-top:24px}.menu+.social-links[data-v-cc5739dd]{margin-top:16px}.appearance+.social-links[data-v-cc5739dd]{margin-top:16px}.VPNav[data-v-ae24b3ad]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-ae24b3ad]{position:fixed}}.VPSidebarItem.level-0[data-v-b8d55f3b]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-b8d55f3b]{padding-bottom:10px}.item[data-v-b8d55f3b]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-b8d55f3b]{cursor:pointer}.indicator[data-v-b8d55f3b]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-b8d55f3b],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-b8d55f3b],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-b8d55f3b],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-b8d55f3b]{background-color:var(--vp-c-brand-1)}.link[data-v-b8d55f3b]{display:flex;align-items:center;flex-grow:1}.text[data-v-b8d55f3b]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-b8d55f3b]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-b8d55f3b],.VPSidebarItem.level-2 .text[data-v-b8d55f3b],.VPSidebarItem.level-3 .text[data-v-b8d55f3b],.VPSidebarItem.level-4 .text[data-v-b8d55f3b],.VPSidebarItem.level-5 .text[data-v-b8d55f3b]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-b8d55f3b],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-b8d55f3b],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-b8d55f3b],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-b8d55f3b],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-b8d55f3b],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-b8d55f3b]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-b8d55f3b],.VPSidebarItem.level-1.has-active>.item>.text[data-v-b8d55f3b],.VPSidebarItem.level-2.has-active>.item>.text[data-v-b8d55f3b],.VPSidebarItem.level-3.has-active>.item>.text[data-v-b8d55f3b],.VPSidebarItem.level-4.has-active>.item>.text[data-v-b8d55f3b],.VPSidebarItem.level-5.has-active>.item>.text[data-v-b8d55f3b],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-b8d55f3b],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-b8d55f3b],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-b8d55f3b],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-b8d55f3b],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-b8d55f3b],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-b8d55f3b]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-b8d55f3b],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-b8d55f3b],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-b8d55f3b],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-b8d55f3b],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-b8d55f3b],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-b8d55f3b]{color:var(--vp-c-brand-1)}.caret[data-v-b8d55f3b]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-b8d55f3b]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-b8d55f3b]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-b8d55f3b]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-b8d55f3b]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-b8d55f3b],.VPSidebarItem.level-2 .items[data-v-b8d55f3b],.VPSidebarItem.level-3 .items[data-v-b8d55f3b],.VPSidebarItem.level-4 .items[data-v-b8d55f3b],.VPSidebarItem.level-5 .items[data-v-b8d55f3b]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-b8d55f3b]{display:none}.VPSidebar[data-v-575e6a36]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-575e6a36]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-575e6a36]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-575e6a36]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-575e6a36]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-575e6a36]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-575e6a36]{outline:0}.group+.group[data-v-575e6a36]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-575e6a36]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-0f60ec36]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-0f60ec36]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-0f60ec36]{top:14px;left:16px}}.Layout[data-v-5d98c3a5]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-3d121b4a]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-3d121b4a]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{margin:128px 0}}.VPHomeSponsors[data-v-3d121b4a]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-3d121b4a]{padding:0 64px}}.container[data-v-3d121b4a]{margin:0 auto;max-width:1152px}.love[data-v-3d121b4a]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-3d121b4a]{display:inline-block}.message[data-v-3d121b4a]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-3d121b4a]{padding-top:32px}.action[data-v-3d121b4a]{padding-top:40px;text-align:center}.VPTeamPage[data-v-7c57f839]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-7c57f839]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-7c57f839-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-7c57f839-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-7c57f839-s],.VPTeamMembers+.VPTeamPageSection[data-v-7c57f839-s]{margin-top:96px}}.VPTeamMembers[data-v-7c57f839-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-7c57f839-s]{padding:0 64px}}.VPTeamPageTitle[data-v-bf2cbdac]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-bf2cbdac]{padding:80px 64px 48px}}.title[data-v-bf2cbdac]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-bf2cbdac]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-bf2cbdac]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-bf2cbdac]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-b1a88750]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-b1a88750]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-b1a88750]{padding:0 64px}}.title[data-v-b1a88750]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-b1a88750]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-b1a88750]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-b1a88750]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-b1a88750]{padding-top:40px}.VPTeamMembersItem[data-v-f3fa364a]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-f3fa364a]{padding:32px}.VPTeamMembersItem.small .data[data-v-f3fa364a]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f3fa364a]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-f3fa364a]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-f3fa364a]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-f3fa364a]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-f3fa364a]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f3fa364a]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f3fa364a]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f3fa364a]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-f3fa364a]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-f3fa364a]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-f3fa364a]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-f3fa364a]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f3fa364a]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-f3fa364a]{text-align:center}.avatar[data-v-f3fa364a]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-f3fa364a]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-f3fa364a]{margin:0;font-weight:600}.affiliation[data-v-f3fa364a]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-f3fa364a]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-f3fa364a]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f3fa364a]{margin:0 auto}.desc[data-v-f3fa364a] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-f3fa364a]{display:flex;justify-content:center;height:56px}.sp-link[data-v-f3fa364a]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f3fa364a]:hover,.sp .sp-link.link[data-v-f3fa364a]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-f3fa364a]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-6cb0dbc4]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-6cb0dbc4]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-6cb0dbc4]{max-width:876px}.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-6cb0dbc4]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-6cb0dbc4]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-6cb0dbc4]{max-width:760px}.container[data-v-6cb0dbc4]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.VPLocalSearchBox[data-v-639d7ab9]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-639d7ab9]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-639d7ab9]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-639d7ab9]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-639d7ab9]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-639d7ab9]{padding:0 8px}}.search-bar[data-v-639d7ab9]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-639d7ab9]{display:block;font-size:18px}.navigate-icon[data-v-639d7ab9]{display:block;font-size:14px}.search-icon[data-v-639d7ab9]{margin:8px}@media (max-width: 767px){.search-icon[data-v-639d7ab9]{display:none}}.search-input[data-v-639d7ab9]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-639d7ab9]{padding:6px 4px}}.search-actions[data-v-639d7ab9]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-639d7ab9]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-639d7ab9]{display:none}}.search-actions button[data-v-639d7ab9]{padding:8px}.search-actions button[data-v-639d7ab9]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-639d7ab9]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-639d7ab9]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-639d7ab9]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-639d7ab9]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-639d7ab9]{display:none}}.search-keyboard-shortcuts kbd[data-v-639d7ab9]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-639d7ab9]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-639d7ab9]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-639d7ab9]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-639d7ab9]{margin:8px}}.titles[data-v-639d7ab9]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-639d7ab9]{display:flex;align-items:center;gap:4px}.title.main[data-v-639d7ab9]{font-weight:500}.title-icon[data-v-639d7ab9]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-639d7ab9]{opacity:.5}.result.selected[data-v-639d7ab9]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-639d7ab9]{position:relative}.excerpt[data-v-639d7ab9]{opacity:75%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;opacity:.5;margin-top:4px}.result.selected .excerpt[data-v-639d7ab9]{opacity:1}.excerpt[data-v-639d7ab9] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-639d7ab9] mark,.excerpt[data-v-639d7ab9] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-639d7ab9] .vp-code-group .tabs{display:none}.excerpt[data-v-639d7ab9] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-639d7ab9]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-639d7ab9]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-639d7ab9],.result.selected .title-icon[data-v-639d7ab9]{color:var(--vp-c-brand-1)!important}.no-results[data-v-639d7ab9]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-639d7ab9]{flex:none} diff --git a/docs/.vitepress/dist/guide/additions/laravel-wallet-swap.html b/docs/.vitepress/dist/guide/additions/laravel-wallet-swap.html new file mode 100644 index 000000000..f357fa0e4 --- /dev/null +++ b/docs/.vitepress/dist/guide/additions/laravel-wallet-swap.html @@ -0,0 +1,51 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Laravel Wallet Swap

Composer

The recommended installation method is using Composer.

In your project root just run:

bash
composer req bavix/laravel-wallet-swap

User model

We need a simple model with the ability to work multi-wallets.

php
use Bavix\Wallet\Interfaces\Wallet;
+use Bavix\Wallet\Traits\HasWallets;
+use Bavix\Wallet\Traits\HasWallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet, HasWallets;
+}

Simple example

Let's create wallets with currency:

php
$usd = $user->createWallet([
+    'name' => 'My Dollars',
+    'slug' => 'usd',
+    'meta' => ['currency' => 'USD'],
+]);
+
+$rub = $user->createWallet([
+    'name' => 'My Ruble',
+    'slug' => 'rub',
+    'meta' => ['currency' => 'RUB'],
+]);

Find wallets and exchange from one to another.

php
$rub = $user->getWallet('rub');
+$usd = $user->getWallet('usd');
+
+$usd->balance; // 200
+$rub->balance; // 0
+
+$usd->exchange($rub, 10);
+$usd->balance; // 190
+$rub->balance; // 622

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/additions/laravel-wallet-uuid.html b/docs/.vitepress/dist/guide/additions/laravel-wallet-uuid.html new file mode 100644 index 000000000..6da55399e --- /dev/null +++ b/docs/.vitepress/dist/guide/additions/laravel-wallet-uuid.html @@ -0,0 +1,26 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Laravel Wallet UUID

Using uuid greatly reduces package performance. We recommend using int.

Often there is a need to store an identifier in uuid/ulid. Since version 9.0 laravel-wallet supports string identifiers, you only need to perform the migration.

To simplify the process, you can use a ready-made package.

Attention! It will not work to use UUID instead of ID in wallet models; there is a special uuid field for this.

Composer

The recommended installation method is using Composer.

In your project root just run:

bash
composer req bavix/laravel-wallet-uuid

Now you need to migrate!

After migration, you can use the UUID in your models.

You can find implementation examples in the package tests: https://github.com/bavix/laravel-wallet-uuid/tree/master/tests

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/cqrs/create-wallet.html b/docs/.vitepress/dist/guide/cqrs/create-wallet.html new file mode 100644 index 000000000..df6d57c32 --- /dev/null +++ b/docs/.vitepress/dist/guide/cqrs/create-wallet.html @@ -0,0 +1,54 @@ + + + + + + Asynchronous wallet creation | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Asynchronous wallet creation

The idea is based on the division into teams for creating wallets, transactions, etc. The creation of a wallet can be accelerated if the client "generates a wallet himself".


User Model

Add the HasWallet, HasWallets trait's and Wallet interface to model.

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Traits\HasWallets;
+use Bavix\Wallet\Interfaces\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet, HasWallets;
+}

Action Handler

php
use Illuminate\Http\Request;
+use Illuminate\Http\Response;
+use Illuminate\Support\Facades\Response as ResponseFactory;
+...
+
+public function __invoke(User $user, Request $request): Response
+{
+    $name = $request->get('wallet_name');
+    $uuid = $request->get('wallet_uuid');
+
+    $message = new CreateWalletCommandMessage($user, $name, $uuid);
+    dispatch($message);
+
+    return ResponseFactory::json([], 202);
+}

Command Handler

php
public function __invoke(CreateWalletCommandMessage $message): void
+{
+    $user = $message->getUser();
+    $user->createWallet([
+        'uuid' => $message->getWalletUuid(),
+        'name' => $message->getWalletName(),
+    ]);
+}

You receive requests to create a wallet on the backend, and you create them asynchronously. UUID4 is generated on the client side and the client already knows it. You will not be able to create two wallets with one uuid, because the column in the database is unique.

The user no longer needs to wait for the creation of a wallet, it is enough to know the uuid. You get the most stable application.


It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/db/atomic-service.html b/docs/.vitepress/dist/guide/db/atomic-service.html new file mode 100644 index 000000000..139a94953 --- /dev/null +++ b/docs/.vitepress/dist/guide/db/atomic-service.html @@ -0,0 +1,36 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Atomic Service (Mutex in a db transaction)

Working with atomic wallet operations.

Before you start working with atomicity, you need to study the "Race Condition" section and configure the lock.

Sometimes it is necessary to apply actions to the user and the wallet atomically. For example, you want to raise an ad in the search and withdraw money from your wallet. You need an Atomic Service Interface.

php
use Bavix\Wallet\Services\AtomicServiceInterface;
+
+app(AtomicServiceInterface::class)->block($wallet, function () use ($wallet, $entity) {
+    $entity->increaseSales(); // update entity set sort_at=NOW() where id=123;
+    $wallet->withdraw(100);
+});

What's going on here? We block the wallet and raise the ad in the transaction (yes, atomic immediately starts the transaction - this is the main difference from LockServiceInterface). We raise the ad and deduct the amount from the wallet. If there are not enough funds to raise the ad, the error will complete the atomic operation and the transaction will roll back, and the lock on the wallet will be removed.

There is also an opportunity to block a lot of wallets. The operation is expensive, it generates N requests to the lock service. Maybe I'll optimize it in the future, but that's not for sure.


For example, we need to debit from two wallets at the same time. Then let's use the "blocks" method.

php
use Bavix\Wallet\Services\AtomicServiceInterface;
+
+app(AtomicServiceInterface::class)->blocks([$wallet1, $wallet2], function () use ($wallet1, $wallet2) {
+    $wallet1->withdraw(100);
+    $wallet2->withdraw(100);
+});

In this case, we blocked both wallets and started the process of debiting funds. Debiting from both wallets will be considered a successful operation. If there are not enough funds on some wallet, the operation is canceled.

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/db/race-condition.html b/docs/.vitepress/dist/guide/db/race-condition.html new file mode 100644 index 000000000..ba0a0493c --- /dev/null +++ b/docs/.vitepress/dist/guide/db/race-condition.html @@ -0,0 +1,35 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Race Condition

A common issue in the issue is about race conditions.

If you have not yet imported the config into the project, then you need to do this.

bash
php artisan vendor:publish --tag=laravel-wallet-config

Previously, there was a vacuum package, but now it is a part of the core. You just need to configure the lock service and the cache service in the package configuration wallet.php.

php
    /**
+     * A system for dealing with race conditions.
+     */
+    'lock' => [
+        'driver' => 'array',
+        'seconds' => 1,
+    ],

To enable the fight against race conditions, you need to select a provider that supports work with locks. I recommend redis.

There is a setting for storing the state of the wallet, I recommend choosing redis here too.

php
    /**
+     * Storage of the state of the balance of wallets.
+     */
+    'cache' => ['driver' => 'array'],

You need redis-server and php-redis.

Redis is recommended but not required. You can choose whatever the framework offers you.

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/db/transaction.html b/docs/.vitepress/dist/guide/db/transaction.html new file mode 100644 index 000000000..95bb1c585 --- /dev/null +++ b/docs/.vitepress/dist/guide/db/transaction.html @@ -0,0 +1,31 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Transaction

You definitely need to know the feature of transactions. The wallet is automatically blocked from the moment it is used until the end of the transaction. Therefore, it is necessary to use the wallet closer to the end of the transaction.

Very important! Almost all wallet transactions are blocking.

php
use Illuminate\Support\Facades\DB;
+
+DB::beginTransaction();
+$wallet->balanceInt; // now the wallet is blocked
+doingMagic(); // running for a long time.
+DB::commit(); // here will unlock the wallet

The point is that you need to minimize operations within transactions as much as possible. The longer the transaction, the longer the wallet lock. The maximum wallet blocking time is set in the configuration. The longer the transaction takes, the more likely it is to get a race for the wallet.


It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/events/balance-updated-event.html b/docs/.vitepress/dist/guide/events/balance-updated-event.html new file mode 100644 index 000000000..5f9accb94 --- /dev/null +++ b/docs/.vitepress/dist/guide/events/balance-updated-event.html @@ -0,0 +1,40 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Tracking balance changes

There are tasks when you urgently need to do something when the user's balance changes. A frequent case of transferring data via websockets to the front-end.

Version 7.2 introduces an interface to which you can subscribe. This is done using standard Laravel methods. More information in the documentation.

php
use Bavix\Wallet\Internal\Events\BalanceUpdatedEventInterface;
+
+protected $listen = [
+    BalanceUpdatedEventInterface::class => [
+        MyBalanceUpdatedListener::class,
+    ],
+];

And then we create a listener.

php
use Bavix\Wallet\Internal\Events\BalanceUpdatedEventInterface;
+
+class MyBalanceUpdatedListener
+{
+    public function handle(BalanceUpdatedEventInterface $event): void
+    {
+        // And then the implementation...
+    }
+}

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/events/customize.html b/docs/.vitepress/dist/guide/events/customize.html new file mode 100644 index 000000000..4556fb167 --- /dev/null +++ b/docs/.vitepress/dist/guide/events/customize.html @@ -0,0 +1,69 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Customizing events

Sometimes you want to modify the standard events of a package. This is done quite simply.

Let's add broadcast support? We need to implement our event from the interface.

php
use Bavix\Wallet\Internal\Events\BalanceUpdatedEventInterface;
+use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
+
+final class MyUpdatedEvent implements BalanceUpdatedEventInterface, ShouldBroadcast
+{
+    public function __construct(
+        private \Bavix\Wallet\Models\Wallet $wallet,
+        private DateTimeImmutable $updatedAt,
+    ) {}
+    
+    public function getWalletId(): int { return $this->wallet->getKey(); }
+    public function getWalletUuid(): string { return $this->wallet->uuid; }
+    public function getBalance(): string { return $this->wallet->balanceInt; }
+    public function getUpdatedAt(): DateTimeImmutable { return $this->updatedAt; }
+
+    public function broadcastOn(): array
+    {
+        return $this->wallet->getAttributes();
+    }
+}

The event is ready, but that's not all. Now you need to implement your assembler class, which will create an event inside the package.

php
use Bavix\Wallet\Internal\Assembler\BalanceUpdatedEventAssemblerInterface;
+
+class MyUpdatedEventAssembler implements BalanceUpdatedEventAssemblerInterface
+{
+    public function create(\Bavix\Wallet\Models\Wallet $wallet) : \Bavix\Wallet\Internal\Events\BalanceUpdatedEventInterface
+    {
+        return new MyUpdatedEvent($wallet, new DateTimeImmutable());
+    }
+}

Next, go to the package settings (wallet.php). We change the event to a new one.

php
    'assemblers' => [
+        'balance_updated_event' => MyUpdatedEventAssembler::class,
+    ],

Then everything is the same as with the standard events of the package.

php
use Bavix\Wallet\Internal\Events\BalanceUpdatedEventInterface;
+
+protected $listen = [
+    BalanceUpdatedEventInterface::class => [
+        MyBalanceUpdatedListener::class,
+    ],
+];

And then we create a listener.

php
use Bavix\Wallet\Internal\Events\BalanceUpdatedEventInterface;
+
+class MyBalanceUpdatedListener
+{
+    public function handle(BalanceUpdatedEventInterface $event): void
+    {
+        // And then the implementation...
+    }
+}

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/events/transaction-created-event.html b/docs/.vitepress/dist/guide/events/transaction-created-event.html new file mode 100644 index 000000000..91f8f1938 --- /dev/null +++ b/docs/.vitepress/dist/guide/events/transaction-created-event.html @@ -0,0 +1,40 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Tracking the creation of wallet transactions

The events are similar to the events for updating the balance, only for the creation of a wallet. A frequent case of transferring data via websockets to the front-end.

Version 9.1 introduces an interface to which you can subscribe. This is done using standard Laravel methods. More information in the documentation.

php
use Bavix\Wallet\Internal\Events\TransactionCreatedEventInterface;
+
+protected $listen = [
+    TransactionCreatedEventInterface::class => [
+        MyWalletTransactionCreatedListener::class,
+    ],
+];

And then we create a listener.

php
use Bavix\Wallet\Internal\Events\TransactionCreatedEventInterface;
+
+class MyWalletTransactionCreatedListener
+{
+    public function handle(TransactionCreatedEventInterface $event): void
+    {
+        // And then the implementation...
+    }
+}

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/events/wallet-created-event.html b/docs/.vitepress/dist/guide/events/wallet-created-event.html new file mode 100644 index 000000000..0e393d20d --- /dev/null +++ b/docs/.vitepress/dist/guide/events/wallet-created-event.html @@ -0,0 +1,40 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Tracking the creation of wallets

The events are similar to the events for updating the balance, only for the creation of a wallet. A frequent case of transferring data via websockets to the front-end.

Version 7.3 introduces an interface to which you can subscribe. This is done using standard Laravel methods. More information in the documentation.

php
use Bavix\Wallet\Internal\Events\WalletCreatedEventInterface;
+
+protected $listen = [
+    WalletCreatedEventInterface::class => [
+        MyWalletCreatedListener::class,
+    ],
+];

And then we create a listener.

php
use Bavix\Wallet\Internal\Events\WalletCreatedEventInterface;
+
+class MyWalletCreatedListener
+{
+    public function handle(WalletCreatedEventInterface $event): void
+    {
+        // And then the implementation...
+    }
+}

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/fractional/deposit.html b/docs/.vitepress/dist/guide/fractional/deposit.html new file mode 100644 index 000000000..b492812e7 --- /dev/null +++ b/docs/.vitepress/dist/guide/fractional/deposit.html @@ -0,0 +1,37 @@ + + + + + + Deposit float | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Deposit float

A deposit is a sum of money which is part of the full price of something, and which you pay when you agree to buy it.

In this case, the Deposit is the replenishment of the wallet.


User Model

It is necessary to expand the model that will have the wallet. This is done in two stages:

  • Add Wallet interface;
  • Add the HasWalletFloat trait;

Let's get started.

php
use Bavix\Wallet\Traits\HasWalletFloat;
+use Bavix\Wallet\Interfaces\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWalletFloat;
+}

The model is prepared to work with a wallet.

Make a Deposit

Find user:

php
$user = User::first();

As the user uses HasWalletFloat, he will have balance property. Check the user's balance.

php
$user->balance; // 0
+$user->balanceInt; // 0
+$user->balanceFloatNum; // 0

The balance is zero, which is what we expected.

php
$user->depositFloat(10.1); 
+$user->balance; // 1010
+$user->balanceInt; // 1010
+$user->balanceFloatNum; // 10.1

Wow!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/fractional/transfer.html b/docs/.vitepress/dist/guide/fractional/transfer.html new file mode 100644 index 000000000..0a163020c --- /dev/null +++ b/docs/.vitepress/dist/guide/fractional/transfer.html @@ -0,0 +1,51 @@ + + + + + + Transfer | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Transfer

Transfer in our system are two well-known Deposit and Withdraw operations that are performed in one transaction.

The transfer takes place between wallets.


User Model

Example contract

php
$transfer = $user1->transferFloat(
+    $user2,
+    5.11,
+    new Extra(
+        deposit: [
+            'type' => 'extra-deposit',
+        ],
+        withdraw: new Option(
+            [
+                'type' => 'extra-withdraw',
+            ],
+            false // confirmed
+        ),
+        extra: [
+            'msg' => 'hello world',
+        ],
+    )
+);

Make a Transfer

Find user:

php
$first = User::first(); 
+$last = User::orderBy('id', 'desc')->first(); // last user
+$first->getKey() !== $last->getKey(); // true

As the user uses HasWalletFloat, he will have balance property. Check the user's balance.

php
$fist->balanceFloatNum; // 100.00
+$last->balanceFloatNum; // 0

The transfer will be from the first user to the second.

php
$first->transferFloat($last, 5); 
+$first->balanceFloatNum; // 95
+$last->balanceFloatNum; // 5

It's simple!

Force Transfer

Check the user's balance.

php
$first->balanceFloatNum; // 100
+$last->balanceFloatNum; // 0

The transfer will be from the first user to the second.

php
$first->forceTransferFloat($last, 500); 
+$first->balanceFloatNum; // -400
+$last->balanceFloatNum; // 500

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/fractional/withdraw.html b/docs/.vitepress/dist/guide/fractional/withdraw.html new file mode 100644 index 000000000..e4f205829 --- /dev/null +++ b/docs/.vitepress/dist/guide/fractional/withdraw.html @@ -0,0 +1,33 @@ + + + + + + Withdraw | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Withdraw

When there is enough money in the account, you can transfer/withdraw it or buy something in the system.

Since the currency is virtual, you can buy any services on your website. For example, priority in search results.


User Model

Make a Withdraw

Find user:

php
$user = User::first();

As the user uses HasWalletFloat, he will have balance property. Check the user's balance.

php
$user->balance; // 10000
+$user->balanceInt; // 10000
+$user->balanceFloatNum; // 100.00

The balance is not empty, so you can withdraw funds.

php
$user->withdrawFloat(10); 
+$user->balance; // 9000
+$user->balanceInt; // 9000
+$user->balanceFloatNum; // 90.00

It's simple!

Force Withdraw

Forced withdrawal is necessary for those cases when the user has no funds. For example, a fine for spam.

php
$user->balanceFloatNum; // 90.00
+$user->forceWithdrawFloat(101);
+$user->balanceFloatNum; // -11.00

And what will happen if the money is not enough?

There can be two situations:

  • The user's balance is zero, then we get an error Bavix\Wallet\Exceptions\BalanceIsEmpty
  • If the balance is greater than zero, but it is not enough Bavix\Wallet\Exceptions\InsufficientFunds
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/helpers/formatter.html b/docs/.vitepress/dist/guide/helpers/formatter.html new file mode 100644 index 000000000..9361fa3e2 --- /dev/null +++ b/docs/.vitepress/dist/guide/helpers/formatter.html @@ -0,0 +1,28 @@ + + + + + + Helper FormatterServiceInterface | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Helper FormatterServiceInterface

Sometimes you need to convert the balance to some format. A small and simple helper has appeared that will simplify the process a little.

floatValue

php
app(FormatterServiceInterface::class)->floatValue('12345', 2); // 123.45
+app(FormatterServiceInterface::class)->floatValue('12345', 3); // 12.345

intValue

php
app(FormatterServiceInterface::class)->intValue('12.345', 3); // 12345
+app(FormatterServiceInterface::class)->intValue('123.45', 2); // 12345

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/high-performance/batch-transactions.html b/docs/.vitepress/dist/guide/high-performance/batch-transactions.html new file mode 100644 index 000000000..08f9a138b --- /dev/null +++ b/docs/.vitepress/dist/guide/high-performance/batch-transactions.html @@ -0,0 +1,84 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

API. Batch Transactions

Sometimes situations arise when there is a need to make multiple changes to wallets. For example, we need to change the balance of many wallets at once. For example, the system administrator accrues a bonus for participating in some promotion. Previously, the code would look like this:

php
use Bavix\Wallet\Services\AtomicServiceInterface;
+
+app(AtomicServiceInterface::class)->blocks($wallets, function () use ($amount, $wallets) {
+    foreach ($wallets as $wallet) {
+        $wallet->deposit($amount);
+    }
+});

The code is working and everything works correctly. But what happens under the hood? Nothing good. For 5 users it will look like this. exm1

Since the operations inside an atomic operation can depend on each other, we will not be able to combine insert queries into a batch. But there is an opportunity to reduce the number of update queries and improve application performance out of the blue.

After small things, the situation will look like this.

exm2

As you can see, things are getting better. Still, I would like to be able to tell the package that the changes are independent of each other. In this case, the package will be able to collapse all insert queries into a single query and insert in a batch.

Here new api handles can help us:

php
// For multiple transactions.
+interface TransactionQueryHandlerInterface
+{
+    /**
+     * @param non-empty-array<TransactionQuery> $objects
+     * @return non-empty-array<string, Transaction>
+     * @throws ExceptionInterface
+     */
+    public function apply(array $objects): array;
+}
+
+// For multiple transfers of funds.
+interface TransferQueryHandlerInterface
+{
+    /**
+     * @param non-empty-array<TransferQuery> $objects
+     * @return non-empty-array<string, Transfer>
+     * @throws ExceptionInterface
+     */
+    public function apply(array $objects): array;
+}

Let's use the API handle.

php
use Bavix\Wallet\External\Api\TransactionQuery;
+use Bavix\Wallet\External\Api\TransactionQueryHandlerInterface;
+
+app(TransactionQueryHandlerInterface::class)->apply(
+    array_map(
+        static fn (Wallet $wallet) => TransactionQuery::createDeposit($wallet, $amount, null),
+        $wallets
+     )
+);

And now look at the result and it is impressive. exm3

But it is worth noting that these are highly efficient api handles and they do not check the balance of the wallet before making changes. If you need it, then you have to do something like this.

php
use Bavix\Wallet\External\Api\TransactionQuery;
+use Bavix\Wallet\External\Api\TransactionQueryHandlerInterface;
+use Bavix\Wallet\Services\AtomicServiceInterface;
+use Bavix\Wallet\Services\ConsistencyServiceInterface;
+
+app(AtomicServiceInterface::class)->blocks($wallets, function () use ($wallets, $amount) {
+    foreach ($wallets as $wallet) {
+        app(ConsistencyServiceInterface::class)->checkPotential($wallet, $amount);
+    }
+
+    app(TransactionQueryHandlerInterface::class)->apply(
+        array_map(
+            static fn (Wallet $wallet) => TransactionQuery::createWithdraw($wallet, $amount, null),
+            $wallets
+        )
+    );
+});

In version 10.x, it became possible to create transactions with a given uuid (generate on the client side). The main thing is to keep uniqueness.

php
use Bavix\Wallet\External\Api\TransactionQuery;
+
+// int version
+TransactionQuery::createDeposit($wallet, $amount, null, uuid: '5f7820d1-1e82-4d03-9414-05d0c44da9a1');
+TransactionQuery::createWithdraw($wallet, $amount, null, uuid: '6e87dbf2-7be7-48c2-b688-f46ba4e25786');
+
+// float version
+TransactionFloatQuery::createDeposit($wallet, $amountFloat, null, uuid: '5f7820d1-1e82-4d03-9414-05d0c44da9a1');
+TransactionFloatQuery::createWithdraw($wallet, $amountFloat, null, uuid: '6e87dbf2-7be7-48c2-b688-f46ba4e25786');

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/high-performance/batch-transfers.html b/docs/.vitepress/dist/guide/high-performance/batch-transfers.html new file mode 100644 index 000000000..db5697dc5 --- /dev/null +++ b/docs/.vitepress/dist/guide/high-performance/batch-transfers.html @@ -0,0 +1,68 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

API. Batch Transfers

If you need multiple transfers between wallets, you can use a high-performance handle. It is worth remembering that the pen does not check the balance of the wallet before transferring, you need to take care of this yourself.

Previously, you would have written the following code:

php
use Bavix\Wallet\Services\AtomicServiceInterface;
+
+app(AtomicServiceInterface::class)->block($from, function () use ($amount, $from, $wallets) {
+    foreach ($wallets as $wallet) {
+        $from->forceTransfer($wallet, $amount);
+    }
+});

This would lead to the generation of a huge number of requests to the database and cache, because. the package does not know that the response from forceTransfer is not used by you at all inside AtomicService. Now, you can report it:

php
use Bavix\Wallet\External\Api\TransferQuery;
+use Bavix\Wallet\External\Api\TransferQueryHandlerInterface;
+
+app(TransferQueryHandlerInterface::class)->apply(
+    array_map(
+        static fn (Wallet $wallet) => new TransferQuery($from, $wallet, $amount, null),
+        $wallets
+     )
+);

The package will optimize queries and execute them in a single transaction. I strongly advise against creating large packs, because. this can lead to a large increase in request queuing.


In version 10.x, it became possible to create transactions&transfers with a given uuid (generate on the client side). The main thing is to keep uniqueness.

php
use Bavix\Wallet\External\Api\TransferQuery;
+
+// int version
+new TransferQuery($from, $wallet, $amount, new \Bavix\Wallet\External\Dto\Extra(
+    deposit: new \Bavix\Wallet\External\Dto\Option(
+        null,
+        uuid: '71cecafe-da10-464f-9e00-c80437bb4c3e', // deposit transaction
+    ),
+    withdraw: new \Bavix\Wallet\External\Dto\Option(
+        null,
+        uuid: '3805730b-39a1-419d-8715-0b7cc3f1ffc2', // withdraw transaction
+    ),
+    uuid: 'f8becf81-3993-43d7-81f1-7a725c72e976', // transfer uuid
+    extra: ['info' => 'fast deposit'], // metadata in the table transfers
+));
+
+// float version
+new TransferFloatQuery($from, $wallet, $amountFlaot, new \Bavix\Wallet\External\Dto\Extra(
+    deposit: new \Bavix\Wallet\External\Dto\Option(
+        null,
+        uuid: '71cecafe-da10-464f-9e00-c80437bb4c3e', // deposit transaction
+    ),
+    withdraw: new \Bavix\Wallet\External\Dto\Option(
+        null,
+        uuid: '3805730b-39a1-419d-8715-0b7cc3f1ffc2', // withdraw transaction
+    ),
+    uuid: 'f8becf81-3993-43d7-81f1-7a725c72e976', // transfer uuid
+    extra: ['info' => 'fast deposit'], // metadata in the table transfers
+));

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/introduction/basic-usage.html b/docs/.vitepress/dist/guide/introduction/basic-usage.html new file mode 100644 index 000000000..a5a88064a --- /dev/null +++ b/docs/.vitepress/dist/guide/introduction/basic-usage.html @@ -0,0 +1,143 @@ + + + + + + Basic Usage | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Basic Usage

Simple Wallet

It is necessary to expand the model that will have the wallet. This is done in two stages:

  • Add Wallet interface;
  • Add the HasWallet trait;

Let's get started.

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet;
+}

The model is prepared to work with a wallet.

Simple wallet transactions

The package is built on simple transactions:

  • deposit - replenishment of the wallet;
  • withdraw - withdrawal from the wallet;

Consider an example:

php
$user = User::first();
+$user->balance; // 0
+
+$user->deposit(10);
+$user->balance; // 10
+
+$user->withdraw(1);
+$user->balance; // 9
+
+$user->forceWithdraw(200, ['description' => 'payment of taxes']);
+$user->balance; // -191

Purchases

Add the CanPay trait and Customer interface to your User model.

The trait CanPay already inherits HasWallet, reuse will cause an error.

php
use Bavix\Wallet\Traits\CanPay;
+use Bavix\Wallet\Interfaces\Customer;
+
+class User extends Model implements Customer
+{
+    use CanPay;
+}

Add the HasWallet trait and interface to Item model.

Starting from version 9.x there are two product interfaces:

  • For an unlimited number of products (ProductInterface);
  • For a limited number of products (ProductLimitedInterface);

An example with an unlimited number of products:

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Customer;
+use Bavix\Wallet\Interfaces\ProductInterface;
+
+class Item extends Model implements ProductInterface
+{
+    use HasWallet;
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

Example with a limited number of products:

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Customer;
+use Bavix\Wallet\Interfaces\ProductLimitedInterface;
+
+class Item extends Model implements ProductLimitedInterface
+{
+    use HasWallet;
+
+    public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool
+    {
+        /**
+         * This is where you implement the constraint logic. 
+         * 
+         * If the service can be purchased once, then
+         *  return !$customer->paid($this);
+         */
+        return true; 
+    }
+    
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

I do not recommend using the limited interface when working with a shopping cart. If you are working with a shopping cart, then you should override the PurchaseServiceInterface interface. With it, you can check the availability of all products with one request, there will be no N-queries in the database.

Proceed to purchase.

php
$user = User::first();
+$user->balance; // 100
+
+$item = Item::first();
+$user->pay($item); // If you do not have enough money, throw an exception
+var_dump($user->balance); // 0
+
+if ($user->safePay($item)) {
+  // try to buy again )
+}
+
+var_dump((bool)$user->paid($item)); // bool(true)
+
+var_dump($user->refund($item)); // bool(true)
+var_dump((bool)$user->paid($item)); // bool(false)

Eager Loading

When accessing Eloquent relationships as properties, the relationship data is "lazy loaded". This means the relationship data is not actually loaded until you first access the property. However, Eloquent can "eager load" relationships at the time you query the parent model. Eager loading alleviates the N + 1 query problem. To illustrate the N + 1 query problem, consider a Wallet model that is related to User:

Add the HasWallet trait and Wallet interface to model.

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet; // public function wallet(): MorphOne...
+}

Now, let's retrieve all wallets and their users:

php
$users = User::all();
+
+foreach ($users as $user) {
+    // echo $user->wallet->balance;
+    echo $user->balance; // Abbreviated notation
+}

This loop will execute 1 query to retrieve all of the users on the table, then another query for each user to retrieve the wallet. So, if we have 25 users, the code above would run 26 queries: 1 for the original user, and 25 additional queries to retrieve the wallet of each user.

Thankfully, we can use eager loading to reduce this operation to just 2 queries. When querying, you may specify which relationships should be eager loaded using the with method:

php
$users = User::with('wallet')->all();
+
+foreach ($users as $user) {
+    // echo $user->wallet->balance;
+    echo $user->balance; // Abbreviated notation
+}

For this operation, only two queries will be executed.

How to work with fractional numbers?

Add the HasWalletFloat trait and WalletFloat interface to model.

php
use Bavix\Wallet\Traits\HasWalletFloat;
+use Bavix\Wallet\Interfaces\WalletFloat;
+use Bavix\Wallet\Interfaces\Wallet;
+
+class User extends Model implements Wallet, WalletFloat
+{
+    use HasWalletFloat;
+}

Now we make transactions.

php
$user = User::first();
+$user->balance; // 100
+$user->balanceFloat; // 1.00
+
+$user->depositFloat(1.37);
+$user->balance; // 237
+$user->balanceFloat; // 2.37

You can get the float amount by accessing the amountFloat attribute on the transaction model

php
$transaction->amount; // 137
+$transaction->amountFloat; // 1.37
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/introduction/configuration.html b/docs/.vitepress/dist/guide/introduction/configuration.html new file mode 100644 index 000000000..81ec4540f --- /dev/null +++ b/docs/.vitepress/dist/guide/introduction/configuration.html @@ -0,0 +1,52 @@ + + + + + + Configuration | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Configuration

Though this package is crafted to suit most of your needs by default, you can edit the configuration file to suit certain demands.

Environment

NameDescriptionDefault
WALLET_MATH_SCALESelect mathematical precision64
WALLET_CACHE_DRIVERCache for wallet balancearray
WALLET_CACHE_TTLCache TTL for wallet balance24h
WALLET_LOCK_DRIVERLock for walletsarray
WALLET_LOCK_TTLLock TTL for wallets1s
WALLET_TRANSACTION_TABLE_NAMETransaction table nametransactions
WALLET_TRANSFER_TABLE_NAMETransfer table nametransfers
WALLET_WALLET_TABLE_NAMEWallet table namewallets
WALLET_DEFAULT_WALLET_NAMEDefault wallet nameDefault Wallet
WALLET_DEFAULT_WALLET_SLUGDefault wallet slugdefault

Configure default wallet

Customize name,slug and meta of default wallet.

config/wallet.php:

php
'default' => [
+            'name' => 'Ethereum',
+            'slug' => 'ETH',
+            'meta' => [],
+        ],

Extend base Wallet model

You can extend base Wallet model by creating a new class that extends Bavix\Wallet\Models\Wallet and registering the new class in config/wallet.php. Example MyWallet.php

App/Models/MyWallet.php:

php
use Bavix\Wallet\Models\Wallet as WalletBase;
+
+class MyWallet extends WalletBase {
+    public function helloWorld(): string { return "hello world"; }
+}

Register base Wallet model

config/wallet.php:

php
    'wallet' => [
+        'table' => 'wallets',
+        'model' => MyWallet::class,
+        'creating' => [],
+        'default' => [
+            'name' => 'Default Wallet',
+            'slug' => 'default',
+            'meta' => [],
+        ],
+    ],
php
   echo $user->wallet->helloWorld();

This same method above, can be used to extend the base Transfer and Transaction models and registering the extended models in the configuration file.

Changing wallet decimal places

You can change the default wallet decimal places, in wallet config file. This can be useful when working with fractional numbers.

config/wallet.php:

php
  /**
+     * Base model 'wallet'.
+     */
+    'wallet' => [
+        ....
+        'creating' => [
+            'decimal_places' => 18,
+        ],
+       ....
+    ],
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/introduction/index.html b/docs/.vitepress/dist/guide/introduction/index.html new file mode 100644 index 000000000..824afd1c7 --- /dev/null +++ b/docs/.vitepress/dist/guide/introduction/index.html @@ -0,0 +1,26 @@ + + + + + + Introduction | Laravel Wallet + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/introduction/installation.html b/docs/.vitepress/dist/guide/introduction/installation.html new file mode 100644 index 000000000..0d8c80e2d --- /dev/null +++ b/docs/.vitepress/dist/guide/introduction/installation.html @@ -0,0 +1,26 @@ + + + + + + Installation | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Installation

Composer

The recommended installation method is using Composer.

In your project root just run:

bash
composer req bavix/laravel-wallet

Ensure that you’ve set up your project to autoload Composer-installed packages.

You can use it for customization

Sometimes it is useful...

Run Migrations

Publish the migrations with this artisan command:

bash
php artisan vendor:publish --tag=laravel-wallet-migrations

Configuration

You can publish the config file with this artisan command:

bash
php artisan vendor:publish --tag=laravel-wallet-config

After installing the package, you can proceed to use it or configure it to suit your needs.

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/introduction/upgrade.html b/docs/.vitepress/dist/guide/introduction/upgrade.html new file mode 100644 index 000000000..418c9e5bb --- /dev/null +++ b/docs/.vitepress/dist/guide/introduction/upgrade.html @@ -0,0 +1,83 @@ + + + + + + Upgrade Guide | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Upgrade Guide

1.x.x → 2.x.x

Replace ::with('balance') to ::with('wallet')


2.1.x → 2.2.x

Replace CanBePaid to CanPay.

Replace CanBePaidFloat to CanPayFloat.


2.2.x → 2.4.x

Replace calculateBalance to refreshBalance


2.4.x → 3.0.x

Replace path bavix.wallet::transaction to Bavix\Wallet\Models\Transaction::class

Replace path bavix.wallet::transfer to Bavix\Wallet\Models\Transfer::class

Replace path bavix.wallet::wallet to Bavix\Wallet\Models\Wallet::class

php
// old
+app('bavix.wallet::transaction'); 
+// new
+app(Bavix\Wallet\Models\Transaction::class);

Add the $quantity parameter to the canBuy method.

php
// old
+public function canBuy(Customer $customer, bool $force = false): bool
+// new
+public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool

Add method getUniqueId to Interface Product

php
class Item extends Model implements Product
+{
+    
+    // Your method
+    
+    public function getUniqueId(): string
+    {
+        return (string)$this->getKey();
+    }
+    
+}

3.0.x → 3.1.x

Replace Taxing to Taxable.

3.1.x → 4.0.x

If you are using php 7.1, then version 4.0 is not available to you. You need to update php.

Removed support for older versions of laravel/cashier. We support 7+.

If you use payment for goods

You must add the argument Customer $customer to the getAmountProduct method of your model.

Your code on 3.x:

php
    public function getAmountProduct(): int
+    {
+        return $this->price;
+    }

Your code on 4.x:

php
    public function getAmountProduct(Customer $customer): int
+    {
+        return $this->price;
+    }

4.0.x → 5.0.x

By updating the library from 4.x to 5.x you lose strong typing. This solution was necessary to support APM (Arbitrary Precision Mathematics).

In your goods:

Your code on 4.x:

php
    public function getAmountProduct(Customer $customer): int  { ... }
+
+    public function getFeePercent(): float  { ... }
+
+    public function getMinimalFee(): int { ... }

Your code on 5.x:

php
    public function getAmountProduct(Customer $customer) { ... }
+
+    public function getFeePercent() { ... }
+
+    public function getMinimalFee() { ... }

In the exchange rate processing service:

Your code on 4.x:

php
    protected function rate(Wallet $wallet): float { ... }
+
+    public function convertTo(Wallet $wallet): float { ... }

Your code on 5.x:

php
    protected function rate(Wallet $wallet) { ... }
+
+    public function convertTo(Wallet $wallet) { ... }

5.x.x → 6.0.x

Go to config/wallet.php file (if you have it) and edit it.

Removing unnecessary code.

php
$bcLoaded = extension_loaded('bcmath');	
+$mathClass = Math::class;	
+switch (true) {	
+    case class_exists(BigDecimal::class):	
+        $mathClass = BrickMath::class;	
+        break;	
+    case $bcLoaded:	
+        $mathClass = BCMath::class;	
+        break;	
+}

Replace your math class ($mathClass) with brick/math.

Your code on 5.x:

php
    'mathable' => $mathClass,

Your code on 6.x:

php
    'mathable' => BrickMath::class,

6.x.x → 6.2.4

You need to update to the latest version for all migrations to appear.

6.2.4 → 7.x.x

Update config/wallet.php

The config/wallet.php config has changed a lot, if you have it in your project, then replace it run.

bash
php artisan vendor:publish --tag=laravel-wallet-config --force

Then return your settings. The package configuration has changed globally and there is no point in describing each key 🔑


UUID for wallet

The uuid field has been added to the wallet table, which is now actively used. If you have a highload, then I recommend that you add the field yourself and mark the migration (UpdateWalletsUuidTable) completed. If you have mysql, it is better to do this via pt-online-schema-change.

If you have a small project and a small wallet base, then the migration will be applied automatically.


That's it, you can use all 7.x functions to the fullest. The contract did not change globally, added more stringency and toned down the performance of the package. On a basket of 150 products, the acceleration is a whopping 24x.

All changes can be found in the pull request. The kernel has changed globally, I would not recommend switching to version 7.0.0 at the very beginning, there may be bugs. I advise you should at least 7.0.1.

7.x.x → 8.0.x

Nothing needs to be done.

8.0.x → 8.1.x

Replace getAvailableBalance to getAvailableBalanceAttribute (method) or available_balance (property).


Cart methods now support fluent-dto. It is necessary to replace the old code with a new one, for example:

php
// old
+$cart = app(\Bavix\Wallet\Objects\Cart::class)
+    ->addItems($products)
+    ->addItem($product)
+    ->setMeta(['hello' => 'world']);
+    
+$cart->addItem($product);
+
+// new. fluent
+$cart = app(\Bavix\Wallet\Objects\Cart::class)
+    ->withItems($products)
+    ->withItem($product)
+    ->withMeta(['hello' => 'world']);
+
+$cart = $cart->withItem($product);

8.1.x+ → 9.0.x

The logic of storing transfers between accounts has changed. Previously, money could be credited to the user directly, but starting from version nine, all transactions go strictly between wallets. Thanks to this approach, finally, there will be full-fledged work with uuid identifiers in the project.

To migrate to the correct structure, you need to run the command:

artisan bx:transfer:fix

If the command fails, then the command must be restarted. Continue until the command starts executing immediately (no bad entries left).


The product has been divided into two interfaces:

  • ProductLimitedInterface. Needed to create limited goods;
  • ProductInterface. Needed for an infinite number of products;

The old Product interface should be replaced with one of these.

Replace Bavix\Wallet\Interfaces\Product to Bavix\Wallet\Interfaces\ProductLimitedInterface.

9.x.x → 10.0.x

  1. If you have a custom BookkeeperServiceInterface, then you need to update the contract.
  2. If you catch a LockProviderNotFoundException, then you need to remove the check. This exception no longer exists.
  3. If you have specific requests for transfers using the MorphMany relation, then you need to rewrite it to the HasMany relation.

10.x.x → 11.0.x

  1. If you have mariadb, then the minimum supported version is 10.10. More details here: https://github.com/laravel/framework/pull/48455;
  2. Perform new package migrations, support for soft deleted has been added;
  3. If you used delete methods, then they need to be replaced with forceDelete (if soft delete support is not needed);
  4. Obsolete columns from_type, to_type in the transfers table have been physically removed. Make sure you don't use them;
  5. An extra column has been added to the transfers table. Don't forget to apply all new migrations;
  6. The Bavix\Wallet\Interfaces\Wallet contract has been extended with the receivedTransfers method. If you overridden the implementation, then implement the new method;
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/multi/new-wallet.html b/docs/.vitepress/dist/guide/multi/new-wallet.html new file mode 100644 index 000000000..9a94789f8 --- /dev/null +++ b/docs/.vitepress/dist/guide/multi/new-wallet.html @@ -0,0 +1,53 @@ + + + + + + Create a wallet and use it | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Create a wallet and use it

You can create an unlimited number of wallets, but the slug for each wallet should be unique.


User Model

Add the HasWallets trait's and Wallet interface to model.

php
use Bavix\Wallet\Traits\HasWallets;
+use Bavix\Wallet\Interfaces\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallets;
+}

Create a wallet

Find user:

php
$user = User::first();

Create a new wallet.

php
$user->hasWallet('my-wallet'); // bool(false)
+$wallet = $user->createWallet([
+    'name' => 'New Wallet',
+    'slug' => 'my-wallet',
+]);
+
+$user->hasWallet('my-wallet'); // bool(true)
+
+$wallet->deposit(100);
+$wallet->balance; // 100
+$wallet->balanceFloatNum; // 1.00

How to get the right wallet?

php
$myWallet = $user->getWallet('my-wallet');
+$myWallet->balance; // 100
+$myWallet->balanceFloatNum; // 1.00

Default Wallet + MultiWallet

Is it possible to use the default wallet and multi-wallets at the same time? Yes.

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Traits\HasWallets;
+use Bavix\Wallet\Interfaces\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet, HasWallets;
+}

How to get the default wallet?

php
$wallet = $user->wallet;
+$wallet->balance; // 10
+$wallet->balanceFloatNum; // 0.10

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/multi/transaction-filter.html b/docs/.vitepress/dist/guide/multi/transaction-filter.html new file mode 100644 index 000000000..50c7dc20a --- /dev/null +++ b/docs/.vitepress/dist/guide/multi/transaction-filter.html @@ -0,0 +1,53 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Transaction Filter

Often developers ask me about the transactions method. Yes, this method displays ALL transactions for the wallet owner. If you only need to filter one wallet at a time, now you can use the walletTransactions method.

php
/** @var \Bavix\Wallet\Models\Wallet $wallet */
+
+$query = $wallet->walletTransactions();

Let's take a look at a livelier code example:

php
$user->transactions()->count(); // 0
+
+// Multi wallets and default wallet can be used together
+// default wallet
+$user->deposit(100);
+$user->wallet->deposit(200);
+$user->wallet->withdraw(1);
+
+// usd
+$usd = $user->createWallet(['name' => 'USD']);
+$usd->deposit(100);
+
+// eur
+$eur = $user->createWallet(['name' => 'EUR']);
+$eur->deposit(100);
+
+$user->transactions()->count(); // 5
+$user->wallet->transactions()->count(); // 5
+$usd->transactions()->count(); // 5
+$eur->transactions()->count(); // 5
+// the transactions method returns data relative to the owner of the wallet, for all transactions
+
+$user->walletTransactions()->count(); // 3. we get the default wallet
+$user->wallet->walletTransactions()->count(); // 3
+$usd->walletTransactions()->count(); // 1
+$eur->walletTransactions()->count(); // 1

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/multi/transfer.html b/docs/.vitepress/dist/guide/multi/transfer.html new file mode 100644 index 000000000..f332ad3fb --- /dev/null +++ b/docs/.vitepress/dist/guide/multi/transfer.html @@ -0,0 +1,61 @@ + + + + + + Transfer between wallets | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Transfer between wallets

Transfer in our system are two well-known Deposit and Withdraw operations that are performed in one transaction.

The transfer takes place between wallets.


User Model

Prepare the model, add the HasWallets trait's and Wallet interface.

php
use Bavix\Wallet\Traits\HasWallets;
+use Bavix\Wallet\Interfaces\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallets;
+}

Make a Transfer

Find user:

php
$first = User::first(); 
+$last = User::orderBy('id', 'desc')->first(); // last user
+$first->getKey() !== $last->getKey(); // true

Create new wallets for users.

php
$firstWallet = $first->createWallet(['name' => 'First User Wallet']);
+$lastWallet = $last->createWallet(['name' => 'Second User Wallet']);
+
+$firstWallet->deposit(100);
+$firstWallet->balance; // 100
+$lastWallet->balance; // 0

The transfer will be from the first user to the last.

php
$firstWallet->transfer($lastWallet, 5); 
+$firstWallet->balance; // 95
+$lastWallet->balance; // 5

It's simple!

Force Transfer

Check the user's balance.

php
$firstWallet->balance; // 100
+$lastWallet->balance; // 0

The transfer will be from the first user to the second.

php
$firstWallet->forceTransfer($lastWallet, 500); 
+$firstWallet->balance; // -400
+$lastWallet->balance; // 500

It worked!

Change the meta and confirmation.

Check the user's balance.

php
$firstWallet->balanceInt; // 1_000
+$secondWallet->balanceInt; // 0

We will execute the transfer, but without confirmation of the withdrawal of funds.

php
use Bavix\Wallet\External\Dto\Extra;
+use Bavix\Wallet\External\Dto\Option;
+
+/** @var $firstWallet \Bavix\Wallet\Interfaces\Wallet */
+$transfer = $firstWallet->transfer($secondWallet, 500, new Extra(
+    deposit: ['message' => 'Hello, secondWallet!'],
+    withdraw: new Option(meta: ['something' => 'anything'], confirmed: false)
+));
+
+$transfer->withdraw->meta; // ['something' => 'anything']
+$transfer->withdraw->confirmed; // false
+
+$transfer->deposit->meta; // ['message' => 'Hello, secondWallet!']
+$transfer->deposit->confirmed; // true
+
+$firstWallet->balanceInt; // 1_000
+$secondWallet->balanceInt; // 500

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/purchases/cart.html b/docs/.vitepress/dist/guide/purchases/cart.html new file mode 100644 index 000000000..dabe64eeb --- /dev/null +++ b/docs/.vitepress/dist/guide/purchases/cart.html @@ -0,0 +1,111 @@ + + + + + + Cart | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Cart

User Model

Add the CanPay trait and Customer interface to your User model.

The trait CanPay already inherits HasWallet, reuse will cause an error.

php
use Bavix\Wallet\Traits\CanPay;
+use Bavix\Wallet\Interfaces\Customer;
+
+class User extends Model implements Customer
+{
+    use CanPay;
+}

Item Model

Add the HasWallet trait and interface to Item model.

Starting from version 9.x there are two product interfaces:

  • For an unlimited number of products (ProductInterface);
  • For a limited number of products (ProductLimitedInterface);

An example with an unlimited number of products:

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Customer;
+use Bavix\Wallet\Interfaces\ProductInterface;
+
+class Item extends Model implements ProductInterface
+{
+    use HasWallet;
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return round($this->price * 100);
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

Example with a limited number of products:

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Customer;
+use Bavix\Wallet\Interfaces\ProductLimitedInterface;
+
+class Item extends Model implements ProductLimitedInterface
+{
+    use HasWallet;
+
+    public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool
+    {
+        /**
+         * This is where you implement the constraint logic. 
+         * 
+         * If the service can be purchased once, then
+         *  return !$customer->paid($this);
+         */
+        return true; 
+    }
+    
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return round($this->price * 100);
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

I do not recommend using the limited interface when working with a shopping cart. If you are working with a shopping cart, then you should override the PurchaseServiceInterface interface. With it, you can check the availability of all products with one request, there will be no N-queries in the database.

Fill the cart

Find the user and check the balance.

php
$user = User::first();
+$user->balance; // 0

Let's start shopping.

php
use Bavix\Wallet\Objects\Cart;
+
+$list = [
+    'potato' => 3,
+    'carrot' => 10,
+];
+
+$products = Item::query()
+    ->whereIn('slug', ['potato', 'carrot'])
+    ->get();
+
+$cart = app(Cart::class);
+foreach ($products as $product) {
+    $cart = $cart->withItem($product, quantity: $list[$product->slug]);
+}
+
+$cartTotal = $cart->getTotal($user); // 15127
+$user->deposit($cartTotal); 
+$user->balanceInt; // 15127
+$user->balanceFloat; // 151.27
+
+$cart = $cart->withItem(current($products), pricePerItem: 500); // 15127+500
+$user->deposit(500);
+$user->balanceInt; // 15627
+$user->balanceFloat; // 156.27
+
+(bool)$user->payCart($cart); // true
+$user->balanceFloat; // 0

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/purchases/gift.html b/docs/.vitepress/dist/guide/purchases/gift.html new file mode 100644 index 000000000..ea63abc71 --- /dev/null +++ b/docs/.vitepress/dist/guide/purchases/gift.html @@ -0,0 +1,94 @@ + + + + + + Gift | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Gift

User Model

Add the CanPay trait and Customer interface to your User model.

The trait CanPay already inherits HasWallet, reuse will cause an error.

php
use Bavix\Wallet\Traits\CanPay;
+use Bavix\Wallet\Interfaces\Customer;
+
+class User extends Model implements Customer
+{
+    use CanPay;
+}

Item Model

Add the HasWallet trait and interface to Item model.

Starting from version 9.x there are two product interfaces:

  • For an unlimited number of products (ProductInterface);
  • For a limited number of products (ProductLimitedInterface);

An example with an unlimited number of products:

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Customer;
+use Bavix\Wallet\Interfaces\ProductInterface;
+
+class Item extends Model implements ProductInterface
+{
+    use HasWallet;
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

Example with a limited number of products:

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Customer;
+use Bavix\Wallet\Interfaces\ProductLimitedInterface;
+
+class Item extends Model implements ProductLimitedInterface
+{
+    use HasWallet;
+
+    public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool
+    {
+        /**
+         * This is where you implement the constraint logic. 
+         * 
+         * If the service can be purchased once, then
+         *  return !$customer->paid($this);
+         */
+        return true; 
+    }
+    
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

I do not recommend using the limited interface when working with a shopping cart. If you are working with a shopping cart, then you should override the PurchaseServiceInterface interface. With it, you can check the availability of all products with one request, there will be no N-queries in the database.

Santa Claus, give gifts

Find the user's and check the balance.

php
$first = User::first(); 
+$last = User::orderBy('id', 'desc')->first(); // last user
+$first->getKey() !== $last->getKey(); // true
+
+$first->balance; // 115
+$last->balance; // 0

One user wants to give a gift to another. Find the product.

php
$item = Item::first();
+$item->getAmountProduct($first); // 100
+$item->balance; // 0

The first user buys the product and gives it.

If the product uses the Taxable interface, then Santa will pay tax

php
$first->gift($last, $item);
+(bool)$last->paid($item, true); // bool(true)
+$first->balance; // 15
+$last->balance; // 0
+$item->balance; // 100

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/purchases/payment-free.html b/docs/.vitepress/dist/guide/purchases/payment-free.html new file mode 100644 index 000000000..f57c1406d --- /dev/null +++ b/docs/.vitepress/dist/guide/purchases/payment-free.html @@ -0,0 +1,89 @@ + + + + + + Payment Free | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Payment Free

User Model

Add the CanPay trait and Customer interface to your User model.

The trait CanPay already inherits HasWallet, reuse will cause an error.

php
use Bavix\Wallet\Traits\CanPay;
+use Bavix\Wallet\Interfaces\Customer;
+
+class User extends Model implements Customer
+{
+    use CanPay;
+}

Item Model

Add the HasWallet trait and interface to Item model.

Starting from version 9.x there are two product interfaces:

  • For an unlimited number of products (ProductInterface);
  • For a limited number of products (ProductLimitedInterface);

An example with an unlimited number of products:

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Customer;
+use Bavix\Wallet\Interfaces\ProductInterface;
+
+class Item extends Model implements ProductInterface
+{
+    use HasWallet;
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

Example with a limited number of products:

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Customer;
+use Bavix\Wallet\Interfaces\ProductLimitedInterface;
+
+class Item extends Model implements ProductLimitedInterface
+{
+    use HasWallet;
+
+    public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool
+    {
+        /**
+         * This is where you implement the constraint logic. 
+         * 
+         * If the service can be purchased once, then
+         *  return !$customer->paid($this);
+         */
+        return true; 
+    }
+    
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

I do not recommend using the limited interface when working with a shopping cart. If you are working with a shopping cart, then you should override the PurchaseServiceInterface interface. With it, you can check the availability of all products with one request, there will be no N-queries in the database.

Pay Free

Find the user and check the balance.

php
$user = User::first();
+$user->balance; // 100

Find the goods and check the cost.

php
$item = Item::first();
+$item->getAmountProduct($user); // 100
+$item->balance; // 0

Purchase!

php
$user->payFree($item);
+(bool)$user->paid($item); // bool(true)
+$user->balance; // 100
+$item->balance; // 0

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/purchases/payment.html b/docs/.vitepress/dist/guide/purchases/payment.html new file mode 100644 index 000000000..b4e71a187 --- /dev/null +++ b/docs/.vitepress/dist/guide/purchases/payment.html @@ -0,0 +1,90 @@ + + + + + + Payment | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Payment

User Model

Add the CanPay trait and Customer interface to your User model.

The trait CanPay already inherits HasWallet, reuse will cause an error.

php
use Bavix\Wallet\Traits\CanPay;
+use Bavix\Wallet\Interfaces\Customer;
+
+class User extends Model implements Customer
+{
+    use CanPay;
+}

Item Model

Add the HasWallet trait and interface to Item model.

Starting from version 9.x there are two product interfaces:

  • For an unlimited number of products (ProductInterface);
  • For a limited number of products (ProductLimitedInterface);

An example with an unlimited number of products:

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Customer;
+use Bavix\Wallet\Interfaces\ProductInterface;
+
+class Item extends Model implements ProductInterface
+{
+    use HasWallet;
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

Example with a limited number of products:

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Customer;
+use Bavix\Wallet\Interfaces\ProductLimitedInterface;
+
+class Item extends Model implements ProductLimitedInterface
+{
+    use HasWallet;
+
+    public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool
+    {
+        /**
+         * This is where you implement the constraint logic. 
+         * 
+         * If the service can be purchased once, then
+         *  return !$customer->paid($this);
+         */
+        return true; 
+    }
+    
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

I do not recommend using the limited interface when working with a shopping cart. If you are working with a shopping cart, then you should override the PurchaseServiceInterface interface. With it, you can check the availability of all products with one request, there will be no N-queries in the database.

Proceed to purchase

Find the user and check the balance.

php
$user = User::first();
+$user->balance; // 100

Find the goods and check the cost.

php
$item = Item::first();
+$item->getAmountProduct($user); // 100

The user can buy a product, buy...

php
$user->pay($item);
+$user->balance; // 0

What happens if the user does not have the funds? The same as with the withdrawal.

php
$user->balance; // 0
+$user->pay($item);
+// throw an exception

The question arises, how do you know that the product is purchased?

php
(bool)$user->paid($item); // bool(true)

Safe Pay

To not write try and catch use safePay method.

php
if ($user->safePay($item)) {
+  // try to buy again )
+}

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/purchases/receiving.html b/docs/.vitepress/dist/guide/purchases/receiving.html new file mode 100644 index 000000000..de77b8af1 --- /dev/null +++ b/docs/.vitepress/dist/guide/purchases/receiving.html @@ -0,0 +1,95 @@ + + + + + + Payment. Customize receiving | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Payment. Customize receiving

User Model

Add the CanPay trait and Customer interface to your User model.

The trait CanPay already inherits HasWallet, reuse will cause an error.

php
use Bavix\Wallet\Traits\CanPay;
+use Bavix\Wallet\Interfaces\Customer;
+
+class User extends Model implements Customer
+{
+    use CanPay;
+}

Item Model

Add the HasWallet trait and interface to Item model. If we want to achieve multi wallets for a product, then we need to add HasWallets.

Starting from version 9.x there are two product interfaces:

  • For an unlimited number of products (ProductInterface);
  • For a limited number of products (ProductLimitedInterface);

An example with an unlimited number of products:

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Traits\HasWallets;
+use Bavix\Wallet\Interfaces\Customer;
+use Bavix\Wallet\Interfaces\ProductInterface;
+
+class Item extends Model implements ProductInterface
+{
+    use HasWallet, HasWallets;
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

Example with a limited number of products:

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Traits\HasWallets;
+use Bavix\Wallet\Interfaces\Customer;
+use Bavix\Wallet\Interfaces\ProductLimitedInterface;
+
+class Item extends Model implements ProductLimitedInterface
+{
+    use HasWallet, HasWallets;
+
+    public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool
+    {
+        return true; 
+    }
+    
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

I do not recommend using the limited interface when working with a shopping cart. If you are working with a shopping cart, then you should override the PurchaseServiceInterface interface. With it, you can check the availability of all products with one request, there will be no N-queries in the database.

Proceed to purchase

Find the user and check the balance.

php
$user = User::first();
+$user->balance; // 100

Find the goods and check the cost.

php
$item = Item::first();
+$item->getAmountProduct($user); // 100
+
+$receiving = $item->createWallet([
+    'name' => 'Dollar',
+    'meta' => [
+        'currency' => 'USD',
+    ],
+]);

The user can buy a product, buy...

php
$cart = app(Cart::class)
+    ->withItem($item, receiving: $receiving)
+;
+
+$user->payCart($cart);
+$user->balance; // 0
+
+$receiving->balanceInt; // $100

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/purchases/refund.html b/docs/.vitepress/dist/guide/purchases/refund.html new file mode 100644 index 000000000..8f7630bbb --- /dev/null +++ b/docs/.vitepress/dist/guide/purchases/refund.html @@ -0,0 +1,88 @@ + + + + + + Refund | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Refund

User Model

Add the CanPay trait and Customer interface to your User model.

The trait CanPay already inherits HasWallet, reuse will cause an error.

php
use Bavix\Wallet\Traits\CanPay;
+use Bavix\Wallet\Interfaces\Customer;
+
+class User extends Model implements Customer
+{
+    use CanPay;
+}

Item Model

Add the HasWallet trait and interface to Item model.

Starting from version 9.x there are two product interfaces:

  • For an unlimited number of products (ProductInterface);
  • For a limited number of products (ProductLimitedInterface);

An example with an unlimited number of products:

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Customer;
+use Bavix\Wallet\Interfaces\ProductInterface;
+
+class Item extends Model implements ProductInterface
+{
+    use HasWallet;
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

Example with a limited number of products:

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Customer;
+use Bavix\Wallet\Interfaces\ProductLimitedInterface;
+
+class Item extends Model implements ProductLimitedInterface
+{
+    use HasWallet;
+
+    public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool
+    {
+        /**
+         * This is where you implement the constraint logic. 
+         * 
+         * If the service can be purchased once, then
+         *  return !$customer->paid($this);
+         */
+        return true; 
+    }
+    
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+}

I do not recommend using the limited interface when working with a shopping cart. If you are working with a shopping cart, then you should override the PurchaseServiceInterface interface. With it, you can check the availability of all products with one request, there will be no N-queries in the database.

Make a refund

Find the user and check the balance.

php
$user = User::first();
+$user->balance; // 0

Find the goods and check the balance.

php
$item = Item::first();
+$item->balance; // 100

Return of funds!

php
(bool)$user->paid($item); // bool(true)
+(bool)$user->refund($item); // bool(true)
+$item->balance; // 0
+$user->balance; // 100

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/single/cancel.html b/docs/.vitepress/dist/guide/single/cancel.html new file mode 100644 index 000000000..75c3aae46 --- /dev/null +++ b/docs/.vitepress/dist/guide/single/cancel.html @@ -0,0 +1,42 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

User Model

Add the CanConfirm trait and Confirmable interface to your User model.

php
use Bavix\Wallet\Interfaces\Confirmable;
+use Bavix\Wallet\Interfaces\Wallet;
+use Bavix\Wallet\Traits\CanConfirm;
+use Bavix\Wallet\Traits\HasWallet;
+
+class UserConfirm extends Model implements Wallet, Confirmable
+{
+    use HasWallet, CanConfirm;
+}

You can only confirm the transaction with the wallet you paid with.

Example:

Sometimes you need to create an operation and confirm its field. That is what this trey does.

php
$user->balance; // 0
+$transaction = $user->deposit(100, null, false); // not confirm
+$transaction->confirmed; // bool(false)
+$user->balance; // 0
+
+$user->confirm($transaction); // bool(true)
+$transaction->confirmed; // bool(true)
+
+$user->balance; // 100

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/single/confirm.html b/docs/.vitepress/dist/guide/single/confirm.html new file mode 100644 index 000000000..c8d9a6dab --- /dev/null +++ b/docs/.vitepress/dist/guide/single/confirm.html @@ -0,0 +1,42 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

User Model

Add the CanConfirm trait and Confirmable interface to your User model.

php
use Bavix\Wallet\Interfaces\Confirmable;
+use Bavix\Wallet\Interfaces\Wallet;
+use Bavix\Wallet\Traits\CanConfirm;
+use Bavix\Wallet\Traits\HasWallet;
+
+class UserConfirm extends Model implements Wallet, Confirmable
+{
+    use HasWallet, CanConfirm;
+}

You can only confirm the transaction with the wallet you paid with.

Example:

Sometimes you need to create an operation and confirm its field. That is what this trey does.

php
$user->balance; // 0
+$transaction = $user->deposit(100, null, false); // not confirm
+$transaction->confirmed; // bool(false)
+$user->balance; // 0
+
+$user->confirm($transaction); // bool(true)
+$transaction->confirmed; // bool(true)
+
+$user->balance; // 100

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/single/credit-limits.html b/docs/.vitepress/dist/guide/single/credit-limits.html new file mode 100644 index 000000000..82a2d020d --- /dev/null +++ b/docs/.vitepress/dist/guide/single/credit-limits.html @@ -0,0 +1,43 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Credit Limits

If you need the ability to have wallets have a credit limit, then this functionality is for you.

The functionality does nothing, it only allows you not to use "force" for most of the operations within the credit limit. You should write the logic for collecting interest, notifications on debts, etc.

By default, the credit limit is zero.

An example of working with a credit limit:

php
/**
+ * @var \Bavix\Wallet\Interfaces\Customer $customer
+ * @var \Bavix\Wallet\Models\Wallet $wallet
+ * @var \Bavix\Wallet\Interfaces\ProductInterface $product
+ */
+$wallet = $customer->wallet; // get default wallet
+$wallet->meta['credit'] = 10000; // credit limit
+$wallet->save(); // update credit limit
+
+$wallet->balanceInt; // 0
+$product->getAmountProduct($customer); // 500
+
+$wallet->pay($product); // success
+$wallet->balanceInt; // -500

For multi-wallets when creating:

php
/** @var \Bavix\Wallet\Traits\HasWallets $user */
+$wallet = $user->createWallet([
+    'name' => 'My Wallet',
+    'meta' => ['credit' => 500],
+]);

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/single/deposit.html b/docs/.vitepress/dist/guide/single/deposit.html new file mode 100644 index 000000000..a2debf0be --- /dev/null +++ b/docs/.vitepress/dist/guide/single/deposit.html @@ -0,0 +1,35 @@ + + + + + + Deposit | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Deposit

A deposit is a sum of money which is part of the full price of something, and which you pay when you agree to buy it.

In this case, the Deposit is the replenishment of the wallet.


User Model

It is necessary to expand the model that will have the wallet. This is done in two stages:

  • Add Wallet interface;
  • Add the HasWallet trait;

Let's get started.

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet;
+}

The model is prepared to work with a wallet.

Make a Deposit

Find user:

php
$user = User::first();

As the user uses HasWallet, he will have balance property. Check the user's balance.

php
$user->balance; // 0
+$user->balanceInt; // 0

The balance is zero, which is what we expected. Put it on his 10 cents account.

php
$user->deposit(10); 
+$user->balance; // 10
+$user->balanceInt; // 10

Wow! The balance is 10 cents, the money is credited.

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/single/exchange.html b/docs/.vitepress/dist/guide/single/exchange.html new file mode 100644 index 000000000..10530f410 --- /dev/null +++ b/docs/.vitepress/dist/guide/single/exchange.html @@ -0,0 +1,79 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Exchange

Everyone’s tasks are different and with the help of this functionality you can add exchange rates to your wallets.

The wallet currency is set via meta. Example:

php
$user->createWallet([
+    'name' => 'My USD Wallet',
+    'meta' => ['currency' => 'USD'],
+]);

Service for working with currencies you need to write yourself or use library.

Service for working with currency

We will write a simple service. We will take the data from the array, and not from the database.

php
use Bavix\Wallet\Internal\Service\MathServiceInterface;
+use Bavix\Wallet\Services\ExchangeServiceInterface;
+
+class MyExchangeService implements ExchangeServiceInterface
+{
+    private array $rates = [
+        'USD' => [
+            'RUB' => 67.61,
+        ],
+    ];
+
+    private MathServiceInterface $mathService;
+
+    public function __construct(MathServiceInterface $mathService)
+    {
+        $this->mathService = $mathService;
+
+        foreach ($this->rates as $from => $rates) {
+            foreach ($rates as $to => $rate) {
+                if (empty($this->rates[$to][$from])) {
+                    $this->rates[$to][$from] = $this->mathService->div(1, $rate);
+                }
+            }
+        }
+    }
+
+    /** @param float|int|string $amount */
+    public function convertTo(string $fromCurrency, string $toCurrency, $amount): string
+    {
+        return $this->mathService->mul($amount, $this->rates[$fromCurrency][$toCurrency] ?? 1);
+    }
+}

Service Registration

The service you wrote must be registered, this is done in the file config/wallet.php.

php
return [
+    // ...
+    'services' => [
+        'exchange' => MyExchangeService::class,
+        // ...
+    ],
+    // ...
+];

Exchange process

Create two wallets.

php
$usd = $user->createWallet([
+    'name' => 'My Dollars',
+    'meta' => ['currency' => 'USD'],
+]);
+
+$rub = $user->createWallet([
+    'name' => 'My Ruble',
+    'meta' => ['currency' => 'RUB'],
+]);

We replenish the ruble wallet with 100 rubles.

php
$rub->deposit(10000);

We will exchange rubles into dollars.

php
$transfer = $rub->exchange($usd, 10000);
+$rub->balance; // 0
+$usd->balance; // 147, это $1.47

Unfortunately, the world is not perfect. You will not get back your 100 rubles.

php
$transfer = $usd->exchange($rub, $usd->balance);
+$usd->balance; 0
+$rub->balance; 9938

Due to conversion and mathematical rounding, you lost 62 kopecks. You have 99 rubles 38 kopecks left.


It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/single/refresh.html b/docs/.vitepress/dist/guide/single/refresh.html new file mode 100644 index 000000000..bc195bb9e --- /dev/null +++ b/docs/.vitepress/dist/guide/single/refresh.html @@ -0,0 +1,40 @@ + + + + + + To refresh the balance | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

To refresh the balance

There are situations when you create a lot of unconfirmed operations, and then abruptly confirm everything. In this case, the user's balance will not change. You must be forced to refresh the balance.


User Model

It is necessary to expand the model that will have the wallet. This is done in two stages:

  • Add Wallet interface;
  • Add the HasWallet trait;

Let's get started.

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet;
+}

The model is prepared to work with a wallet.

Get the current balance for your wallet

Let's say the user's balance

php
$user->id; // 5
+$user->balance; // 27

And he has unconfirmed transactions. Confirm all transactions.

sql
update transactions 
+set confirmed=1 
+where confirmed=0 and 
+      payable_type='App\Models\User' and 
+      payable_id=5;
+-- 212 rows affected in 54 ms

Refresh the balance.

php
$user->balance; // 27
+$user->wallet->refreshBalance();
+$user->balance; // 42

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/single/taxing.html b/docs/.vitepress/dist/guide/single/taxing.html new file mode 100644 index 000000000..8e3f4817d --- /dev/null +++ b/docs/.vitepress/dist/guide/single/taxing.html @@ -0,0 +1,107 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

User Model

Add the CanPay trait and Customer interface to your User model.

The trait CanPay already inherits HasWallet, reuse will cause an error.

php
use Bavix\Wallet\Traits\CanPay;
+use Bavix\Wallet\Interfaces\Customer;
+
+class User extends Model implements Customer
+{
+    use CanPay;
+}

Item Model

Add the HasWallet trait and ProductInterface (or ProductLimitedInterface) interface to Item model.

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Customer;
+use Bavix\Wallet\Interfaces\Taxable;
+use Bavix\Wallet\Interfaces\ProductLimitedInterface;
+
+class Item extends Model implements ProductLimitedInterface, Taxable
+{
+    use HasWallet;
+
+    public function canBuy(Customer $customer, int $quantity = 1, bool $force = false): bool
+    {
+        /**
+         * If the service can be purchased once, then
+         *  return !$customer->paid($this);
+         */
+        return true; 
+    }
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+
+    public function getFeePercent()
+    {
+        return 0.03; // 3%    
+    }
+}

Tax process

Find the user and check the balance.

php
$user = User::first();
+$user->balance; // 103

Find the goods and check the cost.

php
$item = Item::first();
+$item->getAmountProduct($user); // 100

The user can buy a product, buy...

php
$user->pay($item); // success, 100 (product) + 3 (fee) = 103
+$user->balance; // 0

Minimal Taxing

Add interface MinimalTaxable (or MaximalTaxable) in class Item.

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Customer;
+use Bavix\Wallet\Interfaces\MinimalTaxable;
+use Bavix\Wallet\Interfaces\ProductInterface;
+
+class Item extends Model implements ProductInterface, MinimalTaxable
+{
+    use HasWallet;
+
+    public function getAmountProduct(Customer $customer): int|string
+    {
+        return 100;
+    }
+
+    public function getMetaProduct(): ?array
+    {
+        return [
+            'title' => $this->title, 
+            'description' => 'Purchase of Product #' . $this->id,
+        ];
+    }
+
+    public function getFeePercent()
+    {
+        return 0.03; // 3%    
+    }
+    
+    public function getMinimalFee()
+    {
+        return 5; // 3%, minimum 5    
+    }
+}

Successfully

Find the user and check the balance.

php
$user = User::first();
+$user->balance; // 105

Find the goods and check the cost.

php
$item = Item::first();
+$item->getAmountProduct($user); // 100

The user can buy a product, buy...

php
$user->pay($item); // success, 100 (product) + 5 (minimal fee) = 105
+$user->balance; // 0

Failed

Find the user and check the balance.

php
$user = User::first();
+$user->balance; // 103

Find the goods and check the cost.

php
$item = Item::first();
+$item->getAmountProduct($user); // 100

The user can buy a product, buy...

php
$user->safePay($item); // failed, 100 (product) + 5 (minimal fee) = 105
+$user->balance; // 103

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/single/transfer.html b/docs/.vitepress/dist/guide/single/transfer.html new file mode 100644 index 000000000..59dd1e642 --- /dev/null +++ b/docs/.vitepress/dist/guide/single/transfer.html @@ -0,0 +1,57 @@ + + + + + + Transfer | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Transfer

Transfer in our system are two well-known Deposit and Withdraw operations that are performed in one transaction.

The transfer takes place between wallets.


User Model

It is necessary to expand the model that will have the wallet. This is done in two stages:

  • Add Wallet interface;
  • Add the HasWallet trait;

Let's get started.

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet;
+}

The model is prepared to work with a wallet.

Example contract

php
$transfer = $user1->transfer(
+    $user2,
+    511,
+    new Extra(
+        deposit: [
+            'type' => 'extra-deposit',
+        ],
+        withdraw: new Option(
+            [
+                'type' => 'extra-withdraw',
+            ],
+            false // confirmed
+        ),
+        extra: [
+            'msg' => 'hello world',
+        ],
+    )
+);

Make a Transfer

Find user:

php
$first = User::first(); 
+$last = User::orderBy('id', 'desc')->first(); // last user
+$first->getKey() !== $last->getKey(); // true

As the user uses HasWallet, he will have balance property. Check the user's balance.

php
$first->balance; // 100
+$last->balance; // 0

The transfer will be from the first user to the second.

php
$first->transfer($last, 5); 
+$first->balance; // 95
+$last->balance; // 5

It's simple!

Force Transfer

Check the user's balance.

php
$first->balance; // 100
+$last->balance; // 0

The transfer will be from the first user to the second.

php
$first->forceTransfer($last, 500); 
+$first->balance; // -400
+$last->balance; // 500

It's simple!

+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/guide/single/withdraw.html b/docs/.vitepress/dist/guide/single/withdraw.html new file mode 100644 index 000000000..ef6728342 --- /dev/null +++ b/docs/.vitepress/dist/guide/single/withdraw.html @@ -0,0 +1,39 @@ + + + + + + Withdraw | Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Withdraw

When there is enough money in the account, you can transfer/withdraw it or buy something in the system.

Since the currency is virtual, you can buy any services on your website. For example, priority in search results.


User Model

It is necessary to expand the model that will have the wallet. This is done in two stages:

  • Add Wallet interface;
  • Add the HasWallet trait;

Let's get started.

php
use Bavix\Wallet\Traits\HasWallet;
+use Bavix\Wallet\Interfaces\Wallet;
+
+class User extends Model implements Wallet
+{
+    use HasWallet;
+}

The model is prepared to work with a wallet.

Make a Withdraw

Find user:

php
$user = User::first();

As the user uses HasWallet, he will have balance property. Check the user's balance.

php
$user->balance; // 100
+$user->balanceInt; // 100

The balance is not empty, so you can withdraw funds.

php
$user->withdraw(10); 
+$user->balance; // 90
+$user->balanceInt; // 90

It's simple!

Force Withdraw

Forced withdrawal is necessary for those cases when the user has no funds. For example, a fine for spam.

php
$user->balance; // 100
+$user->balanceInt; // 100
+$user->forceWithdraw(101);
+$user->balance; // -1
+$user->balanceInt; // -1

And what will happen if the money is not enough?

There can be two situations:

  • The user's balance is zero, then we get an error Bavix\Wallet\Exceptions\BalanceIsEmpty
  • If the balance is greater than zero, but it is not enough Bavix\Wallet\Exceptions\InsufficientFunds
+ + + + \ No newline at end of file diff --git a/docs/.vitepress/dist/hashmap.json b/docs/.vitepress/dist/hashmap.json new file mode 100644 index 000000000..404c1e071 --- /dev/null +++ b/docs/.vitepress/dist/hashmap.json @@ -0,0 +1 @@ +{"include_models_user_simple_float.md":"BHKtZpXH","guide_events_transaction-created-event.md":"Duh3XbkM","guide_db_transaction.md":"CZUiznZz","include_eager_loading.md":"DEcAtRed","guide_db_race-condition.md":"Bk_sun3W","guide_events_wallet-created-event.md":"CK_r0lzx","guide_events_customize.md":"9V6b1Caz","include_composer.md":"Bahh6vzC","guide_fractional_deposit.md":"BWDu9S8t","guide_fractional_withdraw.md":"e7s23Eiv","guide_helpers_formatter.md":"DgY9iwej","guide_fractional_transfer.md":"B94kgHWa","guide_introduction_configuration.md":"BkIk8Nu_","guide_multi_transfer.md":"CmmGlTvH","guide_high-performance_batch-transactions.md":"BEEhiD5t","include_models_user_simple.md":"DWW_tdne","guide_additions_laravel-wallet-swap.md":"CAXVUHnE","guide_events_balance-updated-event.md":"CBcnawJm","guide_db_atomic-service.md":"csSpqsjE","guide_introduction_index.md":"OLZq5yD4","guide_cqrs_create-wallet.md":"BIpY-lGh","guide_additions_laravel-wallet-uuid.md":"DIFSzon4","guide_multi_new-wallet.md":"C77SSs4v","guide_purchases_receiving.md":"DgdGYpnV","guide_multi_transaction-filter.md":"BJcsCpfk","guide_high-performance_batch-transfers.md":"CDYVA106","guide_purchases_payment-free.md":"BkfY0cCS","guide_purchases_refund.md":"Cvi1Vscy","guide_introduction_basic-usage.md":"8BCaXADC","guide_purchases_cart.md":"9T34pvFh","guide_introduction_upgrade.md":"DAWn6XRt","guide_single_confirm.md":"e4AeBLuv","guide_introduction_installation.md":"cd8KQDEh","guide_purchases_payment.md":"CqJ47XjU","guide_single_deposit.md":"DWjBMxNa","guide_single_credit-limits.md":"m6HNPX38","guide_single_cancel.md":"CNo1Ld3C","guide_single_transfer.md":"BGFEmOXn","guide_single_refresh.md":"RmgocjVW","guide_purchases_gift.md":"BL1g8j1n","index.md":"CxOcTylj","guide_single_exchange.md":"DHAqruLi","guide_single_withdraw.md":"Cqspz8GJ","guide_single_taxing.md":"t-q6--Yk"} diff --git a/docs/.vitepress/dist/index.html b/docs/.vitepress/dist/index.html new file mode 100644 index 000000000..eb6dcc161 --- /dev/null +++ b/docs/.vitepress/dist/index.html @@ -0,0 +1,26 @@ + + + + + + Laravel Wallet + + + + + + + + + + + + + + + +
Skip to content

Laravel Wallet

It's simple!

Easy work with virtual wallet

Laravel Wallet
+ + + + \ No newline at end of file diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 6ce6bd775..000000000 --- a/docs/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# Introduction - ---- - -![Laravel Wallet](https://user-images.githubusercontent.com/5111255/48687709-a7c2fa00-ebd3-11e8-8714-c4f3efe93f02.png) - -[![Maintainability](https://api.codeclimate.com/v1/badges/588400f5f40cbbf3a8ab/maintainability)](https://codeclimate.com/github/bavix/laravel-wallet/maintainability) -[![Test Coverage](https://api.codeclimate.com/v1/badges/588400f5f40cbbf3a8ab/test_coverage)](https://codeclimate.com/github/bavix/laravel-wallet/test_coverage) -[![Financial Contributors on Open Collective](https://opencollective.com/laravel-wallet/all/badge.svg?label=financial+contributors)](https://opencollective.com/laravel-wallet) [![Mutation testing badge](https://badge.stryker-mutator.io/github.com/bavix/laravel-wallet/master)](https://packagist.org/packages/bavix/laravel-wallet) - -[![Package Rank](https://phppackages.org/p/bavix/laravel-wallet/badge/rank.svg)](https://packagist.org/packages/bavix/laravel-wallet) -[![Latest Stable Version](https://poser.pugx.org/bavix/laravel-wallet/v/stable)](https://packagist.org/packages/bavix/laravel-wallet) -[![Latest Unstable Version](https://poser.pugx.org/bavix/laravel-wallet/v/unstable)](https://packagist.org/packages/bavix/laravel-wallet) -[![License](https://poser.pugx.org/bavix/laravel-wallet/license)](https://packagist.org/packages/bavix/laravel-wallet) -[![composer.lock](https://poser.pugx.org/bavix/laravel-wallet/composerlock)](https://packagist.org/packages/bavix/laravel-wallet) - -[![Sparkline](https://stars.medv.io/bavix/laravel-wallet.svg)](https://stars.medv.io/bavix/laravel-wallet) - -`laravel-wallet` - Easy work with virtual wallet. - -## Support - -Please ask questions on the [Github issues page](https://github.com/bavix/laravel-wallet/issues). - ---- -Supported by - -[![Supported by JetBrains](https://cdn.rawgit.com/bavix/development-through/46475b4b/jetbrains.svg)](https://www.jetbrains.com/) diff --git a/docs/_sidebar.md b/docs/_sidebar.md deleted file mode 100644 index c9589eef5..000000000 --- a/docs/_sidebar.md +++ /dev/null @@ -1,69 +0,0 @@ -- Getting started - - - [Introduction](README) - - [Installation](installation) - - [Configuration](configuration) - - [Basic Usage](basic-usage) - - [Upgrade Guide](upgrade-guide) - -- Single Wallet - - - [Deposit](deposit) - - [Withdraw](withdraw) - - [Transfer](transfer) - - [Refresh balance](refresh) - - [Confirm](confirm) - - [Exchange](exchange) - - [Withdraw taxing](taxing) - - [Credit Limits](credit-limits) - -- Multi Wallets - - - [New Wallet](new-wallet) - - [Transfer](wallet-transfer) - - [Transaction Filter](transaction-filter) - -- Fractional Wallet - - - [Deposit](deposit-float) - - [Withdraw](withdraw-float) - - [Transfer](transfer-float) - -- High performance api handles - - - [Batch transactions](batch-transactions) - - [Batch transfers](batch-transfers) - -- Purchases - - - [Payment](payment) - - [Payment to a custom wallet](payment-custom-wallet) - - [Payment Free](pay-free) - - [Refund](refund) - - [Gift](gift) - - [Cart](cart) - -- Transactions - - - [Transaction](transaction) - - [Race condition](race-condition) - - [Atomic Service](atomic-service) - -- Additions - - - [Wallet Swap](laravel-wallet-swap) - - [Wallet UUID](laravel-wallet-uuid) - -- Helpers - - [Formatter](formatter) - -- Events - - - [BalanceUpdatedEvent](balance-updated-event) - - [WalletCreatedEvent](wallet-created-event) - - [TransactionCreatedEvent](transaction-created-event) - - [Event Customize](event-customize) - -- CQRS - - - [Create Wallet](command-create-wallet) diff --git a/docs/dist/bundle.css b/docs/dist/bundle.css deleted file mode 100644 index 9730d6ed4..000000000 --- a/docs/dist/bundle.css +++ /dev/null @@ -1,2 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Roboto+Mono|Source+Sans+Pro:300,400,600); -*{-webkit-font-smoothing:antialiased;-webkit-overflow-scrolling:touch;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-text-size-adjust:none;-webkit-touch-callout:none;box-sizing:border-box}body:not(.ready){overflow:hidden}body:not(.ready) .app-nav,body:not(.ready)>nav,body:not(.ready) [data-cloak]{display:none}div#app{font-size:30px;font-weight:lighter;margin:40vh auto;text-align:center}div#app:empty:before{content:"Loading..."}img.emoji{height:1.2em}img.emoji,span.emoji{vertical-align:middle}span.emoji{font-family:Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1.2em}.progress{background-color:#42b983;background-color:var(--theme-color,#42b983);height:2px;left:0;position:fixed;right:0;top:0;transition:width .2s,opacity .4s;width:0;z-index:999999}.search .search-keyword,.search a:hover{color:#42b983;color:var(--theme-color,#42b983)}.search .search-keyword{font-style:normal;font-weight:700}body,html{height:100%}body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;color:#34495e;font-family:Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:15px;letter-spacing:0;margin:0;overflow-x:hidden}img{max-width:100%}a[disabled]{cursor:not-allowed;opacity:.6}kbd{border:1px solid #ccc;border-radius:3px;display:inline-block;font-size:12px!important;line-height:12px;margin-bottom:3px;padding:3px 5px;vertical-align:middle}li input[type=checkbox]{margin:0 .2em .25em 0;vertical-align:middle}.app-nav{margin:25px 60px 0 0;position:absolute;right:0;text-align:right;z-index:10}.app-nav.no-badge{margin-right:25px}.app-nav p{margin:0}.app-nav>a{margin:0 1rem;padding:5px 0}.app-nav li,.app-nav ul{display:inline-block;list-style:none;margin:0}.app-nav a{color:inherit;font-size:16px;text-decoration:none;transition:color .3s}.app-nav a.active,.app-nav a:hover{color:#42b983;color:var(--theme-color,#42b983)}.app-nav a.active{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color,#42b983)}.app-nav li{display:inline-block;margin:0 1rem;padding:5px 0;position:relative;cursor:pointer}.app-nav li ul{background-color:#fff;border:1px solid;border-color:#ddd #ddd #ccc;border-radius:4px;box-sizing:border-box;display:none;max-height:calc(100vh - 61px);overflow-y:auto;padding:10px 0;position:absolute;right:-15px;text-align:left;top:100%;white-space:nowrap}.app-nav li ul li{display:block;font-size:14px;line-height:1rem;margin:8px 14px;white-space:nowrap}.app-nav li ul a{display:block;font-size:inherit;margin:0;padding:0}.app-nav li ul a.active{border-bottom:0}.app-nav li:hover ul{display:block}.github-corner{border-bottom:0;position:fixed;right:0;text-decoration:none;top:0;z-index:1}.github-corner:hover .octo-arm{animation:octocat-wave .56s ease-in-out}.github-corner svg{color:#fff;fill:#42b983;fill:var(--theme-color,#42b983);height:80px;width:80px}main{display:block;position:relative;width:100vw;height:100%;z-index:0}main.hidden{display:none}.anchor{display:inline-block;text-decoration:none;transition:all .3s}.anchor span{color:#34495e}.anchor:hover{text-decoration:underline}.sidebar{border-right:1px solid rgba(0,0,0,.07);overflow-y:auto;padding:40px 0 0;position:absolute;top:0;bottom:0;left:0;transition:transform .25s ease-out;width:300px;z-index:20}.sidebar>h1{margin:0 auto 1rem;font-size:1.5rem;font-weight:300;text-align:center}.sidebar>h1 a{color:inherit;text-decoration:none}.sidebar>h1 .app-nav{display:block;position:static}.sidebar .sidebar-nav{line-height:2em;padding-bottom:40px}.sidebar li.collapse .app-sub-sidebar{display:none}.sidebar ul{margin:0 0 0 15px;padding:0}.sidebar li>p{font-weight:700;margin:0}.sidebar ul,.sidebar ul li{list-style:none}.sidebar ul li a{border-bottom:none;display:block}.sidebar ul li ul{padding-left:20px}.sidebar::-webkit-scrollbar{width:4px}.sidebar::-webkit-scrollbar-thumb{background:transparent;border-radius:4px}.sidebar:hover::-webkit-scrollbar-thumb{background:hsla(0,0%,53.3%,.4)}.sidebar:hover::-webkit-scrollbar-track{background:hsla(0,0%,53.3%,.1)}.sidebar-toggle{background-color:transparent;background-color:hsla(0,0%,100%,.8);border:0;outline:none;padding:10px;position:absolute;bottom:0;left:0;text-align:center;transition:opacity .3s;width:284px;z-index:30;cursor:pointer}.sidebar-toggle:hover .sidebar-toggle-button{opacity:.4}.sidebar-toggle span{background-color:#42b983;background-color:var(--theme-color,#42b983);display:block;margin-bottom:4px;width:16px;height:2px}body.sticky .sidebar,body.sticky .sidebar-toggle{position:fixed}.content{padding-top:60px;position:absolute;top:0;right:0;bottom:0;left:300px;transition:left .25s ease}.markdown-section{margin:0 auto;max-width:80%;padding:30px 15px 40px;position:relative}.markdown-section>*{box-sizing:border-box;font-size:inherit}.markdown-section>:first-child{margin-top:0!important}.markdown-section hr{border:none;border-bottom:1px solid #eee;margin:2em 0}.markdown-section iframe{border:1px solid #eee;width:1px;min-width:100%}.markdown-section table{border-collapse:collapse;border-spacing:0;display:block;margin-bottom:1rem;overflow:auto;width:100%}.markdown-section th{font-weight:700}.markdown-section td,.markdown-section th{border:1px solid #ddd;padding:6px 13px}.markdown-section tr{border-top:1px solid #ccc}.markdown-section p.tip,.markdown-section tr:nth-child(2n){background-color:#f8f8f8}.markdown-section p.tip{border-bottom-right-radius:2px;border-left:4px solid #f66;border-top-right-radius:2px;margin:2em 0;padding:12px 24px 12px 30px;position:relative}.markdown-section p.tip:before{background-color:#f66;border-radius:100%;color:#fff;content:"!";font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px;font-weight:700;left:-12px;line-height:20px;position:absolute;height:20px;width:20px;text-align:center;top:14px}.markdown-section p.tip code{background-color:#efefef}.markdown-section p.tip em{color:#34495e}.markdown-section p.warn{background:rgba(66,185,131,.1);border-radius:2px;padding:1rem}.markdown-section ul.task-list>li{list-style-type:none}body.close .sidebar{transform:translateX(-300px)}body.close .sidebar-toggle{width:auto}body.close .content{left:0}@media print{.app-nav,.github-corner,.sidebar,.sidebar-toggle{display:none}}@media screen and (max-width:768px){.github-corner,.sidebar,.sidebar-toggle{position:fixed}.app-nav{margin-top:16px}.app-nav li ul{top:30px}main{height:auto;min-height:100vh;overflow-x:hidden}.sidebar{left:-300px;transition:transform .25s ease-out}.content{left:0;max-width:100vw;position:static;padding-top:20px;transition:transform .25s ease}.app-nav,.github-corner{transition:transform .25s ease-out}.sidebar-toggle{background-color:transparent;width:auto;padding:30px 30px 10px 10px}body.close .sidebar{transform:translateX(300px)}body.close .sidebar-toggle{background-color:hsla(0,0%,100%,.8);transition:background-color 1s;width:284px;padding:10px}body.close .content{transform:translateX(300px)}body.close .app-nav,body.close .github-corner{display:none}.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave .56s ease-in-out}}@keyframes octocat-wave{0%,to{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}section.cover{position:relative;align-items:center;background-position:50%;background-repeat:no-repeat;background-size:cover;min-height:100vh;width:100%;display:none}section.cover.show{display:flex}section.cover.has-mask .mask{background-color:#fff;opacity:.8;position:absolute;top:0;bottom:0;width:100%}section.cover .cover-main{flex:1;margin:0 16px;text-align:center;position:relative}section.cover a{color:inherit}section.cover a,section.cover a:hover{text-decoration:none}section.cover p{line-height:1.5rem;margin:1em 0}section.cover h1{color:inherit;font-size:2.5rem;font-weight:300;margin:.625rem 0 2.5rem;position:relative;text-align:center}section.cover h1 a{display:block}section.cover h1 small{bottom:-.4375rem;font-size:1rem;position:absolute}section.cover blockquote{font-size:1.5rem;text-align:center}section.cover ul{line-height:1.8;list-style-type:none;margin:1em auto;max-width:500px;padding:0}section.cover .cover-main>p:last-child a{border-radius:2rem;border:1px solid #42b983;border-color:var(--theme-color,#42b983);box-sizing:border-box;color:#42b983;color:var(--theme-color,#42b983);display:inline-block;font-size:1.05rem;letter-spacing:.1rem;margin:.5rem 1rem;padding:.75em 2rem;text-decoration:none;transition:all .15s ease}section.cover .cover-main>p:last-child a:last-child{background-color:#42b983;background-color:var(--theme-color,#42b983);color:#fff}section.cover .cover-main>p:last-child a:last-child:hover{color:inherit;opacity:.8}section.cover .cover-main>p:last-child a:hover{color:inherit}section.cover blockquote>p>a{border-bottom:2px solid #42b983;border-bottom:2px solid var(--theme-color,#42b983);transition:color .3s}section.cover blockquote>p>a:hover{color:#42b983;color:var(--theme-color,#42b983)}.sidebar,body{background-color:#fff}.sidebar{color:#364149}.sidebar li{margin:6px 0}.sidebar ul li a{color:#505d6b;font-size:14px;font-weight:400;overflow:hidden;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.sidebar ul li a:hover{text-decoration:underline}.sidebar ul li ul{padding:0}.sidebar ul li.active>a{border-right:2px solid;color:#42b983;color:var(--theme-color,#42b983);font-weight:600}.app-sub-sidebar li:before{content:"-";padding-right:4px;float:left}.markdown-section h1,.markdown-section h2,.markdown-section h3,.markdown-section h4,.markdown-section strong{color:#2c3e50;font-weight:600}.markdown-section a{color:#42b983;color:var(--theme-color,#42b983);font-weight:600}.markdown-section h1{font-size:2rem;margin:0 0 1rem}.markdown-section h2{font-size:1.75rem;margin:45px 0 .8rem}.markdown-section h3{font-size:1.5rem;margin:40px 0 .6rem}.markdown-section h4{font-size:1.25rem}.markdown-section h5{font-size:1rem}.markdown-section h6{color:#777;font-size:1rem}.markdown-section figure,.markdown-section p{margin:1.2em 0}.markdown-section ol,.markdown-section p,.markdown-section ul{line-height:1.6rem;word-spacing:.05rem}.markdown-section ol,.markdown-section ul{padding-left:1.5rem}.markdown-section blockquote{border-left:4px solid #42b983;border-left:4px solid var(--theme-color,#42b983);color:#858585;margin:2em 0;padding-left:20px}.markdown-section blockquote p{font-weight:600;margin-left:0}.markdown-section iframe{margin:1em 0}.markdown-section em{color:#7f8c8d}.markdown-section code,.markdown-section output:after,.markdown-section pre{font-family:Roboto Mono,Monaco,courier,monospace}.markdown-section code,.markdown-section pre{background-color:#f8f8f8}.markdown-section output,.markdown-section pre{margin:1.2em 0;position:relative}.markdown-section output,.markdown-section pre>code{border-radius:2px;display:block}.markdown-section output:after,.markdown-section pre>code{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial}.markdown-section code{border-radius:2px;color:#e96900;margin:0 2px;padding:3px 5px;white-space:pre-wrap}.markdown-section>:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) code{font-size:.8rem}.markdown-section pre{padding:0 1.4rem;line-height:1.5rem;overflow:auto;word-wrap:normal}.markdown-section pre>code{color:#525252;font-size:.8rem;padding:2.2em 5px;line-height:inherit;margin:0 2px;max-width:inherit;overflow:inherit;white-space:inherit}.markdown-section output{padding:1.7rem 1.4rem;border:1px dotted #ccc}.markdown-section output>:first-child{margin-top:0}.markdown-section output>:last-child{margin-bottom:0}.markdown-section code:after,.markdown-section code:before,.markdown-section output:after,.markdown-section output:before{letter-spacing:.05rem}.markdown-section output:after,.markdown-section pre:after{color:#ccc;font-size:.6rem;font-weight:600;height:15px;line-height:15px;padding:5px 10px 0;position:absolute;right:0;text-align:right;top:0;content:attr(data-lang)}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8e908c}.token.namespace{opacity:.7}.token.boolean,.token.number{color:#c76b29}.token.punctuation{color:#525252}.token.property{color:#c08b30}.token.tag{color:#2973b7}.token.string{color:#42b983;color:var(--theme-color,#42b983)}.token.selector{color:#6679cc}.token.attr-name{color:#2973b7}.language-css .token.string,.style .token.string,.token.entity,.token.url{color:#22a2c9}.token.attr-value,.token.control,.token.directive,.token.unit{color:#42b983;color:var(--theme-color,#42b983)}.token.function,.token.keyword{color:#e96900}.token.atrule,.token.regex,.token.statement{color:#22a2c9}.token.placeholder,.token.variable{color:#3d8fd1}.token.deleted{text-decoration:line-through}.token.inserted{border-bottom:1px dotted #202746;text-decoration:none}.token.italic{font-style:italic}.token.bold,.token.important{font-weight:700}.token.important{color:#c94922}.token.entity{cursor:help}code .token{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;min-height:1.5rem;position:relative;left:auto} diff --git a/docs/dist/bundle.js b/docs/dist/bundle.js deleted file mode 100644 index 1e2444caf..000000000 --- a/docs/dist/bundle.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see bundle.js.LICENSE.txt */ -(()=>{var n={929:()=>{function n(){void 0===window.dataLayer&&function(n){const e=document.createElement("script");e.async=!0,e.src="https://www.googletagmanager.com/gtag/js?id="+n,document.body.appendChild(e),window.dataLayer=window.dataLayer||[],window.gtag=window.gtag||function(){dataLayer.push(arguments)},window.gtag("js",new Date),window.gtag("config",n)}($docsify.ga),window.gtag("event","page_view",{page_title:document.title,page_location:location.href,page_path:location.pathname})}$docsify.plugins=[].concat((function(e){$docsify.ga?e.beforeEach(n):console.error("[Docsify] ga is required.")}),$docsify.plugins)},723:(n,e,i)=>{!function(){function n(n){var e=Object.create(null);return function(i){var o=a(i)?i:JSON.stringify(i);return e[o]||(e[o]=n(i))}}var e=n((function(n){return n.replace(/([A-Z])/g,(function(n){return"-"+n.toLowerCase()}))})),o=Object.prototype.hasOwnProperty,c=Object.assign||function(n){for(var e=arguments,i=1;i0&&e[1].toLowerCase()!==location.protocol||"string"==typeof e[2]&&e[2].length>0&&e[2].replace(new RegExp(":("+{"http:":80,"https:":443}[location.protocol]+")?$"),"")!==location.host||!!/^\/\\/.test(n)}var r=document.body.clientWidth<=600,d=window.history&&window.history.pushState&&window.history.replaceState&&!navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/),p={};function g(n,e){if(void 0===e&&(e=!1),"string"==typeof n){if(void 0!==window.Vue)return _(n);n=e?_(n):p[n]||(p[n]=_(n))}return n}var s=document,l=s.body,v=s.head;function _(n,e){return e?n.querySelector(e):s.querySelector(n)}function h(n,e){return[].slice.call(e?n.querySelectorAll(e):s.querySelectorAll(n))}function m(n,e){return n=s.createElement(n),e&&(n.innerHTML=e),n}function b(n,e){return n.appendChild(e)}function w(n,e){return n.insertBefore(e,n.children[0])}function k(n,e,i){f(e)?window.addEventListener(n,e):n.addEventListener(e,i)}function y(n,e,i){f(e)?window.removeEventListener(n,e):n.removeEventListener(e,i)}function x(n,e,i){n&&n.classList[i?e:"toggle"](i||e)}function S(n,e){void 0===e&&(e=document);var i=e.readyState;if("complete"===i||"interactive"===i)return setTimeout(n,0);e.addEventListener("DOMContentLoaded",n)}var A=Object.freeze({__proto__:null,getNode:g,$:s,body:l,head:v,find:_,findAll:h,create:m,appendTo:b,before:w,on:k,off:y,toggleClass:x,style:function(n){b(v,m("style",n))},documentReady:S});function z(n,e){return-1!==n.indexOf(e,n.length-e.length)}var E=decodeURIComponent,$=encodeURIComponent;function T(n){var e={};return(n=n.trim().replace(/^(\?|#|&)/,""))?(n.split("&").forEach((function(n){var i=n.replace(/\+/g," ").split("=");e[i[0]]=i[1]&&E(i[1])})),e):e}function O(n,e){void 0===e&&(e=[]);var i=[];for(var o in n)e.indexOf(o)>-1||i.push(n[o]?($(o)+"="+$(n[o])).toLowerCase():$(o));return i.length?"?"+i.join("&"):""}var R=n((function(n){return/(:|(\/{2}))/g.test(n)})),j=n((function(n){return n.split(/[?#]/)[0]})),L=n((function(n){if(/\/$/g.test(n))return n;var e=n.match(/(\S*\/)[^/]+$/);return e?e[1]:""})),C=n((function(n){return n.replace(/^\/+/,"/").replace(/([^:])\/{2,}/g,"$1/")})),q=n((function(n){for(var e=n.replace(/^\//,"").split("/"),i=[],o=0,c=e.length;o=0?e:0)+"#"+n)}M.prototype.getBasePath=function(){return this.config.basePath},M.prototype.getFile=function(n,e){void 0===n&&(n=this.getCurrentPath());var i=this.config,o=this.getBasePath(),c="string"==typeof i.ext?i.ext:".md";return n=function(n,e){return new RegExp("\\.("+e.replace(/^\./,"")+"|html)$","g").test(n)?n:/\/$/g.test(n)?n+"README"+e:""+n+e}(n=i.alias?D(n,i.alias):n,c),n=n==="/README"+c&&i.homepage||n,n=R(n)?n:P(o,n),e&&(n=n.replace(new RegExp("^"+o),"")),n},M.prototype.onchange=function(n){void 0===n&&(n=t),n()},M.prototype.getCurrentPath=function(){},M.prototype.normalize=function(){},M.prototype.parse=function(){},M.prototype.toURL=function(n,e,i){var o=i&&"#"===n[0],a=this.parse(I(n));if(a.query=c({},a.query,e),n=(n=a.path+O(a.query)).replace(/\.md(\?)|\.md$/,"$1"),o){var t=i.indexOf("?");n=(t>0?i.substring(0,t):i)+n}if(this.config.relativePath&&0!==n.indexOf("/")){var f=i.substring(0,i.lastIndexOf("/")+1);return C(q(f+n))}return C("/"+n)};var U,B,G=function(n){function e(e){n.call(this,e),this.mode="hash"}return n&&(e.__proto__=n),e.prototype=Object.create(n&&n.prototype),e.prototype.constructor=e,e.prototype.getBasePath=function(){var n=window.location.pathname||"",e=this.config.basePath,i=z(n,".html")?n+"#/"+e:n+"/"+e;return/^(\/|https?:)/g.test(e)?e:C(i)},e.prototype.getCurrentPath=function(){var n=location.href,e=n.indexOf("#");return-1===e?"":n.slice(e+1)},e.prototype.onchange=function(n){void 0===n&&(n=t);var e=!1;k("click",(function(n){var i="A"===n.target.tagName?n.target:n.target.parentNode;i&&"A"===i.tagName&&!u(i.href)&&(e=!0)})),k("hashchange",(function(i){var o=e?"navigate":"history";e=!1,n({event:i,source:o})}))},e.prototype.normalize=function(){var n=this.getCurrentPath();if("/"===(n=I(n)).charAt(0))return H(n);H("/"+n)},e.prototype.parse=function(n){void 0===n&&(n=location.href);var e="",i=n.indexOf("#");i>=0&&(n=n.slice(i+1));var o=n.indexOf("?");return o>=0&&(e=n.slice(o+1),n=n.slice(0,o)),{path:n,file:this.getFile(n,!0),query:T(e)}},e.prototype.toURL=function(e,i,o){return"#"+n.prototype.toURL.call(this,e,i,o)},e}(M),Z=function(n){function e(e){n.call(this,e),this.mode="history"}return n&&(e.__proto__=n),e.prototype=Object.create(n&&n.prototype),e.prototype.constructor=e,e.prototype.getCurrentPath=function(){var n=this.getBasePath(),e=window.location.pathname;return n&&0===e.indexOf(n)&&(e=e.slice(n.length)),(e||"/")+window.location.search+window.location.hash},e.prototype.onchange=function(n){void 0===n&&(n=t),k("click",(function(e){var i="A"===e.target.tagName?e.target:e.target.parentNode;if(i&&"A"===i.tagName&&!u(i.href)){e.preventDefault();var o=i.href;window.history.pushState({key:o},"",o),n({event:e,source:"navigate"})}})),k("popstate",(function(e){n({event:e,source:"history"})}))},e.prototype.parse=function(n){void 0===n&&(n=location.href);var e="",i=n.indexOf("?");i>=0&&(e=n.slice(i+1),n=n.slice(0,i));var o=P(location.origin),c=n.indexOf(o);return c>-1&&(n=n.slice(c+o.length)),{path:n,file:this.getFile(n),query:T(e)}},e}(M),Y={},V=/([^{]*?)\w(?=\})/g,X={YYYY:"getFullYear",YY:"getYear",MM:function(n){return n.getMonth()+1},DD:"getDate",HH:"getHours",mm:"getMinutes",ss:"getSeconds",fff:"getMilliseconds"};function W(n){var e,i,o=n.loaded,c=n.total,a=n.step;!U&&((i=m("div")).classList.add("progress"),b(l,i),U=i),e=a?(e=parseInt(U.style.width||0,10)+a)>80?80:e:Math.floor(o/c*100),U.style.opacity=1,U.style.width=e>=95?"100%":e+"%",e>=95&&(clearTimeout(B),B=setTimeout((function(n){U.style.opacity=0,U.style.width="0%"}),200))}var K={};function J(n,e,i){void 0===e&&(e=!1),void 0===i&&(i={});var c=new XMLHttpRequest,a=function(){c.addEventListener.apply(c,arguments)},f=K[n];if(f)return{then:function(n){return n(f.content,f.opt)},abort:t};for(var u in c.open("GET",n),i)o.call(i,u)&&c.setRequestHeader(u,i[u]);return c.send(),{then:function(i,o){if(void 0===o&&(o=t),e){var f=setInterval((function(n){return W({step:Math.floor(5*Math.random()+1)})}),500);a("progress",W),a("loadend",(function(n){W(n),clearInterval(f)}))}a("error",o),a("load",(function(e){var a=e.target;if(a.status>=400)o(a);else{var t=K[n]={content:a.response,opt:{updatedAt:c.getResponseHeader("last-modified")}};i(t.content,t.opt)}}))},abort:function(n){return 4!==c.readyState&&c.abort()}}}function Q(n,e){n.innerHTML=n.innerHTML.replace(/var\(\s*--theme-color.*?\)/g,e)}var nn=s.title;function en(){var n=g("section.cover");if(n){var e=n.getBoundingClientRect().height;window.pageYOffset>=e||n.classList.contains("hidden")?x(l,"add","sticky"):x(l,"remove","sticky")}}function on(n,e,i,o){var c=[];null!=(e=g(e))&&(c=h(e,"a"));var a,t=decodeURI(n.toURL(n.getCurrentPath()));return c.sort((function(n,e){return e.href.length-n.href.length})).forEach((function(n){var e=decodeURI(n.getAttribute("href")),o=i?n.parentNode:n;n.title=n.title||n.innerText,0!==t.indexOf(e)||a?x(o,"remove","active"):(a=n,x(o,"add","active"))})),o&&(s.title=a?a.title||a.innerText+" - "+nn:nn),a}var cn=function(){function n(n,e){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function(n,e){if(!(n instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),this.start=e.start,this.end=e.end,this.decimal=e.decimal}return cn(n,[{key:"getIntermediateValue",value:function(n){return this.decimal?n:Math.round(n)}},{key:"getFinalValue",value:function(){return this.end}}]),n}(),tn=function(){function n(n,e){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function(n,e){if(!(n instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),this.duration=e.duration||1e3,this.ease=e.easing||this._defaultEase,this.tweener=e.tweener||new an(e),this.start=this.tweener.start,this.end=this.tweener.end,this.frame=null,this.next=null,this.isRunning=!1,this.events={},this.direction=this.startthis.end&&n>=this.next}[this.direction]}},{key:"_defaultEase",value:function(n,e,i,o){return(n/=o/2)<1?i/2*n*n+e:-i/2*(--n*(n-2)-1)+e}}]),n}(),un=document.currentScript;function rn(n){var i=c({auto2top:!1,autoHeader:!1,basePath:"",catchPluginErrors:!0,cornerExternalLinkTarget:"_blank",coverpage:"",el:"#app",executeScript:null,ext:".md",externalLinkRel:"noopener",externalLinkTarget:"_blank",formatUpdated:"",ga:"",homepage:"README.md",loadNavbar:null,loadSidebar:null,maxLevel:6,mergeNavbar:!1,name:"",nameLink:window.location.pathname,nativeEmoji:!1,noCompileLinks:[],noEmoji:!1,notFoundPage:!0,relativePath:!1,repo:"",routes:{},routerMode:"hash",subMaxLevel:0,themeColor:"",topMargin:0},"function"==typeof window.$docsify?window.$docsify(n):window.$docsify),t=un||[].slice.call(document.getElementsByTagName("script")).filter((function(n){return/docsify\./.test(n.src)}))[0];if(t)for(var f in i)if(o.call(i,f)){var u=t.getAttribute("data-"+e(f));a(u)&&(i[f]=""===u||u)}return!0===i.loadSidebar&&(i.loadSidebar="_sidebar"+i.ext),!0===i.loadNavbar&&(i.loadNavbar="_navbar"+i.ext),!0===i.coverpage&&(i.coverpage="_coverpage"+i.ext),!0===i.repo&&(i.repo=""),!0===i.name&&(i.name=""),window.$docsify=i,i}var dn={},pn=!1,gn=null,sn=!0,ln=0;function vn(n){if(sn){for(var e,i=g(".sidebar"),o=h(".anchor"),c=_(i,".sidebar-nav"),a=_(i,"li.active"),t=document.documentElement,f=(t&&t.scrollTop||document.body.scrollTop)-ln,u=0,r=o.length;uf){e||(e=d);break}e=d}if(e){var p=dn[_n(n,e.getAttribute("data-id"))];if(p&&p!==a&&(a&&a.classList.remove("active"),p.classList.add("active"),a=p,!pn&&l.classList.contains("sticky"))){var s=i.clientHeight,v=a.offsetTop+a.clientHeight+40,m=a.offsetTop>=c.scrollTop&&v<=c.scrollTop+s,b=v-0"']/),yn=/[&<>"']/g,xn=/[<>"']|&(?!#?\w+;)/,Sn=/[<>"']|&(?!#?\w+;)/g,An={"&":"&","<":"<",">":">",'"':""","'":"'"},zn=function(n){return An[n]},En=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function $n(n){return n.replace(En,(function(n,e){return"colon"===(e=e.toLowerCase())?":":"#"===e.charAt(0)?"x"===e.charAt(1)?String.fromCharCode(parseInt(e.substring(2),16)):String.fromCharCode(+e.substring(1)):""}))}var Tn=/(^|[^\[])\^/g,On=/[^\w:]/g,Rn=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i,jn={},Ln=/^[^:]+:\/*[^/]*$/,Cn=/^([^:]+:)[\s\S]*$/,qn=/^([^:]+:\/*[^/]*)[\s\S]*$/;function Fn(n,e,i){var o=n.length;if(0===o)return"";for(var c=0;c=0&&"\\"===i[c];)o=!o;return o?"|":" |"})).split(/ \|/),o=0;if(i.length>e)i.splice(e);else for(;i.length1?{type:"space",raw:e[0]}:{raw:"\n"}},n.prototype.code=function(n,e){var i=this.rules.block.code.exec(n);if(i){var o=e[e.length-1];if(o&&"paragraph"===o.type)return{raw:i[0],text:i[0].trimRight()};var c=i[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:i[0],codeBlockStyle:"indented",text:this.options.pedantic?c:Hn(c,"\n")}}},n.prototype.fences=function(n){var e=this.rules.block.fences.exec(n);if(e){var i=e[0],o=function(n,e){var i=n.match(/^(\s+)(?:```)/);if(null===i)return e;var o=i[1];return e.split("\n").map((function(n){var e=n.match(/^\s+/);return null===e?n:e[0].length>=o.length?n.slice(o.length):n})).join("\n")}(i,e[3]||"");return{type:"code",raw:i,lang:e[2]?e[2].trim():e[2],text:o}}},n.prototype.heading=function(n){var e=this.rules.block.heading.exec(n);if(e){var i=e[2].trim();if(/#$/.test(i)){var o=Hn(i,"#");this.options.pedantic?i=o.trim():o&&!/ $/.test(o)||(i=o.trim())}return{type:"heading",raw:e[0],depth:e[1].length,text:i}}},n.prototype.nptable=function(n){var e=this.rules.block.nptable.exec(n);if(e){var i={type:"table",header:Un(e[1].replace(/^ *| *\| *$/g,"")),align:e[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:e[3]?e[3].replace(/\n$/,"").split("\n"):[],raw:e[0]};if(i.header.length===i.align.length){var o,c=i.align.length;for(o=0;o ?/gm,"");return{type:"blockquote",raw:e[0],text:i}}},n.prototype.list=function(n){var e=this.rules.block.list.exec(n);if(e){var i,o,c,a,t,f,u,r,d=e[0],p=e[2],g=p.length>1,s={type:"list",raw:d,ordered:g,start:g?+p.slice(0,-1):"",loose:!1,items:[]},l=e[0].match(this.rules.block.item),v=!1,_=l.length;c=this.rules.block.listItemStart.exec(l[0]);for(var h=0;h<_;h++){if(d=i=l[h],h!==_-1){if(a=this.rules.block.listItemStart.exec(l[h+1]),this.options.pedantic?a[1].length>c[1].length:a[1].length>c[0].length||a[1].length>3){l.splice(h,2,l[h]+"\n"+l[h+1]),h--,_--;continue}(!this.options.pedantic||this.options.smartLists?a[2][a[2].length-1]!==p[p.length-1]:g===(1===a[2].length))&&(t=l.slice(h+1).join("\n"),s.raw=s.raw.substring(0,s.raw.length-t.length),h=_-1),c=a}o=i.length,~(i=i.replace(/^ *([*+-]|\d+[.)]) ?/,"")).indexOf("\n ")&&(o-=i.length,i=this.options.pedantic?i.replace(/^ {1,4}/gm,""):i.replace(new RegExp("^ {1,"+o+"}","gm"),"")),f=v||/\n\n(?!\s*$)/.test(i),h!==_-1&&(v="\n"===i.charAt(i.length-1),f||(f=v)),f&&(s.loose=!0),this.options.gfm&&(r=void 0,(u=/^\[[ xX]\] /.test(i))&&(r=" "!==i[1],i=i.replace(/^\[[ xX]\] +/,""))),s.items.push({type:"list_item",raw:d,task:u,checked:r,loose:f,text:i})}return s}},n.prototype.html=function(n){var e=this.rules.block.html.exec(n);if(e)return{type:this.options.sanitize?"paragraph":"html",raw:e[0],pre:!this.options.sanitizer&&("pre"===e[1]||"script"===e[1]||"style"===e[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(e[0]):Bn(e[0]):e[0]}},n.prototype.def=function(n){var e=this.rules.block.def.exec(n);if(e)return e[3]&&(e[3]=e[3].substring(1,e[3].length-1)),{tag:e[1].toLowerCase().replace(/\s+/g," "),raw:e[0],href:e[2],title:e[3]}},n.prototype.table=function(n){var e=this.rules.block.table.exec(n);if(e){var i={type:"table",header:Un(e[1].replace(/^ *| *\| *$/g,"")),align:e[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:e[3]?e[3].replace(/\n$/,"").split("\n"):[]};if(i.header.length===i.align.length){i.raw=e[0];var o,c=i.align.length;for(o=0;o/i.test(o[0])&&(e=!1),!i&&/^<(pre|code|kbd|script)(\s|>)/i.test(o[0])?i=!0:i&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(o[0])&&(i=!1),{type:this.options.sanitize?"text":"html",raw:o[0],inLink:e,inRawBlock:i,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(o[0]):Bn(o[0]):o[0]}},n.prototype.link=function(n){var e=this.rules.inline.link.exec(n);if(e){var i=e[2].trim();if(!this.options.pedantic&&/^$/.test(i))return;var o=Hn(i.slice(0,-1),"\\");if((i.length-o.length)%2==0)return}else{var c=Gn(e[2],"()");if(c>-1){var a=(0===e[0].indexOf("!")?5:4)+e[1].length+c;e[2]=e[2].substring(0,c),e[0]=e[0].substring(0,a).trim(),e[3]=""}}var t=e[2],f="";if(this.options.pedantic){var u=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(t);u&&(t=u[1],f=u[3])}else f=e[3]?e[3].slice(1,-1):"";return t=t.trim(),/^$/.test(i)?t.slice(1):t.slice(1,-1)),Zn(e,{href:t?t.replace(this.rules.inline._escapes,"$1"):t,title:f?f.replace(this.rules.inline._escapes,"$1"):f},e[0])}},n.prototype.reflink=function(n,e){var i;if((i=this.rules.inline.reflink.exec(n))||(i=this.rules.inline.nolink.exec(n))){var o=(i[2]||i[1]).replace(/\s+/g," ");if(!(o=e[o.toLowerCase()])||!o.href){var c=i[0].charAt(0);return{type:"text",raw:c,text:c}}return Zn(i,o,i[0])}},n.prototype.strong=function(n,e,i){void 0===i&&(i="");var o=this.rules.inline.strong.start.exec(n);if(o&&(!o[1]||o[1]&&(""===i||this.rules.inline.punctuation.exec(i)))){e=e.slice(-1*n.length);var c,a="**"===o[0]?this.rules.inline.strong.endAst:this.rules.inline.strong.endUnd;for(a.lastIndex=0;null!=(o=a.exec(e));)if(c=this.rules.inline.strong.middle.exec(e.slice(0,o.index+3)))return{type:"strong",raw:n.slice(0,c[0].length),text:n.slice(2,c[0].length-2)}}},n.prototype.em=function(n,e,i){void 0===i&&(i="");var o=this.rules.inline.em.start.exec(n);if(o&&(!o[1]||o[1]&&(""===i||this.rules.inline.punctuation.exec(i)))){e=e.slice(-1*n.length);var c,a="*"===o[0]?this.rules.inline.em.endAst:this.rules.inline.em.endUnd;for(a.lastIndex=0;null!=(o=a.exec(e));)if(c=this.rules.inline.em.middle.exec(e.slice(0,o.index+2)))return{type:"em",raw:n.slice(0,c[0].length),text:n.slice(1,c[0].length-1)}}},n.prototype.codespan=function(n){var e=this.rules.inline.code.exec(n);if(e){var i=e[2].replace(/\n/g," "),o=/[^ ]/.test(i),c=/^ /.test(i)&&/ $/.test(i);return o&&c&&(i=i.substring(1,i.length-1)),i=Bn(i,!0),{type:"codespan",raw:e[0],text:i}}},n.prototype.br=function(n){var e=this.rules.inline.br.exec(n);if(e)return{type:"br",raw:e[0]}},n.prototype.del=function(n){var e=this.rules.inline.del.exec(n);if(e)return{type:"del",raw:e[0],text:e[2]}},n.prototype.autolink=function(n,e){var i,o,c=this.rules.inline.autolink.exec(n);if(c)return o="@"===c[2]?"mailto:"+(i=Bn(this.options.mangle?e(c[1]):c[1])):i=Bn(c[1]),{type:"link",raw:c[0],text:i,href:o,tokens:[{type:"text",raw:i,text:i}]}},n.prototype.url=function(n,e){var i;if(i=this.rules.inline.url.exec(n)){var o,c;if("@"===i[2])c="mailto:"+(o=Bn(this.options.mangle?e(i[0]):i[0]));else{var a;do{a=i[0],i[0]=this.rules.inline._backpedal.exec(i[0])[0]}while(a!==i[0]);o=Bn(i[0]),c="www."===i[1]?"http://"+o:o}return{type:"link",raw:i[0],text:o,href:c,tokens:[{type:"text",raw:o,text:o}]}}},n.prototype.inlineText=function(n,e,i){var o,c=this.rules.inline.text.exec(n);if(c)return o=e?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(c[0]):Bn(c[0]):c[0]:Bn(this.options.smartypants?i(c[0]):c[0]),{type:"text",raw:c[0],text:o}},n}(),Vn={exec:function(){}},Xn=function(n,e){n=n.source||n,e=e||"";var i={replace:function(e,o){return o=(o=o.source||o).replace(Tn,"$1"),n=n.replace(e,o),i},getRegex:function(){return new RegExp(n,e)}};return i},Wn=Nn,Kn={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:Vn,table:Vn,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};Kn.def=Xn(Kn.def).replace("label",Kn._label).replace("title",Kn._title).getRegex(),Kn.bullet=/(?:[*+-]|\d{1,9}[.)])/,Kn.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,Kn.item=Xn(Kn.item,"gm").replace(/bull/g,Kn.bullet).getRegex(),Kn.listItemStart=Xn(/^( *)(bull)/).replace("bull",Kn.bullet).getRegex(),Kn.list=Xn(Kn.list).replace(/bull/g,Kn.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+Kn.def.source+")").getRegex(),Kn._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Kn._comment=/|$)/,Kn.html=Xn(Kn.html,"i").replace("comment",Kn._comment).replace("tag",Kn._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Kn.paragraph=Xn(Kn._paragraph).replace("hr",Kn.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",Kn._tag).getRegex(),Kn.blockquote=Xn(Kn.blockquote).replace("paragraph",Kn.paragraph).getRegex(),Kn.normal=Wn({},Kn),Kn.gfm=Wn({},Kn.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),Kn.gfm.nptable=Xn(Kn.gfm.nptable).replace("hr",Kn.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",Kn._tag).getRegex(),Kn.gfm.table=Xn(Kn.gfm.table).replace("hr",Kn.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",Kn._tag).getRegex(),Kn.pedantic=Wn({},Kn.normal,{html:Xn("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",Kn._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Vn,paragraph:Xn(Kn.normal._paragraph).replace("hr",Kn.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",Kn.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var Jn={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:Vn,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",strong:{start:/^(?:(\*\*(?=[*punctuation]))|\*\*)(?![\s])|__/,middle:/^\*\*(?:(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)|\*(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)*?\*)+?\*\*$|^__(?![\s])((?:(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)*?_)+?)__$/,endAst:/[^punctuation\s]\*\*(?!\*)|[punctuation]\*\*(?!\*)(?:(?=[punctuation_\s]|$))/,endUnd:/[^\s]__(?!_)(?:(?=[punctuation*\s])|$)/},em:{start:/^(?:(\*(?=[punctuation]))|\*)(?![*\s])|_/,middle:/^\*(?:(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)|\*(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)*?\*)+?\*$|^_(?![_\s])(?:(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)*?_)+?_$/,endAst:/[^punctuation\s]\*(?!\*)|[punctuation]\*(?!\*)(?:(?=[punctuation_\s]|$))/,endUnd:/[^\s]_(?!_)(?:(?=[punctuation*\s])|$)/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:Vn,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~"};Jn.punctuation=Xn(Jn.punctuation).replace(/punctuation/g,Jn._punctuation).getRegex(),Jn._blockSkip="\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>",Jn._overlapSkip="__[^_]*?__|\\*\\*\\[^\\*\\]*?\\*\\*",Jn._comment=Xn(Kn._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),Jn.em.start=Xn(Jn.em.start).replace(/punctuation/g,Jn._punctuation).getRegex(),Jn.em.middle=Xn(Jn.em.middle).replace(/punctuation/g,Jn._punctuation).replace(/overlapSkip/g,Jn._overlapSkip).getRegex(),Jn.em.endAst=Xn(Jn.em.endAst,"g").replace(/punctuation/g,Jn._punctuation).getRegex(),Jn.em.endUnd=Xn(Jn.em.endUnd,"g").replace(/punctuation/g,Jn._punctuation).getRegex(),Jn.strong.start=Xn(Jn.strong.start).replace(/punctuation/g,Jn._punctuation).getRegex(),Jn.strong.middle=Xn(Jn.strong.middle).replace(/punctuation/g,Jn._punctuation).replace(/overlapSkip/g,Jn._overlapSkip).getRegex(),Jn.strong.endAst=Xn(Jn.strong.endAst,"g").replace(/punctuation/g,Jn._punctuation).getRegex(),Jn.strong.endUnd=Xn(Jn.strong.endUnd,"g").replace(/punctuation/g,Jn._punctuation).getRegex(),Jn.blockSkip=Xn(Jn._blockSkip,"g").getRegex(),Jn.overlapSkip=Xn(Jn._overlapSkip,"g").getRegex(),Jn._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,Jn._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,Jn._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,Jn.autolink=Xn(Jn.autolink).replace("scheme",Jn._scheme).replace("email",Jn._email).getRegex(),Jn._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,Jn.tag=Xn(Jn.tag).replace("comment",Jn._comment).replace("attribute",Jn._attribute).getRegex(),Jn._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,Jn._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,Jn._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,Jn.link=Xn(Jn.link).replace("label",Jn._label).replace("href",Jn._href).replace("title",Jn._title).getRegex(),Jn.reflink=Xn(Jn.reflink).replace("label",Jn._label).getRegex(),Jn.reflinkSearch=Xn(Jn.reflinkSearch,"g").replace("reflink",Jn.reflink).replace("nolink",Jn.nolink).getRegex(),Jn.normal=Wn({},Jn),Jn.pedantic=Wn({},Jn.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:Xn(/^!?\[(label)\]\((.*?)\)/).replace("label",Jn._label).getRegex(),reflink:Xn(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Jn._label).getRegex()}),Jn.gfm=Wn({},Jn.normal,{escape:Xn(Jn.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\1;)1&e&&(i+=n),e>>=1,n+=n;return i+n};function ce(n){return n.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")}function ae(n){var e,i,o="",c=n.length;for(e=0;e.5&&(i="x"+i.toString(16)),o+="&#"+i+";";return o}var te=function(){function n(n){this.tokens=[],this.tokens.links=Object.create(null),this.options=n||ne,this.options.tokenizer=this.options.tokenizer||new Yn,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;var e={block:ee.normal,inline:ie.normal};this.options.pedantic?(e.block=ee.pedantic,e.inline=ie.pedantic):this.options.gfm&&(e.block=ee.gfm,this.options.breaks?e.inline=ie.breaks:e.inline=ie.gfm),this.tokenizer.rules=e}var e={rules:{configurable:!0}};return e.rules.get=function(){return{block:ee,inline:ie}},n.lex=function(e,i){return new n(i).lex(e)},n.lexInline=function(e,i){return new n(i).inlineTokens(e)},n.prototype.lex=function(n){return n=n.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(n,this.tokens,!0),this.inline(this.tokens),this.tokens},n.prototype.blockTokens=function(n,e,i){var o,c,a,t;for(void 0===e&&(e=[]),void 0===i&&(i=!0),this.options.pedantic&&(n=n.replace(/^ +$/gm,""));n;)if(o=this.tokenizer.space(n))n=n.substring(o.raw.length),o.type&&e.push(o);else if(o=this.tokenizer.code(n,e))n=n.substring(o.raw.length),o.type?e.push(o):((t=e[e.length-1]).raw+="\n"+o.raw,t.text+="\n"+o.text);else if(o=this.tokenizer.fences(n))n=n.substring(o.raw.length),e.push(o);else if(o=this.tokenizer.heading(n))n=n.substring(o.raw.length),e.push(o);else if(o=this.tokenizer.nptable(n))n=n.substring(o.raw.length),e.push(o);else if(o=this.tokenizer.hr(n))n=n.substring(o.raw.length),e.push(o);else if(o=this.tokenizer.blockquote(n))n=n.substring(o.raw.length),o.tokens=this.blockTokens(o.text,[],i),e.push(o);else if(o=this.tokenizer.list(n)){for(n=n.substring(o.raw.length),a=o.items.length,c=0;c0)for(;null!=(a=this.tokenizer.rules.inline.reflinkSearch.exec(u));)r.includes(a[0].slice(a[0].lastIndexOf("[")+1,-1))&&(u=u.slice(0,a.index)+"["+oe("a",a[0].length-2)+"]"+u.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(a=this.tokenizer.rules.inline.blockSkip.exec(u));)u=u.slice(0,a.index)+"["+oe("a",a[0].length-2)+"]"+u.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;n;)if(t||(f=""),t=!1,c=this.tokenizer.escape(n))n=n.substring(c.raw.length),e.push(c);else if(c=this.tokenizer.tag(n,i,o))n=n.substring(c.raw.length),i=c.inLink,o=c.inRawBlock,e.push(c);else if(c=this.tokenizer.link(n))n=n.substring(c.raw.length),"link"===c.type&&(c.tokens=this.inlineTokens(c.text,[],!0,o)),e.push(c);else if(c=this.tokenizer.reflink(n,this.tokens.links))n=n.substring(c.raw.length),"link"===c.type&&(c.tokens=this.inlineTokens(c.text,[],!0,o)),e.push(c);else if(c=this.tokenizer.strong(n,u,f))n=n.substring(c.raw.length),c.tokens=this.inlineTokens(c.text,[],i,o),e.push(c);else if(c=this.tokenizer.em(n,u,f))n=n.substring(c.raw.length),c.tokens=this.inlineTokens(c.text,[],i,o),e.push(c);else if(c=this.tokenizer.codespan(n))n=n.substring(c.raw.length),e.push(c);else if(c=this.tokenizer.br(n))n=n.substring(c.raw.length),e.push(c);else if(c=this.tokenizer.del(n))n=n.substring(c.raw.length),c.tokens=this.inlineTokens(c.text,[],i,o),e.push(c);else if(c=this.tokenizer.autolink(n,ae))n=n.substring(c.raw.length),e.push(c);else if(i||!(c=this.tokenizer.url(n,ae))){if(c=this.tokenizer.inlineText(n,o,ce))n=n.substring(c.raw.length),f=c.raw.slice(-1),t=!0,e.push(c);else if(n){var d="Infinite loop on byte: "+n.charCodeAt(0);if(this.options.silent){console.error(d);break}throw new Error(d)}}else n=n.substring(c.raw.length),e.push(c);return e},Object.defineProperties(n,e),n}(),fe=wn.defaults,ue=function(n,e,i){if(n){var o;try{o=decodeURIComponent($n(i)).replace(On,"").toLowerCase()}catch(n){return null}if(0===o.indexOf("javascript:")||0===o.indexOf("vbscript:")||0===o.indexOf("data:"))return null}e&&!Rn.test(i)&&(i=function(n,e){jn[" "+n]||(Ln.test(n)?jn[" "+n]=n+"/":jn[" "+n]=Fn(n,"/",!0));var i=-1===(n=jn[" "+n]).indexOf(":");return"//"===e.substring(0,2)?i?e:n.replace(Cn,"$1")+e:"/"===e.charAt(0)?i?e:n.replace(qn,"$1")+e:n+e}(e,i));try{i=encodeURI(i).replace(/%25/g,"%")}catch(n){return null}return i},re=Pn,de=function(){function n(n){this.options=n||fe}return n.prototype.code=function(n,e,i){var o=(e||"").match(/\S*/)[0];if(this.options.highlight){var c=this.options.highlight(n,o);null!=c&&c!==n&&(i=!0,n=c)}return n=n.replace(/\n$/,"")+"\n",o?'
'+(i?n:re(n,!0))+"
\n":"
"+(i?n:re(n,!0))+"
\n"},n.prototype.blockquote=function(n){return"
\n"+n+"
\n"},n.prototype.html=function(n){return n},n.prototype.heading=function(n,e,i,o){return this.options.headerIds?"'+n+"\n":""+n+"\n"},n.prototype.hr=function(){return this.options.xhtml?"
\n":"
\n"},n.prototype.list=function(n,e,i){var o=e?"ol":"ul";return"<"+o+(e&&1!==i?' start="'+i+'"':"")+">\n"+n+"\n"},n.prototype.listitem=function(n){return"
  • "+n+"
  • \n"},n.prototype.checkbox=function(n){return" "},n.prototype.paragraph=function(n){return"

    "+n+"

    \n"},n.prototype.table=function(n,e){return e&&(e=""+e+""),"\n\n"+n+"\n"+e+"
    \n"},n.prototype.tablerow=function(n){return"\n"+n+"\n"},n.prototype.tablecell=function(n,e){var i=e.header?"th":"td";return(e.align?"<"+i+' align="'+e.align+'">':"<"+i+">")+n+"\n"},n.prototype.strong=function(n){return""+n+""},n.prototype.em=function(n){return""+n+""},n.prototype.codespan=function(n){return""+n+""},n.prototype.br=function(){return this.options.xhtml?"
    ":"
    "},n.prototype.del=function(n){return""+n+""},n.prototype.link=function(n,e,i){if(null===(n=ue(this.options.sanitize,this.options.baseUrl,n)))return i;var o='"+i+""},n.prototype.image=function(n,e,i){if(null===(n=ue(this.options.sanitize,this.options.baseUrl,n)))return i;var o=''+i+'":">")},n.prototype.text=function(n){return n},n}(),pe=function(){function n(){}return n.prototype.strong=function(n){return n},n.prototype.em=function(n){return n},n.prototype.codespan=function(n){return n},n.prototype.del=function(n){return n},n.prototype.html=function(n){return n},n.prototype.text=function(n){return n},n.prototype.link=function(n,e,i){return""+i},n.prototype.image=function(n,e,i){return""+i},n.prototype.br=function(){return""},n}(),ge=function(){function n(){this.seen={}}return n.prototype.serialize=function(n){return n.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")},n.prototype.getNextSafeSlug=function(n,e){var i=n,o=0;if(this.seen.hasOwnProperty(i)){o=this.seen[n];do{i=n+"-"+ ++o}while(this.seen.hasOwnProperty(i))}return e||(this.seen[n]=o,this.seen[i]=0),i},n.prototype.slug=function(n,e){void 0===e&&(e={});var i=this.serialize(n);return this.getNextSafeSlug(i,e.dryrun)},n}(),se=wn.defaults,le=In,ve=function(){function n(n){this.options=n||se,this.options.renderer=this.options.renderer||new de,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new pe,this.slugger=new ge}return n.parse=function(e,i){return new n(i).parse(e)},n.parseInline=function(e,i){return new n(i).parseInline(e)},n.prototype.parse=function(n,e){void 0===e&&(e=!0);var i,o,c,a,t,f,u,r,d,p,g,s,l,v,_,h,m,b,w="",k=n.length;for(i=0;i0&&"text"===_.tokens[0].type?(_.tokens[0].text=b+" "+_.tokens[0].text,_.tokens[0].tokens&&_.tokens[0].tokens.length>0&&"text"===_.tokens[0].tokens[0].type&&(_.tokens[0].tokens[0].text=b+" "+_.tokens[0].tokens[0].text)):_.tokens.unshift({type:"text",text:b}):v+=b),v+=this.parse(_.tokens,l),d+=this.renderer.listitem(v,m,h);w+=this.renderer.list(d,g,s);continue;case"html":w+=this.renderer.html(p.text);continue;case"paragraph":w+=this.renderer.paragraph(this.parseInline(p.tokens));continue;case"text":for(d=p.tokens?this.parseInline(p.tokens):p.text;i+1An error occurred:

    "+me(n.message+"",!0)+"
    ";throw n}}ye.options=ye.setOptions=function(n){return _e(ye.defaults,n),we(ye.defaults),ye},ye.getDefaults=be,ye.defaults=ke,ye.use=function(n){var e=_e({},n);if(n.renderer){var i=ye.defaults.renderer||new de,o=function(e){var o=i[e];i[e]=function(){for(var c=[],a=arguments.length;a--;)c[a]=arguments[a];var t=n.renderer[e].apply(i,c);return!1===t&&(t=o.apply(i,c)),t}};for(var c in n.renderer)o(c);e.renderer=i}if(n.tokenizer){var a=ye.defaults.tokenizer||new Yn,t=function(e){var i=a[f];a[f]=function(){for(var e=[],o=arguments.length;o--;)e[o]=arguments[o];var c=n.tokenizer[f].apply(a,e);return!1===c&&(c=i.apply(a,e)),c}};for(var f in n.tokenizer)t();e.tokenizer=a}if(n.walkTokens){var u=ye.defaults.walkTokens;e.walkTokens=function(e){n.walkTokens(e),u&&u(e)}}ye.setOptions(e)},ye.walkTokens=function(n,e){for(var i=0,o=n;iAn error occurred:

    "+me(n.message+"",!0)+"
    ";throw n}},ye.Parser=ve,ye.parser=ve.parse,ye.Renderer=de,ye.TextRenderer=pe,ye.Lexer=te,ye.lexer=te.lex,ye.Tokenizer=Yn,ye.Slugger=ge,ye.parse=ye;var xe=ye;function Se(n,e){if(void 0===e&&(e='
      {inner}
    '),!n||!n.length)return"";var i="";return n.forEach((function(n){var o=n.title.replace(/(<([^>]+)>)/g,"");i+='
  • '+n.title+"
  • ",n.children&&(i+=Se(n.children,e))})),e.replace("{inner}",i)}function Ae(n,e){return'

    '+e.slice(5).trim()+"

    "}function ze(n,e){var i=[],o={};return n.forEach((function(n){var c=n.level||1,a=c-1;c>e||(o[a]?o[a].children=(o[a].children||[]).concat(n):i.push(n),o[c]=n)})),i}var Ee={},$e=/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g;function Te(n){return n.toLowerCase()}function Oe(n){if("string"!=typeof n)return"";var e=n.trim().replace(/[A-Z]+/g,Te).replace(/<[^>]+>/g,"").replace($e,"").replace(/\s/g,"-").replace(/-+/g,"-").replace(/^(\d)/,"_$1"),i=Ee[e];return i=o.call(Ee,e)?i+1:0,Ee[e]=i,i&&(e=e+"-"+i),e}Oe.clear=function(){Ee={}};var Re={baseURL:"https://github.githubassets.com/images/icons/emoji/",data:{100:"unicode/1f4af.png?v8",1234:"unicode/1f522.png?v8","+1":"unicode/1f44d.png?v8","-1":"unicode/1f44e.png?v8","1st_place_medal":"unicode/1f947.png?v8","2nd_place_medal":"unicode/1f948.png?v8","3rd_place_medal":"unicode/1f949.png?v8","8ball":"unicode/1f3b1.png?v8",a:"unicode/1f170.png?v8",ab:"unicode/1f18e.png?v8",abacus:"unicode/1f9ee.png?v8",abc:"unicode/1f524.png?v8",abcd:"unicode/1f521.png?v8",accept:"unicode/1f251.png?v8",accessibility:"accessibility.png?v8",accordion:"unicode/1fa97.png?v8",adhesive_bandage:"unicode/1fa79.png?v8",adult:"unicode/1f9d1.png?v8",aerial_tramway:"unicode/1f6a1.png?v8",afghanistan:"unicode/1f1e6-1f1eb.png?v8",airplane:"unicode/2708.png?v8",aland_islands:"unicode/1f1e6-1f1fd.png?v8",alarm_clock:"unicode/23f0.png?v8",albania:"unicode/1f1e6-1f1f1.png?v8",alembic:"unicode/2697.png?v8",algeria:"unicode/1f1e9-1f1ff.png?v8",alien:"unicode/1f47d.png?v8",ambulance:"unicode/1f691.png?v8",american_samoa:"unicode/1f1e6-1f1f8.png?v8",amphora:"unicode/1f3fa.png?v8",anatomical_heart:"unicode/1fac0.png?v8",anchor:"unicode/2693.png?v8",andorra:"unicode/1f1e6-1f1e9.png?v8",angel:"unicode/1f47c.png?v8",anger:"unicode/1f4a2.png?v8",angola:"unicode/1f1e6-1f1f4.png?v8",angry:"unicode/1f620.png?v8",anguilla:"unicode/1f1e6-1f1ee.png?v8",anguished:"unicode/1f627.png?v8",ant:"unicode/1f41c.png?v8",antarctica:"unicode/1f1e6-1f1f6.png?v8",antigua_barbuda:"unicode/1f1e6-1f1ec.png?v8",apple:"unicode/1f34e.png?v8",aquarius:"unicode/2652.png?v8",argentina:"unicode/1f1e6-1f1f7.png?v8",aries:"unicode/2648.png?v8",armenia:"unicode/1f1e6-1f1f2.png?v8",arrow_backward:"unicode/25c0.png?v8",arrow_double_down:"unicode/23ec.png?v8",arrow_double_up:"unicode/23eb.png?v8",arrow_down:"unicode/2b07.png?v8",arrow_down_small:"unicode/1f53d.png?v8",arrow_forward:"unicode/25b6.png?v8",arrow_heading_down:"unicode/2935.png?v8",arrow_heading_up:"unicode/2934.png?v8",arrow_left:"unicode/2b05.png?v8",arrow_lower_left:"unicode/2199.png?v8",arrow_lower_right:"unicode/2198.png?v8",arrow_right:"unicode/27a1.png?v8",arrow_right_hook:"unicode/21aa.png?v8",arrow_up:"unicode/2b06.png?v8",arrow_up_down:"unicode/2195.png?v8",arrow_up_small:"unicode/1f53c.png?v8",arrow_upper_left:"unicode/2196.png?v8",arrow_upper_right:"unicode/2197.png?v8",arrows_clockwise:"unicode/1f503.png?v8",arrows_counterclockwise:"unicode/1f504.png?v8",art:"unicode/1f3a8.png?v8",articulated_lorry:"unicode/1f69b.png?v8",artificial_satellite:"unicode/1f6f0.png?v8",artist:"unicode/1f9d1-1f3a8.png?v8",aruba:"unicode/1f1e6-1f1fc.png?v8",ascension_island:"unicode/1f1e6-1f1e8.png?v8",asterisk:"unicode/002a-20e3.png?v8",astonished:"unicode/1f632.png?v8",astronaut:"unicode/1f9d1-1f680.png?v8",athletic_shoe:"unicode/1f45f.png?v8",atm:"unicode/1f3e7.png?v8",atom:"atom.png?v8",atom_symbol:"unicode/269b.png?v8",australia:"unicode/1f1e6-1f1fa.png?v8",austria:"unicode/1f1e6-1f1f9.png?v8",auto_rickshaw:"unicode/1f6fa.png?v8",avocado:"unicode/1f951.png?v8",axe:"unicode/1fa93.png?v8",azerbaijan:"unicode/1f1e6-1f1ff.png?v8",b:"unicode/1f171.png?v8",baby:"unicode/1f476.png?v8",baby_bottle:"unicode/1f37c.png?v8",baby_chick:"unicode/1f424.png?v8",baby_symbol:"unicode/1f6bc.png?v8",back:"unicode/1f519.png?v8",bacon:"unicode/1f953.png?v8",badger:"unicode/1f9a1.png?v8",badminton:"unicode/1f3f8.png?v8",bagel:"unicode/1f96f.png?v8",baggage_claim:"unicode/1f6c4.png?v8",baguette_bread:"unicode/1f956.png?v8",bahamas:"unicode/1f1e7-1f1f8.png?v8",bahrain:"unicode/1f1e7-1f1ed.png?v8",balance_scale:"unicode/2696.png?v8",bald_man:"unicode/1f468-1f9b2.png?v8",bald_woman:"unicode/1f469-1f9b2.png?v8",ballet_shoes:"unicode/1fa70.png?v8",balloon:"unicode/1f388.png?v8",ballot_box:"unicode/1f5f3.png?v8",ballot_box_with_check:"unicode/2611.png?v8",bamboo:"unicode/1f38d.png?v8",banana:"unicode/1f34c.png?v8",bangbang:"unicode/203c.png?v8",bangladesh:"unicode/1f1e7-1f1e9.png?v8",banjo:"unicode/1fa95.png?v8",bank:"unicode/1f3e6.png?v8",bar_chart:"unicode/1f4ca.png?v8",barbados:"unicode/1f1e7-1f1e7.png?v8",barber:"unicode/1f488.png?v8",baseball:"unicode/26be.png?v8",basecamp:"basecamp.png?v8",basecampy:"basecampy.png?v8",basket:"unicode/1f9fa.png?v8",basketball:"unicode/1f3c0.png?v8",basketball_man:"unicode/26f9-2642.png?v8",basketball_woman:"unicode/26f9-2640.png?v8",bat:"unicode/1f987.png?v8",bath:"unicode/1f6c0.png?v8",bathtub:"unicode/1f6c1.png?v8",battery:"unicode/1f50b.png?v8",beach_umbrella:"unicode/1f3d6.png?v8",bear:"unicode/1f43b.png?v8",bearded_person:"unicode/1f9d4.png?v8",beaver:"unicode/1f9ab.png?v8",bed:"unicode/1f6cf.png?v8",bee:"unicode/1f41d.png?v8",beer:"unicode/1f37a.png?v8",beers:"unicode/1f37b.png?v8",beetle:"unicode/1fab2.png?v8",beginner:"unicode/1f530.png?v8",belarus:"unicode/1f1e7-1f1fe.png?v8",belgium:"unicode/1f1e7-1f1ea.png?v8",belize:"unicode/1f1e7-1f1ff.png?v8",bell:"unicode/1f514.png?v8",bell_pepper:"unicode/1fad1.png?v8",bellhop_bell:"unicode/1f6ce.png?v8",benin:"unicode/1f1e7-1f1ef.png?v8",bento:"unicode/1f371.png?v8",bermuda:"unicode/1f1e7-1f1f2.png?v8",beverage_box:"unicode/1f9c3.png?v8",bhutan:"unicode/1f1e7-1f1f9.png?v8",bicyclist:"unicode/1f6b4.png?v8",bike:"unicode/1f6b2.png?v8",biking_man:"unicode/1f6b4-2642.png?v8",biking_woman:"unicode/1f6b4-2640.png?v8",bikini:"unicode/1f459.png?v8",billed_cap:"unicode/1f9e2.png?v8",biohazard:"unicode/2623.png?v8",bird:"unicode/1f426.png?v8",birthday:"unicode/1f382.png?v8",bison:"unicode/1f9ac.png?v8",black_cat:"unicode/1f408-2b1b.png?v8",black_circle:"unicode/26ab.png?v8",black_flag:"unicode/1f3f4.png?v8",black_heart:"unicode/1f5a4.png?v8",black_joker:"unicode/1f0cf.png?v8",black_large_square:"unicode/2b1b.png?v8",black_medium_small_square:"unicode/25fe.png?v8",black_medium_square:"unicode/25fc.png?v8",black_nib:"unicode/2712.png?v8",black_small_square:"unicode/25aa.png?v8",black_square_button:"unicode/1f532.png?v8",blond_haired_man:"unicode/1f471-2642.png?v8",blond_haired_person:"unicode/1f471.png?v8",blond_haired_woman:"unicode/1f471-2640.png?v8",blonde_woman:"unicode/1f471-2640.png?v8",blossom:"unicode/1f33c.png?v8",blowfish:"unicode/1f421.png?v8",blue_book:"unicode/1f4d8.png?v8",blue_car:"unicode/1f699.png?v8",blue_heart:"unicode/1f499.png?v8",blue_square:"unicode/1f7e6.png?v8",blueberries:"unicode/1fad0.png?v8",blush:"unicode/1f60a.png?v8",boar:"unicode/1f417.png?v8",boat:"unicode/26f5.png?v8",bolivia:"unicode/1f1e7-1f1f4.png?v8",bomb:"unicode/1f4a3.png?v8",bone:"unicode/1f9b4.png?v8",book:"unicode/1f4d6.png?v8",bookmark:"unicode/1f516.png?v8",bookmark_tabs:"unicode/1f4d1.png?v8",books:"unicode/1f4da.png?v8",boom:"unicode/1f4a5.png?v8",boomerang:"unicode/1fa83.png?v8",boot:"unicode/1f462.png?v8",bosnia_herzegovina:"unicode/1f1e7-1f1e6.png?v8",botswana:"unicode/1f1e7-1f1fc.png?v8",bouncing_ball_man:"unicode/26f9-2642.png?v8",bouncing_ball_person:"unicode/26f9.png?v8",bouncing_ball_woman:"unicode/26f9-2640.png?v8",bouquet:"unicode/1f490.png?v8",bouvet_island:"unicode/1f1e7-1f1fb.png?v8",bow:"unicode/1f647.png?v8",bow_and_arrow:"unicode/1f3f9.png?v8",bowing_man:"unicode/1f647-2642.png?v8",bowing_woman:"unicode/1f647-2640.png?v8",bowl_with_spoon:"unicode/1f963.png?v8",bowling:"unicode/1f3b3.png?v8",bowtie:"bowtie.png?v8",boxing_glove:"unicode/1f94a.png?v8",boy:"unicode/1f466.png?v8",brain:"unicode/1f9e0.png?v8",brazil:"unicode/1f1e7-1f1f7.png?v8",bread:"unicode/1f35e.png?v8",breast_feeding:"unicode/1f931.png?v8",bricks:"unicode/1f9f1.png?v8",bride_with_veil:"unicode/1f470-2640.png?v8",bridge_at_night:"unicode/1f309.png?v8",briefcase:"unicode/1f4bc.png?v8",british_indian_ocean_territory:"unicode/1f1ee-1f1f4.png?v8",british_virgin_islands:"unicode/1f1fb-1f1ec.png?v8",broccoli:"unicode/1f966.png?v8",broken_heart:"unicode/1f494.png?v8",broom:"unicode/1f9f9.png?v8",brown_circle:"unicode/1f7e4.png?v8",brown_heart:"unicode/1f90e.png?v8",brown_square:"unicode/1f7eb.png?v8",brunei:"unicode/1f1e7-1f1f3.png?v8",bubble_tea:"unicode/1f9cb.png?v8",bucket:"unicode/1faa3.png?v8",bug:"unicode/1f41b.png?v8",building_construction:"unicode/1f3d7.png?v8",bulb:"unicode/1f4a1.png?v8",bulgaria:"unicode/1f1e7-1f1ec.png?v8",bullettrain_front:"unicode/1f685.png?v8",bullettrain_side:"unicode/1f684.png?v8",burkina_faso:"unicode/1f1e7-1f1eb.png?v8",burrito:"unicode/1f32f.png?v8",burundi:"unicode/1f1e7-1f1ee.png?v8",bus:"unicode/1f68c.png?v8",business_suit_levitating:"unicode/1f574.png?v8",busstop:"unicode/1f68f.png?v8",bust_in_silhouette:"unicode/1f464.png?v8",busts_in_silhouette:"unicode/1f465.png?v8",butter:"unicode/1f9c8.png?v8",butterfly:"unicode/1f98b.png?v8",cactus:"unicode/1f335.png?v8",cake:"unicode/1f370.png?v8",calendar:"unicode/1f4c6.png?v8",call_me_hand:"unicode/1f919.png?v8",calling:"unicode/1f4f2.png?v8",cambodia:"unicode/1f1f0-1f1ed.png?v8",camel:"unicode/1f42b.png?v8",camera:"unicode/1f4f7.png?v8",camera_flash:"unicode/1f4f8.png?v8",cameroon:"unicode/1f1e8-1f1f2.png?v8",camping:"unicode/1f3d5.png?v8",canada:"unicode/1f1e8-1f1e6.png?v8",canary_islands:"unicode/1f1ee-1f1e8.png?v8",cancer:"unicode/264b.png?v8",candle:"unicode/1f56f.png?v8",candy:"unicode/1f36c.png?v8",canned_food:"unicode/1f96b.png?v8",canoe:"unicode/1f6f6.png?v8",cape_verde:"unicode/1f1e8-1f1fb.png?v8",capital_abcd:"unicode/1f520.png?v8",capricorn:"unicode/2651.png?v8",car:"unicode/1f697.png?v8",card_file_box:"unicode/1f5c3.png?v8",card_index:"unicode/1f4c7.png?v8",card_index_dividers:"unicode/1f5c2.png?v8",caribbean_netherlands:"unicode/1f1e7-1f1f6.png?v8",carousel_horse:"unicode/1f3a0.png?v8",carpentry_saw:"unicode/1fa9a.png?v8",carrot:"unicode/1f955.png?v8",cartwheeling:"unicode/1f938.png?v8",cat:"unicode/1f431.png?v8",cat2:"unicode/1f408.png?v8",cayman_islands:"unicode/1f1f0-1f1fe.png?v8",cd:"unicode/1f4bf.png?v8",central_african_republic:"unicode/1f1e8-1f1eb.png?v8",ceuta_melilla:"unicode/1f1ea-1f1e6.png?v8",chad:"unicode/1f1f9-1f1e9.png?v8",chains:"unicode/26d3.png?v8",chair:"unicode/1fa91.png?v8",champagne:"unicode/1f37e.png?v8",chart:"unicode/1f4b9.png?v8",chart_with_downwards_trend:"unicode/1f4c9.png?v8",chart_with_upwards_trend:"unicode/1f4c8.png?v8",checkered_flag:"unicode/1f3c1.png?v8",cheese:"unicode/1f9c0.png?v8",cherries:"unicode/1f352.png?v8",cherry_blossom:"unicode/1f338.png?v8",chess_pawn:"unicode/265f.png?v8",chestnut:"unicode/1f330.png?v8",chicken:"unicode/1f414.png?v8",child:"unicode/1f9d2.png?v8",children_crossing:"unicode/1f6b8.png?v8",chile:"unicode/1f1e8-1f1f1.png?v8",chipmunk:"unicode/1f43f.png?v8",chocolate_bar:"unicode/1f36b.png?v8",chopsticks:"unicode/1f962.png?v8",christmas_island:"unicode/1f1e8-1f1fd.png?v8",christmas_tree:"unicode/1f384.png?v8",church:"unicode/26ea.png?v8",cinema:"unicode/1f3a6.png?v8",circus_tent:"unicode/1f3aa.png?v8",city_sunrise:"unicode/1f307.png?v8",city_sunset:"unicode/1f306.png?v8",cityscape:"unicode/1f3d9.png?v8",cl:"unicode/1f191.png?v8",clamp:"unicode/1f5dc.png?v8",clap:"unicode/1f44f.png?v8",clapper:"unicode/1f3ac.png?v8",classical_building:"unicode/1f3db.png?v8",climbing:"unicode/1f9d7.png?v8",climbing_man:"unicode/1f9d7-2642.png?v8",climbing_woman:"unicode/1f9d7-2640.png?v8",clinking_glasses:"unicode/1f942.png?v8",clipboard:"unicode/1f4cb.png?v8",clipperton_island:"unicode/1f1e8-1f1f5.png?v8",clock1:"unicode/1f550.png?v8",clock10:"unicode/1f559.png?v8",clock1030:"unicode/1f565.png?v8",clock11:"unicode/1f55a.png?v8",clock1130:"unicode/1f566.png?v8",clock12:"unicode/1f55b.png?v8",clock1230:"unicode/1f567.png?v8",clock130:"unicode/1f55c.png?v8",clock2:"unicode/1f551.png?v8",clock230:"unicode/1f55d.png?v8",clock3:"unicode/1f552.png?v8",clock330:"unicode/1f55e.png?v8",clock4:"unicode/1f553.png?v8",clock430:"unicode/1f55f.png?v8",clock5:"unicode/1f554.png?v8",clock530:"unicode/1f560.png?v8",clock6:"unicode/1f555.png?v8",clock630:"unicode/1f561.png?v8",clock7:"unicode/1f556.png?v8",clock730:"unicode/1f562.png?v8",clock8:"unicode/1f557.png?v8",clock830:"unicode/1f563.png?v8",clock9:"unicode/1f558.png?v8",clock930:"unicode/1f564.png?v8",closed_book:"unicode/1f4d5.png?v8",closed_lock_with_key:"unicode/1f510.png?v8",closed_umbrella:"unicode/1f302.png?v8",cloud:"unicode/2601.png?v8",cloud_with_lightning:"unicode/1f329.png?v8",cloud_with_lightning_and_rain:"unicode/26c8.png?v8",cloud_with_rain:"unicode/1f327.png?v8",cloud_with_snow:"unicode/1f328.png?v8",clown_face:"unicode/1f921.png?v8",clubs:"unicode/2663.png?v8",cn:"unicode/1f1e8-1f1f3.png?v8",coat:"unicode/1f9e5.png?v8",cockroach:"unicode/1fab3.png?v8",cocktail:"unicode/1f378.png?v8",coconut:"unicode/1f965.png?v8",cocos_islands:"unicode/1f1e8-1f1e8.png?v8",coffee:"unicode/2615.png?v8",coffin:"unicode/26b0.png?v8",coin:"unicode/1fa99.png?v8",cold_face:"unicode/1f976.png?v8",cold_sweat:"unicode/1f630.png?v8",collision:"unicode/1f4a5.png?v8",colombia:"unicode/1f1e8-1f1f4.png?v8",comet:"unicode/2604.png?v8",comoros:"unicode/1f1f0-1f1f2.png?v8",compass:"unicode/1f9ed.png?v8",computer:"unicode/1f4bb.png?v8",computer_mouse:"unicode/1f5b1.png?v8",confetti_ball:"unicode/1f38a.png?v8",confounded:"unicode/1f616.png?v8",confused:"unicode/1f615.png?v8",congo_brazzaville:"unicode/1f1e8-1f1ec.png?v8",congo_kinshasa:"unicode/1f1e8-1f1e9.png?v8",congratulations:"unicode/3297.png?v8",construction:"unicode/1f6a7.png?v8",construction_worker:"unicode/1f477.png?v8",construction_worker_man:"unicode/1f477-2642.png?v8",construction_worker_woman:"unicode/1f477-2640.png?v8",control_knobs:"unicode/1f39b.png?v8",convenience_store:"unicode/1f3ea.png?v8",cook:"unicode/1f9d1-1f373.png?v8",cook_islands:"unicode/1f1e8-1f1f0.png?v8",cookie:"unicode/1f36a.png?v8",cool:"unicode/1f192.png?v8",cop:"unicode/1f46e.png?v8",copyright:"unicode/00a9.png?v8",corn:"unicode/1f33d.png?v8",costa_rica:"unicode/1f1e8-1f1f7.png?v8",cote_divoire:"unicode/1f1e8-1f1ee.png?v8",couch_and_lamp:"unicode/1f6cb.png?v8",couple:"unicode/1f46b.png?v8",couple_with_heart:"unicode/1f491.png?v8",couple_with_heart_man_man:"unicode/1f468-2764-1f468.png?v8",couple_with_heart_woman_man:"unicode/1f469-2764-1f468.png?v8",couple_with_heart_woman_woman:"unicode/1f469-2764-1f469.png?v8",couplekiss:"unicode/1f48f.png?v8",couplekiss_man_man:"unicode/1f468-2764-1f48b-1f468.png?v8",couplekiss_man_woman:"unicode/1f469-2764-1f48b-1f468.png?v8",couplekiss_woman_woman:"unicode/1f469-2764-1f48b-1f469.png?v8",cow:"unicode/1f42e.png?v8",cow2:"unicode/1f404.png?v8",cowboy_hat_face:"unicode/1f920.png?v8",crab:"unicode/1f980.png?v8",crayon:"unicode/1f58d.png?v8",credit_card:"unicode/1f4b3.png?v8",crescent_moon:"unicode/1f319.png?v8",cricket:"unicode/1f997.png?v8",cricket_game:"unicode/1f3cf.png?v8",croatia:"unicode/1f1ed-1f1f7.png?v8",crocodile:"unicode/1f40a.png?v8",croissant:"unicode/1f950.png?v8",crossed_fingers:"unicode/1f91e.png?v8",crossed_flags:"unicode/1f38c.png?v8",crossed_swords:"unicode/2694.png?v8",crown:"unicode/1f451.png?v8",cry:"unicode/1f622.png?v8",crying_cat_face:"unicode/1f63f.png?v8",crystal_ball:"unicode/1f52e.png?v8",cuba:"unicode/1f1e8-1f1fa.png?v8",cucumber:"unicode/1f952.png?v8",cup_with_straw:"unicode/1f964.png?v8",cupcake:"unicode/1f9c1.png?v8",cupid:"unicode/1f498.png?v8",curacao:"unicode/1f1e8-1f1fc.png?v8",curling_stone:"unicode/1f94c.png?v8",curly_haired_man:"unicode/1f468-1f9b1.png?v8",curly_haired_woman:"unicode/1f469-1f9b1.png?v8",curly_loop:"unicode/27b0.png?v8",currency_exchange:"unicode/1f4b1.png?v8",curry:"unicode/1f35b.png?v8",cursing_face:"unicode/1f92c.png?v8",custard:"unicode/1f36e.png?v8",customs:"unicode/1f6c3.png?v8",cut_of_meat:"unicode/1f969.png?v8",cyclone:"unicode/1f300.png?v8",cyprus:"unicode/1f1e8-1f1fe.png?v8",czech_republic:"unicode/1f1e8-1f1ff.png?v8",dagger:"unicode/1f5e1.png?v8",dancer:"unicode/1f483.png?v8",dancers:"unicode/1f46f.png?v8",dancing_men:"unicode/1f46f-2642.png?v8",dancing_women:"unicode/1f46f-2640.png?v8",dango:"unicode/1f361.png?v8",dark_sunglasses:"unicode/1f576.png?v8",dart:"unicode/1f3af.png?v8",dash:"unicode/1f4a8.png?v8",date:"unicode/1f4c5.png?v8",de:"unicode/1f1e9-1f1ea.png?v8",deaf_man:"unicode/1f9cf-2642.png?v8",deaf_person:"unicode/1f9cf.png?v8",deaf_woman:"unicode/1f9cf-2640.png?v8",deciduous_tree:"unicode/1f333.png?v8",deer:"unicode/1f98c.png?v8",denmark:"unicode/1f1e9-1f1f0.png?v8",department_store:"unicode/1f3ec.png?v8",dependabot:"dependabot.png?v8",derelict_house:"unicode/1f3da.png?v8",desert:"unicode/1f3dc.png?v8",desert_island:"unicode/1f3dd.png?v8",desktop_computer:"unicode/1f5a5.png?v8",detective:"unicode/1f575.png?v8",diamond_shape_with_a_dot_inside:"unicode/1f4a0.png?v8",diamonds:"unicode/2666.png?v8",diego_garcia:"unicode/1f1e9-1f1ec.png?v8",disappointed:"unicode/1f61e.png?v8",disappointed_relieved:"unicode/1f625.png?v8",disguised_face:"unicode/1f978.png?v8",diving_mask:"unicode/1f93f.png?v8",diya_lamp:"unicode/1fa94.png?v8",dizzy:"unicode/1f4ab.png?v8",dizzy_face:"unicode/1f635.png?v8",djibouti:"unicode/1f1e9-1f1ef.png?v8",dna:"unicode/1f9ec.png?v8",do_not_litter:"unicode/1f6af.png?v8",dodo:"unicode/1f9a4.png?v8",dog:"unicode/1f436.png?v8",dog2:"unicode/1f415.png?v8",dollar:"unicode/1f4b5.png?v8",dolls:"unicode/1f38e.png?v8",dolphin:"unicode/1f42c.png?v8",dominica:"unicode/1f1e9-1f1f2.png?v8",dominican_republic:"unicode/1f1e9-1f1f4.png?v8",door:"unicode/1f6aa.png?v8",doughnut:"unicode/1f369.png?v8",dove:"unicode/1f54a.png?v8",dragon:"unicode/1f409.png?v8",dragon_face:"unicode/1f432.png?v8",dress:"unicode/1f457.png?v8",dromedary_camel:"unicode/1f42a.png?v8",drooling_face:"unicode/1f924.png?v8",drop_of_blood:"unicode/1fa78.png?v8",droplet:"unicode/1f4a7.png?v8",drum:"unicode/1f941.png?v8",duck:"unicode/1f986.png?v8",dumpling:"unicode/1f95f.png?v8",dvd:"unicode/1f4c0.png?v8","e-mail":"unicode/1f4e7.png?v8",eagle:"unicode/1f985.png?v8",ear:"unicode/1f442.png?v8",ear_of_rice:"unicode/1f33e.png?v8",ear_with_hearing_aid:"unicode/1f9bb.png?v8",earth_africa:"unicode/1f30d.png?v8",earth_americas:"unicode/1f30e.png?v8",earth_asia:"unicode/1f30f.png?v8",ecuador:"unicode/1f1ea-1f1e8.png?v8",egg:"unicode/1f95a.png?v8",eggplant:"unicode/1f346.png?v8",egypt:"unicode/1f1ea-1f1ec.png?v8",eight:"unicode/0038-20e3.png?v8",eight_pointed_black_star:"unicode/2734.png?v8",eight_spoked_asterisk:"unicode/2733.png?v8",eject_button:"unicode/23cf.png?v8",el_salvador:"unicode/1f1f8-1f1fb.png?v8",electric_plug:"unicode/1f50c.png?v8",electron:"electron.png?v8",elephant:"unicode/1f418.png?v8",elevator:"unicode/1f6d7.png?v8",elf:"unicode/1f9dd.png?v8",elf_man:"unicode/1f9dd-2642.png?v8",elf_woman:"unicode/1f9dd-2640.png?v8",email:"unicode/1f4e7.png?v8",end:"unicode/1f51a.png?v8",england:"unicode/1f3f4-e0067-e0062-e0065-e006e-e0067-e007f.png?v8",envelope:"unicode/2709.png?v8",envelope_with_arrow:"unicode/1f4e9.png?v8",equatorial_guinea:"unicode/1f1ec-1f1f6.png?v8",eritrea:"unicode/1f1ea-1f1f7.png?v8",es:"unicode/1f1ea-1f1f8.png?v8",estonia:"unicode/1f1ea-1f1ea.png?v8",ethiopia:"unicode/1f1ea-1f1f9.png?v8",eu:"unicode/1f1ea-1f1fa.png?v8",euro:"unicode/1f4b6.png?v8",european_castle:"unicode/1f3f0.png?v8",european_post_office:"unicode/1f3e4.png?v8",european_union:"unicode/1f1ea-1f1fa.png?v8",evergreen_tree:"unicode/1f332.png?v8",exclamation:"unicode/2757.png?v8",exploding_head:"unicode/1f92f.png?v8",expressionless:"unicode/1f611.png?v8",eye:"unicode/1f441.png?v8",eye_speech_bubble:"unicode/1f441-1f5e8.png?v8",eyeglasses:"unicode/1f453.png?v8",eyes:"unicode/1f440.png?v8",face_exhaling:"unicode/1f62e-1f4a8.png?v8",face_in_clouds:"unicode/1f636-1f32b.png?v8",face_with_head_bandage:"unicode/1f915.png?v8",face_with_spiral_eyes:"unicode/1f635-1f4ab.png?v8",face_with_thermometer:"unicode/1f912.png?v8",facepalm:"unicode/1f926.png?v8",facepunch:"unicode/1f44a.png?v8",factory:"unicode/1f3ed.png?v8",factory_worker:"unicode/1f9d1-1f3ed.png?v8",fairy:"unicode/1f9da.png?v8",fairy_man:"unicode/1f9da-2642.png?v8",fairy_woman:"unicode/1f9da-2640.png?v8",falafel:"unicode/1f9c6.png?v8",falkland_islands:"unicode/1f1eb-1f1f0.png?v8",fallen_leaf:"unicode/1f342.png?v8",family:"unicode/1f46a.png?v8",family_man_boy:"unicode/1f468-1f466.png?v8",family_man_boy_boy:"unicode/1f468-1f466-1f466.png?v8",family_man_girl:"unicode/1f468-1f467.png?v8",family_man_girl_boy:"unicode/1f468-1f467-1f466.png?v8",family_man_girl_girl:"unicode/1f468-1f467-1f467.png?v8",family_man_man_boy:"unicode/1f468-1f468-1f466.png?v8",family_man_man_boy_boy:"unicode/1f468-1f468-1f466-1f466.png?v8",family_man_man_girl:"unicode/1f468-1f468-1f467.png?v8",family_man_man_girl_boy:"unicode/1f468-1f468-1f467-1f466.png?v8",family_man_man_girl_girl:"unicode/1f468-1f468-1f467-1f467.png?v8",family_man_woman_boy:"unicode/1f468-1f469-1f466.png?v8",family_man_woman_boy_boy:"unicode/1f468-1f469-1f466-1f466.png?v8",family_man_woman_girl:"unicode/1f468-1f469-1f467.png?v8",family_man_woman_girl_boy:"unicode/1f468-1f469-1f467-1f466.png?v8",family_man_woman_girl_girl:"unicode/1f468-1f469-1f467-1f467.png?v8",family_woman_boy:"unicode/1f469-1f466.png?v8",family_woman_boy_boy:"unicode/1f469-1f466-1f466.png?v8",family_woman_girl:"unicode/1f469-1f467.png?v8",family_woman_girl_boy:"unicode/1f469-1f467-1f466.png?v8",family_woman_girl_girl:"unicode/1f469-1f467-1f467.png?v8",family_woman_woman_boy:"unicode/1f469-1f469-1f466.png?v8",family_woman_woman_boy_boy:"unicode/1f469-1f469-1f466-1f466.png?v8",family_woman_woman_girl:"unicode/1f469-1f469-1f467.png?v8",family_woman_woman_girl_boy:"unicode/1f469-1f469-1f467-1f466.png?v8",family_woman_woman_girl_girl:"unicode/1f469-1f469-1f467-1f467.png?v8",farmer:"unicode/1f9d1-1f33e.png?v8",faroe_islands:"unicode/1f1eb-1f1f4.png?v8",fast_forward:"unicode/23e9.png?v8",fax:"unicode/1f4e0.png?v8",fearful:"unicode/1f628.png?v8",feather:"unicode/1fab6.png?v8",feelsgood:"feelsgood.png?v8",feet:"unicode/1f43e.png?v8",female_detective:"unicode/1f575-2640.png?v8",female_sign:"unicode/2640.png?v8",ferris_wheel:"unicode/1f3a1.png?v8",ferry:"unicode/26f4.png?v8",field_hockey:"unicode/1f3d1.png?v8",fiji:"unicode/1f1eb-1f1ef.png?v8",file_cabinet:"unicode/1f5c4.png?v8",file_folder:"unicode/1f4c1.png?v8",film_projector:"unicode/1f4fd.png?v8",film_strip:"unicode/1f39e.png?v8",finland:"unicode/1f1eb-1f1ee.png?v8",finnadie:"finnadie.png?v8",fire:"unicode/1f525.png?v8",fire_engine:"unicode/1f692.png?v8",fire_extinguisher:"unicode/1f9ef.png?v8",firecracker:"unicode/1f9e8.png?v8",firefighter:"unicode/1f9d1-1f692.png?v8",fireworks:"unicode/1f386.png?v8",first_quarter_moon:"unicode/1f313.png?v8",first_quarter_moon_with_face:"unicode/1f31b.png?v8",fish:"unicode/1f41f.png?v8",fish_cake:"unicode/1f365.png?v8",fishing_pole_and_fish:"unicode/1f3a3.png?v8",fishsticks:"fishsticks.png?v8",fist:"unicode/270a.png?v8",fist_left:"unicode/1f91b.png?v8",fist_oncoming:"unicode/1f44a.png?v8",fist_raised:"unicode/270a.png?v8",fist_right:"unicode/1f91c.png?v8",five:"unicode/0035-20e3.png?v8",flags:"unicode/1f38f.png?v8",flamingo:"unicode/1f9a9.png?v8",flashlight:"unicode/1f526.png?v8",flat_shoe:"unicode/1f97f.png?v8",flatbread:"unicode/1fad3.png?v8",fleur_de_lis:"unicode/269c.png?v8",flight_arrival:"unicode/1f6ec.png?v8",flight_departure:"unicode/1f6eb.png?v8",flipper:"unicode/1f42c.png?v8",floppy_disk:"unicode/1f4be.png?v8",flower_playing_cards:"unicode/1f3b4.png?v8",flushed:"unicode/1f633.png?v8",fly:"unicode/1fab0.png?v8",flying_disc:"unicode/1f94f.png?v8",flying_saucer:"unicode/1f6f8.png?v8",fog:"unicode/1f32b.png?v8",foggy:"unicode/1f301.png?v8",fondue:"unicode/1fad5.png?v8",foot:"unicode/1f9b6.png?v8",football:"unicode/1f3c8.png?v8",footprints:"unicode/1f463.png?v8",fork_and_knife:"unicode/1f374.png?v8",fortune_cookie:"unicode/1f960.png?v8",fountain:"unicode/26f2.png?v8",fountain_pen:"unicode/1f58b.png?v8",four:"unicode/0034-20e3.png?v8",four_leaf_clover:"unicode/1f340.png?v8",fox_face:"unicode/1f98a.png?v8",fr:"unicode/1f1eb-1f1f7.png?v8",framed_picture:"unicode/1f5bc.png?v8",free:"unicode/1f193.png?v8",french_guiana:"unicode/1f1ec-1f1eb.png?v8",french_polynesia:"unicode/1f1f5-1f1eb.png?v8",french_southern_territories:"unicode/1f1f9-1f1eb.png?v8",fried_egg:"unicode/1f373.png?v8",fried_shrimp:"unicode/1f364.png?v8",fries:"unicode/1f35f.png?v8",frog:"unicode/1f438.png?v8",frowning:"unicode/1f626.png?v8",frowning_face:"unicode/2639.png?v8",frowning_man:"unicode/1f64d-2642.png?v8",frowning_person:"unicode/1f64d.png?v8",frowning_woman:"unicode/1f64d-2640.png?v8",fu:"unicode/1f595.png?v8",fuelpump:"unicode/26fd.png?v8",full_moon:"unicode/1f315.png?v8",full_moon_with_face:"unicode/1f31d.png?v8",funeral_urn:"unicode/26b1.png?v8",gabon:"unicode/1f1ec-1f1e6.png?v8",gambia:"unicode/1f1ec-1f1f2.png?v8",game_die:"unicode/1f3b2.png?v8",garlic:"unicode/1f9c4.png?v8",gb:"unicode/1f1ec-1f1e7.png?v8",gear:"unicode/2699.png?v8",gem:"unicode/1f48e.png?v8",gemini:"unicode/264a.png?v8",genie:"unicode/1f9de.png?v8",genie_man:"unicode/1f9de-2642.png?v8",genie_woman:"unicode/1f9de-2640.png?v8",georgia:"unicode/1f1ec-1f1ea.png?v8",ghana:"unicode/1f1ec-1f1ed.png?v8",ghost:"unicode/1f47b.png?v8",gibraltar:"unicode/1f1ec-1f1ee.png?v8",gift:"unicode/1f381.png?v8",gift_heart:"unicode/1f49d.png?v8",giraffe:"unicode/1f992.png?v8",girl:"unicode/1f467.png?v8",globe_with_meridians:"unicode/1f310.png?v8",gloves:"unicode/1f9e4.png?v8",goal_net:"unicode/1f945.png?v8",goat:"unicode/1f410.png?v8",goberserk:"goberserk.png?v8",godmode:"godmode.png?v8",goggles:"unicode/1f97d.png?v8",golf:"unicode/26f3.png?v8",golfing:"unicode/1f3cc.png?v8",golfing_man:"unicode/1f3cc-2642.png?v8",golfing_woman:"unicode/1f3cc-2640.png?v8",gorilla:"unicode/1f98d.png?v8",grapes:"unicode/1f347.png?v8",greece:"unicode/1f1ec-1f1f7.png?v8",green_apple:"unicode/1f34f.png?v8",green_book:"unicode/1f4d7.png?v8",green_circle:"unicode/1f7e2.png?v8",green_heart:"unicode/1f49a.png?v8",green_salad:"unicode/1f957.png?v8",green_square:"unicode/1f7e9.png?v8",greenland:"unicode/1f1ec-1f1f1.png?v8",grenada:"unicode/1f1ec-1f1e9.png?v8",grey_exclamation:"unicode/2755.png?v8",grey_question:"unicode/2754.png?v8",grimacing:"unicode/1f62c.png?v8",grin:"unicode/1f601.png?v8",grinning:"unicode/1f600.png?v8",guadeloupe:"unicode/1f1ec-1f1f5.png?v8",guam:"unicode/1f1ec-1f1fa.png?v8",guard:"unicode/1f482.png?v8",guardsman:"unicode/1f482-2642.png?v8",guardswoman:"unicode/1f482-2640.png?v8",guatemala:"unicode/1f1ec-1f1f9.png?v8",guernsey:"unicode/1f1ec-1f1ec.png?v8",guide_dog:"unicode/1f9ae.png?v8",guinea:"unicode/1f1ec-1f1f3.png?v8",guinea_bissau:"unicode/1f1ec-1f1fc.png?v8",guitar:"unicode/1f3b8.png?v8",gun:"unicode/1f52b.png?v8",guyana:"unicode/1f1ec-1f1fe.png?v8",haircut:"unicode/1f487.png?v8",haircut_man:"unicode/1f487-2642.png?v8",haircut_woman:"unicode/1f487-2640.png?v8",haiti:"unicode/1f1ed-1f1f9.png?v8",hamburger:"unicode/1f354.png?v8",hammer:"unicode/1f528.png?v8",hammer_and_pick:"unicode/2692.png?v8",hammer_and_wrench:"unicode/1f6e0.png?v8",hamster:"unicode/1f439.png?v8",hand:"unicode/270b.png?v8",hand_over_mouth:"unicode/1f92d.png?v8",handbag:"unicode/1f45c.png?v8",handball_person:"unicode/1f93e.png?v8",handshake:"unicode/1f91d.png?v8",hankey:"unicode/1f4a9.png?v8",hash:"unicode/0023-20e3.png?v8",hatched_chick:"unicode/1f425.png?v8",hatching_chick:"unicode/1f423.png?v8",headphones:"unicode/1f3a7.png?v8",headstone:"unicode/1faa6.png?v8",health_worker:"unicode/1f9d1-2695.png?v8",hear_no_evil:"unicode/1f649.png?v8",heard_mcdonald_islands:"unicode/1f1ed-1f1f2.png?v8",heart:"unicode/2764.png?v8",heart_decoration:"unicode/1f49f.png?v8",heart_eyes:"unicode/1f60d.png?v8",heart_eyes_cat:"unicode/1f63b.png?v8",heart_on_fire:"unicode/2764-1f525.png?v8",heartbeat:"unicode/1f493.png?v8",heartpulse:"unicode/1f497.png?v8",hearts:"unicode/2665.png?v8",heavy_check_mark:"unicode/2714.png?v8",heavy_division_sign:"unicode/2797.png?v8",heavy_dollar_sign:"unicode/1f4b2.png?v8",heavy_exclamation_mark:"unicode/2757.png?v8",heavy_heart_exclamation:"unicode/2763.png?v8",heavy_minus_sign:"unicode/2796.png?v8",heavy_multiplication_x:"unicode/2716.png?v8",heavy_plus_sign:"unicode/2795.png?v8",hedgehog:"unicode/1f994.png?v8",helicopter:"unicode/1f681.png?v8",herb:"unicode/1f33f.png?v8",hibiscus:"unicode/1f33a.png?v8",high_brightness:"unicode/1f506.png?v8",high_heel:"unicode/1f460.png?v8",hiking_boot:"unicode/1f97e.png?v8",hindu_temple:"unicode/1f6d5.png?v8",hippopotamus:"unicode/1f99b.png?v8",hocho:"unicode/1f52a.png?v8",hole:"unicode/1f573.png?v8",honduras:"unicode/1f1ed-1f1f3.png?v8",honey_pot:"unicode/1f36f.png?v8",honeybee:"unicode/1f41d.png?v8",hong_kong:"unicode/1f1ed-1f1f0.png?v8",hook:"unicode/1fa9d.png?v8",horse:"unicode/1f434.png?v8",horse_racing:"unicode/1f3c7.png?v8",hospital:"unicode/1f3e5.png?v8",hot_face:"unicode/1f975.png?v8",hot_pepper:"unicode/1f336.png?v8",hotdog:"unicode/1f32d.png?v8",hotel:"unicode/1f3e8.png?v8",hotsprings:"unicode/2668.png?v8",hourglass:"unicode/231b.png?v8",hourglass_flowing_sand:"unicode/23f3.png?v8",house:"unicode/1f3e0.png?v8",house_with_garden:"unicode/1f3e1.png?v8",houses:"unicode/1f3d8.png?v8",hugs:"unicode/1f917.png?v8",hungary:"unicode/1f1ed-1f1fa.png?v8",hurtrealbad:"hurtrealbad.png?v8",hushed:"unicode/1f62f.png?v8",hut:"unicode/1f6d6.png?v8",ice_cream:"unicode/1f368.png?v8",ice_cube:"unicode/1f9ca.png?v8",ice_hockey:"unicode/1f3d2.png?v8",ice_skate:"unicode/26f8.png?v8",icecream:"unicode/1f366.png?v8",iceland:"unicode/1f1ee-1f1f8.png?v8",id:"unicode/1f194.png?v8",ideograph_advantage:"unicode/1f250.png?v8",imp:"unicode/1f47f.png?v8",inbox_tray:"unicode/1f4e5.png?v8",incoming_envelope:"unicode/1f4e8.png?v8",india:"unicode/1f1ee-1f1f3.png?v8",indonesia:"unicode/1f1ee-1f1e9.png?v8",infinity:"unicode/267e.png?v8",information_desk_person:"unicode/1f481.png?v8",information_source:"unicode/2139.png?v8",innocent:"unicode/1f607.png?v8",interrobang:"unicode/2049.png?v8",iphone:"unicode/1f4f1.png?v8",iran:"unicode/1f1ee-1f1f7.png?v8",iraq:"unicode/1f1ee-1f1f6.png?v8",ireland:"unicode/1f1ee-1f1ea.png?v8",isle_of_man:"unicode/1f1ee-1f1f2.png?v8",israel:"unicode/1f1ee-1f1f1.png?v8",it:"unicode/1f1ee-1f1f9.png?v8",izakaya_lantern:"unicode/1f3ee.png?v8",jack_o_lantern:"unicode/1f383.png?v8",jamaica:"unicode/1f1ef-1f1f2.png?v8",japan:"unicode/1f5fe.png?v8",japanese_castle:"unicode/1f3ef.png?v8",japanese_goblin:"unicode/1f47a.png?v8",japanese_ogre:"unicode/1f479.png?v8",jeans:"unicode/1f456.png?v8",jersey:"unicode/1f1ef-1f1ea.png?v8",jigsaw:"unicode/1f9e9.png?v8",jordan:"unicode/1f1ef-1f1f4.png?v8",joy:"unicode/1f602.png?v8",joy_cat:"unicode/1f639.png?v8",joystick:"unicode/1f579.png?v8",jp:"unicode/1f1ef-1f1f5.png?v8",judge:"unicode/1f9d1-2696.png?v8",juggling_person:"unicode/1f939.png?v8",kaaba:"unicode/1f54b.png?v8",kangaroo:"unicode/1f998.png?v8",kazakhstan:"unicode/1f1f0-1f1ff.png?v8",kenya:"unicode/1f1f0-1f1ea.png?v8",key:"unicode/1f511.png?v8",keyboard:"unicode/2328.png?v8",keycap_ten:"unicode/1f51f.png?v8",kick_scooter:"unicode/1f6f4.png?v8",kimono:"unicode/1f458.png?v8",kiribati:"unicode/1f1f0-1f1ee.png?v8",kiss:"unicode/1f48b.png?v8",kissing:"unicode/1f617.png?v8",kissing_cat:"unicode/1f63d.png?v8",kissing_closed_eyes:"unicode/1f61a.png?v8",kissing_heart:"unicode/1f618.png?v8",kissing_smiling_eyes:"unicode/1f619.png?v8",kite:"unicode/1fa81.png?v8",kiwi_fruit:"unicode/1f95d.png?v8",kneeling_man:"unicode/1f9ce-2642.png?v8",kneeling_person:"unicode/1f9ce.png?v8",kneeling_woman:"unicode/1f9ce-2640.png?v8",knife:"unicode/1f52a.png?v8",knot:"unicode/1faa2.png?v8",koala:"unicode/1f428.png?v8",koko:"unicode/1f201.png?v8",kosovo:"unicode/1f1fd-1f1f0.png?v8",kr:"unicode/1f1f0-1f1f7.png?v8",kuwait:"unicode/1f1f0-1f1fc.png?v8",kyrgyzstan:"unicode/1f1f0-1f1ec.png?v8",lab_coat:"unicode/1f97c.png?v8",label:"unicode/1f3f7.png?v8",lacrosse:"unicode/1f94d.png?v8",ladder:"unicode/1fa9c.png?v8",lady_beetle:"unicode/1f41e.png?v8",lantern:"unicode/1f3ee.png?v8",laos:"unicode/1f1f1-1f1e6.png?v8",large_blue_circle:"unicode/1f535.png?v8",large_blue_diamond:"unicode/1f537.png?v8",large_orange_diamond:"unicode/1f536.png?v8",last_quarter_moon:"unicode/1f317.png?v8",last_quarter_moon_with_face:"unicode/1f31c.png?v8",latin_cross:"unicode/271d.png?v8",latvia:"unicode/1f1f1-1f1fb.png?v8",laughing:"unicode/1f606.png?v8",leafy_green:"unicode/1f96c.png?v8",leaves:"unicode/1f343.png?v8",lebanon:"unicode/1f1f1-1f1e7.png?v8",ledger:"unicode/1f4d2.png?v8",left_luggage:"unicode/1f6c5.png?v8",left_right_arrow:"unicode/2194.png?v8",left_speech_bubble:"unicode/1f5e8.png?v8",leftwards_arrow_with_hook:"unicode/21a9.png?v8",leg:"unicode/1f9b5.png?v8",lemon:"unicode/1f34b.png?v8",leo:"unicode/264c.png?v8",leopard:"unicode/1f406.png?v8",lesotho:"unicode/1f1f1-1f1f8.png?v8",level_slider:"unicode/1f39a.png?v8",liberia:"unicode/1f1f1-1f1f7.png?v8",libra:"unicode/264e.png?v8",libya:"unicode/1f1f1-1f1fe.png?v8",liechtenstein:"unicode/1f1f1-1f1ee.png?v8",light_rail:"unicode/1f688.png?v8",link:"unicode/1f517.png?v8",lion:"unicode/1f981.png?v8",lips:"unicode/1f444.png?v8",lipstick:"unicode/1f484.png?v8",lithuania:"unicode/1f1f1-1f1f9.png?v8",lizard:"unicode/1f98e.png?v8",llama:"unicode/1f999.png?v8",lobster:"unicode/1f99e.png?v8",lock:"unicode/1f512.png?v8",lock_with_ink_pen:"unicode/1f50f.png?v8",lollipop:"unicode/1f36d.png?v8",long_drum:"unicode/1fa98.png?v8",loop:"unicode/27bf.png?v8",lotion_bottle:"unicode/1f9f4.png?v8",lotus_position:"unicode/1f9d8.png?v8",lotus_position_man:"unicode/1f9d8-2642.png?v8",lotus_position_woman:"unicode/1f9d8-2640.png?v8",loud_sound:"unicode/1f50a.png?v8",loudspeaker:"unicode/1f4e2.png?v8",love_hotel:"unicode/1f3e9.png?v8",love_letter:"unicode/1f48c.png?v8",love_you_gesture:"unicode/1f91f.png?v8",low_brightness:"unicode/1f505.png?v8",luggage:"unicode/1f9f3.png?v8",lungs:"unicode/1fac1.png?v8",luxembourg:"unicode/1f1f1-1f1fa.png?v8",lying_face:"unicode/1f925.png?v8",m:"unicode/24c2.png?v8",macau:"unicode/1f1f2-1f1f4.png?v8",macedonia:"unicode/1f1f2-1f1f0.png?v8",madagascar:"unicode/1f1f2-1f1ec.png?v8",mag:"unicode/1f50d.png?v8",mag_right:"unicode/1f50e.png?v8",mage:"unicode/1f9d9.png?v8",mage_man:"unicode/1f9d9-2642.png?v8",mage_woman:"unicode/1f9d9-2640.png?v8",magic_wand:"unicode/1fa84.png?v8",magnet:"unicode/1f9f2.png?v8",mahjong:"unicode/1f004.png?v8",mailbox:"unicode/1f4eb.png?v8",mailbox_closed:"unicode/1f4ea.png?v8",mailbox_with_mail:"unicode/1f4ec.png?v8",mailbox_with_no_mail:"unicode/1f4ed.png?v8",malawi:"unicode/1f1f2-1f1fc.png?v8",malaysia:"unicode/1f1f2-1f1fe.png?v8",maldives:"unicode/1f1f2-1f1fb.png?v8",male_detective:"unicode/1f575-2642.png?v8",male_sign:"unicode/2642.png?v8",mali:"unicode/1f1f2-1f1f1.png?v8",malta:"unicode/1f1f2-1f1f9.png?v8",mammoth:"unicode/1f9a3.png?v8",man:"unicode/1f468.png?v8",man_artist:"unicode/1f468-1f3a8.png?v8",man_astronaut:"unicode/1f468-1f680.png?v8",man_beard:"unicode/1f9d4-2642.png?v8",man_cartwheeling:"unicode/1f938-2642.png?v8",man_cook:"unicode/1f468-1f373.png?v8",man_dancing:"unicode/1f57a.png?v8",man_facepalming:"unicode/1f926-2642.png?v8",man_factory_worker:"unicode/1f468-1f3ed.png?v8",man_farmer:"unicode/1f468-1f33e.png?v8",man_feeding_baby:"unicode/1f468-1f37c.png?v8",man_firefighter:"unicode/1f468-1f692.png?v8",man_health_worker:"unicode/1f468-2695.png?v8",man_in_manual_wheelchair:"unicode/1f468-1f9bd.png?v8",man_in_motorized_wheelchair:"unicode/1f468-1f9bc.png?v8",man_in_tuxedo:"unicode/1f935-2642.png?v8",man_judge:"unicode/1f468-2696.png?v8",man_juggling:"unicode/1f939-2642.png?v8",man_mechanic:"unicode/1f468-1f527.png?v8",man_office_worker:"unicode/1f468-1f4bc.png?v8",man_pilot:"unicode/1f468-2708.png?v8",man_playing_handball:"unicode/1f93e-2642.png?v8",man_playing_water_polo:"unicode/1f93d-2642.png?v8",man_scientist:"unicode/1f468-1f52c.png?v8",man_shrugging:"unicode/1f937-2642.png?v8",man_singer:"unicode/1f468-1f3a4.png?v8",man_student:"unicode/1f468-1f393.png?v8",man_teacher:"unicode/1f468-1f3eb.png?v8",man_technologist:"unicode/1f468-1f4bb.png?v8",man_with_gua_pi_mao:"unicode/1f472.png?v8",man_with_probing_cane:"unicode/1f468-1f9af.png?v8",man_with_turban:"unicode/1f473-2642.png?v8",man_with_veil:"unicode/1f470-2642.png?v8",mandarin:"unicode/1f34a.png?v8",mango:"unicode/1f96d.png?v8",mans_shoe:"unicode/1f45e.png?v8",mantelpiece_clock:"unicode/1f570.png?v8",manual_wheelchair:"unicode/1f9bd.png?v8",maple_leaf:"unicode/1f341.png?v8",marshall_islands:"unicode/1f1f2-1f1ed.png?v8",martial_arts_uniform:"unicode/1f94b.png?v8",martinique:"unicode/1f1f2-1f1f6.png?v8",mask:"unicode/1f637.png?v8",massage:"unicode/1f486.png?v8",massage_man:"unicode/1f486-2642.png?v8",massage_woman:"unicode/1f486-2640.png?v8",mate:"unicode/1f9c9.png?v8",mauritania:"unicode/1f1f2-1f1f7.png?v8",mauritius:"unicode/1f1f2-1f1fa.png?v8",mayotte:"unicode/1f1fe-1f1f9.png?v8",meat_on_bone:"unicode/1f356.png?v8",mechanic:"unicode/1f9d1-1f527.png?v8",mechanical_arm:"unicode/1f9be.png?v8",mechanical_leg:"unicode/1f9bf.png?v8",medal_military:"unicode/1f396.png?v8",medal_sports:"unicode/1f3c5.png?v8",medical_symbol:"unicode/2695.png?v8",mega:"unicode/1f4e3.png?v8",melon:"unicode/1f348.png?v8",memo:"unicode/1f4dd.png?v8",men_wrestling:"unicode/1f93c-2642.png?v8",mending_heart:"unicode/2764-1fa79.png?v8",menorah:"unicode/1f54e.png?v8",mens:"unicode/1f6b9.png?v8",mermaid:"unicode/1f9dc-2640.png?v8",merman:"unicode/1f9dc-2642.png?v8",merperson:"unicode/1f9dc.png?v8",metal:"unicode/1f918.png?v8",metro:"unicode/1f687.png?v8",mexico:"unicode/1f1f2-1f1fd.png?v8",microbe:"unicode/1f9a0.png?v8",micronesia:"unicode/1f1eb-1f1f2.png?v8",microphone:"unicode/1f3a4.png?v8",microscope:"unicode/1f52c.png?v8",middle_finger:"unicode/1f595.png?v8",military_helmet:"unicode/1fa96.png?v8",milk_glass:"unicode/1f95b.png?v8",milky_way:"unicode/1f30c.png?v8",minibus:"unicode/1f690.png?v8",minidisc:"unicode/1f4bd.png?v8",mirror:"unicode/1fa9e.png?v8",mobile_phone_off:"unicode/1f4f4.png?v8",moldova:"unicode/1f1f2-1f1e9.png?v8",monaco:"unicode/1f1f2-1f1e8.png?v8",money_mouth_face:"unicode/1f911.png?v8",money_with_wings:"unicode/1f4b8.png?v8",moneybag:"unicode/1f4b0.png?v8",mongolia:"unicode/1f1f2-1f1f3.png?v8",monkey:"unicode/1f412.png?v8",monkey_face:"unicode/1f435.png?v8",monocle_face:"unicode/1f9d0.png?v8",monorail:"unicode/1f69d.png?v8",montenegro:"unicode/1f1f2-1f1ea.png?v8",montserrat:"unicode/1f1f2-1f1f8.png?v8",moon:"unicode/1f314.png?v8",moon_cake:"unicode/1f96e.png?v8",morocco:"unicode/1f1f2-1f1e6.png?v8",mortar_board:"unicode/1f393.png?v8",mosque:"unicode/1f54c.png?v8",mosquito:"unicode/1f99f.png?v8",motor_boat:"unicode/1f6e5.png?v8",motor_scooter:"unicode/1f6f5.png?v8",motorcycle:"unicode/1f3cd.png?v8",motorized_wheelchair:"unicode/1f9bc.png?v8",motorway:"unicode/1f6e3.png?v8",mount_fuji:"unicode/1f5fb.png?v8",mountain:"unicode/26f0.png?v8",mountain_bicyclist:"unicode/1f6b5.png?v8",mountain_biking_man:"unicode/1f6b5-2642.png?v8",mountain_biking_woman:"unicode/1f6b5-2640.png?v8",mountain_cableway:"unicode/1f6a0.png?v8",mountain_railway:"unicode/1f69e.png?v8",mountain_snow:"unicode/1f3d4.png?v8",mouse:"unicode/1f42d.png?v8",mouse2:"unicode/1f401.png?v8",mouse_trap:"unicode/1faa4.png?v8",movie_camera:"unicode/1f3a5.png?v8",moyai:"unicode/1f5ff.png?v8",mozambique:"unicode/1f1f2-1f1ff.png?v8",mrs_claus:"unicode/1f936.png?v8",muscle:"unicode/1f4aa.png?v8",mushroom:"unicode/1f344.png?v8",musical_keyboard:"unicode/1f3b9.png?v8",musical_note:"unicode/1f3b5.png?v8",musical_score:"unicode/1f3bc.png?v8",mute:"unicode/1f507.png?v8",mx_claus:"unicode/1f9d1-1f384.png?v8",myanmar:"unicode/1f1f2-1f1f2.png?v8",nail_care:"unicode/1f485.png?v8",name_badge:"unicode/1f4db.png?v8",namibia:"unicode/1f1f3-1f1e6.png?v8",national_park:"unicode/1f3de.png?v8",nauru:"unicode/1f1f3-1f1f7.png?v8",nauseated_face:"unicode/1f922.png?v8",nazar_amulet:"unicode/1f9ff.png?v8",neckbeard:"neckbeard.png?v8",necktie:"unicode/1f454.png?v8",negative_squared_cross_mark:"unicode/274e.png?v8",nepal:"unicode/1f1f3-1f1f5.png?v8",nerd_face:"unicode/1f913.png?v8",nesting_dolls:"unicode/1fa86.png?v8",netherlands:"unicode/1f1f3-1f1f1.png?v8",neutral_face:"unicode/1f610.png?v8",new:"unicode/1f195.png?v8",new_caledonia:"unicode/1f1f3-1f1e8.png?v8",new_moon:"unicode/1f311.png?v8",new_moon_with_face:"unicode/1f31a.png?v8",new_zealand:"unicode/1f1f3-1f1ff.png?v8",newspaper:"unicode/1f4f0.png?v8",newspaper_roll:"unicode/1f5de.png?v8",next_track_button:"unicode/23ed.png?v8",ng:"unicode/1f196.png?v8",ng_man:"unicode/1f645-2642.png?v8",ng_woman:"unicode/1f645-2640.png?v8",nicaragua:"unicode/1f1f3-1f1ee.png?v8",niger:"unicode/1f1f3-1f1ea.png?v8",nigeria:"unicode/1f1f3-1f1ec.png?v8",night_with_stars:"unicode/1f303.png?v8",nine:"unicode/0039-20e3.png?v8",ninja:"unicode/1f977.png?v8",niue:"unicode/1f1f3-1f1fa.png?v8",no_bell:"unicode/1f515.png?v8",no_bicycles:"unicode/1f6b3.png?v8",no_entry:"unicode/26d4.png?v8",no_entry_sign:"unicode/1f6ab.png?v8",no_good:"unicode/1f645.png?v8",no_good_man:"unicode/1f645-2642.png?v8",no_good_woman:"unicode/1f645-2640.png?v8",no_mobile_phones:"unicode/1f4f5.png?v8",no_mouth:"unicode/1f636.png?v8",no_pedestrians:"unicode/1f6b7.png?v8",no_smoking:"unicode/1f6ad.png?v8","non-potable_water":"unicode/1f6b1.png?v8",norfolk_island:"unicode/1f1f3-1f1eb.png?v8",north_korea:"unicode/1f1f0-1f1f5.png?v8",northern_mariana_islands:"unicode/1f1f2-1f1f5.png?v8",norway:"unicode/1f1f3-1f1f4.png?v8",nose:"unicode/1f443.png?v8",notebook:"unicode/1f4d3.png?v8",notebook_with_decorative_cover:"unicode/1f4d4.png?v8",notes:"unicode/1f3b6.png?v8",nut_and_bolt:"unicode/1f529.png?v8",o:"unicode/2b55.png?v8",o2:"unicode/1f17e.png?v8",ocean:"unicode/1f30a.png?v8",octocat:"octocat.png?v8",octopus:"unicode/1f419.png?v8",oden:"unicode/1f362.png?v8",office:"unicode/1f3e2.png?v8",office_worker:"unicode/1f9d1-1f4bc.png?v8",oil_drum:"unicode/1f6e2.png?v8",ok:"unicode/1f197.png?v8",ok_hand:"unicode/1f44c.png?v8",ok_man:"unicode/1f646-2642.png?v8",ok_person:"unicode/1f646.png?v8",ok_woman:"unicode/1f646-2640.png?v8",old_key:"unicode/1f5dd.png?v8",older_adult:"unicode/1f9d3.png?v8",older_man:"unicode/1f474.png?v8",older_woman:"unicode/1f475.png?v8",olive:"unicode/1fad2.png?v8",om:"unicode/1f549.png?v8",oman:"unicode/1f1f4-1f1f2.png?v8",on:"unicode/1f51b.png?v8",oncoming_automobile:"unicode/1f698.png?v8",oncoming_bus:"unicode/1f68d.png?v8",oncoming_police_car:"unicode/1f694.png?v8",oncoming_taxi:"unicode/1f696.png?v8",one:"unicode/0031-20e3.png?v8",one_piece_swimsuit:"unicode/1fa71.png?v8",onion:"unicode/1f9c5.png?v8",open_book:"unicode/1f4d6.png?v8",open_file_folder:"unicode/1f4c2.png?v8",open_hands:"unicode/1f450.png?v8",open_mouth:"unicode/1f62e.png?v8",open_umbrella:"unicode/2602.png?v8",ophiuchus:"unicode/26ce.png?v8",orange:"unicode/1f34a.png?v8",orange_book:"unicode/1f4d9.png?v8",orange_circle:"unicode/1f7e0.png?v8",orange_heart:"unicode/1f9e1.png?v8",orange_square:"unicode/1f7e7.png?v8",orangutan:"unicode/1f9a7.png?v8",orthodox_cross:"unicode/2626.png?v8",otter:"unicode/1f9a6.png?v8",outbox_tray:"unicode/1f4e4.png?v8",owl:"unicode/1f989.png?v8",ox:"unicode/1f402.png?v8",oyster:"unicode/1f9aa.png?v8",package:"unicode/1f4e6.png?v8",page_facing_up:"unicode/1f4c4.png?v8",page_with_curl:"unicode/1f4c3.png?v8",pager:"unicode/1f4df.png?v8",paintbrush:"unicode/1f58c.png?v8",pakistan:"unicode/1f1f5-1f1f0.png?v8",palau:"unicode/1f1f5-1f1fc.png?v8",palestinian_territories:"unicode/1f1f5-1f1f8.png?v8",palm_tree:"unicode/1f334.png?v8",palms_up_together:"unicode/1f932.png?v8",panama:"unicode/1f1f5-1f1e6.png?v8",pancakes:"unicode/1f95e.png?v8",panda_face:"unicode/1f43c.png?v8",paperclip:"unicode/1f4ce.png?v8",paperclips:"unicode/1f587.png?v8",papua_new_guinea:"unicode/1f1f5-1f1ec.png?v8",parachute:"unicode/1fa82.png?v8",paraguay:"unicode/1f1f5-1f1fe.png?v8",parasol_on_ground:"unicode/26f1.png?v8",parking:"unicode/1f17f.png?v8",parrot:"unicode/1f99c.png?v8",part_alternation_mark:"unicode/303d.png?v8",partly_sunny:"unicode/26c5.png?v8",partying_face:"unicode/1f973.png?v8",passenger_ship:"unicode/1f6f3.png?v8",passport_control:"unicode/1f6c2.png?v8",pause_button:"unicode/23f8.png?v8",paw_prints:"unicode/1f43e.png?v8",peace_symbol:"unicode/262e.png?v8",peach:"unicode/1f351.png?v8",peacock:"unicode/1f99a.png?v8",peanuts:"unicode/1f95c.png?v8",pear:"unicode/1f350.png?v8",pen:"unicode/1f58a.png?v8",pencil:"unicode/1f4dd.png?v8",pencil2:"unicode/270f.png?v8",penguin:"unicode/1f427.png?v8",pensive:"unicode/1f614.png?v8",people_holding_hands:"unicode/1f9d1-1f91d-1f9d1.png?v8",people_hugging:"unicode/1fac2.png?v8",performing_arts:"unicode/1f3ad.png?v8",persevere:"unicode/1f623.png?v8",person_bald:"unicode/1f9d1-1f9b2.png?v8",person_curly_hair:"unicode/1f9d1-1f9b1.png?v8",person_feeding_baby:"unicode/1f9d1-1f37c.png?v8",person_fencing:"unicode/1f93a.png?v8",person_in_manual_wheelchair:"unicode/1f9d1-1f9bd.png?v8",person_in_motorized_wheelchair:"unicode/1f9d1-1f9bc.png?v8",person_in_tuxedo:"unicode/1f935.png?v8",person_red_hair:"unicode/1f9d1-1f9b0.png?v8",person_white_hair:"unicode/1f9d1-1f9b3.png?v8",person_with_probing_cane:"unicode/1f9d1-1f9af.png?v8",person_with_turban:"unicode/1f473.png?v8",person_with_veil:"unicode/1f470.png?v8",peru:"unicode/1f1f5-1f1ea.png?v8",petri_dish:"unicode/1f9eb.png?v8",philippines:"unicode/1f1f5-1f1ed.png?v8",phone:"unicode/260e.png?v8",pick:"unicode/26cf.png?v8",pickup_truck:"unicode/1f6fb.png?v8",pie:"unicode/1f967.png?v8",pig:"unicode/1f437.png?v8",pig2:"unicode/1f416.png?v8",pig_nose:"unicode/1f43d.png?v8",pill:"unicode/1f48a.png?v8",pilot:"unicode/1f9d1-2708.png?v8",pinata:"unicode/1fa85.png?v8",pinched_fingers:"unicode/1f90c.png?v8",pinching_hand:"unicode/1f90f.png?v8",pineapple:"unicode/1f34d.png?v8",ping_pong:"unicode/1f3d3.png?v8",pirate_flag:"unicode/1f3f4-2620.png?v8",pisces:"unicode/2653.png?v8",pitcairn_islands:"unicode/1f1f5-1f1f3.png?v8",pizza:"unicode/1f355.png?v8",placard:"unicode/1faa7.png?v8",place_of_worship:"unicode/1f6d0.png?v8",plate_with_cutlery:"unicode/1f37d.png?v8",play_or_pause_button:"unicode/23ef.png?v8",pleading_face:"unicode/1f97a.png?v8",plunger:"unicode/1faa0.png?v8",point_down:"unicode/1f447.png?v8",point_left:"unicode/1f448.png?v8",point_right:"unicode/1f449.png?v8",point_up:"unicode/261d.png?v8",point_up_2:"unicode/1f446.png?v8",poland:"unicode/1f1f5-1f1f1.png?v8",polar_bear:"unicode/1f43b-2744.png?v8",police_car:"unicode/1f693.png?v8",police_officer:"unicode/1f46e.png?v8",policeman:"unicode/1f46e-2642.png?v8",policewoman:"unicode/1f46e-2640.png?v8",poodle:"unicode/1f429.png?v8",poop:"unicode/1f4a9.png?v8",popcorn:"unicode/1f37f.png?v8",portugal:"unicode/1f1f5-1f1f9.png?v8",post_office:"unicode/1f3e3.png?v8",postal_horn:"unicode/1f4ef.png?v8",postbox:"unicode/1f4ee.png?v8",potable_water:"unicode/1f6b0.png?v8",potato:"unicode/1f954.png?v8",potted_plant:"unicode/1fab4.png?v8",pouch:"unicode/1f45d.png?v8",poultry_leg:"unicode/1f357.png?v8",pound:"unicode/1f4b7.png?v8",pout:"unicode/1f621.png?v8",pouting_cat:"unicode/1f63e.png?v8",pouting_face:"unicode/1f64e.png?v8",pouting_man:"unicode/1f64e-2642.png?v8",pouting_woman:"unicode/1f64e-2640.png?v8",pray:"unicode/1f64f.png?v8",prayer_beads:"unicode/1f4ff.png?v8",pregnant_woman:"unicode/1f930.png?v8",pretzel:"unicode/1f968.png?v8",previous_track_button:"unicode/23ee.png?v8",prince:"unicode/1f934.png?v8",princess:"unicode/1f478.png?v8",printer:"unicode/1f5a8.png?v8",probing_cane:"unicode/1f9af.png?v8",puerto_rico:"unicode/1f1f5-1f1f7.png?v8",punch:"unicode/1f44a.png?v8",purple_circle:"unicode/1f7e3.png?v8",purple_heart:"unicode/1f49c.png?v8",purple_square:"unicode/1f7ea.png?v8",purse:"unicode/1f45b.png?v8",pushpin:"unicode/1f4cc.png?v8",put_litter_in_its_place:"unicode/1f6ae.png?v8",qatar:"unicode/1f1f6-1f1e6.png?v8",question:"unicode/2753.png?v8",rabbit:"unicode/1f430.png?v8",rabbit2:"unicode/1f407.png?v8",raccoon:"unicode/1f99d.png?v8",racehorse:"unicode/1f40e.png?v8",racing_car:"unicode/1f3ce.png?v8",radio:"unicode/1f4fb.png?v8",radio_button:"unicode/1f518.png?v8",radioactive:"unicode/2622.png?v8",rage:"unicode/1f621.png?v8",rage1:"rage1.png?v8",rage2:"rage2.png?v8",rage3:"rage3.png?v8",rage4:"rage4.png?v8",railway_car:"unicode/1f683.png?v8",railway_track:"unicode/1f6e4.png?v8",rainbow:"unicode/1f308.png?v8",rainbow_flag:"unicode/1f3f3-1f308.png?v8",raised_back_of_hand:"unicode/1f91a.png?v8",raised_eyebrow:"unicode/1f928.png?v8",raised_hand:"unicode/270b.png?v8",raised_hand_with_fingers_splayed:"unicode/1f590.png?v8",raised_hands:"unicode/1f64c.png?v8",raising_hand:"unicode/1f64b.png?v8",raising_hand_man:"unicode/1f64b-2642.png?v8",raising_hand_woman:"unicode/1f64b-2640.png?v8",ram:"unicode/1f40f.png?v8",ramen:"unicode/1f35c.png?v8",rat:"unicode/1f400.png?v8",razor:"unicode/1fa92.png?v8",receipt:"unicode/1f9fe.png?v8",record_button:"unicode/23fa.png?v8",recycle:"unicode/267b.png?v8",red_car:"unicode/1f697.png?v8",red_circle:"unicode/1f534.png?v8",red_envelope:"unicode/1f9e7.png?v8",red_haired_man:"unicode/1f468-1f9b0.png?v8",red_haired_woman:"unicode/1f469-1f9b0.png?v8",red_square:"unicode/1f7e5.png?v8",registered:"unicode/00ae.png?v8",relaxed:"unicode/263a.png?v8",relieved:"unicode/1f60c.png?v8",reminder_ribbon:"unicode/1f397.png?v8",repeat:"unicode/1f501.png?v8",repeat_one:"unicode/1f502.png?v8",rescue_worker_helmet:"unicode/26d1.png?v8",restroom:"unicode/1f6bb.png?v8",reunion:"unicode/1f1f7-1f1ea.png?v8",revolving_hearts:"unicode/1f49e.png?v8",rewind:"unicode/23ea.png?v8",rhinoceros:"unicode/1f98f.png?v8",ribbon:"unicode/1f380.png?v8",rice:"unicode/1f35a.png?v8",rice_ball:"unicode/1f359.png?v8",rice_cracker:"unicode/1f358.png?v8",rice_scene:"unicode/1f391.png?v8",right_anger_bubble:"unicode/1f5ef.png?v8",ring:"unicode/1f48d.png?v8",ringed_planet:"unicode/1fa90.png?v8",robot:"unicode/1f916.png?v8",rock:"unicode/1faa8.png?v8",rocket:"unicode/1f680.png?v8",rofl:"unicode/1f923.png?v8",roll_eyes:"unicode/1f644.png?v8",roll_of_paper:"unicode/1f9fb.png?v8",roller_coaster:"unicode/1f3a2.png?v8",roller_skate:"unicode/1f6fc.png?v8",romania:"unicode/1f1f7-1f1f4.png?v8",rooster:"unicode/1f413.png?v8",rose:"unicode/1f339.png?v8",rosette:"unicode/1f3f5.png?v8",rotating_light:"unicode/1f6a8.png?v8",round_pushpin:"unicode/1f4cd.png?v8",rowboat:"unicode/1f6a3.png?v8",rowing_man:"unicode/1f6a3-2642.png?v8",rowing_woman:"unicode/1f6a3-2640.png?v8",ru:"unicode/1f1f7-1f1fa.png?v8",rugby_football:"unicode/1f3c9.png?v8",runner:"unicode/1f3c3.png?v8",running:"unicode/1f3c3.png?v8",running_man:"unicode/1f3c3-2642.png?v8",running_shirt_with_sash:"unicode/1f3bd.png?v8",running_woman:"unicode/1f3c3-2640.png?v8",rwanda:"unicode/1f1f7-1f1fc.png?v8",sa:"unicode/1f202.png?v8",safety_pin:"unicode/1f9f7.png?v8",safety_vest:"unicode/1f9ba.png?v8",sagittarius:"unicode/2650.png?v8",sailboat:"unicode/26f5.png?v8",sake:"unicode/1f376.png?v8",salt:"unicode/1f9c2.png?v8",samoa:"unicode/1f1fc-1f1f8.png?v8",san_marino:"unicode/1f1f8-1f1f2.png?v8",sandal:"unicode/1f461.png?v8",sandwich:"unicode/1f96a.png?v8",santa:"unicode/1f385.png?v8",sao_tome_principe:"unicode/1f1f8-1f1f9.png?v8",sari:"unicode/1f97b.png?v8",sassy_man:"unicode/1f481-2642.png?v8",sassy_woman:"unicode/1f481-2640.png?v8",satellite:"unicode/1f4e1.png?v8",satisfied:"unicode/1f606.png?v8",saudi_arabia:"unicode/1f1f8-1f1e6.png?v8",sauna_man:"unicode/1f9d6-2642.png?v8",sauna_person:"unicode/1f9d6.png?v8",sauna_woman:"unicode/1f9d6-2640.png?v8",sauropod:"unicode/1f995.png?v8",saxophone:"unicode/1f3b7.png?v8",scarf:"unicode/1f9e3.png?v8",school:"unicode/1f3eb.png?v8",school_satchel:"unicode/1f392.png?v8",scientist:"unicode/1f9d1-1f52c.png?v8",scissors:"unicode/2702.png?v8",scorpion:"unicode/1f982.png?v8",scorpius:"unicode/264f.png?v8",scotland:"unicode/1f3f4-e0067-e0062-e0073-e0063-e0074-e007f.png?v8",scream:"unicode/1f631.png?v8",scream_cat:"unicode/1f640.png?v8",screwdriver:"unicode/1fa9b.png?v8",scroll:"unicode/1f4dc.png?v8",seal:"unicode/1f9ad.png?v8",seat:"unicode/1f4ba.png?v8",secret:"unicode/3299.png?v8",see_no_evil:"unicode/1f648.png?v8",seedling:"unicode/1f331.png?v8",selfie:"unicode/1f933.png?v8",senegal:"unicode/1f1f8-1f1f3.png?v8",serbia:"unicode/1f1f7-1f1f8.png?v8",service_dog:"unicode/1f415-1f9ba.png?v8",seven:"unicode/0037-20e3.png?v8",sewing_needle:"unicode/1faa1.png?v8",seychelles:"unicode/1f1f8-1f1e8.png?v8",shallow_pan_of_food:"unicode/1f958.png?v8",shamrock:"unicode/2618.png?v8",shark:"unicode/1f988.png?v8",shaved_ice:"unicode/1f367.png?v8",sheep:"unicode/1f411.png?v8",shell:"unicode/1f41a.png?v8",shield:"unicode/1f6e1.png?v8",shinto_shrine:"unicode/26e9.png?v8",ship:"unicode/1f6a2.png?v8",shipit:"shipit.png?v8",shirt:"unicode/1f455.png?v8",shit:"unicode/1f4a9.png?v8",shoe:"unicode/1f45e.png?v8",shopping:"unicode/1f6cd.png?v8",shopping_cart:"unicode/1f6d2.png?v8",shorts:"unicode/1fa73.png?v8",shower:"unicode/1f6bf.png?v8",shrimp:"unicode/1f990.png?v8",shrug:"unicode/1f937.png?v8",shushing_face:"unicode/1f92b.png?v8",sierra_leone:"unicode/1f1f8-1f1f1.png?v8",signal_strength:"unicode/1f4f6.png?v8",singapore:"unicode/1f1f8-1f1ec.png?v8",singer:"unicode/1f9d1-1f3a4.png?v8",sint_maarten:"unicode/1f1f8-1f1fd.png?v8",six:"unicode/0036-20e3.png?v8",six_pointed_star:"unicode/1f52f.png?v8",skateboard:"unicode/1f6f9.png?v8",ski:"unicode/1f3bf.png?v8",skier:"unicode/26f7.png?v8",skull:"unicode/1f480.png?v8",skull_and_crossbones:"unicode/2620.png?v8",skunk:"unicode/1f9a8.png?v8",sled:"unicode/1f6f7.png?v8",sleeping:"unicode/1f634.png?v8",sleeping_bed:"unicode/1f6cc.png?v8",sleepy:"unicode/1f62a.png?v8",slightly_frowning_face:"unicode/1f641.png?v8",slightly_smiling_face:"unicode/1f642.png?v8",slot_machine:"unicode/1f3b0.png?v8",sloth:"unicode/1f9a5.png?v8",slovakia:"unicode/1f1f8-1f1f0.png?v8",slovenia:"unicode/1f1f8-1f1ee.png?v8",small_airplane:"unicode/1f6e9.png?v8",small_blue_diamond:"unicode/1f539.png?v8",small_orange_diamond:"unicode/1f538.png?v8",small_red_triangle:"unicode/1f53a.png?v8",small_red_triangle_down:"unicode/1f53b.png?v8",smile:"unicode/1f604.png?v8",smile_cat:"unicode/1f638.png?v8",smiley:"unicode/1f603.png?v8",smiley_cat:"unicode/1f63a.png?v8",smiling_face_with_tear:"unicode/1f972.png?v8",smiling_face_with_three_hearts:"unicode/1f970.png?v8",smiling_imp:"unicode/1f608.png?v8",smirk:"unicode/1f60f.png?v8",smirk_cat:"unicode/1f63c.png?v8",smoking:"unicode/1f6ac.png?v8",snail:"unicode/1f40c.png?v8",snake:"unicode/1f40d.png?v8",sneezing_face:"unicode/1f927.png?v8",snowboarder:"unicode/1f3c2.png?v8",snowflake:"unicode/2744.png?v8",snowman:"unicode/26c4.png?v8",snowman_with_snow:"unicode/2603.png?v8",soap:"unicode/1f9fc.png?v8",sob:"unicode/1f62d.png?v8",soccer:"unicode/26bd.png?v8",socks:"unicode/1f9e6.png?v8",softball:"unicode/1f94e.png?v8",solomon_islands:"unicode/1f1f8-1f1e7.png?v8",somalia:"unicode/1f1f8-1f1f4.png?v8",soon:"unicode/1f51c.png?v8",sos:"unicode/1f198.png?v8",sound:"unicode/1f509.png?v8",south_africa:"unicode/1f1ff-1f1e6.png?v8",south_georgia_south_sandwich_islands:"unicode/1f1ec-1f1f8.png?v8",south_sudan:"unicode/1f1f8-1f1f8.png?v8",space_invader:"unicode/1f47e.png?v8",spades:"unicode/2660.png?v8",spaghetti:"unicode/1f35d.png?v8",sparkle:"unicode/2747.png?v8",sparkler:"unicode/1f387.png?v8",sparkles:"unicode/2728.png?v8",sparkling_heart:"unicode/1f496.png?v8",speak_no_evil:"unicode/1f64a.png?v8",speaker:"unicode/1f508.png?v8",speaking_head:"unicode/1f5e3.png?v8",speech_balloon:"unicode/1f4ac.png?v8",speedboat:"unicode/1f6a4.png?v8",spider:"unicode/1f577.png?v8",spider_web:"unicode/1f578.png?v8",spiral_calendar:"unicode/1f5d3.png?v8",spiral_notepad:"unicode/1f5d2.png?v8",sponge:"unicode/1f9fd.png?v8",spoon:"unicode/1f944.png?v8",squid:"unicode/1f991.png?v8",sri_lanka:"unicode/1f1f1-1f1f0.png?v8",st_barthelemy:"unicode/1f1e7-1f1f1.png?v8",st_helena:"unicode/1f1f8-1f1ed.png?v8",st_kitts_nevis:"unicode/1f1f0-1f1f3.png?v8",st_lucia:"unicode/1f1f1-1f1e8.png?v8",st_martin:"unicode/1f1f2-1f1eb.png?v8",st_pierre_miquelon:"unicode/1f1f5-1f1f2.png?v8",st_vincent_grenadines:"unicode/1f1fb-1f1e8.png?v8",stadium:"unicode/1f3df.png?v8",standing_man:"unicode/1f9cd-2642.png?v8",standing_person:"unicode/1f9cd.png?v8",standing_woman:"unicode/1f9cd-2640.png?v8",star:"unicode/2b50.png?v8",star2:"unicode/1f31f.png?v8",star_and_crescent:"unicode/262a.png?v8",star_of_david:"unicode/2721.png?v8",star_struck:"unicode/1f929.png?v8",stars:"unicode/1f320.png?v8",station:"unicode/1f689.png?v8",statue_of_liberty:"unicode/1f5fd.png?v8",steam_locomotive:"unicode/1f682.png?v8",stethoscope:"unicode/1fa7a.png?v8",stew:"unicode/1f372.png?v8",stop_button:"unicode/23f9.png?v8",stop_sign:"unicode/1f6d1.png?v8",stopwatch:"unicode/23f1.png?v8",straight_ruler:"unicode/1f4cf.png?v8",strawberry:"unicode/1f353.png?v8",stuck_out_tongue:"unicode/1f61b.png?v8",stuck_out_tongue_closed_eyes:"unicode/1f61d.png?v8",stuck_out_tongue_winking_eye:"unicode/1f61c.png?v8",student:"unicode/1f9d1-1f393.png?v8",studio_microphone:"unicode/1f399.png?v8",stuffed_flatbread:"unicode/1f959.png?v8",sudan:"unicode/1f1f8-1f1e9.png?v8",sun_behind_large_cloud:"unicode/1f325.png?v8",sun_behind_rain_cloud:"unicode/1f326.png?v8",sun_behind_small_cloud:"unicode/1f324.png?v8",sun_with_face:"unicode/1f31e.png?v8",sunflower:"unicode/1f33b.png?v8",sunglasses:"unicode/1f60e.png?v8",sunny:"unicode/2600.png?v8",sunrise:"unicode/1f305.png?v8",sunrise_over_mountains:"unicode/1f304.png?v8",superhero:"unicode/1f9b8.png?v8",superhero_man:"unicode/1f9b8-2642.png?v8",superhero_woman:"unicode/1f9b8-2640.png?v8",supervillain:"unicode/1f9b9.png?v8",supervillain_man:"unicode/1f9b9-2642.png?v8",supervillain_woman:"unicode/1f9b9-2640.png?v8",surfer:"unicode/1f3c4.png?v8",surfing_man:"unicode/1f3c4-2642.png?v8",surfing_woman:"unicode/1f3c4-2640.png?v8",suriname:"unicode/1f1f8-1f1f7.png?v8",sushi:"unicode/1f363.png?v8",suspect:"suspect.png?v8",suspension_railway:"unicode/1f69f.png?v8",svalbard_jan_mayen:"unicode/1f1f8-1f1ef.png?v8",swan:"unicode/1f9a2.png?v8",swaziland:"unicode/1f1f8-1f1ff.png?v8",sweat:"unicode/1f613.png?v8",sweat_drops:"unicode/1f4a6.png?v8",sweat_smile:"unicode/1f605.png?v8",sweden:"unicode/1f1f8-1f1ea.png?v8",sweet_potato:"unicode/1f360.png?v8",swim_brief:"unicode/1fa72.png?v8",swimmer:"unicode/1f3ca.png?v8",swimming_man:"unicode/1f3ca-2642.png?v8",swimming_woman:"unicode/1f3ca-2640.png?v8",switzerland:"unicode/1f1e8-1f1ed.png?v8",symbols:"unicode/1f523.png?v8",synagogue:"unicode/1f54d.png?v8",syria:"unicode/1f1f8-1f1fe.png?v8",syringe:"unicode/1f489.png?v8","t-rex":"unicode/1f996.png?v8",taco:"unicode/1f32e.png?v8",tada:"unicode/1f389.png?v8",taiwan:"unicode/1f1f9-1f1fc.png?v8",tajikistan:"unicode/1f1f9-1f1ef.png?v8",takeout_box:"unicode/1f961.png?v8",tamale:"unicode/1fad4.png?v8",tanabata_tree:"unicode/1f38b.png?v8",tangerine:"unicode/1f34a.png?v8",tanzania:"unicode/1f1f9-1f1ff.png?v8",taurus:"unicode/2649.png?v8",taxi:"unicode/1f695.png?v8",tea:"unicode/1f375.png?v8",teacher:"unicode/1f9d1-1f3eb.png?v8",teapot:"unicode/1fad6.png?v8",technologist:"unicode/1f9d1-1f4bb.png?v8",teddy_bear:"unicode/1f9f8.png?v8",telephone:"unicode/260e.png?v8",telephone_receiver:"unicode/1f4de.png?v8",telescope:"unicode/1f52d.png?v8",tennis:"unicode/1f3be.png?v8",tent:"unicode/26fa.png?v8",test_tube:"unicode/1f9ea.png?v8",thailand:"unicode/1f1f9-1f1ed.png?v8",thermometer:"unicode/1f321.png?v8",thinking:"unicode/1f914.png?v8",thong_sandal:"unicode/1fa74.png?v8",thought_balloon:"unicode/1f4ad.png?v8",thread:"unicode/1f9f5.png?v8",three:"unicode/0033-20e3.png?v8",thumbsdown:"unicode/1f44e.png?v8",thumbsup:"unicode/1f44d.png?v8",ticket:"unicode/1f3ab.png?v8",tickets:"unicode/1f39f.png?v8",tiger:"unicode/1f42f.png?v8",tiger2:"unicode/1f405.png?v8",timer_clock:"unicode/23f2.png?v8",timor_leste:"unicode/1f1f9-1f1f1.png?v8",tipping_hand_man:"unicode/1f481-2642.png?v8",tipping_hand_person:"unicode/1f481.png?v8",tipping_hand_woman:"unicode/1f481-2640.png?v8",tired_face:"unicode/1f62b.png?v8",tm:"unicode/2122.png?v8",togo:"unicode/1f1f9-1f1ec.png?v8",toilet:"unicode/1f6bd.png?v8",tokelau:"unicode/1f1f9-1f1f0.png?v8",tokyo_tower:"unicode/1f5fc.png?v8",tomato:"unicode/1f345.png?v8",tonga:"unicode/1f1f9-1f1f4.png?v8",tongue:"unicode/1f445.png?v8",toolbox:"unicode/1f9f0.png?v8",tooth:"unicode/1f9b7.png?v8",toothbrush:"unicode/1faa5.png?v8",top:"unicode/1f51d.png?v8",tophat:"unicode/1f3a9.png?v8",tornado:"unicode/1f32a.png?v8",tr:"unicode/1f1f9-1f1f7.png?v8",trackball:"unicode/1f5b2.png?v8",tractor:"unicode/1f69c.png?v8",traffic_light:"unicode/1f6a5.png?v8",train:"unicode/1f68b.png?v8",train2:"unicode/1f686.png?v8",tram:"unicode/1f68a.png?v8",transgender_flag:"unicode/1f3f3-26a7.png?v8",transgender_symbol:"unicode/26a7.png?v8",triangular_flag_on_post:"unicode/1f6a9.png?v8",triangular_ruler:"unicode/1f4d0.png?v8",trident:"unicode/1f531.png?v8",trinidad_tobago:"unicode/1f1f9-1f1f9.png?v8",tristan_da_cunha:"unicode/1f1f9-1f1e6.png?v8",triumph:"unicode/1f624.png?v8",trolleybus:"unicode/1f68e.png?v8",trollface:"trollface.png?v8",trophy:"unicode/1f3c6.png?v8",tropical_drink:"unicode/1f379.png?v8",tropical_fish:"unicode/1f420.png?v8",truck:"unicode/1f69a.png?v8",trumpet:"unicode/1f3ba.png?v8",tshirt:"unicode/1f455.png?v8",tulip:"unicode/1f337.png?v8",tumbler_glass:"unicode/1f943.png?v8",tunisia:"unicode/1f1f9-1f1f3.png?v8",turkey:"unicode/1f983.png?v8",turkmenistan:"unicode/1f1f9-1f1f2.png?v8",turks_caicos_islands:"unicode/1f1f9-1f1e8.png?v8",turtle:"unicode/1f422.png?v8",tuvalu:"unicode/1f1f9-1f1fb.png?v8",tv:"unicode/1f4fa.png?v8",twisted_rightwards_arrows:"unicode/1f500.png?v8",two:"unicode/0032-20e3.png?v8",two_hearts:"unicode/1f495.png?v8",two_men_holding_hands:"unicode/1f46c.png?v8",two_women_holding_hands:"unicode/1f46d.png?v8",u5272:"unicode/1f239.png?v8",u5408:"unicode/1f234.png?v8",u55b6:"unicode/1f23a.png?v8",u6307:"unicode/1f22f.png?v8",u6708:"unicode/1f237.png?v8",u6709:"unicode/1f236.png?v8",u6e80:"unicode/1f235.png?v8",u7121:"unicode/1f21a.png?v8",u7533:"unicode/1f238.png?v8",u7981:"unicode/1f232.png?v8",u7a7a:"unicode/1f233.png?v8",uganda:"unicode/1f1fa-1f1ec.png?v8",uk:"unicode/1f1ec-1f1e7.png?v8",ukraine:"unicode/1f1fa-1f1e6.png?v8",umbrella:"unicode/2614.png?v8",unamused:"unicode/1f612.png?v8",underage:"unicode/1f51e.png?v8",unicorn:"unicode/1f984.png?v8",united_arab_emirates:"unicode/1f1e6-1f1ea.png?v8",united_nations:"unicode/1f1fa-1f1f3.png?v8",unlock:"unicode/1f513.png?v8",up:"unicode/1f199.png?v8",upside_down_face:"unicode/1f643.png?v8",uruguay:"unicode/1f1fa-1f1fe.png?v8",us:"unicode/1f1fa-1f1f8.png?v8",us_outlying_islands:"unicode/1f1fa-1f1f2.png?v8",us_virgin_islands:"unicode/1f1fb-1f1ee.png?v8",uzbekistan:"unicode/1f1fa-1f1ff.png?v8",v:"unicode/270c.png?v8",vampire:"unicode/1f9db.png?v8",vampire_man:"unicode/1f9db-2642.png?v8",vampire_woman:"unicode/1f9db-2640.png?v8",vanuatu:"unicode/1f1fb-1f1fa.png?v8",vatican_city:"unicode/1f1fb-1f1e6.png?v8",venezuela:"unicode/1f1fb-1f1ea.png?v8",vertical_traffic_light:"unicode/1f6a6.png?v8",vhs:"unicode/1f4fc.png?v8",vibration_mode:"unicode/1f4f3.png?v8",video_camera:"unicode/1f4f9.png?v8",video_game:"unicode/1f3ae.png?v8",vietnam:"unicode/1f1fb-1f1f3.png?v8",violin:"unicode/1f3bb.png?v8",virgo:"unicode/264d.png?v8",volcano:"unicode/1f30b.png?v8",volleyball:"unicode/1f3d0.png?v8",vomiting_face:"unicode/1f92e.png?v8",vs:"unicode/1f19a.png?v8",vulcan_salute:"unicode/1f596.png?v8",waffle:"unicode/1f9c7.png?v8",wales:"unicode/1f3f4-e0067-e0062-e0077-e006c-e0073-e007f.png?v8",walking:"unicode/1f6b6.png?v8",walking_man:"unicode/1f6b6-2642.png?v8",walking_woman:"unicode/1f6b6-2640.png?v8",wallis_futuna:"unicode/1f1fc-1f1eb.png?v8",waning_crescent_moon:"unicode/1f318.png?v8",waning_gibbous_moon:"unicode/1f316.png?v8",warning:"unicode/26a0.png?v8",wastebasket:"unicode/1f5d1.png?v8",watch:"unicode/231a.png?v8",water_buffalo:"unicode/1f403.png?v8",water_polo:"unicode/1f93d.png?v8",watermelon:"unicode/1f349.png?v8",wave:"unicode/1f44b.png?v8",wavy_dash:"unicode/3030.png?v8",waxing_crescent_moon:"unicode/1f312.png?v8",waxing_gibbous_moon:"unicode/1f314.png?v8",wc:"unicode/1f6be.png?v8",weary:"unicode/1f629.png?v8",wedding:"unicode/1f492.png?v8",weight_lifting:"unicode/1f3cb.png?v8",weight_lifting_man:"unicode/1f3cb-2642.png?v8",weight_lifting_woman:"unicode/1f3cb-2640.png?v8",western_sahara:"unicode/1f1ea-1f1ed.png?v8",whale:"unicode/1f433.png?v8",whale2:"unicode/1f40b.png?v8",wheel_of_dharma:"unicode/2638.png?v8",wheelchair:"unicode/267f.png?v8",white_check_mark:"unicode/2705.png?v8",white_circle:"unicode/26aa.png?v8",white_flag:"unicode/1f3f3.png?v8",white_flower:"unicode/1f4ae.png?v8",white_haired_man:"unicode/1f468-1f9b3.png?v8",white_haired_woman:"unicode/1f469-1f9b3.png?v8",white_heart:"unicode/1f90d.png?v8",white_large_square:"unicode/2b1c.png?v8",white_medium_small_square:"unicode/25fd.png?v8",white_medium_square:"unicode/25fb.png?v8",white_small_square:"unicode/25ab.png?v8",white_square_button:"unicode/1f533.png?v8",wilted_flower:"unicode/1f940.png?v8",wind_chime:"unicode/1f390.png?v8",wind_face:"unicode/1f32c.png?v8",window:"unicode/1fa9f.png?v8",wine_glass:"unicode/1f377.png?v8",wink:"unicode/1f609.png?v8",wolf:"unicode/1f43a.png?v8",woman:"unicode/1f469.png?v8",woman_artist:"unicode/1f469-1f3a8.png?v8",woman_astronaut:"unicode/1f469-1f680.png?v8",woman_beard:"unicode/1f9d4-2640.png?v8",woman_cartwheeling:"unicode/1f938-2640.png?v8",woman_cook:"unicode/1f469-1f373.png?v8",woman_dancing:"unicode/1f483.png?v8",woman_facepalming:"unicode/1f926-2640.png?v8",woman_factory_worker:"unicode/1f469-1f3ed.png?v8",woman_farmer:"unicode/1f469-1f33e.png?v8",woman_feeding_baby:"unicode/1f469-1f37c.png?v8",woman_firefighter:"unicode/1f469-1f692.png?v8",woman_health_worker:"unicode/1f469-2695.png?v8",woman_in_manual_wheelchair:"unicode/1f469-1f9bd.png?v8",woman_in_motorized_wheelchair:"unicode/1f469-1f9bc.png?v8",woman_in_tuxedo:"unicode/1f935-2640.png?v8",woman_judge:"unicode/1f469-2696.png?v8",woman_juggling:"unicode/1f939-2640.png?v8",woman_mechanic:"unicode/1f469-1f527.png?v8",woman_office_worker:"unicode/1f469-1f4bc.png?v8",woman_pilot:"unicode/1f469-2708.png?v8",woman_playing_handball:"unicode/1f93e-2640.png?v8",woman_playing_water_polo:"unicode/1f93d-2640.png?v8",woman_scientist:"unicode/1f469-1f52c.png?v8",woman_shrugging:"unicode/1f937-2640.png?v8",woman_singer:"unicode/1f469-1f3a4.png?v8",woman_student:"unicode/1f469-1f393.png?v8",woman_teacher:"unicode/1f469-1f3eb.png?v8",woman_technologist:"unicode/1f469-1f4bb.png?v8",woman_with_headscarf:"unicode/1f9d5.png?v8",woman_with_probing_cane:"unicode/1f469-1f9af.png?v8",woman_with_turban:"unicode/1f473-2640.png?v8",woman_with_veil:"unicode/1f470-2640.png?v8",womans_clothes:"unicode/1f45a.png?v8",womans_hat:"unicode/1f452.png?v8",women_wrestling:"unicode/1f93c-2640.png?v8",womens:"unicode/1f6ba.png?v8",wood:"unicode/1fab5.png?v8",woozy_face:"unicode/1f974.png?v8",world_map:"unicode/1f5fa.png?v8",worm:"unicode/1fab1.png?v8",worried:"unicode/1f61f.png?v8",wrench:"unicode/1f527.png?v8",wrestling:"unicode/1f93c.png?v8",writing_hand:"unicode/270d.png?v8",x:"unicode/274c.png?v8",yarn:"unicode/1f9f6.png?v8",yawning_face:"unicode/1f971.png?v8",yellow_circle:"unicode/1f7e1.png?v8",yellow_heart:"unicode/1f49b.png?v8",yellow_square:"unicode/1f7e8.png?v8",yemen:"unicode/1f1fe-1f1ea.png?v8",yen:"unicode/1f4b4.png?v8",yin_yang:"unicode/262f.png?v8",yo_yo:"unicode/1fa80.png?v8",yum:"unicode/1f60b.png?v8",zambia:"unicode/1f1ff-1f1f2.png?v8",zany_face:"unicode/1f92a.png?v8",zap:"unicode/26a1.png?v8",zebra:"unicode/1f993.png?v8",zero:"unicode/0030-20e3.png?v8",zimbabwe:"unicode/1f1ff-1f1fc.png?v8",zipper_mouth_face:"unicode/1f910.png?v8",zombie:"unicode/1f9df.png?v8",zombie_man:"unicode/1f9df-2642.png?v8",zombie_woman:"unicode/1f9df-2640.png?v8",zzz:"unicode/1f4a4.png?v8"}};function je(n){void 0===n&&(n="");var e={};return n&&(n=n.replace(/^('|")/,"").replace(/('|")$/,"").replace(/(?:^|\s):([\w-]+:?)=?([\w-%]+)?/g,(function(n,i,o){return-1===i.indexOf(":")?(e[i]=o&&o.replace(/"/g,"")||!0,""):n})).trim()),{str:n,config:e}}function Le(n){return void 0===n&&(n=""),n.replace(/(<\/?a.*?>)/gi,"")}var Ce=bn((function(n){var e=function(n){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,i=0,o={},c={manual:n.Prism&&n.Prism.manual,disableWorkerMessageHandler:n.Prism&&n.Prism.disableWorkerMessageHandler,util:{encode:function n(e){return e instanceof a?new a(e.type,n(e.content),e.alias):Array.isArray(e)?e.map(n):e.replace(/&/g,"&").replace(/=p.reach);x+=y.value.length,y=y.next){var S=y.value;if(e.length>n.length)return;if(!(S instanceof a)){var A,z=1;if(m){if(!(A=t(k,x,n,h))||A.index>=n.length)break;var E=A.index,$=A.index+A[0].length,T=x;for(T+=y.value.length;E>=T;)T+=(y=y.next).value.length;if(x=T-=y.value.length,y.value instanceof a)continue;for(var O=y;O!==e.tail&&(T<$||"string"==typeof O.value);O=O.next)z++,T+=O.value.length;z--,S=n.slice(x,T),A.index-=x}else if(!(A=t(k,0,S,h)))continue;E=A.index;var R=A[0],j=S.slice(0,E),L=S.slice(E+R.length),C=x+S.length;p&&C>p.reach&&(p.reach=C);var q=y.prev;if(j&&(q=r(e,q,j),x+=j.length),d(e,q,z),y=r(e,q,new a(g,_?c.tokenize(R,_):R,b,R)),L&&r(e,y,L),z>1){var F={cause:g+","+l,reach:C};f(n,e,i,y.prev,x,F),p&&F.reach>p.reach&&(p.reach=F.reach)}}}}}}function u(){var n={value:null,prev:null,next:null},e={value:null,prev:n,next:null};n.next=e,this.head=n,this.tail=e,this.length=0}function r(n,e,i){var o=e.next,c={value:i,prev:e,next:o};return e.next=c,o.prev=c,n.length++,c}function d(n,e,i){for(var o=e.next,c=0;c"+a.content+""},!n.document)return n.addEventListener?(c.disableWorkerMessageHandler||n.addEventListener("message",(function(e){var i=JSON.parse(e.data),o=i.language,a=i.code,t=i.immediateClose;n.postMessage(c.highlight(a,c.languages[o],o)),t&&n.close()}),!1),c):c;var p=c.util.currentScript();function g(){c.manual||c.highlightAll()}if(p&&(c.filename=p.src,p.hasAttribute("data-manual")&&(c.manual=!0)),!c.manual){var s=document.readyState;"loading"===s||"interactive"===s&&p&&p.defer?document.addEventListener("DOMContentLoaded",g):window.requestAnimationFrame?window.requestAnimationFrame(g):window.setTimeout(g,16)}return c}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});n.exports&&(n.exports=e),void 0!==mn&&(mn.Prism=e),e.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},e.languages.markup.tag.inside["attr-value"].inside.entity=e.languages.markup.entity,e.languages.markup.doctype.inside["internal-subset"].inside=e.languages.markup,e.hooks.add("wrap",(function(n){"entity"===n.type&&(n.attributes.title=n.content.replace(/&/,"&"))})),Object.defineProperty(e.languages.markup.tag,"addInlined",{value:function(n,i){var o={};o["language-"+i]={pattern:/(^$)/i,lookbehind:!0,inside:e.languages[i]},o.cdata=/^$/i;var c={"included-cdata":{pattern://i,inside:o}};c["language-"+i]={pattern:/[\s\S]+/,inside:e.languages[i]};var a={};a[n]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return n})),"i"),lookbehind:!0,greedy:!0,inside:c},e.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(e.languages.markup.tag,"addAttribute",{value:function(n,i){e.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+n+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[i,"language-"+i],inside:e.languages[i]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),e.languages.html=e.languages.markup,e.languages.mathml=e.languages.markup,e.languages.svg=e.languages.markup,e.languages.xml=e.languages.extend("markup",{}),e.languages.ssml=e.languages.xml,e.languages.atom=e.languages.xml,e.languages.rss=e.languages.xml,function(n){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;n.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+e.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},n.languages.css.atrule.inside.rest=n.languages.css;var i=n.languages.markup;i&&(i.tag.addInlined("style","css"),i.tag.addAttribute("style","css"))}(e),e.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},e.languages.javascript=e.languages.extend("clike",{"class-name":[e.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),e.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,e.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:e.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:e.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:e.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:e.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:e.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),e.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:e.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),e.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),e.languages.markup&&(e.languages.markup.tag.addInlined("script","javascript"),e.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),e.languages.js=e.languages.javascript,function(){if(void 0!==e&&"undefined"!=typeof document){Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var n={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},i="data-src-status",o="loading",c="loaded",a="pre[data-src]:not(["+i+'="'+c+'"]):not(['+i+'="'+o+'"])';e.hooks.add("before-highlightall",(function(n){n.selector+=", "+a})),e.hooks.add("before-sanity-check",(function(t){var f=t.element;if(f.matches(a)){t.code="",f.setAttribute(i,o);var u=f.appendChild(document.createElement("CODE"));u.textContent="Loading…";var r=f.getAttribute("data-src"),d=t.language;if("none"===d){var p=(/\.(\w+)$/.exec(r)||[,"none"])[1];d=n[p]||p}e.util.setLanguage(u,d),e.util.setLanguage(f,d);var g=e.plugins.autoloader;g&&g.loadLanguages(d),function(n,o,a){var t=new XMLHttpRequest;t.open("GET",n,!0),t.onreadystatechange=function(){4==t.readyState&&(t.status<400&&t.responseText?function(n){f.setAttribute(i,c);var o=function(n){var e=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(n||"");if(e){var i=Number(e[1]),o=e[2],c=e[3];return o?c?[i,Number(c)]:[i,void 0]:[i,i]}}(f.getAttribute("data-range"));if(o){var a=n.split(/\r\n?|\n/g),t=o[0],r=null==o[1]?a.length:o[1];t<0&&(t+=a.length),t=Math.max(0,Math.min(t-1,a.length)),r<0&&(r+=a.length),r=Math.max(0,Math.min(r,a.length)),n=a.slice(t,r).join("\n"),f.hasAttribute("data-start")||f.setAttribute("data-start",String(t+1))}u.textContent=n,e.highlightElement(u)}(t.responseText):t.status>=400?a("✖ Error "+t.status+" while fetching file: "+t.statusText):a("✖ Error: File does not exist or is empty"))},t.send(null)}(r,0,(function(n){f.setAttribute(i,"failed"),u.textContent=n}))}})),e.plugins.fileHighlight={highlight:function(n){for(var i,o=(n||document).querySelectorAll(a),c=0;i=o[c++];)e.highlightElement(i)}};var t=!1;e.fileHighlight=function(){t||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),t=!0),e.plugins.fileHighlight.highlight.apply(this,arguments)}}}()}));!function(n){function e(n,e){return"___"+n.toUpperCase()+e+"___"}Object.defineProperties(n.languages["markup-templating"]={},{buildPlaceholders:{value:function(i,o,c,a){if(i.language===o){var t=i.tokenStack=[];i.code=i.code.replace(c,(function(n){if("function"==typeof a&&!a(n))return n;for(var c,f=t.length;-1!==i.code.indexOf(c=e(o,f));)++f;return t[f]=n,c})),i.grammar=n.languages.markup}}},tokenizePlaceholders:{value:function(i,o){if(i.language===o&&i.tokenStack){i.grammar=n.languages[o];var c=0,a=Object.keys(i.tokenStack);!function t(f){for(var u=0;u=a.length);u++){var r=f[u];if("string"==typeof r||r.content&&"string"==typeof r.content){var d=a[c],p=i.tokenStack[d],g="string"==typeof r?r:r.content,s=e(o,d),l=g.indexOf(s);if(l>-1){++c;var v=g.substring(0,l),_=new n.Token(o,n.tokenize(p,i.grammar),"language-"+o,p),h=g.substring(l+s.length),m=[];v&&m.push.apply(m,t([v])),m.push(_),h&&m.push.apply(m,t([h])),"string"==typeof r?f.splice.apply(f,[u,1].concat(m)):r.content=m}}else r.content&&t(r.content)}return f}(i.tokens)}}}})}(Prism);var qe={},Fe={markdown:function(n){return{url:n}},mermaid:function(n){return{url:n}},iframe:function(n,e){return{html:'"}},video:function(n,e){return{html:'"}},audio:function(n,e){return{html:'"}},code:function(n,e){var i=n.match(/\.(\w+)$/);return"md"===(i=e||i&&i[1])&&(i="markdown"),{url:n,lang:i}}},Pe=function(e,i){var o=this;this.config=e,this.router=i,this.cacheTree={},this.toc=[],this.cacheTOC={},this.linkTarget=e.externalLinkTarget||"_blank",this.linkRel="_blank"===this.linkTarget?e.externalLinkRel||"noopener":"",this.contentBase=i.getBasePath();var t,u=this._initRenderer();this.heading=u.heading;var r=e.markdown||{};f(r)?t=r(xe,u):(xe.setOptions(c(r,{renderer:c(u,r.renderer)})),t=xe),this._marked=t,this.compile=function(i){var c=!0,f=n((function(n){c=!1;var o="";return i?(o=a(i)?t(i):t.parser(i),o=e.noEmoji?o:function(n,e){return n.replace(/<(code|pre|script|template)[^>]*?>[\s\S]+?<\/(code|pre|script|template)>/g,(function(n){return n.replace(/:/g,"__colon__")})).replace(//g,(function(n){return n.replace(/:/g,"__colon__")})).replace(/([a-z]{2,}:)?\/\/[^\s'">)]+/gi,(function(n){return n.replace(/:/g,"__colon__")})).replace(/:([a-z0-9_\-+]+?):/g,(function(n,i){return function(n,e,i){var o=Re.data[e],c=n;return o&&(c=i&&/unicode/.test(o)?''+o.replace("unicode/","").replace(/\.png.*/,"").split("-").map((function(n){return"&#x"+n+";"})).join("‍").concat("︎")+"":''+e+''),c}(n,i,e)})).replace(/__colon__/g,":")}(o,e.nativeEmoji),Oe.clear(),o):i}))(i),u=o.router.parse().file;return c?o.toc=o.cacheTOC[u]:o.cacheTOC[u]=[].concat(o.toc),f}};Pe.prototype.compileEmbed=function(n,e){var i,o=je(e),c=o.str,a=o.config;if(e=c,a.include){var t;if(R(n)||(n=P(this.contentBase,L(this.router.getCurrentPath()),n)),a.type&&(t=Fe[a.type]))(i=t.call(this,n,e)).type=a.type;else{var f="code";/\.(md|markdown)/.test(n)?f="markdown":/\.mmd/.test(n)?f="mermaid":/\.html?/.test(n)?f="iframe":/\.(mp4|ogg)/.test(n)?f="video":/\.mp3/.test(n)&&(f="audio"),(i=Fe[f].call(this,n,e)).type=f}return i.fragment=a.fragment,i}},Pe.prototype._matchNotCompileLink=function(n){for(var e=this.config.noCompileLinks||[],i=0;i/g.test(o)&&(o=o.replace("\x3c!-- {docsify-ignore} --\x3e",""),f.title=Le(o),f.ignoreSubHeading=!0),/{docsify-ignore}/g.test(o)&&(o=o.replace("{docsify-ignore}",""),f.title=Le(o),f.ignoreSubHeading=!0),//g.test(o)&&(o=o.replace("\x3c!-- {docsify-ignore-all} --\x3e",""),f.title=Le(o),f.ignoreAllSubs=!0),/{docsify-ignore-all}/g.test(o)&&(o=o.replace("{docsify-ignore-all}",""),f.title=Le(o),f.ignoreAllSubs=!0);var u=Oe(a.id||o),r=c.toURL(c.getCurrentPath(),{id:u});return f.slug=r,t.toc.push(f),"'+o+""},f.code=function(n){return n.renderer.code=function(n,e){void 0===e&&(e="markup");var i=Ce.languages[e]||Ce.languages.markup;return'
    '+Ce.highlight(n.replace(/@DOCSIFY_QM@/g,"`"),i,e)+"
    "}}({renderer:n}),f.link=function(n){var e=n.router,i=n.linkTarget,o=n.linkRel,c=n.compilerClass;return n.renderer.link=function(n,a,t){void 0===a&&(a="");var f=[],u=je(a),r=u.str,d=u.config;return i=d.target||i,o="_blank"===i?c.config.externalLinkRel||"noopener":"",a=r,R(n)||c._matchNotCompileLink(n)||d.ignore?(R(n)||"./"!==n.slice(0,2)||(n=document.URL.replace(/\/(?!.*\/).*/,"/").replace("#/./","")+n),f.push(0===n.indexOf("mailto:")?"":'target="'+i+'"'),f.push(0===n.indexOf("mailto:")?"":""!==o?' rel="'+o+'"':"")):(n===c.config.homepage&&(n="README"),n=e.toURL(n,null,e.getCurrentPath())),d.disabled&&(f.push("disabled"),n="javascript:void(0)"),d.class&&f.push('class="'+d.class+'"'),d.id&&f.push('id="'+d.id+'"'),a&&f.push('title="'+a+'"'),'"+t+""}}({renderer:n,router:c,linkTarget:i,linkRel:o,compilerClass:t}),f.paragraph=function(n){return n.renderer.paragraph=function(n){return/^!>/.test(n)?Ae("tip",n):/^\?>/.test(n)?Ae("warn",n):"

    "+n+"

    "}}({renderer:n}),f.image=function(n){var e=n.contentBase,i=n.router;return n.renderer.image=function(n,o,c){var a=n,t=[],f=je(o),u=f.str,r=f.config;if(o=u,r["no-zoom"]&&t.push("data-no-zoom"),o&&t.push('title="'+o+'"'),r.size){var d=r.size.split("x"),p=d[0],g=d[1];g?t.push('width="'+p+'" height="'+g+'"'):t.push('width="'+p+'"')}return r.class&&t.push('class="'+r.class+'"'),r.id&&t.push('id="'+r.id+'"'),R(n)||(a=P(e,L(i.getCurrentPath()),n)),t.length>0?''+c+'":''+c+'"}}({renderer:n,contentBase:a,router:c}),f.list=function(n){return n.renderer.list=function(n,e,i){var o=e?"ol":"ul";return"<"+o+" "+[/
  • /.test(n.split('class="task-list"')[0])?'class="task-list"':"",i&&i>1?'start="'+i+'"':""].join(" ").trim()+">"+n+""}}({renderer:n}),f.listitem=function(n){return n.renderer.listitem=function(n){return/^(]*>)/.test(n)?'
  • ":"
  • "+n+"
  • "}}({renderer:n}),n.origin=f,n},Pe.prototype.sidebar=function(n,e){var i=this.toc,o=this.router.getCurrentPath(),c="";if(n)c=this.compile(n);else{for(var a=0;a{inner}"),this.cacheTree[o]=u}return c},Pe.prototype.subSidebar=function(n){if(n){var e=this.router.getCurrentPath(),i=this.cacheTree,o=this.toc;o[0]&&o[0].ignoreAllSubs&&o.splice(0),o[0]&&1===o[0].level&&o.shift();for(var c=0;c *").filter((function(n){return a(n)}));tscript").filter((function(n){return!/template/.test(n.type)}))[0];if(!n)return!1;var e=n.innerText.trim();if(!e)return!1;new Function(e)()}(),"Vue"in window){var r=[],d=Object.keys(e.vueComponents||{});if(2===o&&d.length&&d.forEach((function(n){!window.Vue.options.components[n]&&window.Vue.component(n,e.vueComponents[n])})),!Ie&&e.vueGlobalOptions&&"function"==typeof e.vueGlobalOptions.data&&(Ie=e.vueGlobalOptions.data()),r.push.apply(r,Object.keys(e.vueMounts||{}).map((function(n){return[_(i,n),e.vueMounts[n]]})).filter((function(n){var e=n[0];return n[1],e}))),e.vueGlobalOptions||d.length){var p=/{{2}[^{}]*}{2}/,g=/<[^>/]+\s([@:]|v-)[\w-:.[\]]+[=>\s]/;r.push.apply(r,h(".markdown-section > *").filter((function(n){return!r.some((function(e){var i=e[0];return e[1],i===n}))})).filter((function(n){return n.tagName.toLowerCase()in(e.vueComponents||{})||n.querySelector(d.join(",")||null)||p.test(n.outerHTML)||g.test(n.outerHTML)})).map((function(n){var i=c({},e.vueGlobalOptions||{});return Ie&&(i.data=function(){return Ie}),[n,i]})))}for(var s=0,l=r;s-1&&"_coverpage";else{var u=i[f];t=!0===u?"_coverpage":u}var r=Boolean(t)&&this.config.onlyCover;return t?(t=this.router.getFile(a+t),this.coverIsHTML=/\.html$/g.test(t),J(t+O(c,["id"]),!1,o).then((function(e){return n._renderCover(e,r)}))):this._renderCover(null,r),r}},e.prototype.$fetch=function(n,e){var i=this;void 0===n&&(n=t),void 0===e&&(e=this.$resetEvents.bind(this));var o=function(){i.callHook("doneEach"),n()};this._fetchCover()?o():this._fetch((function(){e(),o()}))},e.prototype._fetchFallbackPage=function(n,e,o){var c=this;void 0===o&&(o=t);var a=this.config,f=a.requestHeaders,u=a.fallbackLanguages,r=a.loadSidebar;if(!u)return!1;var d=n.split("/")[1];if(-1===u.indexOf(d))return!1;var p=this.router.getFile(n.replace(new RegExp("^/"+d),""));return i(p+e,0,f).then((function(i,a){return c._renderMain(i,a,c._loadSideAndNav(n,e,r,o))}),(function(){return c._fetch404(n,e,o)})),!0},e.prototype._fetch404=function(n,e,o){var c=this;void 0===o&&(o=t);var a=this.config,f=a.loadSidebar,u=a.requestHeaders,r=a.notFoundPage,d=this._loadSideAndNav(n,e,f,o);if(r){var p=function(n,e){var i,o,c=e.notFoundPage,a="_404"+(e.ext||".md");switch(typeof c){case"boolean":o=a;break;case"string":o=c;break;case"object":o=(i=Object.keys(c).sort((function(n,e){return e.length-n.length})).filter((function(e){return n.match(new RegExp("^"+e))}))[0])&&c[i]||a}return o}(n,this.config);return i(this.router.getFile(p),0,u).then((function(n,e){return c._renderMain(n,e,d)}),(function(){return c._renderMain(null,{},d)})),!0}return this._renderMain(null,{},d),!1},e.prototype.initFetch=function(){var n=this,e=this.config.loadSidebar;if(this.rendered){var i=on(this.router,".sidebar-nav",!0,!0);e&&i&&(i.parentNode.innerHTML+=window.__SUB_SIDEBAR__),this._bindEventOnRendered(i),this.$resetEvents(),this.callHook("doneEach"),this.callHook("ready")}else this.$fetch((function(e){return n.callHook("ready")}))},e}(n)}(function(n){return function(n){function e(){n.apply(this,arguments)}return n&&(e.__proto__=n),e.prototype=Object.create(n&&n.prototype),e.prototype.constructor=e,e.prototype.$resetEvents=function(n){var e,i=this,o=this.config.auto2top;"history"!==n&&(i.route.query.id&&function(n,e){if(e){var i,o,c=rn().topMargin,a=_("#"+e);a&&(i=a,void 0===(o=c)&&(o=0),gn&&gn.stop(),sn=!1,gn=new fn({start:window.pageYOffset,end:Math.round(i.getBoundingClientRect().top)+window.pageYOffset-o,duration:500}).on("tick",(function(n){return window.scrollTo(0,n)})).on("done",(function(){sn=!0,gn=null})).begin());var t=dn[_n(n,e)],f=_(g(".sidebar"),"li.active");f&&f.classList.remove("active"),t&&t.classList.add("active")}}(i.route.path,i.route.query.id),"navigate"===n&&o&&(void 0===(e=o)&&(e=0),hn.scrollTop=!0===e?0:Number(e))),this.config.loadNavbar&&on(this.router,"nav")},e.prototype.initEvent=function(){var n,e;n="button.sidebar-toggle",this.router,e=function(n){return l.classList.toggle("close")},null!=(n=g(n))&&(k(n,"click",(function(n){n.stopPropagation(),e()})),r&&k(l,"click",(function(n){return l.classList.contains("close")&&e()}))),function(n){null!=(n=g(n))&&k(n,"click",(function(n){var e=n.target;"A"===e.nodeName&&e.nextSibling&&e.nextSibling.classList&&e.nextSibling.classList.contains("app-sub-sidebar")&&x(e.parentNode,"collapse")}))}(".sidebar",this.router),this.config.coverpage?!r&&k("scroll",en):l.classList.add("sticky")},e}(n)}(function(n){return function(n){function e(){n.apply(this,arguments)}return n&&(e.__proto__=n),e.prototype=Object.create(n&&n.prototype),e.prototype.constructor=e,e.prototype._renderTo=function(n,e,i){var o=g(n);o&&(o[i?"outerHTML":"innerHTML"]=e)},e.prototype._renderSidebar=function(n){var e=this.config,i=e.maxLevel,o=e.subMaxLevel,c=e.loadSidebar;if(e.hideSidebar)return[document.querySelector("aside.sidebar"),document.querySelector("button.sidebar-toggle")].filter((function(n){return!!n})).forEach((function(n){return n.parentNode.removeChild(n)})),document.querySelector("section.content").style.right="unset",document.querySelector("section.content").style.left="unset",document.querySelector("section.content").style.position="relative",document.querySelector("section.content").style.width="100%",null;this._renderTo(".sidebar-nav",this.compiler.sidebar(n,i));var a=on(this.router,".sidebar-nav",!0,!0);c&&a?a.parentNode.innerHTML+=this.compiler.subSidebar(o)||"":this.compiler.subSidebar(),this._bindEventOnRendered(a)},e.prototype._bindEventOnRendered=function(n){var e=this.config.autoHeader;if(function(n){var e=_(".cover.show");ln=e?e.offsetHeight:0;var i=g(".sidebar"),o=[];null!=i&&(o=h(i,"li"));for(var c=0,a=o.length;c\n'+i+"\n"}]).links={}:(o=[{type:"html",text:i}]).links={};e({token:n,embedToken:o}),++t>=a&&e({})}}(i);i.embed.url?J(i.embed.url).then(f):f(i.embed.html)}}({compile:u,embedTokens:d,fetch:a},(function(n){var i=n.embedToken,a=n.token;if(a){var t=a.index;s.forEach((function(n){t>n.start&&(t+=n.length)})),c(g,i.links),r=r.slice(0,t).concat(i,r.slice(t+1)),s.push({start:t,length:i.length-1})}else De[o]=r.concat(),r.links=De[o].links=g,e(r)}))}({compiler:o.compiler,raw:a},(function(n){t=o.compiler.compile(n),f()}))}))},e.prototype._renderCover=function(n,e){var i=g(".cover");if(x(g("main"),e?"add":"remove","hidden"),n){x(i,"add","show");var o=this.coverIsHTML?n:this.compiler.cover(n),c=o.trim().match('

    ([^<]*?)

    $');if(c){if("color"===c[2])i.style.background=c[1]+(c[3]||"");else{var a=c[1];x(i,"add","has-mask"),R(c[1])||(a=P(this.router.getBasePath(),c[1])),i.style.backgroundImage="url("+a+")",i.style.backgroundSize="cover",i.style.backgroundPosition="center center"}o=o.replace(c[0],"")}this._renderTo(".cover-main",o),en()}else x(i,"remove","show")},e.prototype._updateRender=function(){!function(n){var e=g(".app-name-link"),i=n.config.nameLink,o=n.route.path;if(e)if(a(n.config.nameLink))e.setAttribute("href",i);else if("object"==typeof i){var c=Object.keys(i).filter((function(n){return o.indexOf(n)>-1}))[0];e.setAttribute("href",i[c])}}(this)},e.prototype.initRender=function(){var n=this.config;this.compiler=new Pe(n,this.router),window.__current_docsify_compiler__=this.compiler;var e,i,o,c,a=n.el||"#app",t=_("nav")||m("nav"),f=_(a),u="",d=l;if(f){if(n.repo&&(u+=(i=n.repo,o=n.cornerExternalLinkTarget,i?(/\/\//.test(i)||(i="https://github.com/"+i),''):"")),n.coverpage&&(u+=(e=", 100%, 85%",'
    \x3c!--cover--\x3e
    ')),n.logo){var p=/^data:image/.test(n.logo),g=/(?:http[s]?:)?\/\//.test(n.logo),b=/^\./.test(n.logo);p||g||b||(n.logo=P(this.router.getBasePath(),n.logo))}u+=function(n){var e=n.name?n.name:"";return'
    '}(n),this._renderTo(f,u,!0)}else this.rendered=!0;n.mergeNavbar&&r?d=_(".sidebar"):(t.classList.add("app-nav"),n.repo||t.classList.add("no-badge")),n.loadNavbar&&w(d,t),n.themeColor&&(s.head.appendChild(m("div",(c=n.themeColor,"")).firstElementChild),function(n){if(!(window.CSS&&window.CSS.supports&&window.CSS.supports("(--v:red)"))){var e=h("style:not(.inserted),link");[].forEach.call(e,(function(e){if("STYLE"===e.nodeName)Q(e,n);else if("LINK"===e.nodeName){var i=e.getAttribute("href");if(!/\.css$/.test(i))return;J(i).then((function(e){var i=m("style",e);v.appendChild(i),Q(i,n)}))}}))}}(n.themeColor)),this._updateRender(),x(l,"ready")},e}(n)}(function(n){return function(n){function e(){n.apply(this,arguments)}return n&&(e.__proto__=n),e.prototype=Object.create(n&&n.prototype),e.prototype.constructor=e,e.prototype.routes=function(){return this.config.routes||{}},e.prototype.matchVirtualRoute=function(n){var e=this.routes(),i=Object.keys(e),o=function(){return null};function c(){var a=i.shift();if(!a)return o(null);var t=function(n){var e=("^",0===n.indexOf("^")?n:"^"+n);return z(e,"$")?e:e+"$"}(a),f=n.match(t);if(!f)return c();var u,r=e[a];if("string"==typeof r)return o(r);if("function"==typeof r){var d=r,p=(u=function(){return null},[function(n){u(n)},function(n){u=n}]),g=p[0];return(0,p[1])((function(n){return"string"==typeof n?o(n):!1===n?o(null):c()})),d.length<=2?g(d(n,f)):d(n,f,g)}return c()}return{then:function(n){o=n,c()}}},e}(n)}((Ue=function(n){function e(){n.apply(this,arguments)}return n&&(e.__proto__=n),e.prototype=Object.create(n&&n.prototype),e.prototype.constructor=e,e.prototype.initLifecycle=function(){var n=this;this._hooks={},this._lifecycle={},["init","mounted","beforeEach","afterEach","doneEach","ready"].forEach((function(e){var i=n._hooks[e]=[];n._lifecycle[e]=function(n){return i.push(n)}}))},e.prototype.callHook=function(n,e,i){void 0===i&&(i=t);var o=this._hooks[n],c=this.config.catchPluginErrors,a=function(n){var t=o[n];if(n>=o.length)i(e);else if("function"==typeof t){var f="Docsify plugin error";if(2===t.length)try{t(e,(function(i){e=i,a(n+1)}))}catch(e){if(!c)throw e;console.error(f,e),a(n+1)}else try{var u=t(e);e=void 0===u?e:u,a(n+1)}catch(e){if(!c)throw e;console.error(f,e),a(n+1)}}else a(n+1)};a(0)},e}(Object),function(n){function e(){for(var e=[],i=arguments.length;i--;)e[i]=arguments[i];n.apply(this,e),this.route={}}return n&&(e.__proto__=n),e.prototype=Object.create(n&&n.prototype),e.prototype.constructor=e,e.prototype.updateRender=function(){this.router.normalize(),this.route=this.router.parse(),l.setAttribute("data-page",this.route.file)},e.prototype.initRouter=function(){var n,e=this,i=this.config;n="history"===(i.routerMode||"hash")&&d?new Z(i):new G(i),this.router=n,this.updateRender(),Y=this.route,n.onchange((function(n){e.updateRender(),e._updateRender(),Y.path!==e.route.path?(e.$fetch(t,e.$resetEvents.bind(e,n.source)),Y=e.route):e.$resetEvents(n.source)}))},e}(Ue)))))));window.Docsify={util:Be,dom:A,get:J,slugify:Oe,version:"4.13.1"},window.DocsifyCompiler=Pe,window.marked=xe,window.Prism=Ce,S((function(n){return new Ge}))}()},261:()=>{var n;n={100:"unicode/1f4af.png?v8",1234:"unicode/1f522.png?v8","+1":"unicode/1f44d.png?v8","-1":"unicode/1f44e.png?v8","1st_place_medal":"unicode/1f947.png?v8","2nd_place_medal":"unicode/1f948.png?v8","3rd_place_medal":"unicode/1f949.png?v8","8ball":"unicode/1f3b1.png?v8",a:"unicode/1f170.png?v8",ab:"unicode/1f18e.png?v8",abacus:"unicode/1f9ee.png?v8",abc:"unicode/1f524.png?v8",abcd:"unicode/1f521.png?v8",accept:"unicode/1f251.png?v8",accessibility:"accessibility.png?v8",accordion:"unicode/1fa97.png?v8",adhesive_bandage:"unicode/1fa79.png?v8",adult:"unicode/1f9d1.png?v8",aerial_tramway:"unicode/1f6a1.png?v8",afghanistan:"unicode/1f1e6-1f1eb.png?v8",airplane:"unicode/2708.png?v8",aland_islands:"unicode/1f1e6-1f1fd.png?v8",alarm_clock:"unicode/23f0.png?v8",albania:"unicode/1f1e6-1f1f1.png?v8",alembic:"unicode/2697.png?v8",algeria:"unicode/1f1e9-1f1ff.png?v8",alien:"unicode/1f47d.png?v8",ambulance:"unicode/1f691.png?v8",american_samoa:"unicode/1f1e6-1f1f8.png?v8",amphora:"unicode/1f3fa.png?v8",anatomical_heart:"unicode/1fac0.png?v8",anchor:"unicode/2693.png?v8",andorra:"unicode/1f1e6-1f1e9.png?v8",angel:"unicode/1f47c.png?v8",anger:"unicode/1f4a2.png?v8",angola:"unicode/1f1e6-1f1f4.png?v8",angry:"unicode/1f620.png?v8",anguilla:"unicode/1f1e6-1f1ee.png?v8",anguished:"unicode/1f627.png?v8",ant:"unicode/1f41c.png?v8",antarctica:"unicode/1f1e6-1f1f6.png?v8",antigua_barbuda:"unicode/1f1e6-1f1ec.png?v8",apple:"unicode/1f34e.png?v8",aquarius:"unicode/2652.png?v8",argentina:"unicode/1f1e6-1f1f7.png?v8",aries:"unicode/2648.png?v8",armenia:"unicode/1f1e6-1f1f2.png?v8",arrow_backward:"unicode/25c0.png?v8",arrow_double_down:"unicode/23ec.png?v8",arrow_double_up:"unicode/23eb.png?v8",arrow_down:"unicode/2b07.png?v8",arrow_down_small:"unicode/1f53d.png?v8",arrow_forward:"unicode/25b6.png?v8",arrow_heading_down:"unicode/2935.png?v8",arrow_heading_up:"unicode/2934.png?v8",arrow_left:"unicode/2b05.png?v8",arrow_lower_left:"unicode/2199.png?v8",arrow_lower_right:"unicode/2198.png?v8",arrow_right:"unicode/27a1.png?v8",arrow_right_hook:"unicode/21aa.png?v8",arrow_up:"unicode/2b06.png?v8",arrow_up_down:"unicode/2195.png?v8",arrow_up_small:"unicode/1f53c.png?v8",arrow_upper_left:"unicode/2196.png?v8",arrow_upper_right:"unicode/2197.png?v8",arrows_clockwise:"unicode/1f503.png?v8",arrows_counterclockwise:"unicode/1f504.png?v8",art:"unicode/1f3a8.png?v8",articulated_lorry:"unicode/1f69b.png?v8",artificial_satellite:"unicode/1f6f0.png?v8",artist:"unicode/1f9d1-1f3a8.png?v8",aruba:"unicode/1f1e6-1f1fc.png?v8",ascension_island:"unicode/1f1e6-1f1e8.png?v8",asterisk:"unicode/002a-20e3.png?v8",astonished:"unicode/1f632.png?v8",astronaut:"unicode/1f9d1-1f680.png?v8",athletic_shoe:"unicode/1f45f.png?v8",atm:"unicode/1f3e7.png?v8",atom:"atom.png?v8",atom_symbol:"unicode/269b.png?v8",australia:"unicode/1f1e6-1f1fa.png?v8",austria:"unicode/1f1e6-1f1f9.png?v8",auto_rickshaw:"unicode/1f6fa.png?v8",avocado:"unicode/1f951.png?v8",axe:"unicode/1fa93.png?v8",azerbaijan:"unicode/1f1e6-1f1ff.png?v8",b:"unicode/1f171.png?v8",baby:"unicode/1f476.png?v8",baby_bottle:"unicode/1f37c.png?v8",baby_chick:"unicode/1f424.png?v8",baby_symbol:"unicode/1f6bc.png?v8",back:"unicode/1f519.png?v8",bacon:"unicode/1f953.png?v8",badger:"unicode/1f9a1.png?v8",badminton:"unicode/1f3f8.png?v8",bagel:"unicode/1f96f.png?v8",baggage_claim:"unicode/1f6c4.png?v8",baguette_bread:"unicode/1f956.png?v8",bahamas:"unicode/1f1e7-1f1f8.png?v8",bahrain:"unicode/1f1e7-1f1ed.png?v8",balance_scale:"unicode/2696.png?v8",bald_man:"unicode/1f468-1f9b2.png?v8",bald_woman:"unicode/1f469-1f9b2.png?v8",ballet_shoes:"unicode/1fa70.png?v8",balloon:"unicode/1f388.png?v8",ballot_box:"unicode/1f5f3.png?v8",ballot_box_with_check:"unicode/2611.png?v8",bamboo:"unicode/1f38d.png?v8",banana:"unicode/1f34c.png?v8",bangbang:"unicode/203c.png?v8",bangladesh:"unicode/1f1e7-1f1e9.png?v8",banjo:"unicode/1fa95.png?v8",bank:"unicode/1f3e6.png?v8",bar_chart:"unicode/1f4ca.png?v8",barbados:"unicode/1f1e7-1f1e7.png?v8",barber:"unicode/1f488.png?v8",baseball:"unicode/26be.png?v8",basecamp:"basecamp.png?v8",basecampy:"basecampy.png?v8",basket:"unicode/1f9fa.png?v8",basketball:"unicode/1f3c0.png?v8",basketball_man:"unicode/26f9-2642.png?v8",basketball_woman:"unicode/26f9-2640.png?v8",bat:"unicode/1f987.png?v8",bath:"unicode/1f6c0.png?v8",bathtub:"unicode/1f6c1.png?v8",battery:"unicode/1f50b.png?v8",beach_umbrella:"unicode/1f3d6.png?v8",bear:"unicode/1f43b.png?v8",bearded_person:"unicode/1f9d4.png?v8",beaver:"unicode/1f9ab.png?v8",bed:"unicode/1f6cf.png?v8",bee:"unicode/1f41d.png?v8",beer:"unicode/1f37a.png?v8",beers:"unicode/1f37b.png?v8",beetle:"unicode/1fab2.png?v8",beginner:"unicode/1f530.png?v8",belarus:"unicode/1f1e7-1f1fe.png?v8",belgium:"unicode/1f1e7-1f1ea.png?v8",belize:"unicode/1f1e7-1f1ff.png?v8",bell:"unicode/1f514.png?v8",bell_pepper:"unicode/1fad1.png?v8",bellhop_bell:"unicode/1f6ce.png?v8",benin:"unicode/1f1e7-1f1ef.png?v8",bento:"unicode/1f371.png?v8",bermuda:"unicode/1f1e7-1f1f2.png?v8",beverage_box:"unicode/1f9c3.png?v8",bhutan:"unicode/1f1e7-1f1f9.png?v8",bicyclist:"unicode/1f6b4.png?v8",bike:"unicode/1f6b2.png?v8",biking_man:"unicode/1f6b4-2642.png?v8",biking_woman:"unicode/1f6b4-2640.png?v8",bikini:"unicode/1f459.png?v8",billed_cap:"unicode/1f9e2.png?v8",biohazard:"unicode/2623.png?v8",bird:"unicode/1f426.png?v8",birthday:"unicode/1f382.png?v8",bison:"unicode/1f9ac.png?v8",black_cat:"unicode/1f408-2b1b.png?v8",black_circle:"unicode/26ab.png?v8",black_flag:"unicode/1f3f4.png?v8",black_heart:"unicode/1f5a4.png?v8",black_joker:"unicode/1f0cf.png?v8",black_large_square:"unicode/2b1b.png?v8",black_medium_small_square:"unicode/25fe.png?v8",black_medium_square:"unicode/25fc.png?v8",black_nib:"unicode/2712.png?v8",black_small_square:"unicode/25aa.png?v8",black_square_button:"unicode/1f532.png?v8",blond_haired_man:"unicode/1f471-2642.png?v8",blond_haired_person:"unicode/1f471.png?v8",blond_haired_woman:"unicode/1f471-2640.png?v8",blonde_woman:"unicode/1f471-2640.png?v8",blossom:"unicode/1f33c.png?v8",blowfish:"unicode/1f421.png?v8",blue_book:"unicode/1f4d8.png?v8",blue_car:"unicode/1f699.png?v8",blue_heart:"unicode/1f499.png?v8",blue_square:"unicode/1f7e6.png?v8",blueberries:"unicode/1fad0.png?v8",blush:"unicode/1f60a.png?v8",boar:"unicode/1f417.png?v8",boat:"unicode/26f5.png?v8",bolivia:"unicode/1f1e7-1f1f4.png?v8",bomb:"unicode/1f4a3.png?v8",bone:"unicode/1f9b4.png?v8",book:"unicode/1f4d6.png?v8",bookmark:"unicode/1f516.png?v8",bookmark_tabs:"unicode/1f4d1.png?v8",books:"unicode/1f4da.png?v8",boom:"unicode/1f4a5.png?v8",boomerang:"unicode/1fa83.png?v8",boot:"unicode/1f462.png?v8",bosnia_herzegovina:"unicode/1f1e7-1f1e6.png?v8",botswana:"unicode/1f1e7-1f1fc.png?v8",bouncing_ball_man:"unicode/26f9-2642.png?v8",bouncing_ball_person:"unicode/26f9.png?v8",bouncing_ball_woman:"unicode/26f9-2640.png?v8",bouquet:"unicode/1f490.png?v8",bouvet_island:"unicode/1f1e7-1f1fb.png?v8",bow:"unicode/1f647.png?v8",bow_and_arrow:"unicode/1f3f9.png?v8",bowing_man:"unicode/1f647-2642.png?v8",bowing_woman:"unicode/1f647-2640.png?v8",bowl_with_spoon:"unicode/1f963.png?v8",bowling:"unicode/1f3b3.png?v8",bowtie:"bowtie.png?v8",boxing_glove:"unicode/1f94a.png?v8",boy:"unicode/1f466.png?v8",brain:"unicode/1f9e0.png?v8",brazil:"unicode/1f1e7-1f1f7.png?v8",bread:"unicode/1f35e.png?v8",breast_feeding:"unicode/1f931.png?v8",bricks:"unicode/1f9f1.png?v8",bride_with_veil:"unicode/1f470-2640.png?v8",bridge_at_night:"unicode/1f309.png?v8",briefcase:"unicode/1f4bc.png?v8",british_indian_ocean_territory:"unicode/1f1ee-1f1f4.png?v8",british_virgin_islands:"unicode/1f1fb-1f1ec.png?v8",broccoli:"unicode/1f966.png?v8",broken_heart:"unicode/1f494.png?v8",broom:"unicode/1f9f9.png?v8",brown_circle:"unicode/1f7e4.png?v8",brown_heart:"unicode/1f90e.png?v8",brown_square:"unicode/1f7eb.png?v8",brunei:"unicode/1f1e7-1f1f3.png?v8",bubble_tea:"unicode/1f9cb.png?v8",bucket:"unicode/1faa3.png?v8",bug:"unicode/1f41b.png?v8",building_construction:"unicode/1f3d7.png?v8",bulb:"unicode/1f4a1.png?v8",bulgaria:"unicode/1f1e7-1f1ec.png?v8",bullettrain_front:"unicode/1f685.png?v8",bullettrain_side:"unicode/1f684.png?v8",burkina_faso:"unicode/1f1e7-1f1eb.png?v8",burrito:"unicode/1f32f.png?v8",burundi:"unicode/1f1e7-1f1ee.png?v8",bus:"unicode/1f68c.png?v8",business_suit_levitating:"unicode/1f574.png?v8",busstop:"unicode/1f68f.png?v8",bust_in_silhouette:"unicode/1f464.png?v8",busts_in_silhouette:"unicode/1f465.png?v8",butter:"unicode/1f9c8.png?v8",butterfly:"unicode/1f98b.png?v8",cactus:"unicode/1f335.png?v8",cake:"unicode/1f370.png?v8",calendar:"unicode/1f4c6.png?v8",call_me_hand:"unicode/1f919.png?v8",calling:"unicode/1f4f2.png?v8",cambodia:"unicode/1f1f0-1f1ed.png?v8",camel:"unicode/1f42b.png?v8",camera:"unicode/1f4f7.png?v8",camera_flash:"unicode/1f4f8.png?v8",cameroon:"unicode/1f1e8-1f1f2.png?v8",camping:"unicode/1f3d5.png?v8",canada:"unicode/1f1e8-1f1e6.png?v8",canary_islands:"unicode/1f1ee-1f1e8.png?v8",cancer:"unicode/264b.png?v8",candle:"unicode/1f56f.png?v8",candy:"unicode/1f36c.png?v8",canned_food:"unicode/1f96b.png?v8",canoe:"unicode/1f6f6.png?v8",cape_verde:"unicode/1f1e8-1f1fb.png?v8",capital_abcd:"unicode/1f520.png?v8",capricorn:"unicode/2651.png?v8",car:"unicode/1f697.png?v8",card_file_box:"unicode/1f5c3.png?v8",card_index:"unicode/1f4c7.png?v8",card_index_dividers:"unicode/1f5c2.png?v8",caribbean_netherlands:"unicode/1f1e7-1f1f6.png?v8",carousel_horse:"unicode/1f3a0.png?v8",carpentry_saw:"unicode/1fa9a.png?v8",carrot:"unicode/1f955.png?v8",cartwheeling:"unicode/1f938.png?v8",cat:"unicode/1f431.png?v8",cat2:"unicode/1f408.png?v8",cayman_islands:"unicode/1f1f0-1f1fe.png?v8",cd:"unicode/1f4bf.png?v8",central_african_republic:"unicode/1f1e8-1f1eb.png?v8",ceuta_melilla:"unicode/1f1ea-1f1e6.png?v8",chad:"unicode/1f1f9-1f1e9.png?v8",chains:"unicode/26d3.png?v8",chair:"unicode/1fa91.png?v8",champagne:"unicode/1f37e.png?v8",chart:"unicode/1f4b9.png?v8",chart_with_downwards_trend:"unicode/1f4c9.png?v8",chart_with_upwards_trend:"unicode/1f4c8.png?v8",checkered_flag:"unicode/1f3c1.png?v8",cheese:"unicode/1f9c0.png?v8",cherries:"unicode/1f352.png?v8",cherry_blossom:"unicode/1f338.png?v8",chess_pawn:"unicode/265f.png?v8",chestnut:"unicode/1f330.png?v8",chicken:"unicode/1f414.png?v8",child:"unicode/1f9d2.png?v8",children_crossing:"unicode/1f6b8.png?v8",chile:"unicode/1f1e8-1f1f1.png?v8",chipmunk:"unicode/1f43f.png?v8",chocolate_bar:"unicode/1f36b.png?v8",chopsticks:"unicode/1f962.png?v8",christmas_island:"unicode/1f1e8-1f1fd.png?v8",christmas_tree:"unicode/1f384.png?v8",church:"unicode/26ea.png?v8",cinema:"unicode/1f3a6.png?v8",circus_tent:"unicode/1f3aa.png?v8",city_sunrise:"unicode/1f307.png?v8",city_sunset:"unicode/1f306.png?v8",cityscape:"unicode/1f3d9.png?v8",cl:"unicode/1f191.png?v8",clamp:"unicode/1f5dc.png?v8",clap:"unicode/1f44f.png?v8",clapper:"unicode/1f3ac.png?v8",classical_building:"unicode/1f3db.png?v8",climbing:"unicode/1f9d7.png?v8",climbing_man:"unicode/1f9d7-2642.png?v8",climbing_woman:"unicode/1f9d7-2640.png?v8",clinking_glasses:"unicode/1f942.png?v8",clipboard:"unicode/1f4cb.png?v8",clipperton_island:"unicode/1f1e8-1f1f5.png?v8",clock1:"unicode/1f550.png?v8",clock10:"unicode/1f559.png?v8",clock1030:"unicode/1f565.png?v8",clock11:"unicode/1f55a.png?v8",clock1130:"unicode/1f566.png?v8",clock12:"unicode/1f55b.png?v8",clock1230:"unicode/1f567.png?v8",clock130:"unicode/1f55c.png?v8",clock2:"unicode/1f551.png?v8",clock230:"unicode/1f55d.png?v8",clock3:"unicode/1f552.png?v8",clock330:"unicode/1f55e.png?v8",clock4:"unicode/1f553.png?v8",clock430:"unicode/1f55f.png?v8",clock5:"unicode/1f554.png?v8",clock530:"unicode/1f560.png?v8",clock6:"unicode/1f555.png?v8",clock630:"unicode/1f561.png?v8",clock7:"unicode/1f556.png?v8",clock730:"unicode/1f562.png?v8",clock8:"unicode/1f557.png?v8",clock830:"unicode/1f563.png?v8",clock9:"unicode/1f558.png?v8",clock930:"unicode/1f564.png?v8",closed_book:"unicode/1f4d5.png?v8",closed_lock_with_key:"unicode/1f510.png?v8",closed_umbrella:"unicode/1f302.png?v8",cloud:"unicode/2601.png?v8",cloud_with_lightning:"unicode/1f329.png?v8",cloud_with_lightning_and_rain:"unicode/26c8.png?v8",cloud_with_rain:"unicode/1f327.png?v8",cloud_with_snow:"unicode/1f328.png?v8",clown_face:"unicode/1f921.png?v8",clubs:"unicode/2663.png?v8",cn:"unicode/1f1e8-1f1f3.png?v8",coat:"unicode/1f9e5.png?v8",cockroach:"unicode/1fab3.png?v8",cocktail:"unicode/1f378.png?v8",coconut:"unicode/1f965.png?v8",cocos_islands:"unicode/1f1e8-1f1e8.png?v8",coffee:"unicode/2615.png?v8",coffin:"unicode/26b0.png?v8",coin:"unicode/1fa99.png?v8",cold_face:"unicode/1f976.png?v8",cold_sweat:"unicode/1f630.png?v8",collision:"unicode/1f4a5.png?v8",colombia:"unicode/1f1e8-1f1f4.png?v8",comet:"unicode/2604.png?v8",comoros:"unicode/1f1f0-1f1f2.png?v8",compass:"unicode/1f9ed.png?v8",computer:"unicode/1f4bb.png?v8",computer_mouse:"unicode/1f5b1.png?v8",confetti_ball:"unicode/1f38a.png?v8",confounded:"unicode/1f616.png?v8",confused:"unicode/1f615.png?v8",congo_brazzaville:"unicode/1f1e8-1f1ec.png?v8",congo_kinshasa:"unicode/1f1e8-1f1e9.png?v8",congratulations:"unicode/3297.png?v8",construction:"unicode/1f6a7.png?v8",construction_worker:"unicode/1f477.png?v8",construction_worker_man:"unicode/1f477-2642.png?v8",construction_worker_woman:"unicode/1f477-2640.png?v8",control_knobs:"unicode/1f39b.png?v8",convenience_store:"unicode/1f3ea.png?v8",cook:"unicode/1f9d1-1f373.png?v8",cook_islands:"unicode/1f1e8-1f1f0.png?v8",cookie:"unicode/1f36a.png?v8",cool:"unicode/1f192.png?v8",cop:"unicode/1f46e.png?v8",copyright:"unicode/00a9.png?v8",corn:"unicode/1f33d.png?v8",costa_rica:"unicode/1f1e8-1f1f7.png?v8",cote_divoire:"unicode/1f1e8-1f1ee.png?v8",couch_and_lamp:"unicode/1f6cb.png?v8",couple:"unicode/1f46b.png?v8",couple_with_heart:"unicode/1f491.png?v8",couple_with_heart_man_man:"unicode/1f468-2764-1f468.png?v8",couple_with_heart_woman_man:"unicode/1f469-2764-1f468.png?v8",couple_with_heart_woman_woman:"unicode/1f469-2764-1f469.png?v8",couplekiss:"unicode/1f48f.png?v8",couplekiss_man_man:"unicode/1f468-2764-1f48b-1f468.png?v8",couplekiss_man_woman:"unicode/1f469-2764-1f48b-1f468.png?v8",couplekiss_woman_woman:"unicode/1f469-2764-1f48b-1f469.png?v8",cow:"unicode/1f42e.png?v8",cow2:"unicode/1f404.png?v8",cowboy_hat_face:"unicode/1f920.png?v8",crab:"unicode/1f980.png?v8",crayon:"unicode/1f58d.png?v8",credit_card:"unicode/1f4b3.png?v8",crescent_moon:"unicode/1f319.png?v8",cricket:"unicode/1f997.png?v8",cricket_game:"unicode/1f3cf.png?v8",croatia:"unicode/1f1ed-1f1f7.png?v8",crocodile:"unicode/1f40a.png?v8",croissant:"unicode/1f950.png?v8",crossed_fingers:"unicode/1f91e.png?v8",crossed_flags:"unicode/1f38c.png?v8",crossed_swords:"unicode/2694.png?v8",crown:"unicode/1f451.png?v8",cry:"unicode/1f622.png?v8",crying_cat_face:"unicode/1f63f.png?v8",crystal_ball:"unicode/1f52e.png?v8",cuba:"unicode/1f1e8-1f1fa.png?v8",cucumber:"unicode/1f952.png?v8",cup_with_straw:"unicode/1f964.png?v8",cupcake:"unicode/1f9c1.png?v8",cupid:"unicode/1f498.png?v8",curacao:"unicode/1f1e8-1f1fc.png?v8",curling_stone:"unicode/1f94c.png?v8",curly_haired_man:"unicode/1f468-1f9b1.png?v8",curly_haired_woman:"unicode/1f469-1f9b1.png?v8",curly_loop:"unicode/27b0.png?v8",currency_exchange:"unicode/1f4b1.png?v8",curry:"unicode/1f35b.png?v8",cursing_face:"unicode/1f92c.png?v8",custard:"unicode/1f36e.png?v8",customs:"unicode/1f6c3.png?v8",cut_of_meat:"unicode/1f969.png?v8",cyclone:"unicode/1f300.png?v8",cyprus:"unicode/1f1e8-1f1fe.png?v8",czech_republic:"unicode/1f1e8-1f1ff.png?v8",dagger:"unicode/1f5e1.png?v8",dancer:"unicode/1f483.png?v8",dancers:"unicode/1f46f.png?v8",dancing_men:"unicode/1f46f-2642.png?v8",dancing_women:"unicode/1f46f-2640.png?v8",dango:"unicode/1f361.png?v8",dark_sunglasses:"unicode/1f576.png?v8",dart:"unicode/1f3af.png?v8",dash:"unicode/1f4a8.png?v8",date:"unicode/1f4c5.png?v8",de:"unicode/1f1e9-1f1ea.png?v8",deaf_man:"unicode/1f9cf-2642.png?v8",deaf_person:"unicode/1f9cf.png?v8",deaf_woman:"unicode/1f9cf-2640.png?v8",deciduous_tree:"unicode/1f333.png?v8",deer:"unicode/1f98c.png?v8",denmark:"unicode/1f1e9-1f1f0.png?v8",department_store:"unicode/1f3ec.png?v8",dependabot:"dependabot.png?v8",derelict_house:"unicode/1f3da.png?v8",desert:"unicode/1f3dc.png?v8",desert_island:"unicode/1f3dd.png?v8",desktop_computer:"unicode/1f5a5.png?v8",detective:"unicode/1f575.png?v8",diamond_shape_with_a_dot_inside:"unicode/1f4a0.png?v8",diamonds:"unicode/2666.png?v8",diego_garcia:"unicode/1f1e9-1f1ec.png?v8",disappointed:"unicode/1f61e.png?v8",disappointed_relieved:"unicode/1f625.png?v8",disguised_face:"unicode/1f978.png?v8",diving_mask:"unicode/1f93f.png?v8",diya_lamp:"unicode/1fa94.png?v8",dizzy:"unicode/1f4ab.png?v8",dizzy_face:"unicode/1f635.png?v8",djibouti:"unicode/1f1e9-1f1ef.png?v8",dna:"unicode/1f9ec.png?v8",do_not_litter:"unicode/1f6af.png?v8",dodo:"unicode/1f9a4.png?v8",dog:"unicode/1f436.png?v8",dog2:"unicode/1f415.png?v8",dollar:"unicode/1f4b5.png?v8",dolls:"unicode/1f38e.png?v8",dolphin:"unicode/1f42c.png?v8",dominica:"unicode/1f1e9-1f1f2.png?v8",dominican_republic:"unicode/1f1e9-1f1f4.png?v8",door:"unicode/1f6aa.png?v8",doughnut:"unicode/1f369.png?v8",dove:"unicode/1f54a.png?v8",dragon:"unicode/1f409.png?v8",dragon_face:"unicode/1f432.png?v8",dress:"unicode/1f457.png?v8",dromedary_camel:"unicode/1f42a.png?v8",drooling_face:"unicode/1f924.png?v8",drop_of_blood:"unicode/1fa78.png?v8",droplet:"unicode/1f4a7.png?v8",drum:"unicode/1f941.png?v8",duck:"unicode/1f986.png?v8",dumpling:"unicode/1f95f.png?v8",dvd:"unicode/1f4c0.png?v8","e-mail":"unicode/1f4e7.png?v8",eagle:"unicode/1f985.png?v8",ear:"unicode/1f442.png?v8",ear_of_rice:"unicode/1f33e.png?v8",ear_with_hearing_aid:"unicode/1f9bb.png?v8",earth_africa:"unicode/1f30d.png?v8",earth_americas:"unicode/1f30e.png?v8",earth_asia:"unicode/1f30f.png?v8",ecuador:"unicode/1f1ea-1f1e8.png?v8",egg:"unicode/1f95a.png?v8",eggplant:"unicode/1f346.png?v8",egypt:"unicode/1f1ea-1f1ec.png?v8",eight:"unicode/0038-20e3.png?v8",eight_pointed_black_star:"unicode/2734.png?v8",eight_spoked_asterisk:"unicode/2733.png?v8",eject_button:"unicode/23cf.png?v8",el_salvador:"unicode/1f1f8-1f1fb.png?v8",electric_plug:"unicode/1f50c.png?v8",electron:"electron.png?v8",elephant:"unicode/1f418.png?v8",elevator:"unicode/1f6d7.png?v8",elf:"unicode/1f9dd.png?v8",elf_man:"unicode/1f9dd-2642.png?v8",elf_woman:"unicode/1f9dd-2640.png?v8",email:"unicode/1f4e7.png?v8",end:"unicode/1f51a.png?v8",england:"unicode/1f3f4-e0067-e0062-e0065-e006e-e0067-e007f.png?v8",envelope:"unicode/2709.png?v8",envelope_with_arrow:"unicode/1f4e9.png?v8",equatorial_guinea:"unicode/1f1ec-1f1f6.png?v8",eritrea:"unicode/1f1ea-1f1f7.png?v8",es:"unicode/1f1ea-1f1f8.png?v8",estonia:"unicode/1f1ea-1f1ea.png?v8",ethiopia:"unicode/1f1ea-1f1f9.png?v8",eu:"unicode/1f1ea-1f1fa.png?v8",euro:"unicode/1f4b6.png?v8",european_castle:"unicode/1f3f0.png?v8",european_post_office:"unicode/1f3e4.png?v8",european_union:"unicode/1f1ea-1f1fa.png?v8",evergreen_tree:"unicode/1f332.png?v8",exclamation:"unicode/2757.png?v8",exploding_head:"unicode/1f92f.png?v8",expressionless:"unicode/1f611.png?v8",eye:"unicode/1f441.png?v8",eye_speech_bubble:"unicode/1f441-1f5e8.png?v8",eyeglasses:"unicode/1f453.png?v8",eyes:"unicode/1f440.png?v8",face_exhaling:"unicode/1f62e-1f4a8.png?v8",face_in_clouds:"unicode/1f636-1f32b.png?v8",face_with_head_bandage:"unicode/1f915.png?v8",face_with_spiral_eyes:"unicode/1f635-1f4ab.png?v8",face_with_thermometer:"unicode/1f912.png?v8",facepalm:"unicode/1f926.png?v8",facepunch:"unicode/1f44a.png?v8",factory:"unicode/1f3ed.png?v8",factory_worker:"unicode/1f9d1-1f3ed.png?v8",fairy:"unicode/1f9da.png?v8",fairy_man:"unicode/1f9da-2642.png?v8",fairy_woman:"unicode/1f9da-2640.png?v8",falafel:"unicode/1f9c6.png?v8",falkland_islands:"unicode/1f1eb-1f1f0.png?v8",fallen_leaf:"unicode/1f342.png?v8",family:"unicode/1f46a.png?v8",family_man_boy:"unicode/1f468-1f466.png?v8",family_man_boy_boy:"unicode/1f468-1f466-1f466.png?v8",family_man_girl:"unicode/1f468-1f467.png?v8",family_man_girl_boy:"unicode/1f468-1f467-1f466.png?v8",family_man_girl_girl:"unicode/1f468-1f467-1f467.png?v8",family_man_man_boy:"unicode/1f468-1f468-1f466.png?v8",family_man_man_boy_boy:"unicode/1f468-1f468-1f466-1f466.png?v8",family_man_man_girl:"unicode/1f468-1f468-1f467.png?v8",family_man_man_girl_boy:"unicode/1f468-1f468-1f467-1f466.png?v8",family_man_man_girl_girl:"unicode/1f468-1f468-1f467-1f467.png?v8",family_man_woman_boy:"unicode/1f468-1f469-1f466.png?v8",family_man_woman_boy_boy:"unicode/1f468-1f469-1f466-1f466.png?v8",family_man_woman_girl:"unicode/1f468-1f469-1f467.png?v8",family_man_woman_girl_boy:"unicode/1f468-1f469-1f467-1f466.png?v8",family_man_woman_girl_girl:"unicode/1f468-1f469-1f467-1f467.png?v8",family_woman_boy:"unicode/1f469-1f466.png?v8",family_woman_boy_boy:"unicode/1f469-1f466-1f466.png?v8",family_woman_girl:"unicode/1f469-1f467.png?v8",family_woman_girl_boy:"unicode/1f469-1f467-1f466.png?v8",family_woman_girl_girl:"unicode/1f469-1f467-1f467.png?v8",family_woman_woman_boy:"unicode/1f469-1f469-1f466.png?v8",family_woman_woman_boy_boy:"unicode/1f469-1f469-1f466-1f466.png?v8",family_woman_woman_girl:"unicode/1f469-1f469-1f467.png?v8",family_woman_woman_girl_boy:"unicode/1f469-1f469-1f467-1f466.png?v8",family_woman_woman_girl_girl:"unicode/1f469-1f469-1f467-1f467.png?v8",farmer:"unicode/1f9d1-1f33e.png?v8",faroe_islands:"unicode/1f1eb-1f1f4.png?v8",fast_forward:"unicode/23e9.png?v8",fax:"unicode/1f4e0.png?v8",fearful:"unicode/1f628.png?v8",feather:"unicode/1fab6.png?v8",feelsgood:"feelsgood.png?v8",feet:"unicode/1f43e.png?v8",female_detective:"unicode/1f575-2640.png?v8",female_sign:"unicode/2640.png?v8",ferris_wheel:"unicode/1f3a1.png?v8",ferry:"unicode/26f4.png?v8",field_hockey:"unicode/1f3d1.png?v8",fiji:"unicode/1f1eb-1f1ef.png?v8",file_cabinet:"unicode/1f5c4.png?v8",file_folder:"unicode/1f4c1.png?v8",film_projector:"unicode/1f4fd.png?v8",film_strip:"unicode/1f39e.png?v8",finland:"unicode/1f1eb-1f1ee.png?v8",finnadie:"finnadie.png?v8",fire:"unicode/1f525.png?v8",fire_engine:"unicode/1f692.png?v8",fire_extinguisher:"unicode/1f9ef.png?v8",firecracker:"unicode/1f9e8.png?v8",firefighter:"unicode/1f9d1-1f692.png?v8",fireworks:"unicode/1f386.png?v8",first_quarter_moon:"unicode/1f313.png?v8",first_quarter_moon_with_face:"unicode/1f31b.png?v8",fish:"unicode/1f41f.png?v8",fish_cake:"unicode/1f365.png?v8",fishing_pole_and_fish:"unicode/1f3a3.png?v8",fishsticks:"fishsticks.png?v8",fist:"unicode/270a.png?v8",fist_left:"unicode/1f91b.png?v8",fist_oncoming:"unicode/1f44a.png?v8",fist_raised:"unicode/270a.png?v8",fist_right:"unicode/1f91c.png?v8",five:"unicode/0035-20e3.png?v8",flags:"unicode/1f38f.png?v8",flamingo:"unicode/1f9a9.png?v8",flashlight:"unicode/1f526.png?v8",flat_shoe:"unicode/1f97f.png?v8",flatbread:"unicode/1fad3.png?v8",fleur_de_lis:"unicode/269c.png?v8",flight_arrival:"unicode/1f6ec.png?v8",flight_departure:"unicode/1f6eb.png?v8",flipper:"unicode/1f42c.png?v8",floppy_disk:"unicode/1f4be.png?v8",flower_playing_cards:"unicode/1f3b4.png?v8",flushed:"unicode/1f633.png?v8",fly:"unicode/1fab0.png?v8",flying_disc:"unicode/1f94f.png?v8",flying_saucer:"unicode/1f6f8.png?v8",fog:"unicode/1f32b.png?v8",foggy:"unicode/1f301.png?v8",fondue:"unicode/1fad5.png?v8",foot:"unicode/1f9b6.png?v8",football:"unicode/1f3c8.png?v8",footprints:"unicode/1f463.png?v8",fork_and_knife:"unicode/1f374.png?v8",fortune_cookie:"unicode/1f960.png?v8",fountain:"unicode/26f2.png?v8",fountain_pen:"unicode/1f58b.png?v8",four:"unicode/0034-20e3.png?v8",four_leaf_clover:"unicode/1f340.png?v8",fox_face:"unicode/1f98a.png?v8",fr:"unicode/1f1eb-1f1f7.png?v8",framed_picture:"unicode/1f5bc.png?v8",free:"unicode/1f193.png?v8",french_guiana:"unicode/1f1ec-1f1eb.png?v8",french_polynesia:"unicode/1f1f5-1f1eb.png?v8",french_southern_territories:"unicode/1f1f9-1f1eb.png?v8",fried_egg:"unicode/1f373.png?v8",fried_shrimp:"unicode/1f364.png?v8",fries:"unicode/1f35f.png?v8",frog:"unicode/1f438.png?v8",frowning:"unicode/1f626.png?v8",frowning_face:"unicode/2639.png?v8",frowning_man:"unicode/1f64d-2642.png?v8",frowning_person:"unicode/1f64d.png?v8",frowning_woman:"unicode/1f64d-2640.png?v8",fu:"unicode/1f595.png?v8",fuelpump:"unicode/26fd.png?v8",full_moon:"unicode/1f315.png?v8",full_moon_with_face:"unicode/1f31d.png?v8",funeral_urn:"unicode/26b1.png?v8",gabon:"unicode/1f1ec-1f1e6.png?v8",gambia:"unicode/1f1ec-1f1f2.png?v8",game_die:"unicode/1f3b2.png?v8",garlic:"unicode/1f9c4.png?v8",gb:"unicode/1f1ec-1f1e7.png?v8",gear:"unicode/2699.png?v8",gem:"unicode/1f48e.png?v8",gemini:"unicode/264a.png?v8",genie:"unicode/1f9de.png?v8",genie_man:"unicode/1f9de-2642.png?v8",genie_woman:"unicode/1f9de-2640.png?v8",georgia:"unicode/1f1ec-1f1ea.png?v8",ghana:"unicode/1f1ec-1f1ed.png?v8",ghost:"unicode/1f47b.png?v8",gibraltar:"unicode/1f1ec-1f1ee.png?v8",gift:"unicode/1f381.png?v8",gift_heart:"unicode/1f49d.png?v8",giraffe:"unicode/1f992.png?v8",girl:"unicode/1f467.png?v8",globe_with_meridians:"unicode/1f310.png?v8",gloves:"unicode/1f9e4.png?v8",goal_net:"unicode/1f945.png?v8",goat:"unicode/1f410.png?v8",goberserk:"goberserk.png?v8",godmode:"godmode.png?v8",goggles:"unicode/1f97d.png?v8",golf:"unicode/26f3.png?v8",golfing:"unicode/1f3cc.png?v8",golfing_man:"unicode/1f3cc-2642.png?v8",golfing_woman:"unicode/1f3cc-2640.png?v8",gorilla:"unicode/1f98d.png?v8",grapes:"unicode/1f347.png?v8",greece:"unicode/1f1ec-1f1f7.png?v8",green_apple:"unicode/1f34f.png?v8",green_book:"unicode/1f4d7.png?v8",green_circle:"unicode/1f7e2.png?v8",green_heart:"unicode/1f49a.png?v8",green_salad:"unicode/1f957.png?v8",green_square:"unicode/1f7e9.png?v8",greenland:"unicode/1f1ec-1f1f1.png?v8",grenada:"unicode/1f1ec-1f1e9.png?v8",grey_exclamation:"unicode/2755.png?v8",grey_question:"unicode/2754.png?v8",grimacing:"unicode/1f62c.png?v8",grin:"unicode/1f601.png?v8",grinning:"unicode/1f600.png?v8",guadeloupe:"unicode/1f1ec-1f1f5.png?v8",guam:"unicode/1f1ec-1f1fa.png?v8",guard:"unicode/1f482.png?v8",guardsman:"unicode/1f482-2642.png?v8",guardswoman:"unicode/1f482-2640.png?v8",guatemala:"unicode/1f1ec-1f1f9.png?v8",guernsey:"unicode/1f1ec-1f1ec.png?v8",guide_dog:"unicode/1f9ae.png?v8",guinea:"unicode/1f1ec-1f1f3.png?v8",guinea_bissau:"unicode/1f1ec-1f1fc.png?v8",guitar:"unicode/1f3b8.png?v8",gun:"unicode/1f52b.png?v8",guyana:"unicode/1f1ec-1f1fe.png?v8",haircut:"unicode/1f487.png?v8",haircut_man:"unicode/1f487-2642.png?v8",haircut_woman:"unicode/1f487-2640.png?v8",haiti:"unicode/1f1ed-1f1f9.png?v8",hamburger:"unicode/1f354.png?v8",hammer:"unicode/1f528.png?v8",hammer_and_pick:"unicode/2692.png?v8",hammer_and_wrench:"unicode/1f6e0.png?v8",hamster:"unicode/1f439.png?v8",hand:"unicode/270b.png?v8",hand_over_mouth:"unicode/1f92d.png?v8",handbag:"unicode/1f45c.png?v8",handball_person:"unicode/1f93e.png?v8",handshake:"unicode/1f91d.png?v8",hankey:"unicode/1f4a9.png?v8",hash:"unicode/0023-20e3.png?v8",hatched_chick:"unicode/1f425.png?v8",hatching_chick:"unicode/1f423.png?v8",headphones:"unicode/1f3a7.png?v8",headstone:"unicode/1faa6.png?v8",health_worker:"unicode/1f9d1-2695.png?v8",hear_no_evil:"unicode/1f649.png?v8",heard_mcdonald_islands:"unicode/1f1ed-1f1f2.png?v8",heart:"unicode/2764.png?v8",heart_decoration:"unicode/1f49f.png?v8",heart_eyes:"unicode/1f60d.png?v8",heart_eyes_cat:"unicode/1f63b.png?v8",heart_on_fire:"unicode/2764-1f525.png?v8",heartbeat:"unicode/1f493.png?v8",heartpulse:"unicode/1f497.png?v8",hearts:"unicode/2665.png?v8",heavy_check_mark:"unicode/2714.png?v8",heavy_division_sign:"unicode/2797.png?v8",heavy_dollar_sign:"unicode/1f4b2.png?v8",heavy_exclamation_mark:"unicode/2757.png?v8",heavy_heart_exclamation:"unicode/2763.png?v8",heavy_minus_sign:"unicode/2796.png?v8",heavy_multiplication_x:"unicode/2716.png?v8",heavy_plus_sign:"unicode/2795.png?v8",hedgehog:"unicode/1f994.png?v8",helicopter:"unicode/1f681.png?v8",herb:"unicode/1f33f.png?v8",hibiscus:"unicode/1f33a.png?v8",high_brightness:"unicode/1f506.png?v8",high_heel:"unicode/1f460.png?v8",hiking_boot:"unicode/1f97e.png?v8",hindu_temple:"unicode/1f6d5.png?v8",hippopotamus:"unicode/1f99b.png?v8",hocho:"unicode/1f52a.png?v8",hole:"unicode/1f573.png?v8",honduras:"unicode/1f1ed-1f1f3.png?v8",honey_pot:"unicode/1f36f.png?v8",honeybee:"unicode/1f41d.png?v8",hong_kong:"unicode/1f1ed-1f1f0.png?v8",hook:"unicode/1fa9d.png?v8",horse:"unicode/1f434.png?v8",horse_racing:"unicode/1f3c7.png?v8",hospital:"unicode/1f3e5.png?v8",hot_face:"unicode/1f975.png?v8",hot_pepper:"unicode/1f336.png?v8",hotdog:"unicode/1f32d.png?v8",hotel:"unicode/1f3e8.png?v8",hotsprings:"unicode/2668.png?v8",hourglass:"unicode/231b.png?v8",hourglass_flowing_sand:"unicode/23f3.png?v8",house:"unicode/1f3e0.png?v8",house_with_garden:"unicode/1f3e1.png?v8",houses:"unicode/1f3d8.png?v8",hugs:"unicode/1f917.png?v8",hungary:"unicode/1f1ed-1f1fa.png?v8",hurtrealbad:"hurtrealbad.png?v8",hushed:"unicode/1f62f.png?v8",hut:"unicode/1f6d6.png?v8",ice_cream:"unicode/1f368.png?v8",ice_cube:"unicode/1f9ca.png?v8",ice_hockey:"unicode/1f3d2.png?v8",ice_skate:"unicode/26f8.png?v8",icecream:"unicode/1f366.png?v8",iceland:"unicode/1f1ee-1f1f8.png?v8",id:"unicode/1f194.png?v8",ideograph_advantage:"unicode/1f250.png?v8",imp:"unicode/1f47f.png?v8",inbox_tray:"unicode/1f4e5.png?v8",incoming_envelope:"unicode/1f4e8.png?v8",india:"unicode/1f1ee-1f1f3.png?v8",indonesia:"unicode/1f1ee-1f1e9.png?v8",infinity:"unicode/267e.png?v8",information_desk_person:"unicode/1f481.png?v8",information_source:"unicode/2139.png?v8",innocent:"unicode/1f607.png?v8",interrobang:"unicode/2049.png?v8",iphone:"unicode/1f4f1.png?v8",iran:"unicode/1f1ee-1f1f7.png?v8",iraq:"unicode/1f1ee-1f1f6.png?v8",ireland:"unicode/1f1ee-1f1ea.png?v8",isle_of_man:"unicode/1f1ee-1f1f2.png?v8",israel:"unicode/1f1ee-1f1f1.png?v8",it:"unicode/1f1ee-1f1f9.png?v8",izakaya_lantern:"unicode/1f3ee.png?v8",jack_o_lantern:"unicode/1f383.png?v8",jamaica:"unicode/1f1ef-1f1f2.png?v8",japan:"unicode/1f5fe.png?v8",japanese_castle:"unicode/1f3ef.png?v8",japanese_goblin:"unicode/1f47a.png?v8",japanese_ogre:"unicode/1f479.png?v8",jeans:"unicode/1f456.png?v8",jersey:"unicode/1f1ef-1f1ea.png?v8",jigsaw:"unicode/1f9e9.png?v8",jordan:"unicode/1f1ef-1f1f4.png?v8",joy:"unicode/1f602.png?v8",joy_cat:"unicode/1f639.png?v8",joystick:"unicode/1f579.png?v8",jp:"unicode/1f1ef-1f1f5.png?v8",judge:"unicode/1f9d1-2696.png?v8",juggling_person:"unicode/1f939.png?v8",kaaba:"unicode/1f54b.png?v8",kangaroo:"unicode/1f998.png?v8",kazakhstan:"unicode/1f1f0-1f1ff.png?v8",kenya:"unicode/1f1f0-1f1ea.png?v8",key:"unicode/1f511.png?v8",keyboard:"unicode/2328.png?v8",keycap_ten:"unicode/1f51f.png?v8",kick_scooter:"unicode/1f6f4.png?v8",kimono:"unicode/1f458.png?v8",kiribati:"unicode/1f1f0-1f1ee.png?v8",kiss:"unicode/1f48b.png?v8",kissing:"unicode/1f617.png?v8",kissing_cat:"unicode/1f63d.png?v8",kissing_closed_eyes:"unicode/1f61a.png?v8",kissing_heart:"unicode/1f618.png?v8",kissing_smiling_eyes:"unicode/1f619.png?v8",kite:"unicode/1fa81.png?v8",kiwi_fruit:"unicode/1f95d.png?v8",kneeling_man:"unicode/1f9ce-2642.png?v8",kneeling_person:"unicode/1f9ce.png?v8",kneeling_woman:"unicode/1f9ce-2640.png?v8",knife:"unicode/1f52a.png?v8",knot:"unicode/1faa2.png?v8",koala:"unicode/1f428.png?v8",koko:"unicode/1f201.png?v8",kosovo:"unicode/1f1fd-1f1f0.png?v8",kr:"unicode/1f1f0-1f1f7.png?v8",kuwait:"unicode/1f1f0-1f1fc.png?v8",kyrgyzstan:"unicode/1f1f0-1f1ec.png?v8",lab_coat:"unicode/1f97c.png?v8",label:"unicode/1f3f7.png?v8",lacrosse:"unicode/1f94d.png?v8",ladder:"unicode/1fa9c.png?v8",lady_beetle:"unicode/1f41e.png?v8",lantern:"unicode/1f3ee.png?v8",laos:"unicode/1f1f1-1f1e6.png?v8",large_blue_circle:"unicode/1f535.png?v8",large_blue_diamond:"unicode/1f537.png?v8",large_orange_diamond:"unicode/1f536.png?v8",last_quarter_moon:"unicode/1f317.png?v8",last_quarter_moon_with_face:"unicode/1f31c.png?v8",latin_cross:"unicode/271d.png?v8",latvia:"unicode/1f1f1-1f1fb.png?v8",laughing:"unicode/1f606.png?v8",leafy_green:"unicode/1f96c.png?v8",leaves:"unicode/1f343.png?v8",lebanon:"unicode/1f1f1-1f1e7.png?v8",ledger:"unicode/1f4d2.png?v8",left_luggage:"unicode/1f6c5.png?v8",left_right_arrow:"unicode/2194.png?v8",left_speech_bubble:"unicode/1f5e8.png?v8",leftwards_arrow_with_hook:"unicode/21a9.png?v8",leg:"unicode/1f9b5.png?v8",lemon:"unicode/1f34b.png?v8",leo:"unicode/264c.png?v8",leopard:"unicode/1f406.png?v8",lesotho:"unicode/1f1f1-1f1f8.png?v8",level_slider:"unicode/1f39a.png?v8",liberia:"unicode/1f1f1-1f1f7.png?v8",libra:"unicode/264e.png?v8",libya:"unicode/1f1f1-1f1fe.png?v8",liechtenstein:"unicode/1f1f1-1f1ee.png?v8",light_rail:"unicode/1f688.png?v8",link:"unicode/1f517.png?v8",lion:"unicode/1f981.png?v8",lips:"unicode/1f444.png?v8",lipstick:"unicode/1f484.png?v8",lithuania:"unicode/1f1f1-1f1f9.png?v8",lizard:"unicode/1f98e.png?v8",llama:"unicode/1f999.png?v8",lobster:"unicode/1f99e.png?v8",lock:"unicode/1f512.png?v8",lock_with_ink_pen:"unicode/1f50f.png?v8",lollipop:"unicode/1f36d.png?v8",long_drum:"unicode/1fa98.png?v8",loop:"unicode/27bf.png?v8",lotion_bottle:"unicode/1f9f4.png?v8",lotus_position:"unicode/1f9d8.png?v8",lotus_position_man:"unicode/1f9d8-2642.png?v8",lotus_position_woman:"unicode/1f9d8-2640.png?v8",loud_sound:"unicode/1f50a.png?v8",loudspeaker:"unicode/1f4e2.png?v8",love_hotel:"unicode/1f3e9.png?v8",love_letter:"unicode/1f48c.png?v8",love_you_gesture:"unicode/1f91f.png?v8",low_brightness:"unicode/1f505.png?v8",luggage:"unicode/1f9f3.png?v8",lungs:"unicode/1fac1.png?v8",luxembourg:"unicode/1f1f1-1f1fa.png?v8",lying_face:"unicode/1f925.png?v8",m:"unicode/24c2.png?v8",macau:"unicode/1f1f2-1f1f4.png?v8",macedonia:"unicode/1f1f2-1f1f0.png?v8",madagascar:"unicode/1f1f2-1f1ec.png?v8",mag:"unicode/1f50d.png?v8",mag_right:"unicode/1f50e.png?v8",mage:"unicode/1f9d9.png?v8",mage_man:"unicode/1f9d9-2642.png?v8",mage_woman:"unicode/1f9d9-2640.png?v8",magic_wand:"unicode/1fa84.png?v8",magnet:"unicode/1f9f2.png?v8",mahjong:"unicode/1f004.png?v8",mailbox:"unicode/1f4eb.png?v8",mailbox_closed:"unicode/1f4ea.png?v8",mailbox_with_mail:"unicode/1f4ec.png?v8",mailbox_with_no_mail:"unicode/1f4ed.png?v8",malawi:"unicode/1f1f2-1f1fc.png?v8",malaysia:"unicode/1f1f2-1f1fe.png?v8",maldives:"unicode/1f1f2-1f1fb.png?v8",male_detective:"unicode/1f575-2642.png?v8",male_sign:"unicode/2642.png?v8",mali:"unicode/1f1f2-1f1f1.png?v8",malta:"unicode/1f1f2-1f1f9.png?v8",mammoth:"unicode/1f9a3.png?v8",man:"unicode/1f468.png?v8",man_artist:"unicode/1f468-1f3a8.png?v8",man_astronaut:"unicode/1f468-1f680.png?v8",man_beard:"unicode/1f9d4-2642.png?v8",man_cartwheeling:"unicode/1f938-2642.png?v8",man_cook:"unicode/1f468-1f373.png?v8",man_dancing:"unicode/1f57a.png?v8",man_facepalming:"unicode/1f926-2642.png?v8",man_factory_worker:"unicode/1f468-1f3ed.png?v8",man_farmer:"unicode/1f468-1f33e.png?v8",man_feeding_baby:"unicode/1f468-1f37c.png?v8",man_firefighter:"unicode/1f468-1f692.png?v8",man_health_worker:"unicode/1f468-2695.png?v8",man_in_manual_wheelchair:"unicode/1f468-1f9bd.png?v8",man_in_motorized_wheelchair:"unicode/1f468-1f9bc.png?v8",man_in_tuxedo:"unicode/1f935-2642.png?v8",man_judge:"unicode/1f468-2696.png?v8",man_juggling:"unicode/1f939-2642.png?v8",man_mechanic:"unicode/1f468-1f527.png?v8",man_office_worker:"unicode/1f468-1f4bc.png?v8",man_pilot:"unicode/1f468-2708.png?v8",man_playing_handball:"unicode/1f93e-2642.png?v8",man_playing_water_polo:"unicode/1f93d-2642.png?v8",man_scientist:"unicode/1f468-1f52c.png?v8",man_shrugging:"unicode/1f937-2642.png?v8",man_singer:"unicode/1f468-1f3a4.png?v8",man_student:"unicode/1f468-1f393.png?v8",man_teacher:"unicode/1f468-1f3eb.png?v8",man_technologist:"unicode/1f468-1f4bb.png?v8",man_with_gua_pi_mao:"unicode/1f472.png?v8",man_with_probing_cane:"unicode/1f468-1f9af.png?v8",man_with_turban:"unicode/1f473-2642.png?v8",man_with_veil:"unicode/1f470-2642.png?v8",mandarin:"unicode/1f34a.png?v8",mango:"unicode/1f96d.png?v8",mans_shoe:"unicode/1f45e.png?v8",mantelpiece_clock:"unicode/1f570.png?v8",manual_wheelchair:"unicode/1f9bd.png?v8",maple_leaf:"unicode/1f341.png?v8",marshall_islands:"unicode/1f1f2-1f1ed.png?v8",martial_arts_uniform:"unicode/1f94b.png?v8",martinique:"unicode/1f1f2-1f1f6.png?v8",mask:"unicode/1f637.png?v8",massage:"unicode/1f486.png?v8",massage_man:"unicode/1f486-2642.png?v8",massage_woman:"unicode/1f486-2640.png?v8",mate:"unicode/1f9c9.png?v8",mauritania:"unicode/1f1f2-1f1f7.png?v8",mauritius:"unicode/1f1f2-1f1fa.png?v8",mayotte:"unicode/1f1fe-1f1f9.png?v8",meat_on_bone:"unicode/1f356.png?v8",mechanic:"unicode/1f9d1-1f527.png?v8",mechanical_arm:"unicode/1f9be.png?v8",mechanical_leg:"unicode/1f9bf.png?v8",medal_military:"unicode/1f396.png?v8",medal_sports:"unicode/1f3c5.png?v8",medical_symbol:"unicode/2695.png?v8",mega:"unicode/1f4e3.png?v8",melon:"unicode/1f348.png?v8",memo:"unicode/1f4dd.png?v8",men_wrestling:"unicode/1f93c-2642.png?v8",mending_heart:"unicode/2764-1fa79.png?v8",menorah:"unicode/1f54e.png?v8",mens:"unicode/1f6b9.png?v8",mermaid:"unicode/1f9dc-2640.png?v8",merman:"unicode/1f9dc-2642.png?v8",merperson:"unicode/1f9dc.png?v8",metal:"unicode/1f918.png?v8",metro:"unicode/1f687.png?v8",mexico:"unicode/1f1f2-1f1fd.png?v8",microbe:"unicode/1f9a0.png?v8",micronesia:"unicode/1f1eb-1f1f2.png?v8",microphone:"unicode/1f3a4.png?v8",microscope:"unicode/1f52c.png?v8",middle_finger:"unicode/1f595.png?v8",military_helmet:"unicode/1fa96.png?v8",milk_glass:"unicode/1f95b.png?v8",milky_way:"unicode/1f30c.png?v8",minibus:"unicode/1f690.png?v8",minidisc:"unicode/1f4bd.png?v8",mirror:"unicode/1fa9e.png?v8",mobile_phone_off:"unicode/1f4f4.png?v8",moldova:"unicode/1f1f2-1f1e9.png?v8",monaco:"unicode/1f1f2-1f1e8.png?v8",money_mouth_face:"unicode/1f911.png?v8",money_with_wings:"unicode/1f4b8.png?v8",moneybag:"unicode/1f4b0.png?v8",mongolia:"unicode/1f1f2-1f1f3.png?v8",monkey:"unicode/1f412.png?v8",monkey_face:"unicode/1f435.png?v8",monocle_face:"unicode/1f9d0.png?v8",monorail:"unicode/1f69d.png?v8",montenegro:"unicode/1f1f2-1f1ea.png?v8",montserrat:"unicode/1f1f2-1f1f8.png?v8",moon:"unicode/1f314.png?v8",moon_cake:"unicode/1f96e.png?v8",morocco:"unicode/1f1f2-1f1e6.png?v8",mortar_board:"unicode/1f393.png?v8",mosque:"unicode/1f54c.png?v8",mosquito:"unicode/1f99f.png?v8",motor_boat:"unicode/1f6e5.png?v8",motor_scooter:"unicode/1f6f5.png?v8",motorcycle:"unicode/1f3cd.png?v8",motorized_wheelchair:"unicode/1f9bc.png?v8",motorway:"unicode/1f6e3.png?v8",mount_fuji:"unicode/1f5fb.png?v8",mountain:"unicode/26f0.png?v8",mountain_bicyclist:"unicode/1f6b5.png?v8",mountain_biking_man:"unicode/1f6b5-2642.png?v8",mountain_biking_woman:"unicode/1f6b5-2640.png?v8",mountain_cableway:"unicode/1f6a0.png?v8",mountain_railway:"unicode/1f69e.png?v8",mountain_snow:"unicode/1f3d4.png?v8",mouse:"unicode/1f42d.png?v8",mouse2:"unicode/1f401.png?v8",mouse_trap:"unicode/1faa4.png?v8",movie_camera:"unicode/1f3a5.png?v8",moyai:"unicode/1f5ff.png?v8",mozambique:"unicode/1f1f2-1f1ff.png?v8",mrs_claus:"unicode/1f936.png?v8",muscle:"unicode/1f4aa.png?v8",mushroom:"unicode/1f344.png?v8",musical_keyboard:"unicode/1f3b9.png?v8",musical_note:"unicode/1f3b5.png?v8",musical_score:"unicode/1f3bc.png?v8",mute:"unicode/1f507.png?v8",mx_claus:"unicode/1f9d1-1f384.png?v8",myanmar:"unicode/1f1f2-1f1f2.png?v8",nail_care:"unicode/1f485.png?v8",name_badge:"unicode/1f4db.png?v8",namibia:"unicode/1f1f3-1f1e6.png?v8",national_park:"unicode/1f3de.png?v8",nauru:"unicode/1f1f3-1f1f7.png?v8",nauseated_face:"unicode/1f922.png?v8",nazar_amulet:"unicode/1f9ff.png?v8",neckbeard:"neckbeard.png?v8",necktie:"unicode/1f454.png?v8",negative_squared_cross_mark:"unicode/274e.png?v8",nepal:"unicode/1f1f3-1f1f5.png?v8",nerd_face:"unicode/1f913.png?v8",nesting_dolls:"unicode/1fa86.png?v8",netherlands:"unicode/1f1f3-1f1f1.png?v8",neutral_face:"unicode/1f610.png?v8",new:"unicode/1f195.png?v8",new_caledonia:"unicode/1f1f3-1f1e8.png?v8",new_moon:"unicode/1f311.png?v8",new_moon_with_face:"unicode/1f31a.png?v8",new_zealand:"unicode/1f1f3-1f1ff.png?v8",newspaper:"unicode/1f4f0.png?v8",newspaper_roll:"unicode/1f5de.png?v8",next_track_button:"unicode/23ed.png?v8",ng:"unicode/1f196.png?v8",ng_man:"unicode/1f645-2642.png?v8",ng_woman:"unicode/1f645-2640.png?v8",nicaragua:"unicode/1f1f3-1f1ee.png?v8",niger:"unicode/1f1f3-1f1ea.png?v8",nigeria:"unicode/1f1f3-1f1ec.png?v8",night_with_stars:"unicode/1f303.png?v8",nine:"unicode/0039-20e3.png?v8",ninja:"unicode/1f977.png?v8",niue:"unicode/1f1f3-1f1fa.png?v8",no_bell:"unicode/1f515.png?v8",no_bicycles:"unicode/1f6b3.png?v8",no_entry:"unicode/26d4.png?v8",no_entry_sign:"unicode/1f6ab.png?v8",no_good:"unicode/1f645.png?v8",no_good_man:"unicode/1f645-2642.png?v8",no_good_woman:"unicode/1f645-2640.png?v8",no_mobile_phones:"unicode/1f4f5.png?v8",no_mouth:"unicode/1f636.png?v8",no_pedestrians:"unicode/1f6b7.png?v8",no_smoking:"unicode/1f6ad.png?v8","non-potable_water":"unicode/1f6b1.png?v8",norfolk_island:"unicode/1f1f3-1f1eb.png?v8",north_korea:"unicode/1f1f0-1f1f5.png?v8",northern_mariana_islands:"unicode/1f1f2-1f1f5.png?v8",norway:"unicode/1f1f3-1f1f4.png?v8",nose:"unicode/1f443.png?v8",notebook:"unicode/1f4d3.png?v8",notebook_with_decorative_cover:"unicode/1f4d4.png?v8",notes:"unicode/1f3b6.png?v8",nut_and_bolt:"unicode/1f529.png?v8",o:"unicode/2b55.png?v8",o2:"unicode/1f17e.png?v8",ocean:"unicode/1f30a.png?v8",octocat:"octocat.png?v8",octopus:"unicode/1f419.png?v8",oden:"unicode/1f362.png?v8",office:"unicode/1f3e2.png?v8",office_worker:"unicode/1f9d1-1f4bc.png?v8",oil_drum:"unicode/1f6e2.png?v8",ok:"unicode/1f197.png?v8",ok_hand:"unicode/1f44c.png?v8",ok_man:"unicode/1f646-2642.png?v8",ok_person:"unicode/1f646.png?v8",ok_woman:"unicode/1f646-2640.png?v8",old_key:"unicode/1f5dd.png?v8",older_adult:"unicode/1f9d3.png?v8",older_man:"unicode/1f474.png?v8",older_woman:"unicode/1f475.png?v8",olive:"unicode/1fad2.png?v8",om:"unicode/1f549.png?v8",oman:"unicode/1f1f4-1f1f2.png?v8",on:"unicode/1f51b.png?v8",oncoming_automobile:"unicode/1f698.png?v8",oncoming_bus:"unicode/1f68d.png?v8",oncoming_police_car:"unicode/1f694.png?v8",oncoming_taxi:"unicode/1f696.png?v8",one:"unicode/0031-20e3.png?v8",one_piece_swimsuit:"unicode/1fa71.png?v8",onion:"unicode/1f9c5.png?v8",open_book:"unicode/1f4d6.png?v8",open_file_folder:"unicode/1f4c2.png?v8",open_hands:"unicode/1f450.png?v8",open_mouth:"unicode/1f62e.png?v8",open_umbrella:"unicode/2602.png?v8",ophiuchus:"unicode/26ce.png?v8",orange:"unicode/1f34a.png?v8",orange_book:"unicode/1f4d9.png?v8",orange_circle:"unicode/1f7e0.png?v8",orange_heart:"unicode/1f9e1.png?v8",orange_square:"unicode/1f7e7.png?v8",orangutan:"unicode/1f9a7.png?v8",orthodox_cross:"unicode/2626.png?v8",otter:"unicode/1f9a6.png?v8",outbox_tray:"unicode/1f4e4.png?v8",owl:"unicode/1f989.png?v8",ox:"unicode/1f402.png?v8",oyster:"unicode/1f9aa.png?v8",package:"unicode/1f4e6.png?v8",page_facing_up:"unicode/1f4c4.png?v8",page_with_curl:"unicode/1f4c3.png?v8",pager:"unicode/1f4df.png?v8",paintbrush:"unicode/1f58c.png?v8",pakistan:"unicode/1f1f5-1f1f0.png?v8",palau:"unicode/1f1f5-1f1fc.png?v8",palestinian_territories:"unicode/1f1f5-1f1f8.png?v8",palm_tree:"unicode/1f334.png?v8",palms_up_together:"unicode/1f932.png?v8",panama:"unicode/1f1f5-1f1e6.png?v8",pancakes:"unicode/1f95e.png?v8",panda_face:"unicode/1f43c.png?v8",paperclip:"unicode/1f4ce.png?v8",paperclips:"unicode/1f587.png?v8",papua_new_guinea:"unicode/1f1f5-1f1ec.png?v8",parachute:"unicode/1fa82.png?v8",paraguay:"unicode/1f1f5-1f1fe.png?v8",parasol_on_ground:"unicode/26f1.png?v8",parking:"unicode/1f17f.png?v8",parrot:"unicode/1f99c.png?v8",part_alternation_mark:"unicode/303d.png?v8",partly_sunny:"unicode/26c5.png?v8",partying_face:"unicode/1f973.png?v8",passenger_ship:"unicode/1f6f3.png?v8",passport_control:"unicode/1f6c2.png?v8",pause_button:"unicode/23f8.png?v8",paw_prints:"unicode/1f43e.png?v8",peace_symbol:"unicode/262e.png?v8",peach:"unicode/1f351.png?v8",peacock:"unicode/1f99a.png?v8",peanuts:"unicode/1f95c.png?v8",pear:"unicode/1f350.png?v8",pen:"unicode/1f58a.png?v8",pencil:"unicode/1f4dd.png?v8",pencil2:"unicode/270f.png?v8",penguin:"unicode/1f427.png?v8",pensive:"unicode/1f614.png?v8",people_holding_hands:"unicode/1f9d1-1f91d-1f9d1.png?v8",people_hugging:"unicode/1fac2.png?v8",performing_arts:"unicode/1f3ad.png?v8",persevere:"unicode/1f623.png?v8",person_bald:"unicode/1f9d1-1f9b2.png?v8",person_curly_hair:"unicode/1f9d1-1f9b1.png?v8",person_feeding_baby:"unicode/1f9d1-1f37c.png?v8",person_fencing:"unicode/1f93a.png?v8",person_in_manual_wheelchair:"unicode/1f9d1-1f9bd.png?v8",person_in_motorized_wheelchair:"unicode/1f9d1-1f9bc.png?v8",person_in_tuxedo:"unicode/1f935.png?v8",person_red_hair:"unicode/1f9d1-1f9b0.png?v8",person_white_hair:"unicode/1f9d1-1f9b3.png?v8",person_with_probing_cane:"unicode/1f9d1-1f9af.png?v8",person_with_turban:"unicode/1f473.png?v8",person_with_veil:"unicode/1f470.png?v8",peru:"unicode/1f1f5-1f1ea.png?v8",petri_dish:"unicode/1f9eb.png?v8",philippines:"unicode/1f1f5-1f1ed.png?v8",phone:"unicode/260e.png?v8",pick:"unicode/26cf.png?v8",pickup_truck:"unicode/1f6fb.png?v8",pie:"unicode/1f967.png?v8",pig:"unicode/1f437.png?v8",pig2:"unicode/1f416.png?v8",pig_nose:"unicode/1f43d.png?v8",pill:"unicode/1f48a.png?v8",pilot:"unicode/1f9d1-2708.png?v8",pinata:"unicode/1fa85.png?v8",pinched_fingers:"unicode/1f90c.png?v8",pinching_hand:"unicode/1f90f.png?v8",pineapple:"unicode/1f34d.png?v8",ping_pong:"unicode/1f3d3.png?v8",pirate_flag:"unicode/1f3f4-2620.png?v8",pisces:"unicode/2653.png?v8",pitcairn_islands:"unicode/1f1f5-1f1f3.png?v8",pizza:"unicode/1f355.png?v8",placard:"unicode/1faa7.png?v8",place_of_worship:"unicode/1f6d0.png?v8",plate_with_cutlery:"unicode/1f37d.png?v8",play_or_pause_button:"unicode/23ef.png?v8",pleading_face:"unicode/1f97a.png?v8",plunger:"unicode/1faa0.png?v8",point_down:"unicode/1f447.png?v8",point_left:"unicode/1f448.png?v8",point_right:"unicode/1f449.png?v8",point_up:"unicode/261d.png?v8",point_up_2:"unicode/1f446.png?v8",poland:"unicode/1f1f5-1f1f1.png?v8",polar_bear:"unicode/1f43b-2744.png?v8",police_car:"unicode/1f693.png?v8",police_officer:"unicode/1f46e.png?v8",policeman:"unicode/1f46e-2642.png?v8",policewoman:"unicode/1f46e-2640.png?v8",poodle:"unicode/1f429.png?v8",poop:"unicode/1f4a9.png?v8",popcorn:"unicode/1f37f.png?v8",portugal:"unicode/1f1f5-1f1f9.png?v8",post_office:"unicode/1f3e3.png?v8",postal_horn:"unicode/1f4ef.png?v8",postbox:"unicode/1f4ee.png?v8",potable_water:"unicode/1f6b0.png?v8",potato:"unicode/1f954.png?v8",potted_plant:"unicode/1fab4.png?v8",pouch:"unicode/1f45d.png?v8",poultry_leg:"unicode/1f357.png?v8",pound:"unicode/1f4b7.png?v8",pout:"unicode/1f621.png?v8",pouting_cat:"unicode/1f63e.png?v8",pouting_face:"unicode/1f64e.png?v8",pouting_man:"unicode/1f64e-2642.png?v8",pouting_woman:"unicode/1f64e-2640.png?v8",pray:"unicode/1f64f.png?v8",prayer_beads:"unicode/1f4ff.png?v8",pregnant_woman:"unicode/1f930.png?v8",pretzel:"unicode/1f968.png?v8",previous_track_button:"unicode/23ee.png?v8",prince:"unicode/1f934.png?v8",princess:"unicode/1f478.png?v8",printer:"unicode/1f5a8.png?v8",probing_cane:"unicode/1f9af.png?v8",puerto_rico:"unicode/1f1f5-1f1f7.png?v8",punch:"unicode/1f44a.png?v8",purple_circle:"unicode/1f7e3.png?v8",purple_heart:"unicode/1f49c.png?v8",purple_square:"unicode/1f7ea.png?v8",purse:"unicode/1f45b.png?v8",pushpin:"unicode/1f4cc.png?v8",put_litter_in_its_place:"unicode/1f6ae.png?v8",qatar:"unicode/1f1f6-1f1e6.png?v8",question:"unicode/2753.png?v8",rabbit:"unicode/1f430.png?v8",rabbit2:"unicode/1f407.png?v8",raccoon:"unicode/1f99d.png?v8",racehorse:"unicode/1f40e.png?v8",racing_car:"unicode/1f3ce.png?v8",radio:"unicode/1f4fb.png?v8",radio_button:"unicode/1f518.png?v8",radioactive:"unicode/2622.png?v8",rage:"unicode/1f621.png?v8",rage1:"rage1.png?v8",rage2:"rage2.png?v8",rage3:"rage3.png?v8",rage4:"rage4.png?v8",railway_car:"unicode/1f683.png?v8",railway_track:"unicode/1f6e4.png?v8",rainbow:"unicode/1f308.png?v8",rainbow_flag:"unicode/1f3f3-1f308.png?v8",raised_back_of_hand:"unicode/1f91a.png?v8",raised_eyebrow:"unicode/1f928.png?v8",raised_hand:"unicode/270b.png?v8",raised_hand_with_fingers_splayed:"unicode/1f590.png?v8",raised_hands:"unicode/1f64c.png?v8",raising_hand:"unicode/1f64b.png?v8",raising_hand_man:"unicode/1f64b-2642.png?v8",raising_hand_woman:"unicode/1f64b-2640.png?v8",ram:"unicode/1f40f.png?v8",ramen:"unicode/1f35c.png?v8",rat:"unicode/1f400.png?v8",razor:"unicode/1fa92.png?v8",receipt:"unicode/1f9fe.png?v8",record_button:"unicode/23fa.png?v8",recycle:"unicode/267b.png?v8",red_car:"unicode/1f697.png?v8",red_circle:"unicode/1f534.png?v8",red_envelope:"unicode/1f9e7.png?v8",red_haired_man:"unicode/1f468-1f9b0.png?v8",red_haired_woman:"unicode/1f469-1f9b0.png?v8",red_square:"unicode/1f7e5.png?v8",registered:"unicode/00ae.png?v8",relaxed:"unicode/263a.png?v8",relieved:"unicode/1f60c.png?v8",reminder_ribbon:"unicode/1f397.png?v8",repeat:"unicode/1f501.png?v8",repeat_one:"unicode/1f502.png?v8",rescue_worker_helmet:"unicode/26d1.png?v8",restroom:"unicode/1f6bb.png?v8",reunion:"unicode/1f1f7-1f1ea.png?v8",revolving_hearts:"unicode/1f49e.png?v8",rewind:"unicode/23ea.png?v8",rhinoceros:"unicode/1f98f.png?v8",ribbon:"unicode/1f380.png?v8",rice:"unicode/1f35a.png?v8",rice_ball:"unicode/1f359.png?v8",rice_cracker:"unicode/1f358.png?v8",rice_scene:"unicode/1f391.png?v8",right_anger_bubble:"unicode/1f5ef.png?v8",ring:"unicode/1f48d.png?v8",ringed_planet:"unicode/1fa90.png?v8",robot:"unicode/1f916.png?v8",rock:"unicode/1faa8.png?v8",rocket:"unicode/1f680.png?v8",rofl:"unicode/1f923.png?v8",roll_eyes:"unicode/1f644.png?v8",roll_of_paper:"unicode/1f9fb.png?v8",roller_coaster:"unicode/1f3a2.png?v8",roller_skate:"unicode/1f6fc.png?v8",romania:"unicode/1f1f7-1f1f4.png?v8",rooster:"unicode/1f413.png?v8",rose:"unicode/1f339.png?v8",rosette:"unicode/1f3f5.png?v8",rotating_light:"unicode/1f6a8.png?v8",round_pushpin:"unicode/1f4cd.png?v8",rowboat:"unicode/1f6a3.png?v8",rowing_man:"unicode/1f6a3-2642.png?v8",rowing_woman:"unicode/1f6a3-2640.png?v8",ru:"unicode/1f1f7-1f1fa.png?v8",rugby_football:"unicode/1f3c9.png?v8",runner:"unicode/1f3c3.png?v8",running:"unicode/1f3c3.png?v8",running_man:"unicode/1f3c3-2642.png?v8",running_shirt_with_sash:"unicode/1f3bd.png?v8",running_woman:"unicode/1f3c3-2640.png?v8",rwanda:"unicode/1f1f7-1f1fc.png?v8",sa:"unicode/1f202.png?v8",safety_pin:"unicode/1f9f7.png?v8",safety_vest:"unicode/1f9ba.png?v8",sagittarius:"unicode/2650.png?v8",sailboat:"unicode/26f5.png?v8",sake:"unicode/1f376.png?v8",salt:"unicode/1f9c2.png?v8",samoa:"unicode/1f1fc-1f1f8.png?v8",san_marino:"unicode/1f1f8-1f1f2.png?v8",sandal:"unicode/1f461.png?v8",sandwich:"unicode/1f96a.png?v8",santa:"unicode/1f385.png?v8",sao_tome_principe:"unicode/1f1f8-1f1f9.png?v8",sari:"unicode/1f97b.png?v8",sassy_man:"unicode/1f481-2642.png?v8",sassy_woman:"unicode/1f481-2640.png?v8",satellite:"unicode/1f4e1.png?v8",satisfied:"unicode/1f606.png?v8",saudi_arabia:"unicode/1f1f8-1f1e6.png?v8",sauna_man:"unicode/1f9d6-2642.png?v8",sauna_person:"unicode/1f9d6.png?v8",sauna_woman:"unicode/1f9d6-2640.png?v8",sauropod:"unicode/1f995.png?v8",saxophone:"unicode/1f3b7.png?v8",scarf:"unicode/1f9e3.png?v8",school:"unicode/1f3eb.png?v8",school_satchel:"unicode/1f392.png?v8",scientist:"unicode/1f9d1-1f52c.png?v8",scissors:"unicode/2702.png?v8",scorpion:"unicode/1f982.png?v8",scorpius:"unicode/264f.png?v8",scotland:"unicode/1f3f4-e0067-e0062-e0073-e0063-e0074-e007f.png?v8",scream:"unicode/1f631.png?v8",scream_cat:"unicode/1f640.png?v8",screwdriver:"unicode/1fa9b.png?v8",scroll:"unicode/1f4dc.png?v8",seal:"unicode/1f9ad.png?v8",seat:"unicode/1f4ba.png?v8",secret:"unicode/3299.png?v8",see_no_evil:"unicode/1f648.png?v8",seedling:"unicode/1f331.png?v8",selfie:"unicode/1f933.png?v8",senegal:"unicode/1f1f8-1f1f3.png?v8",serbia:"unicode/1f1f7-1f1f8.png?v8",service_dog:"unicode/1f415-1f9ba.png?v8",seven:"unicode/0037-20e3.png?v8",sewing_needle:"unicode/1faa1.png?v8",seychelles:"unicode/1f1f8-1f1e8.png?v8",shallow_pan_of_food:"unicode/1f958.png?v8",shamrock:"unicode/2618.png?v8",shark:"unicode/1f988.png?v8",shaved_ice:"unicode/1f367.png?v8",sheep:"unicode/1f411.png?v8",shell:"unicode/1f41a.png?v8",shield:"unicode/1f6e1.png?v8",shinto_shrine:"unicode/26e9.png?v8",ship:"unicode/1f6a2.png?v8",shipit:"shipit.png?v8",shirt:"unicode/1f455.png?v8",shit:"unicode/1f4a9.png?v8",shoe:"unicode/1f45e.png?v8",shopping:"unicode/1f6cd.png?v8",shopping_cart:"unicode/1f6d2.png?v8",shorts:"unicode/1fa73.png?v8",shower:"unicode/1f6bf.png?v8",shrimp:"unicode/1f990.png?v8",shrug:"unicode/1f937.png?v8",shushing_face:"unicode/1f92b.png?v8",sierra_leone:"unicode/1f1f8-1f1f1.png?v8",signal_strength:"unicode/1f4f6.png?v8",singapore:"unicode/1f1f8-1f1ec.png?v8",singer:"unicode/1f9d1-1f3a4.png?v8",sint_maarten:"unicode/1f1f8-1f1fd.png?v8",six:"unicode/0036-20e3.png?v8",six_pointed_star:"unicode/1f52f.png?v8",skateboard:"unicode/1f6f9.png?v8",ski:"unicode/1f3bf.png?v8",skier:"unicode/26f7.png?v8",skull:"unicode/1f480.png?v8",skull_and_crossbones:"unicode/2620.png?v8",skunk:"unicode/1f9a8.png?v8",sled:"unicode/1f6f7.png?v8",sleeping:"unicode/1f634.png?v8",sleeping_bed:"unicode/1f6cc.png?v8",sleepy:"unicode/1f62a.png?v8",slightly_frowning_face:"unicode/1f641.png?v8",slightly_smiling_face:"unicode/1f642.png?v8",slot_machine:"unicode/1f3b0.png?v8",sloth:"unicode/1f9a5.png?v8",slovakia:"unicode/1f1f8-1f1f0.png?v8",slovenia:"unicode/1f1f8-1f1ee.png?v8",small_airplane:"unicode/1f6e9.png?v8",small_blue_diamond:"unicode/1f539.png?v8",small_orange_diamond:"unicode/1f538.png?v8",small_red_triangle:"unicode/1f53a.png?v8",small_red_triangle_down:"unicode/1f53b.png?v8",smile:"unicode/1f604.png?v8",smile_cat:"unicode/1f638.png?v8",smiley:"unicode/1f603.png?v8",smiley_cat:"unicode/1f63a.png?v8",smiling_face_with_tear:"unicode/1f972.png?v8",smiling_face_with_three_hearts:"unicode/1f970.png?v8",smiling_imp:"unicode/1f608.png?v8",smirk:"unicode/1f60f.png?v8",smirk_cat:"unicode/1f63c.png?v8",smoking:"unicode/1f6ac.png?v8",snail:"unicode/1f40c.png?v8",snake:"unicode/1f40d.png?v8",sneezing_face:"unicode/1f927.png?v8",snowboarder:"unicode/1f3c2.png?v8",snowflake:"unicode/2744.png?v8",snowman:"unicode/26c4.png?v8",snowman_with_snow:"unicode/2603.png?v8",soap:"unicode/1f9fc.png?v8",sob:"unicode/1f62d.png?v8",soccer:"unicode/26bd.png?v8",socks:"unicode/1f9e6.png?v8",softball:"unicode/1f94e.png?v8",solomon_islands:"unicode/1f1f8-1f1e7.png?v8",somalia:"unicode/1f1f8-1f1f4.png?v8",soon:"unicode/1f51c.png?v8",sos:"unicode/1f198.png?v8",sound:"unicode/1f509.png?v8",south_africa:"unicode/1f1ff-1f1e6.png?v8",south_georgia_south_sandwich_islands:"unicode/1f1ec-1f1f8.png?v8",south_sudan:"unicode/1f1f8-1f1f8.png?v8",space_invader:"unicode/1f47e.png?v8",spades:"unicode/2660.png?v8",spaghetti:"unicode/1f35d.png?v8",sparkle:"unicode/2747.png?v8",sparkler:"unicode/1f387.png?v8",sparkles:"unicode/2728.png?v8",sparkling_heart:"unicode/1f496.png?v8",speak_no_evil:"unicode/1f64a.png?v8",speaker:"unicode/1f508.png?v8",speaking_head:"unicode/1f5e3.png?v8",speech_balloon:"unicode/1f4ac.png?v8",speedboat:"unicode/1f6a4.png?v8",spider:"unicode/1f577.png?v8",spider_web:"unicode/1f578.png?v8",spiral_calendar:"unicode/1f5d3.png?v8",spiral_notepad:"unicode/1f5d2.png?v8",sponge:"unicode/1f9fd.png?v8",spoon:"unicode/1f944.png?v8",squid:"unicode/1f991.png?v8",sri_lanka:"unicode/1f1f1-1f1f0.png?v8",st_barthelemy:"unicode/1f1e7-1f1f1.png?v8",st_helena:"unicode/1f1f8-1f1ed.png?v8",st_kitts_nevis:"unicode/1f1f0-1f1f3.png?v8",st_lucia:"unicode/1f1f1-1f1e8.png?v8",st_martin:"unicode/1f1f2-1f1eb.png?v8",st_pierre_miquelon:"unicode/1f1f5-1f1f2.png?v8",st_vincent_grenadines:"unicode/1f1fb-1f1e8.png?v8",stadium:"unicode/1f3df.png?v8",standing_man:"unicode/1f9cd-2642.png?v8",standing_person:"unicode/1f9cd.png?v8",standing_woman:"unicode/1f9cd-2640.png?v8",star:"unicode/2b50.png?v8",star2:"unicode/1f31f.png?v8",star_and_crescent:"unicode/262a.png?v8",star_of_david:"unicode/2721.png?v8",star_struck:"unicode/1f929.png?v8",stars:"unicode/1f320.png?v8",station:"unicode/1f689.png?v8",statue_of_liberty:"unicode/1f5fd.png?v8",steam_locomotive:"unicode/1f682.png?v8",stethoscope:"unicode/1fa7a.png?v8",stew:"unicode/1f372.png?v8",stop_button:"unicode/23f9.png?v8",stop_sign:"unicode/1f6d1.png?v8",stopwatch:"unicode/23f1.png?v8",straight_ruler:"unicode/1f4cf.png?v8",strawberry:"unicode/1f353.png?v8",stuck_out_tongue:"unicode/1f61b.png?v8",stuck_out_tongue_closed_eyes:"unicode/1f61d.png?v8",stuck_out_tongue_winking_eye:"unicode/1f61c.png?v8",student:"unicode/1f9d1-1f393.png?v8",studio_microphone:"unicode/1f399.png?v8",stuffed_flatbread:"unicode/1f959.png?v8",sudan:"unicode/1f1f8-1f1e9.png?v8",sun_behind_large_cloud:"unicode/1f325.png?v8",sun_behind_rain_cloud:"unicode/1f326.png?v8",sun_behind_small_cloud:"unicode/1f324.png?v8",sun_with_face:"unicode/1f31e.png?v8",sunflower:"unicode/1f33b.png?v8",sunglasses:"unicode/1f60e.png?v8",sunny:"unicode/2600.png?v8",sunrise:"unicode/1f305.png?v8",sunrise_over_mountains:"unicode/1f304.png?v8",superhero:"unicode/1f9b8.png?v8",superhero_man:"unicode/1f9b8-2642.png?v8",superhero_woman:"unicode/1f9b8-2640.png?v8",supervillain:"unicode/1f9b9.png?v8",supervillain_man:"unicode/1f9b9-2642.png?v8",supervillain_woman:"unicode/1f9b9-2640.png?v8",surfer:"unicode/1f3c4.png?v8",surfing_man:"unicode/1f3c4-2642.png?v8",surfing_woman:"unicode/1f3c4-2640.png?v8",suriname:"unicode/1f1f8-1f1f7.png?v8",sushi:"unicode/1f363.png?v8",suspect:"suspect.png?v8",suspension_railway:"unicode/1f69f.png?v8",svalbard_jan_mayen:"unicode/1f1f8-1f1ef.png?v8",swan:"unicode/1f9a2.png?v8",swaziland:"unicode/1f1f8-1f1ff.png?v8",sweat:"unicode/1f613.png?v8",sweat_drops:"unicode/1f4a6.png?v8",sweat_smile:"unicode/1f605.png?v8",sweden:"unicode/1f1f8-1f1ea.png?v8",sweet_potato:"unicode/1f360.png?v8",swim_brief:"unicode/1fa72.png?v8",swimmer:"unicode/1f3ca.png?v8",swimming_man:"unicode/1f3ca-2642.png?v8",swimming_woman:"unicode/1f3ca-2640.png?v8",switzerland:"unicode/1f1e8-1f1ed.png?v8",symbols:"unicode/1f523.png?v8",synagogue:"unicode/1f54d.png?v8",syria:"unicode/1f1f8-1f1fe.png?v8",syringe:"unicode/1f489.png?v8","t-rex":"unicode/1f996.png?v8",taco:"unicode/1f32e.png?v8",tada:"unicode/1f389.png?v8",taiwan:"unicode/1f1f9-1f1fc.png?v8",tajikistan:"unicode/1f1f9-1f1ef.png?v8",takeout_box:"unicode/1f961.png?v8",tamale:"unicode/1fad4.png?v8",tanabata_tree:"unicode/1f38b.png?v8",tangerine:"unicode/1f34a.png?v8",tanzania:"unicode/1f1f9-1f1ff.png?v8",taurus:"unicode/2649.png?v8",taxi:"unicode/1f695.png?v8",tea:"unicode/1f375.png?v8",teacher:"unicode/1f9d1-1f3eb.png?v8",teapot:"unicode/1fad6.png?v8",technologist:"unicode/1f9d1-1f4bb.png?v8",teddy_bear:"unicode/1f9f8.png?v8",telephone:"unicode/260e.png?v8",telephone_receiver:"unicode/1f4de.png?v8",telescope:"unicode/1f52d.png?v8",tennis:"unicode/1f3be.png?v8",tent:"unicode/26fa.png?v8",test_tube:"unicode/1f9ea.png?v8",thailand:"unicode/1f1f9-1f1ed.png?v8",thermometer:"unicode/1f321.png?v8",thinking:"unicode/1f914.png?v8",thong_sandal:"unicode/1fa74.png?v8",thought_balloon:"unicode/1f4ad.png?v8",thread:"unicode/1f9f5.png?v8",three:"unicode/0033-20e3.png?v8",thumbsdown:"unicode/1f44e.png?v8",thumbsup:"unicode/1f44d.png?v8",ticket:"unicode/1f3ab.png?v8",tickets:"unicode/1f39f.png?v8",tiger:"unicode/1f42f.png?v8",tiger2:"unicode/1f405.png?v8",timer_clock:"unicode/23f2.png?v8",timor_leste:"unicode/1f1f9-1f1f1.png?v8",tipping_hand_man:"unicode/1f481-2642.png?v8",tipping_hand_person:"unicode/1f481.png?v8",tipping_hand_woman:"unicode/1f481-2640.png?v8",tired_face:"unicode/1f62b.png?v8",tm:"unicode/2122.png?v8",togo:"unicode/1f1f9-1f1ec.png?v8",toilet:"unicode/1f6bd.png?v8",tokelau:"unicode/1f1f9-1f1f0.png?v8",tokyo_tower:"unicode/1f5fc.png?v8",tomato:"unicode/1f345.png?v8",tonga:"unicode/1f1f9-1f1f4.png?v8",tongue:"unicode/1f445.png?v8",toolbox:"unicode/1f9f0.png?v8",tooth:"unicode/1f9b7.png?v8",toothbrush:"unicode/1faa5.png?v8",top:"unicode/1f51d.png?v8",tophat:"unicode/1f3a9.png?v8",tornado:"unicode/1f32a.png?v8",tr:"unicode/1f1f9-1f1f7.png?v8",trackball:"unicode/1f5b2.png?v8",tractor:"unicode/1f69c.png?v8",traffic_light:"unicode/1f6a5.png?v8",train:"unicode/1f68b.png?v8",train2:"unicode/1f686.png?v8",tram:"unicode/1f68a.png?v8",transgender_flag:"unicode/1f3f3-26a7.png?v8",transgender_symbol:"unicode/26a7.png?v8",triangular_flag_on_post:"unicode/1f6a9.png?v8",triangular_ruler:"unicode/1f4d0.png?v8",trident:"unicode/1f531.png?v8",trinidad_tobago:"unicode/1f1f9-1f1f9.png?v8",tristan_da_cunha:"unicode/1f1f9-1f1e6.png?v8",triumph:"unicode/1f624.png?v8",trolleybus:"unicode/1f68e.png?v8",trollface:"trollface.png?v8",trophy:"unicode/1f3c6.png?v8",tropical_drink:"unicode/1f379.png?v8",tropical_fish:"unicode/1f420.png?v8",truck:"unicode/1f69a.png?v8",trumpet:"unicode/1f3ba.png?v8",tshirt:"unicode/1f455.png?v8",tulip:"unicode/1f337.png?v8",tumbler_glass:"unicode/1f943.png?v8",tunisia:"unicode/1f1f9-1f1f3.png?v8",turkey:"unicode/1f983.png?v8",turkmenistan:"unicode/1f1f9-1f1f2.png?v8",turks_caicos_islands:"unicode/1f1f9-1f1e8.png?v8",turtle:"unicode/1f422.png?v8",tuvalu:"unicode/1f1f9-1f1fb.png?v8",tv:"unicode/1f4fa.png?v8",twisted_rightwards_arrows:"unicode/1f500.png?v8",two:"unicode/0032-20e3.png?v8",two_hearts:"unicode/1f495.png?v8",two_men_holding_hands:"unicode/1f46c.png?v8",two_women_holding_hands:"unicode/1f46d.png?v8",u5272:"unicode/1f239.png?v8",u5408:"unicode/1f234.png?v8",u55b6:"unicode/1f23a.png?v8",u6307:"unicode/1f22f.png?v8",u6708:"unicode/1f237.png?v8",u6709:"unicode/1f236.png?v8",u6e80:"unicode/1f235.png?v8",u7121:"unicode/1f21a.png?v8",u7533:"unicode/1f238.png?v8",u7981:"unicode/1f232.png?v8",u7a7a:"unicode/1f233.png?v8",uganda:"unicode/1f1fa-1f1ec.png?v8",uk:"unicode/1f1ec-1f1e7.png?v8",ukraine:"unicode/1f1fa-1f1e6.png?v8",umbrella:"unicode/2614.png?v8",unamused:"unicode/1f612.png?v8",underage:"unicode/1f51e.png?v8",unicorn:"unicode/1f984.png?v8",united_arab_emirates:"unicode/1f1e6-1f1ea.png?v8",united_nations:"unicode/1f1fa-1f1f3.png?v8",unlock:"unicode/1f513.png?v8",up:"unicode/1f199.png?v8",upside_down_face:"unicode/1f643.png?v8",uruguay:"unicode/1f1fa-1f1fe.png?v8",us:"unicode/1f1fa-1f1f8.png?v8",us_outlying_islands:"unicode/1f1fa-1f1f2.png?v8",us_virgin_islands:"unicode/1f1fb-1f1ee.png?v8",uzbekistan:"unicode/1f1fa-1f1ff.png?v8",v:"unicode/270c.png?v8",vampire:"unicode/1f9db.png?v8",vampire_man:"unicode/1f9db-2642.png?v8",vampire_woman:"unicode/1f9db-2640.png?v8",vanuatu:"unicode/1f1fb-1f1fa.png?v8",vatican_city:"unicode/1f1fb-1f1e6.png?v8",venezuela:"unicode/1f1fb-1f1ea.png?v8",vertical_traffic_light:"unicode/1f6a6.png?v8",vhs:"unicode/1f4fc.png?v8",vibration_mode:"unicode/1f4f3.png?v8",video_camera:"unicode/1f4f9.png?v8",video_game:"unicode/1f3ae.png?v8",vietnam:"unicode/1f1fb-1f1f3.png?v8",violin:"unicode/1f3bb.png?v8",virgo:"unicode/264d.png?v8",volcano:"unicode/1f30b.png?v8",volleyball:"unicode/1f3d0.png?v8",vomiting_face:"unicode/1f92e.png?v8",vs:"unicode/1f19a.png?v8",vulcan_salute:"unicode/1f596.png?v8",waffle:"unicode/1f9c7.png?v8",wales:"unicode/1f3f4-e0067-e0062-e0077-e006c-e0073-e007f.png?v8",walking:"unicode/1f6b6.png?v8",walking_man:"unicode/1f6b6-2642.png?v8",walking_woman:"unicode/1f6b6-2640.png?v8",wallis_futuna:"unicode/1f1fc-1f1eb.png?v8",waning_crescent_moon:"unicode/1f318.png?v8",waning_gibbous_moon:"unicode/1f316.png?v8",warning:"unicode/26a0.png?v8",wastebasket:"unicode/1f5d1.png?v8",watch:"unicode/231a.png?v8",water_buffalo:"unicode/1f403.png?v8",water_polo:"unicode/1f93d.png?v8",watermelon:"unicode/1f349.png?v8",wave:"unicode/1f44b.png?v8",wavy_dash:"unicode/3030.png?v8",waxing_crescent_moon:"unicode/1f312.png?v8",waxing_gibbous_moon:"unicode/1f314.png?v8",wc:"unicode/1f6be.png?v8",weary:"unicode/1f629.png?v8",wedding:"unicode/1f492.png?v8",weight_lifting:"unicode/1f3cb.png?v8",weight_lifting_man:"unicode/1f3cb-2642.png?v8",weight_lifting_woman:"unicode/1f3cb-2640.png?v8",western_sahara:"unicode/1f1ea-1f1ed.png?v8",whale:"unicode/1f433.png?v8",whale2:"unicode/1f40b.png?v8",wheel_of_dharma:"unicode/2638.png?v8",wheelchair:"unicode/267f.png?v8",white_check_mark:"unicode/2705.png?v8",white_circle:"unicode/26aa.png?v8",white_flag:"unicode/1f3f3.png?v8",white_flower:"unicode/1f4ae.png?v8",white_haired_man:"unicode/1f468-1f9b3.png?v8",white_haired_woman:"unicode/1f469-1f9b3.png?v8",white_heart:"unicode/1f90d.png?v8",white_large_square:"unicode/2b1c.png?v8",white_medium_small_square:"unicode/25fd.png?v8",white_medium_square:"unicode/25fb.png?v8",white_small_square:"unicode/25ab.png?v8",white_square_button:"unicode/1f533.png?v8",wilted_flower:"unicode/1f940.png?v8",wind_chime:"unicode/1f390.png?v8",wind_face:"unicode/1f32c.png?v8",window:"unicode/1fa9f.png?v8",wine_glass:"unicode/1f377.png?v8",wink:"unicode/1f609.png?v8",wolf:"unicode/1f43a.png?v8",woman:"unicode/1f469.png?v8",woman_artist:"unicode/1f469-1f3a8.png?v8",woman_astronaut:"unicode/1f469-1f680.png?v8",woman_beard:"unicode/1f9d4-2640.png?v8",woman_cartwheeling:"unicode/1f938-2640.png?v8",woman_cook:"unicode/1f469-1f373.png?v8",woman_dancing:"unicode/1f483.png?v8",woman_facepalming:"unicode/1f926-2640.png?v8",woman_factory_worker:"unicode/1f469-1f3ed.png?v8",woman_farmer:"unicode/1f469-1f33e.png?v8",woman_feeding_baby:"unicode/1f469-1f37c.png?v8",woman_firefighter:"unicode/1f469-1f692.png?v8",woman_health_worker:"unicode/1f469-2695.png?v8",woman_in_manual_wheelchair:"unicode/1f469-1f9bd.png?v8",woman_in_motorized_wheelchair:"unicode/1f469-1f9bc.png?v8",woman_in_tuxedo:"unicode/1f935-2640.png?v8",woman_judge:"unicode/1f469-2696.png?v8",woman_juggling:"unicode/1f939-2640.png?v8",woman_mechanic:"unicode/1f469-1f527.png?v8",woman_office_worker:"unicode/1f469-1f4bc.png?v8",woman_pilot:"unicode/1f469-2708.png?v8",woman_playing_handball:"unicode/1f93e-2640.png?v8",woman_playing_water_polo:"unicode/1f93d-2640.png?v8",woman_scientist:"unicode/1f469-1f52c.png?v8",woman_shrugging:"unicode/1f937-2640.png?v8",woman_singer:"unicode/1f469-1f3a4.png?v8",woman_student:"unicode/1f469-1f393.png?v8",woman_teacher:"unicode/1f469-1f3eb.png?v8",woman_technologist:"unicode/1f469-1f4bb.png?v8",woman_with_headscarf:"unicode/1f9d5.png?v8",woman_with_probing_cane:"unicode/1f469-1f9af.png?v8",woman_with_turban:"unicode/1f473-2640.png?v8",woman_with_veil:"unicode/1f470-2640.png?v8",womans_clothes:"unicode/1f45a.png?v8",womans_hat:"unicode/1f452.png?v8",women_wrestling:"unicode/1f93c-2640.png?v8",womens:"unicode/1f6ba.png?v8",wood:"unicode/1fab5.png?v8",woozy_face:"unicode/1f974.png?v8",world_map:"unicode/1f5fa.png?v8",worm:"unicode/1fab1.png?v8",worried:"unicode/1f61f.png?v8",wrench:"unicode/1f527.png?v8",wrestling:"unicode/1f93c.png?v8",writing_hand:"unicode/270d.png?v8",x:"unicode/274c.png?v8",yarn:"unicode/1f9f6.png?v8",yawning_face:"unicode/1f971.png?v8",yellow_circle:"unicode/1f7e1.png?v8",yellow_heart:"unicode/1f49b.png?v8",yellow_square:"unicode/1f7e8.png?v8",yemen:"unicode/1f1fe-1f1ea.png?v8",yen:"unicode/1f4b4.png?v8",yin_yang:"unicode/262f.png?v8",yo_yo:"unicode/1fa80.png?v8",yum:"unicode/1f60b.png?v8",zambia:"unicode/1f1ff-1f1f2.png?v8",zany_face:"unicode/1f92a.png?v8",zap:"unicode/26a1.png?v8",zebra:"unicode/1f993.png?v8",zero:"unicode/0030-20e3.png?v8",zimbabwe:"unicode/1f1ff-1f1fc.png?v8",zipper_mouth_face:"unicode/1f910.png?v8",zombie:"unicode/1f9df.png?v8",zombie_man:"unicode/1f9df-2642.png?v8",zombie_woman:"unicode/1f9df-2640.png?v8",zzz:"unicode/1f4a4.png?v8"},window&&window.console&&console.info("Docsify emoji plugin has been deprecated as of v4.13"),window.emojify=function(e,i){return!1===Object.prototype.hasOwnProperty.call(n,i)?e:''+i+''}},95:()=>{!function(){function n(n){return n.replace(//,"").replace(/{docsify-ignore}/,"").replace(//,"").replace(/{docsify-ignore-all}/,"").trim()}var e={},i="docsify.search.expires",o="docsify.search.index";function c(n){var e={"&":"&","<":"<",">":">",'"':""","'":"'"};return String(n).replace(/[&<>"']/g,(function(n){return e[n]}))}function a(n){return n.text||"table"!==n.type||(n.cells.unshift(n.header),n.text=n.cells.map((function(n){return n.join(" | ")})).join(" |\n ")),n.text}function t(n){return n.text||"list"!==n.type||(n.text=n.raw),n.text}function f(n){return n&&n.normalize?n.normalize("NFD").replace(/[\u0300-\u036f]/g,""):n}function u(f,u){var r="auto"===f.paths,d=r?function(n){var e=[];return Docsify.dom.findAll(".sidebar-nav a:not(.section-link):not([data-nosearch])").forEach((function(i){var o=i.href,c=i.getAttribute("href"),a=n.parse(o).path;a&&-1===e.indexOf(a)&&!Docsify.util.isAbsolutePath(c)&&e.push(a)})),e}(u.router):f.paths,p="";if(d.length&&r&&f.pathNamespaces){var g=d[0];if(Array.isArray(f.pathNamespaces))p=f.pathNamespaces.filter((function(n){return g.slice(0,n.length)===n}))[0]||p;else if(f.pathNamespaces instanceof RegExp){var s=g.match(f.pathNamespaces);s&&(p=s[0])}var l=-1===d.indexOf(p+"/"),v=-1===d.indexOf(p+"/README");l&&v&&d.unshift(p+"/")}else-1===d.indexOf("/")&&-1===d.indexOf("/README")&&d.unshift("/");var _,h=((_=f.namespace)?i+"/"+_:i)+p,m=function(n){return n?o+"/"+n:o}(f.namespace)+p,b=localStorage.getItem(h)=0||o>=0){t+=e>=0?3:o>=0?2:0,o<0&&(o=0);var a,s=0;s=0==(a=o<11?0:o-10)?70:o+n.length+60,g&&s>g.length&&(s=g.length);var l=d&&"..."+d.substring(a,s).replace(i,(function(n){return''+n+""}))+"...";u+=l}})),t>0)){var l={title:r,content:g?u:"",url:s,score:t};i.push(l)}},u=0;u\n

    '+n.title+"

    \n

    "+n.content+"

    \n
    \n"})),o.classList.add("show"),a.classList.add("show"),o.innerHTML=g||'

    '+d+"

    ",r.hideOtherSidebarContent&&(t&&t.classList.add("hide"),u&&u.classList.add("hide"))}function g(n){r=n}var s={placeholder:"Type to search",noData:"No Results!",paths:"auto",depth:2,maxAge:864e5,hideOtherSidebarContent:!1,namespace:void 0,pathNamespaces:void 0};$docsify.plugins=[].concat((function(n,e){var i=Docsify.util,o=e.config.search||s;Array.isArray(o)?s.paths=o:"object"==typeof o&&(s.paths=Array.isArray(o.paths)?o.paths:"auto",s.maxAge=i.isPrimitive(o.maxAge)?o.maxAge:s.maxAge,s.placeholder=o.placeholder||s.placeholder,s.noData=o.noData||s.noData,s.depth=o.depth||s.depth,s.hideOtherSidebarContent=o.hideOtherSidebarContent||s.hideOtherSidebarContent,s.namespace=o.namespace||s.namespace,s.pathNamespaces=o.pathNamespaces||s.pathNamespaces);var c="auto"===s.paths;n.mounted((function(n){(function(n,e){var i,o,c,a,t=e.router.parse().query.s;g(n),Docsify.dom.style("\n.sidebar {\n padding-top: 0;\n}\n\n.search {\n margin-bottom: 20px;\n padding: 6px;\n border-bottom: 1px solid #eee;\n}\n\n.search .input-wrap {\n display: flex;\n align-items: center;\n}\n\n.search .results-panel {\n display: none;\n}\n\n.search .results-panel.show {\n display: block;\n}\n\n.search input {\n outline: none;\n border: none;\n width: 100%;\n padding: 0.6em 7px;\n font-size: inherit;\n border: 1px solid transparent;\n}\n\n.search input:focus {\n box-shadow: 0 0 5px var(--theme-color, #42b983);\n border: 1px solid var(--theme-color, #42b983);\n}\n\n.search input::-webkit-search-decoration,\n.search input::-webkit-search-cancel-button,\n.search input {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.search input::-ms-clear {\n display: none;\n height: 0;\n width: 0;\n}\n\n.search .clear-button {\n cursor: pointer;\n width: 36px;\n text-align: right;\n display: none;\n}\n\n.search .clear-button.show {\n display: block;\n}\n\n.search .clear-button svg {\n transform: scale(.5);\n}\n\n.search h2 {\n font-size: 17px;\n margin: 10px 0;\n}\n\n.search a {\n text-decoration: none;\n color: inherit;\n}\n\n.search .matching-post {\n border-bottom: 1px solid #eee;\n}\n\n.search .matching-post:last-child {\n border-bottom: 0;\n}\n\n.search p {\n font-size: 14px;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n.search p.empty {\n text-align: center;\n}\n\n.app-name.hide, .sidebar-nav.hide {\n display: none;\n}"),function(n){void 0===n&&(n="");var e='
    \n \n
    \n \n \n \n \n \n
    \n
    \n
    \n ',i=Docsify.dom.create("div",e),o=Docsify.dom.find("aside");Docsify.dom.toggleClass(i,"search"),Docsify.dom.before(o,i)}(t),o=Docsify.dom.find("div.search"),c=Docsify.dom.find(o,"input"),a=Docsify.dom.find(o,".input-wrap"),Docsify.dom.on(o,"click",(function(n){return-1===["A","H2","P","EM"].indexOf(n.target.tagName)&&n.stopPropagation()})),Docsify.dom.on(c,"input",(function(n){clearTimeout(i),i=setTimeout((function(e){return p(n.target.value.trim())}),100)})),Docsify.dom.on(a,"click",(function(n){"INPUT"!==n.target.tagName&&(c.value="",p())})),t&&setTimeout((function(n){return p(t)}),500)})(s,e),!c&&u(s,e)})),n.doneEach((function(n){(function(n,e){g(n),function(n,e){var i=Docsify.dom.getNode('.search input[type="search"]');if(i)if("string"==typeof n)i.placeholder=n;else{var o=Object.keys(n).filter((function(n){return e.indexOf(n)>-1}))[0];i.placeholder=n[o]}}(n.placeholder,e.route.path),function(n,e){if("string"==typeof n)d=n;else{var i=Object.keys(n).filter((function(n){return e.indexOf(n)>-1}))[0];d=n[i]}}(n.noData,e.route.path)})(s,e),c&&u(s,e)}))}),$docsify.plugins)}()},22:()=>{!function(n){var e="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",i={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},o={bash:i,environment:{pattern:RegExp("\\$"+e),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+e),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};n.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+e),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:o},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:i}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:o},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:o.entity}}],environment:{pattern:RegExp("\\$?"+e),alias:"constant"},variable:o.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},i.inside=n.languages.bash;for(var c=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=o.variable[1].inside,t=0;t{!function(n){var e=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,i=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],o=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,c=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,a=/[{}\[\](),:;]/;n.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:e,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:i,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:o,operator:c,punctuation:a};var t={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:n.languages.php},f=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:t}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:t}}];n.languages.insertBefore("php","variable",{string:f,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:e,string:f,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:i,number:o,operator:c,punctuation:a}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),n.hooks.add("before-tokenize",(function(e){/<\?/.test(e.code)&&n.languages["markup-templating"].buildPlaceholders(e,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)})),n.hooks.add("after-tokenize",(function(e){n.languages["markup-templating"].tokenizePlaceholders(e,"php")}))}(Prism)}},e={};function i(o){var c=e[o];if(void 0!==c)return c.exports;var a=e[o]={exports:{}};return n[o](a,a.exports,i),a.exports}i.n=n=>{var e=n&&n.__esModule?()=>n.default:()=>n;return i.d(e,{a:e}),e},i.d=(n,e)=>{for(var o in e)i.o(e,o)&&!i.o(n,o)&&Object.defineProperty(n,o,{enumerable:!0,get:e[o]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),i.o=(n,e)=>Object.prototype.hasOwnProperty.call(n,e),(()=>{"use strict";i(723),i(929),i(261),i(95),i(554),i(22)})()})(); \ No newline at end of file diff --git a/docs/dist/bundle.js.LICENSE.txt b/docs/dist/bundle.js.LICENSE.txt deleted file mode 100644 index 7a4147477..000000000 --- a/docs/dist/bundle.js.LICENSE.txt +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Prism: Lightweight, robust, elegant syntax highlighting - * - * @license MIT - * @author Lea Verou - * @namespace - * @public - */ diff --git a/docs/laravel-wallet-swap.md b/docs/guide/additions/laravel-wallet-swap.md similarity index 100% rename from docs/laravel-wallet-swap.md rename to docs/guide/additions/laravel-wallet-swap.md diff --git a/docs/laravel-wallet-uuid.md b/docs/guide/additions/laravel-wallet-uuid.md similarity index 100% rename from docs/laravel-wallet-uuid.md rename to docs/guide/additions/laravel-wallet-uuid.md diff --git a/docs/command-create-wallet.md b/docs/guide/cqrs/create-wallet.md similarity index 99% rename from docs/command-create-wallet.md rename to docs/guide/cqrs/create-wallet.md index 152802416..118195240 100644 --- a/docs/command-create-wallet.md +++ b/docs/guide/cqrs/create-wallet.md @@ -2,8 +2,6 @@ The idea is based on the division into teams for creating wallets, transactions, etc. The creation of a wallet can be accelerated if the client "generates a wallet himself". ---- - ## User Model Add the `HasWallet`, `HasWallets` trait's and `Wallet` interface to model. diff --git a/docs/atomic-service.md b/docs/guide/db/atomic-service.md similarity index 97% rename from docs/atomic-service.md rename to docs/guide/db/atomic-service.md index e07035d25..96c5e345f 100644 --- a/docs/atomic-service.md +++ b/docs/guide/db/atomic-service.md @@ -1,4 +1,4 @@ -## Atomic Service (Mutex in a db transaction) +# Atomic Service Working with atomic wallet operations. diff --git a/docs/race-condition.md b/docs/guide/db/race-condition.md similarity index 98% rename from docs/race-condition.md rename to docs/guide/db/race-condition.md index 64b6132c2..e640800b2 100644 --- a/docs/race-condition.md +++ b/docs/guide/db/race-condition.md @@ -1,4 +1,4 @@ -## Race Condition +# Race Condition A common issue in the issue is about race conditions. diff --git a/docs/transaction.md b/docs/guide/db/transaction.md similarity index 98% rename from docs/transaction.md rename to docs/guide/db/transaction.md index ee4465b80..f39330f19 100644 --- a/docs/transaction.md +++ b/docs/guide/db/transaction.md @@ -1,4 +1,4 @@ -## Transaction +# Transaction You definitely need to know the feature of transactions. The wallet is automatically blocked from the moment it is used until the end of the transaction. Therefore, it is necessary to use the wallet closer to the end of the transaction. diff --git a/docs/balance-updated-event.md b/docs/guide/events/balance-updated-event.md similarity index 96% rename from docs/balance-updated-event.md rename to docs/guide/events/balance-updated-event.md index b70971997..749f5d096 100644 --- a/docs/balance-updated-event.md +++ b/docs/guide/events/balance-updated-event.md @@ -1,4 +1,4 @@ -## Tracking balance changes +# Tracking balance changes There are tasks when you urgently need to do something when the user's balance changes. A frequent case of transferring data via websockets to the front-end. diff --git a/docs/event-customize.md b/docs/guide/events/customize.md similarity index 99% rename from docs/event-customize.md rename to docs/guide/events/customize.md index fea2a4cdd..a2d8217cc 100644 --- a/docs/event-customize.md +++ b/docs/guide/events/customize.md @@ -1,4 +1,4 @@ -## Customizing events +# Customizing events Sometimes you want to modify the standard events of a package. This is done quite simply. diff --git a/docs/transaction-created-event.md b/docs/guide/events/transaction-created-event.md similarity index 94% rename from docs/transaction-created-event.md rename to docs/guide/events/transaction-created-event.md index 5eadb4c9b..82d71964e 100644 --- a/docs/transaction-created-event.md +++ b/docs/guide/events/transaction-created-event.md @@ -1,4 +1,4 @@ -## Tracking the creation of wallet transactions +# Tracking the creation of wallet transactions The events are similar to the events for updating the balance, only for the creation of a wallet. A frequent case of transferring data via websockets to the front-end. diff --git a/docs/wallet-created-event.md b/docs/guide/events/wallet-created-event.md similarity index 95% rename from docs/wallet-created-event.md rename to docs/guide/events/wallet-created-event.md index f73fd35a5..b353462ca 100644 --- a/docs/wallet-created-event.md +++ b/docs/guide/events/wallet-created-event.md @@ -1,4 +1,4 @@ -## Tracking the creation of wallets +# Tracking the creation of wallets The events are similar to the events for updating the balance, only for the creation of a wallet. A frequent case of transferring data via websockets to the front-end. diff --git a/docs/deposit-float.md b/docs/guide/fractional/deposit.md similarity index 90% rename from docs/deposit-float.md rename to docs/guide/fractional/deposit.md index a34f1a79d..53eee2404 100644 --- a/docs/deposit-float.md +++ b/docs/guide/fractional/deposit.md @@ -5,11 +5,9 @@ and which you pay when you agree to buy it. In this case, the Deposit is the replenishment of the wallet. ---- - ## User Model -[User Simple](_include/models/user_simple_float.md ':include') + ## Make a Deposit diff --git a/docs/transfer-float.md b/docs/guide/fractional/transfer.md similarity index 88% rename from docs/transfer-float.md rename to docs/guide/fractional/transfer.md index 74757710d..cb0d51dc9 100644 --- a/docs/transfer-float.md +++ b/docs/guide/fractional/transfer.md @@ -1,15 +1,13 @@ # Transfer -Transfer in our system are two well-known [Deposit](deposit-float) and [Withdraw](withdraw-float) +Transfer in our system are two well-known [Deposit](deposit) and [Withdraw](withdraw) operations that are performed in one transaction. The transfer takes place between wallets. ---- - ## User Model -[User Simple](_include/models/user_simple_float.md ':include') + ### Example contract diff --git a/docs/withdraw-float.md b/docs/guide/fractional/withdraw.md similarity index 94% rename from docs/withdraw-float.md rename to docs/guide/fractional/withdraw.md index 5c9b4ff10..f88fff128 100644 --- a/docs/withdraw-float.md +++ b/docs/guide/fractional/withdraw.md @@ -6,11 +6,9 @@ it or buy something in the system. Since the currency is virtual, you can buy any services on your website. For example, priority in search results. ---- - ## User Model -[User Simple](_include/models/user_simple_float.md ':include') + ## Make a Withdraw diff --git a/docs/formatter.md b/docs/guide/helpers/formatter.md similarity index 88% rename from docs/formatter.md rename to docs/guide/helpers/formatter.md index 2435f35c9..f82fd656f 100644 --- a/docs/formatter.md +++ b/docs/guide/helpers/formatter.md @@ -1,15 +1,15 @@ -# Helper FormatterServiceInterface +# Formatter Sometimes you need to convert the balance to some format. A small and simple helper has appeared that will simplify the process a little. -### floatValue +## To fractional numbers ```php app(FormatterServiceInterface::class)->floatValue('12345', 2); // 123.45 app(FormatterServiceInterface::class)->floatValue('12345', 3); // 12.345 ``` -### intValue +## To whole numbers ```php app(FormatterServiceInterface::class)->intValue('12.345', 3); // 12345 diff --git a/docs/batch-transactions.md b/docs/guide/high-performance/batch-transactions.md similarity index 99% rename from docs/batch-transactions.md rename to docs/guide/high-performance/batch-transactions.md index 50a31d36c..b0fc48ada 100644 --- a/docs/batch-transactions.md +++ b/docs/guide/high-performance/batch-transactions.md @@ -1,4 +1,4 @@ -### API. Batch Transactions +# Batch Transactions Sometimes situations arise when there is a need to make multiple changes to wallets. For example, we need to change the balance of many wallets at once. For example, the system administrator accrues a bonus for participating in some promotion. Previously, the code would look like this: diff --git a/docs/batch-transfers.md b/docs/guide/high-performance/batch-transfers.md similarity index 99% rename from docs/batch-transfers.md rename to docs/guide/high-performance/batch-transfers.md index 8999d1b4a..10b2d4672 100644 --- a/docs/batch-transfers.md +++ b/docs/guide/high-performance/batch-transfers.md @@ -1,4 +1,4 @@ -### API. Batch Transfers +# Batch Transfers If you need multiple transfers between wallets, you can use a high-performance handle. It is worth remembering that the pen does not check the balance of the wallet before transferring, you need to take care of this yourself. diff --git a/docs/basic-usage.md b/docs/guide/introduction/basic-usage.md similarity index 96% rename from docs/basic-usage.md rename to docs/guide/introduction/basic-usage.md index cd3a0c1ad..07138f1c3 100644 --- a/docs/basic-usage.md +++ b/docs/guide/introduction/basic-usage.md @@ -1,6 +1,8 @@ +# Basic Usage + ## Simple Wallet -[User Simple](_include/models/user_simple.md ':include') + ## Simple wallet transactions @@ -131,7 +133,7 @@ var_dump($user->refund($item)); // bool(true) var_dump((bool)$user->paid($item)); // bool(false) ``` -[Eager Loading](_include/eager_loading.md ':include') + ## How to work with fractional numbers? Add the `HasWalletFloat` trait and `WalletFloat` interface to model. diff --git a/docs/configuration.md b/docs/guide/introduction/configuration.md similarity index 80% rename from docs/configuration.md rename to docs/guide/introduction/configuration.md index 5c77d29b4..f18f699f5 100644 --- a/docs/configuration.md +++ b/docs/guide/introduction/configuration.md @@ -23,10 +23,10 @@ Customize `name`,`slug` and `meta` of default wallet. config/wallet.php: ```php 'default' => [ - 'name' => 'Ethereum', - 'slug' => 'ETH', - 'meta' => [], - ], + 'name' => 'Ethereum', + 'slug' => 'ETH', + 'meta' => [], +], ``` ## Extend base Wallet model You can extend base Wallet model by creating a new class that extends `Bavix\Wallet\Models\Wallet` and registering the new class in `config/wallet.php`. @@ -44,19 +44,19 @@ class MyWallet extends WalletBase { config/wallet.php: ```php - 'wallet' => [ - 'table' => 'wallets', - 'model' => MyWallet::class, - 'creating' => [], - 'default' => [ - 'name' => 'Default Wallet', - 'slug' => 'default', - 'meta' => [], - ], +'wallet' => [ + 'table' => 'wallets', + 'model' => MyWallet::class, + 'creating' => [], + 'default' => [ + 'name' => 'Default Wallet', + 'slug' => 'default', + 'meta' => [], ], +], ``` ```php - echo $user->wallet->helloWorld(); +echo $user->wallet->helloWorld(); ``` This same method above, can be used to extend the base `Transfer` and `Transaction` models and registering the extended models in the configuration file. ### Changing wallet decimal places @@ -65,15 +65,15 @@ You can change the default wallet decimal places, in wallet config file. This ca config/wallet.php: ```php - /** - * Base model 'wallet'. - */ - 'wallet' => [ - .... - 'creating' => [ - 'decimal_places' => 18, - ], - .... +/** + * Base model 'wallet'. + */ +'wallet' => [ + .... + 'creating' => [ + 'decimal_places' => 18, ], + .... +], ``` diff --git a/docs/guide/introduction/index.md b/docs/guide/introduction/index.md new file mode 100644 index 000000000..dab450ebf --- /dev/null +++ b/docs/guide/introduction/index.md @@ -0,0 +1,11 @@ +# Introduction + +--- + +![Laravel Wallet](https://user-images.githubusercontent.com/5111255/48687709-a7c2fa00-ebd3-11e8-8714-c4f3efe93f02.png) + +`laravel-wallet` - Easy work with virtual wallet. + +### Support + +Please ask questions on the [Github issues page](https://github.com/bavix/laravel-wallet/issues). diff --git a/docs/installation.md b/docs/guide/introduction/installation.md similarity index 84% rename from docs/installation.md rename to docs/guide/introduction/installation.md index 597714145..7e0545b98 100644 --- a/docs/installation.md +++ b/docs/guide/introduction/installation.md @@ -1,6 +1,8 @@ -[composer](_include/composer.md ':include') +# Installation -## You can use it for customization + + +## Customize Sometimes it is useful... diff --git a/docs/upgrade-guide.md b/docs/guide/introduction/upgrade.md similarity index 100% rename from docs/upgrade-guide.md rename to docs/guide/introduction/upgrade.md diff --git a/docs/new-wallet.md b/docs/guide/multi/new-wallet.md similarity index 97% rename from docs/new-wallet.md rename to docs/guide/multi/new-wallet.md index 5409ba8d9..0fa0e6e9b 100644 --- a/docs/new-wallet.md +++ b/docs/guide/multi/new-wallet.md @@ -1,9 +1,7 @@ -# Create a wallet and use it +# New Wallet You can create an unlimited number of wallets, but the `slug` for each wallet should be unique. ---- - ## User Model Add the `HasWallets` trait's and `Wallet` interface to model. diff --git a/docs/transaction-filter.md b/docs/guide/multi/transaction-filter.md similarity index 98% rename from docs/transaction-filter.md rename to docs/guide/multi/transaction-filter.md index ea824c78b..c7b04f7ee 100644 --- a/docs/transaction-filter.md +++ b/docs/guide/multi/transaction-filter.md @@ -1,4 +1,4 @@ -## Transaction Filter +# Transaction Filter Often developers ask me about the `transactions` method. Yes, this method displays ALL transactions for the wallet owner. diff --git a/docs/wallet-transfer.md b/docs/guide/multi/transfer.md similarity index 93% rename from docs/wallet-transfer.md rename to docs/guide/multi/transfer.md index 11cf0216b..bd548f405 100644 --- a/docs/wallet-transfer.md +++ b/docs/guide/multi/transfer.md @@ -1,12 +1,10 @@ # Transfer between wallets -Transfer in our system are two well-known [Deposit](deposit) and [Withdraw](withdraw) +Transfer in our system are two well-known [Deposit](../single/deposit) and [Withdraw](../single/withdraw) operations that are performed in one transaction. The transfer takes place between wallets. ---- - ## User Model Prepare the model, add the `HasWallets` trait's and `Wallet` interface. @@ -70,7 +68,7 @@ $lastWallet->balance; // 500 It worked! -## Change the meta and confirmation. +## Change the meta and confirmation Check the user's balance. diff --git a/docs/cart.md b/docs/guide/purchases/cart.md similarity index 95% rename from docs/cart.md rename to docs/guide/purchases/cart.md index b95e7c9d5..29df7d328 100644 --- a/docs/cart.md +++ b/docs/guide/purchases/cart.md @@ -1,3 +1,7 @@ +# Cart + +Buying goods one at a time is, of course, good. But it’s more convenient to buy in a pack, right? In laravel wallet you can buy a basket of goods at once. + ## User Model Add the `CanPay` trait and `Customer` interface to your User model. diff --git a/docs/taxing.md b/docs/guide/purchases/commissions.md similarity index 93% rename from docs/taxing.md rename to docs/guide/purchases/commissions.md index a97569e74..ed1c192fc 100644 --- a/docs/taxing.md +++ b/docs/guide/purchases/commissions.md @@ -1,3 +1,7 @@ +# Commissions + +Commissions are part of purchasing goods. The commission is debited from the buyer's account and is not credited for the product. This amount is lost along the way. The commission amount can always be found in the fee column. + ## User Model Add the `CanPay` trait and `Customer` interface to your User model. diff --git a/docs/gift.md b/docs/guide/purchases/gift.md similarity index 91% rename from docs/gift.md rename to docs/guide/purchases/gift.md index 2d6fa44a0..6a09283e4 100644 --- a/docs/gift.md +++ b/docs/guide/purchases/gift.md @@ -1,3 +1,7 @@ +# Gift + +Gifts are a purchase with someone else's wallet attached. The peculiarity of gifts is that when the gift is returned, the money is returned to the person who bought it, and not to the person to whom it was given. This functionality is usually used to reward users by the administration. + ## User Model Add the `CanPay` trait and `Customer` interface to your User model. diff --git a/docs/pay-free.md b/docs/guide/purchases/payment-free.md similarity index 96% rename from docs/pay-free.md rename to docs/guide/purchases/payment-free.md index baca04d23..74b1792fd 100644 --- a/docs/pay-free.md +++ b/docs/guide/purchases/payment-free.md @@ -1,3 +1,7 @@ +# Payment Free + +Payments as part of e-commerce are an important part. This section is about payment for goods. + ## User Model Add the `CanPay` trait and `Customer` interface to your User model. diff --git a/docs/payment.md b/docs/guide/purchases/payment.md similarity index 94% rename from docs/payment.md rename to docs/guide/purchases/payment.md index 1ea3fefe2..e98e123b5 100644 --- a/docs/payment.md +++ b/docs/guide/purchases/payment.md @@ -1,3 +1,7 @@ +# Payment + +Payments as part of e-commerce are an important part. This section is about payment for goods. + ## User Model Add the `CanPay` trait and `Customer` interface to your User model. @@ -111,7 +115,7 @@ $user->balance; // 0 ``` What happens if the user does not have the funds? -The same as with the [withdrawal](withdraw#failed). +The same as with the [withdrawal](../single/withdraw#failed). ```php $user->balance; // 0 diff --git a/docs/payment-custom-wallet.md b/docs/guide/purchases/receiving.md similarity index 87% rename from docs/payment-custom-wallet.md rename to docs/guide/purchases/receiving.md index e23e13fe9..163cc969a 100644 --- a/docs/payment-custom-wallet.md +++ b/docs/guide/purchases/receiving.md @@ -1,3 +1,7 @@ +# Payment. Customize receiving + +The architecture of laravel wallet is designed in such a way that when purchasing goods, wallets are created and all money is credited to them, but it happens that this is not necessary. In this case, this functionality will help. You specify the wallet for depositing funds and the buyer will transfer money to this wallet when purchasing a product. This is convenient for marketplaces. + ## User Model Add the `CanPay` trait and `Customer` interface to your User model. diff --git a/docs/refund.md b/docs/guide/purchases/refund.md similarity index 96% rename from docs/refund.md rename to docs/guide/purchases/refund.md index 87bef51d2..33c2527f2 100644 --- a/docs/refund.md +++ b/docs/guide/purchases/refund.md @@ -1,3 +1,7 @@ +# Refund + +We already know how to buy, but what about returns? But they exist and you can use them. + ## User Model Add the `CanPay` trait and `Customer` interface to your User model. diff --git a/docs/guide/single/cancel.md b/docs/guide/single/cancel.md new file mode 100644 index 000000000..ddb73f712 --- /dev/null +++ b/docs/guide/single/cancel.md @@ -0,0 +1,41 @@ +# Cancel Transaction + +Sometimes you need to cancel a confirmed transaction. For example, money was received or debited by mistake. You can reset the confirmation of a specific transaction. + +## User Model + +Add the `CanConfirm` trait and `Confirmable` interface to your User model. + +```php +use Bavix\Wallet\Interfaces\Confirmable; +use Bavix\Wallet\Interfaces\Wallet; +use Bavix\Wallet\Traits\CanConfirm; +use Bavix\Wallet\Traits\HasWallet; + +class UserConfirm extends Model implements Wallet, Confirmable +{ + use HasWallet, CanConfirm; +} +``` + +> You can only cancel the transaction with the wallet you paid with. + +## To cancel + +### Example: + +Created a transaction, and after resetting its confirmation. + +```php +$user->balance; // 0 +$transaction = $user->deposit(100); // confirmed transaction +$transaction->confirmed; // bool(true) +$user->balance; // 100 + +$user->resetConfirm($transaction); // bool(true) +$transaction->confirmed; // bool(false) + +$user->balance; // 0 +``` + +It's simple! diff --git a/docs/confirm.md b/docs/guide/single/confirm.md similarity index 73% rename from docs/confirm.md rename to docs/guide/single/confirm.md index 452435824..49c4e09b4 100644 --- a/docs/confirm.md +++ b/docs/guide/single/confirm.md @@ -1,3 +1,9 @@ +# Confirm Transaction + +There are situations when it is necessary to create a transaction without crediting to the wallet or debiting. Laravel-wallet has such a mode of unconfirmed transactions. + +You create a transaction without confirmation, and a little later you confirm it. + ## User Model Add the `CanConfirm` trait and `Confirmable` interface to your User model. @@ -16,6 +22,8 @@ class UserConfirm extends Model implements Wallet, Confirmable > You can only confirm the transaction with the wallet you paid with. +## To confirmation + ### Example: Sometimes you need to create an operation and confirm its field. diff --git a/docs/credit-limits.md b/docs/guide/single/credit-limits.md similarity index 98% rename from docs/credit-limits.md rename to docs/guide/single/credit-limits.md index bda1e1ccd..1ad09605f 100644 --- a/docs/credit-limits.md +++ b/docs/guide/single/credit-limits.md @@ -1,4 +1,4 @@ -## Credit Limits +# Credit Limits If you need the ability to have wallets have a credit limit, then this functionality is for you. diff --git a/docs/deposit.md b/docs/guide/single/deposit.md similarity index 91% rename from docs/deposit.md rename to docs/guide/single/deposit.md index 2bc6cf799..22eccf2d0 100644 --- a/docs/deposit.md +++ b/docs/guide/single/deposit.md @@ -5,11 +5,9 @@ and which you pay when you agree to buy it. In this case, the Deposit is the replenishment of the wallet. ---- - ## User Model -[User Simple](_include/models/user_simple.md ':include') + ## Make a Deposit diff --git a/docs/exchange.md b/docs/guide/single/exchange.md similarity index 94% rename from docs/exchange.md rename to docs/guide/single/exchange.md index 4004d0cb8..baeb72011 100644 --- a/docs/exchange.md +++ b/docs/guide/single/exchange.md @@ -1,4 +1,4 @@ -### Exchange +# Exchange Everyone’s tasks are different and with the help of this functionality you can add exchange rates to your wallets. @@ -15,7 +15,7 @@ $user->createWallet([ Service for working with currencies you need to write yourself or use [library](https://github.com/bavix/laravel-wallet-swap). -#### Service for working with currency +## Service for working with currency We will write a simple service. We will take the data from the array, and not from the database. @@ -55,7 +55,7 @@ class MyExchangeService implements ExchangeServiceInterface } ``` -#### Service Registration +## Service Registration The service you wrote must be registered, this is done in the file `config/wallet.php`. @@ -70,7 +70,7 @@ return [ ]; ``` -#### Exchange process +## Exchange process Create two wallets. @@ -104,8 +104,8 @@ Unfortunately, the world is not perfect. You will not get back your 100 rubles. ```php $transfer = $usd->exchange($rub, $usd->balance); -$usd->balance; 0 -$rub->balance; 9938 +$usd->balance; // 0 +$rub->balance; // 9938 ``` Due to conversion and mathematical rounding, you lost 62 kopecks. diff --git a/docs/refresh.md b/docs/guide/single/refresh.md similarity index 92% rename from docs/refresh.md rename to docs/guide/single/refresh.md index 430b84012..7f6999bec 100644 --- a/docs/refresh.md +++ b/docs/guide/single/refresh.md @@ -5,11 +5,9 @@ and then abruptly confirm everything. In this case, the user's balance will not change. You must be forced to refresh the balance. ---- - ## User Model -[User Simple](_include/models/user_simple.md ':include') + ## Get the current balance for your wallet diff --git a/docs/transfer.md b/docs/guide/single/transfer.md similarity index 89% rename from docs/transfer.md rename to docs/guide/single/transfer.md index 857705b94..45ed3dce5 100644 --- a/docs/transfer.md +++ b/docs/guide/single/transfer.md @@ -1,15 +1,13 @@ # Transfer -Transfer in our system are two well-known [Deposit](deposit) and [Withdraw](withdraw) +Transfer in our system are two well-known [Deposit](deposit.md) and [Withdraw](withdraw.md) operations that are performed in one transaction. The transfer takes place between wallets. ---- - ## User Model -[User Simple](_include/models/user_simple.md ':include') + ### Example contract diff --git a/docs/withdraw.md b/docs/guide/single/withdraw.md similarity index 94% rename from docs/withdraw.md rename to docs/guide/single/withdraw.md index ae58ba24f..084f65c36 100644 --- a/docs/withdraw.md +++ b/docs/guide/single/withdraw.md @@ -6,11 +6,9 @@ it or buy something in the system. Since the currency is virtual, you can buy any services on your website. For example, priority in search results. ---- - ## User Model -[User Simple](_include/models/user_simple.md ':include') + ## Make a Withdraw diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 662d90f9b..000000000 --- a/docs/index.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - Laravel Wallet - - - - - - - - -
    - - - - - - - - - - diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 000000000..d03c73d65 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,40 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "Laravel Wallet" + text: It's simple! + tagline: Easy work with virtual wallet + image: + src: https://github.com/bavix/laravel-wallet/assets/5111255/24cf424a-0177-4712-b74c-52b4ba88c428 + alt: Laravel Wallet + actions: + - theme: brand + text: Getting started + link: /guide/introduction/ + - theme: alt + text: Upgrade Guide + link: /guide/introduction/upgrade + +features: + - title: Default Wallet + details: For simple projects when there is no need for multiple wallets. + icon: 💰 + - title: Multi wallets + details: Many wallets for one model. Easy API. + icon: 🎒 + - title: Purchases + details: E-commerce. Create goods and buy them using wallets. There are also shopping carts, availability, taxes and fees. + icon: 🛍️ + - title: Exchanges + details: Exchanges between wallets. Convert currency from one wallet to another. + icon: 💱 + - title: Support UUID + details: Models with UUID are supported. + icon: ❄️ + - title: Events + details: For more complex projects there are events and high performance API. + icon: 📻 +--- + diff --git a/docs/src/gtag.js b/docs/src/gtag.js deleted file mode 100644 index 657c95dea..000000000 --- a/docs/src/gtag.js +++ /dev/null @@ -1,36 +0,0 @@ -function init(id) { - const script = document.createElement('script'); - script.async = true; - script.src = 'https://www.googletagmanager.com/gtag/js?id=' + id; - document.body.appendChild(script); - - window.dataLayer = window.dataLayer || []; - window.gtag = window.gtag || function gtag(){dataLayer.push(arguments);} - - window.gtag('js', new Date()); - window.gtag('config', id); -} - -function collect() { - if (window.dataLayer === undefined) { - init($docsify.ga) - } - - // usage: https://developers.google.com/analytics/devguides/collection/gtagjs/pages - window.gtag('event', 'page_view', { - page_title: document.title, - page_location: location.href, - page_path: location.pathname, - }); -} - -const install = function(hook) { - if (!$docsify.ga) { - console.error('[Docsify] ga is required.'); - return; - } - - hook.beforeEach(collect); -}; - -$docsify.plugins = [].concat(install, $docsify.plugins); diff --git a/docs/src/index.js b/docs/src/index.js deleted file mode 100644 index a40e02bf4..000000000 --- a/docs/src/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import 'docsify' -// import 'docsify/lib/plugins/ga' -import './gtag' -import 'docsify/lib/plugins/emoji' -import 'docsify/lib/plugins/search' -import 'prismjs/components/prism-php' -import 'prismjs/components/prism-bash' -import 'docsify/lib/themes/vue.css' diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 2053734dd..000000000 --- a/package-lock.json +++ /dev/null @@ -1,2172 +0,0 @@ -{ - "name": "laravel-wallet", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "laravel-wallet", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "axios": "^1.7.2", - "css-loader": "^7.1.2", - "docsify": "^4.11.4", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^2.9.0", - "prismjs": "^1.29.0", - "size-limit": "^11.1.4", - "uuid": "^10.0.0", - "webpack": "^5.92.1", - "webpack-cli": "^5.1.4" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "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" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "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" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@types/eslint": { - "version": "8.56.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" - }, - "node_modules/@types/node": { - "version": "20.12.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.13.tgz", - "integrity": "sha512-gBGeanV41c1L171rR7wjbMiEpEI/l5XFQdLLfhr/REwpgDy/4U8y89+i8kRiLzDyZdOkXh+cRaTetUnCYutoXA==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/ajv": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.14.0.tgz", - "integrity": "sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/anymatch": { - "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" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/bytes-iec": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes-iec/-/bytes-iec-3.1.1.tgz", - "integrity": "sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001625", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001625.tgz", - "integrity": "sha512-4KE9N2gcRH+HQhpeiRZXd+1niLB/XNLAhSy4z7fI8EzcbcPoAqjNInxVHTiTwWfTIV4w096XG8OtCOCQQKPv3w==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, - "node_modules/combined-stream": { - "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" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "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==" - }, - "node_modules/cross-spawn": { - "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" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-loader": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", - "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.27.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/docsify": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/docsify/-/docsify-4.13.1.tgz", - "integrity": "sha512-BsDypTBhw0mfslw9kZgAspCMZSM+sUIIDg5K/t1hNLkvbem9h64ZQc71e1IpY+iWsi/KdeqfazDfg52y2Lmm0A==", - "hasInstallScript": true, - "dependencies": { - "marked": "^1.2.9", - "medium-zoom": "^1.0.6", - "opencollective-postinstall": "^2.0.2", - "prismjs": "^1.27.0", - "strip-indent": "^3.0.0", - "tinydate": "^1.3.0", - "tweezer.js": "^1.4.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.787", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.787.tgz", - "integrity": "sha512-d0EFmtLPjctczO3LogReyM2pbBiiZbnsKnGF+cdZhsYzHm/A0GV7W94kqzLD8SN4O3f3iHlgLUChqghgyznvCQ==" - }, - "node_modules/enhanced-resolve": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", - "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/envinfo": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", - "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", - "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==" - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esrecurse": { - "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" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/fast-deep-equal": { - "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==" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "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==" - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "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" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob-parent": { - "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" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/globby": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", - "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "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==" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/is-binary-path": { - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/json-parse-even-better-errors": { - "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==" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lilconfig": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/locate-path": { - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/marked": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.9.tgz", - "integrity": "sha512-H8lIX2SvyitGX+TRdtS06m1jHMijKN/XjfH6Ooii9fvxMlh8QdqBfBDkGUpMWH2kQNrtixjzYUa3SH8ROTgRRw==", - "bin": { - "marked": "bin/marked" - }, - "engines": { - "node": ">= 8.16.2" - } - }, - "node_modules/medium-zoom": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz", - "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "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" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", - "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanospinner": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/nanospinner/-/nanospinner-1.1.0.tgz", - "integrity": "sha512-yFvNYMig4AthKYfHFl1sLj7B2nkHL4lzdig4osvl9/LdGbXwrdFRoqBS98gsEsOakr0yH+r5NZ/1Y9gdVB8trA==", - "dependencies": { - "picocolors": "^1.0.0" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "bin": { - "opencollective-postinstall": "index.js" - } - }, - "node_modules/p-limit": { - "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" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", - "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/size-limit": { - "version": "11.1.4", - "resolved": "https://registry.npmjs.org/size-limit/-/size-limit-11.1.4.tgz", - "integrity": "sha512-V2JAI/Z7h8sEuxU3V+Ig3XKA5FcYbI4CZ7sh6s7wvuy+TUwDZYqw7sAqrHhQ4cgcNfPKIAHAaH8VaqOdbcwJDA==", - "dependencies": { - "bytes-iec": "^3.1.1", - "chokidar": "^3.6.0", - "globby": "^14.0.1", - "jiti": "^1.21.0", - "lilconfig": "^3.1.1", - "nanospinner": "^1.1.0", - "picocolors": "^1.0.1" - }, - "bin": { - "size-limit": "bin.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - } - }, - "node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "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" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "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==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", - "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "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==" - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/tinydate": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz", - "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "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" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tweezer.js": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/tweezer.js/-/tweezer.js-1.5.0.tgz", - "integrity": "sha512-aSiJz7rGWNAQq7hjMK9ZYDuEawXupcCWgl3woQQSoDP2Oh8O4srWb/uO1PzzHIsrPEOqrjJ2sUb9FERfzuBabQ==" - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "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" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack": { - "version": "5.92.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.92.1.tgz", - "integrity": "sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", - "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^2.1.1", - "@webpack-cli/info": "^2.0.2", - "@webpack-cli/serve": "^2.0.5", - "colorette": "^2.0.14", - "commander": "^10.0.1", - "cross-spawn": "^7.0.3", - "envinfo": "^7.7.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "engines": { - "node": ">=14" - } - }, - "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "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==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/ajv": { - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "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==" - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/which": { - "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" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" - } - } -} diff --git a/package.json b/package.json index 36cd7fcd5..45e1db299 100644 --- a/package.json +++ b/package.json @@ -1,30 +1,7 @@ { - "name": "laravel-wallet", - "version": "1.0.0", - "description": "Package documentation", - "repository": { - "type": "git", - "url": "git+https://github.com/bavix/laravel-wallet.git" - }, - "author": "Maxim Babichev", - "license": "MIT", - "bugs": { - "url": "https://github.com/bavix/laravel-wallet/issues" - }, "scripts": { - "build": "webpack" - }, - "homepage": "https://bavix.github.io/laravel-wallet/", - "dependencies": { - "axios": "^1.7.2", - "css-loader": "^7.1.2", - "docsify": "^4.11.4", - "lodash": "^4.17.20", - "mini-css-extract-plugin": "^2.9.0", - "prismjs": "^1.29.0", - "size-limit": "^11.1.4", - "uuid": "^10.0.0", - "webpack": "^5.92.1", - "webpack-cli": "^5.1.4" + "docs:dev": "vitepress dev docs", + "docs:build": "vitepress build docs", + "docs:preview": "vitepress preview docs" } -} +} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 49473240b..000000000 --- a/webpack.config.js +++ /dev/null @@ -1,32 +0,0 @@ -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); -const path = require('path'); - -module.exports = { - mode: 'production', - entry: './docs/src/index.js', - plugins: [ - new MiniCssExtractPlugin({ - filename: 'bundle.css', - }), - ], - module: { - rules: [ - { - test: /\.css$/, - use: [ - { - loader: MiniCssExtractPlugin.loader, - options: { - publicPath: '/docs/dist/', - }, - }, - 'css-loader', - ], - }, - ], - }, - output: { - path: path.resolve(__dirname + '/docs', 'dist'), - filename: 'bundle.js' - } -};